From 1afca056e3b1da63ff3a7d1f7ceab7b372ffd0d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:28:50 +0000 Subject: [PATCH 01/23] Bump the npm group across 1 directory with 8 updates Bumps the npm group with 8 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.9.1` | `9.10.0` | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.4.0` | `8.6.0` | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.4.0` | `8.6.0` | | [eslint](https://github.com/eslint/eslint) | `8.57.0` | `8.57.1` | | [eslint-plugin-github](https://github.com/github/eslint-plugin-github) | `5.0.1` | `5.0.2` | | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | `2.29.1` | `2.30.0` | | [sinon](https://github.com/sinonjs/sinon) | `18.0.0` | `19.0.2` | | [typescript](https://github.com/microsoft/TypeScript) | `5.5.4` | `5.6.2` | Updates `@eslint/js` from 9.9.1 to 9.10.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.10.0/packages/js) Updates `@typescript-eslint/eslint-plugin` from 8.4.0 to 8.6.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.6.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.4.0 to 8.6.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.6.0/packages/parser) Updates `eslint` from 8.57.0 to 8.57.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.57.0...v8.57.1) Updates `eslint-plugin-github` from 5.0.1 to 5.0.2 - [Release notes](https://github.com/github/eslint-plugin-github/releases) - [Commits](https://github.com/github/eslint-plugin-github/compare/v5.0.1...v5.0.2) Updates `eslint-plugin-import` from 2.29.1 to 2.30.0 - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0) Updates `sinon` from 18.0.0 to 19.0.2 - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md) - [Commits](https://github.com/sinonjs/sinon/compare/v18.0.0...v19.0.2) Updates `typescript` from 5.5.4 to 5.6.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.5.4...v5.6.2) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm - dependency-name: eslint-plugin-github dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: sinon dependency-type: direct:development update-type: version-update:semver-major dependency-group: npm - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm ... Signed-off-by: dependabot[bot] --- package-lock.json | 1200 ++++++++++++++++++++++++--------------------- package.json | 16 +- 2 files changed, 639 insertions(+), 577 deletions(-) diff --git a/package-lock.json b/package-lock.json index 178b75d5f8..adc44551c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "@ava/typescript": "4.1.0", "@eslint/compat": "^1.1.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.9.1", + "@eslint/js": "^9.10.0", "@microsoft/eslint-formatter-sarif": "^3.1.0", "@types/adm-zip": "^0.5.5", "@types/console-log-level": "^1.4.5", @@ -52,20 +52,20 @@ "@types/node": "20.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^8.4.0", - "@typescript-eslint/parser": "^8.4.0", + "@typescript-eslint/eslint-plugin": "^8.6.0", + "@typescript-eslint/parser": "^8.6.0", "ava": "^5.3.1", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-github": "^5.0.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-github": "^5.0.2", + "eslint-plugin-import": "^2.30.0", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", "removeNPMAbsolutePaths": "3.0.1", - "sinon": "^18.0.0", - "typescript": "^5.5.4" + "sinon": "^19.0.2", + "typescript": "^5.6.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -519,9 +519,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.9.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz", - "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==", + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -533,11 +533,13 @@ "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -558,9 +560,11 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@microsoft/eslint-formatter-sarif": { "version": "3.1.0", @@ -863,48 +867,59 @@ "dev": true, "license": "0BSD" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "11.2.2", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.2.tgz", + "integrity": "sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.0", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", + "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=4" } }, "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true }, "node_modules/@types/adm-zip": { "version": "0.5.5", @@ -1004,16 +1019,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz", - "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", + "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/type-utils": "8.4.0", - "@typescript-eslint/utils": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/type-utils": "8.6.0", + "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1037,15 +1052,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz", - "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", + "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4" }, "engines": { @@ -1065,13 +1080,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz", - "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", + "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0" + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1082,13 +1097,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz", - "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", + "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/utils": "8.4.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/utils": "8.6.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1106,9 +1121,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz", - "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", + "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1119,13 +1134,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz", - "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", + "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1171,15 +1186,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz", - "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", + "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0" + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1193,12 +1208,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz", - "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", + "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/types": "8.6.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1334,12 +1349,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1354,14 +1373,16 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -1379,15 +1400,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1431,15 +1454,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -1612,9 +1638,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1742,12 +1772,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2071,6 +2108,57 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-time": { "version": "3.1.0", "dev": true, @@ -2126,11 +2214,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -2168,6 +2251,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "dev": true, @@ -2180,10 +2280,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -2272,9 +2374,10 @@ } }, "node_modules/diff": { - "version": "5.2.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2340,49 +2443,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -2391,6 +2502,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "dev": true, @@ -2410,30 +2542,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT" + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -2469,15 +2610,16 @@ } }, "node_modules/eslint": { - "version": "8.57.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2587,9 +2729,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz", - "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", + "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -2643,254 +2785,46 @@ "node_modules/eslint-plugin-filenames": { "version": "1.3.2", "dev": true, - "license": "MIT", - "dependencies": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.upperfirst": "4.3.1" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/eslint-plugin-github": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@github/browserslist-config": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", - "aria-query": "^5.3.0", - "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.3.3", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-no-only-tests": "^3.0.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-rule-documentation": ">=1.0.0", - "jsx-ast-utils": "^3.3.2", - "prettier": "^3.0.0", - "svg-element-attributes": "^1.3.1" - }, - "bin": { - "eslint-ignore-errors": "bin/eslint-ignore-errors.js" - }, - "peerDependencies": { - "eslint": "^8.0.1" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.upperfirst": "4.3.1" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/eslint-plugin-github/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/eslint-plugin-github": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.0.2.tgz", + "integrity": "sha512-nMdzWJQ5CimjQDY6SFeJ0KIXuNFf0dgDWEd4eP3UWfuTuP/dXcZJDg7MQRvAFt743T1zUi4+/HdOihfu8xJkLA==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@github/browserslist-config": "^1.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "aria-query": "^5.3.0", + "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.3.3", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-i18n-text": "^1.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-only-tests": "^3.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-rule-documentation": ">=1.0.0", + "jsx-ast-utils": "^3.3.2", + "prettier": "^3.0.0", + "svg-element-attributes": "^1.3.1" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "eslint-ignore-errors": "bin/eslint-ignore-errors.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "eslint": "^8.0.1" } }, "node_modules/eslint-plugin-i18n-text": { @@ -2902,25 +2836,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, @@ -3086,9 +3022,9 @@ } }, "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3530,14 +3466,15 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -3578,14 +3515,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3603,12 +3545,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -3725,20 +3669,22 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3758,11 +3704,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3772,9 +3719,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3860,12 +3808,13 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -3896,13 +3845,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3966,11 +3918,30 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4060,9 +4031,10 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4141,11 +4113,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4191,15 +4167,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4275,6 +4248,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -4354,8 +4333,9 @@ }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/language-subtag-registry": { "version": "0.3.22", @@ -4419,8 +4399,9 @@ }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.kebabcase": { "version": "4.1.1", @@ -4589,15 +4570,16 @@ "license": "MIT" }, "node_modules/nise": { - "version": "6.0.0", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" + "path-to-regexp": "^8.1.0" } }, "node_modules/nock": { @@ -4687,9 +4669,13 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4718,12 +4704,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -4748,13 +4735,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4764,24 +4753,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4978,9 +4971,13 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "6.2.2", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", + "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -5033,6 +5030,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -5138,13 +5144,15 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5381,12 +5389,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -5397,20 +5406,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5455,6 +5463,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -5493,16 +5533,17 @@ "license": "ISC" }, "node_modules/sinon": { - "version": "18.0.0", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", + "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.2.0", - "nise": "^6.0.0", - "supports-color": "^7" + "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" }, "funding": { "type": "opencollective", @@ -5610,13 +5651,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5626,26 +5669,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5913,8 +5961,9 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5931,27 +5980,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5961,15 +6013,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5979,22 +6033,29 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6155,15 +6216,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index d0a3185f96..f2c21d05d2 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@ava/typescript": "4.1.0", "@eslint/compat": "^1.1.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.9.1", + "@eslint/js": "^9.10.0", "@microsoft/eslint-formatter-sarif": "^3.1.0", "@types/adm-zip": "^0.5.5", "@types/console-log-level": "^1.4.5", @@ -68,20 +68,20 @@ "@types/node": "20.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^8.4.0", - "@typescript-eslint/parser": "^8.4.0", + "@typescript-eslint/eslint-plugin": "^8.6.0", + "@typescript-eslint/parser": "^8.6.0", "ava": "^5.3.1", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-github": "^5.0.1", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-github": "^5.0.2", + "eslint-plugin-import": "^2.30.0", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", "removeNPMAbsolutePaths": "3.0.1", - "sinon": "^18.0.0", - "typescript": "^5.5.4" + "sinon": "^19.0.2", + "typescript": "^5.6.2" }, "overrides": { "@actions/tool-cache": { From 6989ba7bd25287394ae19e3c79fa51a61613f05e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:29:58 +0000 Subject: [PATCH 02/23] Update checked-in dependencies --- node_modules/.package-lock.json | 1184 +- node_modules/@eslint/js/package.json | 2 +- .../@humanwhocodes/config-array/api.js | 130 +- .../@humanwhocodes/config-array/package.json | 8 +- .../@humanwhocodes/object-schema/.eslintrc.js | 29 - .../.github/workflows/nodejs-test.yml | 27 - .../.github/workflows/release-please.yml | 39 - .../@humanwhocodes/object-schema/CHANGELOG.md | 7 + .../@humanwhocodes/object-schema/package.json | 7 +- .../object-schema/tests/merge-strategy.js | 66 - .../object-schema/tests/object-schema.js | 659 - .../tests/validation-strategy.js | 186 - .../isarray => @rtsao/scc}/LICENSE | 2 +- node_modules/@rtsao/scc/README.md | 49 + node_modules/@rtsao/scc/index.d.ts | 1 + node_modules/@rtsao/scc/index.js | 51 + node_modules/@rtsao/scc/index.js.flow | 5 + node_modules/@rtsao/scc/package.json | 7 + node_modules/@sinonjs/fake-timers/README.md | 85 +- .../@sinonjs/fake-timers/package.json | 45 +- .../fake-timers/src/fake-timers-src.js | 558 +- node_modules/@sinonjs/samsam/docs/index.md | 10 +- .../@sinonjs/samsam/lib/create-matcher.js | 221 +- .../samsam/lib/create-matcher/assert-type.js | 2 +- .../samsam/lib/create-matcher/match-object.js | 4 + .../@sinonjs/samsam/lib/create-set.js | 2 +- .../@sinonjs/samsam/lib/deep-equal.js | 6 +- node_modules/@sinonjs/samsam/lib/match.js | 6 +- .../node_modules/@sinonjs/commons/LICENSE | 29 - .../node_modules/@sinonjs/commons/README.md | 16 - .../@sinonjs/commons/lib/called-in-order.js | 57 - .../commons/lib/called-in-order.test.js | 121 - .../@sinonjs/commons/lib/class-name.js | 27 - .../@sinonjs/commons/lib/class-name.test.js | 37 - .../@sinonjs/commons/lib/deprecated.js | 51 - .../@sinonjs/commons/lib/deprecated.test.js | 101 - .../@sinonjs/commons/lib/every.js | 27 - .../@sinonjs/commons/lib/every.test.js | 41 - .../@sinonjs/commons/lib/function-name.js | 29 - .../commons/lib/function-name.test.js | 76 - .../@sinonjs/commons/lib/global.js | 22 - .../@sinonjs/commons/lib/global.test.js | 16 - .../@sinonjs/commons/lib/index.js | 14 - .../@sinonjs/commons/lib/index.test.js | 31 - .../commons/lib/order-by-first-call.js | 36 - .../commons/lib/order-by-first-call.test.js | 52 - .../@sinonjs/commons/lib/prototypes/README.md | 43 - .../@sinonjs/commons/lib/prototypes/array.js | 5 - .../lib/prototypes/copy-prototype-methods.js | 40 - .../prototypes/copy-prototype-methods.test.js | 12 - .../commons/lib/prototypes/function.js | 5 - .../@sinonjs/commons/lib/prototypes/index.js | 10 - .../commons/lib/prototypes/index.test.js | 61 - .../@sinonjs/commons/lib/prototypes/map.js | 5 - .../@sinonjs/commons/lib/prototypes/object.js | 5 - .../@sinonjs/commons/lib/prototypes/set.js | 5 - .../@sinonjs/commons/lib/prototypes/string.js | 5 - .../commons/lib/prototypes/throws-on-proto.js | 26 - .../@sinonjs/commons/lib/type-of.js | 13 - .../@sinonjs/commons/lib/type-of.test.js | 51 - .../@sinonjs/commons/lib/value-to-string.js | 17 - .../commons/lib/value-to-string.test.js | 20 - .../@sinonjs/commons/package.json | 57 - .../commons/types/called-in-order.d.ts | 36 - .../@sinonjs/commons/types/class-name.d.ts | 8 - .../@sinonjs/commons/types/deprecated.d.ts | 3 - .../@sinonjs/commons/types/every.d.ts | 2 - .../@sinonjs/commons/types/function-name.d.ts | 2 - .../@sinonjs/commons/types/global.d.ts | 7 - .../@sinonjs/commons/types/index.d.ts | 17 - .../commons/types/order-by-first-call.d.ts | 26 - .../commons/types/prototypes/array.d.ts | 2 - .../prototypes/copy-prototype-methods.d.ts | 2 - .../commons/types/prototypes/function.d.ts | 2 - .../commons/types/prototypes/index.d.ts | 7 - .../commons/types/prototypes/map.d.ts | 2 - .../commons/types/prototypes/object.d.ts | 2 - .../commons/types/prototypes/set.d.ts | 2 - .../commons/types/prototypes/string.d.ts | 2 - .../types/prototypes/throws-on-proto.d.ts | 12 - .../@sinonjs/commons/types/type-of.d.ts | 2 - .../commons/types/value-to-string.d.ts | 8 - .../samsam/node_modules/type-detect}/LICENSE | 12 +- .../samsam/node_modules/type-detect/README.md | 235 + .../node_modules/type-detect/index.d.ts | 1 + .../samsam/node_modules/type-detect/index.js | 129 + .../samsam/node_modules/type-detect/index.ts | 393 + .../node_modules/type-detect/package.json | 113 + .../node_modules/type-detect/type-detect.js | 139 + node_modules/@sinonjs/samsam/package.json | 34 +- .../@sinonjs/samsam/types/create-matcher.d.ts | 34 +- .../@sinonjs/text-encoding/package.json | 5 +- .../rules/class-literal-property-style.js | 20 +- .../rules/class-literal-property-style.js.map | 2 +- .../dist/rules/class-methods-use-this.js | 4 +- .../dist/rules/class-methods-use-this.js.map | 2 +- .../dist/rules/consistent-type-assertions.js | 4 +- .../rules/consistent-type-assertions.js.map | 2 +- .../dist/rules/consistent-type-exports.js | 2 +- .../dist/rules/consistent-type-exports.js.map | 2 +- .../rules/explicit-module-boundary-types.js | 12 +- .../explicit-module-boundary-types.js.map | 2 +- .../dist/rules/member-ordering.js | 109 +- .../dist/rules/member-ordering.js.map | 2 +- .../naming-convention-utils/parse-options.js | 10 +- .../parse-options.js.map | 2 +- .../eslint-plugin/dist/rules/no-deprecated.js | 27 +- .../dist/rules/no-deprecated.js.map | 2 +- .../rules/no-duplicate-type-constituents.js | 113 +- .../no-duplicate-type-constituents.js.map | 2 +- .../dist/rules/no-floating-promises.js | 71 +- .../dist/rules/no-floating-promises.js.map | 2 +- .../dist/rules/no-misused-promises.js | 27 + .../dist/rules/no-misused-promises.js.map | 2 +- .../eslint-plugin/dist/rules/no-shadow.js | 2 +- .../eslint-plugin/dist/rules/no-shadow.js.map | 2 +- .../eslint-plugin/dist/rules/no-type-alias.js | 5 +- .../dist/rules/no-type-alias.js.map | 2 +- .../dist/rules/no-unnecessary-condition.js | 69 +- .../rules/no-unnecessary-condition.js.map | 2 +- .../rules/no-unnecessary-type-assertion.js | 24 +- .../no-unnecessary-type-assertion.js.map | 2 +- .../rules/no-unnecessary-type-parameters.js | 15 +- .../no-unnecessary-type-parameters.js.map | 2 +- .../dist/rules/no-unsafe-argument.js | 61 +- .../dist/rules/no-unsafe-argument.js.map | 2 +- .../eslint-plugin/dist/rules/prefer-find.js | 18 +- .../dist/rules/prefer-find.js.map | 2 +- .../dist/rules/prefer-function-type.js | 7 +- .../dist/rules/prefer-function-type.js.map | 2 +- .../dist/rules/prefer-includes.js | 7 +- .../dist/rules/prefer-includes.js.map | 2 +- .../rules/prefer-promise-reject-errors.js | 6 +- .../rules/prefer-promise-reject-errors.js.map | 2 +- .../dist/rules/prefer-readonly.js | 4 +- .../dist/rules/prefer-readonly.js.map | 2 +- .../rules/prefer-reduce-type-parameter.js | 13 +- .../rules/prefer-reduce-type-parameter.js.map | 2 +- .../dist/rules/prefer-regexp-exec.js | 5 +- .../dist/rules/prefer-regexp-exec.js.map | 2 +- .../rules/prefer-string-starts-ends-with.js | 9 +- .../prefer-string-starts-ends-with.js.map | 2 +- .../dist/rules/require-array-sort-compare.js | 6 +- .../rules/require-array-sort-compare.js.map | 2 +- .../rules/restrict-template-expressions.js | 26 +- .../restrict-template-expressions.js.map | 2 +- .../dist/rules/unified-signatures.js | 2 +- .../dist/rules/unified-signatures.js.map | 2 +- .../use-unknown-in-catch-callback-variable.js | 12 +- ...-unknown-in-catch-callback-variable.js.map | 2 +- .../eslint-plugin/dist/util/index.js | 1 + .../eslint-plugin/dist/util/index.js.map | 2 +- .../util/isArrayMethodCallWithPredicate.js} | 35 +- .../isArrayMethodCallWithPredicate.js.map | 1 + .../eslint-plugin/dist/util/misc.js | 26 +- .../eslint-plugin/dist/util/misc.js.map | 2 +- .../rules/no-duplicate-type-constituents.mdx | 7 + .../docs/rules/no-floating-promises.mdx | 2 +- .../docs/rules/no-misused-promises.mdx | 5 + .../eslint-plugin/docs/rules/no-redeclare.mdx | 2 +- .../docs/rules/no-unnecessary-condition.mdx | 5 + .../docs/rules/no-unsafe-argument.mdx | 2 +- .../docs/rules/prefer-nullish-coalescing.mdx | 6 +- .../rules/restrict-template-expressions.mdx | 19 +- .../docs/rules/strict-boolean-expressions.mdx | 6 +- .../eslint-plugin/package.json | 14 +- .../parser/dist/parser.d.ts.map | 2 +- .../@typescript-eslint/parser/dist/parser.js | 10 +- .../parser/dist/parser.js.map | 2 +- .../@typescript-eslint/parser/package.json | 10 +- .../scope-manager/dist/ScopeManager.js | 2 +- .../scope-manager/dist/ScopeManager.js.map | 2 +- .../scope-manager/package.json | 8 +- .../type-utils/dist/TypeOrValueSpecifier.d.ts | 83 +- .../dist/TypeOrValueSpecifier.d.ts.map | 2 +- .../type-utils/dist/TypeOrValueSpecifier.js | 163 +- .../dist/TypeOrValueSpecifier.js.map | 2 +- .../type-utils/dist/isTypeReadonly.d.ts | 81 +- .../type-utils/dist/isTypeReadonly.d.ts.map | 2 +- .../type-utils/dist/isTypeReadonly.js | 7 +- .../type-utils/dist/isTypeReadonly.js.map | 2 +- .../type-utils/dist/predicates.d.ts.map | 2 +- .../type-utils/dist/predicates.js | 3 +- .../type-utils/dist/predicates.js.map | 2 +- .../type-utils/package.json | 8 +- .../types/dist/parser-options.d.ts | 5 + .../types/dist/parser-options.d.ts.map | 2 +- .../@typescript-eslint/types/package.json | 2 +- .../typescript-estree/dist/convert.js | 4 +- .../typescript-estree/dist/convert.js.map | 2 +- .../createProjectProgramError.js | 2 +- .../createProjectProgramError.js.map | 2 +- .../createProjectService.d.ts.map | 2 +- .../create-program/createProjectService.js | 36 +- .../createProjectService.js.map | 2 +- .../getParsedConfigFile.d.ts.map | 2 +- .../create-program/getParsedConfigFile.js | 2 +- .../create-program/getParsedConfigFile.js.map | 2 +- .../getWatchProgramsForProjects.js | 2 +- .../getWatchProgramsForProjects.js.map | 2 +- .../validateDefaultProjectForFilesGlob.d.ts | 3 +- ...alidateDefaultProjectForFilesGlob.d.ts.map | 2 +- .../validateDefaultProjectForFilesGlob.js | 6 +- .../validateDefaultProjectForFilesGlob.js.map | 2 +- .../typescript-estree/dist/getModifiers.js | 4 +- .../dist/getModifiers.js.map | 2 +- .../parseSettings/resolveProjectList.d.ts.map | 2 +- .../dist/parseSettings/resolveProjectList.js | 16 +- .../parseSettings/resolveProjectList.js.map | 2 +- .../parseSettings/warnAboutTSVersion.d.ts.map | 2 +- .../dist/parseSettings/warnAboutTSVersion.js | 4 +- .../parseSettings/warnAboutTSVersion.js.map | 2 +- .../dist/useProgramFromProjectService.js | 2 +- .../dist/useProgramFromProjectService.js.map | 2 +- .../typescript-estree/package.json | 6 +- .../dist/eslint-utils/applyDefault.d.ts.map | 2 +- .../utils/dist/eslint-utils/applyDefault.js | 2 +- .../dist/eslint-utils/applyDefault.js.map | 2 +- .../dist/eslint-utils/deepMerge.d.ts.map | 2 +- .../utils/dist/eslint-utils/deepMerge.js | 17 +- .../utils/dist/eslint-utils/deepMerge.js.map | 2 +- .../@typescript-eslint/utils/package.json | 8 +- .../visitor-keys/package.json | 4 +- .../array-buffer-byte-length/.eslintrc | 4 + .../array-buffer-byte-length/CHANGELOG.md | 12 + .../array-buffer-byte-length/index.d.ts | 4 + .../array-buffer-byte-length/index.js | 1 + .../array-buffer-byte-length/package.json | 28 +- .../array-buffer-byte-length/test/index.js | 3 + .../array-buffer-byte-length/tsconfig.json | 49 + node_modules/array-includes/CHANGELOG.md | 10 + node_modules/array-includes/implementation.js | 8 +- node_modules/array-includes/index.js | 2 +- node_modules/array-includes/package.json | 18 +- node_modules/array-includes/test/shimmed.js | 4 +- .../CHANGELOG.md | 20 + .../implementation.js | 17 +- .../array.prototype.findlastindex/index.js | 2 +- .../array.prototype.findlastindex/index.mjs | 18 - .../package.json | 36 +- .../test/index.mjs | 31 - .../test/shimmed.js | 9 +- .../arraybuffer.prototype.slice/CHANGELOG.md | 16 + .../implementation.js | 14 +- .../arraybuffer.prototype.slice/package.json | 23 +- .../arraybuffer.prototype.slice/test/tests.js | 2 +- .../available-typed-arrays/.eslintignore | 1 - node_modules/available-typed-arrays/.eslintrc | 4 - .../available-typed-arrays/CHANGELOG.md | 21 + node_modules/available-typed-arrays/README.md | 29 +- .../available-typed-arrays/index.d.ts | 8 + node_modules/available-typed-arrays/index.js | 18 +- .../available-typed-arrays/package.json | 41 +- .../available-typed-arrays/tsconfig.json | 49 + node_modules/call-bind/.eslintrc | 1 - node_modules/call-bind/.nycrc | 4 - node_modules/call-bind/CHANGELOG.md | 51 + node_modules/call-bind/README.md | 64 +- node_modules/call-bind/index.js | 34 +- node_modules/call-bind/package.json | 61 +- node_modules/call-bind/test/callBound.js | 1 - node_modules/call-bind/test/index.js | 22 +- node_modules/data-view-buffer/.eslintrc | 17 + .../data-view-buffer/.github/FUNDING.yml | 12 + node_modules/data-view-buffer/.nycrc | 13 + node_modules/data-view-buffer/CHANGELOG.md | 22 + .../LICENSE | 2 +- node_modules/data-view-buffer/README.md | 43 + node_modules/data-view-buffer/index.d.ts | 4 + node_modules/data-view-buffer/index.js | 19 + node_modules/data-view-buffer/package.json | 88 + node_modules/data-view-buffer/test/index.js | 31 + node_modules/data-view-buffer/tsconfig.json | 50 + node_modules/data-view-byte-length/.eslintrc | 17 + .../data-view-byte-length/.github/FUNDING.yml | 12 + node_modules/data-view-byte-length/.nycrc | 13 + .../data-view-byte-length/CHANGELOG.md | 24 + .../isarray => data-view-byte-length}/LICENSE | 2 +- node_modules/data-view-byte-length/README.md | 43 + node_modules/data-view-byte-length/index.d.ts | 4 + node_modules/data-view-byte-length/index.js | 19 + .../data-view-byte-length/package.json | 94 + .../data-view-byte-length/test/index.js | 31 + .../data-view-byte-length/tsconfig.json | 9 + node_modules/data-view-byte-offset/.eslintrc | 17 + .../data-view-byte-offset/.github/FUNDING.yml | 12 + node_modules/data-view-byte-offset/.nycrc | 13 + .../data-view-byte-offset/CHANGELOG.md | 15 + .../LICENSE | 2 +- node_modules/data-view-byte-offset/README.md | 43 + node_modules/data-view-byte-offset/index.d.ts | 4 + node_modules/data-view-byte-offset/index.js | 19 + .../data-view-byte-offset/package.json | 93 + .../data-view-byte-offset/test/index.js | 31 + .../data-view-byte-offset/tsconfig.json | 50 + node_modules/define-data-property/.eslintrc | 24 + .../define-data-property/.github/FUNDING.yml | 12 + node_modules/define-data-property/.nycrc | 13 + .../define-data-property/CHANGELOG.md | 70 + node_modules/define-data-property/LICENSE | 21 + node_modules/define-data-property/README.md | 67 + node_modules/define-data-property/index.d.ts | 12 + node_modules/define-data-property/index.js | 56 + .../define-data-property/package.json | 106 + .../define-data-property/test/index.js | 392 + .../define-data-property/tsconfig.json | 59 + node_modules/define-properties/CHANGELOG.md | 8 + node_modules/define-properties/index.js | 16 +- node_modules/define-properties/package.json | 9 +- node_modules/diff/CONTRIBUTING.md | 10 +- node_modules/diff/README.md | 71 +- node_modules/diff/dist/diff.js | 1720 +- node_modules/diff/dist/diff.min.js | 38 +- node_modules/diff/lib/convert/dmp.js | 11 +- node_modules/diff/lib/convert/xml.js | 9 +- node_modules/diff/lib/diff/array.js | 20 +- node_modules/diff/lib/diff/base.js | 188 +- node_modules/diff/lib/diff/character.js | 18 +- node_modules/diff/lib/diff/css.js | 19 +- node_modules/diff/lib/diff/json.js | 94 +- node_modules/diff/lib/diff/line.js | 79 +- node_modules/diff/lib/diff/sentence.js | 17 +- node_modules/diff/lib/diff/word.js | 525 +- node_modules/diff/lib/index.es6.js | 1676 +- node_modules/diff/lib/index.js | 103 +- node_modules/diff/lib/index.mjs | 1676 +- node_modules/diff/lib/patch/apply.js | 411 +- node_modules/diff/lib/patch/create.js | 497 +- node_modules/diff/lib/patch/line-endings.js | 176 + node_modules/diff/lib/patch/merge.js | 186 +- node_modules/diff/lib/patch/parse.js | 130 +- node_modules/diff/lib/patch/reverse.js | 19 +- node_modules/diff/lib/util/array.js | 7 +- .../diff/lib/util/distance-iterator.js | 33 +- node_modules/diff/lib/util/params.js | 4 +- node_modules/diff/lib/util/string.js | 131 + node_modules/diff/package.json | 51 +- node_modules/diff/release-notes.md | 46 +- node_modules/es-abstract/.eslintrc | 6 + .../2015/AbstractRelationalComparison.js | 7 +- .../es-abstract/2015/AdvanceStringIndex.js | 10 +- node_modules/es-abstract/2015/ArrayCreate.js | 6 +- .../es-abstract/2015/ArraySetLength.js | 16 +- .../es-abstract/2015/ArraySpeciesCreate.js | 2 +- node_modules/es-abstract/2015/Call.js | 2 +- .../2015/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2015/Canonicalize.js | 18 +- .../es-abstract/2015/CharacterRange.js | 2 +- .../2015/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2015/CompletionRecord.js | 4 +- .../es-abstract/2015/CreateDataProperty.js | 4 +- .../2015/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2015/CreateHTML.js | 7 +- .../2015/CreateIterResultObject.js | 8 +- .../2015/CreateListFromArrayLike.js | 4 +- .../es-abstract/2015/CreateMethodProperty.js | 4 +- node_modules/es-abstract/2015/DateFromTime.js | 4 +- .../es-abstract/2015/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2015/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2015/DetachArrayBuffer.js | 28 +- .../es-abstract/2015/EnumerableOwnNames.js | 4 +- .../2015/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2015/Get.js | 4 +- node_modules/es-abstract/2015/GetIterator.js | 4 +- node_modules/es-abstract/2015/GetMethod.js | 4 +- .../es-abstract/2015/GetOwnPropertyKeys.js | 2 +- .../2015/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2015/GetSubstitution.js | 17 +- node_modules/es-abstract/2015/GetV.js | 4 +- .../es-abstract/2015/GetValueFromBuffer.js | 17 +- .../es-abstract/2015/HasOwnProperty.js | 8 +- node_modules/es-abstract/2015/HasProperty.js | 4 +- node_modules/es-abstract/2015/InLeapYear.js | 4 +- .../es-abstract/2015/InstanceofOperator.js | 2 +- .../2015/IntegerIndexedElementGet.js | 58 + .../2015/IntegerIndexedElementSet.js | 58 + .../2015/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2015/Invoke.js | 4 +- .../es-abstract/2015/IsAccessorDescriptor.js | 12 +- .../es-abstract/2015/IsDataDescriptor.js | 12 +- .../es-abstract/2015/IsDetachedBuffer.js | 4 +- .../es-abstract/2015/IsGenericDescriptor.js | 9 +- .../es-abstract/2015/IsPropertyDescriptor.js | 12 +- node_modules/es-abstract/2015/IsWordChar.js | 4 +- .../es-abstract/2015/IteratorClose.js | 4 +- .../es-abstract/2015/IteratorComplete.js | 4 +- node_modules/es-abstract/2015/IteratorNext.js | 4 +- .../es-abstract/2015/IteratorValue.js | 4 +- .../es-abstract/2015/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2015/ObjectCreate.js | 4 +- .../2015/OrdinaryCreateFromConstructor.js | 2 +- .../2015/OrdinaryDefineOwnProperty.js | 15 +- .../2015/OrdinaryGetOwnProperty.js | 8 +- .../es-abstract/2015/OrdinaryHasInstance.js | 4 +- .../es-abstract/2015/OrdinaryHasProperty.js | 4 +- .../es-abstract/2015/QuoteJSONString.js | 8 +- node_modules/es-abstract/2015/RegExpExec.js | 8 +- .../2015/RequireObjectCoercible.js | 2 +- node_modules/es-abstract/2015/Set.js | 6 +- .../es-abstract/2015/SetFunctionName.js | 14 +- .../es-abstract/2015/SetIntegrityLevel.js | 4 +- .../es-abstract/2015/SetValueInBuffer.js | 26 +- .../es-abstract/2015/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2015/SplitMatch.js | 9 +- node_modules/es-abstract/2015/StringCreate.js | 9 +- .../2015/StringGetIndexProperty.js | 6 +- .../2015/SymbolDescriptiveString.js | 8 +- .../es-abstract/2015/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2015/ToDateString.js | 6 +- node_modules/es-abstract/2015/ToNumber.js | 2 +- node_modules/es-abstract/2015/ToObject.js | 11 +- .../es-abstract/2015/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2015/ToString.js | 2 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2015/ValidateTypedArray.js | 22 +- .../2015/tables/typed-array-objects.js | 31 + .../es-abstract/2015/thisBooleanValue.js | 4 +- .../es-abstract/2015/thisNumberValue.js | 4 +- .../es-abstract/2015/thisStringValue.js | 4 +- .../2016/AbstractRelationalComparison.js | 7 +- .../es-abstract/2016/AdvanceStringIndex.js | 10 +- node_modules/es-abstract/2016/ArrayCreate.js | 6 +- .../es-abstract/2016/ArraySetLength.js | 16 +- .../es-abstract/2016/ArraySpeciesCreate.js | 2 +- node_modules/es-abstract/2016/Call.js | 2 +- .../2016/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2016/Canonicalize.js | 18 +- .../es-abstract/2016/CharacterRange.js | 2 +- .../2016/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2016/CompletionRecord.js | 4 +- .../es-abstract/2016/CreateDataProperty.js | 4 +- .../2016/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2016/CreateHTML.js | 7 +- .../2016/CreateIterResultObject.js | 8 +- .../2016/CreateListFromArrayLike.js | 4 +- .../es-abstract/2016/CreateMethodProperty.js | 4 +- node_modules/es-abstract/2016/DateFromTime.js | 4 +- .../es-abstract/2016/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2016/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2016/DetachArrayBuffer.js | 28 +- .../es-abstract/2016/EnumerableOwnNames.js | 4 +- .../2016/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2016/Get.js | 4 +- node_modules/es-abstract/2016/GetIterator.js | 4 +- node_modules/es-abstract/2016/GetMethod.js | 4 +- .../es-abstract/2016/GetOwnPropertyKeys.js | 2 +- .../2016/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2016/GetSubstitution.js | 17 +- node_modules/es-abstract/2016/GetV.js | 4 +- .../es-abstract/2016/GetValueFromBuffer.js | 17 +- .../es-abstract/2016/HasOwnProperty.js | 8 +- node_modules/es-abstract/2016/HasProperty.js | 4 +- node_modules/es-abstract/2016/InLeapYear.js | 4 +- .../es-abstract/2016/InstanceofOperator.js | 2 +- .../2016/IntegerIndexedElementGet.js | 58 + .../2016/IntegerIndexedElementSet.js | 58 + .../2016/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2016/Invoke.js | 4 +- .../es-abstract/2016/IsAccessorDescriptor.js | 12 +- .../es-abstract/2016/IsDataDescriptor.js | 12 +- .../es-abstract/2016/IsDetachedBuffer.js | 4 +- .../es-abstract/2016/IsGenericDescriptor.js | 9 +- .../es-abstract/2016/IsPropertyDescriptor.js | 12 +- node_modules/es-abstract/2016/IsWordChar.js | 4 +- .../es-abstract/2016/IteratorClose.js | 4 +- .../es-abstract/2016/IteratorComplete.js | 4 +- node_modules/es-abstract/2016/IteratorNext.js | 4 +- .../es-abstract/2016/IteratorValue.js | 4 +- .../es-abstract/2016/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2016/ObjectCreate.js | 4 +- .../2016/OrdinaryCreateFromConstructor.js | 2 +- .../2016/OrdinaryDefineOwnProperty.js | 15 +- .../2016/OrdinaryGetOwnProperty.js | 8 +- .../2016/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2016/OrdinaryHasInstance.js | 4 +- .../es-abstract/2016/OrdinaryHasProperty.js | 4 +- .../2016/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2016/QuoteJSONString.js | 8 +- node_modules/es-abstract/2016/RegExpExec.js | 8 +- .../2016/RequireObjectCoercible.js | 2 +- .../es-abstract/2016/SameValueNonNumber.js | 4 +- node_modules/es-abstract/2016/Set.js | 6 +- .../es-abstract/2016/SetFunctionName.js | 14 +- .../es-abstract/2016/SetIntegrityLevel.js | 4 +- .../es-abstract/2016/SetValueInBuffer.js | 26 +- .../es-abstract/2016/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2016/SplitMatch.js | 9 +- node_modules/es-abstract/2016/StringCreate.js | 9 +- .../2016/SymbolDescriptiveString.js | 8 +- .../es-abstract/2016/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2016/ToDateString.js | 6 +- node_modules/es-abstract/2016/ToNumber.js | 2 +- node_modules/es-abstract/2016/ToObject.js | 11 +- .../es-abstract/2016/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2016/ToString.js | 2 +- .../es-abstract/2016/TypedArrayCreate.js | 9 +- .../2016/TypedArraySpeciesCreate.js | 8 +- node_modules/es-abstract/2016/UTF16Decode.js | 2 +- .../es-abstract/2016/UTF16Encoding.js | 2 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2016/ValidateTypedArray.js | 22 +- .../2016/tables/typed-array-objects.js | 31 + .../es-abstract/2016/thisBooleanValue.js | 4 +- .../es-abstract/2016/thisNumberValue.js | 4 +- .../es-abstract/2016/thisStringValue.js | 4 +- .../2017/AbstractRelationalComparison.js | 7 +- .../es-abstract/2017/AdvanceStringIndex.js | 10 +- node_modules/es-abstract/2017/ArrayCreate.js | 6 +- .../es-abstract/2017/ArraySetLength.js | 16 +- .../es-abstract/2017/ArraySpeciesCreate.js | 2 +- node_modules/es-abstract/2017/Call.js | 2 +- .../2017/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2017/Canonicalize.js | 18 +- .../es-abstract/2017/CharacterRange.js | 2 +- .../2017/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2017/CompletionRecord.js | 4 +- .../es-abstract/2017/CreateDataProperty.js | 4 +- .../2017/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2017/CreateHTML.js | 7 +- .../2017/CreateIterResultObject.js | 8 +- .../2017/CreateListFromArrayLike.js | 4 +- .../es-abstract/2017/CreateMethodProperty.js | 4 +- node_modules/es-abstract/2017/DateFromTime.js | 4 +- .../es-abstract/2017/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2017/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2017/DetachArrayBuffer.js | 26 +- .../2017/EnumerableOwnProperties.js | 2 +- .../2017/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2017/Get.js | 4 +- node_modules/es-abstract/2017/GetIterator.js | 4 +- node_modules/es-abstract/2017/GetMethod.js | 4 +- .../es-abstract/2017/GetOwnPropertyKeys.js | 2 +- .../2017/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2017/GetSubstitution.js | 17 +- node_modules/es-abstract/2017/GetV.js | 4 +- .../es-abstract/2017/GetValueFromBuffer.js | 19 +- .../es-abstract/2017/HasOwnProperty.js | 8 +- node_modules/es-abstract/2017/HasProperty.js | 4 +- node_modules/es-abstract/2017/InLeapYear.js | 4 +- .../es-abstract/2017/InstanceofOperator.js | 2 +- .../2017/IntegerIndexedElementGet.js | 58 + .../2017/IntegerIndexedElementSet.js | 58 + .../2017/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2017/Invoke.js | 4 +- .../es-abstract/2017/IsAccessorDescriptor.js | 12 +- .../es-abstract/2017/IsDataDescriptor.js | 12 +- .../es-abstract/2017/IsDetachedBuffer.js | 17 +- .../es-abstract/2017/IsGenericDescriptor.js | 9 +- .../es-abstract/2017/IsPropertyDescriptor.js | 12 +- .../es-abstract/2017/IsSharedArrayBuffer.js | 4 +- node_modules/es-abstract/2017/IsWordChar.js | 7 +- .../es-abstract/2017/IteratorClose.js | 4 +- .../es-abstract/2017/IteratorComplete.js | 4 +- node_modules/es-abstract/2017/IteratorNext.js | 4 +- .../es-abstract/2017/IteratorValue.js | 4 +- .../es-abstract/2017/NewPromiseCapability.js | 8 +- .../es-abstract/2017/NumberToRawBytes.js | 9 +- node_modules/es-abstract/2017/ObjectCreate.js | 4 +- .../2017/OrdinaryCreateFromConstructor.js | 2 +- .../2017/OrdinaryDefineOwnProperty.js | 15 +- .../2017/OrdinaryGetOwnProperty.js | 8 +- .../2017/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2017/OrdinaryHasInstance.js | 4 +- .../es-abstract/2017/OrdinaryHasProperty.js | 4 +- .../2017/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2017/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2017/QuoteJSONString.js | 8 +- .../es-abstract/2017/RawBytesToNumber.js | 8 +- node_modules/es-abstract/2017/RegExpExec.js | 8 +- .../2017/RequireObjectCoercible.js | 2 +- .../es-abstract/2017/SameValueNonNumber.js | 4 +- node_modules/es-abstract/2017/Set.js | 6 +- .../es-abstract/2017/SetFunctionName.js | 14 +- .../es-abstract/2017/SetIntegrityLevel.js | 4 +- .../es-abstract/2017/SetValueInBuffer.js | 26 +- .../es-abstract/2017/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2017/SplitMatch.js | 9 +- node_modules/es-abstract/2017/StringCreate.js | 9 +- .../es-abstract/2017/StringGetOwnProperty.js | 8 +- .../2017/SymbolDescriptiveString.js | 8 +- .../es-abstract/2017/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2017/ToDateString.js | 6 +- node_modules/es-abstract/2017/ToIndex.js | 4 +- node_modules/es-abstract/2017/ToNumber.js | 2 +- node_modules/es-abstract/2017/ToObject.js | 11 +- .../es-abstract/2017/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2017/ToString.js | 2 +- .../es-abstract/2017/TypedArrayCreate.js | 9 +- .../2017/TypedArraySpeciesCreate.js | 8 +- node_modules/es-abstract/2017/UTF16Decode.js | 2 +- .../es-abstract/2017/UTF16Encoding.js | 2 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2017/ValidateAtomicAccess.js | 6 +- .../es-abstract/2017/ValidateTypedArray.js | 22 +- .../es-abstract/2017/WordCharacters.js | 9 +- .../2017/tables/typed-array-objects.js | 31 + .../es-abstract/2017/thisBooleanValue.js | 4 +- .../es-abstract/2017/thisNumberValue.js | 4 +- .../es-abstract/2017/thisStringValue.js | 4 +- .../2018/AbstractRelationalComparison.js | 7 +- .../es-abstract/2018/AdvanceStringIndex.js | 10 +- node_modules/es-abstract/2018/ArrayCreate.js | 6 +- .../es-abstract/2018/ArraySetLength.js | 16 +- .../es-abstract/2018/ArraySpeciesCreate.js | 2 +- .../es-abstract/2018/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2018/Call.js | 2 +- .../2018/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2018/Canonicalize.js | 18 +- .../es-abstract/2018/CharacterRange.js | 2 +- .../2018/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2018/CompletionRecord.js | 4 +- .../es-abstract/2018/CopyDataProperties.js | 4 +- .../2018/CreateAsyncFromSyncIterator.js | 32 +- .../es-abstract/2018/CreateDataProperty.js | 4 +- .../2018/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2018/CreateHTML.js | 7 +- .../2018/CreateIterResultObject.js | 8 +- .../2018/CreateListFromArrayLike.js | 4 +- .../es-abstract/2018/CreateMethodProperty.js | 4 +- node_modules/es-abstract/2018/DateFromTime.js | 4 +- node_modules/es-abstract/2018/DateString.js | 11 +- .../es-abstract/2018/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2018/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2018/DetachArrayBuffer.js | 25 +- .../2018/EnumerableOwnPropertyNames.js | 2 +- .../2018/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2018/Get.js | 4 +- node_modules/es-abstract/2018/GetIterator.js | 4 +- node_modules/es-abstract/2018/GetMethod.js | 4 +- .../es-abstract/2018/GetOwnPropertyKeys.js | 2 +- .../2018/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2018/GetSubstitution.js | 32 +- node_modules/es-abstract/2018/GetV.js | 4 +- .../es-abstract/2018/GetValueFromBuffer.js | 19 +- .../es-abstract/2018/HasOwnProperty.js | 8 +- node_modules/es-abstract/2018/HasProperty.js | 4 +- node_modules/es-abstract/2018/InLeapYear.js | 4 +- .../es-abstract/2018/InstanceofOperator.js | 2 +- .../2018/IntegerIndexedElementGet.js | 58 + .../2018/IntegerIndexedElementSet.js | 58 + .../2018/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2018/Invoke.js | 4 +- .../es-abstract/2018/IsAccessorDescriptor.js | 12 +- .../es-abstract/2018/IsDataDescriptor.js | 12 +- .../es-abstract/2018/IsDetachedBuffer.js | 17 +- .../es-abstract/2018/IsGenericDescriptor.js | 9 +- .../es-abstract/2018/IsSharedArrayBuffer.js | 4 +- .../es-abstract/2018/IsStringPrefix.js | 10 +- node_modules/es-abstract/2018/IsWordChar.js | 7 +- .../es-abstract/2018/IteratorClose.js | 4 +- .../es-abstract/2018/IteratorComplete.js | 4 +- node_modules/es-abstract/2018/IteratorNext.js | 4 +- .../es-abstract/2018/IteratorValue.js | 4 +- .../es-abstract/2018/NewPromiseCapability.js | 8 +- .../es-abstract/2018/NumberToRawBytes.js | 9 +- .../es-abstract/2018/NumberToString.js | 6 +- node_modules/es-abstract/2018/ObjectCreate.js | 4 +- .../2018/OrdinaryCreateFromConstructor.js | 2 +- .../2018/OrdinaryDefineOwnProperty.js | 15 +- .../2018/OrdinaryGetOwnProperty.js | 8 +- .../2018/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2018/OrdinaryHasInstance.js | 4 +- .../es-abstract/2018/OrdinaryHasProperty.js | 4 +- .../2018/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2018/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2018/PromiseResolve.js | 3 +- .../es-abstract/2018/QuoteJSONString.js | 11 +- .../es-abstract/2018/RawBytesToNumber.js | 8 +- node_modules/es-abstract/2018/RegExpExec.js | 8 +- .../2018/RequireObjectCoercible.js | 2 +- .../es-abstract/2018/SameValueNonNumber.js | 4 +- node_modules/es-abstract/2018/Set.js | 6 +- .../es-abstract/2018/SetFunctionLength.js | 7 +- .../es-abstract/2018/SetFunctionName.js | 14 +- .../es-abstract/2018/SetIntegrityLevel.js | 4 +- .../es-abstract/2018/SetValueInBuffer.js | 26 +- .../es-abstract/2018/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2018/SplitMatch.js | 9 +- node_modules/es-abstract/2018/StringCreate.js | 9 +- .../es-abstract/2018/StringGetOwnProperty.js | 8 +- .../2018/SymbolDescriptiveString.js | 8 +- .../es-abstract/2018/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2018/TimeString.js | 7 +- .../es-abstract/2018/TimeZoneString.js | 33 + node_modules/es-abstract/2018/ToDateString.js | 6 +- node_modules/es-abstract/2018/ToIndex.js | 4 +- node_modules/es-abstract/2018/ToNumber.js | 2 +- node_modules/es-abstract/2018/ToObject.js | 11 +- .../es-abstract/2018/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2018/ToString.js | 2 +- .../es-abstract/2018/TypedArrayCreate.js | 9 +- .../2018/TypedArraySpeciesCreate.js | 8 +- node_modules/es-abstract/2018/UTF16Decode.js | 2 +- .../es-abstract/2018/UTF16Encoding.js | 2 +- .../es-abstract/2018/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2018/ValidateAtomicAccess.js | 6 +- .../es-abstract/2018/ValidateTypedArray.js | 22 +- .../es-abstract/2018/WordCharacters.js | 9 +- .../2018/tables/typed-array-objects.js | 31 + .../es-abstract/2018/thisBooleanValue.js | 4 +- .../es-abstract/2018/thisNumberValue.js | 4 +- .../es-abstract/2018/thisStringValue.js | 4 +- .../es-abstract/2018/thisSymbolValue.js | 7 +- .../2019/AbstractRelationalComparison.js | 7 +- .../2019/AddEntriesFromIterable.js | 4 +- .../es-abstract/2019/AdvanceStringIndex.js | 10 +- node_modules/es-abstract/2019/ArrayCreate.js | 6 +- .../es-abstract/2019/ArraySetLength.js | 16 +- .../es-abstract/2019/ArraySpeciesCreate.js | 2 +- .../2019/AsyncFromSyncIteratorContinuation.js | 6 +- .../es-abstract/2019/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2019/Call.js | 2 +- .../2019/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2019/Canonicalize.js | 18 +- .../es-abstract/2019/CharacterRange.js | 2 +- .../2019/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2019/CompletionRecord.js | 4 +- .../es-abstract/2019/CopyDataProperties.js | 4 +- .../2019/CreateAsyncFromSyncIterator.js | 30 +- .../es-abstract/2019/CreateDataProperty.js | 4 +- .../2019/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2019/CreateHTML.js | 7 +- .../2019/CreateIterResultObject.js | 8 +- .../2019/CreateListFromArrayLike.js | 4 +- .../es-abstract/2019/CreateMethodProperty.js | 4 +- node_modules/es-abstract/2019/DateFromTime.js | 4 +- node_modules/es-abstract/2019/DateString.js | 11 +- .../es-abstract/2019/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2019/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2019/DetachArrayBuffer.js | 25 +- .../2019/EnumerableOwnPropertyNames.js | 2 +- .../es-abstract/2019/FlattenIntoArray.js | 4 +- .../2019/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2019/Get.js | 4 +- node_modules/es-abstract/2019/GetIterator.js | 4 +- node_modules/es-abstract/2019/GetMethod.js | 4 +- .../es-abstract/2019/GetOwnPropertyKeys.js | 2 +- .../2019/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2019/GetSubstitution.js | 32 +- node_modules/es-abstract/2019/GetV.js | 4 +- .../es-abstract/2019/GetValueFromBuffer.js | 17 +- .../es-abstract/2019/HasOwnProperty.js | 8 +- node_modules/es-abstract/2019/HasProperty.js | 4 +- node_modules/es-abstract/2019/InLeapYear.js | 4 +- .../es-abstract/2019/InstanceofOperator.js | 2 +- .../2019/IntegerIndexedElementGet.js | 58 + .../2019/IntegerIndexedElementSet.js | 58 + .../2019/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2019/Invoke.js | 4 +- .../es-abstract/2019/IsAccessorDescriptor.js | 12 +- .../es-abstract/2019/IsDataDescriptor.js | 12 +- .../es-abstract/2019/IsDetachedBuffer.js | 17 +- .../es-abstract/2019/IsGenericDescriptor.js | 9 +- .../es-abstract/2019/IsSharedArrayBuffer.js | 4 +- .../es-abstract/2019/IsStringPrefix.js | 10 +- node_modules/es-abstract/2019/IsWordChar.js | 7 +- .../es-abstract/2019/IteratorClose.js | 4 +- .../es-abstract/2019/IteratorComplete.js | 4 +- node_modules/es-abstract/2019/IteratorNext.js | 4 +- .../es-abstract/2019/IteratorValue.js | 4 +- .../es-abstract/2019/NewPromiseCapability.js | 8 +- .../es-abstract/2019/NumberToRawBytes.js | 9 +- .../es-abstract/2019/NumberToString.js | 6 +- node_modules/es-abstract/2019/ObjectCreate.js | 4 +- .../2019/OrdinaryCreateFromConstructor.js | 2 +- .../2019/OrdinaryDefineOwnProperty.js | 15 +- .../2019/OrdinaryGetOwnProperty.js | 8 +- .../2019/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2019/OrdinaryHasInstance.js | 4 +- .../es-abstract/2019/OrdinaryHasProperty.js | 4 +- .../2019/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2019/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2019/PromiseResolve.js | 3 +- .../es-abstract/2019/QuoteJSONString.js | 11 +- .../es-abstract/2019/RawBytesToNumber.js | 8 +- node_modules/es-abstract/2019/RegExpExec.js | 8 +- .../2019/RequireObjectCoercible.js | 2 +- .../es-abstract/2019/SameValueNonNumber.js | 4 +- node_modules/es-abstract/2019/Set.js | 6 +- .../es-abstract/2019/SetFunctionLength.js | 7 +- .../es-abstract/2019/SetFunctionName.js | 14 +- .../es-abstract/2019/SetIntegrityLevel.js | 4 +- .../es-abstract/2019/SetValueInBuffer.js | 26 +- .../es-abstract/2019/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2019/SplitMatch.js | 9 +- node_modules/es-abstract/2019/StringCreate.js | 9 +- .../es-abstract/2019/StringGetOwnProperty.js | 8 +- .../2019/SymbolDescriptiveString.js | 8 +- .../es-abstract/2019/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2019/TimeString.js | 7 +- .../es-abstract/2019/TimeZoneString.js | 33 + node_modules/es-abstract/2019/ToDateString.js | 6 +- node_modules/es-abstract/2019/ToIndex.js | 4 +- node_modules/es-abstract/2019/ToNumber.js | 2 +- node_modules/es-abstract/2019/ToObject.js | 11 +- .../es-abstract/2019/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2019/ToString.js | 2 +- node_modules/es-abstract/2019/TrimString.js | 4 +- .../es-abstract/2019/TypedArrayCreate.js | 9 +- .../2019/TypedArraySpeciesCreate.js | 8 +- node_modules/es-abstract/2019/UTF16Decode.js | 2 +- .../es-abstract/2019/UTF16Encoding.js | 2 +- .../es-abstract/2019/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2019/ValidateAtomicAccess.js | 6 +- .../es-abstract/2019/ValidateTypedArray.js | 22 +- .../es-abstract/2019/WordCharacters.js | 9 +- .../2019/tables/typed-array-objects.js | 31 + .../es-abstract/2019/thisBooleanValue.js | 4 +- .../es-abstract/2019/thisNumberValue.js | 4 +- .../es-abstract/2019/thisStringValue.js | 4 +- .../es-abstract/2019/thisSymbolValue.js | 7 +- .../2020/AbstractRelationalComparison.js | 6 +- .../2020/AddEntriesFromIterable.js | 4 +- .../es-abstract/2020/AdvanceStringIndex.js | 9 +- node_modules/es-abstract/2020/ArrayCreate.js | 6 +- .../es-abstract/2020/ArraySetLength.js | 16 +- .../es-abstract/2020/ArraySpeciesCreate.js | 2 +- .../2020/AsyncFromSyncIteratorContinuation.js | 6 +- .../es-abstract/2020/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2020/BigInt/add.js | 8 +- .../es-abstract/2020/BigInt/bitwiseAND.js | 7 +- .../es-abstract/2020/BigInt/bitwiseNOT.js | 6 +- .../es-abstract/2020/BigInt/bitwiseOR.js | 7 +- .../es-abstract/2020/BigInt/bitwiseXOR.js | 7 +- .../es-abstract/2020/BigInt/divide.js | 8 +- node_modules/es-abstract/2020/BigInt/equal.js | 8 +- .../es-abstract/2020/BigInt/exponentiate.js | 8 +- .../es-abstract/2020/BigInt/leftShift.js | 8 +- .../es-abstract/2020/BigInt/lessThan.js | 8 +- .../es-abstract/2020/BigInt/multiply.js | 8 +- .../es-abstract/2020/BigInt/remainder.js | 8 +- .../es-abstract/2020/BigInt/sameValue.js | 7 +- .../es-abstract/2020/BigInt/sameValueZero.js | 7 +- .../2020/BigInt/signedRightShift.js | 7 +- .../es-abstract/2020/BigInt/subtract.js | 8 +- .../es-abstract/2020/BigInt/toString.js | 6 +- .../es-abstract/2020/BigInt/unaryMinus.js | 6 +- .../2020/BigInt/unsignedRightShift.js | 8 +- .../es-abstract/2020/BigIntBitwiseOp.js | 7 +- node_modules/es-abstract/2020/BinaryAnd.js | 4 +- node_modules/es-abstract/2020/BinaryOr.js | 4 +- node_modules/es-abstract/2020/BinaryXor.js | 4 +- node_modules/es-abstract/2020/Call.js | 2 +- .../2020/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2020/Canonicalize.js | 18 +- .../es-abstract/2020/CharacterRange.js | 2 +- node_modules/es-abstract/2020/CodePointAt.js | 7 +- .../2020/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2020/CompletionRecord.js | 4 +- .../es-abstract/2020/CopyDataProperties.js | 4 +- .../2020/CreateAsyncFromSyncIterator.js | 30 +- .../es-abstract/2020/CreateDataProperty.js | 4 +- .../2020/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2020/CreateHTML.js | 7 +- .../2020/CreateIterResultObject.js | 8 +- .../2020/CreateListFromArrayLike.js | 4 +- .../es-abstract/2020/CreateMethodProperty.js | 4 +- .../2020/CreateRegExpStringIterator.js | 8 +- node_modules/es-abstract/2020/DateFromTime.js | 4 +- node_modules/es-abstract/2020/DateString.js | 11 +- .../es-abstract/2020/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2020/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2020/DetachArrayBuffer.js | 25 +- .../2020/EnumerableOwnPropertyNames.js | 2 +- .../es-abstract/2020/FlattenIntoArray.js | 4 +- .../2020/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2020/Get.js | 4 +- node_modules/es-abstract/2020/GetIterator.js | 4 +- node_modules/es-abstract/2020/GetMethod.js | 4 +- .../es-abstract/2020/GetOwnPropertyKeys.js | 2 +- .../2020/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2020/GetSubstitution.js | 32 +- node_modules/es-abstract/2020/GetV.js | 4 +- .../es-abstract/2020/GetValueFromBuffer.js | 23 +- .../es-abstract/2020/HasOwnProperty.js | 8 +- node_modules/es-abstract/2020/HasProperty.js | 4 +- node_modules/es-abstract/2020/InLeapYear.js | 4 +- .../es-abstract/2020/InstanceofOperator.js | 2 +- .../2020/IntegerIndexedElementGet.js | 53 + .../2020/IntegerIndexedElementSet.js | 60 + .../2020/InternalizeJSONProperty.js | 66 + node_modules/es-abstract/2020/Invoke.js | 4 +- .../es-abstract/2020/IsAccessorDescriptor.js | 12 +- .../es-abstract/2020/IsDataDescriptor.js | 12 +- .../es-abstract/2020/IsDetachedBuffer.js | 17 +- .../es-abstract/2020/IsGenericDescriptor.js | 9 +- .../es-abstract/2020/IsSharedArrayBuffer.js | 4 +- .../es-abstract/2020/IsStringPrefix.js | 10 +- .../es-abstract/2020/IsValidIntegerIndex.js | 10 +- node_modules/es-abstract/2020/IsWordChar.js | 7 +- .../es-abstract/2020/IteratorClose.js | 4 +- .../es-abstract/2020/IteratorComplete.js | 4 +- node_modules/es-abstract/2020/IteratorNext.js | 4 +- .../es-abstract/2020/IteratorValue.js | 4 +- .../es-abstract/2020/LengthOfArrayLike.js | 4 +- .../es-abstract/2020/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2020/Number/add.js | 8 +- .../es-abstract/2020/Number/bitwiseAND.js | 7 +- .../es-abstract/2020/Number/bitwiseNOT.js | 7 +- .../es-abstract/2020/Number/bitwiseOR.js | 7 +- .../es-abstract/2020/Number/bitwiseXOR.js | 7 +- .../es-abstract/2020/Number/divide.js | 7 +- node_modules/es-abstract/2020/Number/equal.js | 7 +- .../es-abstract/2020/Number/exponentiate.js | 5 +- .../es-abstract/2020/Number/leftShift.js | 7 +- .../es-abstract/2020/Number/lessThan.js | 8 +- .../es-abstract/2020/Number/multiply.js | 8 +- .../es-abstract/2020/Number/remainder.js | 8 +- .../es-abstract/2020/Number/sameValue.js | 6 +- .../es-abstract/2020/Number/sameValueZero.js | 8 +- .../2020/Number/signedRightShift.js | 7 +- .../es-abstract/2020/Number/subtract.js | 8 +- .../es-abstract/2020/Number/toString.js | 6 +- .../es-abstract/2020/Number/unaryMinus.js | 8 +- .../2020/Number/unsignedRightShift.js | 7 +- .../es-abstract/2020/NumberBitwiseOp.js | 7 +- .../es-abstract/2020/NumberToBigInt.js | 10 +- .../es-abstract/2020/NumericToRawBytes.js | 9 +- .../2020/OrdinaryCreateFromConstructor.js | 2 +- .../2020/OrdinaryDefineOwnProperty.js | 15 +- .../2020/OrdinaryGetOwnProperty.js | 8 +- .../2020/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2020/OrdinaryHasInstance.js | 4 +- .../es-abstract/2020/OrdinaryHasProperty.js | 4 +- .../es-abstract/2020/OrdinaryObjectCreate.js | 4 +- .../2020/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2020/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2020/PromiseResolve.js | 3 +- .../es-abstract/2020/QuoteJSONString.js | 13 +- .../es-abstract/2020/RawBytesToNumeric.js | 9 +- node_modules/es-abstract/2020/RegExpExec.js | 8 +- .../2020/RequireObjectCoercible.js | 2 +- .../es-abstract/2020/SameValueNonNumeric.js | 9 +- node_modules/es-abstract/2020/Set.js | 6 +- .../es-abstract/2020/SetFunctionLength.js | 7 +- .../es-abstract/2020/SetFunctionName.js | 14 +- .../es-abstract/2020/SetIntegrityLevel.js | 4 +- .../es-abstract/2020/SetValueInBuffer.js | 30 +- .../es-abstract/2020/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2020/SplitMatch.js | 9 +- node_modules/es-abstract/2020/StringCreate.js | 9 +- .../es-abstract/2020/StringGetOwnProperty.js | 8 +- node_modules/es-abstract/2020/StringPad.js | 4 +- .../es-abstract/2020/StringToBigInt.js | 4 +- .../2020/SymbolDescriptiveString.js | 8 +- .../es-abstract/2020/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2020/TimeString.js | 7 +- .../es-abstract/2020/TimeZoneString.js | 33 + node_modules/es-abstract/2020/ToBigInt.js | 4 +- node_modules/es-abstract/2020/ToDateString.js | 6 +- node_modules/es-abstract/2020/ToIndex.js | 4 +- node_modules/es-abstract/2020/ToNumber.js | 2 +- node_modules/es-abstract/2020/ToNumeric.js | 3 +- node_modules/es-abstract/2020/ToObject.js | 11 +- .../es-abstract/2020/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2020/ToString.js | 2 +- node_modules/es-abstract/2020/TrimString.js | 4 +- .../es-abstract/2020/TypedArrayCreate.js | 9 +- .../2020/TypedArraySpeciesCreate.js | 8 +- .../es-abstract/2020/UTF16DecodeString.js | 7 +- .../2020/UTF16DecodeSurrogatePair.js | 2 +- .../es-abstract/2020/UTF16Encoding.js | 2 +- .../es-abstract/2020/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2020/ValidateAtomicAccess.js | 6 +- .../es-abstract/2020/ValidateTypedArray.js | 22 +- .../es-abstract/2020/WordCharacters.js | 9 +- node_modules/es-abstract/2020/floor.js | 4 +- .../2020/tables/typed-array-objects.js | 35 + .../es-abstract/2020/thisBigIntValue.js | 3 +- .../es-abstract/2020/thisBooleanValue.js | 4 +- .../es-abstract/2020/thisNumberValue.js | 4 +- .../es-abstract/2020/thisStringValue.js | 4 +- .../es-abstract/2020/thisSymbolValue.js | 7 +- .../2021/AbstractRelationalComparison.js | 6 +- .../2021/AddEntriesFromIterable.js | 4 +- .../es-abstract/2021/AddToKeptObjects.js | 3 +- .../es-abstract/2021/AdvanceStringIndex.js | 9 +- .../ApplyStringOrNumericBinaryOperator.js | 8 +- node_modules/es-abstract/2021/ArrayCreate.js | 6 +- .../es-abstract/2021/ArraySetLength.js | 16 +- .../es-abstract/2021/ArraySpeciesCreate.js | 2 +- .../2021/AsyncFromSyncIteratorContinuation.js | 6 +- .../es-abstract/2021/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2021/BigInt/add.js | 8 +- .../es-abstract/2021/BigInt/bitwiseAND.js | 7 +- .../es-abstract/2021/BigInt/bitwiseNOT.js | 6 +- .../es-abstract/2021/BigInt/bitwiseOR.js | 7 +- .../es-abstract/2021/BigInt/bitwiseXOR.js | 7 +- .../es-abstract/2021/BigInt/divide.js | 8 +- node_modules/es-abstract/2021/BigInt/equal.js | 8 +- .../es-abstract/2021/BigInt/exponentiate.js | 8 +- .../es-abstract/2021/BigInt/leftShift.js | 8 +- .../es-abstract/2021/BigInt/lessThan.js | 8 +- .../es-abstract/2021/BigInt/multiply.js | 8 +- .../es-abstract/2021/BigInt/remainder.js | 8 +- .../es-abstract/2021/BigInt/sameValue.js | 7 +- .../es-abstract/2021/BigInt/sameValueZero.js | 7 +- .../2021/BigInt/signedRightShift.js | 7 +- .../es-abstract/2021/BigInt/subtract.js | 8 +- .../es-abstract/2021/BigInt/toString.js | 6 +- .../es-abstract/2021/BigInt/unaryMinus.js | 6 +- .../2021/BigInt/unsignedRightShift.js | 8 +- .../es-abstract/2021/BigIntBitwiseOp.js | 7 +- node_modules/es-abstract/2021/BinaryAnd.js | 4 +- node_modules/es-abstract/2021/BinaryOr.js | 4 +- node_modules/es-abstract/2021/BinaryXor.js | 4 +- .../es-abstract/2021/ByteListBitwiseOp.js | 3 +- .../es-abstract/2021/ByteListEqual.js | 4 +- node_modules/es-abstract/2021/Call.js | 2 +- .../2021/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2021/Canonicalize.js | 18 +- .../es-abstract/2021/CharacterRange.js | 2 +- .../es-abstract/2021/CloneArrayBuffer.js | 4 +- node_modules/es-abstract/2021/CodePointAt.js | 7 +- .../es-abstract/2021/CodePointsToString.js | 4 +- .../2021/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2021/CompletionRecord.js | 4 +- .../es-abstract/2021/CopyDataProperties.js | 4 +- .../2021/CreateAsyncFromSyncIterator.js | 30 +- .../es-abstract/2021/CreateDataProperty.js | 4 +- .../2021/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2021/CreateHTML.js | 7 +- .../2021/CreateIterResultObject.js | 8 +- .../2021/CreateListFromArrayLike.js | 4 +- .../es-abstract/2021/CreateMethodProperty.js | 4 +- .../2021/CreateRegExpStringIterator.js | 8 +- node_modules/es-abstract/2021/DateFromTime.js | 4 +- node_modules/es-abstract/2021/DateString.js | 11 +- .../es-abstract/2021/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2021/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2021/DetachArrayBuffer.js | 25 +- .../2021/EnumerableOwnPropertyNames.js | 2 +- .../es-abstract/2021/FlattenIntoArray.js | 4 +- .../2021/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2021/Get.js | 4 +- node_modules/es-abstract/2021/GetIterator.js | 4 +- node_modules/es-abstract/2021/GetMethod.js | 4 +- .../es-abstract/2021/GetOwnPropertyKeys.js | 2 +- .../es-abstract/2021/GetPromiseResolve.js | 4 +- .../2021/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2021/GetSubstitution.js | 31 +- node_modules/es-abstract/2021/GetV.js | 4 +- .../es-abstract/2021/GetValueFromBuffer.js | 23 +- .../es-abstract/2021/HasOwnProperty.js | 8 +- node_modules/es-abstract/2021/HasProperty.js | 4 +- node_modules/es-abstract/2021/InLeapYear.js | 4 +- .../es-abstract/2021/InstanceofOperator.js | 2 +- .../2021/IntegerIndexedElementGet.js | 39 + .../2021/IntegerIndexedElementSet.js | 44 + .../2021/InternalizeJSONProperty.js | 66 + node_modules/es-abstract/2021/Invoke.js | 4 +- .../es-abstract/2021/IsAccessorDescriptor.js | 12 +- .../es-abstract/2021/IsDataDescriptor.js | 12 +- .../es-abstract/2021/IsDetachedBuffer.js | 17 +- .../es-abstract/2021/IsGenericDescriptor.js | 9 +- .../es-abstract/2021/IsSharedArrayBuffer.js | 4 +- .../es-abstract/2021/IsStringPrefix.js | 10 +- .../es-abstract/2021/IsValidIntegerIndex.js | 4 +- node_modules/es-abstract/2021/IsWordChar.js | 7 +- .../es-abstract/2021/IteratorClose.js | 4 +- .../es-abstract/2021/IteratorComplete.js | 4 +- node_modules/es-abstract/2021/IteratorNext.js | 4 +- .../es-abstract/2021/IteratorValue.js | 4 +- .../es-abstract/2021/LengthOfArrayLike.js | 4 +- .../es-abstract/2021/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2021/Number/add.js | 8 +- .../es-abstract/2021/Number/bitwiseAND.js | 7 +- .../es-abstract/2021/Number/bitwiseNOT.js | 7 +- .../es-abstract/2021/Number/bitwiseOR.js | 7 +- .../es-abstract/2021/Number/bitwiseXOR.js | 7 +- .../es-abstract/2021/Number/divide.js | 7 +- node_modules/es-abstract/2021/Number/equal.js | 7 +- .../es-abstract/2021/Number/exponentiate.js | 5 +- .../es-abstract/2021/Number/leftShift.js | 7 +- .../es-abstract/2021/Number/lessThan.js | 8 +- .../es-abstract/2021/Number/multiply.js | 8 +- .../es-abstract/2021/Number/remainder.js | 8 +- .../es-abstract/2021/Number/sameValue.js | 6 +- .../es-abstract/2021/Number/sameValueZero.js | 8 +- .../2021/Number/signedRightShift.js | 7 +- .../es-abstract/2021/Number/subtract.js | 8 +- .../es-abstract/2021/Number/toString.js | 6 +- .../es-abstract/2021/Number/unaryMinus.js | 8 +- .../2021/Number/unsignedRightShift.js | 7 +- .../es-abstract/2021/NumberBitwiseOp.js | 7 +- .../es-abstract/2021/NumberToBigInt.js | 9 +- .../es-abstract/2021/NumericToRawBytes.js | 9 +- .../2021/OrdinaryCreateFromConstructor.js | 2 +- .../2021/OrdinaryDefineOwnProperty.js | 15 +- .../2021/OrdinaryGetOwnProperty.js | 8 +- .../2021/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2021/OrdinaryHasInstance.js | 4 +- .../es-abstract/2021/OrdinaryHasProperty.js | 4 +- .../es-abstract/2021/OrdinaryObjectCreate.js | 4 +- .../2021/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2021/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2021/PromiseResolve.js | 3 +- .../es-abstract/2021/QuoteJSONString.js | 11 +- .../es-abstract/2021/RawBytesToNumeric.js | 9 +- node_modules/es-abstract/2021/RegExpExec.js | 8 +- .../2021/RequireObjectCoercible.js | 2 +- .../es-abstract/2021/SameValueNonNumeric.js | 9 +- node_modules/es-abstract/2021/Set.js | 6 +- .../es-abstract/2021/SetFunctionLength.js | 7 +- .../es-abstract/2021/SetFunctionName.js | 14 +- .../es-abstract/2021/SetIntegrityLevel.js | 4 +- .../2021/SetTypedArrayFromArrayLike.js | 43 +- .../2021/SetTypedArrayFromTypedArray.js | 44 +- .../es-abstract/2021/SetValueInBuffer.js | 30 +- .../es-abstract/2021/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2021/SplitMatch.js | 9 +- node_modules/es-abstract/2021/StringCreate.js | 9 +- .../es-abstract/2021/StringGetOwnProperty.js | 8 +- .../es-abstract/2021/StringIndexOf.js | 9 +- node_modules/es-abstract/2021/StringPad.js | 4 +- .../es-abstract/2021/StringToBigInt.js | 4 +- .../es-abstract/2021/StringToCodePoints.js | 7 +- .../2021/SymbolDescriptiveString.js | 8 +- .../es-abstract/2021/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2021/TimeString.js | 7 +- .../es-abstract/2021/TimeZoneString.js | 38 + node_modules/es-abstract/2021/ToBigInt.js | 4 +- node_modules/es-abstract/2021/ToDateString.js | 6 +- node_modules/es-abstract/2021/ToIndex.js | 4 +- node_modules/es-abstract/2021/ToNumber.js | 2 +- node_modules/es-abstract/2021/ToNumeric.js | 3 +- node_modules/es-abstract/2021/ToObject.js | 11 +- .../es-abstract/2021/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2021/ToString.js | 2 +- node_modules/es-abstract/2021/TrimString.js | 4 +- .../es-abstract/2021/TypedArrayCreate.js | 9 +- .../2021/TypedArraySpeciesCreate.js | 8 +- .../es-abstract/2021/UTF16EncodeCodePoint.js | 2 +- .../2021/UTF16SurrogatePairToCodePoint.js | 2 +- .../es-abstract/2021/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 22 +- .../es-abstract/2021/ValidateAtomicAccess.js | 24 +- .../2021/ValidateIntegerTypedArray.js | 24 +- .../es-abstract/2021/ValidateTypedArray.js | 22 +- node_modules/es-abstract/2021/WeakRefDeref.js | 3 +- .../es-abstract/2021/WordCharacters.js | 9 +- node_modules/es-abstract/2021/clamp.js | 6 +- node_modules/es-abstract/2021/floor.js | 4 +- node_modules/es-abstract/2021/substring.js | 8 +- .../2021/tables/typed-array-objects.js | 35 + .../es-abstract/2021/thisBigIntValue.js | 3 +- .../es-abstract/2021/thisBooleanValue.js | 4 +- .../es-abstract/2021/thisNumberValue.js | 4 +- .../es-abstract/2021/thisStringValue.js | 4 +- .../es-abstract/2021/thisSymbolValue.js | 7 +- .../2022/AddEntriesFromIterable.js | 4 +- .../es-abstract/2022/AddToKeptObjects.js | 3 +- .../es-abstract/2022/AdvanceStringIndex.js | 9 +- .../ApplyStringOrNumericBinaryOperator.js | 8 +- node_modules/es-abstract/2022/ArrayCreate.js | 6 +- .../es-abstract/2022/ArraySetLength.js | 16 +- .../es-abstract/2022/ArraySpeciesCreate.js | 2 +- .../2022/AsyncFromSyncIteratorContinuation.js | 6 +- .../es-abstract/2022/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2022/BigInt/add.js | 8 +- .../es-abstract/2022/BigInt/bitwiseAND.js | 7 +- .../es-abstract/2022/BigInt/bitwiseNOT.js | 6 +- .../es-abstract/2022/BigInt/bitwiseOR.js | 7 +- .../es-abstract/2022/BigInt/bitwiseXOR.js | 7 +- .../es-abstract/2022/BigInt/divide.js | 8 +- node_modules/es-abstract/2022/BigInt/equal.js | 8 +- .../es-abstract/2022/BigInt/exponentiate.js | 8 +- .../es-abstract/2022/BigInt/leftShift.js | 8 +- .../es-abstract/2022/BigInt/lessThan.js | 8 +- .../es-abstract/2022/BigInt/multiply.js | 8 +- .../es-abstract/2022/BigInt/remainder.js | 8 +- .../es-abstract/2022/BigInt/sameValue.js | 7 +- .../es-abstract/2022/BigInt/sameValueZero.js | 7 +- .../2022/BigInt/signedRightShift.js | 7 +- .../es-abstract/2022/BigInt/subtract.js | 8 +- .../es-abstract/2022/BigInt/toString.js | 6 +- .../es-abstract/2022/BigInt/unaryMinus.js | 6 +- .../2022/BigInt/unsignedRightShift.js | 8 +- .../es-abstract/2022/BigIntBitwiseOp.js | 7 +- node_modules/es-abstract/2022/BinaryAnd.js | 4 +- node_modules/es-abstract/2022/BinaryOr.js | 4 +- node_modules/es-abstract/2022/BinaryXor.js | 4 +- .../es-abstract/2022/ByteListBitwiseOp.js | 3 +- .../es-abstract/2022/ByteListEqual.js | 4 +- node_modules/es-abstract/2022/Call.js | 2 +- .../2022/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2022/Canonicalize.js | 18 +- .../es-abstract/2022/CharacterRange.js | 2 +- .../es-abstract/2022/CloneArrayBuffer.js | 4 +- node_modules/es-abstract/2022/CodePointAt.js | 7 +- .../es-abstract/2022/CodePointsToString.js | 4 +- .../2022/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2022/CompletionRecord.js | 4 +- .../es-abstract/2022/CopyDataProperties.js | 4 +- .../2022/CreateAsyncFromSyncIterator.js | 30 +- .../es-abstract/2022/CreateDataProperty.js | 4 +- .../2022/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2022/CreateHTML.js | 7 +- .../2022/CreateIterResultObject.js | 8 +- .../2022/CreateListFromArrayLike.js | 4 +- .../es-abstract/2022/CreateMethodProperty.js | 4 +- .../CreateNonEnumerableDataPropertyOrThrow.js | 4 +- .../2022/CreateRegExpStringIterator.js | 8 +- node_modules/es-abstract/2022/DateFromTime.js | 4 +- node_modules/es-abstract/2022/DateString.js | 11 +- .../es-abstract/2022/DefineMethodProperty.js | 41 + .../es-abstract/2022/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2022/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2022/DetachArrayBuffer.js | 25 +- .../2022/EnumerableOwnPropertyNames.js | 2 +- .../es-abstract/2022/FlattenIntoArray.js | 4 +- .../2022/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2022/Get.js | 4 +- node_modules/es-abstract/2022/GetIterator.js | 4 +- .../es-abstract/2022/GetMatchIndexPair.js | 14 +- .../es-abstract/2022/GetMatchString.js | 13 +- node_modules/es-abstract/2022/GetMethod.js | 4 +- .../es-abstract/2022/GetOwnPropertyKeys.js | 2 +- .../es-abstract/2022/GetPromiseResolve.js | 4 +- .../2022/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2022/GetStringIndex.js | 6 +- .../es-abstract/2022/GetSubstitution.js | 187 +- node_modules/es-abstract/2022/GetV.js | 4 +- .../es-abstract/2022/GetValueFromBuffer.js | 23 +- .../es-abstract/2022/HasOwnProperty.js | 8 +- node_modules/es-abstract/2022/HasProperty.js | 4 +- node_modules/es-abstract/2022/InLeapYear.js | 4 +- .../es-abstract/2022/InstallErrorCause.js | 4 +- .../es-abstract/2022/InstanceofOperator.js | 2 +- .../2022/IntegerIndexedElementGet.js | 38 + .../2022/IntegerIndexedElementSet.js | 42 + .../2022/InternalizeJSONProperty.js | 66 + node_modules/es-abstract/2022/Invoke.js | 4 +- .../es-abstract/2022/IsAccessorDescriptor.js | 12 +- .../es-abstract/2022/IsDataDescriptor.js | 12 +- .../es-abstract/2022/IsDetachedBuffer.js | 17 +- .../es-abstract/2022/IsGenericDescriptor.js | 9 +- node_modules/es-abstract/2022/IsLessThan.js | 19 +- .../es-abstract/2022/IsSharedArrayBuffer.js | 4 +- .../es-abstract/2022/IsStringPrefix.js | 9 +- .../2022/IsStringWellFormedUnicode.js | 7 +- .../es-abstract/2022/IsValidIntegerIndex.js | 4 +- node_modules/es-abstract/2022/IsWordChar.js | 7 +- .../es-abstract/2022/IteratorClose.js | 4 +- .../es-abstract/2022/IteratorComplete.js | 4 +- node_modules/es-abstract/2022/IteratorNext.js | 4 +- .../es-abstract/2022/IteratorValue.js | 4 +- .../es-abstract/2022/LengthOfArrayLike.js | 4 +- .../2022/MakeMatchIndicesIndexPairArray.js | 11 +- .../es-abstract/2022/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2022/Number/add.js | 8 +- .../es-abstract/2022/Number/bitwiseAND.js | 7 +- .../es-abstract/2022/Number/bitwiseNOT.js | 7 +- .../es-abstract/2022/Number/bitwiseOR.js | 7 +- .../es-abstract/2022/Number/bitwiseXOR.js | 7 +- .../es-abstract/2022/Number/divide.js | 7 +- node_modules/es-abstract/2022/Number/equal.js | 7 +- .../es-abstract/2022/Number/exponentiate.js | 5 +- .../es-abstract/2022/Number/leftShift.js | 7 +- .../es-abstract/2022/Number/lessThan.js | 8 +- .../es-abstract/2022/Number/multiply.js | 8 +- .../es-abstract/2022/Number/remainder.js | 8 +- .../es-abstract/2022/Number/sameValue.js | 6 +- .../es-abstract/2022/Number/sameValueZero.js | 8 +- .../2022/Number/signedRightShift.js | 7 +- .../es-abstract/2022/Number/subtract.js | 8 +- .../es-abstract/2022/Number/toString.js | 6 +- .../es-abstract/2022/Number/unaryMinus.js | 8 +- .../2022/Number/unsignedRightShift.js | 7 +- .../es-abstract/2022/NumberBitwiseOp.js | 7 +- .../es-abstract/2022/NumberToBigInt.js | 9 +- .../es-abstract/2022/NumericToRawBytes.js | 9 +- .../2022/OrdinaryCreateFromConstructor.js | 2 +- .../2022/OrdinaryDefineOwnProperty.js | 15 +- .../2022/OrdinaryGetOwnProperty.js | 8 +- .../2022/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2022/OrdinaryHasInstance.js | 4 +- .../es-abstract/2022/OrdinaryHasProperty.js | 4 +- .../es-abstract/2022/OrdinaryObjectCreate.js | 4 +- .../2022/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2022/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2022/PromiseResolve.js | 3 +- .../es-abstract/2022/QuoteJSONString.js | 11 +- .../es-abstract/2022/RawBytesToNumeric.js | 9 +- node_modules/es-abstract/2022/RegExpExec.js | 8 +- .../es-abstract/2022/RegExpHasFlag.js | 4 +- .../2022/RequireObjectCoercible.js | 2 +- .../es-abstract/2022/SameValueNonNumeric.js | 9 +- node_modules/es-abstract/2022/Set.js | 6 +- .../es-abstract/2022/SetFunctionLength.js | 7 +- .../es-abstract/2022/SetFunctionName.js | 14 +- .../es-abstract/2022/SetIntegrityLevel.js | 4 +- .../2022/SetTypedArrayFromArrayLike.js | 9 +- .../2022/SetTypedArrayFromTypedArray.js | 6 +- .../es-abstract/2022/SetValueInBuffer.js | 30 +- .../es-abstract/2022/SortIndexedProperties.js | 3 +- .../es-abstract/2022/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2022/StringCreate.js | 9 +- .../es-abstract/2022/StringGetOwnProperty.js | 8 +- .../es-abstract/2022/StringIndexOf.js | 9 +- node_modules/es-abstract/2022/StringPad.js | 4 +- .../es-abstract/2022/StringToBigInt.js | 4 +- .../es-abstract/2022/StringToCodePoints.js | 7 +- .../es-abstract/2022/StringToNumber.js | 6 +- .../2022/SymbolDescriptiveString.js | 8 +- .../es-abstract/2022/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2022/TimeString.js | 23 +- .../es-abstract/2022/TimeZoneString.js | 38 + node_modules/es-abstract/2022/ToBigInt.js | 10 +- node_modules/es-abstract/2022/ToDateString.js | 6 +- node_modules/es-abstract/2022/ToIndex.js | 4 +- node_modules/es-abstract/2022/ToNumber.js | 2 +- node_modules/es-abstract/2022/ToNumeric.js | 3 +- node_modules/es-abstract/2022/ToObject.js | 11 +- .../es-abstract/2022/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2022/ToString.js | 2 +- .../2022/ToZeroPaddedDecimalString.js | 2 +- node_modules/es-abstract/2022/TrimString.js | 4 +- .../es-abstract/2022/TypedArrayCreate.js | 9 +- .../es-abstract/2022/TypedArrayElementSize.js | 23 +- .../es-abstract/2022/TypedArrayElementType.js | 23 +- .../2022/TypedArraySpeciesCreate.js | 8 +- .../es-abstract/2022/UTF16EncodeCodePoint.js | 2 +- .../2022/UTF16SurrogatePairToCodePoint.js | 2 +- .../es-abstract/2022/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 35 +- .../es-abstract/2022/ValidateAtomicAccess.js | 6 +- .../2022/ValidateIntegerTypedArray.js | 7 +- .../es-abstract/2022/ValidateTypedArray.js | 24 +- node_modules/es-abstract/2022/WeakRefDeref.js | 3 +- .../es-abstract/2022/WordCharacters.js | 9 +- node_modules/es-abstract/2022/clamp.js | 6 +- node_modules/es-abstract/2022/floor.js | 4 +- node_modules/es-abstract/2022/substring.js | 8 +- .../2022/tables/typed-array-objects.js | 35 + .../es-abstract/2022/thisBigIntValue.js | 3 +- .../es-abstract/2022/thisBooleanValue.js | 4 +- .../es-abstract/2022/thisNumberValue.js | 4 +- .../es-abstract/2022/thisStringValue.js | 4 +- .../es-abstract/2022/thisSymbolValue.js | 7 +- .../2023/AddEntriesFromIterable.js | 4 +- .../es-abstract/2023/AddToKeptObjects.js | 3 +- .../es-abstract/2023/AdvanceStringIndex.js | 9 +- .../ApplyStringOrNumericBinaryOperator.js | 8 +- node_modules/es-abstract/2023/ArrayCreate.js | 6 +- .../es-abstract/2023/ArraySetLength.js | 16 +- .../es-abstract/2023/ArraySpeciesCreate.js | 2 +- .../2023/AsyncFromSyncIteratorContinuation.js | 6 +- .../es-abstract/2023/AsyncIteratorClose.js | 10 +- node_modules/es-abstract/2023/BigInt/add.js | 8 +- .../es-abstract/2023/BigInt/bitwiseAND.js | 7 +- .../es-abstract/2023/BigInt/bitwiseNOT.js | 6 +- .../es-abstract/2023/BigInt/bitwiseOR.js | 7 +- .../es-abstract/2023/BigInt/bitwiseXOR.js | 7 +- .../es-abstract/2023/BigInt/divide.js | 8 +- node_modules/es-abstract/2023/BigInt/equal.js | 8 +- .../es-abstract/2023/BigInt/exponentiate.js | 8 +- .../es-abstract/2023/BigInt/leftShift.js | 8 +- .../es-abstract/2023/BigInt/lessThan.js | 8 +- .../es-abstract/2023/BigInt/multiply.js | 8 +- .../es-abstract/2023/BigInt/remainder.js | 8 +- .../2023/BigInt/signedRightShift.js | 7 +- .../es-abstract/2023/BigInt/subtract.js | 8 +- .../es-abstract/2023/BigInt/toString.js | 10 +- .../es-abstract/2023/BigInt/unaryMinus.js | 6 +- .../2023/BigInt/unsignedRightShift.js | 8 +- .../es-abstract/2023/BigIntBitwiseOp.js | 7 +- node_modules/es-abstract/2023/BinaryAnd.js | 4 +- node_modules/es-abstract/2023/BinaryOr.js | 4 +- node_modules/es-abstract/2023/BinaryXor.js | 4 +- .../es-abstract/2023/ByteListBitwiseOp.js | 3 +- .../es-abstract/2023/ByteListEqual.js | 4 +- node_modules/es-abstract/2023/Call.js | 2 +- .../es-abstract/2023/CanBeHeldWeakly.js | 2 +- .../2023/CanonicalNumericIndexString.js | 7 +- node_modules/es-abstract/2023/Canonicalize.js | 23 +- .../es-abstract/2023/CharacterRange.js | 2 +- .../es-abstract/2023/CloneArrayBuffer.js | 4 +- node_modules/es-abstract/2023/CodePointAt.js | 7 +- .../es-abstract/2023/CodePointsToString.js | 4 +- .../es-abstract/2023/CompareArrayElements.js | 4 +- .../2023/CompareTypedArrayElements.js | 9 +- .../2023/CompletePropertyDescriptor.js | 24 +- .../es-abstract/2023/CompletionRecord.js | 4 +- .../es-abstract/2023/CopyDataProperties.js | 4 +- .../2023/CreateAsyncFromSyncIterator.js | 28 +- .../es-abstract/2023/CreateDataProperty.js | 4 +- .../2023/CreateDataPropertyOrThrow.js | 4 +- node_modules/es-abstract/2023/CreateHTML.js | 7 +- .../2023/CreateIterResultObject.js | 8 +- .../2023/CreateListFromArrayLike.js | 4 +- .../es-abstract/2023/CreateMethodProperty.js | 4 +- .../CreateNonEnumerableDataPropertyOrThrow.js | 4 +- .../2023/CreateRegExpStringIterator.js | 8 +- node_modules/es-abstract/2023/DateFromTime.js | 4 +- node_modules/es-abstract/2023/DateString.js | 11 +- .../es-abstract/2023/DefaultTimeZone.js | 18 + .../es-abstract/2023/DefineMethodProperty.js | 41 + .../es-abstract/2023/DefinePropertyOrThrow.js | 19 +- .../es-abstract/2023/DeletePropertyOrThrow.js | 4 +- .../es-abstract/2023/DetachArrayBuffer.js | 25 +- .../2023/EnumerableOwnProperties.js | 2 +- .../es-abstract/2023/FindViaPredicate.js | 4 +- .../es-abstract/2023/FlattenIntoArray.js | 4 +- .../2023/FromPropertyDescriptor.js | 10 +- node_modules/es-abstract/2023/Get.js | 4 +- node_modules/es-abstract/2023/GetIterator.js | 2 +- .../es-abstract/2023/GetIteratorFromMethod.js | 4 +- .../es-abstract/2023/GetMatchIndexPair.js | 14 +- .../es-abstract/2023/GetMatchString.js | 13 +- node_modules/es-abstract/2023/GetMethod.js | 4 +- .../es-abstract/2023/GetOwnPropertyKeys.js | 2 +- .../es-abstract/2023/GetPromiseResolve.js | 4 +- .../2023/GetPrototypeFromConstructor.js | 4 +- .../es-abstract/2023/GetStringIndex.js | 6 +- .../es-abstract/2023/GetSubstitution.js | 192 +- node_modules/es-abstract/2023/GetV.js | 4 +- .../es-abstract/2023/GetValueFromBuffer.js | 23 +- .../es-abstract/2023/HasOwnProperty.js | 8 +- node_modules/es-abstract/2023/HasProperty.js | 4 +- node_modules/es-abstract/2023/InLeapYear.js | 4 +- .../es-abstract/2023/InstallErrorCause.js | 4 +- .../es-abstract/2023/InstanceofOperator.js | 2 +- .../2023/IntegerIndexedElementGet.js | 38 + .../2023/IntegerIndexedElementSet.js | 42 + .../2023/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2023/Invoke.js | 4 +- .../es-abstract/2023/IsAccessorDescriptor.js | 12 +- .../es-abstract/2023/IsDataDescriptor.js | 12 +- .../es-abstract/2023/IsDetachedBuffer.js | 17 +- .../es-abstract/2023/IsGenericDescriptor.js | 9 +- .../es-abstract/2023/IsIntegralNumber.js | 3 +- node_modules/es-abstract/2023/IsLessThan.js | 19 +- .../es-abstract/2023/IsSharedArrayBuffer.js | 4 +- .../2023/IsStringWellFormedUnicode.js | 7 +- .../es-abstract/2023/IsValidIntegerIndex.js | 4 +- node_modules/es-abstract/2023/IsWordChar.js | 11 +- .../es-abstract/2023/IteratorClose.js | 10 +- .../es-abstract/2023/IteratorComplete.js | 4 +- node_modules/es-abstract/2023/IteratorNext.js | 10 +- node_modules/es-abstract/2023/IteratorStep.js | 9 +- .../es-abstract/2023/IteratorToList.js | 9 +- .../es-abstract/2023/IteratorValue.js | 4 +- node_modules/es-abstract/2023/KeyForSymbol.js | 8 +- .../es-abstract/2023/LengthOfArrayLike.js | 4 +- .../2023/MakeMatchIndicesIndexPairArray.js | 11 +- .../es-abstract/2023/NewPromiseCapability.js | 8 +- node_modules/es-abstract/2023/Number/add.js | 8 +- .../es-abstract/2023/Number/bitwiseAND.js | 7 +- .../es-abstract/2023/Number/bitwiseNOT.js | 7 +- .../es-abstract/2023/Number/bitwiseOR.js | 7 +- .../es-abstract/2023/Number/bitwiseXOR.js | 7 +- .../es-abstract/2023/Number/divide.js | 7 +- node_modules/es-abstract/2023/Number/equal.js | 7 +- .../es-abstract/2023/Number/exponentiate.js | 5 +- .../es-abstract/2023/Number/leftShift.js | 7 +- .../es-abstract/2023/Number/lessThan.js | 8 +- .../es-abstract/2023/Number/multiply.js | 8 +- .../es-abstract/2023/Number/remainder.js | 7 +- .../es-abstract/2023/Number/sameValue.js | 6 +- .../es-abstract/2023/Number/sameValueZero.js | 8 +- .../2023/Number/signedRightShift.js | 7 +- .../es-abstract/2023/Number/subtract.js | 8 +- .../es-abstract/2023/Number/toString.js | 8 +- .../es-abstract/2023/Number/unaryMinus.js | 8 +- .../2023/Number/unsignedRightShift.js | 7 +- .../es-abstract/2023/NumberBitwiseOp.js | 7 +- .../es-abstract/2023/NumberToBigInt.js | 9 +- .../es-abstract/2023/NumericToRawBytes.js | 9 +- .../2023/OrdinaryCreateFromConstructor.js | 2 +- .../2023/OrdinaryDefineOwnProperty.js | 15 +- .../2023/OrdinaryGetOwnProperty.js | 8 +- .../2023/OrdinaryGetPrototypeOf.js | 4 +- .../es-abstract/2023/OrdinaryHasInstance.js | 4 +- .../es-abstract/2023/OrdinaryHasProperty.js | 4 +- .../es-abstract/2023/OrdinaryObjectCreate.js | 4 +- .../2023/OrdinarySetPrototypeOf.js | 7 +- .../es-abstract/2023/OrdinaryToPrimitive.js | 6 +- .../es-abstract/2023/ParseHexOctet.js | 7 +- .../es-abstract/2023/PromiseResolve.js | 3 +- .../es-abstract/2023/QuoteJSONString.js | 11 +- .../es-abstract/2023/RawBytesToNumeric.js | 9 +- node_modules/es-abstract/2023/RegExpExec.js | 8 +- .../es-abstract/2023/RegExpHasFlag.js | 4 +- .../2023/RequireObjectCoercible.js | 2 +- .../es-abstract/2023/SameValueNonNumber.js | 4 +- node_modules/es-abstract/2023/Set.js | 6 +- .../es-abstract/2023/SetFunctionLength.js | 7 +- .../es-abstract/2023/SetFunctionName.js | 14 +- .../es-abstract/2023/SetIntegrityLevel.js | 4 +- .../2023/SetTypedArrayFromArrayLike.js | 57 +- .../2023/SetTypedArrayFromTypedArray.js | 57 +- .../es-abstract/2023/SetValueInBuffer.js | 30 +- .../es-abstract/2023/SortIndexedProperties.js | 3 +- .../es-abstract/2023/SpeciesConstructor.js | 2 +- node_modules/es-abstract/2023/StringCreate.js | 9 +- .../es-abstract/2023/StringGetOwnProperty.js | 8 +- .../es-abstract/2023/StringIndexOf.js | 9 +- node_modules/es-abstract/2023/StringPad.js | 4 +- .../es-abstract/2023/StringToBigInt.js | 4 +- .../es-abstract/2023/StringToCodePoints.js | 7 +- .../es-abstract/2023/StringToNumber.js | 6 +- .../2023/SymbolDescriptiveString.js | 8 +- .../es-abstract/2023/TestIntegrityLevel.js | 4 +- node_modules/es-abstract/2023/TimeString.js | 23 +- .../es-abstract/2023/TimeZoneString.js | 43 + node_modules/es-abstract/2023/ToBigInt.js | 10 +- node_modules/es-abstract/2023/ToDateString.js | 6 +- node_modules/es-abstract/2023/ToIndex.js | 4 +- node_modules/es-abstract/2023/ToNumber.js | 2 +- node_modules/es-abstract/2023/ToNumeric.js | 3 +- node_modules/es-abstract/2023/ToObject.js | 11 +- .../es-abstract/2023/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/2023/ToString.js | 2 +- .../2023/ToZeroPaddedDecimalString.js | 2 +- node_modules/es-abstract/2023/TrimString.js | 4 +- .../es-abstract/2023/TypedArrayCreate.js | 9 +- .../2023/TypedArrayCreateSameType.js | 8 +- .../es-abstract/2023/TypedArrayElementSize.js | 23 +- .../es-abstract/2023/TypedArrayElementType.js | 23 +- .../2023/TypedArraySpeciesCreate.js | 8 +- .../es-abstract/2023/UTF16EncodeCodePoint.js | 2 +- .../2023/UTF16SurrogatePairToCodePoint.js | 2 +- .../es-abstract/2023/UnicodeEscape.js | 4 +- .../ValidateAndApplyPropertyDescriptor.js | 35 +- .../es-abstract/2023/ValidateAtomicAccess.js | 6 +- .../2023/ValidateIntegerTypedArray.js | 7 +- .../es-abstract/2023/ValidateTypedArray.js | 24 +- node_modules/es-abstract/2023/WeakRefDeref.js | 3 +- .../es-abstract/2023/WordCharacters.js | 13 +- node_modules/es-abstract/2023/clamp.js | 6 +- node_modules/es-abstract/2023/floor.js | 4 +- node_modules/es-abstract/2023/substring.js | 8 +- .../2023/tables/typed-array-objects.js | 35 + .../es-abstract/2023/thisBigIntValue.js | 3 +- .../es-abstract/2023/thisBooleanValue.js | 4 +- .../es-abstract/2023/thisNumberValue.js | 4 +- .../es-abstract/2023/thisStringValue.js | 4 +- .../es-abstract/2023/thisSymbolValue.js | 7 +- node_modules/es-abstract/2023/truncate.js | 4 +- .../2024/AddEntriesFromIterable.js | 45 + .../es-abstract/2024/AddToKeptObjects.js | 20 + .../es-abstract/2024/AddValueToKeyedGroup.js | 47 + .../es-abstract/2024/AdvanceStringIndex.js | 31 + .../ApplyStringOrNumericBinaryOperator.js | 78 + .../es-abstract/2024/ArrayBufferByteLength.js | 38 + .../2024/ArrayBufferCopyAndDetach.js | 99 + node_modules/es-abstract/2024/ArrayCreate.js | 54 + .../es-abstract/2024/ArraySetLength.js | 77 + .../es-abstract/2024/ArraySpeciesCreate.js | 49 + .../2024/AsyncFromSyncIteratorContinuation.js | 45 + .../es-abstract/2024/AsyncIteratorClose.js | 70 + node_modules/es-abstract/2024/BigInt/add.js | 14 + .../es-abstract/2024/BigInt/bitwiseAND.js | 14 + .../es-abstract/2024/BigInt/bitwiseNOT.js | 15 + .../es-abstract/2024/BigInt/bitwiseOR.js | 14 + .../es-abstract/2024/BigInt/bitwiseXOR.js | 14 + .../es-abstract/2024/BigInt/divide.js | 20 + node_modules/es-abstract/2024/BigInt/equal.js | 13 + .../es-abstract/2024/BigInt/exponentiate.js | 29 + node_modules/es-abstract/2024/BigInt/index.js | 39 + .../es-abstract/2024/BigInt/leftShift.js | 14 + .../es-abstract/2024/BigInt/lessThan.js | 14 + .../es-abstract/2024/BigInt/multiply.js | 14 + .../es-abstract/2024/BigInt/remainder.js | 28 + .../2024/BigInt/signedRightShift.js | 15 + .../es-abstract/2024/BigInt/subtract.js | 14 + .../es-abstract/2024/BigInt/toString.js | 28 + .../es-abstract/2024/BigInt/unaryMinus.js | 22 + .../2024/BigInt/unsignedRightShift.js | 13 + .../es-abstract/2024/BigIntBitwiseOp.js | 63 + node_modules/es-abstract/2024/BinaryAnd.js | 12 + node_modules/es-abstract/2024/BinaryOr.js | 12 + node_modules/es-abstract/2024/BinaryXor.js | 12 + .../es-abstract/2024/ByteListBitwiseOp.js | 43 + .../es-abstract/2024/ByteListEqual.js | 31 + node_modules/es-abstract/2024/Call.js | 20 + .../es-abstract/2024/CanBeHeldWeakly.js | 16 + .../2024/CanonicalNumericIndexString.js | 19 + node_modules/es-abstract/2024/Canonicalize.js | 52 + .../es-abstract/2024/CharacterRange.js | 31 + .../es-abstract/2024/ClearKeptObjects.js | 12 + .../es-abstract/2024/CloneArrayBuffer.js | 47 + node_modules/es-abstract/2024/CodePointAt.js | 55 + .../es-abstract/2024/CodePointsToString.js | 25 + .../es-abstract/2024/CompareArrayElements.js | 50 + .../2024/CompareTypedArrayElements.js | 60 + .../2024/CompletePropertyDescriptor.js | 43 + .../es-abstract/2024/CompletionRecord.js | 51 + .../es-abstract/2024/CopyDataProperties.js | 68 + .../2024/CreateAsyncFromSyncIterator.js | 137 + .../es-abstract/2024/CreateDataProperty.js | 25 + .../2024/CreateDataPropertyOrThrow.js | 22 + node_modules/es-abstract/2024/CreateHTML.js | 27 + .../2024/CreateIterResultObject.js | 15 + .../2024/CreateListFromArrayLike.js | 44 + .../CreateNonEnumerableDataPropertyOrThrow.js | 27 + .../2024/CreateRegExpStringIterator.js | 101 + node_modules/es-abstract/2024/DateFromTime.js | 52 + node_modules/es-abstract/2024/DateString.js | 27 + node_modules/es-abstract/2024/Day.js | 11 + node_modules/es-abstract/2024/DayFromYear.js | 10 + .../es-abstract/2024/DayWithinYear.js | 11 + node_modules/es-abstract/2024/DaysInYear.js | 18 + .../es-abstract/2024/DefineMethodProperty.js | 41 + .../es-abstract/2024/DefinePropertyOrThrow.js | 39 + .../es-abstract/2024/DeletePropertyOrThrow.js | 25 + .../es-abstract/2024/DetachArrayBuffer.js | 46 + .../2024/EnumerableOwnProperties.js | 43 + .../es-abstract/2024/FindViaPredicate.js | 42 + .../es-abstract/2024/FlattenIntoArray.js | 55 + .../2024/FromPropertyDescriptor.js | 16 + node_modules/es-abstract/2024/Get.js | 23 + .../2024/GetArrayBufferMaxByteLengthOption.js | 21 + .../es-abstract/2024/GetGlobalObject.js | 9 + node_modules/es-abstract/2024/GetIterator.js | 56 + .../es-abstract/2024/GetIteratorFromMethod.js | 28 + .../es-abstract/2024/GetMatchIndexPair.js | 24 + .../es-abstract/2024/GetMatchString.js | 26 + node_modules/es-abstract/2024/GetMethod.js | 34 + .../es-abstract/2024/GetOwnPropertyKeys.js | 31 + .../es-abstract/2024/GetPromiseResolve.js | 20 + .../2024/GetPrototypeFromConstructor.js | 32 + .../es-abstract/2024/GetStringIndex.js | 29 + .../es-abstract/2024/GetSubstitution.js | 150 + node_modules/es-abstract/2024/GetV.js | 23 + .../es-abstract/2024/GetValueFromBuffer.js | 97 + .../es-abstract/2024/GetViewByteLength.js | 45 + node_modules/es-abstract/2024/GroupBy.js | 77 + .../es-abstract/2024/HasEitherUnicodeFlag.js | 18 + .../es-abstract/2024/HasOwnProperty.js | 20 + node_modules/es-abstract/2024/HasProperty.js | 18 + node_modules/es-abstract/2024/HourFromTime.js | 14 + node_modules/es-abstract/2024/InLeapYear.js | 19 + .../es-abstract/2024/InstallErrorCause.js | 21 + .../es-abstract/2024/InstanceofOperator.js | 30 + .../2024/InternalizeJSONProperty.js | 68 + node_modules/es-abstract/2024/Invoke.js | 22 + .../es-abstract/2024/IsAccessorDescriptor.js | 25 + node_modules/es-abstract/2024/IsArray.js | 4 + .../2024/IsArrayBufferViewOutOfBounds.js | 30 + .../es-abstract/2024/IsBigIntElementType.js | 7 + node_modules/es-abstract/2024/IsCallable.js | 5 + .../2024/IsCompatiblePropertyDescriptor.js | 9 + .../es-abstract/2024/IsConcatSpreadable.js | 25 + .../es-abstract/2024/IsConstructor.js | 40 + .../es-abstract/2024/IsDataDescriptor.js | 25 + .../es-abstract/2024/IsDetachedBuffer.js | 28 + node_modules/es-abstract/2024/IsExtensible.js | 18 + .../2024/IsFixedLengthArrayBuffer.js | 29 + .../es-abstract/2024/IsGenericDescriptor.js | 26 + .../es-abstract/2024/IsIntegralNumber.js | 14 + node_modules/es-abstract/2024/IsLessThan.js | 97 + .../es-abstract/2024/IsLooselyEqual.js | 58 + .../es-abstract/2024/IsNoTearConfiguration.js | 16 + node_modules/es-abstract/2024/IsPromise.js | 24 + .../es-abstract/2024/IsPropertyKey.js | 7 + node_modules/es-abstract/2024/IsRegExp.js | 24 + .../es-abstract/2024/IsSharedArrayBuffer.js | 17 + .../es-abstract/2024/IsStrictlyEqual.js | 16 + .../2024/IsStringWellFormedUnicode.js | 23 + .../2024/IsTypedArrayOutOfBounds.js | 54 + .../2024/IsUnclampedIntegerElementType.js | 12 + .../es-abstract/2024/IsUnsignedElementType.js | 11 + .../es-abstract/2024/IsValidIntegerIndex.js | 43 + .../es-abstract/2024/IsViewOutOfBounds.js | 45 + node_modules/es-abstract/2024/IsWordChar.js | 44 + .../es-abstract/2024/IteratorClose.js | 62 + .../es-abstract/2024/IteratorComplete.js | 16 + node_modules/es-abstract/2024/IteratorNext.js | 28 + node_modules/es-abstract/2024/IteratorStep.js | 21 + .../es-abstract/2024/IteratorStepValue.js | 49 + .../es-abstract/2024/IteratorToList.js | 31 + .../es-abstract/2024/IteratorValue.js | 16 + node_modules/es-abstract/2024/KeyForSymbol.js | 16 + .../es-abstract/2024/LengthOfArrayLike.js | 18 + .../MakeDataViewWithBufferWitnessRecord.js | 26 + node_modules/es-abstract/2024/MakeDate.js | 13 + node_modules/es-abstract/2024/MakeDay.js | 36 + node_modules/es-abstract/2024/MakeFullYear.js | 26 + .../2024/MakeMatchIndicesIndexPairArray.js | 66 + node_modules/es-abstract/2024/MakeTime.js | 23 + .../MakeTypedArrayWithBufferWitnessRecord.js | 26 + node_modules/es-abstract/2024/MinFromTime.js | 14 + .../es-abstract/2024/MonthFromTime.js | 47 + .../es-abstract/2024/NewPromiseCapability.js | 34 + .../es-abstract/2024/NormalCompletion.js | 9 + node_modules/es-abstract/2024/Number/add.js | 32 + .../es-abstract/2024/Number/bitwiseAND.js | 14 + .../es-abstract/2024/Number/bitwiseNOT.js | 16 + .../es-abstract/2024/Number/bitwiseOR.js | 14 + .../es-abstract/2024/Number/bitwiseXOR.js | 14 + .../es-abstract/2024/Number/divide.js | 19 + node_modules/es-abstract/2024/Number/equal.js | 18 + .../es-abstract/2024/Number/exponentiate.js | 76 + node_modules/es-abstract/2024/Number/index.js | 43 + .../es-abstract/2024/Number/leftShift.js | 22 + .../es-abstract/2024/Number/lessThan.js | 22 + .../es-abstract/2024/Number/multiply.js | 29 + .../es-abstract/2024/Number/remainder.js | 39 + .../es-abstract/2024/Number/sameValue.js | 19 + .../es-abstract/2024/Number/sameValueZero.js | 20 + .../2024/Number/signedRightShift.js | 22 + .../es-abstract/2024/Number/subtract.js | 15 + .../es-abstract/2024/Number/toString.js | 22 + .../es-abstract/2024/Number/unaryMinus.js | 17 + .../2024/Number/unsignedRightShift.js | 22 + .../es-abstract/2024/NumberBitwiseOp.js | 26 + .../es-abstract/2024/NumberToBigInt.js | 25 + .../es-abstract/2024/NumericToRawBytes.js | 77 + .../2024/ObjectDefineProperties.js | 37 + .../2024/OrdinaryCreateFromConstructor.js | 20 + .../2024/OrdinaryDefineOwnProperty.js | 54 + .../2024/OrdinaryGetOwnProperty.js | 42 + .../2024/OrdinaryGetPrototypeOf.js | 19 + .../es-abstract/2024/OrdinaryHasInstance.js | 23 + .../es-abstract/2024/OrdinaryHasProperty.js | 18 + .../es-abstract/2024/OrdinaryObjectCreate.js | 56 + .../2024/OrdinarySetPrototypeOf.js | 50 + .../es-abstract/2024/OrdinaryToPrimitive.js | 36 + .../es-abstract/2024/ParseHexOctet.js | 43 + .../es-abstract/2024/PromiseResolve.js | 18 + .../es-abstract/2024/QuoteJSONString.js | 51 + .../es-abstract/2024/RawBytesToNumeric.js | 83 + node_modules/es-abstract/2024/RegExpCreate.js | 21 + node_modules/es-abstract/2024/RegExpExec.js | 30 + .../es-abstract/2024/RegExpHasFlag.js | 38 + .../2024/RequireObjectCoercible.js | 3 + node_modules/es-abstract/2024/SameValue.js | 13 + .../es-abstract/2024/SameValueNonNumber.js | 19 + .../es-abstract/2024/SameValueZero.js | 9 + node_modules/es-abstract/2024/SecFromTime.js | 14 + node_modules/es-abstract/2024/Set.js | 45 + .../es-abstract/2024/SetFunctionLength.js | 29 + .../es-abstract/2024/SetFunctionName.js | 40 + .../es-abstract/2024/SetIntegrityLevel.js | 57 + .../2024/SetTypedArrayFromArrayLike.js | 65 + .../2024/SetTypedArrayFromTypedArray.js | 131 + .../es-abstract/2024/SetValueInBuffer.js | 93 + .../es-abstract/2024/SortIndexedProperties.js | 51 + .../es-abstract/2024/SpeciesConstructor.js | 32 + node_modules/es-abstract/2024/StringCreate.js | 39 + .../es-abstract/2024/StringGetOwnProperty.js | 46 + .../es-abstract/2024/StringIndexOf.js | 37 + node_modules/es-abstract/2024/StringPad.js | 45 + .../2024/StringPaddingBuiltinsImpl.js | 27 + .../es-abstract/2024/StringToBigInt.js | 23 + .../es-abstract/2024/StringToCodePoints.js | 26 + .../es-abstract/2024/StringToNumber.js | 43 + .../2024/SymbolDescriptiveString.js | 16 + .../2024/SystemTimeZoneIdentifier.js | 18 + .../es-abstract/2024/TestIntegrityLevel.js | 40 + .../es-abstract/2024/ThisBigIntValue.js | 18 + .../es-abstract/2024/ThisBooleanValue.js | 13 + .../es-abstract/2024/ThisNumberValue.js | 15 + .../es-abstract/2024/ThisStringValue.js | 13 + .../es-abstract/2024/ThisSymbolValue.js | 20 + .../es-abstract/2024/ThrowCompletion.js | 9 + node_modules/es-abstract/2024/TimeClip.js | 21 + node_modules/es-abstract/2024/TimeFromYear.js | 11 + node_modules/es-abstract/2024/TimeString.js | 26 + .../es-abstract/2024/TimeWithinDay.js | 12 + .../es-abstract/2024/TimeZoneString.js | 43 + node_modules/es-abstract/2024/ToBigInt.js | 51 + node_modules/es-abstract/2024/ToBigInt64.js | 25 + node_modules/es-abstract/2024/ToBigUint64.js | 22 + node_modules/es-abstract/2024/ToBoolean.js | 5 + node_modules/es-abstract/2024/ToDateString.js | 21 + node_modules/es-abstract/2024/ToIndex.js | 20 + node_modules/es-abstract/2024/ToInt16.js | 21 + node_modules/es-abstract/2024/ToInt32.js | 23 + node_modules/es-abstract/2024/ToInt8.js | 19 + .../es-abstract/2024/ToIntegerOrInfinity.js | 16 + node_modules/es-abstract/2024/ToLength.js | 12 + node_modules/es-abstract/2024/ToNumber.js | 26 + node_modules/es-abstract/2024/ToNumeric.js | 20 + node_modules/es-abstract/2024/ToObject.js | 5 + node_modules/es-abstract/2024/ToPrimitive.js | 12 + .../es-abstract/2024/ToPropertyDescriptor.js | 50 + .../es-abstract/2024/ToPropertyKey.js | 15 + node_modules/es-abstract/2024/ToString.js | 15 + node_modules/es-abstract/2024/ToUint16.js | 21 + node_modules/es-abstract/2024/ToUint32.js | 21 + node_modules/es-abstract/2024/ToUint8.js | 19 + node_modules/es-abstract/2024/ToUint8Clamp.js | 26 + .../2024/ToZeroPaddedDecimalString.js | 20 + node_modules/es-abstract/2024/TrimString.js | 27 + node_modules/es-abstract/2024/Type.js | 15 + .../es-abstract/2024/TypedArrayByteLength.js | 39 + .../2024/TypedArrayCreateFromConstructor.js | 52 + .../2024/TypedArrayCreateSameType.js | 35 + .../es-abstract/2024/TypedArrayElementSize.js | 25 + .../es-abstract/2024/TypedArrayElementType.js | 23 + .../es-abstract/2024/TypedArrayGetElement.js | 37 + .../es-abstract/2024/TypedArrayLength.js | 49 + .../es-abstract/2024/TypedArraySetElement.js | 42 + .../2024/TypedArraySpeciesCreate.js | 37 + .../es-abstract/2024/UTF16EncodeCodePoint.js | 25 + .../2024/UTF16SurrogatePairToCodePoint.js | 19 + .../es-abstract/2024/UnicodeEscape.js | 25 + .../ValidateAndApplyPropertyDescriptor.js | 172 + .../es-abstract/2024/ValidateAtomicAccess.js | 43 + ...ValidateAtomicAccessOnIntegerTypedArray.js | 19 + .../2024/ValidateIntegerTypedArray.js | 31 + .../es-abstract/2024/ValidateTypedArray.js | 32 + node_modules/es-abstract/2024/WeakRefDeref.js | 23 + node_modules/es-abstract/2024/WeekDay.js | 10 + .../es-abstract/2024/WordCharacters.js | 47 + node_modules/es-abstract/2024/YearFromTime.js | 16 + node_modules/es-abstract/2024/abs.js | 11 + node_modules/es-abstract/2024/clamp.js | 16 + node_modules/es-abstract/2024/floor.js | 14 + node_modules/es-abstract/2024/max.js | 7 + node_modules/es-abstract/2024/min.js | 7 + node_modules/es-abstract/2024/modulo.js | 9 + node_modules/es-abstract/2024/msFromTime.js | 11 + node_modules/es-abstract/2024/substring.js | 17 + .../2024/tables/typed-array-objects.js | 35 + node_modules/es-abstract/2024/truncate.js | 15 + .../5/AbstractRelationalComparison.js | 7 +- node_modules/es-abstract/5/Canonicalize.js | 10 +- .../es-abstract/5/CheckObjectCoercible.js | 11 +- node_modules/es-abstract/5/DateFromTime.js | 4 +- .../es-abstract/5/FromPropertyDescriptor.js | 11 +- node_modules/es-abstract/5/InLeapYear.js | 4 +- .../es-abstract/5/IsAccessorDescriptor.js | 12 +- .../es-abstract/5/IsDataDescriptor.js | 12 +- .../es-abstract/5/IsGenericDescriptor.js | 9 +- .../es-abstract/5/IsPropertyDescriptor.js | 12 +- node_modules/es-abstract/5/ToObject.js | 11 +- .../es-abstract/5/ToPropertyDescriptor.js | 20 +- node_modules/es-abstract/CHANGELOG.md | 87 +- node_modules/es-abstract/es2015.js | 3 + node_modules/es-abstract/es2016.js | 3 + node_modules/es-abstract/es2017.js | 3 + node_modules/es-abstract/es2018.js | 4 + node_modules/es-abstract/es2019.js | 4 + node_modules/es-abstract/es2020.js | 4 + node_modules/es-abstract/es2021.js | 4 + node_modules/es-abstract/es2022.js | 5 + node_modules/es-abstract/es2023.js | 6 + node_modules/es-abstract/es2024.js | 250 + .../es-abstract/helpers/DefineOwnProperty.js | 4 +- .../es-abstract/helpers/assertRecord.js | 85 +- node_modules/es-abstract/helpers/assign.js | 4 +- .../es-abstract/helpers/bytesAsFloat32.js | 2 +- .../es-abstract/helpers/bytesAsFloat64.js | 2 +- .../es-abstract/helpers/bytesAsInteger.js | 2 +- .../isFullyPopulatedPropertyDescriptor.js | 4 +- .../es-abstract/helpers/isMatchRecord.js | 16 - .../helpers/isPropertyDescriptor.js | 31 - .../es-abstract/helpers/isStringOrHole.js | 2 + .../helpers/isStringOrUndefined.js | 5 + .../es-abstract/helpers/maxSafeInteger.js | 7 +- .../records/async-generator-request-record.js | 13 + .../data-view-with-buffer-witness-record.js | 18 + .../helpers/records/iterator-record.js | 13 + .../helpers/records/match-record.js | 18 + .../records/promise-capability-record.js | 16 + .../helpers/records/property-descriptor.js | 36 + .../helpers/records/regexp-record.js | 23 + .../typed-array-with-buffer-witness-record.js | 18 + ...ntructors.js => typedArrayConstructors.js} | 0 node_modules/es-abstract/index.js | 4 +- node_modules/es-abstract/operations/2024.js | 1537 ++ node_modules/es-abstract/package.json | 106 +- node_modules/es-define-property/.eslintrc | 13 + .../es-define-property/.github/FUNDING.yml | 12 + node_modules/es-define-property/.nycrc | 9 + node_modules/es-define-property/CHANGELOG.md | 15 + node_modules/es-define-property/LICENSE | 21 + node_modules/es-define-property/README.md | 49 + node_modules/es-define-property/index.d.ts | 3 + node_modules/es-define-property/index.js | 16 + node_modules/es-define-property/package.json | 81 + node_modules/es-define-property/test/index.js | 55 + node_modules/es-define-property/tsconfig.json | 50 + node_modules/es-errors/.eslintrc | 5 + node_modules/es-errors/.github/FUNDING.yml | 12 + node_modules/es-errors/CHANGELOG.md | 40 + node_modules/es-errors/LICENSE | 21 + node_modules/es-errors/README.md | 55 + node_modules/es-errors/eval.d.ts | 3 + node_modules/es-errors/eval.js | 4 + node_modules/es-errors/index.d.ts | 3 + node_modules/es-errors/index.js | 4 + node_modules/es-errors/package.json | 80 + node_modules/es-errors/range.d.ts | 3 + node_modules/es-errors/range.js | 4 + node_modules/es-errors/ref.d.ts | 3 + node_modules/es-errors/ref.js | 4 + node_modules/es-errors/syntax.d.ts | 3 + node_modules/es-errors/syntax.js | 4 + node_modules/es-errors/test/index.js | 19 + node_modules/es-errors/tsconfig.json | 49 + node_modules/es-errors/type.d.ts | 3 + node_modules/es-errors/type.js | 4 + node_modules/es-errors/uri.d.ts | 3 + node_modules/es-errors/uri.js | 4 + .../node_modules/isarray/README.md | 38 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 48 - node_modules/es-object-atoms/.eslintrc | 16 + .../es-object-atoms/.github/FUNDING.yml | 12 + node_modules/es-object-atoms/CHANGELOG.md | 16 + node_modules/es-object-atoms/LICENSE | 21 + node_modules/es-object-atoms/README.md | 56 + .../RequireObjectCoercible.d.ts | 3 + .../es-object-atoms/RequireObjectCoercible.js | 11 + node_modules/es-object-atoms/ToObject.d.ts | 3 + node_modules/es-object-atoms/ToObject.js | 10 + node_modules/es-object-atoms/index.d.ts | 3 + node_modules/es-object-atoms/index.js | 4 + node_modules/es-object-atoms/package.json | 79 + node_modules/es-object-atoms/test/index.js | 28 + node_modules/es-object-atoms/tsconfig.json | 6 + node_modules/es-set-tostringtag/CHANGELOG.md | 17 + node_modules/es-set-tostringtag/index.d.ts | 7 + node_modules/es-set-tostringtag/index.js | 5 +- node_modules/es-set-tostringtag/package.json | 21 +- node_modules/es-set-tostringtag/test/index.js | 8 +- node_modules/es-set-tostringtag/tsconfig.json | 49 + node_modules/es-shim-unscopables/CHANGELOG.md | 14 + node_modules/es-shim-unscopables/index.js | 4 +- node_modules/es-shim-unscopables/package.json | 21 +- .../es-shim-unscopables/test/index.js | 4 +- node_modules/eslint-module-utils/CHANGELOG.md | 18 + .../eslint-module-utils/contextCompat.d.ts | 38 + .../eslint-module-utils/contextCompat.js | 72 + .../eslint-module-utils/declaredScope.d.ts | 4 +- .../eslint-module-utils/declaredScope.js | 6 +- node_modules/eslint-module-utils/ignore.js | 10 +- node_modules/eslint-module-utils/package.json | 3 +- node_modules/eslint-module-utils/resolve.js | 3 +- .../eslint-plugin/README.md | 12 - .../eslint-plugin/dist/configs/all.js | 162 - .../eslint-plugin/dist/configs/all.js.map | 1 - .../eslint-plugin/dist/configs/base.js | 7 - .../eslint-plugin/dist/configs/base.js.map | 1 - .../dist/configs/disable-type-checked.js | 73 - .../dist/configs/disable-type-checked.js.map | 1 - .../dist/configs/eslint-recommended-raw.js | 42 - .../configs/eslint-recommended-raw.js.map | 1 - .../dist/configs/eslint-recommended.js | 14 - .../dist/configs/eslint-recommended.js.map | 1 - .../configs/recommended-type-checked-only.js | 34 - .../recommended-type-checked-only.js.map | 1 - .../dist/configs/recommended-type-checked.js | 54 - .../configs/recommended-type-checked.js.map | 1 - .../eslint-plugin/dist/configs/recommended.js | 33 - .../dist/configs/recommended.js.map | 1 - .../dist/configs/strict-type-checked-only.js | 69 - .../configs/strict-type-checked-only.js.map | 1 - .../dist/configs/strict-type-checked.js | 101 - .../dist/configs/strict-type-checked.js.map | 1 - .../eslint-plugin/dist/configs/strict.js | 45 - .../eslint-plugin/dist/configs/strict.js.map | 1 - .../configs/stylistic-type-checked-only.js | 19 - .../stylistic-type-checked-only.js.map | 1 - .../dist/configs/stylistic-type-checked.js | 35 - .../configs/stylistic-type-checked.js.map | 1 - .../eslint-plugin/dist/configs/stylistic.js | 29 - .../dist/configs/stylistic.js.map | 1 - .../eslint-plugin/dist/index.js | 45 - .../eslint-plugin/dist/index.js.map | 1 - .../rules/adjacent-overload-signatures.js | 130 - .../rules/adjacent-overload-signatures.js.map | 1 - .../eslint-plugin/dist/rules/array-type.js | 229 - .../dist/rules/array-type.js.map | 1 - .../dist/rules/await-thenable.js | 74 - .../dist/rules/await-thenable.js.map | 1 - .../dist/rules/ban-ts-comment.js | 178 - .../dist/rules/ban-ts-comment.js.map | 1 - .../dist/rules/ban-tslint-comment.js | 54 - .../dist/rules/ban-tslint-comment.js.map | 1 - .../eslint-plugin/dist/rules/ban-types.js | 242 - .../eslint-plugin/dist/rules/ban-types.js.map | 1 - .../eslint-plugin/dist/rules/block-spacing.js | 138 - .../dist/rules/block-spacing.js.map | 1 - .../eslint-plugin/dist/rules/brace-style.js | 97 - .../dist/rules/brace-style.js.map | 1 - .../rules/class-literal-property-style.js | 164 - .../rules/class-literal-property-style.js.map | 1 - .../dist/rules/class-methods-use-this.js | 209 - .../dist/rules/class-methods-use-this.js.map | 1 - .../eslint-plugin/dist/rules/comma-dangle.js | 164 - .../dist/rules/comma-dangle.js.map | 1 - .../eslint-plugin/dist/rules/comma-spacing.js | 149 - .../dist/rules/comma-spacing.js.map | 1 - .../rules/consistent-generic-constructors.js | 108 - .../consistent-generic-constructors.js.map | 1 - .../rules/consistent-indexed-object-style.js | 126 - .../consistent-indexed-object-style.js.map | 1 - .../dist/rules/consistent-return.js | 124 - .../dist/rules/consistent-return.js.map | 1 - .../dist/rules/consistent-type-assertions.js | 209 - .../rules/consistent-type-assertions.js.map | 1 - .../dist/rules/consistent-type-definitions.js | 98 - .../rules/consistent-type-definitions.js.map | 1 - .../dist/rules/consistent-type-exports.js | 243 - .../dist/rules/consistent-type-exports.js.map | 1 - .../dist/rules/consistent-type-imports.js | 606 - .../dist/rules/consistent-type-imports.js.map | 1 - .../dist/rules/default-param-last.js | 68 - .../dist/rules/default-param-last.js.map | 1 - .../eslint-plugin/dist/rules/dot-notation.js | 127 - .../dist/rules/dot-notation.js.map | 1 - .../dist/rules/enum-utils/shared.js | 112 - .../dist/rules/enum-utils/shared.js.map | 1 - .../rules/explicit-function-return-type.js | 180 - .../explicit-function-return-type.js.map | 1 - .../rules/explicit-member-accessibility.js | 293 - .../explicit-member-accessibility.js.map | 1 - .../rules/explicit-module-boundary-types.js | 386 - .../explicit-module-boundary-types.js.map | 1 - .../dist/rules/func-call-spacing.js | 143 - .../dist/rules/func-call-spacing.js.map | 1 - .../eslint-plugin/dist/rules/indent.js | 415 - .../eslint-plugin/dist/rules/indent.js.map | 1 - .../eslint-plugin/dist/rules/index.js | 306 - .../eslint-plugin/dist/rules/index.js.map | 1 - .../dist/rules/init-declarations.js | 104 - .../dist/rules/init-declarations.js.map | 1 - .../eslint-plugin/dist/rules/key-spacing.js | 320 - .../dist/rules/key-spacing.js.map | 1 - .../dist/rules/keyword-spacing.js | 93 - .../dist/rules/keyword-spacing.js.map | 1 - .../dist/rules/lines-around-comment.js | 355 - .../dist/rules/lines-around-comment.js.map | 1 - .../dist/rules/lines-between-class-members.js | 57 - .../rules/lines-between-class-members.js.map | 1 - .../eslint-plugin/dist/rules/max-params.js | 67 - .../dist/rules/max-params.js.map | 1 - .../dist/rules/member-delimiter-style.js | 254 - .../dist/rules/member-delimiter-style.js.map | 1 - .../dist/rules/member-ordering.js | 816 - .../dist/rules/member-ordering.js.map | 1 - .../dist/rules/method-signature-style.js | 179 - .../dist/rules/method-signature-style.js.map | 1 - .../rules/naming-convention-utils/enums.js | 103 - .../naming-convention-utils/enums.js.map | 1 - .../rules/naming-convention-utils/format.js | 91 - .../naming-convention-utils/format.js.map | 1 - .../rules/naming-convention-utils/index.js | 12 - .../naming-convention-utils/index.js.map | 1 - .../naming-convention-utils/parse-options.js | 72 - .../parse-options.js.map | 1 - .../rules/naming-convention-utils/schema.js | 309 - .../naming-convention-utils/schema.js.map | 1 - .../rules/naming-convention-utils/shared.js | 17 - .../naming-convention-utils/shared.js.map | 1 - .../rules/naming-convention-utils/types.js | 3 - .../naming-convention-utils/types.js.map | 1 - .../naming-convention-utils/validator.js | 350 - .../naming-convention-utils/validator.js.map | 1 - .../dist/rules/naming-convention.js | 506 - .../dist/rules/naming-convention.js.map | 1 - .../dist/rules/no-array-constructor.js | 52 - .../dist/rules/no-array-constructor.js.map | 1 - .../dist/rules/no-array-delete.js | 81 - .../dist/rules/no-array-delete.js.map | 1 - .../dist/rules/no-base-to-string.js | 163 - .../dist/rules/no-base-to-string.js.map | 1 - .../rules/no-confusing-non-null-assertion.js | 76 - .../no-confusing-non-null-assertion.js.map | 1 - .../rules/no-confusing-void-expression.js | 291 - .../rules/no-confusing-void-expression.js.map | 1 - .../dist/rules/no-dupe-class-members.js | 40 - .../dist/rules/no-dupe-class-members.js.map | 1 - .../dist/rules/no-duplicate-enum-values.js | 62 - .../rules/no-duplicate-enum-values.js.map | 1 - .../rules/no-duplicate-type-constituents.js | 163 - .../no-duplicate-type-constituents.js.map | 1 - .../dist/rules/no-dynamic-delete.js | 61 - .../dist/rules/no-dynamic-delete.js.map | 1 - .../dist/rules/no-empty-function.js | 132 - .../dist/rules/no-empty-function.js.map | 1 - .../dist/rules/no-empty-interface.js | 91 - .../dist/rules/no-empty-interface.js.map | 1 - .../dist/rules/no-empty-object-type.js | 140 - .../dist/rules/no-empty-object-type.js.map | 1 - .../dist/rules/no-explicit-any.js | 170 - .../dist/rules/no-explicit-any.js.map | 1 - .../dist/rules/no-extra-non-null-assertion.js | 36 - .../rules/no-extra-non-null-assertion.js.map | 1 - .../dist/rules/no-extra-parens.js | 275 - .../dist/rules/no-extra-parens.js.map | 1 - .../eslint-plugin/dist/rules/no-extra-semi.js | 32 - .../dist/rules/no-extra-semi.js.map | 1 - .../dist/rules/no-extraneous-class.js | 120 - .../dist/rules/no-extraneous-class.js.map | 1 - .../dist/rules/no-floating-promises.js | 367 - .../dist/rules/no-floating-promises.js.map | 1 - .../dist/rules/no-for-in-array.js | 61 - .../dist/rules/no-for-in-array.js.map | 1 - .../dist/rules/no-implied-eval.js | 150 - .../dist/rules/no-implied-eval.js.map | 1 - .../dist/rules/no-import-type-side-effects.js | 54 - .../rules/no-import-type-side-effects.js.map | 1 - .../dist/rules/no-inferrable-types.js | 182 - .../dist/rules/no-inferrable-types.js.map | 1 - .../dist/rules/no-invalid-this.js | 74 - .../dist/rules/no-invalid-this.js.map | 1 - .../dist/rules/no-invalid-void-type.js | 182 - .../dist/rules/no-invalid-void-type.js.map | 1 - .../eslint-plugin/dist/rules/no-loop-func.js | 168 - .../dist/rules/no-loop-func.js.map | 1 - .../dist/rules/no-loss-of-precision.js | 35 - .../dist/rules/no-loss-of-precision.js.map | 1 - .../dist/rules/no-magic-numbers.js | 244 - .../dist/rules/no-magic-numbers.js.map | 1 - .../rules/no-meaningless-void-operator.js | 94 - .../rules/no-meaningless-void-operator.js.map | 1 - .../dist/rules/no-misused-new.js | 83 - .../dist/rules/no-misused-new.js.map | 1 - .../dist/rules/no-misused-promises.js | 520 - .../dist/rules/no-misused-promises.js.map | 1 - .../dist/rules/no-mixed-enums.js | 191 - .../dist/rules/no-mixed-enums.js.map | 1 - .../eslint-plugin/dist/rules/no-namespace.js | 61 - .../dist/rules/no-namespace.js.map | 1 - ...no-non-null-asserted-nullish-coalescing.js | 74 - ...on-null-asserted-nullish-coalescing.js.map | 1 - .../no-non-null-asserted-optional-chain.js | 66 - ...no-non-null-asserted-optional-chain.js.map | 1 - .../dist/rules/no-non-null-assertion.js | 100 - .../dist/rules/no-non-null-assertion.js.map | 1 - .../eslint-plugin/dist/rules/no-redeclare.js | 199 - .../dist/rules/no-redeclare.js.map | 1 - .../rules/no-redundant-type-constituents.js | 414 - .../no-redundant-type-constituents.js.map | 1 - .../dist/rules/no-require-imports.js | 96 - .../dist/rules/no-require-imports.js.map | 1 - .../dist/rules/no-restricted-imports.js | 234 - .../dist/rules/no-restricted-imports.js.map | 1 - .../eslint-plugin/dist/rules/no-shadow.js | 483 - .../eslint-plugin/dist/rules/no-shadow.js.map | 1 - .../eslint-plugin/dist/rules/no-this-alias.js | 67 - .../dist/rules/no-this-alias.js.map | 1 - .../dist/rules/no-throw-literal.js | 97 - .../dist/rules/no-throw-literal.js.map | 1 - .../eslint-plugin/dist/rules/no-type-alias.js | 263 - .../dist/rules/no-type-alias.js.map | 1 - .../no-unnecessary-boolean-literal-compare.js | 232 - ...unnecessary-boolean-literal-compare.js.map | 1 - .../dist/rules/no-unnecessary-condition.js | 544 - .../rules/no-unnecessary-condition.js.map | 1 - ...necessary-parameter-property-assignment.js | 151 - ...ssary-parameter-property-assignment.js.map | 1 - .../dist/rules/no-unnecessary-qualifier.js | 147 - .../rules/no-unnecessary-qualifier.js.map | 1 - .../no-unnecessary-template-expression.js | 153 - .../no-unnecessary-template-expression.js.map | 1 - .../rules/no-unnecessary-type-arguments.js | 152 - .../no-unnecessary-type-arguments.js.map | 1 - .../rules/no-unnecessary-type-assertion.js | 261 - .../no-unnecessary-type-assertion.js.map | 1 - .../rules/no-unnecessary-type-constraint.js | 110 - .../no-unnecessary-type-constraint.js.map | 1 - .../rules/no-unnecessary-type-parameters.js | 308 - .../no-unnecessary-type-parameters.js.map | 1 - .../dist/rules/no-unsafe-argument.js | 209 - .../dist/rules/no-unsafe-argument.js.map | 1 - .../dist/rules/no-unsafe-assignment.js | 297 - .../dist/rules/no-unsafe-assignment.js.map | 1 - .../dist/rules/no-unsafe-call.js | 87 - .../dist/rules/no-unsafe-call.js.map | 1 - .../rules/no-unsafe-declaration-merging.js | 55 - .../no-unsafe-declaration-merging.js.map | 1 - .../dist/rules/no-unsafe-enum-comparison.js | 168 - .../rules/no-unsafe-enum-comparison.js.map | 1 - .../dist/rules/no-unsafe-function-type.js | 46 - .../dist/rules/no-unsafe-function-type.js.map | 1 - .../dist/rules/no-unsafe-member-access.js | 127 - .../dist/rules/no-unsafe-member-access.js.map | 1 - .../dist/rules/no-unsafe-return.js | 167 - .../dist/rules/no-unsafe-return.js.map | 1 - .../dist/rules/no-unsafe-unary-minus.js | 68 - .../dist/rules/no-unsafe-unary-minus.js.map | 1 - .../dist/rules/no-unused-expressions.js | 62 - .../dist/rules/no-unused-expressions.js.map | 1 - .../dist/rules/no-unused-vars.js | 495 - .../dist/rules/no-unused-vars.js.map | 1 - .../dist/rules/no-use-before-define.js | 296 - .../dist/rules/no-use-before-define.js.map | 1 - .../dist/rules/no-useless-constructor.js | 58 - .../dist/rules/no-useless-constructor.js.map | 1 - .../dist/rules/no-useless-empty-export.js | 71 - .../dist/rules/no-useless-empty-export.js.map | 1 - .../rules/no-useless-template-literals.js | 154 - .../rules/no-useless-template-literals.js.map | 1 - .../dist/rules/no-var-requires.js | 72 - .../dist/rules/no-var-requires.js.map | 1 - .../dist/rules/no-wrapper-object-types.js | 60 - .../dist/rules/no-wrapper-object-types.js.map | 1 - .../non-nullable-type-assertion-style.js | 123 - .../non-nullable-type-assertion-style.js.map | 1 - .../dist/rules/object-curly-spacing.js | 224 - .../dist/rules/object-curly-spacing.js.map | 1 - .../dist/rules/only-throw-error.js | 96 - .../dist/rules/only-throw-error.js.map | 1 - .../rules/padding-line-between-statements.js | 630 - .../padding-line-between-statements.js.map | 1 - .../dist/rules/parameter-properties.js | 169 - .../dist/rules/parameter-properties.js.map | 1 - .../dist/rules/prefer-as-const.js | 73 - .../dist/rules/prefer-as-const.js.map | 1 - .../dist/rules/prefer-destructuring.js | 202 - .../dist/rules/prefer-destructuring.js.map | 1 - .../dist/rules/prefer-enum-initializers.js | 63 - .../rules/prefer-enum-initializers.js.map | 1 - .../eslint-plugin/dist/rules/prefer-find.js | 254 - .../dist/rules/prefer-find.js.map | 1 - .../eslint-plugin/dist/rules/prefer-for-of.js | 116 - .../dist/rules/prefer-for-of.js.map | 1 - .../dist/rules/prefer-function-type.js | 188 - .../dist/rules/prefer-function-type.js.map | 1 - .../dist/rules/prefer-includes.js | 230 - .../dist/rules/prefer-includes.js.map | 1 - .../dist/rules/prefer-literal-enum-member.js | 113 - .../rules/prefer-literal-enum-member.js.map | 1 - .../dist/rules/prefer-namespace-keyword.js | 44 - .../rules/prefer-namespace-keyword.js.map | 1 - .../dist/rules/prefer-nullish-coalescing.js | 351 - .../rules/prefer-nullish-coalescing.js.map | 1 - .../PreferOptionalChainOptions.js | 3 - .../PreferOptionalChainOptions.js.map | 1 - .../analyzeChain.js | 424 - .../analyzeChain.js.map | 1 - .../checkNullishAndReport.js.map | 1 - .../compareNodes.js | 317 - .../compareNodes.js.map | 1 - .../gatherLogicalOperands.js | 285 - .../gatherLogicalOperands.js.map | 1 - .../dist/rules/prefer-optional-chain.js | 174 - .../dist/rules/prefer-optional-chain.js.map | 1 - .../rules/prefer-promise-reject-errors.js | 109 - .../rules/prefer-promise-reject-errors.js.map | 1 - .../rules/prefer-readonly-parameter-types.js | 82 - .../prefer-readonly-parameter-types.js.map | 1 - .../dist/rules/prefer-readonly.js | 322 - .../dist/rules/prefer-readonly.js.map | 1 - .../rules/prefer-reduce-type-parameter.js | 104 - .../rules/prefer-reduce-type-parameter.js.map | 1 - .../dist/rules/prefer-regexp-exec.js | 165 - .../dist/rules/prefer-regexp-exec.js.map | 1 - .../dist/rules/prefer-return-this-type.js | 137 - .../dist/rules/prefer-return-this-type.js.map | 1 - .../rules/prefer-string-starts-ends-with.js | 522 - .../prefer-string-starts-ends-with.js.map | 1 - .../dist/rules/prefer-ts-expect-error.js | 61 - .../dist/rules/prefer-ts-expect-error.js.map | 1 - .../dist/rules/promise-function-async.js | 184 - .../dist/rules/promise-function-async.js.map | 1 - .../eslint-plugin/dist/rules/quotes.js | 63 - .../eslint-plugin/dist/rules/quotes.js.map | 1 - .../dist/rules/require-array-sort-compare.js | 62 - .../rules/require-array-sort-compare.js.map | 1 - .../eslint-plugin/dist/rules/require-await.js | 174 - .../dist/rules/require-await.js.map | 1 - .../dist/rules/restrict-plus-operands.js | 222 - .../dist/rules/restrict-plus-operands.js.map | 1 - .../rules/restrict-template-expressions.js | 110 - .../restrict-template-expressions.js.map | 1 - .../eslint-plugin/dist/rules/return-await.js | 344 - .../dist/rules/return-await.js.map | 1 - .../eslint-plugin/dist/rules/semi.js | 64 - .../eslint-plugin/dist/rules/semi.js.map | 1 - .../dist/rules/sort-type-constituents.js | 248 - .../dist/rules/sort-type-constituents.js.map | 1 - .../dist/rules/space-before-blocks.js | 77 - .../dist/rules/space-before-blocks.js.map | 1 - .../dist/rules/space-before-function-paren.js | 137 - .../rules/space-before-function-paren.js.map | 1 - .../dist/rules/space-infix-ops.js | 132 - .../dist/rules/space-infix-ops.js.map | 1 - .../dist/rules/strict-boolean-expressions.js | 905 - .../rules/strict-boolean-expressions.js.map | 1 - .../dist/rules/switch-exhaustiveness-check.js | 239 - .../rules/switch-exhaustiveness-check.js.map | 1 - .../dist/rules/triple-slash-reference.js | 108 - .../dist/rules/triple-slash-reference.js.map | 1 - .../dist/rules/type-annotation-spacing.js | 229 - .../dist/rules/type-annotation-spacing.js.map | 1 - .../eslint-plugin/dist/rules/typedef.js | 200 - .../eslint-plugin/dist/rules/typedef.js.map | 1 - .../dist/rules/unbound-method.js | 324 - .../dist/rules/unbound-method.js.map | 1 - .../dist/rules/unified-signatures.js | 399 - .../dist/rules/unified-signatures.js.map | 1 - .../use-unknown-in-catch-callback-variable.js | 283 - ...-unknown-in-catch-callback-variable.js.map | 1 - .../eslint-plugin/dist/util/astUtils.js | 88 - .../eslint-plugin/dist/util/astUtils.js.map | 1 - .../dist/util/collectUnusedVariables.js | 567 - .../dist/util/collectUnusedVariables.js.map | 1 - .../eslint-plugin/dist/util/createRule.js | 6 - .../eslint-plugin/dist/util/createRule.js.map | 1 - .../eslint-plugin/dist/util/escapeRegExp.js | 15 - .../dist/util/escapeRegExp.js.map | 1 - .../dist/util/explicitReturnTypeUtils.js | 236 - .../dist/util/explicitReturnTypeUtils.js.map | 1 - .../dist/util/getESLintCoreRule.js | 17 - .../dist/util/getESLintCoreRule.js.map | 1 - .../dist/util/getForStatementHeadLoc.js | 27 - .../dist/util/getForStatementHeadLoc.js.map | 1 - .../dist/util/getFunctionHeadLoc.js | 162 - .../dist/util/getFunctionHeadLoc.js.map | 1 - .../dist/util/getMemberHeadLoc.js | 80 - .../dist/util/getMemberHeadLoc.js.map | 1 - .../dist/util/getOperatorPrecedence.js | 418 - .../dist/util/getOperatorPrecedence.js.map | 1 - .../dist/util/getStaticStringValue.js | 45 - .../dist/util/getStaticStringValue.js.map | 1 - .../dist/util/getStringLength.js | 19 - .../dist/util/getStringLength.js.map | 1 - .../dist/util/getTextWithParentheses.js | 17 - .../dist/util/getTextWithParentheses.js.map | 1 - .../dist/util/getThisExpression.js | 25 - .../dist/util/getThisExpression.js.map | 1 - .../eslint-plugin/dist/util/getWrappedCode.js | 7 - .../dist/util/getWrappedCode.js.map | 1 - .../dist/util/getWrappingFixer.js | 159 - .../dist/util/getWrappingFixer.js.map | 1 - .../eslint-plugin/dist/util/index.js | 46 - .../eslint-plugin/dist/util/index.js.map | 1 - .../eslint-plugin/dist/util/isAssignee.js | 43 - .../eslint-plugin/dist/util/isAssignee.js.map | 1 - .../eslint-plugin/dist/util/isNodeEqual.js | 26 - .../dist/util/isNodeEqual.js.map | 1 - .../eslint-plugin/dist/util/isNullLiteral.js | 8 - .../dist/util/isNullLiteral.js.map | 1 - .../dist/util/isUndefinedIdentifier.js | 8 - .../dist/util/isUndefinedIdentifier.js.map | 1 - .../eslint-plugin/dist/util/misc.js | 198 - .../eslint-plugin/dist/util/misc.js.map | 1 - .../dist/util/objectIterators.js | 26 - .../dist/util/objectIterators.js.map | 1 - .../eslint-plugin/dist/util/scopeUtils.js | 11 - .../eslint-plugin/dist/util/scopeUtils.js.map | 1 - .../eslint-plugin/dist/util/types.js | 3 - .../eslint-plugin/dist/util/types.js.map | 1 - .../eslint-plugin/docs/rules/README.md | 60 - .../eslint-plugin/docs/rules/TEMPLATE.md | 36 - .../rules/adjacent-overload-signatures.mdx | 105 - .../eslint-plugin/docs/rules/array-type.mdx | 126 - .../docs/rules/await-thenable.mdx | 48 - .../docs/rules/ban-ts-comment.mdx | 161 - .../docs/rules/ban-tslint-comment.mdx | 45 - .../eslint-plugin/docs/rules/ban-types.mdx | 143 - .../docs/rules/block-spacing.mdx | 13 - .../eslint-plugin/docs/rules/brace-style.mdx | 13 - .../eslint-plugin/docs/rules/camelcase.md | 11 - .../rules/class-literal-property-style.mdx | 112 - .../docs/rules/class-methods-use-this.mdx | 102 - .../eslint-plugin/docs/rules/comma-dangle.mdx | 23 - .../docs/rules/comma-spacing.mdx | 13 - .../rules/consistent-generic-constructors.mdx | 85 - .../rules/consistent-indexed-object-style.mdx | 89 - .../docs/rules/consistent-return.mdx | 52 - .../docs/rules/consistent-type-assertions.mdx | 118 - .../rules/consistent-type-definitions.mdx | 90 - .../docs/rules/consistent-type-exports.mdx | 96 - .../docs/rules/consistent-type-imports.mdx | 136 - .../docs/rules/default-param-last.mdx | 60 - .../eslint-plugin/docs/rules/dot-notation.mdx | 85 - .../rules/explicit-function-return-type.mdx | 347 - .../rules/explicit-member-accessibility.mdx | 347 - .../rules/explicit-module-boundary-types.mdx | 267 - .../docs/rules/func-call-spacing.mdx | 13 - .../eslint-plugin/docs/rules/indent.mdx | 21 - .../docs/rules/init-declarations.mdx | 13 - .../eslint-plugin/docs/rules/key-spacing.mdx | 13 - .../docs/rules/keyword-spacing.mdx | 13 - .../docs/rules/lines-around-comment.mdx | 28 - .../rules/lines-between-class-members.mdx | 56 - .../eslint-plugin/docs/rules/max-params.mdx | 13 - .../docs/rules/member-delimiter-style.mdx | 170 - .../docs/rules/member-ordering.mdx | 1483 -- .../docs/rules/method-signature-style.mdx | 122 - .../docs/rules/naming-convention.mdx | 755 - .../docs/rules/no-array-constructor.mdx | 35 - .../docs/rules/no-array-delete.mdx | 44 - .../docs/rules/no-base-to-string.mdx | 94 - .../rules/no-confusing-non-null-assertion.mdx | 62 - .../rules/no-confusing-void-expression.mdx | 122 - .../docs/rules/no-dupe-class-members.mdx | 17 - .../docs/rules/no-duplicate-enum-values.mdx | 64 - .../docs/rules/no-duplicate-imports.mdx | 13 - .../rules/no-duplicate-type-constituents.mdx | 76 - .../docs/rules/no-dynamic-delete.mdx | 64 - .../docs/rules/no-empty-function.mdx | 95 - .../docs/rules/no-empty-interface.mdx | 63 - .../docs/rules/no-empty-object-type.mdx | 177 - .../docs/rules/no-explicit-any.mdx | 174 - .../rules/no-extra-non-null-assertion.mdx | 60 - .../docs/rules/no-extra-parens.mdx | 13 - .../docs/rules/no-extra-semi.mdx | 15 - .../docs/rules/no-extraneous-class.mdx | 329 - .../docs/rules/no-floating-promises.mdx | 240 - .../docs/rules/no-for-in-array.mdx | 67 - .../docs/rules/no-implied-eval.mdx | 104 - .../rules/no-import-type-side-effects.mdx | 80 - .../docs/rules/no-inferrable-types.mdx | 107 - .../docs/rules/no-invalid-this.mdx | 17 - .../docs/rules/no-invalid-void-type.mdx | 118 - .../eslint-plugin/docs/rules/no-loop-func.mdx | 13 - .../docs/rules/no-loss-of-precision.mdx | 13 - .../docs/rules/no-magic-numbers.mdx | 122 - .../rules/no-meaningless-void-operator.mdx | 61 - .../docs/rules/no-misused-new.mdx | 53 - .../docs/rules/no-misused-promises.mdx | 252 - .../docs/rules/no-mixed-enums.mdx | 96 - .../eslint-plugin/docs/rules/no-namespace.mdx | 142 - ...o-non-null-asserted-nullish-coalescing.mdx | 60 - .../no-non-null-asserted-optional-chain.mdx | 46 - .../docs/rules/no-non-null-assertion.mdx | 48 - .../docs/rules/no-parameter-properties.mdx | 12 - .../eslint-plugin/docs/rules/no-redeclare.mdx | 78 - .../rules/no-redundant-type-constituents.mdx | 102 - .../docs/rules/no-require-imports.mdx | 69 - .../docs/rules/no-restricted-imports.mdx | 77 - .../eslint-plugin/docs/rules/no-shadow.mdx | 108 - .../docs/rules/no-this-alias.mdx | 120 - .../docs/rules/no-throw-literal.mdx | 25 - .../docs/rules/no-type-alias.mdx | 626 - ...no-unnecessary-boolean-literal-compare.mdx | 145 - .../docs/rules/no-unnecessary-condition.mdx | 125 - ...ecessary-parameter-property-assignment.mdx | 42 - .../docs/rules/no-unnecessary-qualifier.mdx | 57 - .../no-unnecessary-template-expression.mdx | 87 - .../rules/no-unnecessary-type-arguments.mdx | 85 - .../rules/no-unnecessary-type-assertion.mdx | 87 - .../rules/no-unnecessary-type-constraint.mdx | 61 - .../rules/no-unnecessary-type-parameters.mdx | 115 - .../docs/rules/no-unsafe-argument.mdx | 97 - .../docs/rules/no-unsafe-assignment.mdx | 100 - .../docs/rules/no-unsafe-call.mdx | 74 - .../rules/no-unsafe-declaration-merging.mdx | 65 - .../docs/rules/no-unsafe-enum-comparison.mdx | 86 - .../docs/rules/no-unsafe-function-type.mdx | 63 - .../docs/rules/no-unsafe-member-access.mdx | 80 - .../docs/rules/no-unsafe-return.mdx | 117 - .../docs/rules/no-unsafe-unary-minus.mdx | 60 - .../docs/rules/no-unused-expressions.mdx | 53 - .../docs/rules/no-unused-vars.mdx | 54 - .../docs/rules/no-use-before-define.mdx | 93 - .../docs/rules/no-useless-constructor.mdx | 22 - .../docs/rules/no-useless-empty-export.mdx | 53 - .../rules/no-useless-template-literals.mdx | 23 - .../docs/rules/no-var-requires.mdx | 69 - .../docs/rules/no-wrapper-object-types.mdx | 75 - .../non-nullable-type-assertion-style.mdx | 47 - .../docs/rules/object-curly-spacing.mdx | 13 - .../docs/rules/only-throw-error.mdx | 124 - .../rules/padding-line-between-statements.mdx | 36 - .../docs/rules/parameter-properties.mdx | 518 - .../docs/rules/prefer-as-const.mdx | 51 - .../docs/rules/prefer-destructuring.mdx | 102 - .../docs/rules/prefer-enum-initializers.mdx | 68 - .../eslint-plugin/docs/rules/prefer-find.mdx | 45 - .../docs/rules/prefer-for-of.mdx | 50 - .../docs/rules/prefer-function-type.mdx | 98 - .../docs/rules/prefer-includes.mdx | 81 - .../docs/rules/prefer-literal-enum-member.mdx | 110 - .../docs/rules/prefer-namespace-keyword.mdx | 51 - .../docs/rules/prefer-nullish-coalescing.mdx | 190 - .../docs/rules/prefer-optional-chain.mdx | 295 - .../rules/prefer-promise-reject-errors.mdx | 56 - .../rules/prefer-readonly-parameter-types.mdx | 409 - .../docs/rules/prefer-readonly.mdx | 111 - .../rules/prefer-reduce-type-parameter.mdx | 66 - .../docs/rules/prefer-regexp-exec.mdx | 52 - .../docs/rules/prefer-return-this-type.mdx | 93 - .../rules/prefer-string-starts-ends-with.mdx | 82 - .../docs/rules/prefer-ts-expect-error.mdx | 86 - .../docs/rules/promise-function-async.mdx | 144 - .../eslint-plugin/docs/rules/quotes.mdx | 13 - .../docs/rules/require-array-sort-compare.mdx | 87 - .../docs/rules/require-await.mdx | 25 - .../docs/rules/restrict-plus-operands.mdx | 232 - .../rules/restrict-template-expressions.mdx | 136 - .../eslint-plugin/docs/rules/return-await.mdx | 324 - .../eslint-plugin/docs/rules/semi.mdx | 15 - .../docs/rules/sort-type-constituents.mdx | 207 - .../sort-type-union-intersection-members.mdx | 12 - .../docs/rules/space-before-blocks.mdx | 49 - .../rules/space-before-function-paren.mdx | 13 - .../docs/rules/space-infix-ops.mdx | 19 - .../docs/rules/strict-boolean-expressions.mdx | 196 - .../rules/switch-exhaustiveness-check.mdx | 230 - .../docs/rules/triple-slash-reference.mdx | 123 - .../docs/rules/type-annotation-spacing.mdx | 335 - .../eslint-plugin/docs/rules/typedef.mdx | 347 - .../docs/rules/unbound-method.mdx | 112 - .../docs/rules/unified-signatures.mdx | 86 - ...use-unknown-in-catch-callback-variable.mdx | 84 - .../eslint-plugin/index.d.ts | 13 - .../eslint-plugin/package.json | 112 - .../eslint-plugin/rules.d.ts | 46 - .../@typescript-eslint/parser/LICENSE | 22 - .../@typescript-eslint/parser/README.md | 12 - .../@typescript-eslint/parser/dist/index.d.ts | 8 - .../parser/dist/index.d.ts.map | 1 - .../@typescript-eslint/parser/dist/index.js | 18 - .../parser/dist/index.js.map | 1 - .../parser/dist/parser.d.ts | 20 - .../parser/dist/parser.d.ts.map | 1 - .../@typescript-eslint/parser/dist/parser.js | 130 - .../parser/dist/parser.js.map | 1 - .../@typescript-eslint/parser/package.json | 87 - .../@typescript-eslint/scope-manager/LICENSE | 21 - .../scope-manager/README.md | 10 - .../scope-manager/dist/ID.d.ts | 4 - .../scope-manager/dist/ID.d.ts.map | 1 - .../scope-manager/dist/ID.js | 20 - .../scope-manager/dist/ID.js.map | 1 - .../scope-manager/dist/ScopeManager.d.ts | 72 - .../scope-manager/dist/ScopeManager.d.ts.map | 1 - .../scope-manager/dist/ScopeManager.js | 183 - .../scope-manager/dist/ScopeManager.js.map | 1 - .../scope-manager/dist/analyze.d.ts | 55 - .../scope-manager/dist/analyze.d.ts.map | 1 - .../scope-manager/dist/analyze.js | 40 - .../scope-manager/dist/analyze.js.map | 1 - .../scope-manager/dist/assert.d.ts | 3 - .../scope-manager/dist/assert.d.ts.map | 1 - .../scope-manager/dist/assert.js | 10 - .../scope-manager/dist/assert.js.map | 1 - .../definition/CatchClauseDefinition.d.ts | 10 - .../definition/CatchClauseDefinition.d.ts.map | 1 - .../dist/definition/CatchClauseDefinition.js | 14 - .../definition/CatchClauseDefinition.js.map | 1 - .../dist/definition/ClassNameDefinition.d.ts | 10 - .../definition/ClassNameDefinition.d.ts.map | 1 - .../dist/definition/ClassNameDefinition.js | 14 - .../definition/ClassNameDefinition.js.map | 1 - .../dist/definition/Definition.d.ts | 14 - .../dist/definition/Definition.d.ts.map | 1 - .../dist/definition/Definition.js | 3 - .../dist/definition/Definition.js.map | 1 - .../dist/definition/DefinitionBase.d.ts | 35 - .../dist/definition/DefinitionBase.d.ts.map | 1 - .../dist/definition/DefinitionBase.js | 19 - .../dist/definition/DefinitionBase.js.map | 1 - .../dist/definition/DefinitionType.d.ts | 15 - .../dist/definition/DefinitionType.d.ts.map | 1 - .../dist/definition/DefinitionType.js | 18 - .../dist/definition/DefinitionType.js.map | 1 - .../definition/FunctionNameDefinition.d.ts | 10 - .../FunctionNameDefinition.d.ts.map | 1 - .../dist/definition/FunctionNameDefinition.js | 14 - .../definition/FunctionNameDefinition.js.map | 1 - .../ImplicitGlobalVariableDefinition.d.ts | 10 - .../ImplicitGlobalVariableDefinition.d.ts.map | 1 - .../ImplicitGlobalVariableDefinition.js | 14 - .../ImplicitGlobalVariableDefinition.js.map | 1 - .../definition/ImportBindingDefinition.d.ts | 11 - .../ImportBindingDefinition.d.ts.map | 1 - .../definition/ImportBindingDefinition.js | 14 - .../definition/ImportBindingDefinition.js.map | 1 - .../dist/definition/ParameterDefinition.d.ts | 14 - .../definition/ParameterDefinition.d.ts.map | 1 - .../dist/definition/ParameterDefinition.js | 15 - .../definition/ParameterDefinition.js.map | 1 - .../definition/TSEnumMemberDefinition.d.ts | 10 - .../TSEnumMemberDefinition.d.ts.map | 1 - .../dist/definition/TSEnumMemberDefinition.js | 14 - .../definition/TSEnumMemberDefinition.js.map | 1 - .../dist/definition/TSEnumNameDefinition.d.ts | 10 - .../definition/TSEnumNameDefinition.d.ts.map | 1 - .../dist/definition/TSEnumNameDefinition.js | 14 - .../definition/TSEnumNameDefinition.js.map | 1 - .../definition/TSModuleNameDefinition.d.ts | 10 - .../TSModuleNameDefinition.d.ts.map | 1 - .../dist/definition/TSModuleNameDefinition.js | 14 - .../definition/TSModuleNameDefinition.js.map | 1 - .../dist/definition/TypeDefinition.d.ts | 10 - .../dist/definition/TypeDefinition.d.ts.map | 1 - .../dist/definition/TypeDefinition.js | 14 - .../dist/definition/TypeDefinition.js.map | 1 - .../dist/definition/VariableDefinition.d.ts | 10 - .../definition/VariableDefinition.d.ts.map | 1 - .../dist/definition/VariableDefinition.js | 14 - .../dist/definition/VariableDefinition.js.map | 1 - .../scope-manager/dist/definition/index.d.ts | 14 - .../dist/definition/index.d.ts.map | 1 - .../scope-manager/dist/definition/index.js | 30 - .../dist/definition/index.js.map | 1 - .../scope-manager/dist/index.d.ts | 9 - .../scope-manager/dist/index.d.ts.map | 1 - .../scope-manager/dist/index.js | 31 - .../scope-manager/dist/index.js.map | 1 - .../scope-manager/dist/lib/base-config.d.ts | 16 - .../dist/lib/base-config.d.ts.map | 1 - .../scope-manager/dist/lib/base-config.js | 23 - .../scope-manager/dist/lib/base-config.js.map | 1 - .../scope-manager/dist/lib/decorators.d.ts | 3 - .../dist/lib/decorators.d.ts.map | 1 - .../scope-manager/dist/lib/decorators.js | 23 - .../scope-manager/dist/lib/decorators.js.map | 1 - .../dist/lib/decorators.legacy.d.ts | 3 - .../dist/lib/decorators.legacy.d.ts.map | 1 - .../dist/lib/decorators.legacy.js | 15 - .../dist/lib/decorators.legacy.js.map | 1 - .../dist/lib/dom.asynciterable.d.ts | 3 - .../dist/lib/dom.asynciterable.d.ts.map | 1 - .../dist/lib/dom.asynciterable.js | 13 - .../dist/lib/dom.asynciterable.js.map | 1 - .../scope-manager/dist/lib/dom.d.ts | 3 - .../scope-manager/dist/lib/dom.d.ts.map | 1 - .../scope-manager/dist/lib/dom.iterable.d.ts | 3 - .../dist/lib/dom.iterable.d.ts.map | 1 - .../scope-manager/dist/lib/dom.iterable.js | 79 - .../dist/lib/dom.iterable.js.map | 1 - .../scope-manager/dist/lib/dom.js | 1448 -- .../scope-manager/dist/lib/dom.js.map | 1 - .../dist/lib/es2015.collection.d.ts | 3 - .../dist/lib/es2015.collection.d.ts.map | 1 - .../dist/lib/es2015.collection.js | 21 - .../dist/lib/es2015.collection.js.map | 1 - .../scope-manager/dist/lib/es2015.core.d.ts | 3 - .../dist/lib/es2015.core.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.core.js | 32 - .../scope-manager/dist/lib/es2015.core.js.map | 1 - .../scope-manager/dist/lib/es2015.d.ts | 3 - .../scope-manager/dist/lib/es2015.d.ts.map | 1 - .../dist/lib/es2015.generator.d.ts | 3 - .../dist/lib/es2015.generator.d.ts.map | 1 - .../dist/lib/es2015.generator.js | 16 - .../dist/lib/es2015.generator.js.map | 1 - .../dist/lib/es2015.iterable.d.ts | 3 - .../dist/lib/es2015.iterable.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.iterable.js | 55 - .../dist/lib/es2015.iterable.js.map | 1 - .../scope-manager/dist/lib/es2015.js | 30 - .../scope-manager/dist/lib/es2015.js.map | 1 - .../dist/lib/es2015.promise.d.ts | 3 - .../dist/lib/es2015.promise.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.promise.js | 12 - .../dist/lib/es2015.promise.js.map | 1 - .../scope-manager/dist/lib/es2015.proxy.d.ts | 3 - .../dist/lib/es2015.proxy.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.proxy.js | 13 - .../dist/lib/es2015.proxy.js.map | 1 - .../dist/lib/es2015.reflect.d.ts | 3 - .../dist/lib/es2015.reflect.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.reflect.js | 12 - .../dist/lib/es2015.reflect.js.map | 1 - .../scope-manager/dist/lib/es2015.symbol.d.ts | 3 - .../dist/lib/es2015.symbol.d.ts.map | 1 - .../scope-manager/dist/lib/es2015.symbol.js | 12 - .../dist/lib/es2015.symbol.js.map | 1 - .../dist/lib/es2015.symbol.wellknown.d.ts | 3 - .../dist/lib/es2015.symbol.wellknown.d.ts.map | 1 - .../dist/lib/es2015.symbol.wellknown.js | 46 - .../dist/lib/es2015.symbol.wellknown.js.map | 1 - .../dist/lib/es2016.array.include.d.ts | 3 - .../dist/lib/es2016.array.include.d.ts.map | 1 - .../dist/lib/es2016.array.include.js | 22 - .../dist/lib/es2016.array.include.js.map | 1 - .../scope-manager/dist/lib/es2016.d.ts | 3 - .../scope-manager/dist/lib/es2016.d.ts.map | 1 - .../scope-manager/dist/lib/es2016.full.d.ts | 3 - .../dist/lib/es2016.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2016.full.js | 20 - .../scope-manager/dist/lib/es2016.full.js.map | 1 - .../scope-manager/dist/lib/es2016.intl.d.ts | 3 - .../dist/lib/es2016.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2016.intl.js | 12 - .../scope-manager/dist/lib/es2016.intl.js.map | 1 - .../scope-manager/dist/lib/es2016.js | 16 - .../scope-manager/dist/lib/es2016.js.map | 1 - .../scope-manager/dist/lib/es2017.d.ts | 3 - .../scope-manager/dist/lib/es2017.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.date.d.ts | 3 - .../dist/lib/es2017.date.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.date.js | 12 - .../scope-manager/dist/lib/es2017.date.js.map | 1 - .../scope-manager/dist/lib/es2017.full.d.ts | 3 - .../dist/lib/es2017.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.full.js | 20 - .../scope-manager/dist/lib/es2017.full.js.map | 1 - .../scope-manager/dist/lib/es2017.intl.d.ts | 3 - .../dist/lib/es2017.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.intl.js | 12 - .../scope-manager/dist/lib/es2017.intl.js.map | 1 - .../scope-manager/dist/lib/es2017.js | 24 - .../scope-manager/dist/lib/es2017.js.map | 1 - .../scope-manager/dist/lib/es2017.object.d.ts | 3 - .../dist/lib/es2017.object.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.object.js | 12 - .../dist/lib/es2017.object.js.map | 1 - .../dist/lib/es2017.sharedmemory.d.ts | 3 - .../dist/lib/es2017.sharedmemory.d.ts.map | 1 - .../dist/lib/es2017.sharedmemory.js | 19 - .../dist/lib/es2017.sharedmemory.js.map | 1 - .../scope-manager/dist/lib/es2017.string.d.ts | 3 - .../dist/lib/es2017.string.d.ts.map | 1 - .../scope-manager/dist/lib/es2017.string.js | 12 - .../dist/lib/es2017.string.js.map | 1 - .../dist/lib/es2017.typedarrays.d.ts | 3 - .../dist/lib/es2017.typedarrays.d.ts.map | 1 - .../dist/lib/es2017.typedarrays.js | 20 - .../dist/lib/es2017.typedarrays.js.map | 1 - .../dist/lib/es2018.asyncgenerator.d.ts | 3 - .../dist/lib/es2018.asyncgenerator.d.ts.map | 1 - .../dist/lib/es2018.asyncgenerator.js | 16 - .../dist/lib/es2018.asyncgenerator.js.map | 1 - .../dist/lib/es2018.asynciterable.d.ts | 3 - .../dist/lib/es2018.asynciterable.d.ts.map | 1 - .../dist/lib/es2018.asynciterable.js | 19 - .../dist/lib/es2018.asynciterable.js.map | 1 - .../scope-manager/dist/lib/es2018.d.ts | 3 - .../scope-manager/dist/lib/es2018.d.ts.map | 1 - .../scope-manager/dist/lib/es2018.full.d.ts | 3 - .../dist/lib/es2018.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2018.full.js | 22 - .../scope-manager/dist/lib/es2018.full.js.map | 1 - .../scope-manager/dist/lib/es2018.intl.d.ts | 3 - .../dist/lib/es2018.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2018.intl.js | 12 - .../scope-manager/dist/lib/es2018.intl.js.map | 1 - .../scope-manager/dist/lib/es2018.js | 22 - .../scope-manager/dist/lib/es2018.js.map | 1 - .../dist/lib/es2018.promise.d.ts | 3 - .../dist/lib/es2018.promise.d.ts.map | 1 - .../scope-manager/dist/lib/es2018.promise.js | 12 - .../dist/lib/es2018.promise.js.map | 1 - .../scope-manager/dist/lib/es2018.regexp.d.ts | 3 - .../dist/lib/es2018.regexp.d.ts.map | 1 - .../scope-manager/dist/lib/es2018.regexp.js | 14 - .../dist/lib/es2018.regexp.js.map | 1 - .../scope-manager/dist/lib/es2019.array.d.ts | 3 - .../dist/lib/es2019.array.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.array.js | 14 - .../dist/lib/es2019.array.js.map | 1 - .../scope-manager/dist/lib/es2019.d.ts | 3 - .../scope-manager/dist/lib/es2019.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.full.d.ts | 3 - .../dist/lib/es2019.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.full.js | 22 - .../scope-manager/dist/lib/es2019.full.js.map | 1 - .../scope-manager/dist/lib/es2019.intl.d.ts | 3 - .../dist/lib/es2019.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.intl.js | 12 - .../scope-manager/dist/lib/es2019.intl.js.map | 1 - .../scope-manager/dist/lib/es2019.js | 22 - .../scope-manager/dist/lib/es2019.js.map | 1 - .../scope-manager/dist/lib/es2019.object.d.ts | 3 - .../dist/lib/es2019.object.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.object.js | 14 - .../dist/lib/es2019.object.js.map | 1 - .../scope-manager/dist/lib/es2019.string.d.ts | 3 - .../dist/lib/es2019.string.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.string.js | 12 - .../dist/lib/es2019.string.js.map | 1 - .../scope-manager/dist/lib/es2019.symbol.d.ts | 3 - .../dist/lib/es2019.symbol.d.ts.map | 1 - .../scope-manager/dist/lib/es2019.symbol.js | 12 - .../dist/lib/es2019.symbol.js.map | 1 - .../scope-manager/dist/lib/es2020.bigint.d.ts | 3 - .../dist/lib/es2020.bigint.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.bigint.js | 22 - .../dist/lib/es2020.bigint.js.map | 1 - .../scope-manager/dist/lib/es2020.d.ts | 3 - .../scope-manager/dist/lib/es2020.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.date.d.ts | 3 - .../dist/lib/es2020.date.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.date.js | 14 - .../scope-manager/dist/lib/es2020.date.js.map | 1 - .../scope-manager/dist/lib/es2020.full.d.ts | 3 - .../dist/lib/es2020.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.full.js | 22 - .../scope-manager/dist/lib/es2020.full.js.map | 1 - .../scope-manager/dist/lib/es2020.intl.d.ts | 3 - .../dist/lib/es2020.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.intl.js | 14 - .../scope-manager/dist/lib/es2020.intl.js.map | 1 - .../scope-manager/dist/lib/es2020.js | 28 - .../scope-manager/dist/lib/es2020.js.map | 1 - .../scope-manager/dist/lib/es2020.number.d.ts | 3 - .../dist/lib/es2020.number.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.number.js | 14 - .../dist/lib/es2020.number.js.map | 1 - .../dist/lib/es2020.promise.d.ts | 3 - .../dist/lib/es2020.promise.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.promise.js | 15 - .../dist/lib/es2020.promise.js.map | 1 - .../dist/lib/es2020.sharedmemory.d.ts | 3 - .../dist/lib/es2020.sharedmemory.d.ts.map | 1 - .../dist/lib/es2020.sharedmemory.js | 12 - .../dist/lib/es2020.sharedmemory.js.map | 1 - .../scope-manager/dist/lib/es2020.string.d.ts | 3 - .../dist/lib/es2020.string.d.ts.map | 1 - .../scope-manager/dist/lib/es2020.string.js | 14 - .../dist/lib/es2020.string.js.map | 1 - .../dist/lib/es2020.symbol.wellknown.d.ts | 3 - .../dist/lib/es2020.symbol.wellknown.d.ts.map | 1 - .../dist/lib/es2020.symbol.wellknown.js | 17 - .../dist/lib/es2020.symbol.wellknown.js.map | 1 - .../scope-manager/dist/lib/es2021.d.ts | 3 - .../scope-manager/dist/lib/es2021.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.full.d.ts | 3 - .../dist/lib/es2021.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.full.js | 22 - .../scope-manager/dist/lib/es2021.full.js.map | 1 - .../scope-manager/dist/lib/es2021.intl.d.ts | 3 - .../dist/lib/es2021.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.intl.js | 12 - .../scope-manager/dist/lib/es2021.intl.js.map | 1 - .../scope-manager/dist/lib/es2021.js | 20 - .../scope-manager/dist/lib/es2021.js.map | 1 - .../dist/lib/es2021.promise.d.ts | 3 - .../dist/lib/es2021.promise.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.promise.js | 14 - .../dist/lib/es2021.promise.js.map | 1 - .../scope-manager/dist/lib/es2021.string.d.ts | 3 - .../dist/lib/es2021.string.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.string.js | 12 - .../dist/lib/es2021.string.js.map | 1 - .../dist/lib/es2021.weakref.d.ts | 3 - .../dist/lib/es2021.weakref.d.ts.map | 1 - .../scope-manager/dist/lib/es2021.weakref.js | 15 - .../dist/lib/es2021.weakref.js.map | 1 - .../scope-manager/dist/lib/es2022.array.d.ts | 3 - .../dist/lib/es2022.array.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.array.js | 24 - .../dist/lib/es2022.array.js.map | 1 - .../scope-manager/dist/lib/es2022.d.ts | 3 - .../scope-manager/dist/lib/es2022.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.error.d.ts | 3 - .../dist/lib/es2022.error.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.error.js | 21 - .../dist/lib/es2022.error.js.map | 1 - .../scope-manager/dist/lib/es2022.full.d.ts | 3 - .../dist/lib/es2022.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.full.js | 22 - .../scope-manager/dist/lib/es2022.full.js.map | 1 - .../scope-manager/dist/lib/es2022.intl.d.ts | 3 - .../dist/lib/es2022.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.intl.js | 12 - .../scope-manager/dist/lib/es2022.intl.js.map | 1 - .../scope-manager/dist/lib/es2022.js | 26 - .../scope-manager/dist/lib/es2022.js.map | 1 - .../scope-manager/dist/lib/es2022.object.d.ts | 3 - .../dist/lib/es2022.object.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.object.js | 12 - .../dist/lib/es2022.object.js.map | 1 - .../scope-manager/dist/lib/es2022.regexp.d.ts | 3 - .../dist/lib/es2022.regexp.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.regexp.js | 15 - .../dist/lib/es2022.regexp.js.map | 1 - .../dist/lib/es2022.sharedmemory.d.ts | 3 - .../dist/lib/es2022.sharedmemory.d.ts.map | 1 - .../dist/lib/es2022.sharedmemory.js | 12 - .../dist/lib/es2022.sharedmemory.js.map | 1 - .../scope-manager/dist/lib/es2022.string.d.ts | 3 - .../dist/lib/es2022.string.d.ts.map | 1 - .../scope-manager/dist/lib/es2022.string.js | 12 - .../dist/lib/es2022.string.js.map | 1 - .../scope-manager/dist/lib/es2023.array.d.ts | 3 - .../dist/lib/es2023.array.d.ts.map | 1 - .../scope-manager/dist/lib/es2023.array.js | 24 - .../dist/lib/es2023.array.js.map | 1 - .../dist/lib/es2023.collection.d.ts | 3 - .../dist/lib/es2023.collection.d.ts.map | 1 - .../dist/lib/es2023.collection.js | 12 - .../dist/lib/es2023.collection.js.map | 1 - .../scope-manager/dist/lib/es2023.d.ts | 3 - .../scope-manager/dist/lib/es2023.d.ts.map | 1 - .../scope-manager/dist/lib/es2023.full.d.ts | 3 - .../dist/lib/es2023.full.d.ts.map | 1 - .../scope-manager/dist/lib/es2023.full.js | 22 - .../scope-manager/dist/lib/es2023.full.js.map | 1 - .../scope-manager/dist/lib/es2023.intl.d.ts | 3 - .../dist/lib/es2023.intl.d.ts.map | 1 - .../scope-manager/dist/lib/es2023.intl.js | 12 - .../scope-manager/dist/lib/es2023.intl.js.map | 1 - .../scope-manager/dist/lib/es2023.js | 18 - .../scope-manager/dist/lib/es2023.js.map | 1 - .../scope-manager/dist/lib/es5.d.ts | 3 - .../scope-manager/dist/lib/es5.d.ts.map | 1 - .../scope-manager/dist/lib/es5.js | 118 - .../scope-manager/dist/lib/es5.js.map | 1 - .../scope-manager/dist/lib/es6.d.ts | 3 - .../scope-manager/dist/lib/es6.d.ts.map | 1 - .../scope-manager/dist/lib/es6.js | 30 - .../scope-manager/dist/lib/es6.js.map | 1 - .../scope-manager/dist/lib/es7.d.ts | 3 - .../scope-manager/dist/lib/es7.d.ts.map | 1 - .../scope-manager/dist/lib/es7.js | 16 - .../scope-manager/dist/lib/es7.js.map | 1 - .../scope-manager/dist/lib/esnext.array.d.ts | 3 - .../dist/lib/esnext.array.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.array.js | 12 - .../dist/lib/esnext.array.js.map | 1 - .../dist/lib/esnext.asynciterable.d.ts | 3 - .../dist/lib/esnext.asynciterable.d.ts.map | 1 - .../dist/lib/esnext.asynciterable.js | 19 - .../dist/lib/esnext.asynciterable.js.map | 1 - .../scope-manager/dist/lib/esnext.bigint.d.ts | 3 - .../dist/lib/esnext.bigint.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.bigint.js | 22 - .../dist/lib/esnext.bigint.js.map | 1 - .../dist/lib/esnext.collection.d.ts | 3 - .../dist/lib/esnext.collection.d.ts.map | 1 - .../dist/lib/esnext.collection.js | 15 - .../dist/lib/esnext.collection.js.map | 1 - .../scope-manager/dist/lib/esnext.d.ts | 3 - .../scope-manager/dist/lib/esnext.d.ts.map | 1 - .../dist/lib/esnext.decorators.d.ts | 3 - .../dist/lib/esnext.decorators.d.ts.map | 1 - .../dist/lib/esnext.decorators.js | 17 - .../dist/lib/esnext.decorators.js.map | 1 - .../dist/lib/esnext.disposable.d.ts | 3 - .../dist/lib/esnext.disposable.d.ts.map | 1 - .../dist/lib/esnext.disposable.js | 22 - .../dist/lib/esnext.disposable.js.map | 1 - .../scope-manager/dist/lib/esnext.full.d.ts | 3 - .../dist/lib/esnext.full.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.full.js | 22 - .../scope-manager/dist/lib/esnext.full.js.map | 1 - .../scope-manager/dist/lib/esnext.intl.d.ts | 3 - .../dist/lib/esnext.intl.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.intl.js | 12 - .../scope-manager/dist/lib/esnext.intl.js.map | 1 - .../scope-manager/dist/lib/esnext.js | 30 - .../scope-manager/dist/lib/esnext.js.map | 1 - .../scope-manager/dist/lib/esnext.object.d.ts | 3 - .../dist/lib/esnext.object.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.object.js | 12 - .../dist/lib/esnext.object.js.map | 1 - .../dist/lib/esnext.promise.d.ts | 3 - .../dist/lib/esnext.promise.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.promise.js | 13 - .../dist/lib/esnext.promise.js.map | 1 - .../scope-manager/dist/lib/esnext.regexp.d.ts | 3 - .../dist/lib/esnext.regexp.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.regexp.js | 12 - .../dist/lib/esnext.regexp.js.map | 1 - .../scope-manager/dist/lib/esnext.string.d.ts | 3 - .../dist/lib/esnext.string.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.string.js | 12 - .../dist/lib/esnext.string.js.map | 1 - .../scope-manager/dist/lib/esnext.symbol.d.ts | 3 - .../dist/lib/esnext.symbol.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.symbol.js | 12 - .../dist/lib/esnext.symbol.js.map | 1 - .../dist/lib/esnext.weakref.d.ts | 3 - .../dist/lib/esnext.weakref.d.ts.map | 1 - .../scope-manager/dist/lib/esnext.weakref.js | 15 - .../dist/lib/esnext.weakref.js.map | 1 - .../scope-manager/dist/lib/index.d.ts | 99 - .../scope-manager/dist/lib/index.d.ts.map | 1 - .../scope-manager/dist/lib/index.js | 201 - .../scope-manager/dist/lib/index.js.map | 1 - .../scope-manager/dist/lib/lib.d.ts | 3 - .../scope-manager/dist/lib/lib.d.ts.map | 1 - .../scope-manager/dist/lib/lib.js | 18 - .../scope-manager/dist/lib/lib.js.map | 1 - .../scope-manager/dist/lib/scripthost.d.ts | 3 - .../dist/lib/scripthost.d.ts.map | 1 - .../scope-manager/dist/lib/scripthost.js | 24 - .../scope-manager/dist/lib/scripthost.js.map | 1 - .../dist/lib/webworker.asynciterable.d.ts | 3 - .../dist/lib/webworker.asynciterable.d.ts.map | 1 - .../dist/lib/webworker.asynciterable.js | 13 - .../dist/lib/webworker.asynciterable.js.map | 1 - .../scope-manager/dist/lib/webworker.d.ts | 3 - .../scope-manager/dist/lib/webworker.d.ts.map | 1 - .../dist/lib/webworker.importscripts.d.ts | 3 - .../dist/lib/webworker.importscripts.d.ts.map | 1 - .../dist/lib/webworker.importscripts.js | 9 - .../dist/lib/webworker.importscripts.js.map | 1 - .../dist/lib/webworker.iterable.d.ts | 3 - .../dist/lib/webworker.iterable.d.ts.map | 1 - .../dist/lib/webworker.iterable.js | 35 - .../dist/lib/webworker.iterable.js.map | 1 - .../scope-manager/dist/lib/webworker.js | 591 - .../scope-manager/dist/lib/webworker.js.map | 1 - .../dist/referencer/ClassVisitor.d.ts | 29 - .../dist/referencer/ClassVisitor.d.ts.map | 1 - .../dist/referencer/ClassVisitor.js | 279 - .../dist/referencer/ClassVisitor.js.map | 1 - .../dist/referencer/ExportVisitor.d.ts | 15 - .../dist/referencer/ExportVisitor.d.ts.map | 1 - .../dist/referencer/ExportVisitor.js | 84 - .../dist/referencer/ExportVisitor.js.map | 1 - .../dist/referencer/ImportVisitor.d.ts | 14 - .../dist/referencer/ImportVisitor.d.ts.map | 1 - .../dist/referencer/ImportVisitor.js | 50 - .../dist/referencer/ImportVisitor.js.map | 1 - .../dist/referencer/PatternVisitor.d.ts | 29 - .../dist/referencer/PatternVisitor.d.ts.map | 1 - .../dist/referencer/PatternVisitor.js | 108 - .../dist/referencer/PatternVisitor.js.map | 1 - .../dist/referencer/Reference.d.ts | 89 - .../dist/referencer/Reference.d.ts.map | 1 - .../dist/referencer/Reference.js | 107 - .../dist/referencer/Reference.js.map | 1 - .../dist/referencer/Referencer.d.ts | 86 - .../dist/referencer/Referencer.d.ts.map | 1 - .../dist/referencer/Referencer.js | 549 - .../dist/referencer/Referencer.js.map | 1 - .../dist/referencer/TypeVisitor.d.ts | 33 - .../dist/referencer/TypeVisitor.d.ts.map | 1 - .../dist/referencer/TypeVisitor.js | 230 - .../dist/referencer/TypeVisitor.js.map | 1 - .../dist/referencer/Visitor.d.ts | 13 - .../dist/referencer/Visitor.d.ts.map | 1 - .../scope-manager/dist/referencer/Visitor.js | 41 - .../dist/referencer/Visitor.js.map | 1 - .../dist/referencer/VisitorBase.d.ts | 22 - .../dist/referencer/VisitorBase.d.ts.map | 1 - .../dist/referencer/VisitorBase.js | 80 - .../dist/referencer/VisitorBase.js.map | 1 - .../scope-manager/dist/referencer/index.d.ts | 2 - .../dist/referencer/index.d.ts.map | 1 - .../scope-manager/dist/referencer/index.js | 6 - .../dist/referencer/index.js.map | 1 - .../scope-manager/dist/scope/BlockScope.d.ts | 10 - .../dist/scope/BlockScope.d.ts.map | 1 - .../scope-manager/dist/scope/BlockScope.js | 12 - .../dist/scope/BlockScope.js.map | 1 - .../scope-manager/dist/scope/CatchScope.d.ts | 10 - .../dist/scope/CatchScope.d.ts.map | 1 - .../scope-manager/dist/scope/CatchScope.js | 12 - .../dist/scope/CatchScope.js.map | 1 - .../scope/ClassFieldInitializerScope.d.ts | 10 - .../scope/ClassFieldInitializerScope.d.ts.map | 1 - .../dist/scope/ClassFieldInitializerScope.js | 12 - .../scope/ClassFieldInitializerScope.js.map | 1 - .../scope-manager/dist/scope/ClassScope.d.ts | 10 - .../dist/scope/ClassScope.d.ts.map | 1 - .../scope-manager/dist/scope/ClassScope.js | 12 - .../dist/scope/ClassScope.js.map | 1 - .../dist/scope/ClassStaticBlockScope.d.ts | 10 - .../dist/scope/ClassStaticBlockScope.d.ts.map | 1 - .../dist/scope/ClassStaticBlockScope.js | 12 - .../dist/scope/ClassStaticBlockScope.js.map | 1 - .../dist/scope/ConditionalTypeScope.d.ts | 10 - .../dist/scope/ConditionalTypeScope.d.ts.map | 1 - .../dist/scope/ConditionalTypeScope.js | 12 - .../dist/scope/ConditionalTypeScope.js.map | 1 - .../scope-manager/dist/scope/ForScope.d.ts | 10 - .../dist/scope/ForScope.d.ts.map | 1 - .../scope-manager/dist/scope/ForScope.js | 12 - .../scope-manager/dist/scope/ForScope.js.map | 1 - .../scope/FunctionExpressionNameScope.d.ts | 11 - .../FunctionExpressionNameScope.d.ts.map | 1 - .../dist/scope/FunctionExpressionNameScope.js | 17 - .../scope/FunctionExpressionNameScope.js.map | 1 - .../dist/scope/FunctionScope.d.ts | 13 - .../dist/scope/FunctionScope.d.ts.map | 1 - .../scope-manager/dist/scope/FunctionScope.js | 36 - .../dist/scope/FunctionScope.js.map | 1 - .../dist/scope/FunctionTypeScope.d.ts | 10 - .../dist/scope/FunctionTypeScope.d.ts.map | 1 - .../dist/scope/FunctionTypeScope.js | 12 - .../dist/scope/FunctionTypeScope.js.map | 1 - .../scope-manager/dist/scope/GlobalScope.d.ts | 18 - .../dist/scope/GlobalScope.d.ts.map | 1 - .../scope-manager/dist/scope/GlobalScope.js | 39 - .../dist/scope/GlobalScope.js.map | 1 - .../dist/scope/MappedTypeScope.d.ts | 10 - .../dist/scope/MappedTypeScope.d.ts.map | 1 - .../dist/scope/MappedTypeScope.js | 12 - .../dist/scope/MappedTypeScope.js.map | 1 - .../scope-manager/dist/scope/ModuleScope.d.ts | 10 - .../dist/scope/ModuleScope.d.ts.map | 1 - .../scope-manager/dist/scope/ModuleScope.js | 12 - .../dist/scope/ModuleScope.js.map | 1 - .../scope-manager/dist/scope/Scope.d.ts | 21 - .../scope-manager/dist/scope/Scope.d.ts.map | 1 - .../scope-manager/dist/scope/Scope.js | 3 - .../scope-manager/dist/scope/Scope.js.map | 1 - .../scope-manager/dist/scope/ScopeBase.d.ts | 103 - .../dist/scope/ScopeBase.d.ts.map | 1 - .../scope-manager/dist/scope/ScopeBase.js | 351 - .../scope-manager/dist/scope/ScopeBase.js.map | 1 - .../scope-manager/dist/scope/ScopeType.d.ts | 22 - .../dist/scope/ScopeType.d.ts.map | 1 - .../scope-manager/dist/scope/ScopeType.js | 25 - .../scope-manager/dist/scope/ScopeType.js.map | 1 - .../scope-manager/dist/scope/SwitchScope.d.ts | 10 - .../dist/scope/SwitchScope.d.ts.map | 1 - .../scope-manager/dist/scope/SwitchScope.js | 12 - .../dist/scope/SwitchScope.js.map | 1 - .../scope-manager/dist/scope/TSEnumScope.d.ts | 10 - .../dist/scope/TSEnumScope.d.ts.map | 1 - .../scope-manager/dist/scope/TSEnumScope.js | 12 - .../dist/scope/TSEnumScope.js.map | 1 - .../dist/scope/TSModuleScope.d.ts | 10 - .../dist/scope/TSModuleScope.d.ts.map | 1 - .../scope-manager/dist/scope/TSModuleScope.js | 12 - .../dist/scope/TSModuleScope.js.map | 1 - .../scope-manager/dist/scope/TypeScope.d.ts | 10 - .../dist/scope/TypeScope.d.ts.map | 1 - .../scope-manager/dist/scope/TypeScope.js | 12 - .../scope-manager/dist/scope/TypeScope.js.map | 1 - .../scope-manager/dist/scope/WithScope.d.ts | 11 - .../dist/scope/WithScope.d.ts.map | 1 - .../scope-manager/dist/scope/WithScope.js | 22 - .../scope-manager/dist/scope/WithScope.js.map | 1 - .../scope-manager/dist/scope/index.d.ts | 20 - .../scope-manager/dist/scope/index.d.ts.map | 1 - .../scope-manager/dist/scope/index.js | 36 - .../scope-manager/dist/scope/index.js.map | 1 - .../dist/variable/ESLintScopeVariable.d.ts | 34 - .../variable/ESLintScopeVariable.d.ts.map | 1 - .../dist/variable/ESLintScopeVariable.js | 12 - .../dist/variable/ESLintScopeVariable.js.map | 1 - .../dist/variable/ImplicitLibVariable.d.ts | 25 - .../variable/ImplicitLibVariable.d.ts.map | 1 - .../dist/variable/ImplicitLibVariable.js | 19 - .../dist/variable/ImplicitLibVariable.js.map | 1 - .../scope-manager/dist/variable/Variable.d.ts | 18 - .../dist/variable/Variable.d.ts.map | 1 - .../scope-manager/dist/variable/Variable.js | 33 - .../dist/variable/Variable.js.map | 1 - .../dist/variable/VariableBase.d.ts | 44 - .../dist/variable/VariableBase.d.ts.map | 1 - .../dist/variable/VariableBase.js | 39 - .../dist/variable/VariableBase.js.map | 1 - .../scope-manager/dist/variable/index.d.ts | 4 - .../dist/variable/index.d.ts.map | 1 - .../scope-manager/dist/variable/index.js | 10 - .../scope-manager/dist/variable/index.js.map | 1 - .../scope-manager/package.json | 73 - .../@typescript-eslint/type-utils/README.md | 12 - .../type-utils/dist/TypeOrValueSpecifier.d.ts | 21 - .../dist/TypeOrValueSpecifier.d.ts.map | 1 - .../type-utils/dist/TypeOrValueSpecifier.js | 188 - .../dist/TypeOrValueSpecifier.js.map | 1 - .../type-utils/dist/builtinSymbolLikes.d.ts | 54 - .../dist/builtinSymbolLikes.d.ts.map | 1 - .../type-utils/dist/builtinSymbolLikes.js | 147 - .../type-utils/dist/builtinSymbolLikes.js.map | 1 - .../dist/containsAllTypesByName.d.ts | 10 - .../dist/containsAllTypesByName.d.ts.map | 1 - .../type-utils/dist/containsAllTypesByName.js | 60 - .../dist/containsAllTypesByName.js.map | 1 - .../dist/getConstrainedTypeAtLocation.d.ts | 7 - .../getConstrainedTypeAtLocation.d.ts.map | 1 - .../dist/getConstrainedTypeAtLocation.js | 14 - .../dist/getConstrainedTypeAtLocation.js.map | 1 - .../type-utils/dist/getContextualType.d.ts | 8 - .../dist/getContextualType.d.ts.map | 1 - .../type-utils/dist/getContextualType.js | 67 - .../type-utils/dist/getContextualType.js.map | 1 - .../type-utils/dist/getDeclaration.d.ts | 7 - .../type-utils/dist/getDeclaration.d.ts.map | 1 - .../type-utils/dist/getDeclaration.js | 15 - .../type-utils/dist/getDeclaration.js.map | 1 - .../type-utils/dist/getSourceFileOfNode.d.ts | 6 - .../dist/getSourceFileOfNode.d.ts.map | 1 - .../type-utils/dist/getSourceFileOfNode.js | 37 - .../dist/getSourceFileOfNode.js.map | 1 - .../type-utils/dist/getTokenAtPosition.d.ts | 3 - .../dist/getTokenAtPosition.d.ts.map | 1 - .../type-utils/dist/getTokenAtPosition.js | 52 - .../type-utils/dist/getTokenAtPosition.js.map | 1 - .../type-utils/dist/getTypeArguments.d.ts | 6 - .../type-utils/dist/getTypeArguments.d.ts.map | 1 - .../type-utils/dist/getTypeArguments.js | 15 - .../type-utils/dist/getTypeArguments.js.map | 1 - .../type-utils/dist/getTypeName.d.ts | 8 - .../type-utils/dist/getTypeName.d.ts.map | 1 - .../type-utils/dist/getTypeName.js | 73 - .../type-utils/dist/getTypeName.js.map | 1 - .../type-utils/dist/index.d.ts | 19 - .../type-utils/dist/index.d.ts.map | 1 - .../type-utils/dist/index.js | 39 - .../type-utils/dist/index.js.map | 1 - .../dist/isSymbolFromDefaultLibrary.d.ts | 3 - .../dist/isSymbolFromDefaultLibrary.d.ts.map | 1 - .../dist/isSymbolFromDefaultLibrary.js | 17 - .../dist/isSymbolFromDefaultLibrary.js.map | 1 - .../type-utils/dist/isTypeReadonly.d.ts | 27 - .../type-utils/dist/isTypeReadonly.d.ts.map | 1 - .../type-utils/dist/isTypeReadonly.js | 226 - .../type-utils/dist/isTypeReadonly.js.map | 1 - .../type-utils/dist/isUnsafeAssignment.d.ts | 17 - .../dist/isUnsafeAssignment.d.ts.map | 1 - .../type-utils/dist/isUnsafeAssignment.js | 105 - .../type-utils/dist/isUnsafeAssignment.js.map | 1 - .../type-utils/dist/predicates.d.ts | 58 - .../type-utils/dist/predicates.d.ts.map | 1 - .../type-utils/dist/predicates.js | 169 - .../type-utils/dist/predicates.js.map | 1 - .../type-utils/dist/propertyTypes.d.ts | 4 - .../type-utils/dist/propertyTypes.d.ts.map | 1 - .../type-utils/dist/propertyTypes.js | 36 - .../type-utils/dist/propertyTypes.js.map | 1 - .../type-utils/dist/requiresQuoting.d.ts | 5 - .../type-utils/dist/requiresQuoting.d.ts.map | 1 - .../type-utils/dist/requiresQuoting.js | 43 - .../type-utils/dist/requiresQuoting.js.map | 1 - .../type-utils/dist/typeFlagUtils.d.ts | 18 - .../type-utils/dist/typeFlagUtils.d.ts.map | 1 - .../type-utils/dist/typeFlagUtils.js | 61 - .../type-utils/dist/typeFlagUtils.js.map | 1 - .../type-utils/package.json | 83 - .../@typescript-eslint/types/LICENSE | 21 - .../@typescript-eslint/types/README.md | 12 - .../types/dist/generated/ast-spec.d.ts | 2091 -- .../types/dist/generated/ast-spec.d.ts.map | 1 - .../types/dist/generated/ast-spec.js | 199 - .../types/dist/generated/ast-spec.js.map | 1 - .../@typescript-eslint/types/dist/index.d.ts | 5 - .../types/dist/index.d.ts.map | 1 - .../@typescript-eslint/types/dist/index.js | 24 - .../types/dist/index.js.map | 1 - .../@typescript-eslint/types/dist/lib.d.ts | 3 - .../types/dist/lib.d.ts.map | 1 - .../@typescript-eslint/types/dist/lib.js | 7 - .../@typescript-eslint/types/dist/lib.js.map | 1 - .../types/dist/parser-options.d.ts | 45 - .../types/dist/parser-options.d.ts.map | 1 - .../types/dist/parser-options.js | 3 - .../types/dist/parser-options.js.map | 1 - .../types/dist/ts-estree.d.ts | 20 - .../types/dist/ts-estree.d.ts.map | 1 - .../types/dist/ts-estree.js | 28 - .../types/dist/ts-estree.js.map | 1 - .../@typescript-eslint/types/package.json | 88 - .../typescript-estree/LICENSE | 26 - .../typescript-estree/README.md | 14 - .../typescript-estree/dist/ast-converter.d.ts | 9 - .../dist/ast-converter.d.ts.map | 1 - .../typescript-estree/dist/ast-converter.js | 61 - .../dist/ast-converter.js.map | 1 - .../typescript-estree/dist/clear-caches.d.ts | 10 - .../dist/clear-caches.d.ts.map | 1 - .../typescript-estree/dist/clear-caches.js | 26 - .../dist/clear-caches.js.map | 1 - .../dist/convert-comments.d.ts | 11 - .../dist/convert-comments.d.ts.map | 1 - .../dist/convert-comments.js | 62 - .../dist/convert-comments.js.map | 1 - .../typescript-estree/dist/convert.d.ts | 137 - .../typescript-estree/dist/convert.d.ts.map | 1 - .../typescript-estree/dist/convert.js | 2575 --- .../typescript-estree/dist/convert.js.map | 1 - .../WatchCompilerHostOfConfigFile.d.ts | 13 - .../WatchCompilerHostOfConfigFile.d.ts.map | 1 - .../WatchCompilerHostOfConfigFile.js | 6 - .../WatchCompilerHostOfConfigFile.js.map | 1 - .../create-program/createDefaultProgram.d.ts | 12 - .../createDefaultProgram.d.ts.map | 1 - .../create-program/createDefaultProgram.js | 70 - .../createDefaultProgram.js.map | 1 - .../create-program/createIsolatedProgram.d.ts | 8 - .../createIsolatedProgram.d.ts.map | 1 - .../create-program/createIsolatedProgram.js | 87 - .../createIsolatedProgram.js.map | 1 - .../create-program/createProjectProgram.d.ts | 10 - .../createProjectProgram.d.ts.map | 1 - .../create-program/createProjectProgram.js | 100 - .../createProjectProgram.js.map | 1 - .../create-program/createProjectService.d.ts | 10 - .../createProjectService.d.ts.map | 1 - .../create-program/createProjectService.js | 82 - .../createProjectService.js.map | 1 - .../dist/create-program/createSourceFile.d.ts | 7 - .../create-program/createSourceFile.d.ts.map | 1 - .../dist/create-program/createSourceFile.js | 52 - .../create-program/createSourceFile.js.map | 1 - .../dist/create-program/describeFilePath.d.ts | 2 - .../create-program/describeFilePath.d.ts.map | 1 - .../dist/create-program/describeFilePath.js | 31 - .../create-program/describeFilePath.js.map | 1 - .../dist/create-program/getScriptKind.d.ts | 5 - .../create-program/getScriptKind.d.ts.map | 1 - .../dist/create-program/getScriptKind.js | 71 - .../dist/create-program/getScriptKind.js.map | 1 - .../getWatchProgramsForProjects.d.ts | 15 - .../getWatchProgramsForProjects.d.ts.map | 1 - .../getWatchProgramsForProjects.js | 378 - .../getWatchProgramsForProjects.js.map | 1 - .../dist/create-program/shared.d.ts | 32 - .../dist/create-program/shared.d.ts.map | 1 - .../dist/create-program/shared.js | 124 - .../dist/create-program/shared.js.map | 1 - .../create-program/useProvidedPrograms.d.ts | 16 - .../useProvidedPrograms.d.ts.map | 1 - .../create-program/useProvidedPrograms.js | 95 - .../create-program/useProvidedPrograms.js.map | 1 - .../validateDefaultProjectForFilesGlob.d.ts | 4 - ...alidateDefaultProjectForFilesGlob.d.ts.map | 1 - .../validateDefaultProjectForFilesGlob.js | 24 - .../validateDefaultProjectForFilesGlob.js.map | 1 - .../dist/createParserServices.d.ts | 5 - .../dist/createParserServices.d.ts.map | 1 - .../dist/createParserServices.js | 28 - .../dist/createParserServices.js.map | 1 - .../typescript-estree/dist/getModifiers.d.ts | 4 - .../dist/getModifiers.d.ts.map | 1 - .../typescript-estree/dist/getModifiers.js | 65 - .../dist/getModifiers.js.map | 1 - .../typescript-estree/dist/index.d.ts | 14 - .../typescript-estree/dist/index.d.ts.map | 1 - .../typescript-estree/dist/index.js | 40 - .../typescript-estree/dist/index.js.map | 1 - .../dist/jsx/xhtml-entities.d.ts | 2 - .../dist/jsx/xhtml-entities.d.ts.map | 1 - .../dist/jsx/xhtml-entities.js | 259 - .../dist/jsx/xhtml-entities.js.map | 1 - .../typescript-estree/dist/node-utils.d.ts | 249 - .../dist/node-utils.d.ts.map | 1 - .../typescript-estree/dist/node-utils.js | 787 - .../typescript-estree/dist/node-utils.js.map | 1 - .../dist/parseSettings/ExpiringCache.d.ts | 17 - .../dist/parseSettings/ExpiringCache.d.ts.map | 1 - .../dist/parseSettings/ExpiringCache.js | 60 - .../dist/parseSettings/ExpiringCache.js.map | 1 - .../parseSettings/createParseSettings.d.ts | 7 - .../createParseSettings.d.ts.map | 1 - .../dist/parseSettings/createParseSettings.js | 193 - .../parseSettings/createParseSettings.js.map | 1 - .../parseSettings/getProjectConfigFiles.d.ts | 13 - .../getProjectConfigFiles.d.ts.map | 1 - .../parseSettings/getProjectConfigFiles.js | 73 - .../getProjectConfigFiles.js.map | 1 - .../dist/parseSettings/index.d.ts | 134 - .../dist/parseSettings/index.d.ts.map | 1 - .../dist/parseSettings/index.js | 3 - .../dist/parseSettings/index.js.map | 1 - .../dist/parseSettings/inferSingleRun.d.ts | 15 - .../parseSettings/inferSingleRun.d.ts.map | 1 - .../dist/parseSettings/inferSingleRun.js | 62 - .../dist/parseSettings/inferSingleRun.js.map | 1 - .../parseSettings/resolveProjectList.d.ts | 19 - .../parseSettings/resolveProjectList.d.ts.map | 1 - .../dist/parseSettings/resolveProjectList.js | 101 - .../parseSettings/resolveProjectList.js.map | 1 - .../parseSettings/warnAboutTSVersion.d.ts | 3 - .../parseSettings/warnAboutTSVersion.d.ts.map | 1 - .../dist/parseSettings/warnAboutTSVersion.js | 68 - .../parseSettings/warnAboutTSVersion.js.map | 1 - .../dist/parser-options.d.ts | 233 - .../dist/parser-options.d.ts.map | 1 - .../typescript-estree/dist/parser-options.js | 3 - .../dist/parser-options.js.map | 1 - .../typescript-estree/dist/parser.d.ts | 21 - .../typescript-estree/dist/parser.d.ts.map | 1 - .../typescript-estree/dist/parser.js | 194 - .../typescript-estree/dist/parser.js.map | 1 - .../dist/semantic-or-syntactic-errors.d.ts | 13 - .../semantic-or-syntactic-errors.d.ts.map | 1 - .../dist/semantic-or-syntactic-errors.js | 95 - .../dist/semantic-or-syntactic-errors.js.map | 1 - .../dist/simple-traverse.d.ts | 12 - .../dist/simple-traverse.d.ts.map | 1 - .../typescript-estree/dist/simple-traverse.js | 57 - .../dist/simple-traverse.js.map | 1 - .../typescript-estree/dist/source-files.d.ts | 4 - .../dist/source-files.d.ts.map | 1 - .../typescript-estree/dist/source-files.js | 40 - .../dist/source-files.js.map | 1 - .../ts-estree/estree-to-ts-node-types.d.ts | 178 - .../estree-to-ts-node-types.d.ts.map | 1 - .../dist/ts-estree/estree-to-ts-node-types.js | 3 - .../ts-estree/estree-to-ts-node-types.js.map | 1 - .../dist/ts-estree/index.d.ts | 4 - .../dist/ts-estree/index.d.ts.map | 1 - .../typescript-estree/dist/ts-estree/index.js | 25 - .../dist/ts-estree/index.js.map | 1 - .../dist/ts-estree/ts-nodes.d.ts | 18 - .../dist/ts-estree/ts-nodes.d.ts.map | 1 - .../dist/ts-estree/ts-nodes.js | 3 - .../dist/ts-estree/ts-nodes.js.map | 1 - .../dist/use-at-your-own-risk.d.ts | 7 - .../dist/use-at-your-own-risk.d.ts.map | 1 - .../dist/use-at-your-own-risk.js | 28 - .../dist/use-at-your-own-risk.js.map | 1 - .../dist/useProgramFromProjectService.d.ts | 5 - .../useProgramFromProjectService.d.ts.map | 1 - .../dist/useProgramFromProjectService.js | 71 - .../dist/useProgramFromProjectService.js.map | 1 - .../typescript-estree/dist/version-check.d.ts | 5 - .../dist/version-check.d.ts.map | 1 - .../typescript-estree/dist/version-check.js | 49 - .../dist/version-check.js.map | 1 - .../dist/withoutProjectParserOptions.d.ts | 11 - .../dist/withoutProjectParserOptions.d.ts.map | 1 - .../dist/withoutProjectParserOptions.js | 17 - .../dist/withoutProjectParserOptions.js.map | 1 - .../typescript-estree/package.json | 91 - .../@typescript-eslint/utils/LICENSE | 21 - .../@typescript-eslint/utils/README.md | 12 - .../eslint-utils/PatternMatcher.d.ts | 48 - .../eslint-utils/PatternMatcher.d.ts.map | 1 - .../ast-utils/eslint-utils/PatternMatcher.js | 36 - .../eslint-utils/PatternMatcher.js.map | 1 - .../eslint-utils/ReferenceTracker.d.ts | 76 - .../eslint-utils/ReferenceTracker.d.ts.map | 1 - .../eslint-utils/ReferenceTracker.js | 40 - .../eslint-utils/ReferenceTracker.js.map | 1 - .../ast-utils/eslint-utils/astUtilities.d.ts | 85 - .../eslint-utils/astUtilities.d.ts.map | 1 - .../ast-utils/eslint-utils/astUtilities.js | 99 - .../eslint-utils/astUtilities.js.map | 1 - .../dist/ast-utils/eslint-utils/index.d.ts | 6 - .../ast-utils/eslint-utils/index.d.ts.map | 1 - .../dist/ast-utils/eslint-utils/index.js | 22 - .../dist/ast-utils/eslint-utils/index.js.map | 1 - .../ast-utils/eslint-utils/predicates.d.ts | 32 - .../eslint-utils/predicates.d.ts.map | 1 - .../dist/ast-utils/eslint-utils/predicates.js | 72 - .../ast-utils/eslint-utils/predicates.js.map | 1 - .../ast-utils/eslint-utils/scopeAnalysis.d.ts | 18 - .../eslint-utils/scopeAnalysis.d.ts.map | 1 - .../ast-utils/eslint-utils/scopeAnalysis.js | 44 - .../eslint-utils/scopeAnalysis.js.map | 1 - .../utils/dist/ast-utils/helpers.d.ts | 19 - .../utils/dist/ast-utils/helpers.d.ts.map | 1 - .../utils/dist/ast-utils/helpers.js | 22 - .../utils/dist/ast-utils/helpers.js.map | 1 - .../utils/dist/ast-utils/index.d.ts | 5 - .../utils/dist/ast-utils/index.d.ts.map | 1 - .../utils/dist/ast-utils/index.js | 21 - .../utils/dist/ast-utils/index.js.map | 1 - .../utils/dist/ast-utils/misc.d.ts | 8 - .../utils/dist/ast-utils/misc.d.ts.map | 1 - .../utils/dist/ast-utils/misc.js | 13 - .../utils/dist/ast-utils/misc.js.map | 1 - .../utils/dist/ast-utils/predicates.d.ts | 96 - .../utils/dist/ast-utils/predicates.d.ts.map | 1 - .../utils/dist/ast-utils/predicates.js | 135 - .../utils/dist/ast-utils/predicates.js.map | 1 - .../dist/eslint-utils/InferTypesFromRule.d.ts | 11 - .../eslint-utils/InferTypesFromRule.d.ts.map | 1 - .../dist/eslint-utils/InferTypesFromRule.js | 3 - .../eslint-utils/InferTypesFromRule.js.map | 1 - .../utils/dist/eslint-utils/RuleCreator.d.ts | 35 - .../dist/eslint-utils/RuleCreator.d.ts.map | 1 - .../utils/dist/eslint-utils/RuleCreator.js | 44 - .../dist/eslint-utils/RuleCreator.js.map | 1 - .../utils/dist/eslint-utils/applyDefault.d.ts | 10 - .../dist/eslint-utils/applyDefault.d.ts.map | 1 - .../utils/dist/eslint-utils/applyDefault.js | 33 - .../dist/eslint-utils/applyDefault.js.map | 1 - .../utils/dist/eslint-utils/context.d.ts | 16 - .../utils/dist/eslint-utils/context.d.ts.map | 1 - .../utils/dist/eslint-utils/context.js | 33 - .../utils/dist/eslint-utils/context.js.map | 1 - .../utils/dist/eslint-utils/deepMerge.d.ts | 16 - .../dist/eslint-utils/deepMerge.d.ts.map | 1 - .../utils/dist/eslint-utils/deepMerge.js | 46 - .../utils/dist/eslint-utils/deepMerge.js.map | 1 - .../dist/eslint-utils/getParserServices.d.ts | 24 - .../eslint-utils/getParserServices.d.ts.map | 1 - .../dist/eslint-utils/getParserServices.js | 40 - .../eslint-utils/getParserServices.js.map | 1 - .../utils/dist/eslint-utils/index.d.ts | 8 - .../utils/dist/eslint-utils/index.d.ts.map | 1 - .../utils/dist/eslint-utils/index.js | 24 - .../utils/dist/eslint-utils/index.js.map | 1 - .../utils/dist/eslint-utils/nullThrows.d.ts | 14 - .../dist/eslint-utils/nullThrows.d.ts.map | 1 - .../utils/dist/eslint-utils/nullThrows.js | 23 - .../utils/dist/eslint-utils/nullThrows.js.map | 1 - .../eslint-utils/parserSeemsToBeTSESLint.d.ts | 2 - .../parserSeemsToBeTSESLint.d.ts.map | 1 - .../eslint-utils/parserSeemsToBeTSESLint.js | 7 - .../parserSeemsToBeTSESLint.js.map | 1 - .../@typescript-eslint/utils/dist/index.d.ts | 8 - .../utils/dist/index.d.ts.map | 1 - .../@typescript-eslint/utils/dist/index.js | 41 - .../utils/dist/index.js.map | 1 - .../utils/dist/json-schema.d.ts | 388 - .../utils/dist/json-schema.d.ts.map | 1 - .../utils/dist/json-schema.js | 9 - .../utils/dist/json-schema.js.map | 1 - .../utils/dist/ts-eslint/AST.d.ts | 9 - .../utils/dist/ts-eslint/AST.d.ts.map | 1 - .../utils/dist/ts-eslint/AST.js | 4 - .../utils/dist/ts-eslint/AST.js.map | 1 - .../utils/dist/ts-eslint/Config.d.ts | 264 - .../utils/dist/ts-eslint/Config.d.ts.map | 1 - .../utils/dist/ts-eslint/Config.js | 4 - .../utils/dist/ts-eslint/Config.js.map | 1 - .../utils/dist/ts-eslint/ESLint.d.ts | 8 - .../utils/dist/ts-eslint/ESLint.d.ts.map | 1 - .../utils/dist/ts-eslint/ESLint.js | 15 - .../utils/dist/ts-eslint/ESLint.js.map | 1 - .../utils/dist/ts-eslint/Linter.d.ts | 247 - .../utils/dist/ts-eslint/Linter.d.ts.map | 1 - .../utils/dist/ts-eslint/Linter.js | 14 - .../utils/dist/ts-eslint/Linter.js.map | 1 - .../utils/dist/ts-eslint/Parser.d.ts | 95 - .../utils/dist/ts-eslint/Parser.d.ts.map | 1 - .../utils/dist/ts-eslint/Parser.js | 4 - .../utils/dist/ts-eslint/Parser.js.map | 1 - .../utils/dist/ts-eslint/ParserOptions.d.ts | 2 - .../dist/ts-eslint/ParserOptions.d.ts.map | 1 - .../utils/dist/ts-eslint/ParserOptions.js | 3 - .../utils/dist/ts-eslint/ParserOptions.js.map | 1 - .../utils/dist/ts-eslint/Processor.d.ts | 64 - .../utils/dist/ts-eslint/Processor.d.ts.map | 1 - .../utils/dist/ts-eslint/Processor.js | 4 - .../utils/dist/ts-eslint/Processor.js.map | 1 - .../utils/dist/ts-eslint/Rule.d.ts | 531 - .../utils/dist/ts-eslint/Rule.d.ts.map | 1 - .../utils/dist/ts-eslint/Rule.js | 3 - .../utils/dist/ts-eslint/Rule.js.map | 1 - .../utils/dist/ts-eslint/RuleTester.d.ts | 159 - .../utils/dist/ts-eslint/RuleTester.d.ts.map | 1 - .../utils/dist/ts-eslint/RuleTester.js | 8 - .../utils/dist/ts-eslint/RuleTester.js.map | 1 - .../utils/dist/ts-eslint/Scope.d.ts | 44 - .../utils/dist/ts-eslint/Scope.d.ts.map | 1 - .../utils/dist/ts-eslint/Scope.js | 34 - .../utils/dist/ts-eslint/Scope.js.map | 1 - .../utils/dist/ts-eslint/SourceCode.d.ts | 352 - .../utils/dist/ts-eslint/SourceCode.d.ts.map | 1 - .../utils/dist/ts-eslint/SourceCode.js | 9 - .../utils/dist/ts-eslint/SourceCode.js.map | 1 - .../dist/ts-eslint/eslint/ESLintShared.d.ts | 382 - .../ts-eslint/eslint/ESLintShared.d.ts.map | 1 - .../dist/ts-eslint/eslint/ESLintShared.js | 3 - .../dist/ts-eslint/eslint/ESLintShared.js.map | 1 - .../dist/ts-eslint/eslint/FlatESLint.d.ts | 84 - .../dist/ts-eslint/eslint/FlatESLint.d.ts.map | 1 - .../utils/dist/ts-eslint/eslint/FlatESLint.js | 15 - .../dist/ts-eslint/eslint/FlatESLint.js.map | 1 - .../dist/ts-eslint/eslint/LegacyESLint.d.ts | 73 - .../ts-eslint/eslint/LegacyESLint.d.ts.map | 1 - .../dist/ts-eslint/eslint/LegacyESLint.js | 15 - .../dist/ts-eslint/eslint/LegacyESLint.js.map | 1 - .../utils/dist/ts-eslint/index.d.ts | 12 - .../utils/dist/ts-eslint/index.d.ts.map | 1 - .../utils/dist/ts-eslint/index.js | 28 - .../utils/dist/ts-eslint/index.js.map | 1 - .../utils/dist/ts-estree.d.ts | 3 - .../utils/dist/ts-estree.d.ts.map | 1 - .../utils/dist/ts-estree.js | 10 - .../utils/dist/ts-estree.js.map | 1 - .../utils/dist/ts-utils/index.d.ts | 2 - .../utils/dist/ts-utils/index.d.ts.map | 1 - .../utils/dist/ts-utils/index.js | 18 - .../utils/dist/ts-utils/index.js.map | 1 - .../utils/dist/ts-utils/isArray.d.ts | 2 - .../utils/dist/ts-utils/isArray.d.ts.map | 1 - .../utils/dist/ts-utils/isArray.js | 8 - .../utils/dist/ts-utils/isArray.js.map | 1 - .../@typescript-eslint/utils/package.json | 92 - .../@typescript-eslint/visitor-keys/LICENSE | 21 - .../@typescript-eslint/visitor-keys/README.md | 10 - .../visitor-keys/dist/get-keys.d.ts | 4 - .../visitor-keys/dist/get-keys.d.ts.map | 1 - .../visitor-keys/dist/get-keys.js | 7 - .../visitor-keys/dist/get-keys.js.map | 1 - .../visitor-keys/dist/index.d.ts | 3 - .../visitor-keys/dist/index.d.ts.map | 1 - .../visitor-keys/dist/index.js | 8 - .../visitor-keys/dist/index.js.map | 1 - .../visitor-keys/dist/visitor-keys.d.ts | 4 - .../visitor-keys/dist/visitor-keys.d.ts.map | 1 - .../visitor-keys/dist/visitor-keys.js | 190 - .../visitor-keys/dist/visitor-keys.js.map | 1 - .../visitor-keys/package.json | 73 - .../brace-expansion/.github/FUNDING.yml | 2 - .../node_modules/brace-expansion/README.md | 135 - .../node_modules/brace-expansion/index.js | 203 - .../node_modules/brace-expansion/package.json | 46 - .../node_modules/minimatch/LICENSE | 15 - .../node_modules/minimatch/README.md | 454 - .../dist/commonjs/assert-valid-pattern.d.ts | 2 - .../commonjs/assert-valid-pattern.d.ts.map | 1 - .../dist/commonjs/assert-valid-pattern.js | 14 - .../dist/commonjs/assert-valid-pattern.js.map | 1 - .../minimatch/dist/commonjs/ast.d.ts | 20 - .../minimatch/dist/commonjs/ast.d.ts.map | 1 - .../minimatch/dist/commonjs/ast.js | 592 - .../minimatch/dist/commonjs/ast.js.map | 1 - .../dist/commonjs/brace-expressions.d.ts | 8 - .../dist/commonjs/brace-expressions.d.ts.map | 1 - .../dist/commonjs/brace-expressions.js | 152 - .../dist/commonjs/brace-expressions.js.map | 1 - .../minimatch/dist/commonjs/escape.d.ts | 12 - .../minimatch/dist/commonjs/escape.d.ts.map | 1 - .../minimatch/dist/commonjs/escape.js | 22 - .../minimatch/dist/commonjs/escape.js.map | 1 - .../minimatch/dist/commonjs/index.d.ts | 94 - .../minimatch/dist/commonjs/index.d.ts.map | 1 - .../minimatch/dist/commonjs/index.js | 1017 - .../minimatch/dist/commonjs/index.js.map | 1 - .../minimatch/dist/commonjs/package.json | 3 - .../minimatch/dist/commonjs/unescape.d.ts | 17 - .../minimatch/dist/commonjs/unescape.d.ts.map | 1 - .../minimatch/dist/commonjs/unescape.js | 24 - .../minimatch/dist/commonjs/unescape.js.map | 1 - .../dist/esm/assert-valid-pattern.d.ts | 2 - .../dist/esm/assert-valid-pattern.d.ts.map | 1 - .../dist/esm/assert-valid-pattern.js | 10 - .../dist/esm/assert-valid-pattern.js.map | 1 - .../node_modules/minimatch/dist/esm/ast.d.ts | 20 - .../minimatch/dist/esm/ast.d.ts.map | 1 - .../node_modules/minimatch/dist/esm/ast.js | 588 - .../minimatch/dist/esm/ast.js.map | 1 - .../minimatch/dist/esm/brace-expressions.d.ts | 8 - .../dist/esm/brace-expressions.d.ts.map | 1 - .../minimatch/dist/esm/brace-expressions.js | 148 - .../dist/esm/brace-expressions.js.map | 1 - .../minimatch/dist/esm/escape.d.ts | 12 - .../minimatch/dist/esm/escape.d.ts.map | 1 - .../node_modules/minimatch/dist/esm/escape.js | 18 - .../minimatch/dist/esm/escape.js.map | 1 - .../minimatch/dist/esm/index.d.ts | 94 - .../minimatch/dist/esm/index.d.ts.map | 1 - .../node_modules/minimatch/dist/esm/index.js | 1001 - .../minimatch/dist/esm/index.js.map | 1 - .../minimatch/dist/esm/package.json | 3 - .../minimatch/dist/esm/unescape.d.ts | 17 - .../minimatch/dist/esm/unescape.d.ts.map | 1 - .../minimatch/dist/esm/unescape.js | 20 - .../minimatch/dist/esm/unescape.js.map | 1 - .../node_modules/minimatch/package.json | 82 - .../eslint-plugin-github/package.json | 6 +- .../eslint-plugin-import/CHANGELOG.md | 68 +- .../eslint-plugin-import/CONTRIBUTING.md | 84 - node_modules/eslint-plugin-import/README.md | 205 +- node_modules/eslint-plugin-import/RELEASE.md | 54 - .../config/flat/errors.js | 14 + .../eslint-plugin-import/config/flat/react.js | 19 + .../config/flat/recommended.js | 26 + .../config/flat/warnings.js | 11 + .../eslint-plugin-import/config/react.js | 2 - .../eslint-plugin-import/config/typescript.js | 2 +- .../docs/rules/dynamic-import-chunkname.md | 44 +- .../docs/rules/no-empty-named-blocks.md | 2 +- .../docs/rules/no-extraneous-dependencies.md | 2 +- .../docs/rules/no-unused-modules.md | 15 +- .../eslint-plugin-import/docs/rules/order.md | 45 +- .../eslint-plugin-import/lib/ExportMap.js | 856 - .../eslint-plugin-import/lib/core/fsWalk.js | 49 + .../lib/core/importType.js | 19 +- .../lib/core/packagePath.js | 8 +- .../lib/exportMap/builder.js | 206 + .../lib/exportMap/captureDependency.js | 61 + .../lib/exportMap/childContext.js | 33 + .../eslint-plugin-import/lib/exportMap/doc.js | 90 + .../lib/exportMap/index.js | 180 + .../lib/exportMap/namespace.js | 39 + .../lib/exportMap/patternCapture.js | 41 + .../lib/exportMap/remotePath.js | 12 + .../lib/exportMap/specifier.js | 33 + .../lib/exportMap/typescript.js | 44 + .../lib/exportMap/visitor.js | 171 + .../eslint-plugin-import/lib/index.js | 35 +- .../eslint-plugin-import/lib/rules/default.js | 6 +- .../lib/rules/dynamic-import-chunkname.js | 64 +- .../eslint-plugin-import/lib/rules/export.js | 9 +- .../eslint-plugin-import/lib/rules/named.js | 8 +- .../lib/rules/namespace.js | 13 +- .../lib/rules/newline-after-import.js | 22 +- .../lib/rules/no-cycle.js | 36 +- .../lib/rules/no-deprecated.js | 9 +- .../lib/rules/no-duplicates.js | 184 +- .../lib/rules/no-extraneous-dependencies.js | 19 +- .../lib/rules/no-named-as-default-member.js | 6 +- .../lib/rules/no-named-as-default.js | 6 +- .../lib/rules/no-namespace.js | 149 +- .../lib/rules/no-restricted-paths.js | 20 +- .../lib/rules/no-unused-modules.js | 266 +- .../eslint-plugin-import/lib/rules/order.js | 20 +- node_modules/eslint-plugin-import/lib/scc.js | 86 + .../eslint-plugin-import/package.json | 27 +- .../eslint/lib/config/flat-config-array.js | 114 +- .../eslint/lib/eslint/eslint-helpers.js | 140 +- node_modules/eslint/lib/eslint/flat-eslint.js | 58 +- node_modules/eslint/lib/linter/linter.js | 2 +- .../eslint/lib/source-code/source-code.js | 2 +- .../node_modules/@eslint/js/package.json | 2 +- node_modules/eslint/package.json | 14 +- .../function.prototype.name/.editorconfig | 6 +- .../function.prototype.name/.eslintignore | 1 - .../function.prototype.name/.eslintrc | 8 +- .../function.prototype.name/CHANGELOG.md | 41 + .../function.prototype.name/README.md | 13 + .../function.prototype.name/implementation.js | 35 +- .../function.prototype.name/package.json | 45 +- .../function.prototype.name/test/tests.js | 48 +- node_modules/get-intrinsic/CHANGELOG.md | 26 + node_modules/get-intrinsic/index.js | 24 +- node_modules/get-intrinsic/package.json | 36 +- .../get-symbol-description/.eslintignore | 1 - .../.github/FUNDING.yml | 2 +- .../get-symbol-description/CHANGELOG.md | 31 + node_modules/get-symbol-description/index.js | 5 +- .../get-symbol-description/package.json | 35 +- .../get-symbol-description/test/index.js | 8 +- .../has-property-descriptors/CHANGELOG.md | 19 + .../has-property-descriptors/index.js | 17 +- .../has-property-descriptors/package.json | 19 +- node_modules/has-proto/CHANGELOG.md | 15 + node_modules/has-proto/index.d.ts | 3 + node_modules/has-proto/index.js | 6 +- node_modules/has-proto/package.json | 14 +- node_modules/has-proto/tsconfig.json | 49 + node_modules/has-tostringtag/.eslintrc | 6 - node_modules/has-tostringtag/.nycrc | 13 + node_modules/has-tostringtag/CHANGELOG.md | 22 + node_modules/has-tostringtag/index.d.ts | 3 + node_modules/has-tostringtag/index.js | 1 + node_modules/has-tostringtag/package.json | 50 +- node_modules/has-tostringtag/shams.d.ts | 3 + node_modules/has-tostringtag/shams.js | 1 + .../has-tostringtag/test/shams/core-js.js | 3 + .../test/shams/get-own-property-symbols.js | 2 + node_modules/has-tostringtag/test/tests.js | 3 +- node_modules/has-tostringtag/tsconfig.json | 49 + node_modules/hasown/CHANGELOG.md | 20 + node_modules/hasown/index.d.ts | 6 +- node_modules/hasown/index.d.ts.map | 1 - node_modules/hasown/index.js | 2 +- node_modules/hasown/package.json | 31 +- node_modules/hasown/tsconfig.json | 49 +- node_modules/internal-slot/.eslintignore | 1 - node_modules/internal-slot/CHANGELOG.md | 16 + node_modules/internal-slot/index.js | 7 +- node_modules/internal-slot/package.json | 16 +- node_modules/is-array-buffer/.eslintrc | 4 + node_modules/is-array-buffer/CHANGELOG.md | 17 + node_modules/is-array-buffer/index.d.ts | 3 + node_modules/is-array-buffer/index.js | 25 +- node_modules/is-array-buffer/package.json | 29 +- node_modules/is-array-buffer/test/index.js | 11 +- node_modules/is-array-buffer/tsconfig.json | 49 + node_modules/is-core-module/CHANGELOG.md | 25 + node_modules/is-core-module/core.json | 3 + node_modules/is-core-module/package.json | 19 +- node_modules/is-core-module/test/index.js | 23 +- node_modules/is-data-view/.editorconfig | 20 + node_modules/is-data-view/.eslintrc | 17 + node_modules/is-data-view/.github/FUNDING.yml | 12 + node_modules/is-data-view/.nycrc | 9 + node_modules/is-data-view/CHANGELOG.md | 23 + node_modules/is-data-view/LICENSE | 21 + node_modules/is-data-view/README.md | 69 + node_modules/is-data-view/index.d.ts | 3 + node_modules/is-data-view/index.js | 39 + node_modules/is-data-view/package.json | 97 + node_modules/is-data-view/test/index.js | 60 + node_modules/is-data-view/tsconfig.json | 49 + node_modules/is-negative-zero/.eslintignore | 1 - node_modules/is-negative-zero/CHANGELOG.md | 11 + node_modules/is-negative-zero/index.d.ts | 3 + node_modules/is-negative-zero/index.js | 1 + node_modules/is-negative-zero/package.json | 25 +- node_modules/is-negative-zero/test/index.js | 1 + node_modules/is-negative-zero/tsconfig.json | 49 + .../is-shared-array-buffer/.eslintignore | 1 - .../is-shared-array-buffer/CHANGELOG.md | 17 + node_modules/is-shared-array-buffer/README.md | 2 - .../is-shared-array-buffer/index.d.ts | 3 + node_modules/is-shared-array-buffer/index.js | 1 + .../is-shared-array-buffer/package.json | 35 +- .../is-shared-array-buffer/test/index.js | 16 +- .../is-shared-array-buffer/tsconfig.json | 49 + node_modules/is-typed-array/CHANGELOG.md | 24 + node_modules/is-typed-array/index.d.ts | 16 + node_modules/is-typed-array/index.js | 58 +- node_modules/is-typed-array/package.json | 31 +- node_modules/is-typed-array/test/index.js | 10 +- node_modules/is-typed-array/tsconfig.json | 49 + .../node_modules => }/isarray/LICENSE | 0 .../node_modules => }/isarray/README.md | 0 .../node_modules => }/isarray/index.js | 0 .../node_modules => }/isarray/package.json | 0 node_modules/nise/README.md | 2 +- node_modules/nise/lib/fake-server/index.js | 19 +- node_modules/nise/nise.js | 1578 +- node_modules/nise/package.json | 30 +- node_modules/object-inspect/CHANGELOG.md | 34 + node_modules/object-inspect/index.js | 11 + node_modules/object-inspect/package.json | 25 +- node_modules/object-inspect/readme.markdown | 20 +- node_modules/object-inspect/test/global.js | 17 + node_modules/object.assign/CHANGELOG.md | 8 + node_modules/object.assign/dist/browser.js | 329 +- node_modules/object.assign/package.json | 20 +- node_modules/object.assign/test.html | 18458 ---------------- node_modules/object.assign/test/tests.js | 4 +- node_modules/object.fromentries/CHANGELOG.md | 9 + .../object.fromentries/implementation.js | 8 +- node_modules/object.fromentries/package.json | 13 +- node_modules/object.groupby/.eslintrc | 16 - node_modules/object.groupby/CHANGELOG.md | 17 + .../aos/AddValueToKeyedGroup.js | 26 - node_modules/object.groupby/aos/GroupBy.js | 77 - node_modules/object.groupby/implementation.js | 8 +- node_modules/object.groupby/package.json | 19 +- node_modules/object.values/CHANGELOG.md | 8 + node_modules/object.values/implementation.js | 2 +- node_modules/object.values/package.json | 16 +- node_modules/path-to-regexp/Readme.md | 341 +- .../path-to-regexp/dist.es2015/index.js | 400 - .../path-to-regexp/dist.es2015/index.js.map | 1 - node_modules/path-to-regexp/dist/index.d.ts | 181 +- node_modules/path-to-regexp/dist/index.js | 693 +- node_modules/path-to-regexp/dist/index.js.map | 2 +- node_modules/path-to-regexp/package.json | 24 +- .../possible-typed-array-names/.eslintrc | 5 + .../.github/FUNDING.yml | 12 + .../possible-typed-array-names/CHANGELOG.md | 15 + .../possible-typed-array-names/LICENSE | 21 + .../possible-typed-array-names/README.md | 48 + .../possible-typed-array-names/index.d.ts | 15 + .../possible-typed-array-names/index.js | 16 + .../possible-typed-array-names/package.json | 83 + .../possible-typed-array-names/test/index.js | 16 + .../possible-typed-array-names/tsconfig.json | 49 + node_modules/regexp.prototype.flags/.eslintrc | 1 + .../regexp.prototype.flags/CHANGELOG.md | 21 + .../regexp.prototype.flags/implementation.js | 13 +- .../regexp.prototype.flags/package.json | 28 +- .../regexp.prototype.flags/test/tests.js | 26 +- node_modules/safe-array-concat/CHANGELOG.md | 43 + node_modules/safe-array-concat/index.d.ts | 3 + node_modules/safe-array-concat/index.js | 23 +- .../node_modules/isarray/README.md | 38 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 48 - node_modules/safe-array-concat/package.json | 30 +- node_modules/safe-array-concat/test/index.js | 50 +- node_modules/safe-array-concat/tsconfig.json | 9 + node_modules/safe-regex-test/.nycrc | 13 + node_modules/safe-regex-test/CHANGELOG.md | 28 + node_modules/safe-regex-test/README.md | 8 +- node_modules/safe-regex-test/index.js | 3 +- node_modules/safe-regex-test/package.json | 23 +- node_modules/set-function-length/.eslintrc | 27 + .../set-function-length/.github/FUNDING.yml | 12 + node_modules/set-function-length/.nycrc | 13 + node_modules/set-function-length/CHANGELOG.md | 70 + node_modules/set-function-length/LICENSE | 21 + node_modules/set-function-length/README.md | 56 + node_modules/set-function-length/env.d.ts | 9 + node_modules/set-function-length/env.js | 25 + node_modules/set-function-length/index.d.ts | 7 + node_modules/set-function-length/index.js | 42 + node_modules/set-function-length/package.json | 102 + .../set-function-length/tsconfig.json | 9 + node_modules/set-function-name/.eslintrc | 21 + .../set-function-name/.github/FUNDING.yml | 12 + node_modules/set-function-name/CHANGELOG.md | 48 + node_modules/set-function-name/LICENSE | 21 + node_modules/set-function-name/README.md | 61 + node_modules/set-function-name/index.d.ts | 5 + node_modules/set-function-name/index.js | 23 + node_modules/set-function-name/package.json | 99 + node_modules/set-function-name/tsconfig.json | 59 + node_modules/sinon/package.json | 71 +- node_modules/sinon/pkg/sinon-esm.js | 4140 ++-- .../sinon/pkg/sinon-no-sourcemaps.cjs | 4140 ++-- node_modules/sinon/pkg/sinon.js | 4142 ++-- .../string.prototype.trim/CHANGELOG.md | 17 +- .../string.prototype.trim/implementation.js | 4 +- node_modules/string.prototype.trim/index.js | 2 +- .../string.prototype.trim/package.json | 19 +- .../string.prototype.trim/test/tests.js | 17 + .../string.prototype.trimend/CHANGELOG.md | 14 + .../string.prototype.trimend/index.js | 2 +- .../string.prototype.trimend/package.json | 18 +- .../string.prototype.trimstart/CHANGELOG.md | 17 + .../string.prototype.trimstart/index.js | 2 +- .../string.prototype.trimstart/package.json | 21 +- node_modules/typed-array-buffer/CHANGELOG.md | 18 + node_modules/typed-array-buffer/index.d.ts | 16 + node_modules/typed-array-buffer/index.js | 5 +- node_modules/typed-array-buffer/package.json | 25 +- node_modules/typed-array-buffer/test/index.js | 3 +- node_modules/typed-array-buffer/tsconfig.json | 49 + .../typed-array-byte-length/CHANGELOG.md | 11 + .../typed-array-byte-length/index.d.ts | 17 + node_modules/typed-array-byte-length/index.js | 26 +- .../typed-array-byte-length/package.json | 31 +- .../typed-array-byte-length/test/index.js | 1 + .../typed-array-byte-length/tsconfig.json | 49 + .../typed-array-byte-offset/CHANGELOG.md | 18 + .../typed-array-byte-offset/index.d.ts | 17 + node_modules/typed-array-byte-offset/index.js | 18 +- .../typed-array-byte-offset/package.json | 31 +- .../typed-array-byte-offset/test/index.js | 15 +- .../typed-array-byte-offset/tsconfig.json | 49 + node_modules/typed-array-length/.eslintrc | 2 +- node_modules/typed-array-length/CHANGELOG.md | 24 + node_modules/typed-array-length/index.d.ts | 23 + node_modules/typed-array-length/index.js | 57 +- node_modules/typed-array-length/package.json | 39 +- node_modules/typed-array-length/test/index.js | 17 +- node_modules/typed-array-length/tsconfig.json | 9 + .../lib/cs/diagnosticMessages.generated.json | 377 +- .../lib/de/diagnosticMessages.generated.json | 377 +- .../lib/es/diagnosticMessages.generated.json | 373 +- .../lib/fr/diagnosticMessages.generated.json | 377 +- .../lib/it/diagnosticMessages.generated.json | 375 +- .../lib/ja/diagnosticMessages.generated.json | 375 +- .../lib/ko/diagnosticMessages.generated.json | 375 +- .../typescript/lib/lib.dom.asynciterable.d.ts | 20 +- node_modules/typescript/lib/lib.dom.d.ts | 1207 +- .../typescript/lib/lib.dom.iterable.d.ts | 174 +- .../typescript/lib/lib.es2015.generator.d.ts | 4 +- .../typescript/lib/lib.es2015.iterable.d.ts | 168 +- .../typescript/lib/lib.es2017.object.d.ts | 8 +- .../lib/lib.es2018.asyncgenerator.d.ts | 4 +- .../lib/lib.es2018.asynciterable.d.ts | 22 +- .../typescript/lib/lib.es2020.bigint.d.ts | 16 +- .../typescript/lib/lib.es2020.string.d.ts | 4 +- .../lib/lib.es2020.symbol.wellknown.d.ts | 6 +- .../typescript/lib/lib.es2022.intl.d.ts | 6 +- node_modules/typescript/lib/lib.esnext.d.ts | 1 + .../typescript/lib/lib.esnext.disposable.d.ts | 8 + .../typescript/lib/lib.esnext.iterator.d.ts | 148 + .../lib/lib.webworker.asynciterable.d.ts | 20 +- .../typescript/lib/lib.webworker.d.ts | 179 +- .../lib/lib.webworker.iterable.d.ts | 82 +- .../lib/pl/diagnosticMessages.generated.json | 373 +- .../pt-br/diagnosticMessages.generated.json | 377 +- .../lib/ru/diagnosticMessages.generated.json | 377 +- .../lib/tr/diagnosticMessages.generated.json | 377 +- node_modules/typescript/lib/tsc.js | 4527 ++-- node_modules/typescript/lib/tsserver.js | 64 +- node_modules/typescript/lib/typescript.d.ts | 400 +- node_modules/typescript/lib/typescript.js | 7852 ++++--- .../typescript/lib/typingsInstaller.js | 6 +- .../zh-cn/diagnosticMessages.generated.json | 375 +- .../zh-tw/diagnosticMessages.generated.json | 373 +- node_modules/typescript/package.json | 67 +- node_modules/which-typed-array/CHANGELOG.md | 34 + node_modules/which-typed-array/index.d.ts | 61 + node_modules/which-typed-array/index.js | 63 +- node_modules/which-typed-array/package.json | 27 +- node_modules/which-typed-array/test/index.js | 8 +- node_modules/which-typed-array/tsconfig.json | 9 + 3942 files changed, 54741 insertions(+), 131757 deletions(-) delete mode 100644 node_modules/@humanwhocodes/object-schema/.eslintrc.js delete mode 100644 node_modules/@humanwhocodes/object-schema/.github/workflows/nodejs-test.yml delete mode 100644 node_modules/@humanwhocodes/object-schema/.github/workflows/release-please.yml delete mode 100644 node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js delete mode 100644 node_modules/@humanwhocodes/object-schema/tests/object-schema.js delete mode 100644 node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js rename node_modules/{es-get-iterator/node_modules/isarray => @rtsao/scc}/LICENSE (94%) create mode 100644 node_modules/@rtsao/scc/README.md create mode 100644 node_modules/@rtsao/scc/index.d.ts create mode 100644 node_modules/@rtsao/scc/index.js create mode 100644 node_modules/@rtsao/scc/index.js.flow create mode 100644 node_modules/@rtsao/scc/package.json delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/LICENSE delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/README.md delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/README.md delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/array.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/function.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/map.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/object.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/set.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/string.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.test.js delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/package.json delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/called-in-order.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/class-name.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/deprecated.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/every.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/function-name.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/global.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/index.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/array.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/function.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/index.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/map.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/object.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/set.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/string.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/type-of.d.ts delete mode 100644 node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/value-to-string.d.ts rename node_modules/{eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin => @sinonjs/samsam/node_modules/type-detect}/LICENSE (84%) create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/README.md create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/index.d.ts create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/index.js create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/index.ts create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/package.json create mode 100644 node_modules/@sinonjs/samsam/node_modules/type-detect/type-detect.js rename node_modules/{eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js => @typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js} (51%) create mode 100644 node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js.map create mode 100644 node_modules/array-buffer-byte-length/index.d.ts create mode 100644 node_modules/array-buffer-byte-length/tsconfig.json delete mode 100644 node_modules/array.prototype.findlastindex/index.mjs delete mode 100644 node_modules/array.prototype.findlastindex/test/index.mjs delete mode 100644 node_modules/available-typed-arrays/.eslintignore create mode 100644 node_modules/available-typed-arrays/index.d.ts create mode 100644 node_modules/available-typed-arrays/tsconfig.json create mode 100644 node_modules/data-view-buffer/.eslintrc create mode 100644 node_modules/data-view-buffer/.github/FUNDING.yml create mode 100644 node_modules/data-view-buffer/.nycrc create mode 100644 node_modules/data-view-buffer/CHANGELOG.md rename node_modules/{eslint-plugin-github/node_modules/brace-expansion => data-view-buffer}/LICENSE (94%) create mode 100644 node_modules/data-view-buffer/README.md create mode 100644 node_modules/data-view-buffer/index.d.ts create mode 100644 node_modules/data-view-buffer/index.js create mode 100644 node_modules/data-view-buffer/package.json create mode 100644 node_modules/data-view-buffer/test/index.js create mode 100644 node_modules/data-view-buffer/tsconfig.json create mode 100644 node_modules/data-view-byte-length/.eslintrc create mode 100644 node_modules/data-view-byte-length/.github/FUNDING.yml create mode 100644 node_modules/data-view-byte-length/.nycrc create mode 100644 node_modules/data-view-byte-length/CHANGELOG.md rename node_modules/{safe-array-concat/node_modules/isarray => data-view-byte-length}/LICENSE (94%) create mode 100644 node_modules/data-view-byte-length/README.md create mode 100644 node_modules/data-view-byte-length/index.d.ts create mode 100644 node_modules/data-view-byte-length/index.js create mode 100644 node_modules/data-view-byte-length/package.json create mode 100644 node_modules/data-view-byte-length/test/index.js create mode 100644 node_modules/data-view-byte-length/tsconfig.json create mode 100644 node_modules/data-view-byte-offset/.eslintrc create mode 100644 node_modules/data-view-byte-offset/.github/FUNDING.yml create mode 100644 node_modules/data-view-byte-offset/.nycrc create mode 100644 node_modules/data-view-byte-offset/CHANGELOG.md rename node_modules/{eslint-plugin-github/node_modules/@typescript-eslint/type-utils => data-view-byte-offset}/LICENSE (94%) create mode 100644 node_modules/data-view-byte-offset/README.md create mode 100644 node_modules/data-view-byte-offset/index.d.ts create mode 100644 node_modules/data-view-byte-offset/index.js create mode 100644 node_modules/data-view-byte-offset/package.json create mode 100644 node_modules/data-view-byte-offset/test/index.js create mode 100644 node_modules/data-view-byte-offset/tsconfig.json create mode 100644 node_modules/define-data-property/.eslintrc create mode 100644 node_modules/define-data-property/.github/FUNDING.yml create mode 100644 node_modules/define-data-property/.nycrc create mode 100644 node_modules/define-data-property/CHANGELOG.md create mode 100644 node_modules/define-data-property/LICENSE create mode 100644 node_modules/define-data-property/README.md create mode 100644 node_modules/define-data-property/index.d.ts create mode 100644 node_modules/define-data-property/index.js create mode 100644 node_modules/define-data-property/package.json create mode 100644 node_modules/define-data-property/test/index.js create mode 100644 node_modules/define-data-property/tsconfig.json create mode 100644 node_modules/diff/lib/patch/line-endings.js create mode 100644 node_modules/diff/lib/util/string.js create mode 100644 node_modules/es-abstract/2015/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2015/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2015/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2015/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2016/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2016/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2016/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2016/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2017/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2017/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2017/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2017/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2018/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2018/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2018/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2018/TimeZoneString.js create mode 100644 node_modules/es-abstract/2018/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2019/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2019/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2019/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2019/TimeZoneString.js create mode 100644 node_modules/es-abstract/2019/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2020/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2020/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2020/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2020/TimeZoneString.js create mode 100644 node_modules/es-abstract/2020/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2021/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2021/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2021/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2021/TimeZoneString.js create mode 100644 node_modules/es-abstract/2021/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2022/DefineMethodProperty.js create mode 100644 node_modules/es-abstract/2022/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2022/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2022/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2022/TimeZoneString.js create mode 100644 node_modules/es-abstract/2022/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2023/DefaultTimeZone.js create mode 100644 node_modules/es-abstract/2023/DefineMethodProperty.js create mode 100644 node_modules/es-abstract/2023/IntegerIndexedElementGet.js create mode 100644 node_modules/es-abstract/2023/IntegerIndexedElementSet.js create mode 100644 node_modules/es-abstract/2023/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2023/TimeZoneString.js create mode 100644 node_modules/es-abstract/2023/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2024/AddEntriesFromIterable.js create mode 100644 node_modules/es-abstract/2024/AddToKeptObjects.js create mode 100644 node_modules/es-abstract/2024/AddValueToKeyedGroup.js create mode 100644 node_modules/es-abstract/2024/AdvanceStringIndex.js create mode 100644 node_modules/es-abstract/2024/ApplyStringOrNumericBinaryOperator.js create mode 100644 node_modules/es-abstract/2024/ArrayBufferByteLength.js create mode 100644 node_modules/es-abstract/2024/ArrayBufferCopyAndDetach.js create mode 100644 node_modules/es-abstract/2024/ArrayCreate.js create mode 100644 node_modules/es-abstract/2024/ArraySetLength.js create mode 100644 node_modules/es-abstract/2024/ArraySpeciesCreate.js create mode 100644 node_modules/es-abstract/2024/AsyncFromSyncIteratorContinuation.js create mode 100644 node_modules/es-abstract/2024/AsyncIteratorClose.js create mode 100644 node_modules/es-abstract/2024/BigInt/add.js create mode 100644 node_modules/es-abstract/2024/BigInt/bitwiseAND.js create mode 100644 node_modules/es-abstract/2024/BigInt/bitwiseNOT.js create mode 100644 node_modules/es-abstract/2024/BigInt/bitwiseOR.js create mode 100644 node_modules/es-abstract/2024/BigInt/bitwiseXOR.js create mode 100644 node_modules/es-abstract/2024/BigInt/divide.js create mode 100644 node_modules/es-abstract/2024/BigInt/equal.js create mode 100644 node_modules/es-abstract/2024/BigInt/exponentiate.js create mode 100644 node_modules/es-abstract/2024/BigInt/index.js create mode 100644 node_modules/es-abstract/2024/BigInt/leftShift.js create mode 100644 node_modules/es-abstract/2024/BigInt/lessThan.js create mode 100644 node_modules/es-abstract/2024/BigInt/multiply.js create mode 100644 node_modules/es-abstract/2024/BigInt/remainder.js create mode 100644 node_modules/es-abstract/2024/BigInt/signedRightShift.js create mode 100644 node_modules/es-abstract/2024/BigInt/subtract.js create mode 100644 node_modules/es-abstract/2024/BigInt/toString.js create mode 100644 node_modules/es-abstract/2024/BigInt/unaryMinus.js create mode 100644 node_modules/es-abstract/2024/BigInt/unsignedRightShift.js create mode 100644 node_modules/es-abstract/2024/BigIntBitwiseOp.js create mode 100644 node_modules/es-abstract/2024/BinaryAnd.js create mode 100644 node_modules/es-abstract/2024/BinaryOr.js create mode 100644 node_modules/es-abstract/2024/BinaryXor.js create mode 100644 node_modules/es-abstract/2024/ByteListBitwiseOp.js create mode 100644 node_modules/es-abstract/2024/ByteListEqual.js create mode 100644 node_modules/es-abstract/2024/Call.js create mode 100644 node_modules/es-abstract/2024/CanBeHeldWeakly.js create mode 100644 node_modules/es-abstract/2024/CanonicalNumericIndexString.js create mode 100644 node_modules/es-abstract/2024/Canonicalize.js create mode 100644 node_modules/es-abstract/2024/CharacterRange.js create mode 100644 node_modules/es-abstract/2024/ClearKeptObjects.js create mode 100644 node_modules/es-abstract/2024/CloneArrayBuffer.js create mode 100644 node_modules/es-abstract/2024/CodePointAt.js create mode 100644 node_modules/es-abstract/2024/CodePointsToString.js create mode 100644 node_modules/es-abstract/2024/CompareArrayElements.js create mode 100644 node_modules/es-abstract/2024/CompareTypedArrayElements.js create mode 100644 node_modules/es-abstract/2024/CompletePropertyDescriptor.js create mode 100644 node_modules/es-abstract/2024/CompletionRecord.js create mode 100644 node_modules/es-abstract/2024/CopyDataProperties.js create mode 100644 node_modules/es-abstract/2024/CreateAsyncFromSyncIterator.js create mode 100644 node_modules/es-abstract/2024/CreateDataProperty.js create mode 100644 node_modules/es-abstract/2024/CreateDataPropertyOrThrow.js create mode 100644 node_modules/es-abstract/2024/CreateHTML.js create mode 100644 node_modules/es-abstract/2024/CreateIterResultObject.js create mode 100644 node_modules/es-abstract/2024/CreateListFromArrayLike.js create mode 100644 node_modules/es-abstract/2024/CreateNonEnumerableDataPropertyOrThrow.js create mode 100644 node_modules/es-abstract/2024/CreateRegExpStringIterator.js create mode 100644 node_modules/es-abstract/2024/DateFromTime.js create mode 100644 node_modules/es-abstract/2024/DateString.js create mode 100644 node_modules/es-abstract/2024/Day.js create mode 100644 node_modules/es-abstract/2024/DayFromYear.js create mode 100644 node_modules/es-abstract/2024/DayWithinYear.js create mode 100644 node_modules/es-abstract/2024/DaysInYear.js create mode 100644 node_modules/es-abstract/2024/DefineMethodProperty.js create mode 100644 node_modules/es-abstract/2024/DefinePropertyOrThrow.js create mode 100644 node_modules/es-abstract/2024/DeletePropertyOrThrow.js create mode 100644 node_modules/es-abstract/2024/DetachArrayBuffer.js create mode 100644 node_modules/es-abstract/2024/EnumerableOwnProperties.js create mode 100644 node_modules/es-abstract/2024/FindViaPredicate.js create mode 100644 node_modules/es-abstract/2024/FlattenIntoArray.js create mode 100644 node_modules/es-abstract/2024/FromPropertyDescriptor.js create mode 100644 node_modules/es-abstract/2024/Get.js create mode 100644 node_modules/es-abstract/2024/GetArrayBufferMaxByteLengthOption.js create mode 100644 node_modules/es-abstract/2024/GetGlobalObject.js create mode 100644 node_modules/es-abstract/2024/GetIterator.js create mode 100644 node_modules/es-abstract/2024/GetIteratorFromMethod.js create mode 100644 node_modules/es-abstract/2024/GetMatchIndexPair.js create mode 100644 node_modules/es-abstract/2024/GetMatchString.js create mode 100644 node_modules/es-abstract/2024/GetMethod.js create mode 100644 node_modules/es-abstract/2024/GetOwnPropertyKeys.js create mode 100644 node_modules/es-abstract/2024/GetPromiseResolve.js create mode 100644 node_modules/es-abstract/2024/GetPrototypeFromConstructor.js create mode 100644 node_modules/es-abstract/2024/GetStringIndex.js create mode 100644 node_modules/es-abstract/2024/GetSubstitution.js create mode 100644 node_modules/es-abstract/2024/GetV.js create mode 100644 node_modules/es-abstract/2024/GetValueFromBuffer.js create mode 100644 node_modules/es-abstract/2024/GetViewByteLength.js create mode 100644 node_modules/es-abstract/2024/GroupBy.js create mode 100644 node_modules/es-abstract/2024/HasEitherUnicodeFlag.js create mode 100644 node_modules/es-abstract/2024/HasOwnProperty.js create mode 100644 node_modules/es-abstract/2024/HasProperty.js create mode 100644 node_modules/es-abstract/2024/HourFromTime.js create mode 100644 node_modules/es-abstract/2024/InLeapYear.js create mode 100644 node_modules/es-abstract/2024/InstallErrorCause.js create mode 100644 node_modules/es-abstract/2024/InstanceofOperator.js create mode 100644 node_modules/es-abstract/2024/InternalizeJSONProperty.js create mode 100644 node_modules/es-abstract/2024/Invoke.js create mode 100644 node_modules/es-abstract/2024/IsAccessorDescriptor.js create mode 100644 node_modules/es-abstract/2024/IsArray.js create mode 100644 node_modules/es-abstract/2024/IsArrayBufferViewOutOfBounds.js create mode 100644 node_modules/es-abstract/2024/IsBigIntElementType.js create mode 100644 node_modules/es-abstract/2024/IsCallable.js create mode 100644 node_modules/es-abstract/2024/IsCompatiblePropertyDescriptor.js create mode 100644 node_modules/es-abstract/2024/IsConcatSpreadable.js create mode 100644 node_modules/es-abstract/2024/IsConstructor.js create mode 100644 node_modules/es-abstract/2024/IsDataDescriptor.js create mode 100644 node_modules/es-abstract/2024/IsDetachedBuffer.js create mode 100644 node_modules/es-abstract/2024/IsExtensible.js create mode 100644 node_modules/es-abstract/2024/IsFixedLengthArrayBuffer.js create mode 100644 node_modules/es-abstract/2024/IsGenericDescriptor.js create mode 100644 node_modules/es-abstract/2024/IsIntegralNumber.js create mode 100644 node_modules/es-abstract/2024/IsLessThan.js create mode 100644 node_modules/es-abstract/2024/IsLooselyEqual.js create mode 100644 node_modules/es-abstract/2024/IsNoTearConfiguration.js create mode 100644 node_modules/es-abstract/2024/IsPromise.js create mode 100644 node_modules/es-abstract/2024/IsPropertyKey.js create mode 100644 node_modules/es-abstract/2024/IsRegExp.js create mode 100644 node_modules/es-abstract/2024/IsSharedArrayBuffer.js create mode 100644 node_modules/es-abstract/2024/IsStrictlyEqual.js create mode 100644 node_modules/es-abstract/2024/IsStringWellFormedUnicode.js create mode 100644 node_modules/es-abstract/2024/IsTypedArrayOutOfBounds.js create mode 100644 node_modules/es-abstract/2024/IsUnclampedIntegerElementType.js create mode 100644 node_modules/es-abstract/2024/IsUnsignedElementType.js create mode 100644 node_modules/es-abstract/2024/IsValidIntegerIndex.js create mode 100644 node_modules/es-abstract/2024/IsViewOutOfBounds.js create mode 100644 node_modules/es-abstract/2024/IsWordChar.js create mode 100644 node_modules/es-abstract/2024/IteratorClose.js create mode 100644 node_modules/es-abstract/2024/IteratorComplete.js create mode 100644 node_modules/es-abstract/2024/IteratorNext.js create mode 100644 node_modules/es-abstract/2024/IteratorStep.js create mode 100644 node_modules/es-abstract/2024/IteratorStepValue.js create mode 100644 node_modules/es-abstract/2024/IteratorToList.js create mode 100644 node_modules/es-abstract/2024/IteratorValue.js create mode 100644 node_modules/es-abstract/2024/KeyForSymbol.js create mode 100644 node_modules/es-abstract/2024/LengthOfArrayLike.js create mode 100644 node_modules/es-abstract/2024/MakeDataViewWithBufferWitnessRecord.js create mode 100644 node_modules/es-abstract/2024/MakeDate.js create mode 100644 node_modules/es-abstract/2024/MakeDay.js create mode 100644 node_modules/es-abstract/2024/MakeFullYear.js create mode 100644 node_modules/es-abstract/2024/MakeMatchIndicesIndexPairArray.js create mode 100644 node_modules/es-abstract/2024/MakeTime.js create mode 100644 node_modules/es-abstract/2024/MakeTypedArrayWithBufferWitnessRecord.js create mode 100644 node_modules/es-abstract/2024/MinFromTime.js create mode 100644 node_modules/es-abstract/2024/MonthFromTime.js create mode 100644 node_modules/es-abstract/2024/NewPromiseCapability.js create mode 100644 node_modules/es-abstract/2024/NormalCompletion.js create mode 100644 node_modules/es-abstract/2024/Number/add.js create mode 100644 node_modules/es-abstract/2024/Number/bitwiseAND.js create mode 100644 node_modules/es-abstract/2024/Number/bitwiseNOT.js create mode 100644 node_modules/es-abstract/2024/Number/bitwiseOR.js create mode 100644 node_modules/es-abstract/2024/Number/bitwiseXOR.js create mode 100644 node_modules/es-abstract/2024/Number/divide.js create mode 100644 node_modules/es-abstract/2024/Number/equal.js create mode 100644 node_modules/es-abstract/2024/Number/exponentiate.js create mode 100644 node_modules/es-abstract/2024/Number/index.js create mode 100644 node_modules/es-abstract/2024/Number/leftShift.js create mode 100644 node_modules/es-abstract/2024/Number/lessThan.js create mode 100644 node_modules/es-abstract/2024/Number/multiply.js create mode 100644 node_modules/es-abstract/2024/Number/remainder.js create mode 100644 node_modules/es-abstract/2024/Number/sameValue.js create mode 100644 node_modules/es-abstract/2024/Number/sameValueZero.js create mode 100644 node_modules/es-abstract/2024/Number/signedRightShift.js create mode 100644 node_modules/es-abstract/2024/Number/subtract.js create mode 100644 node_modules/es-abstract/2024/Number/toString.js create mode 100644 node_modules/es-abstract/2024/Number/unaryMinus.js create mode 100644 node_modules/es-abstract/2024/Number/unsignedRightShift.js create mode 100644 node_modules/es-abstract/2024/NumberBitwiseOp.js create mode 100644 node_modules/es-abstract/2024/NumberToBigInt.js create mode 100644 node_modules/es-abstract/2024/NumericToRawBytes.js create mode 100644 node_modules/es-abstract/2024/ObjectDefineProperties.js create mode 100644 node_modules/es-abstract/2024/OrdinaryCreateFromConstructor.js create mode 100644 node_modules/es-abstract/2024/OrdinaryDefineOwnProperty.js create mode 100644 node_modules/es-abstract/2024/OrdinaryGetOwnProperty.js create mode 100644 node_modules/es-abstract/2024/OrdinaryGetPrototypeOf.js create mode 100644 node_modules/es-abstract/2024/OrdinaryHasInstance.js create mode 100644 node_modules/es-abstract/2024/OrdinaryHasProperty.js create mode 100644 node_modules/es-abstract/2024/OrdinaryObjectCreate.js create mode 100644 node_modules/es-abstract/2024/OrdinarySetPrototypeOf.js create mode 100644 node_modules/es-abstract/2024/OrdinaryToPrimitive.js create mode 100644 node_modules/es-abstract/2024/ParseHexOctet.js create mode 100644 node_modules/es-abstract/2024/PromiseResolve.js create mode 100644 node_modules/es-abstract/2024/QuoteJSONString.js create mode 100644 node_modules/es-abstract/2024/RawBytesToNumeric.js create mode 100644 node_modules/es-abstract/2024/RegExpCreate.js create mode 100644 node_modules/es-abstract/2024/RegExpExec.js create mode 100644 node_modules/es-abstract/2024/RegExpHasFlag.js create mode 100644 node_modules/es-abstract/2024/RequireObjectCoercible.js create mode 100644 node_modules/es-abstract/2024/SameValue.js create mode 100644 node_modules/es-abstract/2024/SameValueNonNumber.js create mode 100644 node_modules/es-abstract/2024/SameValueZero.js create mode 100644 node_modules/es-abstract/2024/SecFromTime.js create mode 100644 node_modules/es-abstract/2024/Set.js create mode 100644 node_modules/es-abstract/2024/SetFunctionLength.js create mode 100644 node_modules/es-abstract/2024/SetFunctionName.js create mode 100644 node_modules/es-abstract/2024/SetIntegrityLevel.js create mode 100644 node_modules/es-abstract/2024/SetTypedArrayFromArrayLike.js create mode 100644 node_modules/es-abstract/2024/SetTypedArrayFromTypedArray.js create mode 100644 node_modules/es-abstract/2024/SetValueInBuffer.js create mode 100644 node_modules/es-abstract/2024/SortIndexedProperties.js create mode 100644 node_modules/es-abstract/2024/SpeciesConstructor.js create mode 100644 node_modules/es-abstract/2024/StringCreate.js create mode 100644 node_modules/es-abstract/2024/StringGetOwnProperty.js create mode 100644 node_modules/es-abstract/2024/StringIndexOf.js create mode 100644 node_modules/es-abstract/2024/StringPad.js create mode 100644 node_modules/es-abstract/2024/StringPaddingBuiltinsImpl.js create mode 100644 node_modules/es-abstract/2024/StringToBigInt.js create mode 100644 node_modules/es-abstract/2024/StringToCodePoints.js create mode 100644 node_modules/es-abstract/2024/StringToNumber.js create mode 100644 node_modules/es-abstract/2024/SymbolDescriptiveString.js create mode 100644 node_modules/es-abstract/2024/SystemTimeZoneIdentifier.js create mode 100644 node_modules/es-abstract/2024/TestIntegrityLevel.js create mode 100644 node_modules/es-abstract/2024/ThisBigIntValue.js create mode 100644 node_modules/es-abstract/2024/ThisBooleanValue.js create mode 100644 node_modules/es-abstract/2024/ThisNumberValue.js create mode 100644 node_modules/es-abstract/2024/ThisStringValue.js create mode 100644 node_modules/es-abstract/2024/ThisSymbolValue.js create mode 100644 node_modules/es-abstract/2024/ThrowCompletion.js create mode 100644 node_modules/es-abstract/2024/TimeClip.js create mode 100644 node_modules/es-abstract/2024/TimeFromYear.js create mode 100644 node_modules/es-abstract/2024/TimeString.js create mode 100644 node_modules/es-abstract/2024/TimeWithinDay.js create mode 100644 node_modules/es-abstract/2024/TimeZoneString.js create mode 100644 node_modules/es-abstract/2024/ToBigInt.js create mode 100644 node_modules/es-abstract/2024/ToBigInt64.js create mode 100644 node_modules/es-abstract/2024/ToBigUint64.js create mode 100644 node_modules/es-abstract/2024/ToBoolean.js create mode 100644 node_modules/es-abstract/2024/ToDateString.js create mode 100644 node_modules/es-abstract/2024/ToIndex.js create mode 100644 node_modules/es-abstract/2024/ToInt16.js create mode 100644 node_modules/es-abstract/2024/ToInt32.js create mode 100644 node_modules/es-abstract/2024/ToInt8.js create mode 100644 node_modules/es-abstract/2024/ToIntegerOrInfinity.js create mode 100644 node_modules/es-abstract/2024/ToLength.js create mode 100644 node_modules/es-abstract/2024/ToNumber.js create mode 100644 node_modules/es-abstract/2024/ToNumeric.js create mode 100644 node_modules/es-abstract/2024/ToObject.js create mode 100644 node_modules/es-abstract/2024/ToPrimitive.js create mode 100644 node_modules/es-abstract/2024/ToPropertyDescriptor.js create mode 100644 node_modules/es-abstract/2024/ToPropertyKey.js create mode 100644 node_modules/es-abstract/2024/ToString.js create mode 100644 node_modules/es-abstract/2024/ToUint16.js create mode 100644 node_modules/es-abstract/2024/ToUint32.js create mode 100644 node_modules/es-abstract/2024/ToUint8.js create mode 100644 node_modules/es-abstract/2024/ToUint8Clamp.js create mode 100644 node_modules/es-abstract/2024/ToZeroPaddedDecimalString.js create mode 100644 node_modules/es-abstract/2024/TrimString.js create mode 100644 node_modules/es-abstract/2024/Type.js create mode 100644 node_modules/es-abstract/2024/TypedArrayByteLength.js create mode 100644 node_modules/es-abstract/2024/TypedArrayCreateFromConstructor.js create mode 100644 node_modules/es-abstract/2024/TypedArrayCreateSameType.js create mode 100644 node_modules/es-abstract/2024/TypedArrayElementSize.js create mode 100644 node_modules/es-abstract/2024/TypedArrayElementType.js create mode 100644 node_modules/es-abstract/2024/TypedArrayGetElement.js create mode 100644 node_modules/es-abstract/2024/TypedArrayLength.js create mode 100644 node_modules/es-abstract/2024/TypedArraySetElement.js create mode 100644 node_modules/es-abstract/2024/TypedArraySpeciesCreate.js create mode 100644 node_modules/es-abstract/2024/UTF16EncodeCodePoint.js create mode 100644 node_modules/es-abstract/2024/UTF16SurrogatePairToCodePoint.js create mode 100644 node_modules/es-abstract/2024/UnicodeEscape.js create mode 100644 node_modules/es-abstract/2024/ValidateAndApplyPropertyDescriptor.js create mode 100644 node_modules/es-abstract/2024/ValidateAtomicAccess.js create mode 100644 node_modules/es-abstract/2024/ValidateAtomicAccessOnIntegerTypedArray.js create mode 100644 node_modules/es-abstract/2024/ValidateIntegerTypedArray.js create mode 100644 node_modules/es-abstract/2024/ValidateTypedArray.js create mode 100644 node_modules/es-abstract/2024/WeakRefDeref.js create mode 100644 node_modules/es-abstract/2024/WeekDay.js create mode 100644 node_modules/es-abstract/2024/WordCharacters.js create mode 100644 node_modules/es-abstract/2024/YearFromTime.js create mode 100644 node_modules/es-abstract/2024/abs.js create mode 100644 node_modules/es-abstract/2024/clamp.js create mode 100644 node_modules/es-abstract/2024/floor.js create mode 100644 node_modules/es-abstract/2024/max.js create mode 100644 node_modules/es-abstract/2024/min.js create mode 100644 node_modules/es-abstract/2024/modulo.js create mode 100644 node_modules/es-abstract/2024/msFromTime.js create mode 100644 node_modules/es-abstract/2024/substring.js create mode 100644 node_modules/es-abstract/2024/tables/typed-array-objects.js create mode 100644 node_modules/es-abstract/2024/truncate.js create mode 100644 node_modules/es-abstract/es2024.js delete mode 100644 node_modules/es-abstract/helpers/isMatchRecord.js delete mode 100644 node_modules/es-abstract/helpers/isPropertyDescriptor.js create mode 100644 node_modules/es-abstract/helpers/isStringOrUndefined.js create mode 100644 node_modules/es-abstract/helpers/records/async-generator-request-record.js create mode 100644 node_modules/es-abstract/helpers/records/data-view-with-buffer-witness-record.js create mode 100644 node_modules/es-abstract/helpers/records/iterator-record.js create mode 100644 node_modules/es-abstract/helpers/records/match-record.js create mode 100644 node_modules/es-abstract/helpers/records/promise-capability-record.js create mode 100644 node_modules/es-abstract/helpers/records/property-descriptor.js create mode 100644 node_modules/es-abstract/helpers/records/regexp-record.js create mode 100644 node_modules/es-abstract/helpers/records/typed-array-with-buffer-witness-record.js rename node_modules/es-abstract/helpers/{typedArrayContructors.js => typedArrayConstructors.js} (100%) create mode 100644 node_modules/es-abstract/operations/2024.js create mode 100644 node_modules/es-define-property/.eslintrc create mode 100644 node_modules/es-define-property/.github/FUNDING.yml create mode 100644 node_modules/es-define-property/.nycrc create mode 100644 node_modules/es-define-property/CHANGELOG.md create mode 100644 node_modules/es-define-property/LICENSE create mode 100644 node_modules/es-define-property/README.md create mode 100644 node_modules/es-define-property/index.d.ts create mode 100644 node_modules/es-define-property/index.js create mode 100644 node_modules/es-define-property/package.json create mode 100644 node_modules/es-define-property/test/index.js create mode 100644 node_modules/es-define-property/tsconfig.json create mode 100644 node_modules/es-errors/.eslintrc create mode 100644 node_modules/es-errors/.github/FUNDING.yml create mode 100644 node_modules/es-errors/CHANGELOG.md create mode 100644 node_modules/es-errors/LICENSE create mode 100644 node_modules/es-errors/README.md create mode 100644 node_modules/es-errors/eval.d.ts create mode 100644 node_modules/es-errors/eval.js create mode 100644 node_modules/es-errors/index.d.ts create mode 100644 node_modules/es-errors/index.js create mode 100644 node_modules/es-errors/package.json create mode 100644 node_modules/es-errors/range.d.ts create mode 100644 node_modules/es-errors/range.js create mode 100644 node_modules/es-errors/ref.d.ts create mode 100644 node_modules/es-errors/ref.js create mode 100644 node_modules/es-errors/syntax.d.ts create mode 100644 node_modules/es-errors/syntax.js create mode 100644 node_modules/es-errors/test/index.js create mode 100644 node_modules/es-errors/tsconfig.json create mode 100644 node_modules/es-errors/type.d.ts create mode 100644 node_modules/es-errors/type.js create mode 100644 node_modules/es-errors/uri.d.ts create mode 100644 node_modules/es-errors/uri.js delete mode 100644 node_modules/es-get-iterator/node_modules/isarray/README.md delete mode 100644 node_modules/es-get-iterator/node_modules/isarray/index.js delete mode 100644 node_modules/es-get-iterator/node_modules/isarray/package.json create mode 100644 node_modules/es-object-atoms/.eslintrc create mode 100644 node_modules/es-object-atoms/.github/FUNDING.yml create mode 100644 node_modules/es-object-atoms/CHANGELOG.md create mode 100644 node_modules/es-object-atoms/LICENSE create mode 100644 node_modules/es-object-atoms/README.md create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.d.ts create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.js create mode 100644 node_modules/es-object-atoms/ToObject.d.ts create mode 100644 node_modules/es-object-atoms/ToObject.js create mode 100644 node_modules/es-object-atoms/index.d.ts create mode 100644 node_modules/es-object-atoms/index.js create mode 100644 node_modules/es-object-atoms/package.json create mode 100644 node_modules/es-object-atoms/test/index.js create mode 100644 node_modules/es-object-atoms/tsconfig.json create mode 100644 node_modules/es-set-tostringtag/index.d.ts create mode 100644 node_modules/es-set-tostringtag/tsconfig.json create mode 100644 node_modules/eslint-module-utils/contextCompat.d.ts create mode 100644 node_modules/eslint-module-utils/contextCompat.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/disable-type-checked.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/disable-type-checked.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended-raw.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended-raw.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/eslint-recommended.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-type-checked-only.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-type-checked-only.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-type-checked.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended-type-checked.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/recommended.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict-type-checked-only.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict-type-checked-only.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict-type-checked.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict-type-checked.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/strict.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic-type-checked-only.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic-type-checked-only.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic-type-checked.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic-type-checked.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/configs/stylistic.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/adjacent-overload-signatures.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/array-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/await-thenable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-ts-comment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-tslint-comment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/ban-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/block-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/block-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/brace-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-dangle.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/comma-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-generic-constructors.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-generic-constructors.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-indexed-object-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-return.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-return.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-assertions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-definitions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-imports.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/default-param-last.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/dot-notation.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/enum-utils/shared.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/enum-utils/shared.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-function-return-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-member-accessibility.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/explicit-module-boundary-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/func-call-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/indent.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/init-declarations.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/key-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/key-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/keyword-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-around-comment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-around-comment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/lines-between-class-members.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/max-params.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/max-params.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-delimiter-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/member-ordering.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/method-signature-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/enums.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/format.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/parse-options.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/schema.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/shared.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention-utils/validator.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/naming-convention.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-constructor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-delete.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-array-delete.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-base-to-string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-void-expression.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dupe-class-members.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-enum-values.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-enum-values.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-type-constituents.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-duplicate-type-constituents.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-dynamic-delete.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-function.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-interface.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-object-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-empty-object-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-explicit-any.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-non-null-assertion.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-parens.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extra-semi.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-extraneous-class.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-floating-promises.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-for-in-array.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-implied-eval.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-import-type-side-effects.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-import-type-side-effects.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-inferrable-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-this.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-invalid-void-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loop-func.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-loss-of-precision.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-magic-numbers.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-meaningless-void-operator.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-meaningless-void-operator.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-new.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-misused-promises.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-mixed-enums.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-mixed-enums.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-namespace.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-nullish-coalescing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-nullish-coalescing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-asserted-optional-chain.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-non-null-assertion.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redeclare.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redundant-type-constituents.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-redundant-type-constituents.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-require-imports.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-restricted-imports.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-restricted-imports.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-shadow.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-this-alias.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-throw-literal.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-type-alias.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-boolean-literal-compare.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-condition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-parameter-property-assignment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-parameter-property-assignment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-qualifier.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-template-expression.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-template-expression.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-arguments.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-assertion.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-constraint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-parameters.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unnecessary-type-parameters.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-argument.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-argument.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-assignment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-declaration-merging.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-declaration-merging.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-enum-comparison.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-enum-comparison.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-function-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-function-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-member-access.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-return.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-unary-minus.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-unary-minus.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-expressions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unused-vars.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-use-before-define.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-constructor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-empty-export.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-empty-export.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-template-literals.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-useless-template-literals.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-var-requires.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-wrapper-object-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-wrapper-object-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/non-nullable-type-assertion-style.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/object-curly-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/object-curly-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/only-throw-error.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/only-throw-error.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/padding-line-between-statements.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/padding-line-between-statements.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/parameter-properties.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/parameter-properties.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-as-const.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-destructuring.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-destructuring.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-enum-initializers.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-find.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-find.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-for-of.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-function-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-includes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-literal-enum-member.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-namespace-keyword.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-nullish-coalescing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/analyzeChain.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/analyzeChain.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/compareNodes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/compareNodes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-optional-chain.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-promise-reject-errors.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-promise-reject-errors.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly-parameter-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-readonly.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-reduce-type-parameter.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-return-this-type.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-return-this-type.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-string-starts-ends-with.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-ts-expect-error.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/promise-function-async.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/quotes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-array-sort-compare.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/require-await.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-plus-operands.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/restrict-template-expressions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/return-await.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/semi.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/sort-type-constituents.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/sort-type-constituents.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-blocks.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-blocks.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-before-function-paren.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/space-infix-ops.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/strict-boolean-expressions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/switch-exhaustiveness-check.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/triple-slash-reference.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/type-annotation-spacing.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/typedef.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unbound-method.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/unified-signatures.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/use-unknown-in-catch-callback-variable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/rules/use-unknown-in-catch-callback-variable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/astUtils.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/collectUnusedVariables.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/createRule.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/escapeRegExp.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/escapeRegExp.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/explicitReturnTypeUtils.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getESLintCoreRule.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getESLintCoreRule.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getForStatementHeadLoc.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getForStatementHeadLoc.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getFunctionHeadLoc.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getFunctionHeadLoc.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getMemberHeadLoc.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getMemberHeadLoc.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getOperatorPrecedence.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getOperatorPrecedence.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getStaticStringValue.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getStaticStringValue.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getStringLength.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getStringLength.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getTextWithParentheses.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getTextWithParentheses.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getThisExpression.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getThisExpression.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getWrappedCode.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getWrappedCode.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getWrappingFixer.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/getWrappingFixer.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isAssignee.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isAssignee.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isNodeEqual.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isNodeEqual.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isNullLiteral.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isNullLiteral.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isUndefinedIdentifier.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/isUndefinedIdentifier.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/objectIterators.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/scopeUtils.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/scopeUtils.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/dist/util/types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/TEMPLATE.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/adjacent-overload-signatures.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/array-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/await-thenable.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-ts-comment.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-tslint-comment.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/ban-types.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/block-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/brace-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/camelcase.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/class-literal-property-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/class-methods-use-this.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-dangle.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/comma-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-generic-constructors.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-indexed-object-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-return.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-assertions.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-definitions.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-exports.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/consistent-type-imports.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/default-param-last.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/dot-notation.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-function-return-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-member-accessibility.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/explicit-module-boundary-types.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/func-call-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/indent.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/init-declarations.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/key-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/keyword-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/lines-around-comment.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/lines-between-class-members.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/max-params.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-delimiter-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/member-ordering.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/method-signature-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/naming-convention.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-array-constructor.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-array-delete.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-base-to-string.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-void-expression.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dupe-class-members.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-enum-values.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-imports.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-duplicate-type-constituents.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-dynamic-delete.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-function.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-interface.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-empty-object-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-explicit-any.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-non-null-assertion.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-parens.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extra-semi.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-extraneous-class.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-for-in-array.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-implied-eval.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-import-type-side-effects.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-this.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-invalid-void-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loop-func.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-loss-of-precision.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-magic-numbers.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-meaningless-void-operator.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-new.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-misused-promises.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-mixed-enums.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-namespace.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-asserted-nullish-coalescing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-asserted-optional-chain.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-non-null-assertion.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-parameter-properties.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-redeclare.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-redundant-type-constituents.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-require-imports.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-restricted-imports.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-shadow.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-this-alias.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-throw-literal.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-type-alias.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-condition.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-parameter-property-assignment.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-qualifier.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-template-expression.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-arguments.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-assertion.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-constraint.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-parameters.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-argument.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-assignment.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-declaration-merging.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-enum-comparison.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-function-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-member-access.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-return.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-unary-minus.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-expressions.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unused-vars.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-use-before-define.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-constructor.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-empty-export.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-useless-template-literals.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-var-requires.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-wrapper-object-types.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/non-nullable-type-assertion-style.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/object-curly-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/only-throw-error.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/padding-line-between-statements.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/parameter-properties.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-as-const.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-destructuring.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-enum-initializers.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-find.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-for-of.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-function-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-includes.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-literal-enum-member.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-namespace-keyword.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-nullish-coalescing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-optional-chain.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-promise-reject-errors.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly-parameter-types.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-readonly.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-reduce-type-parameter.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-regexp-exec.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-return-this-type.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-string-starts-ends-with.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/prefer-ts-expect-error.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/promise-function-async.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/quotes.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-array-sort-compare.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/require-await.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-plus-operands.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/restrict-template-expressions.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/return-await.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/semi.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/sort-type-constituents.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/sort-type-union-intersection-members.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-before-blocks.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-before-function-paren.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/space-infix-ops.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/triple-slash-reference.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/type-annotation-spacing.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/typedef.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unbound-method.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/unified-signatures.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/docs/rules/use-unknown-in-catch-callback-variable.mdx delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/rules.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/parser.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/parser.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/parser.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/dist/parser.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ID.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ID.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ID.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/analyze.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/analyze.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/assert.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/assert.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/assert.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/CatchClauseDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ClassNameDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionBase.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/DefinitionType.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/FunctionNameDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImplicitGlobalVariableDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ImportBindingDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/ParameterDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumMemberDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSEnumNameDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TSModuleNameDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/TypeDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/VariableDefinition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/base-config.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/base-config.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/base-config.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/base-config.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.legacy.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.legacy.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.legacy.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/decorators.legacy.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.asynciterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.asynciterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.asynciterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.asynciterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.collection.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.core.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.generator.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.iterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.promise.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.proxy.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.reflect.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2015.symbol.wellknown.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.array.include.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2016.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.date.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.date.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.date.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.date.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.object.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.sharedmemory.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2017.typedarrays.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asyncgenerator.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.asynciterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.promise.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2018.regexp.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.array.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.object.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.symbol.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.bigint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.date.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.date.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.date.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.date.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.number.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.number.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.number.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.number.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.promise.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.sharedmemory.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2020.symbol.wellknown.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.promise.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.promise.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.promise.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.promise.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.weakref.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.weakref.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.weakref.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2021.weakref.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.array.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.array.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.array.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.array.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.error.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.error.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.error.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.error.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.object.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.object.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.object.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.object.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.regexp.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.regexp.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.regexp.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.regexp.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.sharedmemory.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.sharedmemory.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.sharedmemory.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.sharedmemory.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2022.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.array.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.array.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.array.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.array.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.collection.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.collection.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.collection.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.collection.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es2023.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es5.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es6.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/es7.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.array.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.asynciterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.bigint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.collection.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.collection.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.collection.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.collection.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.decorators.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.decorators.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.decorators.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.decorators.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.disposable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.disposable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.disposable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.disposable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.full.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.intl.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.object.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.object.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.object.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.object.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.promise.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.regexp.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.regexp.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.regexp.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.regexp.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.string.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.symbol.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/esnext.weakref.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/lib.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/scripthost.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.asynciterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.asynciterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.asynciterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.asynciterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.importscripts.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/ImportVisitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/TypeVisitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/Visitor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/VisitorBase.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/BlockScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/CatchScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassFieldInitializerScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassFieldInitializerScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassFieldInitializerScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassFieldInitializerScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassStaticBlockScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassStaticBlockScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassStaticBlockScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ClassStaticBlockScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ConditionalTypeScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ForScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionExpressionNameScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/FunctionTypeScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/GlobalScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/MappedTypeScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ModuleScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeType.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/SwitchScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSEnumScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TSModuleScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/TypeScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/WithScope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ESLintScopeVariable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/ImplicitLibVariable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/Variable.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/VariableBase.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/dist/variable/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/TypeOrValueSpecifier.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/TypeOrValueSpecifier.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/TypeOrValueSpecifier.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/TypeOrValueSpecifier.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/builtinSymbolLikes.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/builtinSymbolLikes.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/builtinSymbolLikes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/builtinSymbolLikes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/containsAllTypesByName.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/containsAllTypesByName.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/containsAllTypesByName.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/containsAllTypesByName.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getConstrainedTypeAtLocation.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getConstrainedTypeAtLocation.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getConstrainedTypeAtLocation.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getConstrainedTypeAtLocation.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getContextualType.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getContextualType.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getContextualType.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getContextualType.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getDeclaration.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getDeclaration.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getDeclaration.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getDeclaration.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getSourceFileOfNode.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getSourceFileOfNode.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getSourceFileOfNode.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getSourceFileOfNode.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTokenAtPosition.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTokenAtPosition.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTokenAtPosition.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTokenAtPosition.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeArguments.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeArguments.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeArguments.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeArguments.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeName.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeName.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeName.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/getTypeName.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isSymbolFromDefaultLibrary.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isSymbolFromDefaultLibrary.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isSymbolFromDefaultLibrary.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isSymbolFromDefaultLibrary.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isTypeReadonly.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isTypeReadonly.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isTypeReadonly.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isTypeReadonly.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isUnsafeAssignment.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isUnsafeAssignment.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isUnsafeAssignment.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/isUnsafeAssignment.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/predicates.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/predicates.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/predicates.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/predicates.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/propertyTypes.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/propertyTypes.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/propertyTypes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/propertyTypes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/requiresQuoting.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/requiresQuoting.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/requiresQuoting.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/requiresQuoting.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/typeFlagUtils.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/typeFlagUtils.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/typeFlagUtils.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/dist/typeFlagUtils.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/lib.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/lib.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/lib.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/lib.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/parser-options.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/parser-options.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/parser-options.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/parser-options.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/ts-estree.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/dist/ts-estree.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ast-converter.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/clear-caches.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/clear-caches.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/clear-caches.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/clear-caches.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert-comments.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/WatchCompilerHostOfConfigFile.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createDefaultProgram.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createIsolatedProgram.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectProgram.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectService.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectService.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectService.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createProjectService.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createSourceFile.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/describeFilePath.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/describeFilePath.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/describeFilePath.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/describeFilePath.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getScriptKind.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getScriptKind.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getScriptKind.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getScriptKind.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getWatchProgramsForProjects.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getWatchProgramsForProjects.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getWatchProgramsForProjects.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getWatchProgramsForProjects.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/useProvidedPrograms.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/useProvidedPrograms.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/useProvidedPrograms.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/useProvidedPrograms.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/validateDefaultProjectForFilesGlob.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/validateDefaultProjectForFilesGlob.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/validateDefaultProjectForFilesGlob.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/create-program/validateDefaultProjectForFilesGlob.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/createParserServices.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/createParserServices.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/createParserServices.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/createParserServices.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/getModifiers.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/getModifiers.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/getModifiers.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/getModifiers.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/jsx/xhtml-entities.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/jsx/xhtml-entities.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/jsx/xhtml-entities.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/jsx/xhtml-entities.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/ExpiringCache.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/ExpiringCache.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/ExpiringCache.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/ExpiringCache.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/createParseSettings.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/getProjectConfigFiles.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/getProjectConfigFiles.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/getProjectConfigFiles.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/getProjectConfigFiles.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/inferSingleRun.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/inferSingleRun.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/inferSingleRun.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/inferSingleRun.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/resolveProjectList.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/resolveProjectList.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/resolveProjectList.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/resolveProjectList.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/parser.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/semantic-or-syntactic-errors.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/source-files.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/source-files.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/source-files.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/source-files.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/use-at-your-own-risk.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/use-at-your-own-risk.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/use-at-your-own-risk.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/use-at-your-own-risk.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/useProgramFromProjectService.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/useProgramFromProjectService.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/useProgramFromProjectService.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/useProgramFromProjectService.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/version-check.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/withoutProjectParserOptions.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/withoutProjectParserOptions.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/withoutProjectParserOptions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/dist/withoutProjectParserOptions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/PatternMatcher.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/PatternMatcher.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/PatternMatcher.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/ReferenceTracker.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/ReferenceTracker.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/ReferenceTracker.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/astUtilities.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/astUtilities.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/astUtilities.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/astUtilities.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/predicates.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/predicates.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/predicates.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/predicates.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/scopeAnalysis.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/scopeAnalysis.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/scopeAnalysis.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/helpers.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/helpers.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/helpers.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/helpers.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/misc.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/misc.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/misc.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/misc.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/predicates.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/predicates.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/predicates.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ast-utils/predicates.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/InferTypesFromRule.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/InferTypesFromRule.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/InferTypesFromRule.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/InferTypesFromRule.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/RuleCreator.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/RuleCreator.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/RuleCreator.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/RuleCreator.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/applyDefault.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/applyDefault.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/applyDefault.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/applyDefault.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/context.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/context.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/context.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/context.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/deepMerge.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/deepMerge.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/deepMerge.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/deepMerge.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/getParserServices.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/getParserServices.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/getParserServices.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/getParserServices.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/nullThrows.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/nullThrows.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/nullThrows.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/nullThrows.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/parserSeemsToBeTSESLint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/parserSeemsToBeTSESLint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/parserSeemsToBeTSESLint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/eslint-utils/parserSeemsToBeTSESLint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/json-schema.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/json-schema.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/json-schema.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/json-schema.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/AST.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/AST.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/AST.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/AST.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Config.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Config.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Config.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Config.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ESLint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ESLint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ESLint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ESLint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Linter.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Linter.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Linter.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Linter.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Parser.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Parser.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Parser.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Parser.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ParserOptions.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ParserOptions.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ParserOptions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/ParserOptions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Processor.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Processor.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Processor.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Processor.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/RuleTester.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/RuleTester.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/RuleTester.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/RuleTester.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Scope.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Scope.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Scope.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/Scope.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/SourceCode.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/SourceCode.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/SourceCode.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/SourceCode.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/ESLintShared.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/ESLintShared.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/ESLintShared.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/ESLintShared.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/FlatESLint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/FlatESLint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/FlatESLint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/FlatESLint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/LegacyESLint.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/LegacyESLint.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/LegacyESLint.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/LegacyESLint.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-estree.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-estree.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-estree.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-estree.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/isArray.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/isArray.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/isArray.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/dist/ts-utils/isArray.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/brace-expansion/.github/FUNDING.yml delete mode 100644 node_modules/eslint-plugin-github/node_modules/brace-expansion/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/brace-expansion/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/brace-expansion/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/LICENSE delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/README.md delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/ast.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/ast.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/ast.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/ast.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/brace-expressions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/brace-expressions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/escape.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/escape.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/escape.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/escape.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/unescape.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/unescape.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/unescape.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/commonjs/unescape.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/assert-valid-pattern.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/ast.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/ast.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/ast.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/ast.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/brace-expressions.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/brace-expressions.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/brace-expressions.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/escape.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/escape.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/escape.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/escape.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/index.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/index.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/index.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/index.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/package.json delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/unescape.d.ts delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/unescape.d.ts.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/unescape.js delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/dist/esm/unescape.js.map delete mode 100644 node_modules/eslint-plugin-github/node_modules/minimatch/package.json delete mode 100644 node_modules/eslint-plugin-import/CONTRIBUTING.md delete mode 100644 node_modules/eslint-plugin-import/RELEASE.md create mode 100644 node_modules/eslint-plugin-import/config/flat/errors.js create mode 100644 node_modules/eslint-plugin-import/config/flat/react.js create mode 100644 node_modules/eslint-plugin-import/config/flat/recommended.js create mode 100644 node_modules/eslint-plugin-import/config/flat/warnings.js delete mode 100644 node_modules/eslint-plugin-import/lib/ExportMap.js create mode 100644 node_modules/eslint-plugin-import/lib/core/fsWalk.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/builder.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/childContext.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/doc.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/index.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/namespace.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/remotePath.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/specifier.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/typescript.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/visitor.js create mode 100644 node_modules/eslint-plugin-import/lib/scc.js delete mode 100644 node_modules/function.prototype.name/.eslintignore delete mode 100644 node_modules/get-symbol-description/.eslintignore create mode 100644 node_modules/has-proto/index.d.ts create mode 100644 node_modules/has-proto/tsconfig.json create mode 100644 node_modules/has-tostringtag/.nycrc create mode 100644 node_modules/has-tostringtag/index.d.ts create mode 100644 node_modules/has-tostringtag/shams.d.ts create mode 100644 node_modules/has-tostringtag/tsconfig.json delete mode 100644 node_modules/hasown/index.d.ts.map delete mode 100644 node_modules/internal-slot/.eslintignore create mode 100644 node_modules/is-array-buffer/index.d.ts create mode 100644 node_modules/is-array-buffer/tsconfig.json create mode 100644 node_modules/is-data-view/.editorconfig create mode 100644 node_modules/is-data-view/.eslintrc create mode 100644 node_modules/is-data-view/.github/FUNDING.yml create mode 100644 node_modules/is-data-view/.nycrc create mode 100644 node_modules/is-data-view/CHANGELOG.md create mode 100644 node_modules/is-data-view/LICENSE create mode 100644 node_modules/is-data-view/README.md create mode 100644 node_modules/is-data-view/index.d.ts create mode 100644 node_modules/is-data-view/index.js create mode 100644 node_modules/is-data-view/package.json create mode 100644 node_modules/is-data-view/test/index.js create mode 100644 node_modules/is-data-view/tsconfig.json delete mode 100644 node_modules/is-negative-zero/.eslintignore create mode 100644 node_modules/is-negative-zero/index.d.ts create mode 100644 node_modules/is-negative-zero/tsconfig.json delete mode 100644 node_modules/is-shared-array-buffer/.eslintignore create mode 100644 node_modules/is-shared-array-buffer/index.d.ts create mode 100644 node_modules/is-shared-array-buffer/tsconfig.json create mode 100644 node_modules/is-typed-array/index.d.ts create mode 100644 node_modules/is-typed-array/tsconfig.json rename node_modules/{deep-equal/node_modules => }/isarray/LICENSE (100%) rename node_modules/{deep-equal/node_modules => }/isarray/README.md (100%) rename node_modules/{deep-equal/node_modules => }/isarray/index.js (100%) rename node_modules/{deep-equal/node_modules => }/isarray/package.json (100%) create mode 100644 node_modules/object-inspect/test/global.js delete mode 100644 node_modules/object.assign/test.html delete mode 100644 node_modules/object.groupby/aos/AddValueToKeyedGroup.js delete mode 100644 node_modules/object.groupby/aos/GroupBy.js delete mode 100644 node_modules/path-to-regexp/dist.es2015/index.js delete mode 100644 node_modules/path-to-regexp/dist.es2015/index.js.map create mode 100644 node_modules/possible-typed-array-names/.eslintrc create mode 100644 node_modules/possible-typed-array-names/.github/FUNDING.yml create mode 100644 node_modules/possible-typed-array-names/CHANGELOG.md create mode 100644 node_modules/possible-typed-array-names/LICENSE create mode 100644 node_modules/possible-typed-array-names/README.md create mode 100644 node_modules/possible-typed-array-names/index.d.ts create mode 100644 node_modules/possible-typed-array-names/index.js create mode 100644 node_modules/possible-typed-array-names/package.json create mode 100644 node_modules/possible-typed-array-names/test/index.js create mode 100644 node_modules/possible-typed-array-names/tsconfig.json create mode 100644 node_modules/safe-array-concat/index.d.ts delete mode 100644 node_modules/safe-array-concat/node_modules/isarray/README.md delete mode 100644 node_modules/safe-array-concat/node_modules/isarray/index.js delete mode 100644 node_modules/safe-array-concat/node_modules/isarray/package.json create mode 100644 node_modules/safe-array-concat/tsconfig.json create mode 100644 node_modules/safe-regex-test/.nycrc create mode 100644 node_modules/set-function-length/.eslintrc create mode 100644 node_modules/set-function-length/.github/FUNDING.yml create mode 100644 node_modules/set-function-length/.nycrc create mode 100644 node_modules/set-function-length/CHANGELOG.md create mode 100644 node_modules/set-function-length/LICENSE create mode 100644 node_modules/set-function-length/README.md create mode 100644 node_modules/set-function-length/env.d.ts create mode 100644 node_modules/set-function-length/env.js create mode 100644 node_modules/set-function-length/index.d.ts create mode 100644 node_modules/set-function-length/index.js create mode 100644 node_modules/set-function-length/package.json create mode 100644 node_modules/set-function-length/tsconfig.json create mode 100644 node_modules/set-function-name/.eslintrc create mode 100644 node_modules/set-function-name/.github/FUNDING.yml create mode 100644 node_modules/set-function-name/CHANGELOG.md create mode 100644 node_modules/set-function-name/LICENSE create mode 100644 node_modules/set-function-name/README.md create mode 100644 node_modules/set-function-name/index.d.ts create mode 100644 node_modules/set-function-name/index.js create mode 100644 node_modules/set-function-name/package.json create mode 100644 node_modules/set-function-name/tsconfig.json create mode 100644 node_modules/typed-array-buffer/index.d.ts create mode 100644 node_modules/typed-array-buffer/tsconfig.json create mode 100644 node_modules/typed-array-byte-length/index.d.ts create mode 100644 node_modules/typed-array-byte-length/tsconfig.json create mode 100644 node_modules/typed-array-byte-offset/index.d.ts create mode 100644 node_modules/typed-array-byte-offset/tsconfig.json create mode 100644 node_modules/typed-array-length/index.d.ts create mode 100644 node_modules/typed-array-length/tsconfig.json create mode 100644 node_modules/typescript/lib/lib.esnext.iterator.d.ts create mode 100644 node_modules/which-typed-array/index.d.ts create mode 100644 node_modules/which-typed-array/tsconfig.json diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 2a7fc585ec..4783d859ea 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -455,9 +455,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.9.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz", - "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==", + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -469,11 +469,13 @@ "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -494,9 +496,11 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@microsoft/eslint-formatter-sarif": { "version": "3.1.0", @@ -799,48 +803,59 @@ "dev": true, "license": "0BSD" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "11.2.2", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.2.tgz", + "integrity": "sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.0", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", + "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=4" } }, "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true }, "node_modules/@types/adm-zip": { "version": "0.5.5", @@ -940,16 +955,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz", - "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", + "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/type-utils": "8.4.0", - "@typescript-eslint/utils": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/type-utils": "8.6.0", + "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -973,15 +988,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz", - "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", + "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4" }, "engines": { @@ -1001,13 +1016,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz", - "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", + "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0" + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1018,13 +1033,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz", - "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", + "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/utils": "8.4.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/utils": "8.6.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1042,9 +1057,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz", - "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", + "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1055,13 +1070,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz", - "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", + "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1107,15 +1122,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz", - "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", + "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0" + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1129,12 +1144,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz", - "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", + "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/types": "8.6.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1270,12 +1285,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1290,14 +1309,16 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -1315,15 +1336,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1367,15 +1390,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -1548,9 +1574,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1678,12 +1708,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2007,6 +2044,57 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-time": { "version": "3.1.0", "dev": true, @@ -2062,11 +2150,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -2104,6 +2187,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "dev": true, @@ -2116,10 +2216,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -2208,9 +2310,10 @@ } }, "node_modules/diff": { - "version": "5.2.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2276,49 +2379,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -2327,6 +2438,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "dev": true, @@ -2346,30 +2478,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT" + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -2405,15 +2546,16 @@ } }, "node_modules/eslint": { - "version": "8.57.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2523,9 +2665,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz", - "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", + "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -2579,254 +2721,46 @@ "node_modules/eslint-plugin-filenames": { "version": "1.3.2", "dev": true, - "license": "MIT", - "dependencies": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.upperfirst": "4.3.1" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/eslint-plugin-github": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@github/browserslist-config": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", - "aria-query": "^5.3.0", - "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.3.3", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-no-only-tests": "^3.0.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-rule-documentation": ">=1.0.0", - "jsx-ast-utils": "^3.3.2", - "prettier": "^3.0.0", - "svg-element-attributes": "^1.3.1" - }, - "bin": { - "eslint-ignore-errors": "bin/eslint-ignore-errors.js" - }, - "peerDependencies": { - "eslint": "^8.0.1" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.upperfirst": "4.3.1" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/eslint-plugin-github/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/eslint-plugin-github": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-5.0.2.tgz", + "integrity": "sha512-nMdzWJQ5CimjQDY6SFeJ0KIXuNFf0dgDWEd4eP3UWfuTuP/dXcZJDg7MQRvAFt743T1zUi4+/HdOihfu8xJkLA==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@github/browserslist-config": "^1.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "aria-query": "^5.3.0", + "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.3.3", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-i18n-text": "^1.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-only-tests": "^3.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-rule-documentation": ">=1.0.0", + "jsx-ast-utils": "^3.3.2", + "prettier": "^3.0.0", + "svg-element-attributes": "^1.3.1" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "eslint-ignore-errors": "bin/eslint-ignore-errors.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "eslint": "^8.0.1" } }, "node_modules/eslint-plugin-i18n-text": { @@ -2838,25 +2772,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, @@ -3022,9 +2958,9 @@ } }, "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3466,14 +3402,15 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -3514,14 +3451,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3539,12 +3481,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -3661,20 +3605,22 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3694,11 +3640,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3708,9 +3655,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3796,12 +3744,13 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -3832,13 +3781,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3902,11 +3854,30 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3996,9 +3967,10 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4077,11 +4049,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4127,15 +4103,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4211,6 +4184,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -4290,8 +4269,9 @@ }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/language-subtag-registry": { "version": "0.3.22", @@ -4355,8 +4335,9 @@ }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.kebabcase": { "version": "4.1.1", @@ -4525,15 +4506,16 @@ "license": "MIT" }, "node_modules/nise": { - "version": "6.0.0", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" + "path-to-regexp": "^8.1.0" } }, "node_modules/nock": { @@ -4623,9 +4605,13 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4654,12 +4640,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -4684,13 +4671,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4700,24 +4689,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4914,9 +4907,13 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "6.2.2", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", + "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -4969,6 +4966,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -5074,13 +5080,15 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5317,12 +5325,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -5333,20 +5342,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5391,6 +5399,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -5429,16 +5469,17 @@ "license": "ISC" }, "node_modules/sinon": { - "version": "18.0.0", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", + "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.2.0", - "nise": "^6.0.0", - "supports-color": "^7" + "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" }, "funding": { "type": "opencollective", @@ -5546,13 +5587,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5562,26 +5605,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5849,8 +5897,9 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5867,27 +5916,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5897,15 +5949,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5915,22 +5969,29 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6091,15 +6152,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/node_modules/@eslint/js/package.json b/node_modules/@eslint/js/package.json index fb2a149d1e..9889d7a967 100644 --- a/node_modules/@eslint/js/package.json +++ b/node_modules/@eslint/js/package.json @@ -1,6 +1,6 @@ { "name": "@eslint/js", - "version": "9.9.1", + "version": "9.10.0", "description": "ESLint JavaScript language implementation", "main": "./src/index.js", "scripts": {}, diff --git a/node_modules/@humanwhocodes/config-array/api.js b/node_modules/@humanwhocodes/config-array/api.js index eb95429c85..88c961940c 100644 --- a/node_modules/@humanwhocodes/config-array/api.js +++ b/node_modules/@humanwhocodes/config-array/api.js @@ -154,8 +154,82 @@ const MINIMATCH_OPTIONS = { const CONFIG_TYPES = new Set(['array', 'function']); +/** + * Fields that are considered metadata and not part of the config object. + */ +const META_FIELDS = new Set(['name']); + const FILES_AND_IGNORES_SCHEMA = new objectSchema.ObjectSchema(filesAndIgnoresSchema); +/** + * Wrapper error for config validation errors that adds a name to the front of the + * error message. + */ +class ConfigError extends Error { + + /** + * Creates a new instance. + * @param {string} name The config object name causing the error. + * @param {number} index The index of the config object in the array. + * @param {Error} source The source error. + */ + constructor(name, index, { cause, message }) { + + + const finalMessage = message || cause.message; + + super(`Config ${name}: ${finalMessage}`, { cause }); + + // copy over custom properties that aren't represented + if (cause) { + for (const key of Object.keys(cause)) { + if (!(key in this)) { + this[key] = cause[key]; + } + } + } + + /** + * The name of the error. + * @type {string} + * @readonly + */ + this.name = 'ConfigError'; + + /** + * The index of the config object in the array. + * @type {number} + * @readonly + */ + this.index = index; + } +} + +/** + * Gets the name of a config object. + * @param {object} config The config object to get the name of. + * @returns {string} The name of the config object. + */ +function getConfigName(config) { + if (config && typeof config.name === 'string' && config.name) { + return `"${config.name}"`; + } + + return '(unnamed)'; +} + +/** + * Rethrows a config error with additional information about the config object. + * @param {object} config The config object to get the name of. + * @param {number} index The index of the config object in the array. + * @param {Error} error The error to rethrow. + * @throws {ConfigError} When the error is rethrown for a config. + */ +function rethrowConfigError(config, index, error) { + const configName = getConfigName(config); + throw new ConfigError(configName, index, error); +} + /** * Shorthand for checking if a value is a string. * @param {any} value The value to check. @@ -166,23 +240,43 @@ function isString(value) { } /** - * Asserts that the files and ignores keys of a config object are valid as per base schema. - * @param {object} config The config object to check. + * Creates a function that asserts that the config is valid + * during normalization. This checks that the config is not nullish + * and that files and ignores keys of a config object are valid as per base schema. + * @param {Object} config The config object to check. + * @param {number} index The index of the config object in the array. * @returns {void} - * @throws {TypeError} If the files and ignores keys of a config object are not valid. + * @throws {ConfigError} If the files and ignores keys of a config object are not valid. */ -function assertValidFilesAndIgnores(config) { - if (!config || typeof config !== 'object') { - return; +function assertValidBaseConfig(config, index) { + + if (config === null) { + throw new ConfigError(getConfigName(config), index, { message: 'Unexpected null config.' }); + } + + if (config === undefined) { + throw new ConfigError(getConfigName(config), index, { message: 'Unexpected undefined config.' }); + } + + if (typeof config !== 'object') { + throw new ConfigError(getConfigName(config), index, { message: 'Unexpected non-object config.' }); } + const validateConfig = { }; + if ('files' in config) { validateConfig.files = config.files; } + if ('ignores' in config) { validateConfig.ignores = config.ignores; } - FILES_AND_IGNORES_SCHEMA.validate(validateConfig); + + try { + FILES_AND_IGNORES_SCHEMA.validate(validateConfig); + } catch (validationError) { + rethrowConfigError(config, index, { cause: validationError }); + } } /** @@ -377,7 +471,7 @@ function pathMatchesIgnores(filePath, basePath, config) { */ const relativeFilePath = path.relative(basePath, filePath); - return Object.keys(config).length > 1 && + return Object.keys(config).filter(key => !META_FIELDS.has(key)).length > 1 && !shouldIgnorePath(config.ignores, filePath, relativeFilePath); } @@ -511,7 +605,7 @@ class ConfigArray extends Array { /** * Tracks if the array has been normalized. * @property isNormalized - * @type boolean + * @type {boolean} * @private */ this[ConfigArraySymbol.isNormalized] = normalized; @@ -530,7 +624,7 @@ class ConfigArray extends Array { * The path of the config file that this array was loaded from. * This is used to calculate filename matches. * @property basePath - * @type string + * @type {string} */ this.basePath = basePath; @@ -539,14 +633,14 @@ class ConfigArray extends Array { /** * The supported config types. * @property configTypes - * @type Array + * @type {Array} */ this.extraConfigTypes = Object.freeze([...extraConfigTypes]); /** * A cache to store calculated configs for faster repeat lookup. * @property configCache - * @type Map + * @type {Map} * @private */ this[ConfigArraySymbol.configCache] = new Map(); @@ -645,7 +739,7 @@ class ConfigArray extends Array { * In this case, it acts list a globally ignored pattern. If there * are additional keys, then ignores act like exclusions. */ - if (config.ignores && Object.keys(config).length === 1) { + if (config.ignores && Object.keys(config).filter(key => !META_FIELDS.has(key)).length === 1) { result.push(...config.ignores); } } @@ -677,7 +771,7 @@ class ConfigArray extends Array { const normalizedConfigs = await normalize(this, context, this.extraConfigTypes); this.length = 0; this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this))); - this.forEach(assertValidFilesAndIgnores); + this.forEach(assertValidBaseConfig); this[ConfigArraySymbol.isNormalized] = true; // prevent further changes @@ -699,7 +793,7 @@ class ConfigArray extends Array { const normalizedConfigs = normalizeSync(this, context, this.extraConfigTypes); this.length = 0; this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this))); - this.forEach(assertValidFilesAndIgnores); + this.forEach(assertValidBaseConfig); this[ConfigArraySymbol.isNormalized] = true; // prevent further changes @@ -932,7 +1026,11 @@ class ConfigArray extends Array { // otherwise construct the config finalConfig = matchingConfigIndices.reduce((result, index) => { - return this[ConfigArraySymbol.schema].merge(result, this[index]); + try { + return this[ConfigArraySymbol.schema].merge(result, this[index]); + } catch (validationError) { + rethrowConfigError(this[index], index, { cause: validationError}); + } }, {}, this); finalConfig = this[ConfigArraySymbol.finalizeConfig](finalConfig); diff --git a/node_modules/@humanwhocodes/config-array/package.json b/node_modules/@humanwhocodes/config-array/package.json index 0c3beb3cf8..4215d658ae 100644 --- a/node_modules/@humanwhocodes/config-array/package.json +++ b/node_modules/@humanwhocodes/config-array/package.json @@ -1,11 +1,13 @@ { "name": "@humanwhocodes/config-array", - "version": "0.11.14", + "version": "0.13.0", "description": "Glob-based configuration matching.", "author": "Nicholas C. Zakas", "main": "api.js", "files": [ - "api.js" + "api.js", + "LICENSE", + "README.md" ], "repository": { "type": "git", @@ -42,7 +44,7 @@ "node": ">=10.10.0" }, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, diff --git a/node_modules/@humanwhocodes/object-schema/.eslintrc.js b/node_modules/@humanwhocodes/object-schema/.eslintrc.js deleted file mode 100644 index 4934076c43..0000000000 --- a/node_modules/@humanwhocodes/object-schema/.eslintrc.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - "env": { - "commonjs": true, - "es6": true, - "node": true - }, - "extends": "eslint:recommended", - "parserOptions": { - "ecmaVersion": 2018 - }, - "rules": { - "indent": [ - "error", - 4 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "double" - ], - "semi": [ - "error", - "always" - ] - } -}; \ No newline at end of file diff --git a/node_modules/@humanwhocodes/object-schema/.github/workflows/nodejs-test.yml b/node_modules/@humanwhocodes/object-schema/.github/workflows/nodejs-test.yml deleted file mode 100644 index e116514c1a..0000000000 --- a/node_modules/@humanwhocodes/object-schema/.github/workflows/nodejs-test.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Node CI - -on: [push, pull_request] - -jobs: - build: - - runs-on: ${{ matrix.os }} - - strategy: - matrix: - os: [windows-latest, macOS-latest, ubuntu-latest] - node: [18.x, 19.x, 20.x] - - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: npm install, build, and test - run: | - npm install - npm run build --if-present - npm test - env: - CI: true diff --git a/node_modules/@humanwhocodes/object-schema/.github/workflows/release-please.yml b/node_modules/@humanwhocodes/object-schema/.github/workflows/release-please.yml deleted file mode 100644 index 4707f03f66..0000000000 --- a/node_modules/@humanwhocodes/object-schema/.github/workflows/release-please.yml +++ /dev/null @@ -1,39 +0,0 @@ -on: - push: - branches: - - main -name: release-please -jobs: - release-please: - runs-on: ubuntu-latest - steps: - - uses: GoogleCloudPlatform/release-please-action@v3 - id: release - with: - release-type: node - package-name: object-schema - # The logic below handles the npm publication: - - uses: actions/checkout@v4 - # these if statements ensure that a publication only occurs when - # a new release is created: - if: ${{ steps.release.outputs.release_created }} - - uses: actions/setup-node@v3 - with: - node-version: 12 - registry-url: 'https://registry.npmjs.org' - if: ${{ steps.release.outputs.release_created }} - - run: npm ci - if: ${{ steps.release.outputs.release_created }} - - run: npm publish - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - if: ${{ steps.release.outputs.release_created }} - - # Tweets out release announcement - - run: 'npx @humanwhocodes/tweet "Object Schema v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }} has been released!\n\n${{ github.event.release.html_url }}"' - if: ${{ steps.release.outputs.release_created }} - env: - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} diff --git a/node_modules/@humanwhocodes/object-schema/CHANGELOG.md b/node_modules/@humanwhocodes/object-schema/CHANGELOG.md index 875f791434..3b0b6a3980 100644 --- a/node_modules/@humanwhocodes/object-schema/CHANGELOG.md +++ b/node_modules/@humanwhocodes/object-schema/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.3](https://github.com/humanwhocodes/object-schema/compare/v2.0.2...v2.0.3) (2024-04-01) + + +### Bug Fixes + +* Ensure test files are not including in package ([6eeb32c](https://github.com/humanwhocodes/object-schema/commit/6eeb32cc76a3e37d76b2990bd603d72061c816e0)), closes [#19](https://github.com/humanwhocodes/object-schema/issues/19) + ## [2.0.2](https://github.com/humanwhocodes/object-schema/compare/v2.0.1...v2.0.2) (2024-01-10) diff --git a/node_modules/@humanwhocodes/object-schema/package.json b/node_modules/@humanwhocodes/object-schema/package.json index a5b57c11fc..0098b442b7 100644 --- a/node_modules/@humanwhocodes/object-schema/package.json +++ b/node_modules/@humanwhocodes/object-schema/package.json @@ -1,8 +1,13 @@ { "name": "@humanwhocodes/object-schema", - "version": "2.0.2", + "version": "2.0.3", "description": "An object schema merger/validator", "main": "src/index.js", + "files": [ + "src", + "LICENSE", + "README.md" + ], "directories": { "test": "tests" }, diff --git a/node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js b/node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js deleted file mode 100644 index 84032d7e89..0000000000 --- a/node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @filedescription Merge Strategy Tests - */ -/* global it, describe, beforeEach */ - -"use strict"; - -//----------------------------------------------------------------------------- -// Requirements -//----------------------------------------------------------------------------- - -const assert = require("chai").assert; -const { MergeStrategy } = require("../src/"); - -//----------------------------------------------------------------------------- -// Class -//----------------------------------------------------------------------------- - -describe("MergeStrategy", () => { - - - describe("overwrite()", () => { - - it("should overwrite the first value with the second when the second is defined", () => { - const result = MergeStrategy.overwrite(1, 2); - assert.strictEqual(result, 2); - }); - - it("should overwrite the first value with the second when the second is undefined", () => { - const result = MergeStrategy.overwrite(1, undefined); - assert.strictEqual(result, undefined); - }); - - }); - - describe("replace()", () => { - - it("should overwrite the first value with the second when the second is defined", () => { - const result = MergeStrategy.replace(1, 2); - assert.strictEqual(result, 2); - }); - - it("should return the first value when the second is undefined", () => { - const result = MergeStrategy.replace(1, undefined); - assert.strictEqual(result, 1); - }); - - }); - - describe("assign()", () => { - - it("should merge properties from two objects when called", () => { - - const object1 = { foo: 1, bar: 3 }; - const object2 = { foo: 2 }; - - const result = MergeStrategy.assign(object1, object2); - assert.deepStrictEqual(result, { - foo: 2, - bar: 3 - }); - }); - - }); - -}); diff --git a/node_modules/@humanwhocodes/object-schema/tests/object-schema.js b/node_modules/@humanwhocodes/object-schema/tests/object-schema.js deleted file mode 100644 index 514a071acb..0000000000 --- a/node_modules/@humanwhocodes/object-schema/tests/object-schema.js +++ /dev/null @@ -1,659 +0,0 @@ -/** - * @filedescription Object Schema Tests - */ -/* global it, describe, beforeEach */ - -"use strict"; - -//----------------------------------------------------------------------------- -// Requirements -//----------------------------------------------------------------------------- - -const assert = require("chai").assert; -const { ObjectSchema } = require("../src/"); - -//----------------------------------------------------------------------------- -// Class -//----------------------------------------------------------------------------- - -describe("ObjectSchema", () => { - - let schema; - - describe("new ObjectSchema()", () => { - - it("should add a new key when a strategy is passed", () => { - schema = new ObjectSchema({ - foo: { - merge() {}, - validate() {} - } - }); - - assert.isTrue(schema.hasKey("foo")); - }); - - it("should throw an error when a strategy is missing a merge() method", () => { - assert.throws(() => { - schema = new ObjectSchema({ - foo: { - validate() { } - } - }); - }, /Definition for key "foo" must have a merge property/); - }); - - it("should throw an error when a strategy is missing a merge() method", () => { - assert.throws(() => { - schema = new ObjectSchema(); - }, /Schema definitions missing/); - }); - - it("should throw an error when a strategy is missing a validate() method", () => { - assert.throws(() => { - schema = new ObjectSchema({ - foo: { - merge() { }, - } - }); - }, /Definition for key "foo" must have a validate\(\) method/); - }); - - it("should throw an error when merge is an invalid string", () => { - assert.throws(() => { - new ObjectSchema({ - foo: { - merge: "bar", - validate() { } - } - }); - }, /key "foo" missing valid merge strategy/); - }); - - it("should throw an error when validate is an invalid string", () => { - assert.throws(() => { - new ObjectSchema({ - foo: { - merge: "assign", - validate: "s" - } - }); - }, /key "foo" missing valid validation strategy/); - }); - - }); - - - describe("merge()", () => { - - it("should throw an error when an unexpected key is found", () => { - let schema = new ObjectSchema({}); - - assert.throws(() => { - schema.merge({ foo: true }, { foo: true }); - }, /Unexpected key "foo"/); - }); - - it("should throw an error when merge() throws an error", () => { - let schema = new ObjectSchema({ - foo: { - merge() { - throw new Error("Boom!"); - }, - validate() {} - } - }); - - assert.throws(() => { - schema.merge({ foo: true }, { foo: true }); - }, /Key "foo": Boom!/); - - }); - - it("should throw an error when merge() throws an error with a readonly message", () => { - let schema = new ObjectSchema({ - foo: { - merge() { - throw { - get message() { - return "Boom!"; - } - }; - }, - validate() {} - } - }); - - assert.throws(() => { - schema.merge({ foo: true }, { foo: true }); - }, /Key "foo": Boom!/); - - }); - - it("should throw an error with custom properties when merge() throws an error with custom properties", () => { - let schema = new ObjectSchema({ - foo: { - merge() { - throw { - get message() { - return "Boom!"; - }, - booya: true - }; - }, - validate() {} - } - }); - - let errorThrown = false; - - try { - schema.merge({ foo: true }, { foo: true }); - } catch (ex) { - errorThrown = true; - assert.isTrue(ex.booya); - } - - assert.isTrue(errorThrown); - - }); - - it("should call the merge() strategy for one key when called", () => { - - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() {} - } - }); - - const result = schema.merge({ foo: true }, { foo: false }); - assert.propertyVal(result, "foo", "bar"); - }); - - it("should not call the merge() strategy when both objects don't contain the key", () => { - - let called = false; - - schema = new ObjectSchema({ - foo: { - merge() { - called = true; - }, - validate() {} - } - }); - - schema.merge({}, {}); - assert.isFalse(called, "The merge() strategy should not have been called."); - }); - - it("should omit returning the key when the merge() strategy returns undefined", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return undefined; - }, - validate() { } - } - }); - - const result = schema.merge({ foo: true }, { foo: false }); - assert.notProperty(result, "foo"); - }); - - it("should call the merge() strategy for two keys when called", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() { } - }, - bar: { - merge() { - return "baz"; - }, - validate() {} - } - }); - - const result = schema.merge({ foo: true, bar: 1 }, { foo: true, bar: 2 }); - assert.propertyVal(result, "foo", "bar"); - assert.propertyVal(result, "bar", "baz"); - }); - - it("should call the merge() strategy for two keys when called on three objects", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() { } - }, - bar: { - merge() { - return "baz"; - }, - validate() { } - } - }); - - const result = schema.merge( - { foo: true, bar: 1 }, - { foo: true, bar: 3 }, - { foo: false, bar: 2 } - ); - assert.propertyVal(result, "foo", "bar"); - assert.propertyVal(result, "bar", "baz"); - }); - - it("should call the merge() strategy when defined as 'overwrite'", () => { - schema = new ObjectSchema({ - foo: { - merge: "overwrite", - validate() { } - } - }); - - const result = schema.merge( - { foo: true }, - { foo: false } - ); - assert.propertyVal(result, "foo", false); - }); - - it("should call the merge() strategy when defined as 'assign'", () => { - schema = new ObjectSchema({ - foo: { - merge: "assign", - validate() { } - } - }); - - const result = schema.merge( - { foo: { bar: true } }, - { foo: { baz: false } } - ); - - assert.strictEqual(result.foo.bar, true); - assert.strictEqual(result.foo.baz, false); - }); - - it("should call the merge strategy when there's a subschema", () => { - - schema = new ObjectSchema({ - name: { - schema: { - first: { - merge: "replace", - validate: "string" - }, - last: { - merge: "replace", - validate: "string" - } - } - } - }); - - const result = schema.merge({ - name: { - first: "n", - last: "z" - } - }, { - name: { - first: "g" - } - }); - - assert.strictEqual(result.name.first, "g"); - assert.strictEqual(result.name.last, "z"); - }); - - it("should return separate objects when using subschema", () => { - - schema = new ObjectSchema({ - age: { - merge: "replace", - validate: "number" - }, - address: { - schema: { - street: { - schema: { - number: { - merge: "replace", - validate: "number" - }, - streetName: { - merge: "replace", - validate: "string" - } - } - }, - state: { - merge: "replace", - validate: "string" - } - } - } - }); - - const baseObject = { - address: { - street: { - number: 100, - streetName: "Foo St" - }, - state: "HA" - } - }; - - const result = schema.merge(baseObject, { - age: 29 - }); - - assert.notStrictEqual(result.address.street, baseObject.address.street); - assert.deepStrictEqual(result.address, baseObject.address); - }); - - it("should not error when calling the merge strategy when there's a subschema and no matching key in second object", () => { - - schema = new ObjectSchema({ - name: { - schema: { - first: { - merge: "replace", - validate: "string" - }, - last: { - merge: "replace", - validate: "string" - } - } - } - }); - - const result = schema.merge({ - name: { - first: "n", - last: "z" - } - }, { - }); - - assert.strictEqual(result.name.first, "n"); - assert.strictEqual(result.name.last, "z"); - }); - - it("should not error when calling the merge strategy when there's multiple subschemas and no matching key in second object", () => { - - schema = new ObjectSchema({ - user: { - schema: { - name: { - schema: { - first: { - merge: "replace", - validate: "string" - }, - last: { - merge: "replace", - validate: "string" - } - } - } - - } - } - }); - - const result = schema.merge({ - user: { - name: { - first: "n", - last: "z" - } - } - }, { - }); - - assert.strictEqual(result.user.name.first, "n"); - assert.strictEqual(result.user.name.last, "z"); - }); - - - }); - - describe("validate()", () => { - - it("should throw an error when an unexpected key is found", () => { - let schema = new ObjectSchema({}); - assert.throws(() => { - schema.validate({ foo: true }); - }, /Unexpected key "foo"/); - }); - - it("should not throw an error when an expected key is found", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() {} - } - }); - - schema.validate({ foo: true }); - }); - - it("should pass the property value into validate() when key is found", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate(value) { - assert.isTrue(value); - } - } - }); - - schema.validate({ foo: true }); - }); - - it("should not throw an error when expected keys are found", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() {} - }, - bar: { - merge() { - return "baz"; - }, - validate() {} - } - }); - - schema.validate({ foo: true, bar: true }); - }); - - it("should not throw an error when expected keys are found with required keys", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() { } - }, - bar: { - requires: ["foo"], - merge() { - return "baz"; - }, - validate() { } - } - }); - - schema.validate({ foo: true, bar: true }); - }); - - it("should throw an error when expected keys are found without required keys", () => { - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() { } - }, - baz: { - merge() { - return "baz"; - }, - validate() { } - }, - bar: { - name: "bar", - requires: ["foo", "baz"], - merge() { }, - validate() { } - } - }); - - assert.throws(() => { - schema.validate({ bar: true }); - }, /Key "bar" requires keys "foo", "baz"./); - }); - - - it("should throw an error when an expected key is found but is invalid", () => { - - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate() { - throw new Error("Invalid key."); - } - } - }); - - assert.throws(() => { - schema.validate({ foo: true }); - }, /Key "foo": Invalid key/); - }); - - it("should throw an error when an expected key is found but is invalid with a string validator", () => { - - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate: "string" - } - }); - - assert.throws(() => { - schema.validate({ foo: true }); - }, /Key "foo": Expected a string/); - }); - - it("should throw an error when an expected key is found but is invalid with a number validator", () => { - - schema = new ObjectSchema({ - foo: { - merge() { - return "bar"; - }, - validate: "number" - } - }); - - assert.throws(() => { - schema.validate({ foo: true }); - }, /Key "foo": Expected a number/); - }); - - it("should throw an error when a required key is missing", () => { - - schema = new ObjectSchema({ - foo: { - required: true, - merge() { - return "bar"; - }, - validate() {} - } - }); - - assert.throws(() => { - schema.validate({}); - }, /Missing required key "foo"/); - }); - - it("should throw an error when a subschema is provided and the value doesn't validate", () => { - - schema = new ObjectSchema({ - name: { - schema: { - first: { - merge: "replace", - validate: "string" - }, - last: { - merge: "replace", - validate: "string" - } - } - } - }); - - assert.throws(() => { - schema.validate({ - name: { - first: 123, - last: "z" - } - }); - - }, /Key "name": Key "first": Expected a string/); - }); - - it("should not throw an error when a subschema is provided and the value validates", () => { - - schema = new ObjectSchema({ - name: { - schema: { - first: { - merge: "replace", - validate: "string" - }, - last: { - merge: "replace", - validate: "string" - } - } - } - }); - - schema.validate({ - name: { - first: "n", - last: "z" - } - }); - - }); - - }); - -}); diff --git a/node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js b/node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js deleted file mode 100644 index 5d3e4a24dc..0000000000 --- a/node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * @filedescription Merge Strategy Tests - */ -/* global it, describe, beforeEach */ - -"use strict"; - -//----------------------------------------------------------------------------- -// Requirements -//----------------------------------------------------------------------------- - -const assert = require("chai").assert; -const { ValidationStrategy } = require("../src/"); - -//----------------------------------------------------------------------------- -// Class -//----------------------------------------------------------------------------- - -describe("ValidationStrategy", () => { - - describe("boolean", () => { - it("should not throw an error when the value is a boolean", () => { - ValidationStrategy.boolean(true); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy.boolean(null); - }, /Expected a Boolean/); - }); - - it("should throw an error when the value is a string", () => { - assert.throws(() => { - ValidationStrategy.boolean("foo"); - }, /Expected a Boolean/); - }); - - it("should throw an error when the value is a number", () => { - assert.throws(() => { - ValidationStrategy.boolean(123); - }, /Expected a Boolean/); - }); - - it("should throw an error when the value is an object", () => { - assert.throws(() => { - ValidationStrategy.boolean({}); - }, /Expected a Boolean/); - }); - }); - - describe("number", () => { - it("should not throw an error when the value is a number", () => { - ValidationStrategy.number(25); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy.number(null); - }, /Expected a number/); - }); - - it("should throw an error when the value is a string", () => { - assert.throws(() => { - ValidationStrategy.number("foo"); - }, /Expected a number/); - }); - - it("should throw an error when the value is a boolean", () => { - assert.throws(() => { - ValidationStrategy.number(true); - }, /Expected a number/); - }); - - it("should throw an error when the value is an object", () => { - assert.throws(() => { - ValidationStrategy.number({}); - }, /Expected a number/); - }); - }); - - describe("object", () => { - it("should not throw an error when the value is an object", () => { - ValidationStrategy.object({}); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy.object(null); - }, /Expected an object/); - }); - - it("should throw an error when the value is a string", () => { - assert.throws(() => { - ValidationStrategy.object(""); - }, /Expected an object/); - }); - }); - - describe("array", () => { - it("should not throw an error when the value is an array", () => { - ValidationStrategy.array([]); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy.array(null); - }, /Expected an array/); - }); - - it("should throw an error when the value is a string", () => { - assert.throws(() => { - ValidationStrategy.array(""); - }, /Expected an array/); - }); - - it("should throw an error when the value is an object", () => { - assert.throws(() => { - ValidationStrategy.array({}); - }, /Expected an array/); - }); - }); - - describe("object?", () => { - it("should not throw an error when the value is an object", () => { - ValidationStrategy["object?"]({}); - }); - - it("should not throw an error when the value is null", () => { - ValidationStrategy["object?"](null); - }); - - it("should throw an error when the value is a string", () => { - assert.throws(() => { - ValidationStrategy["object?"](""); - }, /Expected an object/); - }); - }); - - describe("string", () => { - it("should not throw an error when the value is a string", () => { - ValidationStrategy.string("foo"); - }); - - it("should not throw an error when the value is an empty string", () => { - ValidationStrategy.string(""); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy.string(null); - }, /Expected a string/); - }); - - it("should throw an error when the value is an object", () => { - assert.throws(() => { - ValidationStrategy.string({}); - }, /Expected a string/); - }); - }); - - describe("string!", () => { - it("should not throw an error when the value is an string", () => { - ValidationStrategy["string!"]("foo"); - }); - - it("should throw an error when the value is an empty string", () => { - assert.throws(() => { - ValidationStrategy["string!"](""); - }, /Expected a non-empty string/); - }); - - it("should throw an error when the value is null", () => { - assert.throws(() => { - ValidationStrategy["string!"](null); - }, /Expected a non-empty string/); - }); - - it("should throw an error when the value is an object", () => { - assert.throws(() => { - ValidationStrategy["string!"]({}); - }, /Expected a non-empty string/); - }); - }); - - -}); diff --git a/node_modules/es-get-iterator/node_modules/isarray/LICENSE b/node_modules/@rtsao/scc/LICENSE similarity index 94% rename from node_modules/es-get-iterator/node_modules/isarray/LICENSE rename to node_modules/@rtsao/scc/LICENSE index de3226673c..a7cb450bed 100644 --- a/node_modules/es-get-iterator/node_modules/isarray/LICENSE +++ b/node_modules/@rtsao/scc/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2013 Julian Gruber +Copyright (c) 2019 Ryan Tsao Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/node_modules/@rtsao/scc/README.md b/node_modules/@rtsao/scc/README.md new file mode 100644 index 0000000000..4697edd2ef --- /dev/null +++ b/node_modules/@rtsao/scc/README.md @@ -0,0 +1,49 @@ +# `@rtsao/scc` + +Find strongly connected components of a directed graph using [Tarjan's algorithm](https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm). + +This algorithm efficiently yields both a topological order and list of any cycles. + +## Installation + +``` +yarn add @rtsao/scc +``` + +``` +npm install @rtsao/scc +``` + +## Usage + +```js +const scc = require("@rtsao/scc"); + +const digraph = new Map([ + ["a", new Set(["c", "d"])], + ["b", new Set(["a"])], + ["c", new Set(["b"])], + ["d", new Set(["e"])], + ["e", new Set()] +]); + +const components = scc(digraph); +// [ Set { 'e' }, Set { 'd' }, Set { 'b', 'c', 'a' } ] +``` + +#### Illustration of example input digraph +``` +┌───┐ ┌───┐ +│ d │ ◀── │ a │ ◀┐ +└───┘ └───┘ │ + │ │ │ + ▼ ▼ │ +┌───┐ ┌───┐ │ +│ e │ │ c │ │ +└───┘ └───┘ │ + │ │ + ▼ │ + ┌───┐ │ + │ b │ ─┘ + └───┘ +``` diff --git a/node_modules/@rtsao/scc/index.d.ts b/node_modules/@rtsao/scc/index.d.ts new file mode 100644 index 0000000000..ed46b8bc09 --- /dev/null +++ b/node_modules/@rtsao/scc/index.d.ts @@ -0,0 +1 @@ +export default function tarjan(graph: Map>): Array> diff --git a/node_modules/@rtsao/scc/index.js b/node_modules/@rtsao/scc/index.js new file mode 100644 index 0000000000..b7dd5bb479 --- /dev/null +++ b/node_modules/@rtsao/scc/index.js @@ -0,0 +1,51 @@ +"use strict"; + +module.exports = tarjan; + +// Adapted from https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm#The_algorithm_in_pseudocode + +function tarjan(graph) { + const indices = new Map(); + const lowlinks = new Map(); + const onStack = new Set(); + const stack = []; + const scc = []; + let idx = 0; + + function strongConnect(v) { + indices.set(v, idx); + lowlinks.set(v, idx); + idx++; + stack.push(v); + onStack.add(v); + + const deps = graph.get(v); + for (const dep of deps) { + if (!indices.has(dep)) { + strongConnect(dep); + lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(dep))); + } else if (onStack.has(dep)) { + lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(dep))); + } + } + + if (lowlinks.get(v) === indices.get(v)) { + const vertices = new Set(); + let w = null; + while (v !== w) { + w = stack.pop(); + onStack.delete(w); + vertices.add(w); + } + scc.push(vertices); + } + } + + for (const v of graph.keys()) { + if (!indices.has(v)) { + strongConnect(v); + } + } + + return scc; +} diff --git a/node_modules/@rtsao/scc/index.js.flow b/node_modules/@rtsao/scc/index.js.flow new file mode 100644 index 0000000000..479ff4ff6a --- /dev/null +++ b/node_modules/@rtsao/scc/index.js.flow @@ -0,0 +1,5 @@ +// @flow + +declare function tarjan(graph: Map>): Array>; + +declare module.exports: typeof tarjan; diff --git a/node_modules/@rtsao/scc/package.json b/node_modules/@rtsao/scc/package.json new file mode 100644 index 0000000000..67f67ccd99 --- /dev/null +++ b/node_modules/@rtsao/scc/package.json @@ -0,0 +1,7 @@ +{ + "name": "@rtsao/scc", + "version": "1.1.0", + "repository": "rtsao/scc", + "main": "index.js", + "license": "MIT" +} diff --git a/node_modules/@sinonjs/fake-timers/README.md b/node_modules/@sinonjs/fake-timers/README.md index 6bdcb9209f..a7f5ab63f5 100644 --- a/node_modules/@sinonjs/fake-timers/README.md +++ b/node_modules/@sinonjs/fake-timers/README.md @@ -3,19 +3,27 @@ [![codecov](https://codecov.io/gh/sinonjs/fake-timers/branch/main/graph/badge.svg)](https://codecov.io/gh/sinonjs/fake-timers) Contributor Covenant -JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, and `cancelIdleCallback`, along with a clock instance that controls the flow of time. FakeTimers also provides a `Date` implementation that gets its time from the clock. +JavaScript implementation of the timer +APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, +and `cancelIdleCallback`, along with a clock instance that controls the flow of time. FakeTimers also provides a `Date` +implementation that gets its time from the clock. -In addition in browser environment `@sinonjs/fake-timers` provides a `performance` implementation that gets its time from the clock. In Node environments FakeTimers provides a `nextTick` implementation that is synchronized with the clock - and a `process.hrtime` shim that works with the clock. +In addition in browser environment `@sinonjs/fake-timers` provides a `performance` implementation that gets its time +from the clock. In Node environments FakeTimers provides a `nextTick` implementation that is synchronized with the +clock - and a `process.hrtime` shim that works with the clock. `@sinonjs/fake-timers` can be used to simulate passing time in automated tests and other situations where you want the scheduling semantics, but don't want to actually wait. -`@sinonjs/fake-timers` is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes). +`@sinonjs/fake-timers` is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets +the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes). ## Autocomplete, IntelliSense and TypeScript definitions -Version 7 introduced JSDoc to the codebase. This should provide autocomplete and type suggestions in supporting IDEs. If you need more elaborate type support, TypeScript definitions for the Sinon projects are independently maintained by the Definitely Types community: +Version 7 introduced JSDoc to the codebase. This should provide autocomplete and type suggestions in supporting IDEs. If +you need more elaborate type support, TypeScript definitions for the Sinon projects are independently maintained by the +Definitely Types community: ``` npm install -D @types/sinonjs__fake-timers @@ -29,7 +37,8 @@ npm install -D @types/sinonjs__fake-timers npm install @sinonjs/fake-timers ``` -If you want to use `@sinonjs/fake-timers` in a browser you can either build your own bundle or use [Skypack](https://www.skypack.dev). +If you want to use `@sinonjs/fake-timers` in a browser you can either build your own bundle or +use [Skypack](https://www.skypack.dev). ## Usage @@ -54,7 +63,8 @@ clock.tick(15); Upon executing the last line, an interesting fact about the [Poblano](https://en.wikipedia.org/wiki/Poblano) will be printed synchronously to -the screen. If you want to simulate asynchronous behavior, please see the `async` function variants (eg `clock.tick(time)` vs `await clock.tickAsync(time)`). +the screen. If you want to simulate asynchronous behavior, please see the `async` function variants ( +eg `clock.tick(time)` vs `await clock.tickAsync(time)`). The `next`, `runAll`, `runToFrame`, and `runToLast` methods are available to advance the clock. See the API Reference for more details. @@ -67,7 +77,9 @@ clock instance, not the browser's internals. Calling `install` with no arguments achieves this. You can call `uninstall` later to restore things as they were again. -Note that in NodeJS also the [timers](https://nodejs.org/api/timers.html) module will receive fake timers when using global scope. +Note that in NodeJS the [timers](https://nodejs.org/api/timers.html) +and [timers/promises](https://nodejs.org/api/timers.html#timers-promises-api) modules will also receive fake timers when +using global scope. ```js // In the browser distribution, a global `FakeTimers` is already available @@ -143,22 +155,26 @@ Creates a clock. The default The `now` argument may be a number (in milliseconds) or a Date object. -The `loopLimit` argument sets the maximum number of timers that will be run when calling `runAll()` before assuming that we have an infinite loop and throwing an error. The default is `1000`. +The `loopLimit` argument sets the maximum number of timers that will be run when calling `runAll()` before assuming that +we have an infinite loop and throwing an error. The default is `1000`. ### `var clock = FakeTimers.install([config])` Installs FakeTimers using the specified config (otherwise with epoch `0` on the global scope). -Note that in NodeJS also the [timers](https://nodejs.org/api/timers.html) module will receive fake timers when using global scope. +Note that in NodeJS the [timers](https://nodejs.org/api/timers.html) +and [timers/promises](https://nodejs.org/api/timers.html#timers-promises-api) modules will also receive fake timers when +using global scope. The following configuration options are available -| Parameter | Type | Default | Description | -| -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `config.now` | Number/Date | 0 | installs FakeTimers with the specified unix epoch | -| `config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime", "performance"] | an array with explicit function names (or objects, in the case of "performance") to hijack. _When not set, FakeTimers will automatically fake all methods **except** `nextTick`_ e.g., `FakeTimers.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick` | -| `config.loopLimit` | Number | 1000 | the maximum number of timers that will be run when calling runAll() | -| `config.shouldAdvanceTime` | Boolean | false | tells FakeTimers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time) | -| `config.advanceTimeDelta` | Number | 20 | relevant only when using with `shouldAdvanceTime: true`. increment mocked time by `advanceTimeDelta` ms every `advanceTimeDelta` ms change in the real system time. | -| `config.shouldClearNativeTimers` | Boolean | false | tells FakeTimers to clear 'native' (i.e. not fake) timers by delegating to their respective handlers. These are not cleared by default, leading to potentially unexpected behavior if timers existed prior to installing FakeTimers. | +| Parameter | Type | Default | Description | +| -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config.now` | Number/Date | 0 | installs FakeTimers with the specified unix epoch | +| `config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime", "performance"] | an array with explicit function names (or objects, in the case of "performance") to hijack. \_When not set, FakeTimers will automatically fake all methods e.g., `FakeTimers.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick` | +| `config.loopLimit` | Number | 1000 | the maximum number of timers that will be run when calling runAll() | +| `config.shouldAdvanceTime` | Boolean | false | tells FakeTimers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time) | +| `config.advanceTimeDelta` | Number | 20 | relevant only when using with `shouldAdvanceTime: true`. increment mocked time by `advanceTimeDelta` ms every `advanceTimeDelta` ms change in the real system time. | +| `config.shouldClearNativeTimers` | Boolean | false | tells FakeTimers to clear 'native' (i.e. not fake) timers by delegating to their respective handlers. These are not cleared by default, leading to potentially unexpected behavior if timers existed prior to installing FakeTimers. | +| `config.ignoreMissingTimers` | Boolean | false | tells FakeTimers to ignore missing timers that might not exist in the given environment | ### `var id = clock.setTimeout(callback, timeout)` @@ -218,7 +234,9 @@ Cancels the callback scheduled by the provided id. ### `clock.requestIdleCallback(callback[, timeout])` -Queued the callback to be fired during idle periods to perform background and low priority work on the main event loop. Callbacks which have a timeout option will be fired no later than time in milliseconds. Returns an `id` which can be used to cancel the callback. +Queued the callback to be fired during idle periods to perform background and low priority work on the main event loop. +Callbacks which have a timeout option will be fired no later than time in milliseconds. Returns an `id` which can be +used to cancel the callback. ### `clock.cancelIdleCallback(id)` @@ -263,7 +281,8 @@ callbacks to execute _before_ running the timers. Advance the clock by jumping forward in time, firing callbacks at most once. `time` takes the same formats as [`clock.tick`](#clockticktime--await-clocktickasynctime). -This can be used to simulate the JS engine (such as a browser) being put to sleep and resumed later, skipping intermediary timers. +This can be used to simulate the JS engine (such as a browser) being put to sleep and resumed later, skipping +intermediary timers. ### `clock.reset()` @@ -273,9 +292,11 @@ Useful to reset the state of the clock without having to `uninstall` and `instal ### `clock.runAll()` / `await clock.runAllAsync()` -This runs all pending timers until there are none remaining. If new timers are added while it is executing they will be run as well. +This runs all pending timers until there are none remaining. If new timers are added while it is executing they will be +run as well. -This makes it easier to run asynchronous tests to completion without worrying about the number of timers they use, or the delays in those timers. +This makes it easier to run asynchronous tests to completion without worrying about the number of timers they use, or +the delays in those timers. It runs a maximum of `loopLimit` times after which it assumes there is an infinite loop of timers and throws an error. @@ -284,7 +305,8 @@ callbacks to execute _before_ running the timers. ### `clock.runMicrotasks()` -This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries using FakeTimers underneath and for running `nextTick` items without any timers. +This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries +using FakeTimers underneath and for running `nextTick` items without any timers. ### `clock.runToFrame()` @@ -323,11 +345,22 @@ Implements the `Date` object but using the clock to provide the correct time. ### `Performance` -Implements the `now` method of the [`Performance`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) object but using the clock to provide the correct time. Only available in environments that support the Performance object (browsers mostly). +Implements the `now` method of the [`Performance`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) +object but using the clock to provide the correct time. Only available in environments that support the Performance +object (browsers mostly). ### `FakeTimers.withGlobal` -In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), FakeTimers exports a factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to support. When invoking this function with a global, you will get back an object with `timers`, `createClock` and `install` - same as the regular FakeTimers exports only based on the passed in global instead of the global environment. +In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), FakeTimers exports a +factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to +support. When invoking this function with a global, you will get back an object with `timers`, `createClock` +and `install` - same as the regular FakeTimers exports only based on the passed in global instead of the global +environment. + +## Promises and fake time + +If you use a Promise library like Bluebird, note that you should either call `clock.runMicrotasks()` or make sure to +_not_ mock `nextTick`. ## Running tests @@ -349,8 +382,8 @@ $(npm bin)/mocha ./test/fake-timers-test.js ### In the browser -[Mochify](https://github.com/mantoni/mochify.js) is used to run the tests in -PhantomJS. Make sure you have `phantomjs` installed. Then: +[Mochify](https://github.com/mochify-js) is used to run the tests in headless +Chrome. ```sh npm test-headless diff --git a/node_modules/@sinonjs/fake-timers/package.json b/node_modules/@sinonjs/fake-timers/package.json index 51b8565c18..32106372a7 100644 --- a/node_modules/@sinonjs/fake-timers/package.json +++ b/node_modules/@sinonjs/fake-timers/package.json @@ -1,12 +1,12 @@ { "name": "@sinonjs/fake-timers", "description": "Fake JavaScript timers", - "version": "11.2.2", + "version": "13.0.2", "homepage": "https://github.com/sinonjs/fake-timers", "author": "Christian Johansen", "repository": { "type": "git", - "url": "https://github.com/sinonjs/fake-timers.git" + "url": "git+https://github.com/sinonjs/fake-timers.git" }, "bugs": { "mail": "christian@cjohansen.no", @@ -16,39 +16,52 @@ "scripts": { "lint": "eslint .", "test-node": "mocha --timeout 200 test/ integration-test/ -R dot --check-leaks", - "test-headless": "mochify --no-detect-globals --timeout=10000", + "test-headless": "mochify --driver puppeteer", "test-check-coverage": "npm run test-coverage && nyc check-coverage", - "test-cloud": "mochify --wd --no-detect-globals --timeout=10000", - "test-coverage": "nyc --all --reporter text --reporter html --reporter lcovonly npm run test-node", + "test-cloud": "npm run test-edge && npm run test-firefox && npm run test-safari", + "test-edge": "BROWSER_NAME=MicrosoftEdge mochify --config mochify.webdriver.js", + "test-firefox": "BROWSER_NAME=firefox mochify --config mochify.webdriver.js", + "test-safari": "BROWSER_NAME=safari mochify --config mochify.webdriver.js", + "test-coverage": "nyc -x mochify.webdriver.js -x coverage --all --reporter text --reporter html --reporter lcovonly npm run test-node", "test": "npm run test-node && npm run test-headless", "prettier:check": "prettier --check '**/*.{js,css,md}'", "prettier:write": "prettier --write '**/*.{js,css,md}'", "preversion": "./scripts/preversion.sh", "version": "./scripts/version.sh", "postversion": "./scripts/postversion.sh", - "prepare": "husky install" + "prepare": "husky" }, "lint-staged": { "*.{js,css,md}": "prettier --check", "*.js": "eslint" }, + "mochify": { + "reporter": "dot", + "timeout": 10000, + "bundle": "esbuild --bundle --sourcemap=inline --define:process.env.NODE_DEBUG=\"\"", + "bundle_stdin": "require", + "spec": "test/**/*-test.js" + }, "files": [ "src/" ], "devDependencies": { - "@sinonjs/eslint-config": "^4.1.0", - "@sinonjs/referee-sinon": "11.0.0", - "husky": "^8.0.3", - "jsdom": "22.1.0", - "lint-staged": "15.0.1", - "mocha": "10.2.0", - "mochify": "9.2.0", - "nyc": "15.1.0", - "prettier": "3.0.3" + "@mochify/cli": "^0.4.1", + "@mochify/driver-puppeteer": "^0.4.0", + "@mochify/driver-webdriver": "^0.2.1", + "@sinonjs/eslint-config": "^5.0.3", + "@sinonjs/referee-sinon": "12.0.0", + "esbuild": "^0.23.1", + "husky": "^9.1.5", + "jsdom": "24.1.1", + "lint-staged": "15.2.9", + "mocha": "10.7.3", + "nyc": "17.0.0", + "prettier": "3.3.3" }, "main": "./src/fake-timers-src.js", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" }, "nyc": { "branches": 85, diff --git a/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js b/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js index 0ce721783b..308daf1b0d 100644 --- a/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js +++ b/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js @@ -1,13 +1,18 @@ "use strict"; const globalObject = require("@sinonjs/commons").global; -let timersModule; +let timersModule, timersPromisesModule; if (typeof require === "function" && typeof module === "object") { try { timersModule = require("timers"); } catch (e) { // ignored } + try { + timersPromisesModule = require("timers/promises"); + } catch (e) { + // ignored + } } /** @@ -94,6 +99,8 @@ if (typeof require === "function" && typeof module === "object") { * @property {Function[]} methods - the methods that are faked * @property {boolean} [shouldClearNativeTimers] inherited from config * @property {{methodName:string, original:any}[] | undefined} timersModuleMethods + * @property {{methodName:string, original:any}[] | undefined} timersPromisesModuleMethods + * @property {Map} abortListenerMap */ /* eslint-enable jsdoc/require-property-description */ @@ -107,6 +114,7 @@ if (typeof require === "function" && typeof module === "object") { * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + * @property {boolean} [ignoreMissingTimers] default is false, meaning asking to fake timers that are not present will throw an error */ /* eslint-disable jsdoc/require-property-description */ @@ -151,16 +159,26 @@ function withGlobal(_global) { const NOOP_ARRAY = function () { return []; }; - const timeoutResult = _global.setTimeout(NOOP, 0); - const addTimerReturnsObject = typeof timeoutResult === "object"; - const hrtimePresent = + const isPresent = {}; + let timeoutResult, + addTimerReturnsObject = false; + + if (_global.setTimeout) { + isPresent.setTimeout = true; + timeoutResult = _global.setTimeout(NOOP, 0); + addTimerReturnsObject = typeof timeoutResult === "object"; + } + isPresent.clearTimeout = Boolean(_global.clearTimeout); + isPresent.setInterval = Boolean(_global.setInterval); + isPresent.clearInterval = Boolean(_global.clearInterval); + isPresent.hrtime = _global.process && typeof _global.process.hrtime === "function"; - const hrtimeBigintPresent = - hrtimePresent && typeof _global.process.hrtime.bigint === "function"; - const nextTickPresent = + isPresent.hrtimeBigint = + isPresent.hrtime && typeof _global.process.hrtime.bigint === "function"; + isPresent.nextTick = _global.process && typeof _global.process.nextTick === "function"; const utilPromisify = _global.process && require("util").promisify; - const performancePresent = + isPresent.performance = _global.performance && typeof _global.performance.now === "function"; const hasPerformancePrototype = _global.Performance && @@ -169,29 +187,60 @@ function withGlobal(_global) { _global.performance && _global.performance.constructor && _global.performance.constructor.prototype; - const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); - const requestAnimationFramePresent = + isPresent.queueMicrotask = _global.hasOwnProperty("queueMicrotask"); + isPresent.requestAnimationFrame = _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"; - const cancelAnimationFramePresent = + isPresent.cancelAnimationFrame = _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"; - const requestIdleCallbackPresent = + isPresent.requestIdleCallback = _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"; - const cancelIdleCallbackPresent = + isPresent.cancelIdleCallbackPresent = _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"; - const setImmediatePresent = + isPresent.setImmediate = _global.setImmediate && typeof _global.setImmediate === "function"; - const intlPresent = _global.Intl && typeof _global.Intl === "object"; + isPresent.clearImmediate = + _global.clearImmediate && typeof _global.clearImmediate === "function"; + isPresent.Intl = _global.Intl && typeof _global.Intl === "object"; - _global.clearTimeout(timeoutResult); + if (_global.clearTimeout) { + _global.clearTimeout(timeoutResult); + } const NativeDate = _global.Date; const NativeIntl = _global.Intl; let uniqueTimerId = idCounterStart; + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", + ); + } + isPresent.Date = true; + + /** + * The PerformanceEntry object encapsulates a single performance metric + * that is part of the browser's performance timeline. + * + * This is an object returned by the `mark` and `measure` methods on the Performance prototype + */ + class FakePerformanceEntry { + constructor(name, entryType, startTime, duration) { + this.name = name; + this.entryType = entryType; + this.startTime = startTime; + this.duration = duration; + } + + toJSON() { + return JSON.stringify({ ...this }); + } + } + /** * @param {number} num * @returns {boolean} @@ -376,109 +425,76 @@ function withGlobal(_global) { return infiniteLoopError; } - /** - * @param {Date} target - * @param {Date} source - * @returns {Date} the target after modifications - */ - function mirrorDateProperties(target, source) { - let prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + class ClockDate extends NativeDate { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * @returns void + */ + // eslint-disable-next-line no-unused-vars + constructor(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + if (arguments.length === 0) { + super(ClockDate.clock.now); + } else { + super(...arguments); + } + } + + static [Symbol.hasInstance](instance) { + return instance instanceof NativeDate; } } - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; + ClockDate.isFake = true; + + if (NativeDate.now) { + ClockDate.now = function now() { + return ClockDate.clock.now; }; - } else { - delete target.now; } - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); + if (NativeDate.toSource) { + ClockDate.toSource = function toSource() { + return NativeDate.toSource(); }; - } else { - delete target.toSource; } - // set special toString implementation - target.toString = function toString() { - return source.toString(); + ClockDate.toString = function toString() { + return NativeDate.toString(); }; - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - target.isFake = true; - - return target; - } - - //eslint-disable-next-line jsdoc/require-jsdoc - function createDate() { + // noinspection UnnecessaryLocalVariableJS /** - * @param {number} year - * @param {number} month - * @param {number} date - * @param {number} hour - * @param {number} minute - * @param {number} second - * @param {number} ms - * @returns {Date} + * A normal Class constructor cannot be called without `new`, but Date can, so we need + * to wrap it in a Proxy in order to ensure this functionality of Date is kept intact + * + * @type {ClockDate} */ - function ClockDate(year, month, date, hour, minute, second, ms) { - // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. - // This remains so in the 10th edition of 2019 as well. - if (!(this instanceof ClockDate)) { - return new NativeDate(ClockDate.clock.now).toString(); - } - - // if Date is called as a constructor with 'new' keyword - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ); - default: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ms, + const ClockDateProxy = new Proxy(ClockDate, { + // handler for [[Call]] invocations (i.e. not using `new`) + apply() { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (this instanceof ClockDate) { + throw new TypeError( + "A Proxy should only capture `new` calls with the `construct` handler. This is not supposed to be possible, so check the logic.", ); - } - } + } - return mirrorDateProperties(ClockDate, NativeDate); + return new NativeDate(ClockDate.clock.now).toString(); + }, + }); + + return ClockDateProxy; } /** @@ -931,6 +947,16 @@ function withGlobal(_global) { timersModule[entry.methodName] = entry.original; } } + if (clock.timersPromisesModuleMethods !== undefined) { + for ( + let j = 0; + j < clock.timersPromisesModuleMethods.length; + j++ + ) { + const entry = clock.timersPromisesModuleMethods[j]; + timersPromisesModule[entry.methodName] = entry.original; + } + } } if (config.shouldAdvanceTime === true) { @@ -940,6 +966,11 @@ function withGlobal(_global) { // Prevent multiple executions which will completely remove these props clock.methods = []; + for (const [listener, signal] of clock.abortListenerMap.entries()) { + signal.removeEventListener("abort", listener); + clock.abortListenerMap.delete(listener); + } + // return pending timers, to enable checking what timers remained on uninstall if (!clock.timers) { return []; @@ -962,8 +993,7 @@ function withGlobal(_global) { clock[`_${method}`] = target[method]; if (method === "Date") { - const date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; + target[method] = clock[method]; } else if (method === "Intl") { target[method] = clock[method]; } else if (method === "performance") { @@ -1042,44 +1072,47 @@ function withGlobal(_global) { Date: _global.Date, }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { timers.setImmediate = _global.setImmediate; + } + + if (isPresent.clearImmediate) { timers.clearImmediate = _global.clearImmediate; } - if (hrtimePresent) { + if (isPresent.hrtime) { timers.hrtime = _global.process.hrtime; } - if (nextTickPresent) { + if (isPresent.nextTick) { timers.nextTick = _global.process.nextTick; } - if (performancePresent) { + if (isPresent.performance) { timers.performance = _global.performance; } - if (requestAnimationFramePresent) { + if (isPresent.requestAnimationFrame) { timers.requestAnimationFrame = _global.requestAnimationFrame; } - if (queueMicrotaskPresent) { - timers.queueMicrotask = true; + if (isPresent.queueMicrotask) { + timers.queueMicrotask = _global.queueMicrotask; } - if (cancelAnimationFramePresent) { + if (isPresent.cancelAnimationFrame) { timers.cancelAnimationFrame = _global.cancelAnimationFrame; } - if (requestIdleCallbackPresent) { + if (isPresent.requestIdleCallback) { timers.requestIdleCallback = _global.requestIdleCallback; } - if (cancelIdleCallbackPresent) { + if (isPresent.cancelIdleCallback) { timers.cancelIdleCallback = _global.cancelIdleCallback; } - if (intlPresent) { + if (isPresent.Intl) { timers.Intl = _global.Intl; } @@ -1098,13 +1131,6 @@ function withGlobal(_global) { let nanos = 0; const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] - if (NativeDate === undefined) { - throw new Error( - "The global scope doesn't have a `Date` object" + - " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", - ); - } - const clock = { now: start, Date: createDate(), @@ -1165,14 +1191,14 @@ function withGlobal(_global) { return millis; } - if (hrtimeBigintPresent) { + if (isPresent.hrtimeBigint) { hrtime.bigint = function () { const parts = hrtime(); return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line }; } - if (intlPresent) { + if (isPresent.Intl) { clock.Intl = createIntl(); clock.Intl.clock = clock; } @@ -1257,7 +1283,7 @@ function withGlobal(_global) { return clearTimer(clock, timerId, "Interval"); }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { clock.setImmediate = function setImmediate(func) { return addTimer(clock, { func: func, @@ -1696,12 +1722,12 @@ function withGlobal(_global) { clock.tick(ms); }; - if (performancePresent) { + if (isPresent.performance) { clock.performance = Object.create(null); clock.performance.now = fakePerformanceNow; } - if (hrtimePresent) { + if (isPresent.hrtime) { clock.hrtime = hrtime; } @@ -1749,6 +1775,20 @@ function withGlobal(_global) { ); } + /** + * @param {string} timer/object the name of the thing that is not present + * @param timer + */ + function handleMissingTimer(timer) { + if (config.ignoreMissingTimers) { + return; + } + + throw new ReferenceError( + `non-existent timers and/or objects cannot be faked: '${timer}'`, + ); + } + let i, l; const clock = createClock(config.now, config.loopLimit); clock.shouldClearNativeTimers = config.shouldClearNativeTimers; @@ -1757,13 +1797,12 @@ function withGlobal(_global) { return uninstall(clock, config); }; + clock.abortListenerMap = new Map(); + clock.methods = config.toFake || []; if (clock.methods.length === 0) { - // do not fake nextTick by default - GitHub#126 - clock.methods = Object.keys(timers).filter(function (key) { - return key !== "nextTick" && key !== "queueMicrotask"; - }); + clock.methods = Object.keys(timers); } if (config.shouldAdvanceTime === true) { @@ -1797,18 +1836,30 @@ function withGlobal(_global) { : NOOP; } }); + // ensure `mark` returns a value that is valid + clock.performance.mark = (name) => + new FakePerformanceEntry(name, "mark", 0, 0); + clock.performance.measure = (name) => + new FakePerformanceEntry(name, "measure", 0, 100); } else if ((config.toFake || []).includes("performance")) { - // user explicitly tried to fake performance when not present - throw new ReferenceError( - "non-existent performance object cannot be faked", - ); + return handleMissingTimer("performance"); } } if (_global === globalObject && timersModule) { clock.timersModuleMethods = []; } + if (_global === globalObject && timersPromisesModule) { + clock.timersPromisesModuleMethods = []; + } for (i = 0, l = clock.methods.length; i < l; i++) { const nameOfMethodToReplace = clock.methods[i]; + + if (!isPresent[nameOfMethodToReplace]) { + handleMissingTimer(nameOfMethodToReplace); + // eslint-disable-next-line + continue; + } + if (nameOfMethodToReplace === "hrtime") { if ( _global.process && @@ -1838,6 +1889,239 @@ function withGlobal(_global) { timersModule[nameOfMethodToReplace] = _global[nameOfMethodToReplace]; } + if (clock.timersPromisesModuleMethods !== undefined) { + if (nameOfMethodToReplace === "setTimeout") { + clock.timersPromisesModuleMethods.push({ + methodName: "setTimeout", + original: timersPromisesModule.setTimeout, + }); + + timersPromisesModule.setTimeout = ( + delay, + value, + options = {}, + ) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearTimeout(handle); + reject(options.signal.reason); + }; + + const handle = clock.setTimeout(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }, delay); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setImmediate") { + clock.timersPromisesModuleMethods.push({ + methodName: "setImmediate", + original: timersPromisesModule.setImmediate, + }); + + timersPromisesModule.setImmediate = (value, options = {}) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearImmediate(handle); + reject(options.signal.reason); + }; + + const handle = clock.setImmediate(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setInterval") { + clock.timersPromisesModuleMethods.push({ + methodName: "setInterval", + original: timersPromisesModule.setInterval, + }); + + timersPromisesModule.setInterval = ( + delay, + value, + options = {}, + ) => ({ + [Symbol.asyncIterator]: () => { + const createResolvable = () => { + let resolve, reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + promise.resolve = resolve; + promise.reject = reject; + return promise; + }; + + let done = false; + let hasThrown = false; + let returnCall; + let nextAvailable = 0; + const nextQueue = []; + + const handle = clock.setInterval(() => { + if (nextQueue.length > 0) { + nextQueue.shift().resolve(); + } else { + nextAvailable++; + } + }, delay); + + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + clock.clearInterval(handle); + done = true; + for (const resolvable of nextQueue) { + resolvable.resolve(); + } + }; + + if (options.signal) { + if (options.signal.aborted) { + done = true; + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + + return { + next: async () => { + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + if (nextAvailable > 0) { + nextAvailable--; + return { done: false, value: value }; + } + + const resolvable = createResolvable(); + nextQueue.push(resolvable); + + await resolvable; + + if (returnCall && nextQueue.length === 0) { + returnCall.resolve(); + } + + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + return { done: false, value: value }; + }, + return: async () => { + if (done) { + return { done: true, value: undefined }; + } + + if (nextQueue.length > 0) { + returnCall = createResolvable(); + await returnCall; + } + + clock.clearInterval(handle); + done = true; + + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + return { done: true, value: undefined }; + }, + }; + }, + }); + } + } } return clock; diff --git a/node_modules/@sinonjs/samsam/docs/index.md b/node_modules/@sinonjs/samsam/docs/index.md index 3ef7f310ad..4770b1865f 100644 --- a/node_modules/@sinonjs/samsam/docs/index.md +++ b/node_modules/@sinonjs/samsam/docs/index.md @@ -249,7 +249,7 @@ samsam.match( return "yeah"; }, }, - "Yeah!" + "Yeah!", ); // true ``` @@ -278,7 +278,7 @@ samsam.match( return "yeah!"; }, }, - /yeah/ + /yeah/, ); // true samsam.match(234, /[a-z]/); // false ``` @@ -296,7 +296,7 @@ samsam.match( return "42"; }, }, - 42 + 42, ); // true samsam.match(234, 1234); // false ``` @@ -328,7 +328,7 @@ samsam.match( }, function () { return true; - } + }, ); // false @@ -367,7 +367,7 @@ samsam.match( }, { name: "Chris", - } + }, ); // false diff --git a/node_modules/@sinonjs/samsam/lib/create-matcher.js b/node_modules/@sinonjs/samsam/lib/create-matcher.js index 8cb704f735..81b49a53e0 100644 --- a/node_modules/@sinonjs/samsam/lib/create-matcher.js +++ b/node_modules/@sinonjs/samsam/lib/create-matcher.js @@ -44,7 +44,7 @@ function createMatcher(expectation, message) { if (arguments.length > 2) { throw new TypeError( - `Expected 1 or 2 arguments, received ${arguments.length}` + `Expected 1 or 2 arguments, received ${arguments.length}`, ); } @@ -89,9 +89,12 @@ createMatcher.falsy = createMatcher(function (actual) { }, "falsy"); createMatcher.same = function (expectation) { - return createMatcher(function (actual) { - return expectation === actual; - }, `same(${valueToString(expectation)})`); + return createMatcher( + function (actual) { + return expectation === actual; + }, + `same(${valueToString(expectation)})`, + ); }; createMatcher.in = function (arrayOfExpectations) { @@ -99,11 +102,14 @@ createMatcher.in = function (arrayOfExpectations) { throw new TypeError("array expected"); } - return createMatcher(function (actual) { - return some(arrayOfExpectations, function (expectation) { - return expectation === actual; - }); - }, `in(${valueToString(arrayOfExpectations)})`); + return createMatcher( + function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, + `in(${valueToString(arrayOfExpectations)})`, + ); }; createMatcher.typeOf = function (type) { @@ -125,12 +131,15 @@ createMatcher.instanceOf = function (type) { type, Symbol.hasInstance, "type", - "[Symbol.hasInstance]" + "[Symbol.hasInstance]", ); } - return createMatcher(function (actual) { - return actual instanceof type; - }, `instanceOf(${functionName(type) || objectToString(type)})`); + return createMatcher( + function (actual) { + return actual instanceof type; + }, + `instanceOf(${functionName(type) || objectToString(type)})`, + ); }; /** @@ -259,111 +268,137 @@ createMatcher.some = function (predicate) { createMatcher.array = createMatcher.typeOf("array"); createMatcher.array.deepEquals = function (expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.length === expectation.length; - return ( - typeOf(actual) === "array" && - sameLength && - every(actual, function (element, index) { - var expected = expectation[index]; - return typeOf(expected) === "array" && - typeOf(element) === "array" - ? createMatcher.array.deepEquals(expected).test(element) - : deepEqual(expected, element); - }) - ); - }, `deepEquals([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, + `deepEquals([${iterableToString(expectation)}])`, + ); }; createMatcher.array.startsWith = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[index] === expectedElement; - }) - ); - }, `startsWith([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, + `startsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.endsWith = function (expectation) { - return createMatcher(function (actual) { - // This indicates the index in which we should start matching - var offset = actual.length - expectation.length; - - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[offset + index] === expectedElement; - }) - ); - }, `endsWith([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; + + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, + `endsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.contains = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement) { - return arrayIndexOf(actual, expectedElement) !== -1; - }) - ); - }, `contains([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, + `contains([${iterableToString(expectation)}])`, + ); }; createMatcher.map = createMatcher.typeOf("map"); createMatcher.map.deepEquals = function mapDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "map" && - sameLength && - every(actual, function (element, key) { - return expectation.has(key) && expectation.get(key) === element; - }) - ); - }, `deepEquals(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return ( + expectation.has(key) && expectation.get(key) === element + ); + }) + ); + }, + `deepEquals(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.map.contains = function mapContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "map" && - every(expectation, function (element, key) { - return actual.has(key) && actual.get(key) === element; - }) - ); - }, `contains(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, + `contains(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.set = createMatcher.typeOf("set"); createMatcher.set.deepEquals = function setDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "set" && - sameLength && - every(actual, function (element) { - return expectation.has(element); - }) - ); - }, `deepEquals(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, + `deepEquals(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.set.contains = function setContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "set" && - every(expectation, function (element) { - return actual.has(element); - }) - ); - }, `contains(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, + `contains(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.bool = createMatcher.typeOf("boolean"); diff --git a/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js b/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js index a3543e0862..20b4d4cf85 100644 --- a/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js +++ b/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js @@ -16,7 +16,7 @@ function assertType(value, type, name) { var actual = typeOf(value); if (actual !== type) { throw new TypeError( - `Expected type of ${name} to be ${type}, but was ${actual}` + `Expected type of ${name} to be ${type}, but was ${actual}`, ); } } diff --git a/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js b/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js index 8c491e7fe8..b25391ca96 100644 --- a/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js +++ b/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js @@ -6,6 +6,7 @@ var typeOf = require("@sinonjs/commons").typeOf; var deepEqualFactory = require("../deep-equal").use; +var identical = require("../identical"); var isMatcher = require("./is-matcher"); var keys = Object.keys; @@ -41,6 +42,9 @@ function matchObject(actual, expectation, matcher) { return false; } } else if (typeOf(exp) === "object") { + if (identical(exp, act)) { + return true; + } if (!matchObject(act, exp, matcher)) { return false; } diff --git a/node_modules/@sinonjs/samsam/lib/create-set.js b/node_modules/@sinonjs/samsam/lib/create-set.js index 54cc5f0108..e03f4c4f15 100644 --- a/node_modules/@sinonjs/samsam/lib/create-set.js +++ b/node_modules/@sinonjs/samsam/lib/create-set.js @@ -17,7 +17,7 @@ var forEach = require("@sinonjs/commons").prototypes.array.forEach; function createSet(array) { if (arguments.length > 0 && !Array.isArray(array)) { throw new TypeError( - "createSet can be called with either no arguments or an Array" + "createSet can be called with either no arguments or an Array", ); } diff --git a/node_modules/@sinonjs/samsam/lib/deep-equal.js b/node_modules/@sinonjs/samsam/lib/deep-equal.js index c4760de6df..6d438bf13a 100644 --- a/node_modules/@sinonjs/samsam/lib/deep-equal.js +++ b/node_modules/@sinonjs/samsam/lib/deep-equal.js @@ -67,7 +67,7 @@ function deepEqualCyclic(actual, expectation, match) { actualObj, expectationObj, actualPath, - expectationPath + expectationPath, ) { // If both are matchers they must be the same instance in order to be // considered equal If we didn't do that we would end up running one @@ -140,7 +140,7 @@ function deepEqualCyclic(actual, expectation, match) { []; var expectationKeysAndSymbols = concat( expectationKeys, - expectationSymbols + expectationSymbols, ); if (isArguments(actualObj) || isArguments(expectationObj)) { @@ -289,7 +289,7 @@ function deepEqualCyclic(actual, expectation, match) { actualValue, expectationValue, newActualPath, - newExpectationPath + newExpectationPath, ); }); })(actual, expectation, "$1", "$2"); diff --git a/node_modules/@sinonjs/samsam/lib/match.js b/node_modules/@sinonjs/samsam/lib/match.js index 1fb17b891e..468bab11b6 100644 --- a/node_modules/@sinonjs/samsam/lib/match.js +++ b/node_modules/@sinonjs/samsam/lib/match.js @@ -70,7 +70,7 @@ function match(object, matcherOrValue) { notNull && indexOf( valueToString(object).toLowerCase(), - matcherOrValue.toLowerCase() + matcherOrValue.toLowerCase(), ) >= 0 ); case "null": @@ -102,7 +102,7 @@ function match(object, matcherOrValue) { /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ if (!engineCanCompareMaps) { throw new Error( - "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances", ); } @@ -111,7 +111,7 @@ function match(object, matcherOrValue) { arrayContains( Array.from(object), Array.from(matcherOrValue), - match + match, ) ); default: diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/LICENSE b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/LICENSE deleted file mode 100644 index 5a77f0a2e6..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2018, Sinon.JS -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/README.md b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/README.md deleted file mode 100644 index 9c420ba5d3..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# commons - -[![CircleCI](https://circleci.com/gh/sinonjs/commons.svg?style=svg)](https://circleci.com/gh/sinonjs/commons) -[![codecov](https://codecov.io/gh/sinonjs/commons/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/commons) -Contributor Covenant - -Simple functions shared among the sinon end user libraries - -## Rules - -- Follows the [Sinon.JS compatibility](https://github.com/sinonjs/sinon/blob/master/CONTRIBUTING.md#compatibility) -- 100% test coverage -- Code formatted using [Prettier](https://prettier.io) -- No side effects welcome! (only pure functions) -- No platform specific functions -- One export per file (any bundler can do tree shaking) diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.js deleted file mode 100644 index 4edb67fa5e..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; - -var every = require("./prototypes/array").every; - -/** - * @private - */ -function hasCallsLeft(callMap, spy) { - if (callMap[spy.id] === undefined) { - callMap[spy.id] = 0; - } - - return callMap[spy.id] < spy.callCount; -} - -/** - * @private - */ -function checkAdjacentCalls(callMap, spy, index, spies) { - var calledBeforeNext = true; - - if (index !== spies.length - 1) { - calledBeforeNext = spy.calledBefore(spies[index + 1]); - } - - if (hasCallsLeft(callMap, spy) && calledBeforeNext) { - callMap[spy.id] += 1; - return true; - } - - return false; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} calledBefore - A method that determines if this proxy was called before another one - * @property {string} id - Some id - * @property {number} callCount - Number of times this proxy has been called - */ - -/** - * Returns true when the spies have been called in the order they were supplied in - * - * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments - * @returns {boolean} true when spies are called in order, false otherwise - */ -function calledInOrder(spies) { - var callMap = {}; - // eslint-disable-next-line no-underscore-dangle - var _spies = arguments.length > 1 ? arguments : spies; - - return every(_spies, checkAdjacentCalls.bind(null, callMap)); -} - -module.exports = calledInOrder; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.test.js deleted file mode 100644 index 5fe66118b8..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/called-in-order.test.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var calledInOrder = require("./called-in-order"); -var sinon = require("@sinonjs/referee-sinon").sinon; - -var testObject1 = { - someFunction: function () { - return; - }, -}; -var testObject2 = { - otherFunction: function () { - return; - }, -}; -var testObject3 = { - thirdFunction: function () { - return; - }, -}; - -function testMethod() { - testObject1.someFunction(); - testObject2.otherFunction(); - testObject2.otherFunction(); - testObject2.otherFunction(); - testObject3.thirdFunction(); -} - -describe("calledInOrder", function () { - beforeEach(function () { - sinon.stub(testObject1, "someFunction"); - sinon.stub(testObject2, "otherFunction"); - sinon.stub(testObject3, "thirdFunction"); - testMethod(); - }); - afterEach(function () { - testObject1.someFunction.restore(); - testObject2.otherFunction.restore(); - testObject3.thirdFunction.restore(); - }); - - describe("given single array argument", function () { - describe("when stubs were called in expected order", function () { - it("returns true", function () { - assert.isTrue( - calledInOrder([ - testObject1.someFunction, - testObject2.otherFunction, - ]) - ); - assert.isTrue( - calledInOrder([ - testObject1.someFunction, - testObject2.otherFunction, - testObject2.otherFunction, - testObject3.thirdFunction, - ]) - ); - }); - }); - - describe("when stubs were called in unexpected order", function () { - it("returns false", function () { - assert.isFalse( - calledInOrder([ - testObject2.otherFunction, - testObject1.someFunction, - ]) - ); - assert.isFalse( - calledInOrder([ - testObject2.otherFunction, - testObject1.someFunction, - testObject1.someFunction, - testObject3.thirdFunction, - ]) - ); - }); - }); - }); - - describe("given multiple arguments", function () { - describe("when stubs were called in expected order", function () { - it("returns true", function () { - assert.isTrue( - calledInOrder( - testObject1.someFunction, - testObject2.otherFunction - ) - ); - assert.isTrue( - calledInOrder( - testObject1.someFunction, - testObject2.otherFunction, - testObject3.thirdFunction - ) - ); - }); - }); - - describe("when stubs were called in unexpected order", function () { - it("returns false", function () { - assert.isFalse( - calledInOrder( - testObject2.otherFunction, - testObject1.someFunction - ) - ); - assert.isFalse( - calledInOrder( - testObject2.otherFunction, - testObject1.someFunction, - testObject3.thirdFunction - ) - ); - }); - }); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.js deleted file mode 100644 index bcd26baeaa..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -var functionName = require("./function-name"); - -/** - * Returns a display name for a value from a constructor - * - * @param {object} value A value to examine - * @returns {(string|null)} A string or null - */ -function className(value) { - return ( - (value.constructor && value.constructor.name) || - // The next branch is for IE11 support only: - // Because the name property is not set on the prototype - // of the Function object, we finally try to grab the - // name from its definition. This will never be reached - // in node, so we are not able to test this properly. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name - (typeof value.constructor === "function" && - /* istanbul ignore next */ - functionName(value.constructor)) || - null - ); -} - -module.exports = className; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.test.js deleted file mode 100644 index 994f21b817..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/class-name.test.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -/* eslint-disable no-empty-function */ - -var assert = require("@sinonjs/referee").assert; -var className = require("./class-name"); - -describe("className", function () { - it("returns the class name of an instance", function () { - // Because eslint-config-sinon disables es6, we can't - // use a class definition here - // https://github.com/sinonjs/eslint-config-sinon/blob/master/index.js - // var instance = new (class TestClass {})(); - var instance = new (function TestClass() {})(); - var name = className(instance); - assert.equals(name, "TestClass"); - }); - - it("returns 'Object' for {}", function () { - var name = className({}); - assert.equals(name, "Object"); - }); - - it("returns null for an object that has no prototype", function () { - var obj = Object.create(null); - var name = className(obj); - assert.equals(name, null); - }); - - it("returns null for an object whose prototype was mangled", function () { - // This is what Node v6 and v7 do for objects returned by querystring.parse() - function MangledObject() {} - MangledObject.prototype = Object.create(null); - var obj = new MangledObject(); - var name = className(obj); - assert.equals(name, null); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.js deleted file mode 100644 index 4222725427..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.js +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable no-console */ -"use strict"; - -/** - * Returns a function that will invoke the supplied function and print a - * deprecation warning to the console each time it is called. - * - * @param {Function} func - * @param {string} msg - * @returns {Function} - */ -exports.wrap = function (func, msg) { - var wrapped = function () { - exports.printWarning(msg); - return func.apply(this, arguments); - }; - if (func.prototype) { - wrapped.prototype = func.prototype; - } - return wrapped; -}; - -/** - * Returns a string which can be supplied to `wrap()` to notify the user that a - * particular part of the sinon API has been deprecated. - * - * @param {string} packageName - * @param {string} funcName - * @returns {string} - */ -exports.defaultMsg = function (packageName, funcName) { - return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; -}; - -/** - * Prints a warning on the console, when it exists - * - * @param {string} msg - * @returns {undefined} - */ -exports.printWarning = function (msg) { - /* istanbul ignore next */ - if (typeof process === "object" && process.emitWarning) { - // Emit Warnings in Node - process.emitWarning(msg); - } else if (console.info) { - console.info(msg); - } else { - console.log(msg); - } -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.test.js deleted file mode 100644 index 275d8b1c92..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/deprecated.test.js +++ /dev/null @@ -1,101 +0,0 @@ -/* eslint-disable no-console */ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var sinon = require("@sinonjs/referee-sinon").sinon; - -var deprecated = require("./deprecated"); - -var msg = "test"; - -describe("deprecated", function () { - describe("defaultMsg", function () { - it("should return a string", function () { - assert.equals( - deprecated.defaultMsg("sinon", "someFunc"), - "sinon.someFunc is deprecated and will be removed from the public API in a future version of sinon." - ); - }); - }); - - describe("printWarning", function () { - beforeEach(function () { - sinon.replace(process, "emitWarning", sinon.fake()); - }); - - afterEach(sinon.restore); - - describe("when `process.emitWarning` is defined", function () { - it("should call process.emitWarning with a msg", function () { - deprecated.printWarning(msg); - assert.calledOnceWith(process.emitWarning, msg); - }); - }); - - describe("when `process.emitWarning` is undefined", function () { - beforeEach(function () { - sinon.replace(console, "info", sinon.fake()); - sinon.replace(console, "log", sinon.fake()); - process.emitWarning = undefined; - }); - - afterEach(sinon.restore); - - describe("when `console.info` is defined", function () { - it("should call `console.info` with a message", function () { - deprecated.printWarning(msg); - assert.calledOnceWith(console.info, msg); - }); - }); - - describe("when `console.info` is undefined", function () { - it("should call `console.log` with a message", function () { - console.info = undefined; - deprecated.printWarning(msg); - assert.calledOnceWith(console.log, msg); - }); - }); - }); - }); - - describe("wrap", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - var method = sinon.fake(); - var wrapped; - - beforeEach(function () { - wrapped = deprecated.wrap(method, msg); - }); - - it("should return a wrapper function", function () { - assert.match(wrapped, sinon.match.func); - }); - - it("should assign the prototype of the passed method", function () { - assert.equals(method.prototype, wrapped.prototype); - }); - - context("when the passed method has falsy prototype", function () { - it("should not be assigned to the wrapped method", function () { - method.prototype = null; - wrapped = deprecated.wrap(method, msg); - assert.match(wrapped.prototype, sinon.match.object); - }); - }); - - context("when invoking the wrapped function", function () { - before(function () { - sinon.replace(deprecated, "printWarning", sinon.fake()); - wrapped({}); - }); - - it("should call `printWarning` before invoking", function () { - assert.calledOnceWith(deprecated.printWarning, msg); - }); - - it("should invoke the passed method with the given arguments", function () { - assert.calledOnceWith(method, {}); - }); - }); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.js deleted file mode 100644 index 00bf304e28..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -/** - * Returns true when fn returns true for all members of obj. - * This is an every implementation that works for all iterables - * - * @param {object} obj - * @param {Function} fn - * @returns {boolean} - */ -module.exports = function every(obj, fn) { - var pass = true; - - try { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - obj.forEach(function () { - if (!fn.apply(this, arguments)) { - // Throwing an error is the only way to break `forEach` - throw new Error(); - } - }); - } catch (e) { - pass = false; - } - - return pass; -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.test.js deleted file mode 100644 index e054a14de5..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/every.test.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var sinon = require("@sinonjs/referee-sinon").sinon; -var every = require("./every"); - -describe("util/core/every", function () { - it("returns true when the callback function returns true for every element in an iterable", function () { - var obj = [true, true, true, true]; - var allTrue = every(obj, function (val) { - return val; - }); - - assert(allTrue); - }); - - it("returns false when the callback function returns false for any element in an iterable", function () { - var obj = [true, true, true, false]; - var result = every(obj, function (val) { - return val; - }); - - assert.isFalse(result); - }); - - it("calls the given callback once for each item in an iterable until it returns false", function () { - var iterableOne = [true, true, true, true]; - var iterableTwo = [true, true, false, true]; - var callback = sinon.spy(function (val) { - return val; - }); - - every(iterableOne, callback); - assert.equals(callback.callCount, 4); - - callback.resetHistory(); - - every(iterableTwo, callback); - assert.equals(callback.callCount, 3); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.js deleted file mode 100644 index 199b04e0d1..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -/** - * Returns a display name for a function - * - * @param {Function} func - * @returns {string} - */ -module.exports = function functionName(func) { - if (!func) { - return ""; - } - - try { - return ( - func.displayName || - func.name || - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - (String(func).match(/function ([^\s(]+)/) || [])[1] - ); - } catch (e) { - // Stringify may fail and we might get an exception, as a last-last - // resort fall back to empty string. - return ""; - } -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.test.js deleted file mode 100644 index 0798b4e7f7..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/function-name.test.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -var jsc = require("jsverify"); -var refute = require("@sinonjs/referee-sinon").refute; - -var functionName = require("./function-name"); - -describe("function-name", function () { - it("should return empty string if func is falsy", function () { - jsc.assertForall("falsy", function (fn) { - return functionName(fn) === ""; - }); - }); - - it("should use displayName by default", function () { - jsc.assertForall("nestring", function (displayName) { - var fn = { displayName: displayName }; - - return functionName(fn) === fn.displayName; - }); - }); - - it("should use name if displayName is not available", function () { - jsc.assertForall("nestring", function (name) { - var fn = { name: name }; - - return functionName(fn) === fn.name; - }); - }); - - it("should fallback to string parsing", function () { - jsc.assertForall("nat", function (naturalNumber) { - var name = `fn${naturalNumber}`; - var fn = { - toString: function () { - return `\nfunction ${name}`; - }, - }; - - return functionName(fn) === name; - }); - }); - - it("should not fail when a name cannot be found", function () { - refute.exception(function () { - var fn = { - toString: function () { - return "\nfunction ("; - }, - }; - - functionName(fn); - }); - }); - - it("should not fail when toString is undefined", function () { - refute.exception(function () { - functionName(Object.create(null)); - }); - }); - - it("should not fail when toString throws", function () { - refute.exception(function () { - var fn; - try { - // eslint-disable-next-line no-eval - fn = eval("(function*() {})")().constructor; - } catch (e) { - // env doesn't support generators - return; - } - - functionName(fn); - }); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.js deleted file mode 100644 index 51715a27c8..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -/** - * A reference to the global object - * - * @type {object} globalObject - */ -var globalObject; - -/* istanbul ignore else */ -if (typeof global !== "undefined") { - // Node - globalObject = global; -} else if (typeof window !== "undefined") { - // Browser - globalObject = window; -} else { - // WebWorker - globalObject = self; -} - -module.exports = globalObject; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.test.js deleted file mode 100644 index 4fa73ebcf6..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/global.test.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var globalObject = require("./global"); - -describe("global", function () { - before(function () { - if (typeof global === "undefined") { - this.skip(); - } - }); - - it("is same as global", function () { - assert.same(globalObject, global); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.js deleted file mode 100644 index 870df32c80..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -module.exports = { - global: require("./global"), - calledInOrder: require("./called-in-order"), - className: require("./class-name"), - deprecated: require("./deprecated"), - every: require("./every"), - functionName: require("./function-name"), - orderByFirstCall: require("./order-by-first-call"), - prototypes: require("./prototypes"), - typeOf: require("./type-of"), - valueToString: require("./value-to-string"), -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.test.js deleted file mode 100644 index e79aa7ee0b..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/index.test.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var index = require("./index"); - -var expectedMethods = [ - "calledInOrder", - "className", - "every", - "functionName", - "orderByFirstCall", - "typeOf", - "valueToString", -]; -var expectedObjectProperties = ["deprecated", "prototypes"]; - -describe("package", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - expectedMethods.forEach(function (name) { - it(`should export a method named ${name}`, function () { - assert.isFunction(index[name]); - }); - }); - - // eslint-disable-next-line mocha/no-setup-in-describe - expectedObjectProperties.forEach(function (name) { - it(`should export an object property named ${name}`, function () { - assert.isObject(index[name]); - }); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.js deleted file mode 100644 index c3d47edfeb..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; - -var sort = require("./prototypes/array").sort; -var slice = require("./prototypes/array").slice; - -/** - * @private - */ -function comparator(a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = (aCall && aCall.callId) || -1; - var bId = (bCall && bCall.callId) || -1; - - return aId < bId ? -1 : 1; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} getCall - A method that can return the first call - */ - -/** - * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call - * - * @param {SinonProxy[] | SinonProxy} spies - * @returns {SinonProxy[]} - */ -function orderByFirstCall(spies) { - return sort(slice(spies), comparator); -} - -module.exports = orderByFirstCall; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js deleted file mode 100644 index cbc71beb28..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var knuthShuffle = require("knuth-shuffle").knuthShuffle; -var sinon = require("@sinonjs/referee-sinon").sinon; -var orderByFirstCall = require("./order-by-first-call"); - -describe("orderByFirstCall", function () { - it("should order an Array of spies by the callId of the first call, ascending", function () { - // create an array of spies - var spies = [ - sinon.spy(), - sinon.spy(), - sinon.spy(), - sinon.spy(), - sinon.spy(), - sinon.spy(), - ]; - - // call all the spies - spies.forEach(function (spy) { - spy(); - }); - - // add a few uncalled spies - spies.push(sinon.spy()); - spies.push(sinon.spy()); - - // randomise the order of the spies - knuthShuffle(spies); - - var sortedSpies = orderByFirstCall(spies); - - assert.equals(sortedSpies.length, spies.length); - - var orderedByFirstCall = sortedSpies.every(function (spy, index) { - if (index + 1 === sortedSpies.length) { - return true; - } - var nextSpy = sortedSpies[index + 1]; - - // uncalled spies should be ordered first - if (!spy.called) { - return true; - } - - return spy.calledImmediatelyBefore(nextSpy); - }); - - assert.isTrue(orderedByFirstCall); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/README.md b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/README.md deleted file mode 100644 index c3d92fe80a..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Prototypes - -The functions in this folder are to be use for keeping cached references to the built-in prototypes, so that people can't inadvertently break the library by making mistakes in userland. - -See https://github.com/sinonjs/sinon/pull/1523 - -## Without cached references - -```js -// in userland, the library user needs to replace the filter method on -// Array.prototype -var array = [1, 2, 3]; -sinon.replace(array, "filter", sinon.fake.returns(2)); - -// in a sinon module, the library author needs to use the filter method -var someArray = ["a", "b", 42, "c"]; -var answer = filter(someArray, function (v) { - return v === 42; -}); - -console.log(answer); -// => 2 -``` - -## With cached references - -```js -// in userland, the library user needs to replace the filter method on -// Array.prototype -var array = [1, 2, 3]; -sinon.replace(array, "filter", sinon.fake.returns(2)); - -// in a sinon module, the library author needs to use the filter method -// get a reference to the original Array.prototype.filter -var filter = require("@sinonjs/commons").prototypes.array.filter; -var someArray = ["a", "b", 42, "c"]; -var answer = filter(someArray, function (v) { - return v === 42; -}); - -console.log(answer); -// => 42 -``` diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/array.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/array.js deleted file mode 100644 index 381a032a96..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/array.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(Array.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js deleted file mode 100644 index 38549c19da..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; - -var call = Function.call; -var throwsOnProto = require("./throws-on-proto"); - -var disallowedProperties = [ - // ignore size because it throws from Map - "size", - "caller", - "callee", - "arguments", -]; - -// This branch is covered when tests are run with `--disable-proto=throw`, -// however we can test both branches at the same time, so this is ignored -/* istanbul ignore next */ -if (throwsOnProto) { - disallowedProperties.push("__proto__"); -} - -module.exports = function copyPrototypeMethods(prototype) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - return Object.getOwnPropertyNames(prototype).reduce(function ( - result, - name - ) { - if (disallowedProperties.includes(name)) { - return result; - } - - if (typeof prototype[name] !== "function") { - return result; - } - - result[name] = call.bind(prototype[name]); - - return result; - }, - Object.create(null)); -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js deleted file mode 100644 index 31de7cd304..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -var refute = require("@sinonjs/referee-sinon").refute; -var copyPrototypeMethods = require("./copy-prototype-methods"); - -describe("copyPrototypeMethods", function () { - it("does not throw for Map", function () { - refute.exception(function () { - copyPrototypeMethods(Map.prototype); - }); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/function.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/function.js deleted file mode 100644 index a75c25d819..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/function.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(Function.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.js deleted file mode 100644 index ab766bf8d6..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -module.exports = { - array: require("./array"), - function: require("./function"), - map: require("./map"), - object: require("./object"), - set: require("./set"), - string: require("./string"), -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.test.js deleted file mode 100644 index 2b3c2625f2..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/index.test.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; - -var arrayProto = require("./index").array; -var functionProto = require("./index").function; -var mapProto = require("./index").map; -var objectProto = require("./index").object; -var setProto = require("./index").set; -var stringProto = require("./index").string; -var throwsOnProto = require("./throws-on-proto"); - -describe("prototypes", function () { - describe(".array", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(arrayProto, Array); - }); - describe(".function", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(functionProto, Function); - }); - describe(".map", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(mapProto, Map); - }); - describe(".object", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(objectProto, Object); - }); - describe(".set", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(setProto, Set); - }); - describe(".string", function () { - // eslint-disable-next-line mocha/no-setup-in-describe - verifyProperties(stringProto, String); - }); -}); - -function verifyProperties(p, origin) { - var disallowedProperties = ["size", "caller", "callee", "arguments"]; - if (throwsOnProto) { - disallowedProperties.push("__proto__"); - } - - it("should have all the methods of the origin prototype", function () { - var methodNames = Object.getOwnPropertyNames(origin.prototype).filter( - function (name) { - if (disallowedProperties.includes(name)) { - return false; - } - - return typeof origin.prototype[name] === "function"; - } - ); - - methodNames.forEach(function (name) { - assert.isTrue(Object.prototype.hasOwnProperty.call(p, name), name); - }); - }); -} diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/map.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/map.js deleted file mode 100644 index 91ec65e238..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/map.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(Map.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/object.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/object.js deleted file mode 100644 index eab7faa8f0..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/object.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(Object.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/set.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/set.js deleted file mode 100644 index 7495c3b96f..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/set.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(Set.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/string.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/string.js deleted file mode 100644 index 3917fe9b04..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/string.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var copyPrototype = require("./copy-prototype-methods"); - -module.exports = copyPrototype(String.prototype); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js deleted file mode 100644 index eb7a189b11..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; - -/** - * Is true when the environment causes an error to be thrown for accessing the - * __proto__ property. - * - * This is necessary in order to support `node --disable-proto=throw`. - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto - * - * @type {boolean} - */ -let throwsOnProto; -try { - const object = {}; - // eslint-disable-next-line no-proto, no-unused-expressions - object.__proto__; - throwsOnProto = false; -} catch (_) { - // This branch is covered when tests are run with `--disable-proto=throw`, - // however we can test both branches at the same time, so this is ignored - /* istanbul ignore next */ - throwsOnProto = true; -} - -module.exports = throwsOnProto; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.js deleted file mode 100644 index 97a0bb9cb9..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var type = require("type-detect"); - -/** - * Returns the lower-case result of running type from type-detect on the value - * - * @param {*} value - * @returns {string} - */ -module.exports = function typeOf(value) { - return type(value).toLowerCase(); -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.test.js deleted file mode 100644 index ba377b9447..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/type-of.test.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var typeOf = require("./type-of"); - -describe("typeOf", function () { - it("returns boolean", function () { - assert.equals(typeOf(false), "boolean"); - }); - - it("returns string", function () { - assert.equals(typeOf("Sinon.JS"), "string"); - }); - - it("returns number", function () { - assert.equals(typeOf(123), "number"); - }); - - it("returns object", function () { - assert.equals(typeOf({}), "object"); - }); - - it("returns function", function () { - assert.equals( - typeOf(function () { - return undefined; - }), - "function" - ); - }); - - it("returns undefined", function () { - assert.equals(typeOf(undefined), "undefined"); - }); - - it("returns null", function () { - assert.equals(typeOf(null), "null"); - }); - - it("returns array", function () { - assert.equals(typeOf([]), "array"); - }); - - it("returns regexp", function () { - assert.equals(typeOf(/.*/), "regexp"); - }); - - it("returns date", function () { - assert.equals(typeOf(new Date()), "date"); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.js deleted file mode 100644 index fb14782be5..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -/** - * Returns a string representation of the value - * - * @param {*} value - * @returns {string} - */ -function valueToString(value) { - if (value && value.toString) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - return value.toString(); - } - return String(value); -} - -module.exports = valueToString; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.test.js b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.test.js deleted file mode 100644 index 645644714d..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/lib/value-to-string.test.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -var assert = require("@sinonjs/referee-sinon").assert; -var valueToString = require("./value-to-string"); - -describe("util/core/valueToString", function () { - it("returns string representation of an object", function () { - var obj = {}; - - assert.equals(valueToString(obj), obj.toString()); - }); - - it("returns 'null' for literal null'", function () { - assert.equals(valueToString(null), "null"); - }); - - it("returns 'undefined' for literal undefined", function () { - assert.equals(valueToString(undefined), "undefined"); - }); -}); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/package.json b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/package.json deleted file mode 100644 index 9b68bf2659..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@sinonjs/commons", - "version": "2.0.0", - "description": "Simple functions shared among the sinon end user libraries", - "main": "lib/index.js", - "types": "./types/index.d.ts", - "scripts": { - "build": "rm -rf types && tsc", - "lint": "eslint .", - "precommit": "lint-staged", - "test": "mocha --recursive -R dot \"lib/**/*.test.js\"", - "test-check-coverage": "npm run test-coverage && nyc check-coverage --branches 100 --functions 100 --lines 100", - "test-coverage": "nyc --reporter text --reporter html --reporter lcovonly npm run test", - "prepublishOnly": "npm run build", - "prettier:check": "prettier --check '**/*.{js,css,md}'", - "prettier:write": "prettier --write '**/*.{js,css,md}'", - "preversion": "npm run test-check-coverage", - "version": "changes --commits --footer", - "postversion": "git push --follow-tags && npm publish", - "prepare": "husky install" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/sinonjs/commons.git" - }, - "files": [ - "lib", - "types" - ], - "author": "", - "license": "BSD-3-Clause", - "bugs": { - "url": "https://github.com/sinonjs/commons/issues" - }, - "homepage": "https://github.com/sinonjs/commons#readme", - "lint-staged": { - "*.{js,css,md}": "prettier --check", - "*.js": "eslint" - }, - "devDependencies": { - "@sinonjs/eslint-config": "^4.0.6", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.0", - "@sinonjs/referee-sinon": "^10.1.0", - "@studio/changes": "^2.2.0", - "husky": "^6.0.0", - "jsverify": "0.8.4", - "knuth-shuffle": "^1.0.8", - "lint-staged": "^13.0.3", - "mocha": "^10.1.0", - "nyc": "^15.1.0", - "prettier": "^2.7.1", - "typescript": "^4.8.4" - }, - "dependencies": { - "type-detect": "4.0.8" - } -} diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/called-in-order.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/called-in-order.d.ts deleted file mode 100644 index 1a4508be95..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/called-in-order.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -export = calledInOrder; -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} calledBefore - A method that determines if this proxy was called before another one - * @property {string} id - Some id - * @property {number} callCount - Number of times this proxy has been called - */ -/** - * Returns true when the spies have been called in the order they were supplied in - * - * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments - * @returns {boolean} true when spies are called in order, false otherwise - */ -declare function calledInOrder(spies: SinonProxy[] | SinonProxy, ...args: any[]): boolean; -declare namespace calledInOrder { - export { SinonProxy }; -} -/** - * A Sinon proxy object (fake, spy, stub) - */ -type SinonProxy = { - /** - * - A method that determines if this proxy was called before another one - */ - calledBefore: Function; - /** - * - Some id - */ - id: string; - /** - * - Number of times this proxy has been called - */ - callCount: number; -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/class-name.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/class-name.d.ts deleted file mode 100644 index df3687b9b2..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/class-name.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export = className; -/** - * Returns a display name for a value from a constructor - * - * @param {object} value A value to examine - * @returns {(string|null)} A string or null - */ -declare function className(value: object): (string | null); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/deprecated.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/deprecated.d.ts deleted file mode 100644 index 81a35bf836..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/deprecated.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function wrap(func: Function, msg: string): Function; -export function defaultMsg(packageName: string, funcName: string): string; -export function printWarning(msg: string): undefined; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/every.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/every.d.ts deleted file mode 100644 index bcfa64e017..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/every.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function _exports(obj: object, fn: Function): boolean; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/function-name.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/function-name.d.ts deleted file mode 100644 index f27d519a9f..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/function-name.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function _exports(func: Function): string; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/global.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/global.d.ts deleted file mode 100644 index 0f54a635dc..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/global.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export = globalObject; -/** - * A reference to the global object - * - * @type {object} globalObject - */ -declare var globalObject: object; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/index.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/index.d.ts deleted file mode 100644 index 7d675b1819..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const global: any; -export const calledInOrder: typeof import("./called-in-order"); -export const className: typeof import("./class-name"); -export const deprecated: typeof import("./deprecated"); -export const every: (obj: any, fn: Function) => boolean; -export const functionName: (func: Function) => string; -export const orderByFirstCall: typeof import("./order-by-first-call"); -export const prototypes: { - array: any; - function: any; - map: any; - object: any; - set: any; - string: any; -}; -export const typeOf: (value: any) => string; -export const valueToString: typeof import("./value-to-string"); diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts deleted file mode 100644 index a9a6037d0d..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -export = orderByFirstCall; -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} getCall - A method that can return the first call - */ -/** - * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call - * - * @param {SinonProxy[] | SinonProxy} spies - * @returns {SinonProxy[]} - */ -declare function orderByFirstCall(spies: SinonProxy[] | SinonProxy): SinonProxy[]; -declare namespace orderByFirstCall { - export { SinonProxy }; -} -/** - * A Sinon proxy object (fake, spy, stub) - */ -type SinonProxy = { - /** - * - A method that can return the first call - */ - getCall: Function; -}; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/array.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/array.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/array.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts deleted file mode 100644 index 1479b93cf9..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function _exports(prototype: any): any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/function.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/function.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/function.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/index.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/index.d.ts deleted file mode 100644 index 0026d6c2f5..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare const array: any; -declare const _function: any; -export { _function as function }; -export declare const map: any; -export declare const object: any; -export declare const set: any; -export declare const string: any; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/map.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/map.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/map.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/object.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/object.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/object.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/set.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/set.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/set.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/string.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/string.d.ts deleted file mode 100644 index 1cce635071..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/string.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: any; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts deleted file mode 100644 index 6cc97f4a15..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export = throwsOnProto; -/** - * Is true when the environment causes an error to be thrown for accessing the - * __proto__ property. - * - * This is necessary in order to support `node --disable-proto=throw`. - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto - * - * @type {boolean} - */ -declare let throwsOnProto: boolean; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/type-of.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/type-of.d.ts deleted file mode 100644 index fc72887c0e..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/type-of.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function _exports(value: any): string; -export = _exports; diff --git a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/value-to-string.d.ts b/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/value-to-string.d.ts deleted file mode 100644 index 19b086cd28..0000000000 --- a/node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons/types/value-to-string.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export = valueToString; -/** - * Returns a string representation of the value - * - * @param {*} value - * @returns {string} - */ -declare function valueToString(value: any): string; diff --git a/node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/LICENSE b/node_modules/@sinonjs/samsam/node_modules/type-detect/LICENSE similarity index 84% rename from node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/LICENSE rename to node_modules/@sinonjs/samsam/node_modules/type-detect/LICENSE index a1164108d4..7ea799f0ef 100644 --- a/node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin/LICENSE +++ b/node_modules/@sinonjs/samsam/node_modules/type-detect/LICENSE @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2019 typescript-eslint and other contributors +Copyright (c) 2013 Jake Luer (http://alogicalparadox.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 @@ -9,13 +7,13 @@ 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 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/@sinonjs/samsam/node_modules/type-detect/README.md b/node_modules/@sinonjs/samsam/node_modules/type-detect/README.md new file mode 100644 index 0000000000..beb645ed6e --- /dev/null +++ b/node_modules/@sinonjs/samsam/node_modules/type-detect/README.md @@ -0,0 +1,235 @@ +

+ + type-detect + +

+
+

+ Improved typeof detection for node, Deno, and the browser. +

+ +

+ + license:mit + + + npm:? + + + build:? + + + coverage:? + + + dependencies:? + + + devDependencies:? + +
+ + Join the Slack chat + + + Join the Gitter chat + +

+
+ + + + + + + + + + + + + + +
Supported Browsers
Chrome Edge Firefox Safari IE
9, 10, 11
+
+ +## What is Type-Detect? + +Type Detect is a module which you can use to detect the type of a given object. It returns a string representation of the object's type, either using [`typeof`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-typeof-operator) or [`@@toStringTag`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-symbol.tostringtag). It also normalizes some object names for consistency among browsers. + +## Why? + +The `typeof` operator will only specify primitive values; everything else is `"object"` (including `null`, arrays, regexps, etc). Many developers use `Object.prototype.toString()` - which is a fine alternative and returns many more types (null returns `[object Null]`, Arrays as `[object Array]`, regexps as `[object RegExp]` etc). + +Sadly, `Object.prototype.toString` is slow, and buggy. By slow - we mean it is slower than `typeof`. By buggy - we mean that some values (like Promises, the global object, iterators, dataviews, a bunch of HTML elements) all report different things in different browsers. + +`type-detect` fixes all of the shortcomings with `Object.prototype.toString`. We have extra code to speed up checks of JS and DOM objects, as much as 20-30x faster for some values. `type-detect` also fixes any consistencies with these objects. + +## Installation + +### Node.js + +`type-detect` is available on [npm](http://npmjs.org). To install it, type: + + $ npm install type-detect + +### Deno + +`type-detect` can be imported with the following line: + +```js +import type from 'https://deno.land/x/type_detect@v4.1.0/index.ts' +``` + +### Browsers + +You can also use it within the browser; install via npm and use the `type-detect.js` file found within the download. For example: + +```html + +``` + +## Usage + +The primary export of `type-detect` is function that can serve as a replacement for `typeof`. The results of this function will be more specific than that of native `typeof`. + +```js +var type = require('type-detect'); +``` +Or, in the browser use case, after the diff --git a/node_modules/object.assign/test/tests.js b/node_modules/object.assign/test/tests.js index 40b0b80f55..eff2793d30 100644 --- a/node_modules/object.assign/test/tests.js +++ b/node_modules/object.assign/test/tests.js @@ -2,7 +2,7 @@ var hasSymbols = require('has-symbols/shams')(); var forEach = require('for-each'); -var has = require('has'); +var hasOwn = require('hasown'); var mockProperty = require('mock-property'); module.exports = function (assign, t) { @@ -110,7 +110,7 @@ module.exports = function (assign, t) { var target = {}; assign(target, window.location); for (var prop in window.location) { - if (has(window.location, prop)) { + if (hasOwn(window.location, prop)) { st.deepEqual(target[prop], window.location[prop], prop + ' is copied'); } } diff --git a/node_modules/object.fromentries/CHANGELOG.md b/node_modules/object.fromentries/CHANGELOG.md index dc9fcd0967..8751151c76 100644 --- a/node_modules/object.fromentries/CHANGELOG.md +++ b/node_modules/object.fromentries/CHANGELOG.md @@ -5,6 +5,15 @@ 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). +## [v2.0.8](https://github.com/es-shims/Object.fromEntries/compare/v2.0.7...v2.0.8) - 2024-03-18 + +### Commits + +- [actions] remove redundant finisher [`70e8717`](https://github.com/es-shims/Object.fromEntries/commit/70e8717d348e7d2b919c48ce7ab8cdc403664250) +- [Deps] update `call-bind`, `define-properties`, `es-abstract` [`f4b1a93`](https://github.com/es-shims/Object.fromEntries/commit/f4b1a93c665224e02724d3984eac0ce8508407cc) +- [Refactor] use `es-object-atoms` where possible [`252ffa7`](https://github.com/es-shims/Object.fromEntries/commit/252ffa73b503b29a7751730f5bca52f5136469e2) +- [Dev Deps] update `aud`, `tape` [`200ccd5`](https://github.com/es-shims/Object.fromEntries/commit/200ccd563a4bf5a55603be7877646dae1f67675c) + ## [v2.0.7](https://github.com/es-shims/Object.fromEntries/compare/v2.0.6...v2.0.7) - 2023-08-28 ### Commits diff --git a/node_modules/object.fromentries/implementation.js b/node_modules/object.fromentries/implementation.js index 951d1ed4c1..b9a98571ca 100644 --- a/node_modules/object.fromentries/implementation.js +++ b/node_modules/object.fromentries/implementation.js @@ -1,9 +1,9 @@ 'use strict'; -var AddEntriesFromIterable = require('es-abstract/2023/AddEntriesFromIterable'); -var CreateDataPropertyOrThrow = require('es-abstract/2023/CreateDataPropertyOrThrow'); -var RequireObjectCoercible = require('es-abstract/2023/RequireObjectCoercible'); -var ToPropertyKey = require('es-abstract/2023/ToPropertyKey'); +var AddEntriesFromIterable = require('es-abstract/2024/AddEntriesFromIterable'); +var CreateDataPropertyOrThrow = require('es-abstract/2024/CreateDataPropertyOrThrow'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); +var ToPropertyKey = require('es-abstract/2024/ToPropertyKey'); var adder = function addDataProperty(key, value) { var O = this; // eslint-disable-line no-invalid-this diff --git a/node_modules/object.fromentries/package.json b/node_modules/object.fromentries/package.json index 82986ed9bc..835559782c 100644 --- a/node_modules/object.fromentries/package.json +++ b/node_modules/object.fromentries/package.json @@ -1,6 +1,6 @@ { "name": "object.fromentries", - "version": "2.0.7", + "version": "2.0.8", "author": "Jordan Harband ", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -41,21 +41,22 @@ "es-shim API" ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "devDependencies": { "@es-shims/api": "^2.4.2", "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.3", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.6" + "tape": "^5.7.5" }, "testling": { "files": "test/index.js", diff --git a/node_modules/object.groupby/.eslintrc b/node_modules/object.groupby/.eslintrc index 1222049615..3210bb0a78 100644 --- a/node_modules/object.groupby/.eslintrc +++ b/node_modules/object.groupby/.eslintrc @@ -9,25 +9,9 @@ "max-lines-per-function": "off", "new-cap": ["error", { "capIsNewExceptions": [ - "AddValueToKeyedGroup", - "Call", "CreateDataPropertyOrThrow", - "GetIntrinsic", - "GetIterator", - "GetMethod", "GroupBy", - "IsCallable", - "IteratorClose", - "IteratorComplete", - "IteratorNext", - "IteratorStep", - "IteratorValue", "OrdinaryObjectCreate", - "RequireObjectCoercible", - "ThrowCompletion", - "ToPropertyKey", - "ToString", - "Type", ], }], }, diff --git a/node_modules/object.groupby/CHANGELOG.md b/node_modules/object.groupby/CHANGELOG.md index 2b2f4baff2..04136f0f43 100644 --- a/node_modules/object.groupby/CHANGELOG.md +++ b/node_modules/object.groupby/CHANGELOG.md @@ -5,6 +5,23 @@ 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.3](https://github.com/es-shims/Object.groupBy/compare/v1.0.2...v1.0.3) - 2024-03-18 + +### Commits + +- [Deps] update `call-bind`, `es-abstract` [`f1d3e70`](https://github.com/es-shims/Object.groupBy/commit/f1d3e701aff0a36e4d7373059812a9b978c7ad7f) +- [Dev Deps] update `tape` [`272a736`](https://github.com/es-shims/Object.groupBy/commit/272a73672f27f90fd6d5054ca13e039c45815a8a) +- [meta] add missing `engines.node` [`7a9c8b0`](https://github.com/es-shims/Object.groupBy/commit/7a9c8b0f636a5703ea923c9d0721fbf5861c6949) + +## [v1.0.2](https://github.com/es-shims/Object.groupBy/compare/v1.0.1...v1.0.2) - 2024-02-04 + +### Commits + +- [Refactor] use `es-errors` where possible, so things that only need those do not need `get-intrinsic` [`a6c01d0`](https://github.com/es-shims/Object.groupBy/commit/a6c01d0ec46e7bb5ac68e8bfdce3a64fddc6b0a1) +- [Deps] update `call-bind`, `define-properties`, `es-abstract`, `get-intrinsic` [`65383da`](https://github.com/es-shims/Object.groupBy/commit/65383dad0b036ad3459def995c223a4afb1f6a50) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`e8aeb5b`](https://github.com/es-shims/Object.groupBy/commit/e8aeb5b7b1d88bfbe8be1da369a374ec36cb459f) +- [Robustness] `filter` is not available pre-ES5 [`8f185b8`](https://github.com/es-shims/Object.groupBy/commit/8f185b851f155e41442714bea792b07df778f986) + ## [v1.0.1](https://github.com/es-shims/Object.groupBy/compare/v1.0.0...v1.0.1) - 2023-08-28 ### Commits diff --git a/node_modules/object.groupby/aos/AddValueToKeyedGroup.js b/node_modules/object.groupby/aos/AddValueToKeyedGroup.js deleted file mode 100644 index c574f53f03..0000000000 --- a/node_modules/object.groupby/aos/AddValueToKeyedGroup.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var GetIntrinsic = require('get-intrinsic'); -var SameValue = require('es-abstract/2023/SameValue'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $filter = callBound('Array.prototype.filter'); -var $push = callBound('Array.prototype.push'); - -module.exports = function AddValueToKeyedGroup(groups, key, value) { - var found = $filter(groups, function (group) { - return SameValue(group['[[Key]]'], key); // eslint-disable-line new-cap - }); - if (found.length > 0) { - var g = found[0]; - if (found.length !== 1) { - throw new $TypeError('Assertion failed: more than 1 Record inside `groups` has a `[[Key]]` that is SameValue to `key`'); - } - $push(g['[[Elements]]'], value); // step 1.a.ii - } else { - var group = { '[[Key]]': key, '[[Elements]]': [value] }; // eslint-disable-line sort-keys - $push(groups, group); // step 3 - } -}; diff --git a/node_modules/object.groupby/aos/GroupBy.js b/node_modules/object.groupby/aos/GroupBy.js deleted file mode 100644 index 815f099a36..0000000000 --- a/node_modules/object.groupby/aos/GroupBy.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var AddValueToKeyedGroup = require('./AddValueToKeyedGroup'); -var Call = require('es-abstract/2023/Call'); -var GetIterator = require('es-abstract/2023/GetIterator'); -var IsCallable = require('es-abstract/2023/IsCallable'); -var IteratorClose = require('es-abstract/2023/IteratorClose'); -var IteratorStep = require('es-abstract/2023/IteratorStep'); -var IteratorValue = require('es-abstract/2023/IteratorValue'); -var RequireObjectCoercible = require('es-abstract/2023/RequireObjectCoercible'); -var ThrowCompletion = require('es-abstract/2023/ThrowCompletion'); -var ToPropertyKey = require('es-abstract/2023/ToPropertyKey'); - -var maxSafeInteger = require('es-abstract/helpers/maxSafeInteger'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -module.exports = function GroupBy(items, callbackfn, coercion) { - if (coercion !== 'property' && coercion !== 'zero') { - throw new $TypeError('Assertion failed: `coercion` must be `"property"` or `"zero"`'); - } - - RequireObjectCoercible(items); // step 1 - - if (!IsCallable(callbackfn)) { // step 2 - throw new $TypeError('`callbackfn` must be callable'); - } - - var groups = []; // step 3 - - var iteratorRecord = GetIterator(items, 'sync'); // step 4 - - var k = 0; // step 5 - - // eslint-disable-next-line no-constant-condition - while (true) { // step 6 - if (k >= maxSafeInteger) { // step 6.a - var error = ThrowCompletion(new $TypeError('Iteration count exceeds the max safe integer value')); // step 6.a.i - return IteratorClose(iteratorRecord, error); // step 6.a.ii - } - - var next = IteratorStep(iteratorRecord); // step 6.b - if (!next) { // step 6.c - return groups; // step 6.c.i - } - - var value = IteratorValue(next); // step 6.d - - var key; - try { - key = Call(callbackfn, undefined, [value, k]); // step 6.e - } catch (e) { - IteratorClose(iteratorRecord, ThrowCompletion(e)); // step 6.f - } - - if (coercion === 'property') { // step 6.g - try { - key = ToPropertyKey(key); // step 6.g.i - } catch (e) { - IteratorClose(iteratorRecord, ThrowCompletion(e)); // step 6.g.ii - } - } else { - if (coercion !== 'zero') { - throw new $TypeError('Assertion failed: `coercion` should be `"zero"` here'); // step 6.h.i - } - if (key === 0) { // step 6.h.ii - key = 0; // handle negative zero - } - } - - AddValueToKeyedGroup(groups, key, value); // step 6.i - - k += 1; // step 6.j - } -}; diff --git a/node_modules/object.groupby/implementation.js b/node_modules/object.groupby/implementation.js index 4a010c61b6..a849ec57d1 100644 --- a/node_modules/object.groupby/implementation.js +++ b/node_modules/object.groupby/implementation.js @@ -1,14 +1,14 @@ 'use strict'; -var CreateDataPropertyOrThrow = require('es-abstract/2023/CreateDataPropertyOrThrow'); -var OrdinaryObjectCreate = require('es-abstract/2023/OrdinaryObjectCreate'); +var CreateDataPropertyOrThrow = require('es-abstract/2024/CreateDataPropertyOrThrow'); +var OrdinaryObjectCreate = require('es-abstract/2024/OrdinaryObjectCreate'); var forEach = require('es-abstract/helpers/forEach'); -var GroupBy = require('./aos/GroupBy'); // TODO: replace with es-abstract 2024 implementation +var GroupBy = require('es-abstract/2024/GroupBy'); // TODO: replace with es-abstract 2024 implementation module.exports = function groupBy(items, callbackfn) { - var groups = GroupBy(items, callbackfn, 'property'); // step 1 + var groups = GroupBy(items, callbackfn, 'PROPERTY'); // step 1 var obj = OrdinaryObjectCreate(null); // step 2 diff --git a/node_modules/object.groupby/package.json b/node_modules/object.groupby/package.json index 7260899b49..dd1450da5f 100644 --- a/node_modules/object.groupby/package.json +++ b/node_modules/object.groupby/package.json @@ -1,6 +1,6 @@ { "name": "object.groupby", - "version": "1.0.1", + "version": "1.0.3", "description": "An ESnext spec-compliant `Object.groupBy` shim/polyfill/replacement that works as far down as ES3.", "main": "index.js", "exports": { @@ -48,7 +48,7 @@ "devDependencies": { "@es-shims/api": "^2.4.2", "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.3", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", @@ -56,16 +56,16 @@ "for-each": "^0.3.3", "functions-have-names": "^1.2.3", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.6" + "tape": "^5.7.5" }, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -79,5 +79,8 @@ "ignore": [ ".github/workflows" ] + }, + "engines": { + "node": ">= 0.4" } } diff --git a/node_modules/object.values/CHANGELOG.md b/node_modules/object.values/CHANGELOG.md index fc774597b6..134a681277 100644 --- a/node_modules/object.values/CHANGELOG.md +++ b/node_modules/object.values/CHANGELOG.md @@ -5,6 +5,14 @@ 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.2.0](https://github.com/ljharb/Object.values/compare/v1.1.7...v1.2.0) - 2024-03-18 + +### Commits + +- [Refactor] use `es-object-atoms` instead of `es-abstract`; update `call-bind`, `define-properties` [`a51f9fd`](https://github.com/ljharb/Object.values/commit/a51f9fd7c20458d2d0084d632fdba8a97f5d36b3) +- [Dev Deps] update `array.prototype.map`, `aud`, `npmignore`, `tape` [`540765d`](https://github.com/ljharb/Object.values/commit/540765d28f61687e35bc39423e85d76a65336e60) +- [New] add `auto` entrypoint [`ce8740c`](https://github.com/ljharb/Object.values/commit/ce8740c5783609df274f56747982bb9820436a1b) + ## [v1.1.7](https://github.com/ljharb/Object.values/compare/v1.1.6...v1.1.7) - 2023-08-27 ### Commits diff --git a/node_modules/object.values/implementation.js b/node_modules/object.values/implementation.js index 6495ce1fa2..04063f1ab3 100644 --- a/node_modules/object.values/implementation.js +++ b/node_modules/object.values/implementation.js @@ -1,6 +1,6 @@ 'use strict'; -var RequireObjectCoercible = require('es-abstract/2023/RequireObjectCoercible'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); var callBound = require('call-bind/callBound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); diff --git a/node_modules/object.values/package.json b/node_modules/object.values/package.json index 3c2e2b9b66..9dcd750989 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.7", + "version": "1.2.0", "author": "Jordan Harband ", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -41,25 +41,25 @@ "es-shim API" ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "devDependencies": { "@es-shims/api": "^2.4.2", "@ljharb/eslint-config": "^21.1.0", - "array.prototype.map": "^1.0.5", - "aud": "^2.0.3", + "array.prototype.map": "^1.0.6", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "functions-have-names": "^1.2.3", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "object-keys": "^1.1.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.6" + "tape": "^5.7.5" }, "testling": { "files": "test/index.js", diff --git a/node_modules/path-to-regexp/Readme.md b/node_modules/path-to-regexp/Readme.md index f20eb28784..455c935de0 100644 --- a/node_modules/path-to-regexp/Readme.md +++ b/node_modules/path-to-regexp/Readme.md @@ -16,323 +16,188 @@ npm install path-to-regexp --save ## Usage -```javascript -const { pathToRegexp, match, parse, compile } = require("path-to-regexp"); - -// pathToRegexp(path, keys?, options?) -// match(path) -// parse(path) -// compile(path) -``` - -### Path to regexp - -The `pathToRegexp` function will return a regular expression object based on the provided `path` argument. It accepts the following arguments: - -- **path** A string, array of strings, or a regular expression. -- **keys** _(optional)_ An array to populate with keys found in the path. -- **options** _(optional)_ - - **sensitive** When `true` the regexp will be case sensitive. (default: `false`) - - **strict** When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`) - - **end** When `true` the regexp will match to the end of the string. (default: `true`) - - **start** When `true` the regexp will match from the beginning of the string. (default: `true`) - - **delimiter** The default delimiter for segments, e.g. `[^/#?]` for `:named` patterns. (default: `'/#?'`) - - **endsWith** Optional character, or list of characters, to treat as "end" characters. - - **encode** A function to encode strings before inserting into `RegExp`. (default: `x => x`) - - **prefixes** List of characters to automatically consider prefixes when parsing. (default: `./`) - -```javascript -const keys = []; -const regexp = pathToRegexp("/foo/:bar", keys); -// regexp = /^\/foo(?:\/([^\/#\?]+?))[\/#\?]?$/i -// keys = [{ name: 'bar', prefix: '/', suffix: '', pattern: '[^\\/#\\?]+?', modifier: '' }] +```js +const { + match, + pathToRegexp, + compile, + parse, + stringify, +} = require("path-to-regexp"); ``` -**Please note:** The `RegExp` returned by `path-to-regexp` is intended for ordered data (e.g. pathnames, hostnames). It can not handle arbitrarily ordered data (e.g. query strings, URL fragments, JSON, etc). When using paths that contain query strings, you need to escape the question mark (`?`) to ensure it does not flag the parameter as [optional](#optional). - ### Parameters -The path argument is used to define parameters and populate keys. - -#### Named Parameters - -Named parameters are defined by prefixing a colon to the parameter name (`:foo`). +Parameters match arbitrary strings in a path by matching up to the end of the segment, or up to any proceeding tokens. They are defined by prefixing a colon to the parameter name (`:foo`). Parameter names can use any valid JavaScript identifier, or be double quoted to use other characters (`:"param-name"`). ```js -const regexp = pathToRegexp("/:foo/:bar"); -// keys = [{ name: 'foo', prefix: '/', ... }, { name: 'bar', prefix: '/', ... }] +const fn = match("/:foo/:bar"); -regexp.exec("/test/route"); -//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] +fn("/test/route"); +//=> { path: '/test/route', params: { foo: 'test', bar: 'route' } } ``` -**Please note:** Parameter names must use "word characters" (`[A-Za-z0-9_]`). +### Wildcard -##### Custom Matching Parameters - -Parameters can have a custom regexp, which overrides the default match (`[^/]+`). For example, you can match digits or names in a path: +Wildcard parameters match one or more characters across multiple segments. They are defined the same way as regular parameters, but are prefixed with an asterisk (`*foo`). ```js -const regexpNumbers = pathToRegexp("/icon-:foo(\\d+).png"); -// keys = [{ name: 'foo', ... }] - -regexpNumbers.exec("/icon-123.png"); -//=> ['/icon-123.png', '123'] +const fn = match("/*splat"); -regexpNumbers.exec("/icon-abc.png"); -//=> null - -const regexpWord = pathToRegexp("/(user|u)"); -// keys = [{ name: 0, ... }] - -regexpWord.exec("/u"); -//=> ['/u', 'u'] - -regexpWord.exec("/users"); -//=> null +fn("/bar/baz"); +//=> { path: '/bar/baz', params: { splat: [ 'bar', 'baz' ] } } ``` -**Tip:** Backslashes need to be escaped with another backslash in JavaScript strings. - -##### Custom Prefix and Suffix +### Optional -Parameters can be wrapped in `{}` to create custom prefixes or suffixes for your segment: +Braces can be used to define parts of the path that are optional. ```js -const regexp = pathToRegexp("/:attr1?{-:attr2}?{-:attr3}?"); +const fn = match("/users{/:id}/delete"); -regexp.exec("/test"); -// => ['/test', 'test', undefined, undefined] +fn("/users/delete"); +//=> { path: '/users/delete', params: {} } -regexp.exec("/test-test"); -// => ['/test', 'test', 'test', undefined] +fn("/users/123/delete"); +//=> { path: '/users/123/delete', params: { id: '123' } } ``` -#### Unnamed Parameters +## Match -It is possible to write an unnamed parameter that only consists of a regexp. It works the same the named parameter, except it will be numerically indexed: +The `match` function returns a function for matching strings against a path: -```js -const regexp = pathToRegexp("/:foo/(.*)"); -// keys = [{ name: 'foo', ... }, { name: 0, ... }] - -regexp.exec("/test/route"); -//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] -``` - -#### Modifiers - -Modifiers must be placed after the parameter (e.g. `/:foo?`, `/(test)?`, `/:foo(test)?`, or `{-:foo(test)}?`). - -##### Optional - -Parameters can be suffixed with a question mark (`?`) to make the parameter optional. +- **path** String or array of strings. +- **options** _(optional)_ (Extends [pathToRegexp](#pathToRegexp) options) + - **decode** Function for decoding strings to params, or `false` to disable all processing. (default: `decodeURIComponent`) ```js -const regexp = pathToRegexp("/:foo/:bar?"); -// keys = [{ name: 'foo', ... }, { name: 'bar', prefix: '/', modifier: '?' }] - -regexp.exec("/test"); -//=> [ '/test', 'test', undefined, index: 0, input: '/test', groups: undefined ] - -regexp.exec("/test/route"); -//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ] +const fn = match("/foo/:bar"); ``` -**Tip:** The prefix is also optional, escape the prefix `\/` to make it required. - -When dealing with query strings, escape the question mark (`?`) so it doesn't mark the parameter as optional. Handling unordered data is outside the scope of this library. - -```js -const regexp = pathToRegexp("/search/:tableName\\?useIndex=true&term=amazing"); - -regexp.exec("/search/people?useIndex=true&term=amazing"); -//=> [ '/search/people?useIndex=true&term=amazing', 'people', index: 0, input: '/search/people?useIndex=true&term=amazing', groups: undefined ] +**Please note:** `path-to-regexp` is intended for ordered data (e.g. paths, hosts). It can not handle arbitrarily ordered data (e.g. query strings, URL fragments, JSON, etc). -// This library does not handle query strings in different orders -regexp.exec("/search/people?term=amazing&useIndex=true"); -//=> null -``` +## PathToRegexp -##### Zero or more +The `pathToRegexp` function returns a regular expression for matching strings against paths. It -Parameters can be suffixed with an asterisk (`*`) to denote a zero or more parameter matches. +- **path** String or array of strings. +- **options** _(optional)_ (See [parse](#parse) for more options) + - **sensitive** Regexp will be case sensitive. (default: `false`) + - **end** Validate the match reaches the end of the string. (default: `true`) + - **delimiter** The default delimiter for segments, e.g. `[^/]` for `:named` parameters. (default: `'/'`) + - **trailing** Allows optional trailing delimiter to match. (default: `true`) ```js -const regexp = pathToRegexp("/:foo*"); -// keys = [{ name: 'foo', prefix: '/', modifier: '*' }] - -regexp.exec("/"); -//=> [ '/', undefined, index: 0, input: '/', groups: undefined ] - -regexp.exec("/bar/baz"); -//=> [ '/bar/baz', 'bar/baz', index: 0, input: '/bar/baz', groups: undefined ] +const { regexp, keys } = pathToRegexp("/foo/:bar"); ``` -##### One or more +## Compile ("Reverse" Path-To-RegExp) -Parameters can be suffixed with a plus sign (`+`) to denote a one or more parameter matches. - -```js -const regexp = pathToRegexp("/:foo+"); -// keys = [{ name: 'foo', prefix: '/', modifier: '+' }] - -regexp.exec("/"); -//=> null - -regexp.exec("/bar/baz"); -//=> [ '/bar/baz','bar/baz', index: 0, input: '/bar/baz', groups: undefined ] -``` - -### Match +The `compile` function will return a function for transforming parameters into a valid path: -The `match` function will return a function for transforming paths into parameters: +- **path** A string. +- **options** (See [parse](#parse) for more options) + - **delimiter** The default delimiter for segments, e.g. `[^/]` for `:named` parameters. (default: `'/'`) + - **encode** Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`) ```js -// Make sure you consistently `decode` segments. -const fn = match("/user/:id", { decode: decodeURIComponent }); - -fn("/user/123"); //=> { path: '/user/123', index: 0, params: { id: '123' } } -fn("/invalid"); //=> false -fn("/user/caf%C3%A9"); //=> { path: '/user/caf%C3%A9', index: 0, params: { id: 'café' } } -``` +const toPath = compile("/user/:id"); -The `match` function can be used to custom match named parameters. For example, this can be used to whitelist a small number of valid paths: +toPath({ id: "name" }); //=> "/user/name" +toPath({ id: "café" }); //=> "/user/caf%C3%A9" -```js -const urlMatch = match("/users/:id/:tab(home|photos|bio)", { - decode: decodeURIComponent, -}); +const toPathRepeated = compile("/*segment"); -urlMatch("/users/1234/photos"); -//=> { path: '/users/1234/photos', index: 0, params: { id: '1234', tab: 'photos' } } +toPathRepeated({ segment: ["foo"] }); //=> "/foo" +toPathRepeated({ segment: ["a", "b", "c"] }); //=> "/a/b/c" -urlMatch("/users/1234/bio"); -//=> { path: '/users/1234/bio', index: 0, params: { id: '1234', tab: 'bio' } } +// When disabling `encode`, you need to make sure inputs are encoded correctly. No arrays are accepted. +const toPathRaw = compile("/user/:id", { encode: false }); -urlMatch("/users/1234/otherstuff"); -//=> false +toPathRaw({ id: "%3A%2F" }); //=> "/user/%3A%2F" ``` -#### Process Pathname +## Stringify + +Transform `TokenData` (a sequence of tokens) back into a Path-to-RegExp string. -You should make sure variations of the same path match the expected `path`. Here's one possible solution using `encode`: +- **data** A `TokenData` instance ```js -const fn = match("/café", { encode: encodeURI }); +const data = new TokenData([ + { type: "text", value: "/" }, + { type: "param", name: "foo" }, +]); -fn("/caf%C3%A9"); //=> { path: '/caf%C3%A9', index: 0, params: {} } +const path = stringify(data); //=> "/:foo" ``` -**Note:** [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) encodes paths, so `/café` would be normalized to `/caf%C3%A9` and match in the above example. +## Developers -##### Alternative Using Normalize - -Sometimes you won't have already normalized paths to use, so you could normalize it yourself before matching: - -```js -/** - * Normalize a pathname for matching, replaces multiple slashes with a single - * slash and normalizes unicode characters to "NFC". When using this method, - * `decode` should be an identity function so you don't decode strings twice. - */ -function normalizePathname(pathname: string) { - return ( - decodeURI(pathname) - // Replaces repeated slashes in the URL. - .replace(/\/+/g, "/") - // Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize - // Note: Missing native IE support, may want to skip this step. - .normalize() - ); -} - -// Two possible ways of writing `/café`: -const re = pathToRegexp("/caf\u00E9"); -const input = encodeURI("/cafe\u0301"); - -re.test(input); //=> false -re.test(normalizePathname(input)); //=> true -``` +- If you are rewriting paths with match and compile, consider using `encode: false` and `decode: false` to keep raw paths passed around. +- To ensure matches work on paths containing characters usually encoded, such as emoji, consider using [encodeurl](https://github.com/pillarjs/encodeurl) for `encodePath`. ### Parse -The `parse` function will return a list of strings and keys from a path string: - -```js -const tokens = parse("/route/:foo/(.*)"); - -console.log(tokens[0]); -//=> "/route" +The `parse` function accepts a string and returns `TokenData`, the set of tokens and other metadata parsed from the input string. `TokenData` is can used with `match` and `compile`. -console.log(tokens[1]); -//=> { name: 'foo', prefix: '/', suffix: '', pattern: '[^\\/#\\?]+?', modifier: '' } +- **path** A string. +- **options** _(optional)_ + - **encodePath** A function for encoding input strings. (default: `x => x`, recommended: [`encodeurl`](https://github.com/pillarjs/encodeurl)) -console.log(tokens[2]); -//=> { name: 0, prefix: '/', suffix: '', pattern: '.*', modifier: '' } -``` +### Tokens -**Note:** This method only works with strings. +`TokenData` is a sequence of tokens, currently of types `text`, `parameter`, `wildcard`, or `group`. -### Compile ("Reverse" Path-To-RegExp) +### Custom path -The `compile` function will return a function for transforming parameters into a valid path: +In some applications, you may not be able to use the `path-to-regexp` syntax, but still want to use this library for `match` and `compile`. For example: ```js -// Make sure you encode your path segments consistently. -const toPath = compile("/user/:id", { encode: encodeURIComponent }); +import { TokenData, match } from "path-to-regexp"; -toPath({ id: 123 }); //=> "/user/123" -toPath({ id: "café" }); //=> "/user/caf%C3%A9" -toPath({ id: ":/" }); //=> "/user/%3A%2F" - -// Without `encode`, you need to make sure inputs are encoded correctly. -// (Note: You can use `validate: false` to create an invalid paths.) -const toPathRaw = compile("/user/:id", { validate: false }); - -toPathRaw({ id: "%3A%2F" }); //=> "/user/%3A%2F" -toPathRaw({ id: ":/" }); //=> "/user/:/" +const tokens = [ + { type: "text", value: "/" }, + { type: "parameter", name: "foo" }, +]; +const path = new TokenData(tokens); +const fn = match(path); -const toPathRepeated = compile("/:segment+"); +fn("/test"); //=> { path: '/test', index: 0, params: { foo: 'test' } } +``` -toPathRepeated({ segment: "foo" }); //=> "/foo" -toPathRepeated({ segment: ["a", "b", "c"] }); //=> "/a/b/c" +## Errors -const toPathRegexp = compile("/user/:id(\\d+)"); +An effort has been made to ensure ambiguous paths from previous releases throw an error. This means you might be seeing an error when things worked before. -toPathRegexp({ id: 123 }); //=> "/user/123" -toPathRegexp({ id: "123" }); //=> "/user/123" -``` +### Unexpected `?` or `+` -**Note:** The generated function will throw on invalid input. +In past releases, `?`, `*`, and `+` were used to denote optional or repeating parameters. As an alternative, try these: -### Working with Tokens +- For optional (`?`), use an empty segment in a group such as `/:file{.:ext}`. +- For repeating (`+`), only wildcard matching is supported, such as `/*path`. +- For optional repeating (`*`), use a group and a wildcard parameter such as `/files{/*path}`. -Path-To-RegExp exposes the two functions used internally that accept an array of tokens: +### Unexpected `(`, `)`, `[`, `]`, etc. -- `tokensToRegexp(tokens, keys?, options?)` Transform an array of tokens into a matching regular expression. -- `tokensToFunction(tokens)` Transform an array of tokens into a path generator function. +Previous versions of Path-to-RegExp used these for RegExp features. This version no longer supports them so they've been reserved to avoid ambiguity. To use these characters literally, escape them with a backslash, e.g. `"\\("`. -#### Token Information +### Missing parameter name -- `name` The name of the token (`string` for named or `number` for unnamed index) -- `prefix` The prefix string for the segment (e.g. `"/"`) -- `suffix` The suffix string for the segment (e.g. `""`) -- `pattern` The RegExp used to match this token (`string`) -- `modifier` The modifier character used for the segment (e.g. `?`) +Parameter names, the part after `:` or `*`, must be a valid JavaScript identifier. For example, it cannot start with a number or contain a dash. If you want a parameter name that uses these characters you can wrap the name in quotes, e.g. `:"my-name"`. -## Compatibility with Express <= 4.x +### Unterminated quote -Path-To-RegExp breaks compatibility with Express <= `4.x`: +Parameter names can be wrapped in double quote characters, and this error means you forgot to close the quote character. -- RegExp special characters can only be used in a parameter - - Express.js 4.x supported `RegExp` special characters regardless of position - this is considered a bug -- Parameters have suffixes that augment meaning - `*`, `+` and `?`. E.g. `/:user*` -- No wildcard asterisk (`*`) - use parameters instead (`(.*)` or `:splat*`) +### Express <= 4.x -## Live Demo +Path-To-RegExp breaks compatibility with Express <= `4.x` in the following ways: -You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.io/express-route-tester/). +- Regexp characters can no longer be provided. +- The optional character `?` is no longer supported, use braces instead: `/:file{.:ext}`. +- Some characters have new meaning or have been reserved (`{}?*+@!;`). +- The parameter name now supports all JavaScript identifier characters, previously it was only `[a-z0-9]`. ## License diff --git a/node_modules/path-to-regexp/dist.es2015/index.js b/node_modules/path-to-regexp/dist.es2015/index.js deleted file mode 100644 index f891c1b90e..0000000000 --- a/node_modules/path-to-regexp/dist.es2015/index.js +++ /dev/null @@ -1,400 +0,0 @@ -/** - * Tokenize input string. - */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; - } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i)); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; - } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at ".concat(j)); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; - } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } - } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j)); - } - } - pattern += str[j++]; - } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i)); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; - } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); - } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; -} -/** - * Parse a string for the raw tokens. - */ -export function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); - if (value !== undefined) - return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function () { - var result = ""; - var value; - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { - result += value; - } - return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - mustConsume("END"); - } - return result; -} -/** - * Compile a string to a template function for the path. - */ -export function compile(str, options) { - return tokensToFunction(parse(str, options), options); -} -/** - * Expose a method for transforming tokens into the path function. - */ -export function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; - continue; - } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array")); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"".concat(token.name, "\" to not be empty")); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - } - continue; - } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - continue; - } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage)); - } - return path; - }; -} -/** - * Create path match function from `path-to-regexp` spec. - */ -export function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); -} -/** - * Create a path match function from `path-to-regexp` output. - */ -export function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); - } - }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); - } - return { path: path, index: index, params: params }; - }; -} -/** - * Escape a regular expression string. - */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); -} -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; -} -/** - * Pull out keys from a regexp. - */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "", - }); - execResult = groupsRegex.exec(path.source); - } - return path; -} -/** - * Transform an array into a regexp. - */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); -} -/** - * Expose a function for taking tokens and returning a RegExp. - */ -export function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } - else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } - else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } - else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } - } - else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); - } - } - } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } - else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 - : endToken === undefined; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } - } - return new RegExp(route, flags(options)); -} -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - */ -export function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/path-to-regexp/dist.es2015/index.js.map b/node_modules/path-to-regexp/dist.es2015/index.js.map deleted file mode 100644 index a1e2390100..0000000000 --- a/node_modules/path-to-regexp/dist.es2015/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile

(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions,\n) {\n return tokensToFunction

(parse(str, options), options);\n}\n\nexport type PathFunction

= (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction

(\n tokens: Token[],\n options: TokensToFunctionOptions = {},\n): PathFunction

{\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`,\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`,\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`,\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult

{\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match

= false | MatchResult

;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction

= (\n path: string,\n) => Match

;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match

(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions,\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction

(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction

(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {},\n): MatchFunction

{\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {},\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n"]} \ No newline at end of file diff --git a/node_modules/path-to-regexp/dist/index.d.ts b/node_modules/path-to-regexp/dist/index.d.ts index 6e5d250e3c..b0f3e939a5 100644 --- a/node_modules/path-to-regexp/dist/index.d.ts +++ b/node_modules/path-to-regexp/dist/index.d.ts @@ -1,127 +1,136 @@ +/** + * Encode a string into another string. + */ +export type Encode = (value: string) => string; +/** + * Decode a string into another string. + */ +export type Decode = (value: string) => string; export interface ParseOptions { /** - * Set the default delimiter for repeat parameters. (default: `'/'`) + * A function for encoding input strings. */ - delimiter?: string; + encodePath?: Encode; +} +export interface PathToRegexpOptions { /** - * List of characters to automatically consider prefixes when parsing. + * Matches the path completely without trailing characters. (default: `true`) */ - prefixes?: string; -} -/** - * Parse a string for the raw tokens. - */ -export declare function parse(str: string, options?: ParseOptions): Token[]; -export interface TokensToFunctionOptions { + end?: boolean; + /** + * Allows optional trailing delimiter to match. (default: `true`) + */ + trailing?: boolean; /** - * When `true` the regexp will be case sensitive. (default: `false`) + * Match will be case sensitive. (default: `false`) */ sensitive?: boolean; /** - * Function for encoding input strings for output. + * The default delimiter for segments. (default: `'/'`) + */ + delimiter?: string; +} +export interface MatchOptions extends PathToRegexpOptions { + /** + * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`) + */ + decode?: Decode | false; +} +export interface CompileOptions { + /** + * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`) */ - encode?: (value: string, token: Key) => string; + encode?: Encode | false; /** - * When `false` the function can produce an invalid (unmatched) path. (default: `true`) + * The default delimiter for segments. (default: `'/'`) */ - validate?: boolean; + delimiter?: string; } /** - * Compile a string to a template function for the path. + * Plain text. */ -export declare function compile

(str: string, options?: ParseOptions & TokensToFunctionOptions): PathFunction

; -export type PathFunction

= (data?: P) => string; +export interface Text { + type: "text"; + value: string; +} /** - * Expose a method for transforming tokens into the path function. + * A parameter designed to match arbitrary text within a segment. */ -export declare function tokensToFunction

(tokens: Token[], options?: TokensToFunctionOptions): PathFunction

; -export interface RegexpToFunctionOptions { - /** - * Function for decoding strings for params. - */ - decode?: (value: string, token: Key) => string; +export interface Parameter { + type: "param"; + name: string; } /** - * A match result contains data about the path match. + * A wildcard parameter designed to match multiple segments. */ -export interface MatchResult

{ - path: string; - index: number; - params: P; +export interface Wildcard { + type: "wildcard"; + name: string; } /** - * A match is either `false` (no match) or a match result. + * A set of possible tokens to expand when matching. */ -export type Match

= false | MatchResult

; +export interface Group { + type: "group"; + tokens: Token[]; +} /** - * The match function takes a string and returns whether it matched the path. + * A token that corresponds with a regexp capture. */ -export type MatchFunction

= (path: string) => Match

; +export type Key = Parameter | Wildcard; /** - * Create path match function from `path-to-regexp` spec. + * A sequence of `path-to-regexp` keys that match capturing groups. */ -export declare function match

(str: Path, options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions): MatchFunction

; +export type Keys = Array; /** - * Create a path match function from `path-to-regexp` output. + * A sequence of path match characters. */ -export declare function regexpToFunction

(re: RegExp, keys: Key[], options?: RegexpToFunctionOptions): MatchFunction

; +export type Token = Text | Parameter | Wildcard | Group; /** - * Metadata about a key. + * Tokenized path instance. */ -export interface Key { - name: string | number; - prefix: string; - suffix: string; - pattern: string; - modifier: string; +export declare class TokenData { + readonly tokens: Token[]; + constructor(tokens: Token[]); } /** - * A token is a string (nothing special) or key metadata (capture group). + * Parse a string for the raw tokens. */ -export type Token = string | Key; -export interface TokensToRegexpOptions { - /** - * When `true` the regexp will be case sensitive. (default: `false`) - */ - sensitive?: boolean; - /** - * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`) - */ - strict?: boolean; - /** - * When `true` the regexp will match to the end of the string. (default: `true`) - */ - end?: boolean; - /** - * When `true` the regexp will match from the beginning of the string. (default: `true`) - */ - start?: boolean; - /** - * Sets the final character for non-ending optimistic matches. (default: `/`) - */ - delimiter?: string; - /** - * List of characters that can also be "end" characters. - */ - endsWith?: string; - /** - * Encode path tokens for use in the `RegExp`. - */ - encode?: (value: string) => string; +export declare function parse(str: string, options?: ParseOptions): TokenData; +/** + * Compile a string to a template function for the path. + */ +export declare function compile

(path: Path, options?: CompileOptions & ParseOptions): (data?: P) => string; +export type ParamData = Partial>; +export type PathFunction

= (data?: P) => string; +/** + * A match result contains data about the path match. + */ +export interface MatchResult

{ + path: string; + params: P; } /** - * Expose a function for taking tokens and returning a RegExp. + * A match is either `false` (no match) or a match result. + */ +export type Match

= false | MatchResult

; +/** + * The match function takes a string and returns whether it matched the path. + */ +export type MatchFunction

= (path: string) => Match

; +/** + * Supported path types. */ -export declare function tokensToRegexp(tokens: Token[], keys?: Key[], options?: TokensToRegexpOptions): RegExp; +export type Path = string | TokenData; /** - * Supported `path-to-regexp` input types. + * Transform a path into a match function. */ -export type Path = string | RegExp | Array; +export declare function match

(path: Path | Path[], options?: MatchOptions & ParseOptions): MatchFunction

; +export declare function pathToRegexp(path: Path | Path[], options?: PathToRegexpOptions & ParseOptions): { + regexp: RegExp; + keys: Keys; +}; /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Stringify token data into a path string. */ -export declare function pathToRegexp(path: Path, keys?: Key[], options?: TokensToRegexpOptions & ParseOptions): RegExp; +export declare function stringify(data: TokenData): string; diff --git a/node_modules/path-to-regexp/dist/index.js b/node_modules/path-to-regexp/dist/index.js index a512e4605e..c41e0753ea 100644 --- a/node_modules/path-to-regexp/dist/index.js +++ b/node_modules/path-to-regexp/dist/index.js @@ -1,410 +1,413 @@ "use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _Iter_peek; Object.defineProperty(exports, "__esModule", { value: true }); -exports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0; +exports.TokenData = void 0; +exports.parse = parse; +exports.compile = compile; +exports.match = match; +exports.pathToRegexp = pathToRegexp; +exports.stringify = stringify; +const DEFAULT_DELIMITER = "/"; +const NOOP_VALUE = (value) => value; +const ID_START = /^[$_\p{ID_Start}]$/u; +const ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u; +const DEBUG_URL = "https://git.new/pathToRegexpError"; +const SIMPLE_TOKENS = { + // Groups. + "{": "{", + "}": "}", + // Reserved. + "(": "(", + ")": ")", + "[": "[", + "]": "]", + "+": "+", + "?": "?", + "!": "!", +}; +/** + * Escape text for stringify to path. + */ +function escapeText(str) { + return str.replace(/[{}()\[\]+?!:*]/g, "\\$&"); +} +/** + * Escape a regular expression string. + */ +function escape(str) { + return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&"); +} /** * Tokenize input string. */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; +function* lexer(str) { + const chars = [...str]; + let i = 0; + function name() { + let value = ""; + if (ID_START.test(chars[++i])) { + value += chars[i]; + while (ID_CONTINUE.test(chars[++i])) { + value += chars[i]; } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i)); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at ".concat(j)); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; + else if (chars[i] === '"') { + let pos = i; + while (i < chars.length) { + if (chars[++i] === '"') { + i++; + pos = 0; + break; } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } + if (chars[i] === "\\") { + value += chars[++i]; } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j)); - } + else { + value += chars[i]; } - pattern += str[j++]; } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i)); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; + if (pos) { + throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`); + } + } + if (!value) { + throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`); + } + return value; + } + while (i < chars.length) { + const value = chars[i]; + const type = SIMPLE_TOKENS[value]; + if (type) { + yield { type, index: i++, value }; + } + else if (value === "\\") { + yield { type: "ESCAPED", index: i++, value: chars[i++] }; + } + else if (value === ":") { + const value = name(); + yield { type: "PARAM", index: i, value }; + } + else if (value === "*") { + const value = name(); + yield { type: "WILDCARD", index: i, value }; + } + else { + yield { type: "CHAR", index: i, value: chars[i++] }; } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; + return { type: "END", index: i, value: "" }; } -/** - * Parse a string for the raw tokens. - */ -function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); +class Iter { + constructor(tokens) { + this.tokens = tokens; + _Iter_peek.set(this, void 0); + } + peek() { + if (!__classPrivateFieldGet(this, _Iter_peek, "f")) { + const next = this.tokens.next(); + __classPrivateFieldSet(this, _Iter_peek, next.value, "f"); + } + return __classPrivateFieldGet(this, _Iter_peek, "f"); + } + tryConsume(type) { + const token = this.peek(); + if (token.type !== type) + return; + __classPrivateFieldSet(this, _Iter_peek, undefined, "f"); // Reset after consumed. + return token.value; + } + consume(type) { + const value = this.tryConsume(type); if (value !== undefined) return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function () { - var result = ""; - var value; - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + const { type: nextType, index } = this.peek(); + throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`); + } + text() { + let result = ""; + let value; + while ((value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED"))) { result += value; } return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - mustConsume("END"); } - return result; } -exports.parse = parse; +_Iter_peek = new WeakMap(); /** - * Compile a string to a template function for the path. + * Tokenized path instance. */ -function compile(str, options) { - return tokensToFunction(parse(str, options), options); +class TokenData { + constructor(tokens) { + this.tokens = tokens; + } } -exports.compile = compile; +exports.TokenData = TokenData; /** - * Expose a method for transforming tokens into the path function. + * Parse a string for the raw tokens. */ -function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; +function parse(str, options = {}) { + const { encodePath = NOOP_VALUE } = options; + const it = new Iter(lexer(str)); + function consume(endType) { + const tokens = []; + while (true) { + const path = it.text(); + if (path) + tokens.push({ type: "text", value: encodePath(path) }); + const param = it.tryConsume("PARAM"); + if (param) { + tokens.push({ + type: "param", + name: param, + }); continue; } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array")); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"".concat(token.name, "\" to not be empty")); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - } + const wildcard = it.tryConsume("WILDCARD"); + if (wildcard) { + tokens.push({ + type: "wildcard", + name: wildcard, + }); continue; } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; + const open = it.tryConsume("{"); + if (open) { + tokens.push({ + type: "group", + tokens: consume("}"), + }); continue; } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage)); + it.consume(endType); + return tokens; } - return path; - }; + } + const tokens = consume("END"); + return new TokenData(tokens); } -exports.tokensToFunction = tokensToFunction; /** - * Create path match function from `path-to-regexp` spec. + * Compile a string to a template function for the path. */ -function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); +function compile(path, options = {}) { + const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const data = path instanceof TokenData ? path : parse(path, options); + const fn = tokensToFunction(data.tokens, delimiter, encode); + return function path(data = {}) { + const [path, ...missing] = fn(data); + if (missing.length) { + throw new TypeError(`Missing parameters: ${missing.join(", ")}`); + } + return path; + }; +} +function tokensToFunction(tokens, delimiter, encode) { + const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode)); + return (data) => { + const result = [""]; + for (const encoder of encoders) { + const [value, ...extras] = encoder(data); + result[0] += value; + result.push(...extras); + } + return result; + }; } -exports.match = match; /** - * Create a path match function from `path-to-regexp` output. + * Convert a single token into a path building function. */ -function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); +function tokenToFunction(token, delimiter, encode) { + if (token.type === "text") + return () => [token.value]; + if (token.type === "group") { + const fn = tokensToFunction(token.tokens, delimiter, encode); + return (data) => { + const [value, ...missing] = fn(data); + if (!missing.length) + return [value]; + return [""]; + }; + } + const encodeValue = encode || NOOP_VALUE; + if (token.type === "wildcard" && encode !== false) { + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (!Array.isArray(value) || value.length === 0) { + throw new TypeError(`Expected "${token.name}" to be a non-empty array`); } + return [ + value + .map((value, index) => { + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}/${index}" to be a string`); + } + return encodeValue(value); + }) + .join(delimiter), + ]; }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); + } + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}" to be a string`); } - return { path: path, index: index, params: params }; + return [encodeValue(value)]; }; } -exports.regexpToFunction = regexpToFunction; /** - * Escape a regular expression string. + * Transform a path into a match function. */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); -} -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; +function match(path, options = {}) { + const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const { regexp, keys } = pathToRegexp(path, options); + const decoders = keys.map((key) => { + if (decode === false) + return NOOP_VALUE; + if (key.type === "param") + return decode; + return (value) => value.split(delimiter).map(decode); + }); + return function match(input) { + const m = regexp.exec(input); + if (!m) + return false; + const path = m[0]; + const params = Object.create(null); + for (let i = 1; i < m.length; i++) { + if (m[i] === undefined) + continue; + const key = keys[i - 1]; + const decoder = decoders[i - 1]; + params[key.name] = decoder(m[i]); + } + return { path, params }; + }; } -/** - * Pull out keys from a regexp. - */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "", - }); - execResult = groupsRegex.exec(path.source); +function pathToRegexp(path, options = {}) { + const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options; + const keys = []; + const sources = []; + const flags = sensitive ? "s" : "is"; + const paths = Array.isArray(path) ? path : [path]; + const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options)); + for (const { tokens } of items) { + for (const seq of flatten(tokens, 0, [])) { + const regexp = sequenceToRegExp(seq, delimiter, keys); + sources.push(regexp); + } } - return path; + let pattern = `^(?:${sources.join("|")})`; + if (trailing) + pattern += `(?:${escape(delimiter)}$)?`; + pattern += end ? "$" : `(?=${escape(delimiter)}|$)`; + const regexp = new RegExp(pattern, flags); + return { regexp, keys }; } /** - * Transform an array into a regexp. + * Generate a flat list of sequence tokens from the given tokens. */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); +function* flatten(tokens, index, init) { + if (index === tokens.length) { + return yield init; + } + const token = tokens[index]; + if (token.type === "group") { + const fork = init.slice(); + for (const seq of flatten(token.tokens, 0, fork)) { + yield* flatten(tokens, index + 1, seq); + } + } + else { + init.push(token); + } + yield* flatten(tokens, index + 1, init); } /** - * Expose a function for taking tokens and returning a RegExp. + * Transform a flat sequence of tokens into a regular expression. */ -function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); +function sequenceToRegExp(tokens, delimiter, keys) { + let result = ""; + let backtrack = ""; + let isSafeSegmentParam = true; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token.type === "text") { + result += escape(token.value); + backtrack = token.value; + isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter)); + continue; } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } - else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } - else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } - else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } + if (token.type === "param" || token.type === "wildcard") { + if (!isSafeSegmentParam && !backtrack) { + throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`); + } + if (token.type === "param") { + result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`; } else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); + result += `(.+)`; } + keys.push(token); + backtrack = ""; + isSafeSegmentParam = false; + continue; } } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } - else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 - : endToken === undefined; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } - } - return new RegExp(route, flags(options)); + return result; +} +function negate(delimiter, backtrack) { + const values = [delimiter, backtrack].filter(Boolean); + const isSimple = values.every((value) => value.length === 1); + if (isSimple) + return `[^${escape(values.join(""))}]`; + return `(?:(?!${values.map(escape).join("|")}).)`; } -exports.tokensToRegexp = tokensToRegexp; /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Stringify token data into a path string. */ -function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); +function stringify(data) { + return data.tokens + .map(function stringifyToken(token, index, tokens) { + if (token.type === "text") + return escapeText(token.value); + if (token.type === "group") { + return `{${token.tokens.map(stringifyToken).join("")}}`; + } + const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]); + const key = isSafe ? token.name : JSON.stringify(token.name); + if (token.type === "param") + return `:${key}`; + if (token.type === "wildcard") + return `*${key}`; + throw new TypeError(`Unexpected token: ${token}`); + }) + .join(""); +} +function isNameSafe(name) { + const [first, ...rest] = name; + if (!ID_START.test(first)) + return false; + return rest.every((char) => ID_CONTINUE.test(char)); +} +function isNextNameSafe(token) { + if (token?.type !== "text") + return true; + return !ID_CONTINUE.test(token.value[0]); } -exports.pathToRegexp = pathToRegexp; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/path-to-regexp/dist/index.js.map b/node_modules/path-to-regexp/dist/index.js.map index 0b36b8ee11..31b79fe71b 100644 --- a/node_modules/path-to-regexp/dist/index.js.map +++ b/node_modules/path-to-regexp/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile

(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions,\n) {\n return tokensToFunction

(parse(str, options), options);\n}\n\nexport type PathFunction

= (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction

(\n tokens: Token[],\n options: TokensToFunctionOptions = {},\n): PathFunction

{\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`,\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`,\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`,\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult

{\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match

= false | MatchResult

;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction

= (\n path: string,\n) => Match

;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match

(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions,\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction

(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction

(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {},\n): MatchFunction

{\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {},\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions,\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n"]} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value: string) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst DEBUG_URL = \"https://git.new/pathToRegexpError\";\n\n/**\n * Encode a string into another string.\n */\nexport type Encode = (value: string) => string;\n\n/**\n * Decode a string into another string.\n */\nexport type Decode = (value: string) => string;\n\nexport interface ParseOptions {\n /**\n * A function for encoding input strings.\n */\n encodePath?: Encode;\n}\n\nexport interface PathToRegexpOptions {\n /**\n * Matches the path completely without trailing characters. (default: `true`)\n */\n end?: boolean;\n /**\n * Allows optional trailing delimiter to match. (default: `true`)\n */\n trailing?: boolean;\n /**\n * Match will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\nexport interface MatchOptions extends PathToRegexpOptions {\n /**\n * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)\n */\n decode?: Decode | false;\n}\n\nexport interface CompileOptions {\n /**\n * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)\n */\n encode?: Encode | false;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\ntype TokenType =\n | \"{\"\n | \"}\"\n | \"WILDCARD\"\n | \"PARAM\"\n | \"CHAR\"\n | \"ESCAPED\"\n | \"END\"\n // Reserved for use or ambiguous due to past use.\n | \"(\"\n | \")\"\n | \"[\"\n | \"]\"\n | \"+\"\n | \"?\"\n | \"!\";\n\n/**\n * Tokenizer results.\n */\ninterface LexToken {\n type: TokenType;\n index: number;\n value: string;\n}\n\nconst SIMPLE_TOKENS: Record = {\n // Groups.\n \"{\": \"{\",\n \"}\": \"}\",\n // Reserved.\n \"(\": \"(\",\n \")\": \")\",\n \"[\": \"[\",\n \"]\": \"]\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"!\": \"!\",\n};\n\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str: string) {\n return str.replace(/[{}()\\[\\]+?!:*]/g, \"\\\\$&\");\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escape(str: string) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Tokenize input string.\n */\nfunction* lexer(str: string): Generator {\n const chars = [...str];\n let i = 0;\n\n function name() {\n let value = \"\";\n\n if (ID_START.test(chars[++i])) {\n value += chars[i];\n while (ID_CONTINUE.test(chars[++i])) {\n value += chars[i];\n }\n } else if (chars[i] === '\"') {\n let pos = i;\n\n while (i < chars.length) {\n if (chars[++i] === '\"') {\n i++;\n pos = 0;\n break;\n }\n\n if (chars[i] === \"\\\\\") {\n value += chars[++i];\n } else {\n value += chars[i];\n }\n }\n\n if (pos) {\n throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);\n }\n }\n\n if (!value) {\n throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);\n }\n\n return value;\n }\n\n while (i < chars.length) {\n const value = chars[i];\n const type = SIMPLE_TOKENS[value];\n\n if (type) {\n yield { type, index: i++, value };\n } else if (value === \"\\\\\") {\n yield { type: \"ESCAPED\", index: i++, value: chars[i++] };\n } else if (value === \":\") {\n const value = name();\n yield { type: \"PARAM\", index: i, value };\n } else if (value === \"*\") {\n const value = name();\n yield { type: \"WILDCARD\", index: i, value };\n } else {\n yield { type: \"CHAR\", index: i, value: chars[i++] };\n }\n }\n\n return { type: \"END\", index: i, value: \"\" };\n}\n\nclass Iter {\n #peek?: LexToken;\n\n constructor(private tokens: Generator) {}\n\n peek(): LexToken {\n if (!this.#peek) {\n const next = this.tokens.next();\n this.#peek = next.value;\n }\n return this.#peek;\n }\n\n tryConsume(type: TokenType): string | undefined {\n const token = this.peek();\n if (token.type !== type) return;\n this.#peek = undefined; // Reset after consumed.\n return token.value;\n }\n\n consume(type: TokenType): string {\n const value = this.tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = this.peek();\n throw new TypeError(\n `Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`,\n );\n }\n\n text(): string {\n let result = \"\";\n let value: string | undefined;\n while ((value = this.tryConsume(\"CHAR\") || this.tryConsume(\"ESCAPED\"))) {\n result += value;\n }\n return result;\n }\n}\n\n/**\n * Plain text.\n */\nexport interface Text {\n type: \"text\";\n value: string;\n}\n\n/**\n * A parameter designed to match arbitrary text within a segment.\n */\nexport interface Parameter {\n type: \"param\";\n name: string;\n}\n\n/**\n * A wildcard parameter designed to match multiple segments.\n */\nexport interface Wildcard {\n type: \"wildcard\";\n name: string;\n}\n\n/**\n * A set of possible tokens to expand when matching.\n */\nexport interface Group {\n type: \"group\";\n tokens: Token[];\n}\n\n/**\n * A token that corresponds with a regexp capture.\n */\nexport type Key = Parameter | Wildcard;\n\n/**\n * A sequence of `path-to-regexp` keys that match capturing groups.\n */\nexport type Keys = Array;\n\n/**\n * A sequence of path match characters.\n */\nexport type Token = Text | Parameter | Wildcard | Group;\n\n/**\n * Tokenized path instance.\n */\nexport class TokenData {\n constructor(public readonly tokens: Token[]) {}\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): TokenData {\n const { encodePath = NOOP_VALUE } = options;\n const it = new Iter(lexer(str));\n\n function consume(endType: TokenType): Token[] {\n const tokens: Token[] = [];\n\n while (true) {\n const path = it.text();\n if (path) tokens.push({ type: \"text\", value: encodePath(path) });\n\n const param = it.tryConsume(\"PARAM\");\n if (param) {\n tokens.push({\n type: \"param\",\n name: param,\n });\n continue;\n }\n\n const wildcard = it.tryConsume(\"WILDCARD\");\n if (wildcard) {\n tokens.push({\n type: \"wildcard\",\n name: wildcard,\n });\n continue;\n }\n\n const open = it.tryConsume(\"{\");\n if (open) {\n tokens.push({\n type: \"group\",\n tokens: consume(\"}\"),\n });\n continue;\n }\n\n it.consume(endType);\n return tokens;\n }\n }\n\n const tokens = consume(\"END\");\n return new TokenData(tokens);\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile

(\n path: Path,\n options: CompileOptions & ParseOptions = {},\n) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const data = path instanceof TokenData ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n\n return function path(data: P = {} as P) {\n const [path, ...missing] = fn(data);\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n return path;\n };\n}\n\nexport type ParamData = Partial>;\nexport type PathFunction

= (data?: P) => string;\n\nfunction tokensToFunction(\n tokens: Token[],\n delimiter: string,\n encode: Encode | false,\n) {\n const encoders = tokens.map((token) =>\n tokenToFunction(token, delimiter, encode),\n );\n\n return (data: ParamData) => {\n const result: string[] = [\"\"];\n\n for (const encoder of encoders) {\n const [value, ...extras] = encoder(data);\n result[0] += value;\n result.push(...extras);\n }\n\n return result;\n };\n}\n\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(\n token: Token,\n delimiter: string,\n encode: Encode | false,\n): (data: ParamData) => string[] {\n if (token.type === \"text\") return () => [token.value];\n\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n\n return (data) => {\n const [value, ...missing] = fn(data);\n if (!missing.length) return [value];\n return [\"\"];\n };\n }\n\n const encodeValue = encode || NOOP_VALUE;\n\n if (token.type === \"wildcard\" && encode !== false) {\n return (data) => {\n const value = data[token.name];\n if (value == null) return [\"\", token.name];\n\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n\n return [\n value\n .map((value, index) => {\n if (typeof value !== \"string\") {\n throw new TypeError(\n `Expected \"${token.name}/${index}\" to be a string`,\n );\n }\n\n return encodeValue(value);\n })\n .join(delimiter),\n ];\n };\n }\n\n return (data) => {\n const value = data[token.name];\n if (value == null) return [\"\", token.name];\n\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n\n return [encodeValue(value)];\n };\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult

{\n path: string;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match

= false | MatchResult

;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction

= (path: string) => Match

;\n\n/**\n * Supported path types.\n */\nexport type Path = string | TokenData;\n\n/**\n * Transform a path into a match function.\n */\nexport function match

(\n path: Path | Path[],\n options: MatchOptions & ParseOptions = {},\n): MatchFunction

{\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const { regexp, keys } = pathToRegexp(path, options);\n\n const decoders = keys.map((key) => {\n if (decode === false) return NOOP_VALUE;\n if (key.type === \"param\") return decode;\n return (value: string) => value.split(delimiter).map(decode);\n });\n\n return function match(input: string) {\n const m = regexp.exec(input);\n if (!m) return false;\n\n const path = m[0];\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n\n return { path, params };\n };\n}\n\nexport function pathToRegexp(\n path: Path | Path[],\n options: PathToRegexpOptions & ParseOptions = {},\n) {\n const {\n delimiter = DEFAULT_DELIMITER,\n end = true,\n sensitive = false,\n trailing = true,\n } = options;\n const keys: Keys = [];\n const sources: string[] = [];\n const flags = sensitive ? \"s\" : \"is\";\n const paths = Array.isArray(path) ? path : [path];\n const items = paths.map((path) =>\n path instanceof TokenData ? path : parse(path, options),\n );\n\n for (const { tokens } of items) {\n for (const seq of flatten(tokens, 0, [])) {\n const regexp = sequenceToRegExp(seq, delimiter, keys);\n sources.push(regexp);\n }\n }\n\n let pattern = `^(?:${sources.join(\"|\")})`;\n if (trailing) pattern += `(?:${escape(delimiter)}$)?`;\n pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n\n const regexp = new RegExp(pattern, flags);\n return { regexp, keys };\n}\n\n/**\n * Flattened token set.\n */\ntype Flattened = Text | Parameter | Wildcard;\n\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(\n tokens: Token[],\n index: number,\n init: Flattened[],\n): Generator {\n if (index === tokens.length) {\n return yield init;\n }\n\n const token = tokens[index];\n\n if (token.type === \"group\") {\n const fork = init.slice();\n for (const seq of flatten(token.tokens, 0, fork)) {\n yield* flatten(tokens, index + 1, seq);\n }\n } else {\n init.push(token);\n }\n\n yield* flatten(tokens, index + 1, init);\n}\n\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction sequenceToRegExp(tokens: Flattened[], delimiter: string, keys: Keys) {\n let result = \"\";\n let backtrack = \"\";\n let isSafeSegmentParam = true;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack = token.value;\n isSafeSegmentParam ||= token.value.includes(delimiter);\n continue;\n }\n\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (!isSafeSegmentParam && !backtrack) {\n throw new TypeError(`Missing text after \"${token.name}\": ${DEBUG_URL}`);\n }\n\n if (token.type === \"param\") {\n result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n } else {\n result += `(.+)`;\n }\n\n keys.push(token);\n backtrack = \"\";\n isSafeSegmentParam = false;\n continue;\n }\n }\n\n return result;\n}\n\nfunction negate(delimiter: string, backtrack: string) {\n const values = [delimiter, backtrack].filter(Boolean);\n const isSimple = values.every((value) => value.length === 1);\n if (isSimple) return `[^${escape(values.join(\"\"))}]`;\n return `(?:(?!${values.map(escape).join(\"|\")}).)`;\n}\n\n/**\n * Stringify token data into a path string.\n */\nexport function stringify(data: TokenData) {\n return data.tokens\n .map(function stringifyToken(token, index, tokens): string {\n if (token.type === \"text\") return escapeText(token.value);\n if (token.type === \"group\") {\n return `{${token.tokens.map(stringifyToken).join(\"\")}}`;\n }\n\n const isSafe =\n isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]);\n const key = isSafe ? token.name : JSON.stringify(token.name);\n\n if (token.type === \"param\") return `:${key}`;\n if (token.type === \"wildcard\") return `*${key}`;\n throw new TypeError(`Unexpected token: ${token}`);\n })\n .join(\"\");\n}\n\nfunction isNameSafe(name: string) {\n const [first, ...rest] = name;\n if (!ID_START.test(first)) return false;\n return rest.every((char) => ID_CONTINUE.test(char));\n}\n\nfunction isNextNameSafe(token: Token | undefined) {\n if (token?.type !== \"text\") return true;\n return !ID_CONTINUE.test(token.value[0]);\n}\n"]} \ No newline at end of file diff --git a/node_modules/path-to-regexp/package.json b/node_modules/path-to-regexp/package.json index df50fe3cb5..b9a6d43da0 100644 --- a/node_modules/path-to-regexp/package.json +++ b/node_modules/path-to-regexp/package.json @@ -1,6 +1,6 @@ { "name": "path-to-regexp", - "version": "6.2.2", + "version": "8.1.0", "description": "Express style path to RegExp utility", "keywords": [ "express", @@ -13,15 +13,14 @@ "url": "https://github.com/pillarjs/path-to-regexp.git" }, "license": "MIT", - "sideEffects": false, + "exports": "./dist/index.js", "main": "dist/index.js", - "module": "dist.es2015/index.js", "typings": "dist/index.d.ts", "files": [ - "dist.es2015/", "dist/" ], "scripts": { + "bench": "vitest bench", "build": "ts-scripts build", "format": "ts-scripts format", "lint": "ts-scripts lint", @@ -36,27 +35,28 @@ "@types/node": "^20.4.9", "@types/semver": "^7.3.1", "@vitest/coverage-v8": "^1.4.0", - "semver": "^7.3.5", + "recheck": "^4.4.5", "size-limit": "^11.1.2", - "typescript": "^5.1.6" + "typescript": "^5.5.3" + }, + "engines": { + "node": ">=16" }, "publishConfig": { "access": "public" }, "size-limit": [ { - "path": "dist.es2015/index.js", - "limit": "2 kB" + "path": "dist/index.js", + "limit": "2.2 kB" } ], "ts-scripts": { "dist": [ - "dist", - "dist.es2015" + "dist" ], "project": [ - "tsconfig.build.json", - "tsconfig.es2015.json" + "tsconfig.build.json" ] } } diff --git a/node_modules/possible-typed-array-names/.eslintrc b/node_modules/possible-typed-array-names/.eslintrc new file mode 100644 index 0000000000..3b5d9e90ec --- /dev/null +++ b/node_modules/possible-typed-array-names/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/possible-typed-array-names/.github/FUNDING.yml b/node_modules/possible-typed-array-names/.github/FUNDING.yml new file mode 100644 index 0000000000..7afce20a60 --- /dev/null +++ b/node_modules/possible-typed-array-names/.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/possible-typed-array-names +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/possible-typed-array-names/CHANGELOG.md b/node_modules/possible-typed-array-names/CHANGELOG.md new file mode 100644 index 0000000000..cae3fae3ec --- /dev/null +++ b/node_modules/possible-typed-array-names/CHANGELOG.md @@ -0,0 +1,15 @@ +# 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 - 2024-02-19 + +### Commits + +- Initial implementation, tests, readme, types [`c279f55`](https://github.com/ljharb/possible-typed-array-names/commit/c279f550021896afa50c1169b3111618a96cf898) +- Initial commit [`0f22bf2`](https://github.com/ljharb/possible-typed-array-names/commit/0f22bf24d16fc8ea29483ed7ed378afb3758a4df) +- npm init [`25d6cff`](https://github.com/ljharb/possible-typed-array-names/commit/25d6cffe4091921e4e210704dabed37ae3d7b261) +- Only apps should have lockfiles [`a1bd592`](https://github.com/ljharb/possible-typed-array-names/commit/a1bd592fa037430d401b1d6d26cfea2c2d6789db) diff --git a/node_modules/possible-typed-array-names/LICENSE b/node_modules/possible-typed-array-names/LICENSE new file mode 100644 index 0000000000..f82f38963b --- /dev/null +++ b/node_modules/possible-typed-array-names/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 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 +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/possible-typed-array-names/README.md b/node_modules/possible-typed-array-names/README.md new file mode 100644 index 0000000000..7ebbf81ed6 --- /dev/null +++ b/node_modules/possible-typed-array-names/README.md @@ -0,0 +1,48 @@ +# possible-typed-array-names [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A simple list of possible Typed Array names. + +## Example + +```js +const assert = require('assert'); + +const names = require('possible-typed-array-names'); + +assert(Array.isArray(names)); +assert(names.every(name => ( + typeof name === 'string' + && typeof globalThis[name] === 'function' + && globalThis[name].name === name +))); +``` + +## 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/possible-typed-array-names +[npm-version-svg]: https://versionbadg.es/ljharb/possible-typed-array-names.svg +[deps-svg]: https://david-dm.org/ljharb/possible-typed-array-names.svg +[deps-url]: https://david-dm.org/ljharb/possible-typed-array-names +[dev-deps-svg]: https://david-dm.org/ljharb/possible-typed-array-names/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/possible-typed-array-names#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/possible-typed-array-names.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/possible-typed-array-names.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/possible-typed-array-names.svg +[downloads-url]: https://npm-stat.com/charts.html?package=possible-typed-array-names +[codecov-image]: https://codecov.io/gh/ljharb/possible-typed-array-names/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/possible-typed-array-names/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/possible-typed-array-names +[actions-url]: https://github.com/ljharb/possible-typed-array-names/actions diff --git a/node_modules/possible-typed-array-names/index.d.ts b/node_modules/possible-typed-array-names/index.d.ts new file mode 100644 index 0000000000..342584de0b --- /dev/null +++ b/node_modules/possible-typed-array-names/index.d.ts @@ -0,0 +1,15 @@ +declare const names: [ + 'Float32Array', + 'Float64Array', + 'Int8Array', + 'Int16Array', + 'Int32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Uint16Array', + 'Uint32Array', + 'BigInt64Array', + 'BigUint64Array' +]; + +export = names; \ No newline at end of file diff --git a/node_modules/possible-typed-array-names/index.js b/node_modules/possible-typed-array-names/index.js new file mode 100644 index 0000000000..f3c1199dfd --- /dev/null +++ b/node_modules/possible-typed-array-names/index.js @@ -0,0 +1,16 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = [ + 'Float32Array', + 'Float64Array', + 'Int8Array', + 'Int16Array', + 'Int32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'Uint16Array', + 'Uint32Array', + 'BigInt64Array', + 'BigUint64Array' +]; diff --git a/node_modules/possible-typed-array-names/package.json b/node_modules/possible-typed-array-names/package.json new file mode 100644 index 0000000000..acd9be9bc1 --- /dev/null +++ b/node_modules/possible-typed-array-names/package.json @@ -0,0 +1,83 @@ +{ + "name": "possible-typed-array-names", + "version": "1.0.0", + "description": "A simple list of possible Typed Array names.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "types": "./index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "aud --production", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "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/possible-typed-array-names.git" + }, + "keywords": [ + "typed", + "array", + "typedarray", + "Float32Array", + "Float64Array", + "Int8Array", + "Int16Array", + "Int32Array", + "Uint8Array", + "Uint8ClampedArray", + "Uint16Array", + "Uint32Array", + "BigInt64Array", + "BigUint64Array" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/possible-typed-array-names/issues" + }, + "homepage": "https://github.com/ljharb/possible-typed-array-names#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eclint": "^2.8.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/possible-typed-array-names/test/index.js b/node_modules/possible-typed-array-names/test/index.js new file mode 100644 index 0000000000..af59606828 --- /dev/null +++ b/node_modules/possible-typed-array-names/test/index.js @@ -0,0 +1,16 @@ +'use strict'; + +var test = require('tape'); + +var names = require('../'); + +test('typed array names', function (t) { + for (var i = 0; i < names.length; i++) { + t.equal(typeof names[i], 'string', 'is string'); + t.equal(names.indexOf(names[i]), i, 'is unique'); + + t.match(typeof global[names[i]], /^(?:function|undefined)$/, 'is a global function, or `undefined`'); + } + + t.end(); +}); diff --git a/node_modules/possible-typed-array-names/tsconfig.json b/node_modules/possible-typed-array-names/tsconfig.json new file mode 100644 index 0000000000..99dfeb6c80 --- /dev/null +++ b/node_modules/possible-typed-array-names/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": ["types"], /* Specify multiple folders that act like `./node_modules/@types`. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow `import x from y` when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/regexp.prototype.flags/.eslintrc b/node_modules/regexp.prototype.flags/.eslintrc index dcbbda298a..fb009abaed 100644 --- a/node_modules/regexp.prototype.flags/.eslintrc +++ b/node_modules/regexp.prototype.flags/.eslintrc @@ -6,6 +6,7 @@ "rules": { "eqeqeq": [2, "allow-null"], "id-length": 0, + "no-invalid-this": "off", }, "overrides": [ diff --git a/node_modules/regexp.prototype.flags/CHANGELOG.md b/node_modules/regexp.prototype.flags/CHANGELOG.md index 7fb48d9214..188507f035 100644 --- a/node_modules/regexp.prototype.flags/CHANGELOG.md +++ b/node_modules/regexp.prototype.flags/CHANGELOG.md @@ -5,6 +5,27 @@ 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.5.2](https://github.com/es-shims/RegExp.prototype.flags/compare/v1.5.1...v1.5.2) - 2024-02-11 + +### Commits + +- [Tests] increase coverage [`c692c88`](https://github.com/es-shims/RegExp.prototype.flags/commit/c692c88e073f6d17fc5b6b1c740ef1ecb433eb4b) +- [Dev Deps] use `hasown` instead of `has` [`fb5b350`](https://github.com/es-shims/RegExp.prototype.flags/commit/fb5b350122507e4bec68fb417a46f07d062caf77) +- [Dev Deps] update `aud`, `hasown`, `npmignore`, `tape` [`fd0ddd9`](https://github.com/es-shims/RegExp.prototype.flags/commit/fd0ddd9c837c0a8066de37a41eb4f83310f15a57) +- [Deps] update `call-bind`, `define-properties`, `set-function-name` [`ca53f66`](https://github.com/es-shims/RegExp.prototype.flags/commit/ca53f662549b2fbff61323a6d2aa9af15a6c836b) +- [Dev Deps] update `object-inspect`, `tape` [`4491680`](https://github.com/es-shims/RegExp.prototype.flags/commit/449168010d4d63a2cd854dcec9f37efacda19082) +- [Refactor] use `es-errors` [`1d03d22`](https://github.com/es-shims/RegExp.prototype.flags/commit/1d03d225327008aeb6b4b501a4720318d717621e) +- [Fix] properly check for a non-object receiver [`024d442`](https://github.com/es-shims/RegExp.prototype.flags/commit/024d4421edd8922f9acbac35afcfe69a8a3db6a9) +- [Deps] update `call-bind` [`f222ce0`](https://github.com/es-shims/RegExp.prototype.flags/commit/f222ce0925a7431d1d3dd113d803746f07e1175d) + +## [v1.5.1](https://github.com/es-shims/RegExp.prototype.flags/compare/v1.5.0...v1.5.1) - 2023-09-12 + +### Commits + +- [Refactor] use `set-function-name` [`1384147`](https://github.com/es-shims/RegExp.prototype.flags/commit/13841474baf5700de8e3f65fae3670ad1b233483) +- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `available-regexp-flags`, `tape` [`07bf9a2`](https://github.com/es-shims/RegExp.prototype.flags/commit/07bf9a2c354cc41379b01fe5c383233adaaccf0e) +- [Dev Deps] add missing `npmignore` dep [`8ca9dfe`](https://github.com/es-shims/RegExp.prototype.flags/commit/8ca9dfe4da31ef74ee48a4dcf62692eebb8f8fdd) + ## [v1.5.0](https://github.com/es-shims/RegExp.prototype.flags/compare/v1.4.3...v1.5.0) - 2023-04-18 ### Commits diff --git a/node_modules/regexp.prototype.flags/implementation.js b/node_modules/regexp.prototype.flags/implementation.js index 18ae0f83ed..4005503b2f 100644 --- a/node_modules/regexp.prototype.flags/implementation.js +++ b/node_modules/regexp.prototype.flags/implementation.js @@ -1,12 +1,12 @@ 'use strict'; -var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); +var setFunctionName = require('set-function-name'); +var $TypeError = require('es-errors/type'); var $Object = Object; -var $TypeError = TypeError; -module.exports = function flags() { - if (this != null && this !== $Object(this)) { +module.exports = setFunctionName(function flags() { + if (this == null || this !== $Object(this)) { throw new $TypeError('RegExp.prototype.flags getter called on non-object'); } var result = ''; @@ -35,8 +35,5 @@ module.exports = function flags() { result += 'y'; } return result; -}; +}, 'get flags', true); -if (functionsHaveConfigurableNames && Object.defineProperty) { - Object.defineProperty(module.exports, 'name', { value: 'get flags' }); -} diff --git a/node_modules/regexp.prototype.flags/package.json b/node_modules/regexp.prototype.flags/package.json index 0fee56100c..89f994c527 100644 --- a/node_modules/regexp.prototype.flags/package.json +++ b/node_modules/regexp.prototype.flags/package.json @@ -1,6 +1,6 @@ { "name": "regexp.prototype.flags", - "version": "1.5.0", + "version": "1.5.2", "author": "Jordan Harband ", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -40,28 +40,30 @@ "es-shim API" ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "devDependencies": { - "@es-shims/api": "^2.3.1", - "@ljharb/eslint-config": "^21.0.1", - "aud": "^2.0.2", + "@es-shims/api": "^2.4.2", + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", - "available-regexp-flags": "^1.0.1", - "covert": "^1.1.1", + "available-regexp-flags": "^1.0.2", "eclint": "^2.8.1", + "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "for-each": "^0.3.3", - "has": "^1.0.3", + "functions-have-names": "^1.2.3", "has-strict-mode": "^1.0.1", + "hasown": "^2.0.1", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" + "tape": "^5.7.4" }, "testling": { "files": "test/index.js", diff --git a/node_modules/regexp.prototype.flags/test/tests.js b/node_modules/regexp.prototype.flags/test/tests.js index adcfd02625..fbe41941c5 100644 --- a/node_modules/regexp.prototype.flags/test/tests.js +++ b/node_modules/regexp.prototype.flags/test/tests.js @@ -1,8 +1,9 @@ 'use strict'; -var has = require('has'); +var hasOwn = require('hasown'); var inspect = require('object-inspect'); var supportsDescriptors = require('define-properties').supportsDescriptors; +var v = require('es-value-fixtures'); var forEach = require('for-each'); var availableFlags = require('available-regexp-flags'); @@ -19,6 +20,14 @@ var getRegexLiteral = function (stringRegex) { }; module.exports = function runTests(flags, t) { + forEach(v.primitives, function (nonObject) { + t['throws']( + function () { flags(nonObject); }, + TypeError, + 'throws when called with a non-object receiver: ' + inspect(nonObject) + ); + }); + t.equal(flags(/a/g), 'g', 'flags(/a/g) !== "g"'); t.equal(flags(/a/gmi), 'gim', 'flags(/a/gmi) !== "gim"'); t.equal(flags(new RegExp('a', 'gmi')), 'gim', 'flags(new RegExp("a", "gmi")) !== "gim"'); @@ -38,13 +47,13 @@ module.exports = function runTests(flags, t) { st.equal(flags(/a/gim), 'gim', 'flags(/a/gim) !== "gim"'); st.equal(flags(/a/mig), 'gim', 'flags(/a/mig) !== "gim"'); st.equal(flags(/a/mgi), 'gim', 'flags(/a/mgi) !== "gim"'); - if (has(RegExp.prototype, 'sticky')) { + if (hasOwn(RegExp.prototype, 'sticky')) { st.equal(flags(getRegexLiteral('/a/gyim')), 'gimy', 'flags(/a/gyim) !== "gimy"'); } - if (has(RegExp.prototype, 'unicode')) { + if (hasOwn(RegExp.prototype, 'unicode')) { st.equal(flags(getRegexLiteral('/a/ugmi')), 'gimu', 'flags(/a/ugmi) !== "gimu"'); } - if (has(RegExp.prototype, 'dotAll')) { + if (hasOwn(RegExp.prototype, 'dotAll')) { st.equal(flags(getRegexLiteral('/a/sgmi')), 'gims', 'flags(/a/sgmi) !== "gims"'); } @@ -85,15 +94,6 @@ module.exports = function runTests(flags, t) { st.end(); }); - t.test('throws properly', function (st) { - var nonObjects = ['', false, true, 42, NaN, null, undefined]; - st.plan(nonObjects.length); - var throwsOnNonObject = function (nonObject) { - st['throws'](flags.bind(null, nonObject), TypeError, inspect(nonObject) + ' is not an Object'); - }; - nonObjects.forEach(throwsOnNonObject); - }); - t.test('getters', { skip: !supportsDescriptors }, function (st) { /* eslint getter-return: 0 */ var calls = ''; diff --git a/node_modules/safe-array-concat/CHANGELOG.md b/node_modules/safe-array-concat/CHANGELOG.md index dee7cfbed1..70d78df184 100644 --- a/node_modules/safe-array-concat/CHANGELOG.md +++ b/node_modules/safe-array-concat/CHANGELOG.md @@ -5,6 +5,49 @@ 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.1.2](https://github.com/ljharb/safe-array-concat/compare/v1.1.1...v1.1.2) - 2024-03-09 + +### Commits + +- [types] use a generic [`a1d744d`](https://github.com/ljharb/safe-array-concat/commit/a1d744d749033c91f0c108b28ac6dbc6016ecce4) +- [Dev Deps] update `@ljharb/tsconfig`, `set-function-length` [`3d3da0a`](https://github.com/ljharb/safe-array-concat/commit/3d3da0ab110bce21f466381c5d09f93200a20f85) + +## [v1.1.1](https://github.com/ljharb/safe-array-concat/compare/v1.1.0...v1.1.1) - 2024-03-09 + +### Commits + +- [types] use shared config [`f509f80`](https://github.com/ljharb/safe-array-concat/commit/f509f80fb2dd9734c309ccb59ca9451c5a5de885) +- [actions] remove redundant finisher; use reusable workflows [`b5f5ff4`](https://github.com/ljharb/safe-array-concat/commit/b5f5ff497976a48e291788b26b741cd4f3d388eb) +- [types] use handwritten d.ts instead of emit [`e717048`](https://github.com/ljharb/safe-array-concat/commit/e717048433b52d3a3240b7c697b5736756ed296e) +- [Dev Deps] update `set-function-length`, `tape` [`dde26a7`](https://github.com/ljharb/safe-array-concat/commit/dde26a7600ebe8ebc8f45d1bf8f1a970175604d8) +- [Deps] update `call-bind`, `get-intrinsic` [`d5d2cde`](https://github.com/ljharb/safe-array-concat/commit/d5d2cde9e5b7179d00d85e007b80b138969c5968) +- [Dev Deps] update `tape` [`9454c5a`](https://github.com/ljharb/safe-array-concat/commit/9454c5a3beacb08200b4b00b7ffa54a572cb76ab) +- [Tests] add `@arethetypeswrong/cli [`00a5243`](https://github.com/ljharb/safe-array-concat/commit/00a5243a5b923ff2b694b3b5ef4ce39027e30f6e) +- [Deps] update `get-intrinsic` [`c935764`](https://github.com/ljharb/safe-array-concat/commit/c9357646c3923a1351dca21f175b2b421dd15da5) + +## [v1.1.0](https://github.com/ljharb/safe-array-concat/compare/v1.0.1...v1.1.0) - 2024-01-15 + +### Commits + +- [New] add types [`bd92413`](https://github.com/ljharb/safe-array-concat/commit/bd92413643b2bd0ad62e854172fad129d3899dc1) +- [Dev Deps] update `aud`, `mock-property`, `npmignore`, `set-function-length`, `tape` [`497ffcb`](https://github.com/ljharb/safe-array-concat/commit/497ffcbb271ad61752756ec363ad5b9400e4d367) +- [Deps] update `call-bind`, `get-intrinsic` [`770f870`](https://github.com/ljharb/safe-array-concat/commit/770f8704d3751b947c7f4772d9ee38d8bcdecf44) +- [Dev Deps] update `mock-property`, `tape` [`be76bd9`](https://github.com/ljharb/safe-array-concat/commit/be76bd958fa73607a105122a8770677ecbdf78f0) +- [Tests] use `set-function-length/env` [`89b1167`](https://github.com/ljharb/safe-array-concat/commit/89b116758d91ad521f963cccf056f9a3f0b18c20) +- [meta] add missing npmrc values [`3185cc7`](https://github.com/ljharb/safe-array-concat/commit/3185cc7a6773baf625c65bb58ffb9b7ee5f3306e) +- [meta] add `sideEffects` flag [`df6c7eb`](https://github.com/ljharb/safe-array-concat/commit/df6c7ebca7f2fd2f152fe2c2a2260d21728e70a3) + +## [v1.0.1](https://github.com/ljharb/safe-array-concat/compare/v1.0.0...v1.0.1) - 2023-09-05 + +### Fixed + +- [Perf] set `Symbol.isConcatSpreadable` only when required [`#2`](https://github.com/ljharb/safe-array-concat/issues/2) + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`c0791b0`](https://github.com/ljharb/safe-array-concat/commit/c0791b00b74e70113921c32d4d1fd494b7e8f555) +- [Deps] update `get-intrinsic` [`7d07ae6`](https://github.com/ljharb/safe-array-concat/commit/7d07ae69d512bb3b6fb2131f1c824b5ffd85af9f) + ## v1.0.0 - 2023-04-20 ### Commits diff --git a/node_modules/safe-array-concat/index.d.ts b/node_modules/safe-array-concat/index.d.ts new file mode 100644 index 0000000000..4b204c0789 --- /dev/null +++ b/node_modules/safe-array-concat/index.d.ts @@ -0,0 +1,3 @@ +declare function safeArrayConcat(item: T | T[], ...items: (T | T[])[]): T[]; + +export = safeArrayConcat; diff --git a/node_modules/safe-array-concat/index.js b/node_modules/safe-array-concat/index.js index 41231db4dd..ec9119abe9 100644 --- a/node_modules/safe-array-concat/index.js +++ b/node_modules/safe-array-concat/index.js @@ -11,26 +11,33 @@ var $slice = callBound('Array.prototype.slice'); var hasSymbols = require('has-symbols/shams')(); var isConcatSpreadable = hasSymbols && Symbol.isConcatSpreadable; -var empty = []; -if (isConcatSpreadable) { - empty[isConcatSpreadable] = true; -} +/** @type {never[]} */ var empty = []; var $concatApply = isConcatSpreadable ? callBind.apply($concat, empty) : null; -var $concatCall = isConcatSpreadable ? null : callBind($concat, empty); -var isArray = isConcatSpreadable ? require('isarray') : null; +// eslint-disable-next-line no-extra-parens +var isArray = isConcatSpreadable ? /** @type {(value: unknown) => value is unknown[]} */ (require('isarray')) : null; +/** @type {import('.')} */ module.exports = isConcatSpreadable // eslint-disable-next-line no-unused-vars ? function safeArrayConcat(item) { for (var i = 0; i < arguments.length; i += 1) { - var arg = arguments[i]; + /** @type {typeof item} */ var arg = arguments[i]; + // @ts-expect-error ts(2538) see https://github.com/microsoft/TypeScript/issues/9998#issuecomment-1890787975; works if `const` if (arg && typeof arg === 'object' && typeof arg[isConcatSpreadable] === 'boolean') { + // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing + if (!empty[isConcatSpreadable]) { + // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing + empty[isConcatSpreadable] = true; + } + // @ts-expect-error ts(2721) ts(18047) not sure why TS can't figure out this can't be null var arr = isArray(arg) ? $slice(arg) : [arg]; + // @ts-expect-error ts(7015) TS can't handle expandos on an array arr[isConcatSpreadable] = true; // shadow the property. TODO: use [[Define]] arguments[i] = arr; } } + // @ts-expect-error ts(2345) https://github.com/microsoft/TypeScript/issues/57164 TS doesn't understand that apply can take an arguments object return $concatApply(arguments); } - : $concatCall; + : callBind($concat, empty); diff --git a/node_modules/safe-array-concat/node_modules/isarray/README.md b/node_modules/safe-array-concat/node_modules/isarray/README.md deleted file mode 100644 index 3e160b2b76..0000000000 --- a/node_modules/safe-array-concat/node_modules/isarray/README.md +++ /dev/null @@ -1,38 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers and deprecated Node.js versions. - -[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) -[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) - -[![browser support](https://ci.testling.com/juliangruber/isarray.png) -](https://ci.testling.com/juliangruber/isarray) - -__Just use Array.isArray directly__, unless you need to support those older versions. - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](https://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/node-browserify). - -## Sponsors - -This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! - -Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! diff --git a/node_modules/safe-array-concat/node_modules/isarray/index.js b/node_modules/safe-array-concat/node_modules/isarray/index.js deleted file mode 100644 index a57f634959..0000000000 --- a/node_modules/safe-array-concat/node_modules/isarray/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; diff --git a/node_modules/safe-array-concat/node_modules/isarray/package.json b/node_modules/safe-array-concat/node_modules/isarray/package.json deleted file mode 100644 index fb0e89be34..0000000000 --- a/node_modules/safe-array-concat/node_modules/isarray/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "isarray", - "description": "Array#isArray for older browsers", - "version": "2.0.5", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "homepage": "https://github.com/juliangruber/isarray", - "main": "index.js", - "files": [ - "index.js" - ], - "dependencies": {}, - "devDependencies": { - "tape": "~2.13.4" - }, - "keywords": [ - "browser", - "isarray", - "array" - ], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test.js", - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "scripts": { - "test": "tape test.js" - } -} diff --git a/node_modules/safe-array-concat/package.json b/node_modules/safe-array-concat/package.json index 116ce9fee8..2de6260490 100644 --- a/node_modules/safe-array-concat/package.json +++ b/node_modules/safe-array-concat/package.json @@ -1,17 +1,21 @@ { "name": "safe-array-concat", - "version": "1.0.0", + "version": "1.1.2", "description": "`Array.prototype.concat`, but made safe by ignoring Symbol.isConcatSpreadable", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "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)\")\"", + "prelint": "npm run tsc", "lint": "eslint --ext=js,mjs .", + "tsc": "tsc -p .", + "posttsc": "attw -P", "postlint": "evalmd README.md", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", @@ -41,21 +45,31 @@ }, "homepage": "https://github.com/ljharb/safe-array-concat#readme", "devDependencies": { - "@ljharb/eslint-config": "^21.0.1", - "aud": "^2.0.2", + "@arethetypeswrong/cli": "^0.15.1", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.2.0", + "@types/call-bind": "^1.0.5", + "@types/get-intrinsic": "^1.2.2", + "@types/has-symbols": "^1.0.2", + "@types/isarray": "^2.0.2", + "@types/mock-property": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", "in-publish": "^2.0.1", - "mock-property": "^1.0.0", - "npmignore": "^0.3.0", + "mock-property": "^1.0.3", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" + "set-function-length": "^1.2.2", + "tape": "^5.7.5", + "typescript": "next" }, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, diff --git a/node_modules/safe-array-concat/test/index.js b/node_modules/safe-array-concat/test/index.js index 2e4f18dded..ce52abe6bc 100644 --- a/node_modules/safe-array-concat/test/index.js +++ b/node_modules/safe-array-concat/test/index.js @@ -6,7 +6,7 @@ var hasSymbols = require('has-symbols/shams')(); var isConcatSpreadable = hasSymbols && Symbol.isConcatSpreadable; var species = hasSymbols && Symbol.species; -var boundFnsHaveConfigurableLengths = Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(function () {}.bind(), 'length').configurable; +var boundFnsHaveConfigurableLengths = require('set-function-length/env').boundFnsHaveConfigurableLengths; var safeConcat = require('../'); @@ -15,12 +15,12 @@ test('safe-array-concat', function (t) { t.equal( safeConcat.length, boundFnsHaveConfigurableLengths ? 1 : 0, - 'has a length of ' + (boundFnsHaveConfigurableLengths ? 1 : '0 (function lengths are not configurable)'), - 'length is as expected' + 'has a length of ' + (boundFnsHaveConfigurableLengths ? 1 : '0 (function lengths are not configurable)') ); t.deepEqual( - safeConcat([1, 2], [3, 4], 'foo', 5, 6, [[7]]), + // eslint-disable-next-line no-extra-parens + safeConcat(/** @type {(string | number | number[])[]} */ ([1, 2]), [3, 4], 'foo', 5, 6, [[7]]), [1, 2, 3, 4, 'foo', 5, 6, [7]], 'works with flat and nested arrays' ); @@ -48,7 +48,9 @@ test('safe-array-concat', function (t) { t.test('has Symbol.species', { skip: !species }, function (st) { var speciesArr = [1, 2]; + // @ts-expect-error ts(2740) TS's `constructor` type requires a function speciesArr.constructor = {}; + // @ts-expect-error ts(2538) TS can't type narrow from tape's `skip` speciesArr.constructor[species] = function Species() { return { args: arguments }; }; @@ -63,24 +65,28 @@ test('safe-array-concat', function (t) { }); t.test('has isConcatSpreadable', { skip: !isConcatSpreadable }, function (st) { - st.teardown(mockProperty(String.prototype, isConcatSpreadable, { value: true })); - - var nonSpreadable = [1, 2]; - nonSpreadable[isConcatSpreadable] = false; - - st.deepEqual( - safeConcat(nonSpreadable, 3, 4, 'foo', Object('bar')), - [1, 2, 3, 4, 'foo', Object('bar')], - 'a non-concat-spreadable array is spreaded, and a concat-spreadable String is not spreaded' - ); - - st.teardown(mockProperty(Array.prototype, isConcatSpreadable, { value: false })); - - st.deepEqual( - safeConcat([1, 2], 3, 4, 'foo', Object('bar')), - [1, 2, 3, 4, 'foo', Object('bar')], - 'all arrays marked non-concat-spreadable are still spreaded, and a concat-spreadable String is not spreaded' - ); + // TS can't type narrow from tape's `skip` + if (isConcatSpreadable) { + st.teardown(mockProperty(String.prototype, isConcatSpreadable, { value: true })); + + var nonSpreadable = [1, 2]; + // @ts-expect-error ts(7015) TS can't handle expandos on an array + nonSpreadable[isConcatSpreadable] = false; + + st.deepEqual( + safeConcat(nonSpreadable, 3, 4, 'foo', Object('bar')), + [1, 2, 3, 4, 'foo', Object('bar')], + 'a non-concat-spreadable array is spreaded, and a concat-spreadable String is not spreaded' + ); + + st.teardown(mockProperty(Array.prototype, isConcatSpreadable, { value: false })); + + st.deepEqual( + safeConcat([1, 2], 3, 4, 'foo', Object('bar')), + [1, 2, 3, 4, 'foo', Object('bar')], + 'all arrays marked non-concat-spreadable are still spreaded, and a concat-spreadable String is not spreaded' + ); + } st.end(); }); diff --git a/node_modules/safe-array-concat/tsconfig.json b/node_modules/safe-array-concat/tsconfig.json new file mode 100644 index 0000000000..0ce1896d10 --- /dev/null +++ b/node_modules/safe-array-concat/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/safe-regex-test/.nycrc b/node_modules/safe-regex-test/.nycrc new file mode 100644 index 0000000000..1826526e09 --- /dev/null +++ b/node_modules/safe-regex-test/.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/safe-regex-test/CHANGELOG.md b/node_modules/safe-regex-test/CHANGELOG.md index e3107aafc7..850a489ff5 100644 --- a/node_modules/safe-regex-test/CHANGELOG.md +++ b/node_modules/safe-regex-test/CHANGELOG.md @@ -5,6 +5,34 @@ 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.3](https://github.com/ljharb/safe-regex-test/compare/v1.0.2...v1.0.3) - 2024-02-06 + +### Commits + +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`d6ba2f9`](https://github.com/ljharb/safe-regex-test/commit/d6ba2f948c679c3104ce6d6c897bedff0f1c5b74) +- [Deps] update `call-bind`, `get-intrinsic` [`5a3b1d7`](https://github.com/ljharb/safe-regex-test/commit/5a3b1d755e46f010e6930f15ec30eae023feffd3) +- [Dev Deps] update `tape` [`75fb719`](https://github.com/ljharb/safe-regex-test/commit/75fb71937c5daf1326052c59d6f251f439cd9332) + +## [v1.0.2](https://github.com/ljharb/safe-regex-test/compare/v1.0.1...v1.0.2) - 2024-01-11 + +### Commits + +- [meta] package.json `sideEffects` should be boolean [`094bb88`](https://github.com/ljharb/safe-regex-test/commit/094bb88d93ce25e26d20f5badee4e45acf0e3ac5) + +## [v1.0.1](https://github.com/ljharb/safe-regex-test/compare/v1.0.0...v1.0.1) - 2024-01-09 + +### Commits + +- [Tests] add nyc for coverage [`7e3f525`](https://github.com/ljharb/safe-regex-test/commit/7e3f5254efdf0979f72492f0e7f52a3a9814591f) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `npmignore`, `object-inspect`, `tape` [`e7e0169`](https://github.com/ljharb/safe-regex-test/commit/e7e016949b78602f24debc1185c26f33cc4e9d1b) +- [actions] update rebase action [`2962694`](https://github.com/ljharb/safe-regex-test/commit/2962694bce7ffa278e873911072c11119bb3a608) +- [readme] add testing badges; remove david-dm badges [`e9dfd83`](https://github.com/ljharb/safe-regex-test/commit/e9dfd830655ac702ac7b7947f7076bb524994968) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` [`496fe99`](https://github.com/ljharb/safe-regex-test/commit/496fe99aa66f20cadb1cf79f6d479b87ae95b620) +- [Deps] update `call-bind`, `get-intrinsic` [`d94c5ba`](https://github.com/ljharb/safe-regex-test/commit/d94c5badd0362df8ff7ced38b50d20550fd629c1) +- [meta] add missing `engines.node` [`f3d4711`](https://github.com/ljharb/safe-regex-test/commit/f3d4711a51b21330e34f5f27e45452fbdb924715) +- [Deps] update `get-intrinsic` [`0eeedd7`](https://github.com/ljharb/safe-regex-test/commit/0eeedd74d0313fab9b0718895c02905f702ecb4d) +- [meta] add `sideEffects` flag [`fe1655f`](https://github.com/ljharb/safe-regex-test/commit/fe1655f16449208d987d9f4b7dafb15564ca80f7) + ## v1.0.0 - 2022-09-22 ### Commits diff --git a/node_modules/safe-regex-test/README.md b/node_modules/safe-regex-test/README.md index 6e1162f2e9..fca66d436b 100644 --- a/node_modules/safe-regex-test/README.md +++ b/node_modules/safe-regex-test/README.md @@ -1,7 +1,7 @@ # safe-regex-test [![Version Badge][npm-version-svg]][package-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] [![License][license-image]][license-url] [![Downloads][downloads-image]][downloads-url] @@ -40,3 +40,7 @@ Simply clone the repo, `npm install`, and run `npm test` [license-url]: LICENSE [downloads-image]: https://img.shields.io/npm/dm/safe-regex-test.svg [downloads-url]: https://npm-stat.com/charts.html?package=safe-regex-test +[codecov-image]: https://codecov.io/gh/ljharb/safe-regex-test/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/safe-regex-test/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/safe-regex-test +[actions-url]: https://github.com/ljharb/safe-regex-test/actions diff --git a/node_modules/safe-regex-test/index.js b/node_modules/safe-regex-test/index.js index 19ad8db309..c57aad7b4a 100644 --- a/node_modules/safe-regex-test/index.js +++ b/node_modules/safe-regex-test/index.js @@ -1,11 +1,10 @@ 'use strict'; var callBound = require('call-bind/callBound'); -var GetIntrinsic = require('get-intrinsic'); var isRegex = require('is-regex'); var $exec = callBound('RegExp.prototype.exec'); -var $TypeError = GetIntrinsic('%TypeError%'); +var $TypeError = require('es-errors/type'); module.exports = function regexTester(regex) { if (!isRegex(regex)) { diff --git a/node_modules/safe-regex-test/package.json b/node_modules/safe-regex-test/package.json index 999da05910..0c1e2d5e9e 100644 --- a/node_modules/safe-regex-test/package.json +++ b/node_modules/safe-regex-test/package.json @@ -1,12 +1,13 @@ { "name": "safe-regex-test", - "version": "1.0.0", + "version": "1.0.3", "description": "Give a regex, get a robust predicate function that tests it against a string.", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "version": "auto-changelog && git add CHANGELOG.md", @@ -15,7 +16,7 @@ "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", - "tests-only": "tape test", + "tests-only": "nyc tape test", "test": "npm run tests-only", "posttest": "aud --production" }, @@ -42,22 +43,23 @@ }, "homepage": "https://github.com/ljharb/safe-regex-test#readme", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "devDependencies": { - "@ljharb/eslint-config": "^21.0.0", - "aud": "^2.0.1", + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "for-each": "^0.3.3", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", - "object-inspect": "^1.12.2", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.1" + "tape": "^5.7.4" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -71,5 +73,8 @@ "ignore": [ ".github/workflows" ] + }, + "engines": { + "node": ">= 0.4" } } diff --git a/node_modules/set-function-length/.eslintrc b/node_modules/set-function-length/.eslintrc new file mode 100644 index 0000000000..7cff50717e --- /dev/null +++ b/node_modules/set-function-length/.eslintrc @@ -0,0 +1,27 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "GetIntrinsic" + ], + }], + "no-extra-parens": "off", + }, + + "overrides": [ + { + "files": ["test/**/*.js"], + "rules": { + "id-length": "off", + "max-lines-per-function": "off", + "multiline-comment-style": "off", + "no-empty-function": "off", + }, + }, + ], +} diff --git a/node_modules/set-function-length/.github/FUNDING.yml b/node_modules/set-function-length/.github/FUNDING.yml new file mode 100644 index 0000000000..92feb6f9bc --- /dev/null +++ b/node_modules/set-function-length/.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/set-function-name +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/set-function-length/.nycrc b/node_modules/set-function-length/.nycrc new file mode 100644 index 0000000000..1826526e09 --- /dev/null +++ b/node_modules/set-function-length/.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/set-function-length/CHANGELOG.md b/node_modules/set-function-length/CHANGELOG.md new file mode 100644 index 0000000000..bac439d878 --- /dev/null +++ b/node_modules/set-function-length/CHANGELOG.md @@ -0,0 +1,70 @@ +# 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.2.2](https://github.com/ljharb/set-function-length/compare/v1.2.1...v1.2.2) - 2024-03-09 + +### Commits + +- [types] use shared config [`027032f`](https://github.com/ljharb/set-function-length/commit/027032fe9cc439644a07248ea6a8d813fcc767cb) +- [actions] remove redundant finisher; use reusable workflow [`1fd4fb1`](https://github.com/ljharb/set-function-length/commit/1fd4fb1c58bd5170f0dcff7e320077c0aa2ffdeb) +- [types] use a handwritten d.ts file instead of emit [`01b9761`](https://github.com/ljharb/set-function-length/commit/01b9761742c95e1118e8c2d153ce2ae43d9731aa) +- [Deps] update `define-data-property`, `get-intrinsic`, `has-property-descriptors` [`bee8eaf`](https://github.com/ljharb/set-function-length/commit/bee8eaf7749f325357ade85cffeaeef679e513d4) +- [Dev Deps] update `call-bind`, `tape` [`5dae579`](https://github.com/ljharb/set-function-length/commit/5dae579fdc3aab91b14ebb58f9c19ee3f509d434) +- [Tests] use `@arethetypeswrong/cli` [`7e22425`](https://github.com/ljharb/set-function-length/commit/7e22425d15957fd3d6da0b6bca4afc0c8d255d2d) + +## [v1.2.1](https://github.com/ljharb/set-function-length/compare/v1.2.0...v1.2.1) - 2024-02-06 + +### Commits + +- [Dev Deps] update `call-bind`, `tape`, `typescript` [`d9a4601`](https://github.com/ljharb/set-function-length/commit/d9a460199c4c1fa37da9ebe055e2c884128f0738) +- [Deps] update `define-data-property`, `get-intrinsic` [`38d39ae`](https://github.com/ljharb/set-function-length/commit/38d39aed13a757ed36211d5b0437b88485090c6b) +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`b4bfe5a`](https://github.com/ljharb/set-function-length/commit/b4bfe5ae0953b906d55b85f867eca5e7f673ebf4) + +## [v1.2.0](https://github.com/ljharb/set-function-length/compare/v1.1.1...v1.2.0) - 2024-01-14 + +### Commits + +- [New] add types [`f6d9088`](https://github.com/ljharb/set-function-length/commit/f6d9088b9283a3112b21c6776e8bef6d1f30558a) +- [Fix] ensure `env` properties are always booleans [`0c42f84`](https://github.com/ljharb/set-function-length/commit/0c42f84979086389b3229e1b4272697fd352275a) +- [Dev Deps] update `aud`, `call-bind`, `npmignore`, `tape` [`2b75f75`](https://github.com/ljharb/set-function-length/commit/2b75f75468093a4bb8ce8ca989b2edd2e80d95d1) +- [Deps] update `get-intrinsic`, `has-property-descriptors` [`19bf0fc`](https://github.com/ljharb/set-function-length/commit/19bf0fc4ffaa5ad425acbfa150516be9f3b6263a) +- [meta] add `sideEffects` flag [`8bb9b78`](https://github.com/ljharb/set-function-length/commit/8bb9b78c11c621123f725c9470222f43466c01d0) + +## [v1.1.1](https://github.com/ljharb/set-function-length/compare/v1.1.0...v1.1.1) - 2023-10-19 + +### Fixed + +- [Fix] move `define-data-property` to runtime deps [`#2`](https://github.com/ljharb/set-function-length/issues/2) + +### Commits + +- [Dev Deps] update `object-inspect`; add missing `call-bind` [`5aecf79`](https://github.com/ljharb/set-function-length/commit/5aecf79e7d6400957a5d9bd9ac20d4528908ca18) + +## [v1.1.0](https://github.com/ljharb/set-function-length/compare/v1.0.1...v1.1.0) - 2023-10-13 + +### Commits + +- [New] add `env` entry point [`475c87a`](https://github.com/ljharb/set-function-length/commit/475c87aa2f59b700aaed589d980624ec596acdcb) +- [Tests] add coverage with `nyc` [`14f0bf8`](https://github.com/ljharb/set-function-length/commit/14f0bf8c145ae60bf14a026420a06bb7be132c36) +- [eslint] fix linting failure [`fb516f9`](https://github.com/ljharb/set-function-length/commit/fb516f93c664057138c53559ef63c8622a093335) +- [Deps] update `define-data-property` [`d727e7c`](https://github.com/ljharb/set-function-length/commit/d727e7c6c9a40d7bf26797694e500ea68741feea) + +## [v1.0.1](https://github.com/ljharb/set-function-length/compare/v1.0.0...v1.0.1) - 2023-10-12 + +### Commits + +- [Refactor] use `get-intrinsic`, since it‘s in the dep graph anyways [`278a954`](https://github.com/ljharb/set-function-length/commit/278a954a06cd849051c569ff7aee56df6798933e) +- [meta] add `exports` [`72acfe5`](https://github.com/ljharb/set-function-length/commit/72acfe5a0310071fb205a72caba5ecbab24336a0) + +## v1.0.0 - 2023-10-12 + +### Commits + +- Initial implementation, tests, readme [`fce14e1`](https://github.com/ljharb/set-function-length/commit/fce14e17586460e4f294405173be72b6ffdf7e5f) +- Initial commit [`ca7ba85`](https://github.com/ljharb/set-function-length/commit/ca7ba857c7c283f9d26e21f14e71cd388f2cb722) +- npm init [`6a7e493`](https://github.com/ljharb/set-function-length/commit/6a7e493927736cebcaf5c1a84e69b8e6b7b744d8) +- Only apps should have lockfiles [`d2bf6c4`](https://github.com/ljharb/set-function-length/commit/d2bf6c43de8a51b02a0aa53e8d62cb50c4a2b0da) diff --git a/node_modules/set-function-length/LICENSE b/node_modules/set-function-length/LICENSE new file mode 100644 index 0000000000..0314929078 --- /dev/null +++ b/node_modules/set-function-length/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/set-function-length/README.md b/node_modules/set-function-length/README.md new file mode 100644 index 0000000000..15e3ac4b1e --- /dev/null +++ b/node_modules/set-function-length/README.md @@ -0,0 +1,56 @@ +# set-function-length [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Set a function’s length. + +Arguments: + - `fn`: the function + - `length`: the new length. Must be an integer between 0 and 2**32. + - `loose`: Optional. If true, and the length fails to be set, do not throw. Default false. + +Returns `fn`. + +## Usage + +```javascript +var setFunctionLength = require('set-function-length'); +var assert = require('assert'); + +function zero() {} +function one(_) {} +function two(_, __) {} + +assert.equal(zero.length, 0); +assert.equal(one.length, 1); +assert.equal(two.length, 2); + +assert.equal(setFunctionLength(zero, 10), zero); +assert.equal(setFunctionLength(one, 11), one); +assert.equal(setFunctionLength(two, 12), two); + +assert.equal(zero.length, 10); +assert.equal(one.length, 11); +assert.equal(two.length, 12); +``` + +[package-url]: https://npmjs.org/package/set-function-length +[npm-version-svg]: https://versionbadg.es/ljharb/set-function-length.svg +[deps-svg]: https://david-dm.org/ljharb/set-function-length.svg +[deps-url]: https://david-dm.org/ljharb/set-function-length +[dev-deps-svg]: https://david-dm.org/ljharb/set-function-length/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/set-function-length#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/set-function-length.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/set-function-length.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/set-function-length.svg +[downloads-url]: https://npm-stat.com/charts.html?package=set-function-length +[codecov-image]: https://codecov.io/gh/ljharb/set-function-length/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/set-function-length/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/set-function-length +[actions-url]: https://github.com/ljharb/set-function-length/actions diff --git a/node_modules/set-function-length/env.d.ts b/node_modules/set-function-length/env.d.ts new file mode 100644 index 0000000000..970ea535b6 --- /dev/null +++ b/node_modules/set-function-length/env.d.ts @@ -0,0 +1,9 @@ +declare const env: { + __proto__: null, + boundFnsHaveConfigurableLengths: boolean; + boundFnsHaveWritableLengths: boolean; + functionsHaveConfigurableLengths: boolean; + functionsHaveWritableLengths: boolean; +}; + +export = env; \ No newline at end of file diff --git a/node_modules/set-function-length/env.js b/node_modules/set-function-length/env.js new file mode 100644 index 0000000000..d9b0a2997b --- /dev/null +++ b/node_modules/set-function-length/env.js @@ -0,0 +1,25 @@ +'use strict'; + +var gOPD = require('gopd'); +var bind = require('function-bind'); + +var unbound = gOPD && gOPD(function () {}, 'length'); +// @ts-expect-error ts(2555) TS is overly strict with .call +var bound = gOPD && gOPD(bind.call(function () {}), 'length'); + +var functionsHaveConfigurableLengths = !!(unbound && unbound.configurable); + +var functionsHaveWritableLengths = !!(unbound && unbound.writable); + +var boundFnsHaveConfigurableLengths = !!(bound && bound.configurable); + +var boundFnsHaveWritableLengths = !!(bound && bound.writable); + +/** @type {import('./env')} */ +module.exports = { + __proto__: null, + boundFnsHaveConfigurableLengths: boundFnsHaveConfigurableLengths, + boundFnsHaveWritableLengths: boundFnsHaveWritableLengths, + functionsHaveConfigurableLengths: functionsHaveConfigurableLengths, + functionsHaveWritableLengths: functionsHaveWritableLengths +}; diff --git a/node_modules/set-function-length/index.d.ts b/node_modules/set-function-length/index.d.ts new file mode 100644 index 0000000000..0451ecd391 --- /dev/null +++ b/node_modules/set-function-length/index.d.ts @@ -0,0 +1,7 @@ +declare namespace setFunctionLength { + type Func = (...args: unknown[]) => unknown; +} + +declare function setFunctionLength(fn: T, length: number, loose?: boolean): T; + +export = setFunctionLength; \ No newline at end of file diff --git a/node_modules/set-function-length/index.js b/node_modules/set-function-length/index.js new file mode 100644 index 0000000000..14ce74dae4 --- /dev/null +++ b/node_modules/set-function-length/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); +var define = require('define-data-property'); +var hasDescriptors = require('has-property-descriptors')(); +var gOPD = require('gopd'); + +var $TypeError = require('es-errors/type'); +var $floor = GetIntrinsic('%Math.floor%'); + +/** @type {import('.')} */ +module.exports = function setFunctionLength(fn, length) { + if (typeof fn !== 'function') { + throw new $TypeError('`fn` is not a function'); + } + if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { + throw new $TypeError('`length` must be a positive 32-bit integer'); + } + + var loose = arguments.length > 2 && !!arguments[2]; + + var functionLengthIsConfigurable = true; + var functionLengthIsWritable = true; + if ('length' in fn && gOPD) { + var desc = gOPD(fn, 'length'); + if (desc && !desc.configurable) { + functionLengthIsConfigurable = false; + } + if (desc && !desc.writable) { + functionLengthIsWritable = false; + } + } + + if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { + if (hasDescriptors) { + define(/** @type {Parameters[0]} */ (fn), 'length', length, true, true); + } else { + define(/** @type {Parameters[0]} */ (fn), 'length', length); + } + } + return fn; +}; diff --git a/node_modules/set-function-length/package.json b/node_modules/set-function-length/package.json new file mode 100644 index 0000000000..585c9c87c8 --- /dev/null +++ b/node_modules/set-function-length/package.json @@ -0,0 +1,102 @@ +{ + "name": "set-function-length", + "version": "1.2.2", + "description": "Set a function's length property", + "main": "index.js", + "exports": { + ".": "./index.js", + "./env": "./env.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "directories": { + "test": "test" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "tsc": "tsc -p .", + "posttsc": "attw -P", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "npm run tsc", + "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/ljharb/set-function-length.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "set", + "function", + "length", + "function.length" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/set-function-length/issues" + }, + "homepage": "https://github.com/ljharb/set-function-length#readme", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.15.1", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.1.1", + "@types/call-bind": "^1.0.5", + "@types/define-properties": "^1.1.5", + "@types/es-value-fixtures": "^1.4.4", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/gopd": "^1.0.3", + "@types/has-property-descriptors": "^1.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "call-bind": "^1.0.7", + "es-value-fixtures": "^1.4.2", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "test" + ] + } +} diff --git a/node_modules/set-function-length/tsconfig.json b/node_modules/set-function-length/tsconfig.json new file mode 100644 index 0000000000..d9a6668c3a --- /dev/null +++ b/node_modules/set-function-length/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/set-function-name/.eslintrc b/node_modules/set-function-name/.eslintrc new file mode 100644 index 0000000000..ceed91844e --- /dev/null +++ b/node_modules/set-function-name/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": "off", + "no-extra-parens": "off", + }, + + "overrides": [ + { + "files": ["test/**/*.js"], + "rules": { + "id-length": "off", + "multiline-comment-style": "off", + "no-empty-function": "off", + }, + }, + ], +} diff --git a/node_modules/set-function-name/.github/FUNDING.yml b/node_modules/set-function-name/.github/FUNDING.yml new file mode 100644 index 0000000000..92feb6f9bc --- /dev/null +++ b/node_modules/set-function-name/.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/set-function-name +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/set-function-name/CHANGELOG.md b/node_modules/set-function-name/CHANGELOG.md new file mode 100644 index 0000000000..d3719c3b05 --- /dev/null +++ b/node_modules/set-function-name/CHANGELOG.md @@ -0,0 +1,48 @@ +# 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). + +## [v2.0.2](https://github.com/jfsiii/set-function-name/compare/v2.0.1...v2.0.2) - 2024-02-19 + +### Commits + +- [meta] add types [`ae747cd`](https://github.com/jfsiii/set-function-name/commit/ae747cdcf4a986e6974a375be8ec04dd7565f0bd) +- [Dev Deps] update `aud`, `npmignore`, `object-inspect`, `tape` [`01aafcb`](https://github.com/jfsiii/set-function-name/commit/01aafcb82e4df653fcbd666ce4f256c06f70d94e) +- [Deps] update `define-data-property`, `has-property-descriptors` [`0ef6338`](https://github.com/jfsiii/set-function-name/commit/0ef6338fac84f63c2445855778bfd9271ae048cb) +- [Refactor] use `es-errors` [`0b23e87`](https://github.com/jfsiii/set-function-name/commit/0b23e878a16c959bd8b1aa7152d65818dd90578c) + +## [v2.0.1](https://github.com/jfsiii/set-function-name/compare/v2.0.0...v2.0.1) - 2023-09-13 + +### Commits + +- [Fix] move `functions-have-names` to runtime deps [`db2eda8`](https://github.com/jfsiii/set-function-name/commit/db2eda8da4c8aecfad01739000bbd63d04a8e8cf) + +## [v2.0.0](https://github.com/jfsiii/set-function-name/compare/v1.0.0...v2.0.0) - 2023-09-12 + +### Commits + +- [eslint] add `npm run lint` [`23e1fcd`](https://github.com/jfsiii/set-function-name/commit/23e1fcd85b64b864cb8f7e894da78d540e72923a) +- [actions] add reused GHA [`525127e`](https://github.com/jfsiii/set-function-name/commit/525127e08bdb35b0d44f565492456c7d1d5923fc) +- [meta] add `.gitignore` [`aa3abdf`](https://github.com/jfsiii/set-function-name/commit/aa3abdfa6af18adf70281352905dd69ef8b2c66f) +- [Tests] switch tests to use tape; add posttest [`8ad6d30`](https://github.com/jfsiii/set-function-name/commit/8ad6d30c61f78d2f9beec156ba7f1c4c3741c593) +- [readme] add readme [`732c46c`](https://github.com/jfsiii/set-function-name/commit/732c46c05e0fa6843dbc85b3af1e9c9bf22e7bf9) +- [New] add optional `loose` argument [`f5e4771`](https://github.com/jfsiii/set-function-name/commit/f5e4771266c95567d87f6dc2cff94c986bc7e074) +- [meta] relicense package to MIT; fix repo URLs [`13948f8`](https://github.com/jfsiii/set-function-name/commit/13948f8bb4ec8a25b67332d8de232ad0c0dc4e6d) +- [meta] add `auto-changelog` [`7ab201c`](https://github.com/jfsiii/set-function-name/commit/7ab201c0d83d464664cc4588acad0d0f75926679) +- [Breaking] throw if a non-function is provided [`cf6fc8f`](https://github.com/jfsiii/set-function-name/commit/cf6fc8f3396d58aa8c32a83375cbf57d933d7e79) +- [Breaking] drop UMD, just use CJS [`47abfe8`](https://github.com/jfsiii/set-function-name/commit/47abfe89abfaa72f71e0a77a52a5ff2b7377e11a) +- [Refactor] use `define-data-property` and `has-property-descriptors` [`9921c2b`](https://github.com/jfsiii/set-function-name/commit/9921c2b64c571255084aefaa02660314609e8ea0) +- [meta] use `npmignore` to autogenerate an npmignore file [`c5dbe4f`](https://github.com/jfsiii/set-function-name/commit/c5dbe4f4c44298596338432e2ac9946a10c98edd) +- Only apps should have lockfiles [`98bbfa1`](https://github.com/jfsiii/set-function-name/commit/98bbfa145387f318152a6b792bd69aca3c544813) +- [meta] add `safe-publish-latest` [`8916cd8`](https://github.com/jfsiii/set-function-name/commit/8916cd8f5549dceee31f06d35a76e2f9d4933a8b) +- [meta] add `engines` [`2427c8e`](https://github.com/jfsiii/set-function-name/commit/2427c8e2499f378c9ff3d92c7d544c771ca810df) + +## v1.0.0 - 2017-09-14 + +### Commits + +- Initial commit. Including tests. [`f26a1f2`](https://github.com/jfsiii/set-function-name/commit/f26a1f2c69a70dad5049b1daa08eae5f6acd9a1e) +- add .npmignore to ignore test directory [`9cac96f`](https://github.com/jfsiii/set-function-name/commit/9cac96fd9e98f25883be6e727ac32356522a5d69) diff --git a/node_modules/set-function-name/LICENSE b/node_modules/set-function-name/LICENSE new file mode 100644 index 0000000000..0314929078 --- /dev/null +++ b/node_modules/set-function-name/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/set-function-name/README.md b/node_modules/set-function-name/README.md new file mode 100644 index 0000000000..b1612dd353 --- /dev/null +++ b/node_modules/set-function-name/README.md @@ -0,0 +1,61 @@ +# set-function-name [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Set a function’s name. + +Arguments: + - `fn`: the function + - `name`: the new name + - `loose`: Optional. If true, and the name fails to be set, do not throw. Default false. + +Returns `fn`. + +## Usage + +```javascript +var setFunctionName = require('set-function-name'); +var assert = require('assert'); + +const obj = { + concise() {}, + arrow: () => {}, + named: function named() {}, + anon: function () {}, +}; +assert.equal(obj.concise.name, 'concise'); +assert.equal(obj.arrow.name, 'arrow'); +assert.equal(obj.named.name, 'named'); +assert.equal(obj.anon.name, 'anon'); + +assert.equal(setFunctionName(obj.concise, 'brief'), obj.concise); +assert.equal(setFunctionName(obj.arrow, 'pointy'), obj.arrow); +assert.equal(setFunctionName(obj.named, ''), obj.named); +assert.equal(setFunctionName(obj.anon, 'anonymous'), obj.anon); + +assert.equal(obj.concise.name, 'brief'); +assert.equal(obj.arrow.name, 'pointy'); +assert.equal(obj.named.name, ''); +assert.equal(obj.anon.name, 'anonymous'); +``` + +[package-url]: https://npmjs.org/package/set-function-name +[npm-version-svg]: https://versionbadg.es/ljharb/set-function-name.svg +[deps-svg]: https://david-dm.org/ljharb/set-function-name.svg +[deps-url]: https://david-dm.org/ljharb/set-function-name +[dev-deps-svg]: https://david-dm.org/ljharb/set-function-name/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/set-function-name#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/set-function-name.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/set-function-name.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/set-function-name.svg +[downloads-url]: https://npm-stat.com/charts.html?package=set-function-name +[codecov-image]: https://codecov.io/gh/ljharb/set-function-name/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/set-function-name/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/set-function-name +[actions-url]: https://github.com/ljharb/set-function-name/actions diff --git a/node_modules/set-function-name/index.d.ts b/node_modules/set-function-name/index.d.ts new file mode 100644 index 0000000000..a3f6114a23 --- /dev/null +++ b/node_modules/set-function-name/index.d.ts @@ -0,0 +1,5 @@ +type Func = (...args: unknown[]) => unknown; + +declare function setFunctionName(fn: T, name: string, loose?: boolean): T; + +export = setFunctionName; \ No newline at end of file diff --git a/node_modules/set-function-name/index.js b/node_modules/set-function-name/index.js new file mode 100644 index 0000000000..8c1823875b --- /dev/null +++ b/node_modules/set-function-name/index.js @@ -0,0 +1,23 @@ +'use strict'; + +var define = require('define-data-property'); +var hasDescriptors = require('has-property-descriptors')(); +var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); + +var $TypeError = require('es-errors/type'); + +/** @type {import('.')} */ +module.exports = function setFunctionName(fn, name) { + if (typeof fn !== 'function') { + throw new $TypeError('`fn` is not a function'); + } + var loose = arguments.length > 2 && !!arguments[2]; + if (!loose || functionsHaveConfigurableNames) { + if (hasDescriptors) { + define(/** @type {Parameters[0]} */ (fn), 'name', name, true, true); + } else { + define(/** @type {Parameters[0]} */ (fn), 'name', name); + } + } + return fn; +}; diff --git a/node_modules/set-function-name/package.json b/node_modules/set-function-name/package.json new file mode 100644 index 0000000000..5a47ad9375 --- /dev/null +++ b/node_modules/set-function-name/package.json @@ -0,0 +1,99 @@ +{ + "name": "set-function-name", + "version": "2.0.2", + "description": "Set a function's name property", + "main": "index.js", + "types": "./index.d.ts", + "directories": { + "test": "test" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", + "pretest": "npm run lint", + "tests-only": "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/ljharb/set-function-name.git" + }, + "keywords": [ + "set", + "assign", + "function", + "name", + "function.name" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/set-function-name/issues" + }, + "homepage": "https://github.com/ljharb/set-function-name#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/call-bind": "^1.0.5", + "@types/define-properties": "^1.1.5", + "@types/es-value-fixtures": "^1.4.4", + "@types/for-each": "^0.3.3", + "@types/function.prototype.name": "^1.1.3", + "@types/functions-have-names": "^1.2.2", + "@types/has-property-descriptors": "^1.0.3", + "@types/make-arrow-function": "^1.2.2", + "@types/make-async-function": "^1.0.2", + "@types/make-async-generator-function": "^1.0.3", + "@types/make-generator-function": "^2.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "es-value-fixtures": "^1.4.2", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "function.prototype.name": "^1.1.6", + "in-publish": "^2.0.1", + "make-arrow-function": "^1.2.0", + "make-async-function": "^1.0.0", + "make-async-generator-function": "^1.0.0", + "make-generator-function": "^2.0.0", + "npmignore": "^0.3.1", + "object-inspect": "^1.13.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "test", + "!*.d.ts", + "!*.d.ts.map" + ] + } +} diff --git a/node_modules/set-function-name/tsconfig.json b/node_modules/set-function-name/tsconfig.json new file mode 100644 index 0000000000..6d5dc00f23 --- /dev/null +++ b/node_modules/set-function-name/tsconfig.json @@ -0,0 +1,59 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/sinon/package.json b/node_modules/sinon/package.json index abe40320a3..644abe6c70 100644 --- a/node_modules/sinon/package.json +++ b/node_modules/sinon/package.json @@ -15,7 +15,7 @@ "xhr", "assert" ], - "version": "18.0.0", + "version": "19.0.2", "homepage": "https://sinonjs.org/", "author": "Christian Johansen", "repository": { @@ -33,26 +33,25 @@ "scripts": { "test-node": "mocha --recursive -R dot \"test/**/*-test.js\"", "test-dev": "npm run test-node -- -n watch -n watch-path=test --node-option watch-path=lib -R min", - "test-headless": "mochify --no-detect-globals --recursive -R dot --grep WebWorker --invert \"test/**/*-test.js\"", - "test-coverage": "nyc npm run test-headless -- --transform [ babelify --ignore [ test ] --plugins [ babel-plugin-istanbul ] ]", - "test-cloud": "npm run test-headless -- --wd", - "test-webworker": "mochify --no-detect-globals --https-server 0 --no-request-interception test/webworker/webworker-support-assessment.js", + "test-headless": "mochify --driver puppeteer", + "test-coverage": "nyc nyc --exclude-after-remap false mochify --driver puppeteer --bundle 'node coverage.cjs'", + "test-cloud": "./scripts/test-cloud.sh", + "test-webworker": "mochify --driver puppeteer --serve . test/webworker/webworker-support-assessment.js", "test-esm-support": "mocha test/es2015/module-support-assessment-test.mjs", - "check-esm-bundle-runs-in-browser": "node test/es2015/check-esm-bundle-is-runnable.js", - "test-docker-image": "docker-compose up", + "test-esm-browser-build": "node test/es2015/check-esm-bundle-is-runnable.js", "test-runnable-examples": "docs/release-source/release/examples/run-test.sh", + "test-docs": "cd docs; make check-links", "test": "npm run test-node && npm run test-headless && npm run test-webworker", "check-dependencies": "dependency-check package.json --no-dev --ignore-module esm", + "update-compatibility": "node ./scripts/update-compatibility.cjs", "build": "node ./build.cjs", - "dev-docs": "cd docs; rsync -r --delete release-source/ releases/dev; npm run serve-docs", - "build-docs": "cd docs; bundle exec jekyll build", - "serve-docs": "cd docs; bundle exec jekyll serve --incremental --verbose --livereload", + "build-docs": "cd docs; make build", + "serve-docs": "cd docs; make livereload", "lint": "eslint --max-warnings 0 '**/*.{js,cjs,mjs}'", "unimported": "unimported .", "pretest-webworker": "npm run build", - "prebuild": "rimraf pkg && npm run check-dependencies", - "postbuild": "npm run test-esm-support ", - "prebuild-docs": "./scripts/update-compatibility.js", + "prebuild": "rimraf pkg && npm run check-dependencies && npm run update-compatibility", + "postbuild": "npm run test-esm-support && npm run test-esm-browser-build", "prepublishOnly": "npm run build", "prettier:check": "prettier --check '**/*.{js,css,md}'", "prettier:write": "prettier --write '**/*.{js,css,md}'", @@ -73,35 +72,47 @@ "*.js": "eslint --quiet", "*.mjs": "eslint --quiet --ext mjs --parser-options=sourceType:module" }, + "mochify": { + "reporter": "dot", + "timeout": 10000, + "bundle": "esbuild --bundle --sourcemap=inline --define:process.env.NODE_DEBUG=\"\" --external:fs", + "bundle_stdin": "require", + "spec": "test/**/*-test.js" + }, "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.2.0", - "nise": "^6.0.0", - "supports-color": "^7" + "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" }, "devDependencies": { - "@babel/core": "^7.24.4", + "@babel/core": "^7.25.2", + "@mochify/cli": "^0.4.1", + "@mochify/driver-puppeteer": "^0.4.0", + "@mochify/driver-webdriver": "^0.2.1", "@sinonjs/eslint-config": "^5.0.3", "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", "@sinonjs/referee": "^11.0.1", "@studio/changes": "^3.0.0", - "babel-plugin-istanbul": "^6.1.1", + "babel-plugin-istanbul": "^7.0.0", "babelify": "^10.0.0", "browserify": "^16.5.2", - "debug": "^4.3.4", + "debug": "^4.3.7", "dependency-check": "^4.1.0", - "lint-staged": "^15.2.2", - "mocha": "^10.4.0", - "mochify": "^9.2.0", - "nyc": "^15.1.0", - "prettier": "^3.2.5", - "puppeteer": "^22.7.1", - "rimraf": "^5.0.5", - "semver": "^7.6.0", + "esbuild": "^0.23.1", + "esbuild-plugin-istanbul": "^0.3.0", + "get-stdin": "^9.0.0", + "lint-staged": "^15.2.10", + "mocha": "^10.7.3", + "nyc": "^17.0.0", + "prettier": "^3.3.3", + "puppeteer": "^23.3.0", + "rimraf": "^6.0.1", + "semver": "^7.6.3", "shelljs": "^0.8.5", - "unimported": "^1.31.0" + "unimported": "^1.31.1" }, "files": [ "lib", diff --git a/node_modules/sinon/pkg/sinon-esm.js b/node_modules/sinon/pkg/sinon-esm.js index 127a67c9c4..a8bf5b4a4f 100644 --- a/node_modules/sinon/pkg/sinon-esm.js +++ b/node_modules/sinon/pkg/sinon-esm.js @@ -1,4 +1,4 @@ -/* Sinon.JS 18.0.0, 2024-05-15, @license BSD-3 */let sinon;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i} abortListenerMap */ /* eslint-enable jsdoc/require-property-description */ @@ -5539,6 +5546,7 @@ if (typeof require === "function" && typeof module === "object") { * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + * @property {boolean} [ignoreMissingTimers] default is false, meaning asking to fake timers that are not present will throw an error */ /* eslint-disable jsdoc/require-property-description */ @@ -5583,16 +5591,26 @@ function withGlobal(_global) { const NOOP_ARRAY = function () { return []; }; - const timeoutResult = _global.setTimeout(NOOP, 0); - const addTimerReturnsObject = typeof timeoutResult === "object"; - const hrtimePresent = + const isPresent = {}; + let timeoutResult, + addTimerReturnsObject = false; + + if (_global.setTimeout) { + isPresent.setTimeout = true; + timeoutResult = _global.setTimeout(NOOP, 0); + addTimerReturnsObject = typeof timeoutResult === "object"; + } + isPresent.clearTimeout = Boolean(_global.clearTimeout); + isPresent.setInterval = Boolean(_global.setInterval); + isPresent.clearInterval = Boolean(_global.clearInterval); + isPresent.hrtime = _global.process && typeof _global.process.hrtime === "function"; - const hrtimeBigintPresent = - hrtimePresent && typeof _global.process.hrtime.bigint === "function"; - const nextTickPresent = + isPresent.hrtimeBigint = + isPresent.hrtime && typeof _global.process.hrtime.bigint === "function"; + isPresent.nextTick = _global.process && typeof _global.process.nextTick === "function"; const utilPromisify = _global.process && require("util").promisify; - const performancePresent = + isPresent.performance = _global.performance && typeof _global.performance.now === "function"; const hasPerformancePrototype = _global.Performance && @@ -5601,29 +5619,60 @@ function withGlobal(_global) { _global.performance && _global.performance.constructor && _global.performance.constructor.prototype; - const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); - const requestAnimationFramePresent = + isPresent.queueMicrotask = _global.hasOwnProperty("queueMicrotask"); + isPresent.requestAnimationFrame = _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"; - const cancelAnimationFramePresent = + isPresent.cancelAnimationFrame = _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"; - const requestIdleCallbackPresent = + isPresent.requestIdleCallback = _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"; - const cancelIdleCallbackPresent = + isPresent.cancelIdleCallbackPresent = _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"; - const setImmediatePresent = + isPresent.setImmediate = _global.setImmediate && typeof _global.setImmediate === "function"; - const intlPresent = _global.Intl && typeof _global.Intl === "object"; + isPresent.clearImmediate = + _global.clearImmediate && typeof _global.clearImmediate === "function"; + isPresent.Intl = _global.Intl && typeof _global.Intl === "object"; - _global.clearTimeout(timeoutResult); + if (_global.clearTimeout) { + _global.clearTimeout(timeoutResult); + } const NativeDate = _global.Date; const NativeIntl = _global.Intl; let uniqueTimerId = idCounterStart; + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", + ); + } + isPresent.Date = true; + + /** + * The PerformanceEntry object encapsulates a single performance metric + * that is part of the browser's performance timeline. + * + * This is an object returned by the `mark` and `measure` methods on the Performance prototype + */ + class FakePerformanceEntry { + constructor(name, entryType, startTime, duration) { + this.name = name; + this.entryType = entryType; + this.startTime = startTime; + this.duration = duration; + } + + toJSON() { + return JSON.stringify({ ...this }); + } + } + /** * @param {number} num * @returns {boolean} @@ -5808,109 +5857,76 @@ function withGlobal(_global) { return infiniteLoopError; } - /** - * @param {Date} target - * @param {Date} source - * @returns {Date} the target after modifications - */ - function mirrorDateProperties(target, source) { - let prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + class ClockDate extends NativeDate { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * @returns void + */ + // eslint-disable-next-line no-unused-vars + constructor(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + if (arguments.length === 0) { + super(ClockDate.clock.now); + } else { + super(...arguments); + } + } + + static [Symbol.hasInstance](instance) { + return instance instanceof NativeDate; } } - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; + ClockDate.isFake = true; + + if (NativeDate.now) { + ClockDate.now = function now() { + return ClockDate.clock.now; }; - } else { - delete target.now; } - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); + if (NativeDate.toSource) { + ClockDate.toSource = function toSource() { + return NativeDate.toSource(); }; - } else { - delete target.toSource; } - // set special toString implementation - target.toString = function toString() { - return source.toString(); + ClockDate.toString = function toString() { + return NativeDate.toString(); }; - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - target.isFake = true; - - return target; - } - - //eslint-disable-next-line jsdoc/require-jsdoc - function createDate() { + // noinspection UnnecessaryLocalVariableJS /** - * @param {number} year - * @param {number} month - * @param {number} date - * @param {number} hour - * @param {number} minute - * @param {number} second - * @param {number} ms - * @returns {Date} + * A normal Class constructor cannot be called without `new`, but Date can, so we need + * to wrap it in a Proxy in order to ensure this functionality of Date is kept intact + * + * @type {ClockDate} */ - function ClockDate(year, month, date, hour, minute, second, ms) { - // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. - // This remains so in the 10th edition of 2019 as well. - if (!(this instanceof ClockDate)) { - return new NativeDate(ClockDate.clock.now).toString(); - } - - // if Date is called as a constructor with 'new' keyword - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ); - default: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ms, + const ClockDateProxy = new Proxy(ClockDate, { + // handler for [[Call]] invocations (i.e. not using `new`) + apply() { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (this instanceof ClockDate) { + throw new TypeError( + "A Proxy should only capture `new` calls with the `construct` handler. This is not supposed to be possible, so check the logic.", ); - } - } + } + + return new NativeDate(ClockDate.clock.now).toString(); + }, + }); - return mirrorDateProperties(ClockDate, NativeDate); + return ClockDateProxy; } /** @@ -6363,6 +6379,16 @@ function withGlobal(_global) { timersModule[entry.methodName] = entry.original; } } + if (clock.timersPromisesModuleMethods !== undefined) { + for ( + let j = 0; + j < clock.timersPromisesModuleMethods.length; + j++ + ) { + const entry = clock.timersPromisesModuleMethods[j]; + timersPromisesModule[entry.methodName] = entry.original; + } + } } if (config.shouldAdvanceTime === true) { @@ -6372,6 +6398,11 @@ function withGlobal(_global) { // Prevent multiple executions which will completely remove these props clock.methods = []; + for (const [listener, signal] of clock.abortListenerMap.entries()) { + signal.removeEventListener("abort", listener); + clock.abortListenerMap.delete(listener); + } + // return pending timers, to enable checking what timers remained on uninstall if (!clock.timers) { return []; @@ -6394,8 +6425,7 @@ function withGlobal(_global) { clock[`_${method}`] = target[method]; if (method === "Date") { - const date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; + target[method] = clock[method]; } else if (method === "Intl") { target[method] = clock[method]; } else if (method === "performance") { @@ -6474,44 +6504,47 @@ function withGlobal(_global) { Date: _global.Date, }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { timers.setImmediate = _global.setImmediate; + } + + if (isPresent.clearImmediate) { timers.clearImmediate = _global.clearImmediate; } - if (hrtimePresent) { + if (isPresent.hrtime) { timers.hrtime = _global.process.hrtime; } - if (nextTickPresent) { + if (isPresent.nextTick) { timers.nextTick = _global.process.nextTick; } - if (performancePresent) { + if (isPresent.performance) { timers.performance = _global.performance; } - if (requestAnimationFramePresent) { + if (isPresent.requestAnimationFrame) { timers.requestAnimationFrame = _global.requestAnimationFrame; } - if (queueMicrotaskPresent) { - timers.queueMicrotask = true; + if (isPresent.queueMicrotask) { + timers.queueMicrotask = _global.queueMicrotask; } - if (cancelAnimationFramePresent) { + if (isPresent.cancelAnimationFrame) { timers.cancelAnimationFrame = _global.cancelAnimationFrame; } - if (requestIdleCallbackPresent) { + if (isPresent.requestIdleCallback) { timers.requestIdleCallback = _global.requestIdleCallback; } - if (cancelIdleCallbackPresent) { + if (isPresent.cancelIdleCallback) { timers.cancelIdleCallback = _global.cancelIdleCallback; } - if (intlPresent) { + if (isPresent.Intl) { timers.Intl = _global.Intl; } @@ -6530,13 +6563,6 @@ function withGlobal(_global) { let nanos = 0; const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] - if (NativeDate === undefined) { - throw new Error( - "The global scope doesn't have a `Date` object" + - " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", - ); - } - const clock = { now: start, Date: createDate(), @@ -6597,14 +6623,14 @@ function withGlobal(_global) { return millis; } - if (hrtimeBigintPresent) { + if (isPresent.hrtimeBigint) { hrtime.bigint = function () { const parts = hrtime(); return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line }; } - if (intlPresent) { + if (isPresent.Intl) { clock.Intl = createIntl(); clock.Intl.clock = clock; } @@ -6689,7 +6715,7 @@ function withGlobal(_global) { return clearTimer(clock, timerId, "Interval"); }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { clock.setImmediate = function setImmediate(func) { return addTimer(clock, { func: func, @@ -7128,12 +7154,12 @@ function withGlobal(_global) { clock.tick(ms); }; - if (performancePresent) { + if (isPresent.performance) { clock.performance = Object.create(null); clock.performance.now = fakePerformanceNow; } - if (hrtimePresent) { + if (isPresent.hrtime) { clock.hrtime = hrtime; } @@ -7181,6 +7207,20 @@ function withGlobal(_global) { ); } + /** + * @param {string} timer/object the name of the thing that is not present + * @param timer + */ + function handleMissingTimer(timer) { + if (config.ignoreMissingTimers) { + return; + } + + throw new ReferenceError( + `non-existent timers and/or objects cannot be faked: '${timer}'`, + ); + } + let i, l; const clock = createClock(config.now, config.loopLimit); clock.shouldClearNativeTimers = config.shouldClearNativeTimers; @@ -7189,13 +7229,12 @@ function withGlobal(_global) { return uninstall(clock, config); }; + clock.abortListenerMap = new Map(); + clock.methods = config.toFake || []; if (clock.methods.length === 0) { - // do not fake nextTick by default - GitHub#126 - clock.methods = Object.keys(timers).filter(function (key) { - return key !== "nextTick" && key !== "queueMicrotask"; - }); + clock.methods = Object.keys(timers); } if (config.shouldAdvanceTime === true) { @@ -7229,18 +7268,30 @@ function withGlobal(_global) { : NOOP; } }); + // ensure `mark` returns a value that is valid + clock.performance.mark = (name) => + new FakePerformanceEntry(name, "mark", 0, 0); + clock.performance.measure = (name) => + new FakePerformanceEntry(name, "measure", 0, 100); } else if ((config.toFake || []).includes("performance")) { - // user explicitly tried to fake performance when not present - throw new ReferenceError( - "non-existent performance object cannot be faked", - ); + return handleMissingTimer("performance"); } } if (_global === globalObject && timersModule) { clock.timersModuleMethods = []; } + if (_global === globalObject && timersPromisesModule) { + clock.timersPromisesModuleMethods = []; + } for (i = 0, l = clock.methods.length; i < l; i++) { const nameOfMethodToReplace = clock.methods[i]; + + if (!isPresent[nameOfMethodToReplace]) { + handleMissingTimer(nameOfMethodToReplace); + // eslint-disable-next-line + continue; + } + if (nameOfMethodToReplace === "hrtime") { if ( _global.process && @@ -7270,6 +7321,239 @@ function withGlobal(_global) { timersModule[nameOfMethodToReplace] = _global[nameOfMethodToReplace]; } + if (clock.timersPromisesModuleMethods !== undefined) { + if (nameOfMethodToReplace === "setTimeout") { + clock.timersPromisesModuleMethods.push({ + methodName: "setTimeout", + original: timersPromisesModule.setTimeout, + }); + + timersPromisesModule.setTimeout = ( + delay, + value, + options = {}, + ) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearTimeout(handle); + reject(options.signal.reason); + }; + + const handle = clock.setTimeout(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }, delay); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setImmediate") { + clock.timersPromisesModuleMethods.push({ + methodName: "setImmediate", + original: timersPromisesModule.setImmediate, + }); + + timersPromisesModule.setImmediate = (value, options = {}) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearImmediate(handle); + reject(options.signal.reason); + }; + + const handle = clock.setImmediate(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setInterval") { + clock.timersPromisesModuleMethods.push({ + methodName: "setInterval", + original: timersPromisesModule.setInterval, + }); + + timersPromisesModule.setInterval = ( + delay, + value, + options = {}, + ) => ({ + [Symbol.asyncIterator]: () => { + const createResolvable = () => { + let resolve, reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + promise.resolve = resolve; + promise.reject = reject; + return promise; + }; + + let done = false; + let hasThrown = false; + let returnCall; + let nextAvailable = 0; + const nextQueue = []; + + const handle = clock.setInterval(() => { + if (nextQueue.length > 0) { + nextQueue.shift().resolve(); + } else { + nextAvailable++; + } + }, delay); + + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + clock.clearInterval(handle); + done = true; + for (const resolvable of nextQueue) { + resolvable.resolve(); + } + }; + + if (options.signal) { + if (options.signal.aborted) { + done = true; + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + + return { + next: async () => { + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + if (nextAvailable > 0) { + nextAvailable--; + return { done: false, value: value }; + } + + const resolvable = createResolvable(); + nextQueue.push(resolvable); + + await resolvable; + + if (returnCall && nextQueue.length === 0) { + returnCall.resolve(); + } + + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + return { done: false, value: value }; + }, + return: async () => { + if (done) { + return { done: true, value: undefined }; + } + + if (nextQueue.length > 0) { + returnCall = createResolvable(); + await returnCall; + } + + clock.clearInterval(handle); + done = true; + + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + return { done: true, value: undefined }; + }, + }; + }, + }); + } + } } return clock; @@ -7303,7 +7587,7 @@ exports.createClock = defaultImplementation.createClock; exports.install = defaultImplementation.install; exports.withGlobal = withGlobal; -},{"@sinonjs/commons":48,"timers":162,"util":117}],62:[function(require,module,exports){ +},{"@sinonjs/commons":48,"timers":undefined,"timers/promises":undefined,"util":99}],62:[function(require,module,exports){ "use strict"; var ARRAY_TYPES = [ @@ -7368,7 +7652,7 @@ function createMatcher(expectation, message) { if (arguments.length > 2) { throw new TypeError( - `Expected 1 or 2 arguments, received ${arguments.length}` + `Expected 1 or 2 arguments, received ${arguments.length}`, ); } @@ -7413,9 +7697,12 @@ createMatcher.falsy = createMatcher(function (actual) { }, "falsy"); createMatcher.same = function (expectation) { - return createMatcher(function (actual) { - return expectation === actual; - }, `same(${valueToString(expectation)})`); + return createMatcher( + function (actual) { + return expectation === actual; + }, + `same(${valueToString(expectation)})`, + ); }; createMatcher.in = function (arrayOfExpectations) { @@ -7423,11 +7710,14 @@ createMatcher.in = function (arrayOfExpectations) { throw new TypeError("array expected"); } - return createMatcher(function (actual) { - return some(arrayOfExpectations, function (expectation) { - return expectation === actual; - }); - }, `in(${valueToString(arrayOfExpectations)})`); + return createMatcher( + function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, + `in(${valueToString(arrayOfExpectations)})`, + ); }; createMatcher.typeOf = function (type) { @@ -7449,12 +7739,15 @@ createMatcher.instanceOf = function (type) { type, Symbol.hasInstance, "type", - "[Symbol.hasInstance]" + "[Symbol.hasInstance]", ); } - return createMatcher(function (actual) { - return actual instanceof type; - }, `instanceOf(${functionName(type) || objectToString(type)})`); + return createMatcher( + function (actual) { + return actual instanceof type; + }, + `instanceOf(${functionName(type) || objectToString(type)})`, + ); }; /** @@ -7583,111 +7876,137 @@ createMatcher.some = function (predicate) { createMatcher.array = createMatcher.typeOf("array"); createMatcher.array.deepEquals = function (expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.length === expectation.length; - return ( - typeOf(actual) === "array" && - sameLength && - every(actual, function (element, index) { - var expected = expectation[index]; - return typeOf(expected) === "array" && - typeOf(element) === "array" - ? createMatcher.array.deepEquals(expected).test(element) - : deepEqual(expected, element); - }) - ); - }, `deepEquals([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, + `deepEquals([${iterableToString(expectation)}])`, + ); }; createMatcher.array.startsWith = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[index] === expectedElement; - }) - ); - }, `startsWith([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, + `startsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.endsWith = function (expectation) { - return createMatcher(function (actual) { - // This indicates the index in which we should start matching - var offset = actual.length - expectation.length; + return createMatcher( + function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[offset + index] === expectedElement; - }) - ); - }, `endsWith([${iterableToString(expectation)}])`); + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, + `endsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.contains = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement) { - return arrayIndexOf(actual, expectedElement) !== -1; - }) - ); - }, `contains([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, + `contains([${iterableToString(expectation)}])`, + ); }; createMatcher.map = createMatcher.typeOf("map"); createMatcher.map.deepEquals = function mapDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "map" && - sameLength && - every(actual, function (element, key) { - return expectation.has(key) && expectation.get(key) === element; - }) - ); - }, `deepEquals(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return ( + expectation.has(key) && expectation.get(key) === element + ); + }) + ); + }, + `deepEquals(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.map.contains = function mapContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "map" && - every(expectation, function (element, key) { - return actual.has(key) && actual.get(key) === element; - }) - ); - }, `contains(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, + `contains(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.set = createMatcher.typeOf("set"); createMatcher.set.deepEquals = function setDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "set" && - sameLength && - every(actual, function (element) { - return expectation.has(element); - }) - ); - }, `deepEquals(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, + `deepEquals(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.set.contains = function setContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "set" && - every(expectation, function (element) { - return actual.has(element); - }) - ); - }, `contains(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, + `contains(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.bool = createMatcher.typeOf("boolean"); @@ -7701,7 +8020,7 @@ createMatcher.symbol = createMatcher.typeOf("symbol"); module.exports = createMatcher; -},{"./create-matcher/assert-matcher":64,"./create-matcher/assert-method-exists":65,"./create-matcher/assert-type":66,"./create-matcher/is-iterable":67,"./create-matcher/is-matcher":68,"./create-matcher/matcher-prototype":70,"./create-matcher/type-map":71,"./deep-equal":72,"./iterable-to-string":86,"@sinonjs/commons":95,"lodash.get":140}],64:[function(require,module,exports){ +},{"./create-matcher/assert-matcher":64,"./create-matcher/assert-method-exists":65,"./create-matcher/assert-type":66,"./create-matcher/is-iterable":67,"./create-matcher/is-matcher":68,"./create-matcher/matcher-prototype":70,"./create-matcher/type-map":71,"./deep-equal":72,"./iterable-to-string":86,"@sinonjs/commons":48,"lodash.get":122}],64:[function(require,module,exports){ "use strict"; var isMatcher = require("./is-matcher"); @@ -7760,14 +8079,14 @@ function assertType(value, type, name) { var actual = typeOf(value); if (actual !== type) { throw new TypeError( - `Expected type of ${name} to be ${type}, but was ${actual}` + `Expected type of ${name} to be ${type}, but was ${actual}`, ); } } module.exports = assertType; -},{"@sinonjs/commons":95}],67:[function(require,module,exports){ +},{"@sinonjs/commons":48}],67:[function(require,module,exports){ "use strict"; var typeOf = require("@sinonjs/commons").typeOf; @@ -7785,7 +8104,7 @@ function isIterable(value) { module.exports = isIterable; -},{"@sinonjs/commons":95}],68:[function(require,module,exports){ +},{"@sinonjs/commons":48}],68:[function(require,module,exports){ "use strict"; var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; @@ -7805,7 +8124,7 @@ function isMatcher(object) { module.exports = isMatcher; -},{"./matcher-prototype":70,"@sinonjs/commons":95}],69:[function(require,module,exports){ +},{"./matcher-prototype":70,"@sinonjs/commons":48}],69:[function(require,module,exports){ "use strict"; var every = require("@sinonjs/commons").prototypes.array.every; @@ -7814,6 +8133,7 @@ var typeOf = require("@sinonjs/commons").typeOf; var deepEqualFactory = require("../deep-equal").use; +var identical = require("../identical"); var isMatcher = require("./is-matcher"); var keys = Object.keys; @@ -7849,6 +8169,9 @@ function matchObject(actual, expectation, matcher) { return false; } } else if (typeOf(exp) === "object") { + if (identical(exp, act)) { + return true; + } if (!matchObject(act, exp, matcher)) { return false; } @@ -7862,7 +8185,7 @@ function matchObject(actual, expectation, matcher) { module.exports = matchObject; -},{"../deep-equal":72,"./is-matcher":68,"@sinonjs/commons":95}],70:[function(require,module,exports){ +},{"../deep-equal":72,"../identical":74,"./is-matcher":68,"@sinonjs/commons":48}],70:[function(require,module,exports){ "use strict"; var matcherPrototype = { @@ -7977,7 +8300,7 @@ var createTypeMap = function (match) { module.exports = createTypeMap; -},{"./match-object":69,"@sinonjs/commons":95}],72:[function(require,module,exports){ +},{"./match-object":69,"@sinonjs/commons":48}],72:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8047,7 +8370,7 @@ function deepEqualCyclic(actual, expectation, match) { actualObj, expectationObj, actualPath, - expectationPath + expectationPath, ) { // If both are matchers they must be the same instance in order to be // considered equal If we didn't do that we would end up running one @@ -8120,7 +8443,7 @@ function deepEqualCyclic(actual, expectation, match) { []; var expectationKeysAndSymbols = concat( expectationKeys, - expectationSymbols + expectationSymbols, ); if (isArguments(actualObj) || isArguments(expectationObj)) { @@ -8269,7 +8592,7 @@ function deepEqualCyclic(actual, expectation, match) { actualValue, expectationValue, newActualPath, - newExpectationPath + newExpectationPath, ); }); })(actual, expectation, "$1", "$2"); @@ -8283,7 +8606,7 @@ deepEqualCyclic.use = function (match) { module.exports = deepEqualCyclic; -},{"./get-class":73,"./identical":74,"./is-arguments":75,"./is-array-type":76,"./is-date":77,"./is-element":78,"./is-iterable":79,"./is-map":80,"./is-nan":81,"./is-object":83,"./is-set":84,"./is-subset":85,"@sinonjs/commons":95}],73:[function(require,module,exports){ +},{"./get-class":73,"./identical":74,"./is-arguments":75,"./is-array-type":76,"./is-date":77,"./is-element":78,"./is-iterable":79,"./is-map":80,"./is-nan":81,"./is-object":83,"./is-set":84,"./is-subset":85,"@sinonjs/commons":48}],73:[function(require,module,exports){ "use strict"; var toString = require("@sinonjs/commons").prototypes.object.toString; @@ -8303,7 +8626,7 @@ function getClass(value) { module.exports = getClass; -},{"@sinonjs/commons":95}],74:[function(require,module,exports){ +},{"@sinonjs/commons":48}],74:[function(require,module,exports){ "use strict"; var isNaN = require("./is-nan"); @@ -8376,7 +8699,7 @@ function isArrayType(object) { module.exports = isArrayType; -},{"./array-types":62,"@sinonjs/commons":95,"type-detect":163}],77:[function(require,module,exports){ +},{"./array-types":62,"@sinonjs/commons":48,"type-detect":89}],77:[function(require,module,exports){ "use strict"; /** @@ -8577,7 +8900,7 @@ function isSubset(s1, s2, compare) { module.exports = isSubset; -},{"@sinonjs/commons":95}],86:[function(require,module,exports){ +},{"@sinonjs/commons":48}],86:[function(require,module,exports){ "use strict"; var slice = require("@sinonjs/commons").prototypes.string.slice; @@ -8650,7 +8973,7 @@ function stringify(item) { module.exports = iterableToString; -},{"@sinonjs/commons":95}],87:[function(require,module,exports){ +},{"@sinonjs/commons":48}],87:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8723,7 +9046,7 @@ function match(object, matcherOrValue) { notNull && indexOf( valueToString(object).toLowerCase(), - matcherOrValue.toLowerCase() + matcherOrValue.toLowerCase(), ) >= 0 ); case "null": @@ -8755,7 +9078,7 @@ function match(object, matcherOrValue) { /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ if (!engineCanCompareMaps) { throw new Error( - "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances", ); } @@ -8764,7 +9087,7 @@ function match(object, matcherOrValue) { arrayContains( Array.from(object), Array.from(matcherOrValue), - match + match, ) ); default: @@ -8826,7 +9149,7 @@ forEach(Object.keys(createMatcher), function (key) { module.exports = match; -},{"./create-matcher":63,"./deep-equal":72,"./is-array-type":76,"./is-subset":85,"@sinonjs/commons":95,"type-detect":163}],88:[function(require,module,exports){ +},{"./create-matcher":63,"./deep-equal":72,"./is-array-type":76,"./is-subset":85,"@sinonjs/commons":48,"type-detect":89}],88:[function(require,module,exports){ "use strict"; /** @@ -8855,351 +9178,149 @@ module.exports = { }; },{"./create-matcher":63,"./deep-equal":72,"./identical":74,"./is-arguments":75,"./is-element":78,"./is-map":80,"./is-neg-zero":82,"./is-set":84,"./match":87}],89:[function(require,module,exports){ -"use strict"; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.typeDetect = factory()); +})(this, (function () { 'use strict'; + + var promiseExists = typeof Promise === 'function'; + var globalObject = (function (Obj) { + if (typeof globalThis === 'object') { + return globalThis; + } + Object.defineProperty(Obj, 'typeDetectGlobalObject', { + get: function get() { + return this; + }, + configurable: true, + }); + var global = typeDetectGlobalObject; + delete Obj.typeDetectGlobalObject; + return global; + })(Object.prototype); + var symbolExists = typeof Symbol !== 'undefined'; + var mapExists = typeof Map !== 'undefined'; + var setExists = typeof Set !== 'undefined'; + var weakMapExists = typeof WeakMap !== 'undefined'; + var weakSetExists = typeof WeakSet !== 'undefined'; + var dataViewExists = typeof DataView !== 'undefined'; + var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; + var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; + var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; + var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; + var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); + var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); + var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; + var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); + var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; + var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); + var toStringLeftSliceLength = 8; + var toStringRightSliceLength = -1; + function typeDetect(obj) { + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + if (obj === null) { + return 'null'; + } + if (obj === globalObject) { + return 'global'; + } + if (Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))) { + return 'Array'; + } + if (typeof window === 'object' && window !== null) { + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + if (typeof window.navigator === 'object') { + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + var objPrototype = Object.getPrototypeOf(obj); + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + if (objPrototype === Date.prototype) { + return 'Date'; + } + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + if (objPrototype === null) { + return 'Object'; + } + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); + } -var every = require("./prototypes/array").every; + return typeDetect; -/** - * @private - */ -function hasCallsLeft(callMap, spy) { - if (callMap[spy.id] === undefined) { - callMap[spy.id] = 0; - } +})); - return callMap[spy.id] < spy.callCount; -} - -/** - * @private - */ -function checkAdjacentCalls(callMap, spy, index, spies) { - var calledBeforeNext = true; - - if (index !== spies.length - 1) { - calledBeforeNext = spy.calledBefore(spies[index + 1]); - } - - if (hasCallsLeft(callMap, spy) && calledBeforeNext) { - callMap[spy.id] += 1; - return true; - } - - return false; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} calledBefore - A method that determines if this proxy was called before another one - * @property {string} id - Some id - * @property {number} callCount - Number of times this proxy has been called - */ - -/** - * Returns true when the spies have been called in the order they were supplied in - * - * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments - * @returns {boolean} true when spies are called in order, false otherwise - */ -function calledInOrder(spies) { - var callMap = {}; - // eslint-disable-next-line no-underscore-dangle - var _spies = arguments.length > 1 ? arguments : spies; - - return every(_spies, checkAdjacentCalls.bind(null, callMap)); -} - -module.exports = calledInOrder; - -},{"./prototypes/array":97}],90:[function(require,module,exports){ -"use strict"; - -var functionName = require("./function-name"); - -/** - * Returns a display name for a value from a constructor - * - * @param {object} value A value to examine - * @returns {(string|null)} A string or null - */ -function className(value) { - return ( - (value.constructor && value.constructor.name) || - // The next branch is for IE11 support only: - // Because the name property is not set on the prototype - // of the Function object, we finally try to grab the - // name from its definition. This will never be reached - // in node, so we are not able to test this properly. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name - (typeof value.constructor === "function" && - /* istanbul ignore next */ - functionName(value.constructor)) || - null - ); -} - -module.exports = className; - -},{"./function-name":93}],91:[function(require,module,exports){ -/* eslint-disable no-console */ -"use strict"; - -/** - * Returns a function that will invoke the supplied function and print a - * deprecation warning to the console each time it is called. - * - * @param {Function} func - * @param {string} msg - * @returns {Function} - */ -exports.wrap = function (func, msg) { - var wrapped = function () { - exports.printWarning(msg); - return func.apply(this, arguments); - }; - if (func.prototype) { - wrapped.prototype = func.prototype; - } - return wrapped; -}; - -/** - * Returns a string which can be supplied to `wrap()` to notify the user that a - * particular part of the sinon API has been deprecated. - * - * @param {string} packageName - * @param {string} funcName - * @returns {string} - */ -exports.defaultMsg = function (packageName, funcName) { - return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; -}; - -/** - * Prints a warning on the console, when it exists - * - * @param {string} msg - * @returns {undefined} - */ -exports.printWarning = function (msg) { - /* istanbul ignore next */ - if (typeof process === "object" && process.emitWarning) { - // Emit Warnings in Node - process.emitWarning(msg); - } else if (console.info) { - console.info(msg); - } else { - console.log(msg); - } -}; - -},{}],92:[function(require,module,exports){ -"use strict"; - -/** - * Returns true when fn returns true for all members of obj. - * This is an every implementation that works for all iterables - * - * @param {object} obj - * @param {Function} fn - * @returns {boolean} - */ -module.exports = function every(obj, fn) { - var pass = true; - - try { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - obj.forEach(function () { - if (!fn.apply(this, arguments)) { - // Throwing an error is the only way to break `forEach` - throw new Error(); - } - }); - } catch (e) { - pass = false; - } - - return pass; -}; - -},{}],93:[function(require,module,exports){ -"use strict"; - -/** - * Returns a display name for a function - * - * @param {Function} func - * @returns {string} - */ -module.exports = function functionName(func) { - if (!func) { - return ""; - } - - try { - return ( - func.displayName || - func.name || - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - (String(func).match(/function ([^\s(]+)/) || [])[1] - ); - } catch (e) { - // Stringify may fail and we might get an exception, as a last-last - // resort fall back to empty string. - return ""; - } -}; - -},{}],94:[function(require,module,exports){ -"use strict"; - -/** - * A reference to the global object - * - * @type {object} globalObject - */ -var globalObject; - -/* istanbul ignore else */ -if (typeof global !== "undefined") { - // Node - globalObject = global; -} else if (typeof window !== "undefined") { - // Browser - globalObject = window; -} else { - // WebWorker - globalObject = self; -} - -module.exports = globalObject; - -},{}],95:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"./called-in-order":89,"./class-name":90,"./deprecated":91,"./every":92,"./function-name":93,"./global":94,"./order-by-first-call":96,"./prototypes":100,"./type-of":106,"./value-to-string":107,"dup":48}],96:[function(require,module,exports){ -"use strict"; - -var sort = require("./prototypes/array").sort; -var slice = require("./prototypes/array").slice; - -/** - * @private - */ -function comparator(a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = (aCall && aCall.callId) || -1; - var bId = (bCall && bCall.callId) || -1; - - return aId < bId ? -1 : 1; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} getCall - A method that can return the first call - */ - -/** - * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call - * - * @param {SinonProxy[] | SinonProxy} spies - * @returns {SinonProxy[]} - */ -function orderByFirstCall(spies) { - return sort(slice(spies), comparator); -} - -module.exports = orderByFirstCall; - -},{"./prototypes/array":97}],97:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":50}],98:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"./throws-on-proto":105,"dup":51}],99:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":52}],100:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"./array":97,"./function":99,"./map":101,"./object":102,"./set":103,"./string":104,"dup":53}],101:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":54}],102:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":55}],103:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":56}],104:[function(require,module,exports){ -arguments[4][57][0].apply(exports,arguments) -},{"./copy-prototype-methods":98,"dup":57}],105:[function(require,module,exports){ -"use strict"; - -/** - * Is true when the environment causes an error to be thrown for accessing the - * __proto__ property. - * - * This is necessary in order to support `node --disable-proto=throw`. - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto - * - * @type {boolean} - */ -let throwsOnProto; -try { - const object = {}; - // eslint-disable-next-line no-proto, no-unused-expressions - object.__proto__; - throwsOnProto = false; -} catch (_) { - // This branch is covered when tests are run with `--disable-proto=throw`, - // however we can test both branches at the same time, so this is ignored - /* istanbul ignore next */ - throwsOnProto = true; -} - -module.exports = throwsOnProto; - -},{}],106:[function(require,module,exports){ -"use strict"; - -var type = require("type-detect"); - -/** - * Returns the lower-case result of running type from type-detect on the value - * - * @param {*} value - * @returns {string} - */ -module.exports = function typeOf(value) { - return type(value).toLowerCase(); -}; - -},{"type-detect":163}],107:[function(require,module,exports){ -"use strict"; - -/** - * Returns a string representation of the value - * - * @param {*} value - * @returns {string} - */ -function valueToString(value) { - if (value && value.toString) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - return value.toString(); - } - return String(value); -} - -module.exports = valueToString; - -},{}],108:[function(require,module,exports){ -// This is free and unencumbered software released into the public domain. -// See LICENSE.md for more information. +},{}],90:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. var encoding = require("./lib/encoding.js"); @@ -9208,7 +9329,7 @@ module.exports = { TextDecoder: encoding.TextDecoder, }; -},{"./lib/encoding.js":110}],109:[function(require,module,exports){ +},{"./lib/encoding.js":92}],91:[function(require,module,exports){ (function(global) { 'use strict'; @@ -9256,7 +9377,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{}],110:[function(require,module,exports){ +},{}],92:[function(require,module,exports){ // This is free and unencumbered software released into the public domain. // See LICENSE.md for more information. @@ -12570,7 +12691,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{"./encoding-indexes.js":109}],111:[function(require,module,exports){ +},{"./encoding-indexes.js":91}],93:[function(require,module,exports){ 'use strict'; var objectAssign = require('object.assign/polyfill')(); @@ -13078,7 +13199,7 @@ var objectKeys = Object.keys || function (obj) { return keys; }; -},{"object.assign/polyfill":157,"util/":114}],112:[function(require,module,exports){ +},{"object.assign/polyfill":139,"util/":96}],94:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -13103,14 +13224,14 @@ if (typeof Object.create === 'function') { } } -},{}],113:[function(require,module,exports){ +},{}],95:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } -},{}],114:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -13698,13 +13819,13 @@ function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -},{"./support/isBuffer":113,"inherits":112}],115:[function(require,module,exports){ -arguments[4][112][0].apply(exports,arguments) -},{"dup":112}],116:[function(require,module,exports){ -arguments[4][113][0].apply(exports,arguments) -},{"dup":113}],117:[function(require,module,exports){ -arguments[4][114][0].apply(exports,arguments) -},{"./support/isBuffer":116,"dup":114,"inherits":115}],118:[function(require,module,exports){ +},{"./support/isBuffer":95,"inherits":94}],97:[function(require,module,exports){ +arguments[4][94][0].apply(exports,arguments) +},{"dup":94}],98:[function(require,module,exports){ +arguments[4][95][0].apply(exports,arguments) +},{"dup":95}],99:[function(require,module,exports){ +arguments[4][96][0].apply(exports,arguments) +},{"./support/isBuffer":98,"dup":96,"inherits":97}],100:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -13721,7 +13842,7 @@ module.exports = function callBoundIntrinsic(name, allowMissing) { return intrinsic; }; -},{"./":119,"get-intrinsic":132}],119:[function(require,module,exports){ +},{"./":101,"get-intrinsic":114}],101:[function(require,module,exports){ 'use strict'; var bind = require('function-bind'); @@ -13758,7 +13879,7 @@ if ($defineProperty) { module.exports.apply = applyBind; } -},{"es-define-property":122,"es-errors/type":128,"function-bind":131,"get-intrinsic":132,"set-function-length":160}],120:[function(require,module,exports){ +},{"es-define-property":104,"es-errors/type":110,"function-bind":113,"get-intrinsic":114,"set-function-length":141}],102:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -13816,70 +13937,99 @@ module.exports = function defineDataProperty( } }; -},{"es-define-property":122,"es-errors/syntax":127,"es-errors/type":128,"gopd":133}],121:[function(require,module,exports){ +},{"es-define-property":104,"es-errors/syntax":109,"es-errors/type":110,"gopd":115}],103:[function(require,module,exports){ +/*! + + diff v7.0.0 + +BSD 3-Clause License + +Copyright (c) 2009-2015, Kevin Decker +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@license +*/ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.Diff = {})); -}(this, (function (exports) { 'use strict'; + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Diff = {})); +})(this, (function (exports) { 'use strict'; function Diff() {} Diff.prototype = { diff: function diff(oldString, newString) { var _options$timeout; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var callback = options.callback; - if (typeof options === 'function') { callback = options; options = {}; } - - this.options = options; var self = this; - function done(value) { + value = self.postProcess(value, options); if (callback) { setTimeout(function () { - callback(undefined, value); + callback(value); }, 0); return true; } else { return value; } - } // Allow subclasses to massage the input prior to running - + } - oldString = this.castInput(oldString); - newString = this.castInput(newString); - oldString = this.removeEmpty(this.tokenize(oldString)); - newString = this.removeEmpty(this.tokenize(newString)); + // Allow subclasses to massage the input prior to running + oldString = this.castInput(oldString, options); + newString = this.castInput(newString, options); + oldString = this.removeEmpty(this.tokenize(oldString, options)); + newString = this.removeEmpty(this.tokenize(newString, options)); var newLen = newString.length, - oldLen = oldString.length; + oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; - - if (options.maxEditLength) { + if (options.maxEditLength != null) { maxEditLength = Math.min(maxEditLength, options.maxEditLength); } - var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; var abortAfterTimestamp = Date.now() + maxExecutionTime; var bestPath = [{ oldPos: -1, lastComponent: undefined - }]; // Seed editLength = 0, i.e. the content starts with the same values - - var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); + }]; + // Seed editLength = 0, i.e. the content starts with the same values + var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options); if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // Identity per the equality and tokenizer - return done([{ - value: this.join(newString), - count: newString.length - }]); - } // Once we hit the right edge of the edit graph on some diagonal k, we can + return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken)); + } + + // Once we hit the right edge of the edit graph on some diagonal k, we can // definitely reach the end of the edit graph in no more than k edits, so // there's no point in considering any moves to diagonal k+1 any more (from // which we're guaranteed to need at least k+1 more edits). @@ -13896,81 +14046,67 @@ module.exports = function defineDataProperty( // where the new text simply appends d characters on the end of the // original text of length n, the true Myers algorithm will take O(n+d^2) // time while this optimization needs only O(n+d) time. - - var minDiagonalToConsider = -Infinity, - maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance. + maxDiagonalToConsider = Infinity; + // Main worker method. checks all permutations of a given edit length for acceptance. function execEditLength() { for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { var basePath = void 0; var removePath = bestPath[diagonalPath - 1], - addPath = bestPath[diagonalPath + 1]; - + addPath = bestPath[diagonalPath + 1]; if (removePath) { // No one else is going to attempt to use this value, clear it bestPath[diagonalPath - 1] = undefined; } - var canAdd = false; - if (addPath) { // what newPos will be after we do an insertion: var addPathNewPos = addPath.oldPos - diagonalPath; canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; } - var canRemove = removePath && removePath.oldPos + 1 < oldLen; - if (!canAdd && !canRemove) { // If this path is a terminal then prune bestPath[diagonalPath] = undefined; continue; - } // Select the diagonal that we want to branch from. We select the prior + } + + // Select the diagonal that we want to branch from. We select the prior // path whose position in the old string is the farthest from the origin // and does not pass the bounds of the diff graph - // TODO: Remove the `+ 1` here to make behavior match Myers algorithm - // and prefer to order removals before insertions. - - - if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { - basePath = self.addToPath(addPath, true, undefined, 0); + if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) { + basePath = self.addToPath(addPath, true, false, 0, options); } else { - basePath = self.addToPath(removePath, undefined, true, 1); + basePath = self.addToPath(removePath, false, true, 1, options); } - - newPos = self.extractCommon(basePath, newString, oldString, diagonalPath); - + newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options); if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // If we have hit the end of both strings, then we are done return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken)); } else { bestPath[diagonalPath] = basePath; - if (basePath.oldPos + 1 >= oldLen) { maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); } - if (newPos + 1 >= newLen) { minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); } } } - editLength++; - } // Performs the length of edit iteration. Is a bit fugly as this has to support the + } + + // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value // is produced, or until the edit length exceeds options.maxEditLength (if given), // in which case it will return undefined. - - if (callback) { (function exec() { setTimeout(function () { if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { return callback(); } - if (!execEditLength()) { exec(); } @@ -13979,17 +14115,15 @@ module.exports = function defineDataProperty( } else { while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { var ret = execEditLength(); - if (ret) { return ret; } } } }, - addToPath: function addToPath(path, added, removed, oldPosInc) { + addToPath: function addToPath(path, added, removed, oldPosInc, options) { var last = path.lastComponent; - - if (last && last.added === added && last.removed === removed) { + if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) { return { oldPos: path.oldPos + oldPosInc, lastComponent: { @@ -14011,80 +14145,83 @@ module.exports = function defineDataProperty( }; } }, - extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) { var newLen = newString.length, - oldLen = oldString.length, - oldPos = basePath.oldPos, - newPos = oldPos - diagonalPath, - commonCount = 0; - - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + oldLen = oldString.length, + oldPos = basePath.oldPos, + newPos = oldPos - diagonalPath, + commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) { newPos++; oldPos++; commonCount++; + if (options.oneChangePerToken) { + basePath.lastComponent = { + count: 1, + previousComponent: basePath.lastComponent, + added: false, + removed: false + }; + } } - - if (commonCount) { + if (commonCount && !options.oneChangePerToken) { basePath.lastComponent = { count: commonCount, - previousComponent: basePath.lastComponent + previousComponent: basePath.lastComponent, + added: false, + removed: false }; } - basePath.oldPos = oldPos; return newPos; }, - equals: function equals(left, right) { - if (this.options.comparator) { - return this.options.comparator(left, right); + equals: function equals(left, right, options) { + if (options.comparator) { + return options.comparator(left, right); } else { - return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase(); } }, removeEmpty: function removeEmpty(array) { var ret = []; - for (var i = 0; i < array.length; i++) { if (array[i]) { ret.push(array[i]); } } - return ret; }, castInput: function castInput(value) { return value; }, tokenize: function tokenize(value) { - return value.split(''); + return Array.from(value); }, join: function join(chars) { return chars.join(''); + }, + postProcess: function postProcess(changeObjects) { + return changeObjects; } }; - function buildValues(diff, lastComponent, newString, oldString, useLongestToken) { // First we convert our linked list of components in reverse order to an // array in the right order: var components = []; var nextComponent; - while (lastComponent) { components.push(lastComponent); nextComponent = lastComponent.previousComponent; delete lastComponent.previousComponent; lastComponent = nextComponent; } - components.reverse(); var componentPos = 0, - componentLen = components.length, - newPos = 0, - oldPos = 0; - + componentLen = components.length, + newPos = 0, + oldPos = 0; for (; componentPos < componentLen; componentPos++) { var component = components[componentPos]; - if (!component.removed) { if (!component.added && useLongestToken) { var value = newString.slice(newPos, newPos + component.count); @@ -14096,59 +14233,133 @@ module.exports = function defineDataProperty( } else { component.value = diff.join(newString.slice(newPos, newPos + component.count)); } + newPos += component.count; - newPos += component.count; // Common case - + // Common case if (!component.added) { oldPos += component.count; } } else { component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); - oldPos += component.count; // Reverse add and remove so removes are output first to match common convention - // The diffing algorithm is tied to add then remove output and this is the simplest - // route to get the desired output with minimal overhead. + oldPos += component.count; + } + } + return components; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function longestCommonPrefix(str1, str2) { + var i; + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[i] != str2[i]) { + return str1.slice(0, i); + } + } + return str1.slice(0, i); + } + function longestCommonSuffix(str1, str2) { + var i; - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } + // Unlike longestCommonPrefix, we need a special case to handle all scenarios + // where we return the empty string since str1.slice(-0) will return the + // entire string. + if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) { + return ''; + } + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) { + return str1.slice(-i); } - } // Special case handle for when one terminal is ignored (i.e. whitespace). - // For this case we merge the terminal into the prior string and drop the change. - // This is only available for string mode. - - - var finalComponent = components[componentLen - 1]; - - if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) { - components[componentLen - 2].value += finalComponent.value; - components.pop(); } - - return components; + return str1.slice(-i); } - - var characterDiff = new Diff(); - function diffChars(oldStr, newStr, options) { - return characterDiff.diff(oldStr, newStr, options); + function replacePrefix(string, oldPrefix, newPrefix) { + if (string.slice(0, oldPrefix.length) != oldPrefix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't start with prefix ").concat(JSON.stringify(oldPrefix), "; this is a bug")); + } + return newPrefix + string.slice(oldPrefix.length); + } + function replaceSuffix(string, oldSuffix, newSuffix) { + if (!oldSuffix) { + return string + newSuffix; + } + if (string.slice(-oldSuffix.length) != oldSuffix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't end with suffix ").concat(JSON.stringify(oldSuffix), "; this is a bug")); + } + return string.slice(0, -oldSuffix.length) + newSuffix; + } + function removePrefix(string, oldPrefix) { + return replacePrefix(string, oldPrefix, ''); + } + function removeSuffix(string, oldSuffix) { + return replaceSuffix(string, oldSuffix, ''); + } + function maximumOverlap(string1, string2) { + return string2.slice(0, overlapCount(string1, string2)); } - function generateOptions(options, defaults) { - if (typeof options === 'function') { - defaults.callback = options; - } else if (options) { - for (var name in options) { - /* istanbul ignore else */ - if (options.hasOwnProperty(name)) { - defaults[name] = options[name]; - } + // Nicked from https://stackoverflow.com/a/60422853/1709587 + function overlapCount(a, b) { + // Deal with cases where the strings differ in length + var startA = 0; + if (a.length > b.length) { + startA = a.length - b.length; + } + var endB = b.length; + if (a.length < b.length) { + endB = a.length; + } + // Create a back-reference for each index + // that should be followed in case of a mismatch. + // We only need B to make these references: + var map = Array(endB); + var k = 0; // Index that lags behind j + map[0] = 0; + for (var j = 1; j < endB; j++) { + if (b[j] == b[k]) { + map[j] = map[k]; // skip over the same character (optional optimisation) + } else { + map[j] = k; + } + while (k > 0 && b[j] != b[k]) { + k = map[k]; + } + if (b[j] == b[k]) { + k++; + } + } + // Phase 2: use these references while iterating over A + k = 0; + for (var i = startA; i < a.length; i++) { + while (k > 0 && a[i] != b[k]) { + k = map[k]; + } + if (a[i] == b[k]) { + k++; } } + return k; + } - return defaults; + /** + * Returns true if the string consistently uses Windows line endings. + */ + function hasOnlyWinLineEndings(string) { + return string.includes('\r\n') && !string.startsWith('\n') && !string.match(/[^\r]\n/); + } + + /** + * Returns true if the string consistently uses Unix line endings. + */ + function hasOnlyUnixLineEndings(string) { + return !string.includes('\r\n') && string.includes('\n'); } + // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode // // Ranges and exceptions: // Latin-1 Supplement, 0080–00FF @@ -14166,82 +14377,330 @@ module.exports = function defineDataProperty( // - U+02DC ˜ ˜ Small Tilde // - U+02DD ˝ ˝ Double Acute Accent // Latin Extended Additional, 1E00–1EFF + var extendedWordChars = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}"; - var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; - var reWhitespace = /\S/; + // Each token is one of the following: + // - A punctuation mark plus the surrounding whitespace + // - A word plus the surrounding whitespace + // - Pure whitespace (but only in the special case where this the entire text + // is just whitespace) + // + // We have to include surrounding whitespace in the tokens because the two + // alternative approaches produce horribly broken results: + // * If we just discard the whitespace, we can't fully reproduce the original + // text from the sequence of tokens and any attempt to render the diff will + // get the whitespace wrong. + // * If we have separate tokens for whitespace, then in a typical text every + // second token will be a single space character. But this often results in + // the optimal diff between two texts being a perverse one that preserves + // the spaces between words but deletes and reinserts actual common words. + // See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640 + // for an example. + // + // Keeping the surrounding whitespace of course has implications for .equals + // and .join, not just .tokenize. + + // This regex does NOT fully implement the tokenization rules described above. + // Instead, it gives runs of whitespace their own "token". The tokenize method + // then handles stitching whitespace tokens onto adjacent word or punctuation + // tokens. + var tokenizeIncludingWhitespace = new RegExp("[".concat(extendedWordChars, "]+|\\s+|[^").concat(extendedWordChars, "]"), 'ug'); var wordDiff = new Diff(); - - wordDiff.equals = function (left, right) { - if (this.options.ignoreCase) { + wordDiff.equals = function (left, right, options) { + if (options.ignoreCase) { left = left.toLowerCase(); right = right.toLowerCase(); } - - return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + return left.trim() === right.trim(); }; - wordDiff.tokenize = function (value) { - // All whitespace symbols except newline group into one token, each newline - in separate token - var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. - - for (var i = 0; i < tokens.length - 1; i++) { - // If we have an empty string in the next field and we have only word chars before and after, merge - if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var parts; + if (options.intlSegmenter) { + if (options.intlSegmenter.resolvedOptions().granularity != 'word') { + throw new Error('The segmenter passed must have a granularity of "word"'); } + parts = Array.from(options.intlSegmenter.segment(value), function (segment) { + return segment.segment; + }); + } else { + parts = value.match(tokenizeIncludingWhitespace) || []; } - + var tokens = []; + var prevPart = null; + parts.forEach(function (part) { + if (/\s/.test(part)) { + if (prevPart == null) { + tokens.push(part); + } else { + tokens.push(tokens.pop() + part); + } + } else if (/\s/.test(prevPart)) { + if (tokens[tokens.length - 1] == prevPart) { + tokens.push(tokens.pop() + part); + } else { + tokens.push(prevPart + part); + } + } else { + tokens.push(part); + } + prevPart = part; + }); return tokens; }; - - function diffWords(oldStr, newStr, options) { - options = generateOptions(options, { - ignoreWhitespace: true + wordDiff.join = function (tokens) { + // Tokens being joined here will always have appeared consecutively in the + // same text, so we can simply strip off the leading whitespace from all the + // tokens except the first (and except any whitespace-only tokens - but such + // a token will always be the first and only token anyway) and then join them + // and the whitespace around words and punctuation will end up correct. + return tokens.map(function (token, i) { + if (i == 0) { + return token; + } else { + return token.replace(/^\s+/, ''); + } + }).join(''); + }; + wordDiff.postProcess = function (changes, options) { + if (!changes || options.oneChangePerToken) { + return changes; + } + var lastKeep = null; + // Change objects representing any insertion or deletion since the last + // "keep" change object. There can be at most one of each. + var insertion = null; + var deletion = null; + changes.forEach(function (change) { + if (change.added) { + insertion = change; + } else if (change.removed) { + deletion = change; + } else { + if (insertion || deletion) { + // May be false at start of text + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change); + } + lastKeep = change; + insertion = null; + deletion = null; + } }); + if (insertion || deletion) { + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null); + } + return changes; + }; + function diffWords(oldStr, newStr, options) { + // This option has never been documented and never will be (it's clearer to + // just call `diffWordsWithSpace` directly if you need that behavior), but + // has existed in jsdiff for a long time, so we retain support for it here + // for the sake of backwards compatibility. + if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) { + return diffWordsWithSpace(oldStr, newStr, options); + } return wordDiff.diff(oldStr, newStr, options); } + function dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) { + // Before returning, we tidy up the leading and trailing whitespace of the + // change objects to eliminate cases where trailing whitespace in one object + // is repeated as leading whitespace in the next. + // Below are examples of the outcomes we want here to explain the code. + // I=insert, K=keep, D=delete + // 1. diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want: K:'foo ' D:'bar ' K:'baz' + // + // 2. Diffing 'foo bar baz' vs 'foo qux baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz' + // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz' + // + // 3. Diffing 'foo\nbar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:'\nbar ' K:' baz' + // After cleanup, we want K'foo' D:'\nbar' K:' baz' + // + // 4. Diffing 'foo baz' vs 'foo\nbar baz' + // Prior to cleanup, we have K:'foo\n' I:'\nbar ' K:' baz' + // After cleanup, we ideally want K'foo' I:'\nbar' K:' baz' + // but don't actually manage this currently (the pre-cleanup change + // objects don't contain enough information to make it possible). + // + // 5. Diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want K:'foo ' D:' bar ' K:'baz' + // + // Our handling is unavoidably imperfect in the case where there's a single + // indel between keeps and the whitespace has changed. For instance, consider + // diffing 'foo\tbar\nbaz' vs 'foo baz'. Unless we create an extra change + // object to represent the insertion of the space character (which isn't even + // a token), we have no way to avoid losing information about the texts' + // original whitespace in the result we return. Still, we do our best to + // output something that will look sensible if we e.g. print it with + // insertions in green and deletions in red. + + // Between two "keep" change objects (or before the first or after the last + // change object), we can have either: + // * A "delete" followed by an "insert" + // * Just an "insert" + // * Just a "delete" + // We handle the three cases separately. + if (deletion && insertion) { + var oldWsPrefix = deletion.value.match(/^\s*/)[0]; + var oldWsSuffix = deletion.value.match(/\s*$/)[0]; + var newWsPrefix = insertion.value.match(/^\s*/)[0]; + var newWsSuffix = insertion.value.match(/\s*$/)[0]; + if (startKeep) { + var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix); + startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix); + deletion.value = removePrefix(deletion.value, commonWsPrefix); + insertion.value = removePrefix(insertion.value, commonWsPrefix); + } + if (endKeep) { + var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix); + endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix); + deletion.value = removeSuffix(deletion.value, commonWsSuffix); + insertion.value = removeSuffix(insertion.value, commonWsSuffix); + } + } else if (insertion) { + // The whitespaces all reflect what was in the new text rather than + // the old, so we essentially have no information about whitespace + // insertion or deletion. We just want to dedupe the whitespace. + // We do that by having each change object keep its trailing + // whitespace and deleting duplicate leading whitespace where + // present. + if (startKeep) { + insertion.value = insertion.value.replace(/^\s*/, ''); + } + if (endKeep) { + endKeep.value = endKeep.value.replace(/^\s*/, ''); + } + // otherwise we've got a deletion and no insertion + } else if (startKeep && endKeep) { + var newWsFull = endKeep.value.match(/^\s*/)[0], + delWsStart = deletion.value.match(/^\s*/)[0], + delWsEnd = deletion.value.match(/\s*$/)[0]; + + // Any whitespace that comes straight after startKeep in both the old and + // new texts, assign to startKeep and remove from the deletion. + var newWsStart = longestCommonPrefix(newWsFull, delWsStart); + deletion.value = removePrefix(deletion.value, newWsStart); + + // Any whitespace that comes straight before endKeep in both the old and + // new texts, and hasn't already been assigned to startKeep, assign to + // endKeep and remove from the deletion. + var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd); + deletion.value = removeSuffix(deletion.value, newWsEnd); + endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd); + + // If there's any whitespace from the new text that HASN'T already been + // assigned, assign it to the start: + startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length)); + } else if (endKeep) { + // We are at the start of the text. Preserve all the whitespace on + // endKeep, and just remove whitespace from the end of deletion to the + // extent that it overlaps with the start of endKeep. + var endKeepWsPrefix = endKeep.value.match(/^\s*/)[0]; + var deletionWsSuffix = deletion.value.match(/\s*$/)[0]; + var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix); + deletion.value = removeSuffix(deletion.value, overlap); + } else if (startKeep) { + // We are at the END of the text. Preserve all the whitespace on + // startKeep, and just remove whitespace from the start of deletion to + // the extent that it overlaps with the end of startKeep. + var startKeepWsSuffix = startKeep.value.match(/\s*$/)[0]; + var deletionWsPrefix = deletion.value.match(/^\s*/)[0]; + var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix); + deletion.value = removePrefix(deletion.value, _overlap); + } + } + var wordWithSpaceDiff = new Diff(); + wordWithSpaceDiff.tokenize = function (value) { + // Slightly different to the tokenizeIncludingWhitespace regex used above in + // that this one treats each individual newline as a distinct tokens, rather + // than merging them into other surrounding whitespace. This was requested + // in https://github.com/kpdecker/jsdiff/issues/180 & + // https://github.com/kpdecker/jsdiff/issues/211 + var regex = new RegExp("(\\r?\\n)|[".concat(extendedWordChars, "]+|[^\\S\\n\\r]+|[^").concat(extendedWordChars, "]"), 'ug'); + return value.match(regex) || []; + }; function diffWordsWithSpace(oldStr, newStr, options) { - return wordDiff.diff(oldStr, newStr, options); + return wordWithSpaceDiff.diff(oldStr, newStr, options); } - var lineDiff = new Diff(); + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + return defaults; + } - lineDiff.tokenize = function (value) { - if (this.options.stripTrailingCr) { + var lineDiff = new Diff(); + lineDiff.tokenize = function (value, options) { + if (options.stripTrailingCr) { // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior value = value.replace(/\r\n/g, '\n'); } - var retLines = [], - linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + linesAndNewlines = value.split(/(\n|\r\n)/); + // Ignore the final empty token that occurs if the string ends with a new line if (!linesAndNewlines[linesAndNewlines.length - 1]) { linesAndNewlines.pop(); - } // Merge the content and line separators into single tokens - + } + // Merge the content and line separators into single tokens for (var i = 0; i < linesAndNewlines.length; i++) { var line = linesAndNewlines[i]; - - if (i % 2 && !this.options.newlineIsToken) { + if (i % 2 && !options.newlineIsToken) { retLines[retLines.length - 1] += line; } else { - if (this.options.ignoreWhitespace) { - line = line.trim(); - } - retLines.push(line); } } - return retLines; }; - + lineDiff.equals = function (left, right, options) { + // If we're ignoring whitespace, we need to normalise lines by stripping + // whitespace before checking equality. (This has an annoying interaction + // with newlineIsToken that requires special handling: if newlines get their + // own token, then we DON'T want to trim the *newline* tokens down to empty + // strings, since this would cause us to treat whitespace-only line content + // as equal to a separator between lines, which would be weird and + // inconsistent with the documented behavior of the options.) + if (options.ignoreWhitespace) { + if (!options.newlineIsToken || !left.includes('\n')) { + left = left.trim(); + } + if (!options.newlineIsToken || !right.includes('\n')) { + right = right.trim(); + } + } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) { + if (left.endsWith('\n')) { + left = left.slice(0, -1); + } + if (right.endsWith('\n')) { + right = right.slice(0, -1); + } + } + return Diff.prototype.equals.call(this, left, right, options); + }; function diffLines(oldStr, newStr, callback) { return lineDiff.diff(oldStr, newStr, callback); } + + // Kept for backwards compatibility. This is a rather arbitrary wrapper method + // that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to + // have two ways to do exactly the same thing in the API, so we no longer + // document this one (library users should explicitly use `diffLines` with + // `ignoreWhitespace: true` instead) but we keep it around to maintain + // compatibility with code that used old versions. function diffTrimmedLines(oldStr, newStr, callback) { var options = generateOptions(callback, { ignoreWhitespace: true @@ -14250,42 +14709,67 @@ module.exports = function defineDataProperty( } var sentenceDiff = new Diff(); - sentenceDiff.tokenize = function (value) { return value.split(/(\S.+?[.!?])(?=\s+|$)/); }; - function diffSentences(oldStr, newStr, callback) { return sentenceDiff.diff(oldStr, newStr, callback); } var cssDiff = new Diff(); - cssDiff.tokenize = function (value) { return value.split(/([{}:;,]|\s+)/); }; - function diffCss(oldStr, newStr, callback) { return cssDiff.diff(oldStr, newStr, callback); } - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); } - - return _typeof(obj); + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : i + ""; + } + function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, @@ -14296,56 +14780,17 @@ module.exports = function defineDataProperty( } else { obj[key] = value; } - return obj; } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -14354,238 +14799,263 @@ module.exports = function defineDataProperty( if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var objectPrototypeToString = Object.prototype.toString; - var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + var jsonDiff = new Diff(); + // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: - jsonDiff.useLongestToken = true; jsonDiff.tokenize = lineDiff.tokenize; - - jsonDiff.castInput = function (value) { - var _this$options = this.options, - undefinedReplacement = _this$options.undefinedReplacement, - _this$options$stringi = _this$options.stringifyReplacer, - stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { - return typeof v === 'undefined' ? undefinedReplacement : v; - } : _this$options$stringi; + jsonDiff.castInput = function (value, options) { + var undefinedReplacement = options.undefinedReplacement, + _options$stringifyRep = options.stringifyReplacer, + stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _options$stringifyRep; return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); }; - - jsonDiff.equals = function (left, right) { - return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + jsonDiff.equals = function (left, right, options) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'), options); }; - function diffJson(oldObj, newObj, options) { return jsonDiff.diff(oldObj, newObj, options); - } // This function handles the presence of circular references by bailing out when encountering an - // object that is already on the "stack" of items being processed. Accepts an optional replacer + } + // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer function canonicalize(obj, stack, replacementStack, replacer, key) { stack = stack || []; replacementStack = replacementStack || []; - if (replacer) { obj = replacer(key, obj); } - var i; - for (i = 0; i < stack.length; i += 1) { if (stack[i] === obj) { return replacementStack[i]; } } - var canonicalizedObj; - - if ('[object Array]' === objectPrototypeToString.call(obj)) { + if ('[object Array]' === Object.prototype.toString.call(obj)) { stack.push(obj); canonicalizedObj = new Array(obj.length); replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); } - stack.pop(); replacementStack.pop(); return canonicalizedObj; } - if (obj && obj.toJSON) { obj = obj.toJSON(); } - if (_typeof(obj) === 'object' && obj !== null) { stack.push(obj); canonicalizedObj = {}; replacementStack.push(canonicalizedObj); - var sortedKeys = [], - _key; - + _key; for (_key in obj) { /* istanbul ignore else */ - if (obj.hasOwnProperty(_key)) { + if (Object.prototype.hasOwnProperty.call(obj, _key)) { sortedKeys.push(_key); } } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { _key = sortedKeys[i]; canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); } - stack.pop(); replacementStack.pop(); } else { canonicalizedObj = obj; } - return canonicalizedObj; } var arrayDiff = new Diff(); - arrayDiff.tokenize = function (value) { return value.slice(); }; - arrayDiff.join = arrayDiff.removeEmpty = function (value) { return value; }; - function diffArrays(oldArr, newArr, callback) { return arrayDiff.diff(oldArr, newArr, callback); } - function parsePatch(uniDiff) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], - list = [], - i = 0; + function unixToWin(patch) { + if (Array.isArray(patch)) { + return patch.map(unixToWin); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line, i) { + var _hunk$lines; + return line.startsWith('\\') || line.endsWith('\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\') ? line : line + '\r'; + }) + }); + }) + }); + } + function winToUnix(patch) { + if (Array.isArray(patch)) { + return patch.map(winToUnix); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line) { + return line.endsWith('\r') ? line.substring(0, line.length - 1) : line; + }) + }); + }) + }); + } + + /** + * Returns true if the patch consistently uses Unix line endings (or only involves one line and has + * no line endings). + */ + function isUnix(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return !patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return !line.startsWith('\\') && line.endsWith('\r'); + }); + }); + }); + } + + /** + * Returns true if the patch uses Windows line endings and only Windows line endings. + */ + function isWin(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return line.endsWith('\r'); + }); + }); + }) && patch.every(function (index) { + return index.hunks.every(function (hunk) { + return hunk.lines.every(function (line, i) { + var _hunk$lines2; + return line.startsWith('\\') || line.endsWith('\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\')); + }); + }); + }); + } + function parsePatch(uniDiff) { + var diffstr = uniDiff.split(/\n/), + list = [], + i = 0; function parseIndex() { var index = {}; - list.push(index); // Parse diff metadata + list.push(index); + // Parse diff metadata while (i < diffstr.length) { - var line = diffstr[i]; // File header found, end parsing diff metadata + var line = diffstr[i]; + // File header found, end parsing diff metadata if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { break; - } // Diff index - + } + // Diff index var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); - if (header) { index.index = header[1]; } - i++; - } // Parse file headers if they are defined. Unified diff requires them, but - // there's no technical issues to have an isolated hunk without file header - + } + // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + parseFileHeader(index); parseFileHeader(index); - parseFileHeader(index); // Parse hunks + // Parse hunks index.hunks = []; - while (i < diffstr.length) { var _line = diffstr[i]; - - if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + if (/^(Index:\s|diff\s|\-\-\-\s|\+\+\+\s|===================================================================)/.test(_line)) { break; } else if (/^@@/.test(_line)) { index.hunks.push(parseHunk()); - } else if (_line && options.strict) { - // Ignore unexpected content unless in strict mode + } else if (_line) { throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); } else { i++; } } - } // Parses the --- and +++ headers, if none are found, no lines - // are consumed. - + } + // Parses the --- and +++ headers, if none are found, no lines + // are consumed. function parseFileHeader(index) { - var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); - + var fileHeader = /^(---|\+\+\+)\s+(.*)\r?$/.exec(diffstr[i]); if (fileHeader) { var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; var data = fileHeader[2].split('\t', 2); var fileName = data[0].replace(/\\\\/g, '\\'); - if (/^".*"$/.test(fileName)) { fileName = fileName.substr(1, fileName.length - 2); } - index[keyPrefix + 'FileName'] = fileName; index[keyPrefix + 'Header'] = (data[1] || '').trim(); i++; } - } // Parses a hunk - // This assumes that we are at the start of a hunk. - + } + // Parses a hunk + // This assumes that we are at the start of a hunk. function parseHunk() { var chunkHeaderIndex = i, - chunkHeaderLine = diffstr[i++], - chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); var hunk = { oldStart: +chunkHeader[1], oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], newStart: +chunkHeader[3], newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], - lines: [], - linedelimiters: [] - }; // Unified Diff Format quirk: If the chunk size is 0, + lines: [] + }; + + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart += 1; } - if (hunk.newLines === 0) { hunk.newStart += 1; } - var addCount = 0, - removeCount = 0; - - for (; i < diffstr.length; i++) { - // Lines starting with '---' could be mistaken for the "remove line" operation - // But they could be the header for the next file. Therefore prune such cases out. - if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { - break; - } - + removeCount = 0; + for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\')); i++) { + var _diffstr$i; var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; - if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { hunk.lines.push(diffstr[i]); - hunk.linedelimiters.push(delimiters[i] || '\n'); - if (operation === '+') { addCount++; } else if (operation === '-') { @@ -14595,37 +15065,30 @@ module.exports = function defineDataProperty( removeCount++; } } else { - break; + throw new Error("Hunk at line ".concat(chunkHeaderIndex + 1, " contained invalid line ").concat(diffstr[i])); } - } // Handle the empty block count case - + } + // Handle the empty block count case if (!addCount && hunk.newLines === 1) { hunk.newLines = 0; } - - if (!removeCount && hunk.oldLines === 1) { - hunk.oldLines = 0; - } // Perform optional sanity checking - - - if (options.strict) { - if (addCount !== hunk.newLines) { - throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } - - if (removeCount !== hunk.oldLines) { - throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; } + // Perform sanity checking + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } return hunk; } - while (i < diffstr.length) { parseIndex(); } - return list; } @@ -14634,210 +15097,275 @@ module.exports = function defineDataProperty( // start of 2, this will iterate 2, 3, 1, 4, 0. function distanceIterator (start, minLine, maxLine) { var wantForward = true, - backwardExhausted = false, - forwardExhausted = false, - localOffset = 1; + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; return function iterator() { if (wantForward && !forwardExhausted) { if (backwardExhausted) { localOffset++; } else { wantForward = false; - } // Check if trying to fit beyond text length, and if not, check it fits - // after offset location (or desired location on first iteration) - + } + // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) if (start + localOffset <= maxLine) { - return localOffset; + return start + localOffset; } - forwardExhausted = true; } - if (!backwardExhausted) { if (!forwardExhausted) { wantForward = true; - } // Check if trying to fit before text beginning, and if not, check it fits - // before offset location - + } + // Check if trying to fit before text beginning, and if not, check it fits + // before offset location if (minLine <= start - localOffset) { - return -localOffset++; + return start - localOffset++; } - backwardExhausted = true; return iterator(); - } // We tried to fit hunk before text beginning and beyond text length, then - // hunk can't fit on the text. Return undefined + } + // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined }; } function applyPatch(source, uniDiff) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - if (Array.isArray(uniDiff)) { if (uniDiff.length > 1) { throw new Error('applyPatch only works with a single input.'); } - uniDiff = uniDiff[0]; - } // Apply the diff to the input + } + if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) { + if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) { + uniDiff = unixToWin(uniDiff); + } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) { + uniDiff = winToUnix(uniDiff); + } + } + // Apply the diff to the input + var lines = source.split('\n'), + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0; + if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) { + throw new Error('fuzzFactor must be a non-negative integer'); + } + + // Special case for empty patch. + if (!hunks.length) { + return source; + } + + // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change + // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a + // newline that already exists - then we either return false and fail to apply the patch (if + // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0). + // If we do need to remove/add a newline at EOF, this will always be in the final hunk: + var prevLine = '', + removeEOFNL = false, + addEOFNL = false; + for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) { + var line = hunks[hunks.length - 1].lines[i]; + if (line[0] == '\\') { + if (prevLine[0] == '+') { + removeEOFNL = true; + } else if (prevLine[0] == '-') { + addEOFNL = true; + } + } + prevLine = line; + } + if (removeEOFNL) { + if (addEOFNL) { + // This means the final line gets changed but doesn't have a trailing newline in either the + // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if + // fuzzFactor is 0, we simply validate that the source file has no trailing newline. + if (!fuzzFactor && lines[lines.length - 1] == '') { + return false; + } + } else if (lines[lines.length - 1] == '') { + lines.pop(); + } else if (!fuzzFactor) { + return false; + } + } else if (addEOFNL) { + if (lines[lines.length - 1] != '') { + lines.push(''); + } else if (!fuzzFactor) { + return false; + } + } - var lines = source.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], - hunks = uniDiff.hunks, - compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { - return line === patchContent; - }, - errorCount = 0, - fuzzFactor = options.fuzzFactor || 0, - minLine = 0, - offset = 0, - removeEOFNL, - addEOFNL; /** - * Checks if the hunk exactly fits on the provided location + * Checks if the hunk can be made to fit at the provided location with at most `maxErrors` + * insertions, substitutions, or deletions, while ensuring also that: + * - lines deleted in the hunk match exactly, and + * - wherever an insertion operation or block of insertion operations appears in the hunk, the + * immediately preceding and following lines of context match exactly + * + * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0]. + * + * If the hunk can be applied, returns an object with properties `oldLineLastI` and + * `replacementLines`. Otherwise, returns null. */ - - - function hunkFits(hunk, toPos) { - for (var j = 0; j < hunk.lines.length; j++) { - var line = hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line; - - if (operation === ' ' || operation === '-') { - // Context sanity check - if (!compareLine(toPos + 1, lines[toPos], operation, content)) { - errorCount++; - - if (errorCount > fuzzFactor) { - return false; + function applyHunk(hunkLines, toPos, maxErrors) { + var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : []; + var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; + var nConsecutiveOldContextLines = 0; + var nextContextLineMustMatch = false; + for (; hunkLinesI < hunkLines.length; hunkLinesI++) { + var hunkLine = hunkLines[hunkLinesI], + operation = hunkLine.length > 0 ? hunkLine[0] : ' ', + content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine; + if (operation === '-') { + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + toPos++; + nConsecutiveOldContextLines = 0; + } else { + if (!maxErrors || lines[toPos] == null) { + return null; } + patchedLines[patchedLinesLength] = lines[toPos]; + return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1); + } + } + if (operation === '+') { + if (!lastContextLineMatched) { + return null; } + patchedLines[patchedLinesLength] = content; + patchedLinesLength++; + nConsecutiveOldContextLines = 0; + nextContextLineMustMatch = true; + } + if (operation === ' ') { + nConsecutiveOldContextLines++; + patchedLines[patchedLinesLength] = lines[toPos]; + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + patchedLinesLength++; + lastContextLineMatched = true; + nextContextLineMustMatch = false; + toPos++; + } else { + if (nextContextLineMustMatch || !maxErrors) { + return null; + } - toPos++; + // Consider 3 possibilities in sequence: + // 1. lines contains a *substitution* not included in the patch context, or + // 2. lines contains an *insertion* not included in the patch context, or + // 3. lines contains a *deletion* not included in the patch context + // The first two options are of course only possible if the line from lines is non-null - + // i.e. only option 3 is possible if we've overrun the end of the old file. + return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength); + } } } - return true; - } // Search best fit offsets for each hunk based on the previous ones - - - for (var i = 0; i < hunks.length; i++) { - var hunk = hunks[i], - maxLine = lines.length - hunk.oldLines, - localOffset = 0, - toPos = offset + hunk.oldStart - 1; - var iterator = distanceIterator(toPos, minLine, maxLine); + // Before returning, trim any unmodified context lines off the end of patchedLines and reduce + // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region + // that starts in this hunk's trailing context. + patchedLinesLength -= nConsecutiveOldContextLines; + toPos -= nConsecutiveOldContextLines; + patchedLines.length = patchedLinesLength; + return { + patchedLines: patchedLines, + oldLineLastI: toPos - 1 + }; + } + var resultLines = []; - for (; localOffset !== undefined; localOffset = iterator()) { - if (hunkFits(hunk, toPos + localOffset)) { - hunk.offset = offset += localOffset; + // Search best fit offsets for each hunk based on the previous ones + var prevHunkOffset = 0; + for (var _i = 0; _i < hunks.length; _i++) { + var hunk = hunks[_i]; + var hunkResult = void 0; + var maxLine = lines.length - hunk.oldLines + fuzzFactor; + var toPos = void 0; + for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) { + toPos = hunk.oldStart + prevHunkOffset - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + for (; toPos !== undefined; toPos = iterator()) { + hunkResult = applyHunk(hunk.lines, toPos, maxErrors); + if (hunkResult) { + break; + } + } + if (hunkResult) { break; } } - - if (localOffset === undefined) { + if (!hunkResult) { return false; - } // Set lower text limit to end of the current hunk, so next ones don't try - // to fit over already patched text - - - minLine = hunk.offset + hunk.oldStart + hunk.oldLines; - } // Apply patch hunks - - - var diffOffset = 0; - - for (var _i = 0; _i < hunks.length; _i++) { - var _hunk = hunks[_i], - _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; - - diffOffset += _hunk.newLines - _hunk.oldLines; + } - for (var j = 0; j < _hunk.lines.length; j++) { - var line = _hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line, - delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n'; + // Copy everything from the end of where we applied the last hunk to the start of this hunk + for (var _i2 = minLine; _i2 < toPos; _i2++) { + resultLines.push(lines[_i2]); + } - if (operation === ' ') { - _toPos++; - } else if (operation === '-') { - lines.splice(_toPos, 1); - delimiters.splice(_toPos, 1); - /* istanbul ignore else */ - } else if (operation === '+') { - lines.splice(_toPos, 0, content); - delimiters.splice(_toPos, 0, delimiter); - _toPos++; - } else if (operation === '\\') { - var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; - - if (previousOperation === '+') { - removeEOFNL = true; - } else if (previousOperation === '-') { - addEOFNL = true; - } - } + // Add the lines produced by applying the hunk: + for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) { + var _line = hunkResult.patchedLines[_i3]; + resultLines.push(_line); } - } // Handle EOFNL insertion/removal + // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + minLine = hunkResult.oldLineLastI + 1; - if (removeEOFNL) { - while (!lines[lines.length - 1]) { - lines.pop(); - delimiters.pop(); - } - } else if (addEOFNL) { - lines.push(''); - delimiters.push('\n'); + // Note the offset between where the patch said the hunk should've applied and where we + // applied it, so we can adjust future hunks accordingly: + prevHunkOffset = toPos + 1 - hunk.oldStart; } - for (var _k = 0; _k < lines.length - 1; _k++) { - lines[_k] = lines[_k] + delimiters[_k]; + // Copy over the rest of the lines from the old text + for (var _i4 = minLine; _i4 < lines.length; _i4++) { + resultLines.push(lines[_i4]); } + return resultLines.join('\n'); + } - return lines.join(''); - } // Wrapper that supports multiple file patches via callbacks. - + // Wrapper that supports multiple file patches via callbacks. function applyPatches(uniDiff, options) { if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - var currentIndex = 0; - function processIndex() { var index = uniDiff[currentIndex++]; - if (!index) { return options.complete(); } - options.loadFile(index, function (err, data) { if (err) { return options.complete(err); } - var updatedContent = applyPatch(data, index, options); options.patched(index, updatedContent, function (err) { if (err) { return options.complete(err); } - processIndex(); }); }); } - processIndex(); } @@ -14845,206 +15373,238 @@ module.exports = function defineDataProperty( if (!options) { options = {}; } - + if (typeof options === 'function') { + options = { + callback: options + }; + } if (typeof options.context === 'undefined') { options.context = 4; } - - var diff = diffLines(oldStr, newStr, options); - - if (!diff) { - return; + if (options.newlineIsToken) { + throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions'); } - - diff.push({ - value: '', - lines: [] - }); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function (entry) { - return ' ' + entry; - }); + if (!options.callback) { + return diffLinesResultToPatch(diffLines(oldStr, newStr, options)); + } else { + var _options = options, + _callback = _options.callback; + diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(diff) { + var patch = diffLinesResultToPatch(diff); + _callback(patch); + } + })); } + function diffLinesResultToPatch(diff) { + // STEP 1: Build up the patch with no "\ No newline at end of file" lines and with the arrays + // of lines containing trailing newline characters. We'll tidy up later... - var hunks = []; - var oldRangeStart = 0, + if (!diff) { + return; + } + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + var hunks = []; + var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1; - - var _loop = function _loop(i) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - var _curRange; - - // If we have previous context, start with that - if (!oldRangeStart) { - var prev = diff[i - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; + var _loop = function _loop() { + var current = diff[i], + lines = current.lines || splitLines(current.value); + current.lines = lines; + if (current.added || current.removed) { + var _curRange; + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } } - } // Output our changes - - (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { - return (current.added ? '+' : '-') + entry; - }))); // Track the updated file position + // Output our changes + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); - - if (current.added) { - newLine += lines.length; + // Track the updated file position + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + // end the range and output + var contextSize = Math.min(lines.length, options.context); + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + var _hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + hunks.push(_hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } oldLine += lines.length; + newLine += lines.length; } - } else { - // Identical context lines. Track line changes - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= options.context * 2 && i < diff.length - 2) { - var _curRange2; - - // Overlapping - (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); - } else { - var _curRange3; - - // end the range and output - var contextSize = Math.min(lines.length, options.context); - - (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); - - var hunk = { - oldStart: oldRangeStart, - oldLines: oldLine - oldRangeStart + contextSize, - newStart: newRangeStart, - newLines: newLine - newRangeStart + contextSize, - lines: curRange - }; - - if (i >= diff.length - 2 && lines.length <= options.context) { - // EOF is inside this hunk - var oldEOFNewline = /\n$/.test(oldStr); - var newEOFNewline = /\n$/.test(newStr); - var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; - - if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { - // special case: old has no eol and no trailing context; no-nl can end up before adds - // however, if the old file is empty, do not output the no-nl line - curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); - } - - if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { - curRange.push('\\ No newline at end of file'); - } - } + }; + for (var i = 0; i < diff.length; i++) { + _loop(); + } - hunks.push(hunk); - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; + // Step 2: eliminate the trailing `\n` from each line of each hunk, and, where needed, add + // "\ No newline at end of file". + for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) { + var hunk = _hunks[_i]; + for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) { + if (hunk.lines[_i2].endsWith('\n')) { + hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1); + } else { + hunk.lines.splice(_i2 + 1, 0, '\\ No newline at end of file'); + _i2++; // Skip the line we just added, then continue iterating } } - - oldLine += lines.length; - newLine += lines.length; } - }; - - for (var i = 0; i < diff.length; i++) { - _loop(i); + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; } - - return { - oldFileName: oldFileName, - newFileName: newFileName, - oldHeader: oldHeader, - newHeader: newHeader, - hunks: hunks - }; } function formatPatch(diff) { if (Array.isArray(diff)) { return diff.map(formatPatch).join('\n'); } - var ret = []; - if (diff.oldFileName == diff.newFileName) { ret.push('Index: ' + diff.oldFileName); } - ret.push('==================================================================='); ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); - for (var i = 0; i < diff.hunks.length; i++) { - var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + var hunk = diff.hunks[i]; + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart -= 1; } - if (hunk.newLines === 0) { hunk.newStart -= 1; } - ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); ret.push.apply(ret, hunk.lines); } - return ret.join('\n') + '\n'; } function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { - return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + var _options2; + if (typeof options === 'function') { + options = { + callback: options + }; + } + if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) { + var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options); + if (!patchObj) { + return; + } + return formatPatch(patchObj); + } else { + var _options3 = options, + _callback2 = _options3.callback; + structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(patchObj) { + if (!patchObj) { + _callback2(); + } else { + _callback2(formatPatch(patchObj)); + } + } + })); + } } function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); } + /** + * Split `text` into an array of lines, including the trailing newline character (where present) + */ + function splitLines(text) { + var hasTrailingNl = text.endsWith('\n'); + var result = text.split('\n').map(function (line) { + return line + '\n'; + }); + if (hasTrailingNl) { + result.pop(); + } else { + result.push(result.pop().slice(0, -1)); + } + return result; + } + function arrayEqual(a, b) { if (a.length !== b.length) { return false; } - return arrayStartsWith(a, b); } function arrayStartsWith(array, start) { if (start.length > array.length) { return false; } - for (var i = 0; i < start.length; i++) { if (start[i] !== array[i]) { return false; } } - return true; } function calcLineCount(hunk) { var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), - oldLines = _calcOldNewLineCount.oldLines, - newLines = _calcOldNewLineCount.newLines; - + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; if (oldLines !== undefined) { hunk.oldLines = oldLines; } else { delete hunk.oldLines; } - if (newLines !== undefined) { hunk.newLines = newLines; } else { @@ -15054,14 +15614,14 @@ module.exports = function defineDataProperty( function merge(mine, theirs, base) { mine = loadPatch(mine, base); theirs = loadPatch(theirs, base); - var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + var ret = {}; + + // For index we just let it pass through as it doesn't have any necessary meaning. // Leaving sanity checks on this to the API consumer that may know more about the // meaning in their own context. - if (mine.index || theirs.index) { ret.index = mine.index || theirs.index; } - if (mine.newFileName || theirs.newFileName) { if (!fileNameChanged(mine)) { // No header or no change in ours, use theirs (and ours if theirs does not exist) @@ -15083,21 +15643,18 @@ module.exports = function defineDataProperty( ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); } } - ret.hunks = []; var mineIndex = 0, - theirsIndex = 0, - mineOffset = 0, - theirsOffset = 0; - + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { var mineCurrent = mine.hunks[mineIndex] || { - oldStart: Infinity - }, - theirsCurrent = theirs.hunks[theirsIndex] || { - oldStart: Infinity - }; - + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; if (hunkBefore(mineCurrent, theirsCurrent)) { // This patch does not overlap with any of the others, yay. ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); @@ -15123,30 +15680,23 @@ module.exports = function defineDataProperty( ret.hunks.push(mergedHunk); } } - return ret; } - function loadPatch(param, base) { if (typeof param === 'string') { if (/^@@/m.test(param) || /^Index:/m.test(param)) { return parsePatch(param)[0]; } - if (!base) { throw new Error('Must provide a base reference or pass in a patch'); } - return structuredPatch(undefined, undefined, base, param); } - return param; } - function fileNameChanged(patch) { return patch.newFileName && patch.newFileName !== patch.oldFileName; } - function selectField(index, mine, theirs) { if (mine === theirs) { return mine; @@ -15158,11 +15708,9 @@ module.exports = function defineDataProperty( }; } } - function hunkBefore(test, check) { return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; } - function cloneHunk(hunk, offset) { return { oldStart: hunk.oldStart, @@ -15172,39 +15720,37 @@ module.exports = function defineDataProperty( lines: hunk.lines }; } - function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { // This will generally result in a conflicted hunk, but there are cases where the context // is the only overlap where we can successfully merge the content here. var mine = { - offset: mineOffset, - lines: mineLines, - index: 0 - }, - their = { - offset: theirOffset, - lines: theirLines, - index: 0 - }; // Handle any leading content + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; + // Handle any leading content insertLeading(hunk, mine, their); - insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + insertLeading(hunk, their, mine); + // Now in the overlap content. Scan through and select the best changes from each. while (mine.index < mine.lines.length && their.index < their.lines.length) { var mineCurrent = mine.lines[mine.index], - theirCurrent = their.lines[their.index]; - + theirCurrent = their.lines[their.index]; if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { // Both modified ... mutualChange(hunk, mine, their); } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { var _hunk$lines; - // Mine inserted (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { var _hunk$lines2; - // Theirs inserted (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { @@ -15222,57 +15768,44 @@ module.exports = function defineDataProperty( // Context mismatch conflict(hunk, collectChange(mine), collectChange(their)); } - } // Now push anything that may be remaining - + } + // Now push anything that may be remaining insertTrailing(hunk, mine); insertTrailing(hunk, their); calcLineCount(hunk); } - function mutualChange(hunk, mine, their) { var myChanges = collectChange(mine), - theirChanges = collectChange(their); - + theirChanges = collectChange(their); if (allRemoves(myChanges) && allRemoves(theirChanges)) { // Special case for remove changes that are supersets of one another if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { var _hunk$lines3; - (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); - return; } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { var _hunk$lines4; - (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); - return; } } else if (arrayEqual(myChanges, theirChanges)) { var _hunk$lines5; - (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); - return; } - conflict(hunk, myChanges, theirChanges); } - function removal(hunk, mine, their, swap) { var myChanges = collectChange(mine), - theirChanges = collectContext(their, myChanges); - + theirChanges = collectContext(their, myChanges); if (theirChanges.merged) { var _hunk$lines6; - (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); } else { conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); } } - function conflict(hunk, mine, their) { hunk.conflict = true; hunk.lines.push({ @@ -15281,7 +15814,6 @@ module.exports = function defineDataProperty( theirs: their }); } - function insertLeading(hunk, insert, their) { while (insert.offset < their.offset && insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; @@ -15289,25 +15821,22 @@ module.exports = function defineDataProperty( insert.offset++; } } - function insertTrailing(hunk, insert) { while (insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; hunk.lines.push(line); } } - function collectChange(state) { var ret = [], - operation = state.lines[state.index][0]; - + operation = state.lines[state.index][0]; while (state.index < state.lines.length) { - var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + var line = state.lines[state.index]; + // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. if (operation === '-' && line[0] === '+') { operation = '+'; } - if (operation === line[0]) { ret.push(line); state.index++; @@ -15315,39 +15844,35 @@ module.exports = function defineDataProperty( break; } } - return ret; } - function collectContext(state, matchChanges) { var changes = [], - merged = [], - matchIndex = 0, - contextChanges = false, - conflicted = false; - + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; while (matchIndex < matchChanges.length && state.index < state.lines.length) { var change = state.lines[state.index], - match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + match = matchChanges[matchIndex]; + // Once we've hit our add, then we are done if (match[0] === '+') { break; } - contextChanges = contextChanges || change[0] !== ' '; merged.push(match); - matchIndex++; // Consume any additions in the other block as a conflict to attempt - // to pull in the remaining context after this + matchIndex++; + // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this if (change[0] === '+') { conflicted = true; - while (change[0] === '+') { changes.push(change); change = state.lines[++state.index]; } } - if (match.substr(1) === change.substr(1)) { changes.push(change); state.index++; @@ -15355,44 +15880,35 @@ module.exports = function defineDataProperty( conflicted = true; } } - if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { conflicted = true; } - if (conflicted) { return changes; } - while (matchIndex < matchChanges.length) { merged.push(matchChanges[matchIndex++]); } - return { merged: merged, changes: changes }; } - function allRemoves(changes) { return changes.reduce(function (prev, change) { return prev && change[0] === '-'; }, true); } - function skipRemoveSuperset(state, removeChanges, delta) { for (var i = 0; i < delta; i++) { var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); - if (state.lines[state.index + i] !== ' ' + changeContent) { return false; } } - state.index += delta; return true; } - function calcOldNewLineCount(lines) { var oldLines = 0; var newLines = 0; @@ -15400,7 +15916,6 @@ module.exports = function defineDataProperty( if (typeof line !== 'string') { var myCount = calcOldNewLineCount(line.mine); var theirCount = calcOldNewLineCount(line.theirs); - if (oldLines !== undefined) { if (myCount.oldLines === theirCount.oldLines) { oldLines += myCount.oldLines; @@ -15408,7 +15923,6 @@ module.exports = function defineDataProperty( oldLines = undefined; } } - if (newLines !== undefined) { if (myCount.newLines === theirCount.newLines) { newLines += myCount.newLines; @@ -15420,7 +15934,6 @@ module.exports = function defineDataProperty( if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { newLines++; } - if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { oldLines++; } @@ -15436,7 +15949,6 @@ module.exports = function defineDataProperty( if (Array.isArray(structuredPatch)) { return structuredPatch.map(reversePatch).reverse(); } - return _objectSpread2(_objectSpread2({}, structuredPatch), {}, { oldFileName: structuredPatch.newFileName, oldHeader: structuredPatch.newHeader, @@ -15448,16 +15960,13 @@ module.exports = function defineDataProperty( oldStart: hunk.newStart, newLines: hunk.oldLines, newStart: hunk.oldStart, - linedelimiters: hunk.linedelimiters, lines: hunk.lines.map(function (l) { if (l.startsWith('-')) { return "+".concat(l.slice(1)); } - if (l.startsWith('+')) { return "-".concat(l.slice(1)); } - return l; }) }; @@ -15468,12 +15977,10 @@ module.exports = function defineDataProperty( // See: http://code.google.com/p/google-diff-match-patch/wiki/API function convertChangesToDMP(changes) { var ret = [], - change, - operation; - + change, + operation; for (var i = 0; i < changes.length; i++) { change = changes[i]; - if (change.added) { operation = 1; } else if (change.removed) { @@ -15481,37 +15988,29 @@ module.exports = function defineDataProperty( } else { operation = 0; } - ret.push([operation, change.value]); } - return ret; } function convertChangesToXML(changes) { var ret = []; - for (var i = 0; i < changes.length; i++) { var change = changes[i]; - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } - ret.push(escapeHTML(change.value)); - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } } - return ret.join(''); } - function escapeHTML(s) { var n = s; n = n.replace(/&/g, '&'); @@ -15544,11 +16043,9 @@ module.exports = function defineDataProperty( exports.reversePatch = reversePatch; exports.structuredPatch = structuredPatch; - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); +})); -},{}],122:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -15566,49 +16063,49 @@ if ($defineProperty) { module.exports = $defineProperty; -},{"get-intrinsic":132}],123:[function(require,module,exports){ +},{"get-intrinsic":114}],105:[function(require,module,exports){ 'use strict'; /** @type {import('./eval')} */ module.exports = EvalError; -},{}],124:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ 'use strict'; /** @type {import('.')} */ module.exports = Error; -},{}],125:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ 'use strict'; /** @type {import('./range')} */ module.exports = RangeError; -},{}],126:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ 'use strict'; /** @type {import('./ref')} */ module.exports = ReferenceError; -},{}],127:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ 'use strict'; /** @type {import('./syntax')} */ module.exports = SyntaxError; -},{}],128:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ 'use strict'; /** @type {import('./type')} */ module.exports = TypeError; -},{}],129:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ 'use strict'; /** @type {import('./uri')} */ module.exports = URIError; -},{}],130:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ 'use strict'; /* eslint no-invalid-this: 1 */ @@ -15694,14 +16191,14 @@ module.exports = function bind(that) { return bound; }; -},{}],131:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); module.exports = Function.prototype.bind || implementation; -},{"./implementation":130}],132:[function(require,module,exports){ +},{"./implementation":112}],114:[function(require,module,exports){ 'use strict'; var undefined; @@ -16062,7 +16559,7 @@ module.exports = function GetIntrinsic(name, allowMissing) { return value; }; -},{"es-errors":124,"es-errors/eval":123,"es-errors/range":125,"es-errors/ref":126,"es-errors/syntax":127,"es-errors/type":128,"es-errors/uri":129,"function-bind":131,"has-proto":135,"has-symbols":136,"hasown":138}],133:[function(require,module,exports){ +},{"es-errors":106,"es-errors/eval":105,"es-errors/range":107,"es-errors/ref":108,"es-errors/syntax":109,"es-errors/type":110,"es-errors/uri":111,"function-bind":113,"has-proto":117,"has-symbols":118,"hasown":120}],115:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -16080,7 +16577,7 @@ if ($gOPD) { module.exports = $gOPD; -},{"get-intrinsic":132}],134:[function(require,module,exports){ +},{"get-intrinsic":114}],116:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -16104,7 +16601,7 @@ hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBu module.exports = hasPropertyDescriptors; -},{"es-define-property":122}],135:[function(require,module,exports){ +},{"es-define-property":104}],117:[function(require,module,exports){ 'use strict'; var test = { @@ -16121,7 +16618,7 @@ module.exports = function hasProto() { && !(test instanceof $Object); }; -},{}],136:[function(require,module,exports){ +},{}],118:[function(require,module,exports){ 'use strict'; var origSymbol = typeof Symbol !== 'undefined' && Symbol; @@ -16136,7 +16633,7 @@ module.exports = function hasNativeSymbols() { return hasSymbolSham(); }; -},{"./shams":137}],137:[function(require,module,exports){ +},{"./shams":119}],119:[function(require,module,exports){ 'use strict'; /* eslint complexity: [2, 18], max-statements: [2, 33] */ @@ -16180,7 +16677,7 @@ module.exports = function hasSymbols() { return true; }; -},{}],138:[function(require,module,exports){ +},{}],120:[function(require,module,exports){ 'use strict'; var call = Function.prototype.call; @@ -16190,7 +16687,7 @@ var bind = require('function-bind'); /** @type {import('.')} */ module.exports = bind.call(call, $hasOwn); -},{"function-bind":131}],139:[function(require,module,exports){ +},{"function-bind":113}],121:[function(require,module,exports){ module.exports = extend; /* @@ -16264,7 +16761,7 @@ function isUnextendable(val) { return !val || (typeof val != 'object' && typeof val != 'function'); } -},{}],140:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ /** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` @@ -17197,7 +17694,7 @@ function get(object, path, defaultValue) { module.exports = get; -},{}],141:[function(require,module,exports){ +},{}],123:[function(require,module,exports){ "use strict"; // cache a reference to setTimeout, so that our reference won't be stubbed out @@ -17252,7 +17749,7 @@ function configureLogger(config) { module.exports = configureLogger; -},{}],142:[function(require,module,exports){ +},{}],124:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17268,7 +17765,7 @@ CustomEvent.prototype.constructor = CustomEvent; module.exports = CustomEvent; -},{"./event":144}],143:[function(require,module,exports){ +},{"./event":126}],125:[function(require,module,exports){ "use strict"; function flattenOptions(options) { @@ -17392,7 +17889,7 @@ var EventTarget = { module.exports = EventTarget; -},{}],144:[function(require,module,exports){ +},{}],126:[function(require,module,exports){ "use strict"; function Event(type, bubbles, cancelable, target) { @@ -17418,7 +17915,7 @@ Event.prototype = { module.exports = Event; -},{}],145:[function(require,module,exports){ +},{}],127:[function(require,module,exports){ "use strict"; module.exports = { @@ -17428,7 +17925,7 @@ module.exports = { EventTarget: require("./event-target"), }; -},{"./custom-event":142,"./event":144,"./event-target":143,"./progress-event":146}],146:[function(require,module,exports){ +},{"./custom-event":124,"./event":126,"./event-target":125,"./progress-event":128}],128:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17452,7 +17949,7 @@ ProgressEvent.prototype.constructor = ProgressEvent; module.exports = ProgressEvent; -},{"./event":144}],147:[function(require,module,exports){ +},{"./event":126}],129:[function(require,module,exports){ "use strict"; var FakeTimers = require("@sinonjs/fake-timers"); @@ -17527,7 +18024,7 @@ fakeServerWithClock.restore = function restore() { module.exports = fakeServerWithClock; -},{"./index":148,"@sinonjs/fake-timers":61}],148:[function(require,module,exports){ +},{"./index":130,"@sinonjs/fake-timers":61}],130:[function(require,module,exports){ "use strict"; var fakeXhr = require("../fake-xhr"); @@ -17680,7 +18177,6 @@ var fakeServer = { fakeHTTPMethods: true, logger: true, unsafeHeadersEnabled: true, - legacyRoutes: true, }; // eslint-disable-next-line no-param-reassign @@ -17744,8 +18240,6 @@ var fakeServer = { log: log, - legacyRoutes: true, - respondWith: function respondWith(method, url, body) { if (arguments.length === 1 && typeof method !== "function") { this.response = responseArray(method); @@ -17780,22 +18274,18 @@ var fakeServer = { url = url.replace("://", "\\://"); } if (/\*/.test(url)) { + // Uses the new syntax for repeating parameters in path-to-regexp, + // see https://github.com/pillarjs/path-to-regexp#unexpected--or- // eslint-disable-next-line no-param-reassign - url = url.replace(/\/\*/g, "/(.*)"); - } - - if (this.legacyRoutes) { - if (url.includes("?")) { - // eslint-disable-next-line no-param-reassign - url = url.replace("?", "\\?"); - } + url = url.replace(/\/\*/g, "/*path"); } } - push.call(this.responses, { method: method, url: - typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + typeof url === "string" && url !== "" + ? pathToRegexp(url).regexp + : url, response: typeof body === "function" ? body : responseArray(body), }); }, @@ -17890,7 +18380,7 @@ var fakeServer = { module.exports = fakeServer; -},{"../configure-logger":141,"../fake-xhr":151,"./log":149,"path-to-regexp":158}],149:[function(require,module,exports){ +},{"../configure-logger":123,"../fake-xhr":133,"./log":131,"path-to-regexp":140}],131:[function(require,module,exports){ "use strict"; var inspect = require("util").inspect; @@ -17908,7 +18398,7 @@ function log(response, request) { module.exports = log; -},{"util":117}],150:[function(require,module,exports){ +},{"util":99}],132:[function(require,module,exports){ "use strict"; exports.isSupported = (function () { @@ -17919,7 +18409,7 @@ exports.isSupported = (function () { } })(); -},{}],151:[function(require,module,exports){ +},{}],133:[function(require,module,exports){ "use strict"; var GlobalTextEncoder = @@ -18848,7 +19338,7 @@ module.exports = extend(fakeXMLHttpRequestFor(globalObject), { fakeXMLHttpRequestFor: fakeXMLHttpRequestFor, }); -},{"../configure-logger":141,"../event":145,"./blob":150,"@sinonjs/commons":48,"@sinonjs/text-encoding":108,"just-extend":139}],152:[function(require,module,exports){ +},{"../configure-logger":123,"../event":127,"./blob":132,"@sinonjs/commons":48,"@sinonjs/text-encoding":90,"just-extend":121}],134:[function(require,module,exports){ "use strict"; module.exports = { @@ -18857,7 +19347,7 @@ module.exports = { fakeXhr: require("./fake-xhr"), }; -},{"./fake-server":148,"./fake-server/fake-server-with-clock":147,"./fake-xhr":151}],153:[function(require,module,exports){ +},{"./fake-server":130,"./fake-server/fake-server-with-clock":129,"./fake-xhr":133}],135:[function(require,module,exports){ 'use strict'; var keysShim; @@ -18981,7 +19471,7 @@ if (!Object.keys) { } module.exports = keysShim; -},{"./isArguments":155}],154:[function(require,module,exports){ +},{"./isArguments":137}],136:[function(require,module,exports){ 'use strict'; var slice = Array.prototype.slice; @@ -19015,7 +19505,7 @@ keysShim.shim = function shimObjectKeys() { module.exports = keysShim; -},{"./implementation":153,"./isArguments":155}],155:[function(require,module,exports){ +},{"./implementation":135,"./isArguments":137}],137:[function(require,module,exports){ 'use strict'; var toStr = Object.prototype.toString; @@ -19034,7 +19524,7 @@ module.exports = function isArguments(value) { return isArgs; }; -},{}],156:[function(require,module,exports){ +},{}],138:[function(require,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es6-shim @@ -19082,7 +19572,7 @@ module.exports = function assign(target, source1) { return to; // step 4 }; -},{"call-bind/callBound":118,"has-symbols/shams":137,"object-keys":154}],157:[function(require,module,exports){ +},{"call-bind/callBound":100,"has-symbols/shams":119,"object-keys":136}],139:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); @@ -19139,604 +19629,421 @@ module.exports = function getPolyfill() { return Object.assign; }; -},{"./implementation":156}],158:[function(require,module,exports){ +},{"./implementation":138}],140:[function(require,module,exports){ "use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _Iter_peek; Object.defineProperty(exports, "__esModule", { value: true }); -exports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0; +exports.TokenData = void 0; +exports.parse = parse; +exports.compile = compile; +exports.match = match; +exports.pathToRegexp = pathToRegexp; +exports.stringify = stringify; +const DEFAULT_DELIMITER = "/"; +const NOOP_VALUE = (value) => value; +const ID_START = /^[$_\p{ID_Start}]$/u; +const ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u; +const DEBUG_URL = "https://git.new/pathToRegexpError"; +const SIMPLE_TOKENS = { + // Groups. + "{": "{", + "}": "}", + // Reserved. + "(": "(", + ")": ")", + "[": "[", + "]": "]", + "+": "+", + "?": "?", + "!": "!", +}; +/** + * Escape text for stringify to path. + */ +function escapeText(str) { + return str.replace(/[{}()\[\]+?!:*]/g, "\\$&"); +} +/** + * Escape a regular expression string. + */ +function escape(str) { + return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&"); +} /** * Tokenize input string. */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; +function* lexer(str) { + const chars = [...str]; + let i = 0; + function name() { + let value = ""; + if (ID_START.test(chars[++i])) { + value += chars[i]; + while (ID_CONTINUE.test(chars[++i])) { + value += chars[i]; } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i)); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at ".concat(j)); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; + else if (chars[i] === '"') { + let pos = i; + while (i < chars.length) { + if (chars[++i] === '"') { + i++; + pos = 0; + break; } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } + if (chars[i] === "\\") { + value += chars[++i]; } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j)); - } + else { + value += chars[i]; } - pattern += str[j++]; } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i)); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; + if (pos) { + throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`); + } } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); + if (!value) { + throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`); + } + return value; } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; + while (i < chars.length) { + const value = chars[i]; + const type = SIMPLE_TOKENS[value]; + if (type) { + yield { type, index: i++, value }; + } + else if (value === "\\") { + yield { type: "ESCAPED", index: i++, value: chars[i++] }; + } + else if (value === ":") { + const value = name(); + yield { type: "PARAM", index: i, value }; + } + else if (value === "*") { + const value = name(); + yield { type: "WILDCARD", index: i, value }; + } + else { + yield { type: "CHAR", index: i, value: chars[i++] }; + } + } + return { type: "END", index: i, value: "" }; } -/** - * Parse a string for the raw tokens. - */ -function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); +class Iter { + constructor(tokens) { + this.tokens = tokens; + _Iter_peek.set(this, void 0); + } + peek() { + if (!__classPrivateFieldGet(this, _Iter_peek, "f")) { + const next = this.tokens.next(); + __classPrivateFieldSet(this, _Iter_peek, next.value, "f"); + } + return __classPrivateFieldGet(this, _Iter_peek, "f"); + } + tryConsume(type) { + const token = this.peek(); + if (token.type !== type) + return; + __classPrivateFieldSet(this, _Iter_peek, undefined, "f"); // Reset after consumed. + return token.value; + } + consume(type) { + const value = this.tryConsume(type); if (value !== undefined) return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function () { - var result = ""; - var value; - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + const { type: nextType, index } = this.peek(); + throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`); + } + text() { + let result = ""; + let value; + while ((value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED"))) { result += value; } return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - mustConsume("END"); } - return result; } -exports.parse = parse; +_Iter_peek = new WeakMap(); /** - * Compile a string to a template function for the path. + * Tokenized path instance. */ -function compile(str, options) { - return tokensToFunction(parse(str, options), options); +class TokenData { + constructor(tokens) { + this.tokens = tokens; + } } -exports.compile = compile; +exports.TokenData = TokenData; /** - * Expose a method for transforming tokens into the path function. + * Parse a string for the raw tokens. */ -function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; +function parse(str, options = {}) { + const { encodePath = NOOP_VALUE } = options; + const it = new Iter(lexer(str)); + function consume(endType) { + const tokens = []; + while (true) { + const path = it.text(); + if (path) + tokens.push({ type: "text", value: encodePath(path) }); + const param = it.tryConsume("PARAM"); + if (param) { + tokens.push({ + type: "param", + name: param, + }); continue; } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array")); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"".concat(token.name, "\" to not be empty")); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - } + const wildcard = it.tryConsume("WILDCARD"); + if (wildcard) { + tokens.push({ + type: "wildcard", + name: wildcard, + }); continue; } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; + const open = it.tryConsume("{"); + if (open) { + tokens.push({ + type: "group", + tokens: consume("}"), + }); continue; } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage)); + it.consume(endType); + return tokens; } - return path; - }; + } + const tokens = consume("END"); + return new TokenData(tokens); } -exports.tokensToFunction = tokensToFunction; /** - * Create path match function from `path-to-regexp` spec. + * Compile a string to a template function for the path. */ -function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); +function compile(path, options = {}) { + const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const data = path instanceof TokenData ? path : parse(path, options); + const fn = tokensToFunction(data.tokens, delimiter, encode); + return function path(data = {}) { + const [path, ...missing] = fn(data); + if (missing.length) { + throw new TypeError(`Missing parameters: ${missing.join(", ")}`); + } + return path; + }; +} +function tokensToFunction(tokens, delimiter, encode) { + const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode)); + return (data) => { + const result = [""]; + for (const encoder of encoders) { + const [value, ...extras] = encoder(data); + result[0] += value; + result.push(...extras); + } + return result; + }; } -exports.match = match; /** - * Create a path match function from `path-to-regexp` output. + * Convert a single token into a path building function. */ -function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); +function tokenToFunction(token, delimiter, encode) { + if (token.type === "text") + return () => [token.value]; + if (token.type === "group") { + const fn = tokensToFunction(token.tokens, delimiter, encode); + return (data) => { + const [value, ...missing] = fn(data); + if (!missing.length) + return [value]; + return [""]; + }; + } + const encodeValue = encode || NOOP_VALUE; + if (token.type === "wildcard" && encode !== false) { + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (!Array.isArray(value) || value.length === 0) { + throw new TypeError(`Expected "${token.name}" to be a non-empty array`); } + return [ + value + .map((value, index) => { + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}/${index}" to be a string`); + } + return encodeValue(value); + }) + .join(delimiter), + ]; }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); + } + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}" to be a string`); } - return { path: path, index: index, params: params }; + return [encodeValue(value)]; }; } -exports.regexpToFunction = regexpToFunction; /** - * Escape a regular expression string. + * Transform a path into a match function. */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +function match(path, options = {}) { + const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const { regexp, keys } = pathToRegexp(path, options); + const decoders = keys.map((key) => { + if (decode === false) + return NOOP_VALUE; + if (key.type === "param") + return decode; + return (value) => value.split(delimiter).map(decode); + }); + return function match(input) { + const m = regexp.exec(input); + if (!m) + return false; + const path = m[0]; + const params = Object.create(null); + for (let i = 1; i < m.length; i++) { + if (m[i] === undefined) + continue; + const key = keys[i - 1]; + const decoder = decoders[i - 1]; + params[key.name] = decoder(m[i]); + } + return { path, params }; + }; } -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; +function pathToRegexp(path, options = {}) { + const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options; + const keys = []; + const sources = []; + const flags = sensitive ? "s" : "is"; + const paths = Array.isArray(path) ? path : [path]; + const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options)); + for (const { tokens } of items) { + for (const seq of flatten(tokens, 0, [])) { + const regexp = sequenceToRegExp(seq, delimiter, keys); + sources.push(regexp); + } + } + let pattern = `^(?:${sources.join("|")})`; + if (trailing) + pattern += `(?:${escape(delimiter)}$)?`; + pattern += end ? "$" : `(?=${escape(delimiter)}|$)`; + const regexp = new RegExp(pattern, flags); + return { regexp, keys }; } /** - * Pull out keys from a regexp. + * Generate a flat list of sequence tokens from the given tokens. */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "", - }); - execResult = groupsRegex.exec(path.source); +function* flatten(tokens, index, init) { + if (index === tokens.length) { + return yield init; } - return path; -} -/** - * Transform an array into a regexp. - */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); -} -/** - * Expose a function for taking tokens and returning a RegExp. - */ -function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } - else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } - else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } - else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } - } - else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); - } + const token = tokens[index]; + if (token.type === "group") { + const fork = init.slice(); + for (const seq of flatten(token.tokens, 0, fork)) { + yield* flatten(tokens, index + 1, seq); } } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 - : endToken === undefined; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } + init.push(token); } - return new RegExp(route, flags(options)); + yield* flatten(tokens, index + 1, init); } -exports.tokensToRegexp = tokensToRegexp; /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Transform a flat sequence of tokens into a regular expression. */ -function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); -} -exports.pathToRegexp = pathToRegexp; - -},{}],159:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); +function sequenceToRegExp(tokens, delimiter, keys) { + let result = ""; + let backtrack = ""; + let isSafeSegmentParam = true; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token.type === "text") { + result += escape(token.value); + backtrack = token.value; + isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter)); + continue; } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); + if (token.type === "param" || token.type === "wildcard") { + if (!isSafeSegmentParam && !backtrack) { + throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`); + } + if (token.type === "param") { + result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`; + } + else { + result += `(.+)`; + } + keys.push(token); + backtrack = ""; + isSafeSegmentParam = false; + continue; } } - - - + return result; } -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } +function negate(delimiter, backtrack) { + const values = [delimiter, backtrack].filter(Boolean); + const isSimple = values.every((value) => value.length === 1); + if (isSimple) + return `[^${escape(values.join(""))}]`; + return `(?:(?!${values.map(escape).join("|")}).)`; } - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); +/** + * Stringify token data into a path string. + */ +function stringify(data) { + return data.tokens + .map(function stringifyToken(token, index, tokens) { + if (token.type === "text") + return escapeText(token.value); + if (token.type === "group") { + return `{${token.tokens.map(stringifyToken).join("")}}`; + } + const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]); + const key = isSafe ? token.name : JSON.stringify(token.name); + if (token.type === "param") + return `:${key}`; + if (token.type === "wildcard") + return `*${key}`; + throw new TypeError(`Unexpected token: ${token}`); + }) + .join(""); +} +function isNameSafe(name) { + const [first, ...rest] = name; + if (!ID_START.test(first)) + return false; + return rest.every((char) => ID_CONTINUE.test(char)); } - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; +function isNextNameSafe(token) { + if (token?.type !== "text") + return true; + return !ID_CONTINUE.test(token.value[0]); } -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; -},{}],160:[function(require,module,exports){ +},{}],141:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -19780,91 +20087,14 @@ module.exports = function setFunctionLength(fn, length) { return fn; }; -},{"define-data-property":120,"es-errors/type":128,"get-intrinsic":132,"gopd":133,"has-property-descriptors":134}],161:[function(require,module,exports){ +},{"define-data-property":102,"es-errors/type":110,"get-intrinsic":114,"gopd":115,"has-property-descriptors":116}],142:[function(require,module,exports){ 'use strict'; module.exports = { stdout: false, stderr: false }; -},{}],162:[function(require,module,exports){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -},{"process/browser.js":159}],163:[function(require,module,exports){ +},{}],143:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : diff --git a/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs b/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs index 5ede671297..de56c21878 100644 --- a/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs +++ b/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs @@ -1,4 +1,4 @@ -/* Sinon.JS 18.0.0, 2024-05-15, @license BSD-3 */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i} abortListenerMap */ /* eslint-enable jsdoc/require-property-description */ @@ -5534,6 +5541,7 @@ if (typeof require === "function" && typeof module === "object") { * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + * @property {boolean} [ignoreMissingTimers] default is false, meaning asking to fake timers that are not present will throw an error */ /* eslint-disable jsdoc/require-property-description */ @@ -5578,16 +5586,26 @@ function withGlobal(_global) { const NOOP_ARRAY = function () { return []; }; - const timeoutResult = _global.setTimeout(NOOP, 0); - const addTimerReturnsObject = typeof timeoutResult === "object"; - const hrtimePresent = + const isPresent = {}; + let timeoutResult, + addTimerReturnsObject = false; + + if (_global.setTimeout) { + isPresent.setTimeout = true; + timeoutResult = _global.setTimeout(NOOP, 0); + addTimerReturnsObject = typeof timeoutResult === "object"; + } + isPresent.clearTimeout = Boolean(_global.clearTimeout); + isPresent.setInterval = Boolean(_global.setInterval); + isPresent.clearInterval = Boolean(_global.clearInterval); + isPresent.hrtime = _global.process && typeof _global.process.hrtime === "function"; - const hrtimeBigintPresent = - hrtimePresent && typeof _global.process.hrtime.bigint === "function"; - const nextTickPresent = + isPresent.hrtimeBigint = + isPresent.hrtime && typeof _global.process.hrtime.bigint === "function"; + isPresent.nextTick = _global.process && typeof _global.process.nextTick === "function"; const utilPromisify = _global.process && require("util").promisify; - const performancePresent = + isPresent.performance = _global.performance && typeof _global.performance.now === "function"; const hasPerformancePrototype = _global.Performance && @@ -5596,29 +5614,60 @@ function withGlobal(_global) { _global.performance && _global.performance.constructor && _global.performance.constructor.prototype; - const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); - const requestAnimationFramePresent = + isPresent.queueMicrotask = _global.hasOwnProperty("queueMicrotask"); + isPresent.requestAnimationFrame = _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"; - const cancelAnimationFramePresent = + isPresent.cancelAnimationFrame = _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"; - const requestIdleCallbackPresent = + isPresent.requestIdleCallback = _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"; - const cancelIdleCallbackPresent = + isPresent.cancelIdleCallbackPresent = _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"; - const setImmediatePresent = + isPresent.setImmediate = _global.setImmediate && typeof _global.setImmediate === "function"; - const intlPresent = _global.Intl && typeof _global.Intl === "object"; + isPresent.clearImmediate = + _global.clearImmediate && typeof _global.clearImmediate === "function"; + isPresent.Intl = _global.Intl && typeof _global.Intl === "object"; - _global.clearTimeout(timeoutResult); + if (_global.clearTimeout) { + _global.clearTimeout(timeoutResult); + } const NativeDate = _global.Date; const NativeIntl = _global.Intl; let uniqueTimerId = idCounterStart; + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", + ); + } + isPresent.Date = true; + + /** + * The PerformanceEntry object encapsulates a single performance metric + * that is part of the browser's performance timeline. + * + * This is an object returned by the `mark` and `measure` methods on the Performance prototype + */ + class FakePerformanceEntry { + constructor(name, entryType, startTime, duration) { + this.name = name; + this.entryType = entryType; + this.startTime = startTime; + this.duration = duration; + } + + toJSON() { + return JSON.stringify({ ...this }); + } + } + /** * @param {number} num * @returns {boolean} @@ -5803,109 +5852,76 @@ function withGlobal(_global) { return infiniteLoopError; } - /** - * @param {Date} target - * @param {Date} source - * @returns {Date} the target after modifications - */ - function mirrorDateProperties(target, source) { - let prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + class ClockDate extends NativeDate { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * @returns void + */ + // eslint-disable-next-line no-unused-vars + constructor(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + if (arguments.length === 0) { + super(ClockDate.clock.now); + } else { + super(...arguments); + } + } + + static [Symbol.hasInstance](instance) { + return instance instanceof NativeDate; } } - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; + ClockDate.isFake = true; + + if (NativeDate.now) { + ClockDate.now = function now() { + return ClockDate.clock.now; }; - } else { - delete target.now; } - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); + if (NativeDate.toSource) { + ClockDate.toSource = function toSource() { + return NativeDate.toSource(); }; - } else { - delete target.toSource; } - // set special toString implementation - target.toString = function toString() { - return source.toString(); + ClockDate.toString = function toString() { + return NativeDate.toString(); }; - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - target.isFake = true; - - return target; - } - - //eslint-disable-next-line jsdoc/require-jsdoc - function createDate() { + // noinspection UnnecessaryLocalVariableJS /** - * @param {number} year - * @param {number} month - * @param {number} date - * @param {number} hour - * @param {number} minute - * @param {number} second - * @param {number} ms - * @returns {Date} + * A normal Class constructor cannot be called without `new`, but Date can, so we need + * to wrap it in a Proxy in order to ensure this functionality of Date is kept intact + * + * @type {ClockDate} */ - function ClockDate(year, month, date, hour, minute, second, ms) { - // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. - // This remains so in the 10th edition of 2019 as well. - if (!(this instanceof ClockDate)) { - return new NativeDate(ClockDate.clock.now).toString(); - } - - // if Date is called as a constructor with 'new' keyword - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ); - default: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ms, + const ClockDateProxy = new Proxy(ClockDate, { + // handler for [[Call]] invocations (i.e. not using `new`) + apply() { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (this instanceof ClockDate) { + throw new TypeError( + "A Proxy should only capture `new` calls with the `construct` handler. This is not supposed to be possible, so check the logic.", ); - } - } + } + + return new NativeDate(ClockDate.clock.now).toString(); + }, + }); - return mirrorDateProperties(ClockDate, NativeDate); + return ClockDateProxy; } /** @@ -6358,6 +6374,16 @@ function withGlobal(_global) { timersModule[entry.methodName] = entry.original; } } + if (clock.timersPromisesModuleMethods !== undefined) { + for ( + let j = 0; + j < clock.timersPromisesModuleMethods.length; + j++ + ) { + const entry = clock.timersPromisesModuleMethods[j]; + timersPromisesModule[entry.methodName] = entry.original; + } + } } if (config.shouldAdvanceTime === true) { @@ -6367,6 +6393,11 @@ function withGlobal(_global) { // Prevent multiple executions which will completely remove these props clock.methods = []; + for (const [listener, signal] of clock.abortListenerMap.entries()) { + signal.removeEventListener("abort", listener); + clock.abortListenerMap.delete(listener); + } + // return pending timers, to enable checking what timers remained on uninstall if (!clock.timers) { return []; @@ -6389,8 +6420,7 @@ function withGlobal(_global) { clock[`_${method}`] = target[method]; if (method === "Date") { - const date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; + target[method] = clock[method]; } else if (method === "Intl") { target[method] = clock[method]; } else if (method === "performance") { @@ -6469,44 +6499,47 @@ function withGlobal(_global) { Date: _global.Date, }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { timers.setImmediate = _global.setImmediate; + } + + if (isPresent.clearImmediate) { timers.clearImmediate = _global.clearImmediate; } - if (hrtimePresent) { + if (isPresent.hrtime) { timers.hrtime = _global.process.hrtime; } - if (nextTickPresent) { + if (isPresent.nextTick) { timers.nextTick = _global.process.nextTick; } - if (performancePresent) { + if (isPresent.performance) { timers.performance = _global.performance; } - if (requestAnimationFramePresent) { + if (isPresent.requestAnimationFrame) { timers.requestAnimationFrame = _global.requestAnimationFrame; } - if (queueMicrotaskPresent) { - timers.queueMicrotask = true; + if (isPresent.queueMicrotask) { + timers.queueMicrotask = _global.queueMicrotask; } - if (cancelAnimationFramePresent) { + if (isPresent.cancelAnimationFrame) { timers.cancelAnimationFrame = _global.cancelAnimationFrame; } - if (requestIdleCallbackPresent) { + if (isPresent.requestIdleCallback) { timers.requestIdleCallback = _global.requestIdleCallback; } - if (cancelIdleCallbackPresent) { + if (isPresent.cancelIdleCallback) { timers.cancelIdleCallback = _global.cancelIdleCallback; } - if (intlPresent) { + if (isPresent.Intl) { timers.Intl = _global.Intl; } @@ -6525,13 +6558,6 @@ function withGlobal(_global) { let nanos = 0; const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] - if (NativeDate === undefined) { - throw new Error( - "The global scope doesn't have a `Date` object" + - " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", - ); - } - const clock = { now: start, Date: createDate(), @@ -6592,14 +6618,14 @@ function withGlobal(_global) { return millis; } - if (hrtimeBigintPresent) { + if (isPresent.hrtimeBigint) { hrtime.bigint = function () { const parts = hrtime(); return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line }; } - if (intlPresent) { + if (isPresent.Intl) { clock.Intl = createIntl(); clock.Intl.clock = clock; } @@ -6684,7 +6710,7 @@ function withGlobal(_global) { return clearTimer(clock, timerId, "Interval"); }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { clock.setImmediate = function setImmediate(func) { return addTimer(clock, { func: func, @@ -7123,12 +7149,12 @@ function withGlobal(_global) { clock.tick(ms); }; - if (performancePresent) { + if (isPresent.performance) { clock.performance = Object.create(null); clock.performance.now = fakePerformanceNow; } - if (hrtimePresent) { + if (isPresent.hrtime) { clock.hrtime = hrtime; } @@ -7176,6 +7202,20 @@ function withGlobal(_global) { ); } + /** + * @param {string} timer/object the name of the thing that is not present + * @param timer + */ + function handleMissingTimer(timer) { + if (config.ignoreMissingTimers) { + return; + } + + throw new ReferenceError( + `non-existent timers and/or objects cannot be faked: '${timer}'`, + ); + } + let i, l; const clock = createClock(config.now, config.loopLimit); clock.shouldClearNativeTimers = config.shouldClearNativeTimers; @@ -7184,13 +7224,12 @@ function withGlobal(_global) { return uninstall(clock, config); }; + clock.abortListenerMap = new Map(); + clock.methods = config.toFake || []; if (clock.methods.length === 0) { - // do not fake nextTick by default - GitHub#126 - clock.methods = Object.keys(timers).filter(function (key) { - return key !== "nextTick" && key !== "queueMicrotask"; - }); + clock.methods = Object.keys(timers); } if (config.shouldAdvanceTime === true) { @@ -7224,18 +7263,30 @@ function withGlobal(_global) { : NOOP; } }); + // ensure `mark` returns a value that is valid + clock.performance.mark = (name) => + new FakePerformanceEntry(name, "mark", 0, 0); + clock.performance.measure = (name) => + new FakePerformanceEntry(name, "measure", 0, 100); } else if ((config.toFake || []).includes("performance")) { - // user explicitly tried to fake performance when not present - throw new ReferenceError( - "non-existent performance object cannot be faked", - ); + return handleMissingTimer("performance"); } } if (_global === globalObject && timersModule) { clock.timersModuleMethods = []; } + if (_global === globalObject && timersPromisesModule) { + clock.timersPromisesModuleMethods = []; + } for (i = 0, l = clock.methods.length; i < l; i++) { const nameOfMethodToReplace = clock.methods[i]; + + if (!isPresent[nameOfMethodToReplace]) { + handleMissingTimer(nameOfMethodToReplace); + // eslint-disable-next-line + continue; + } + if (nameOfMethodToReplace === "hrtime") { if ( _global.process && @@ -7265,6 +7316,239 @@ function withGlobal(_global) { timersModule[nameOfMethodToReplace] = _global[nameOfMethodToReplace]; } + if (clock.timersPromisesModuleMethods !== undefined) { + if (nameOfMethodToReplace === "setTimeout") { + clock.timersPromisesModuleMethods.push({ + methodName: "setTimeout", + original: timersPromisesModule.setTimeout, + }); + + timersPromisesModule.setTimeout = ( + delay, + value, + options = {}, + ) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearTimeout(handle); + reject(options.signal.reason); + }; + + const handle = clock.setTimeout(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }, delay); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setImmediate") { + clock.timersPromisesModuleMethods.push({ + methodName: "setImmediate", + original: timersPromisesModule.setImmediate, + }); + + timersPromisesModule.setImmediate = (value, options = {}) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearImmediate(handle); + reject(options.signal.reason); + }; + + const handle = clock.setImmediate(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setInterval") { + clock.timersPromisesModuleMethods.push({ + methodName: "setInterval", + original: timersPromisesModule.setInterval, + }); + + timersPromisesModule.setInterval = ( + delay, + value, + options = {}, + ) => ({ + [Symbol.asyncIterator]: () => { + const createResolvable = () => { + let resolve, reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + promise.resolve = resolve; + promise.reject = reject; + return promise; + }; + + let done = false; + let hasThrown = false; + let returnCall; + let nextAvailable = 0; + const nextQueue = []; + + const handle = clock.setInterval(() => { + if (nextQueue.length > 0) { + nextQueue.shift().resolve(); + } else { + nextAvailable++; + } + }, delay); + + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + clock.clearInterval(handle); + done = true; + for (const resolvable of nextQueue) { + resolvable.resolve(); + } + }; + + if (options.signal) { + if (options.signal.aborted) { + done = true; + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + + return { + next: async () => { + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + if (nextAvailable > 0) { + nextAvailable--; + return { done: false, value: value }; + } + + const resolvable = createResolvable(); + nextQueue.push(resolvable); + + await resolvable; + + if (returnCall && nextQueue.length === 0) { + returnCall.resolve(); + } + + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + return { done: false, value: value }; + }, + return: async () => { + if (done) { + return { done: true, value: undefined }; + } + + if (nextQueue.length > 0) { + returnCall = createResolvable(); + await returnCall; + } + + clock.clearInterval(handle); + done = true; + + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + return { done: true, value: undefined }; + }, + }; + }, + }); + } + } } return clock; @@ -7298,7 +7582,7 @@ exports.createClock = defaultImplementation.createClock; exports.install = defaultImplementation.install; exports.withGlobal = withGlobal; -},{"@sinonjs/commons":47,"timers":161,"util":116}],61:[function(require,module,exports){ +},{"@sinonjs/commons":47,"timers":undefined,"timers/promises":undefined,"util":98}],61:[function(require,module,exports){ "use strict"; var ARRAY_TYPES = [ @@ -7363,7 +7647,7 @@ function createMatcher(expectation, message) { if (arguments.length > 2) { throw new TypeError( - `Expected 1 or 2 arguments, received ${arguments.length}` + `Expected 1 or 2 arguments, received ${arguments.length}`, ); } @@ -7408,9 +7692,12 @@ createMatcher.falsy = createMatcher(function (actual) { }, "falsy"); createMatcher.same = function (expectation) { - return createMatcher(function (actual) { - return expectation === actual; - }, `same(${valueToString(expectation)})`); + return createMatcher( + function (actual) { + return expectation === actual; + }, + `same(${valueToString(expectation)})`, + ); }; createMatcher.in = function (arrayOfExpectations) { @@ -7418,11 +7705,14 @@ createMatcher.in = function (arrayOfExpectations) { throw new TypeError("array expected"); } - return createMatcher(function (actual) { - return some(arrayOfExpectations, function (expectation) { - return expectation === actual; - }); - }, `in(${valueToString(arrayOfExpectations)})`); + return createMatcher( + function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, + `in(${valueToString(arrayOfExpectations)})`, + ); }; createMatcher.typeOf = function (type) { @@ -7444,12 +7734,15 @@ createMatcher.instanceOf = function (type) { type, Symbol.hasInstance, "type", - "[Symbol.hasInstance]" + "[Symbol.hasInstance]", ); } - return createMatcher(function (actual) { - return actual instanceof type; - }, `instanceOf(${functionName(type) || objectToString(type)})`); + return createMatcher( + function (actual) { + return actual instanceof type; + }, + `instanceOf(${functionName(type) || objectToString(type)})`, + ); }; /** @@ -7578,111 +7871,137 @@ createMatcher.some = function (predicate) { createMatcher.array = createMatcher.typeOf("array"); createMatcher.array.deepEquals = function (expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.length === expectation.length; - return ( - typeOf(actual) === "array" && - sameLength && - every(actual, function (element, index) { - var expected = expectation[index]; - return typeOf(expected) === "array" && - typeOf(element) === "array" - ? createMatcher.array.deepEquals(expected).test(element) - : deepEqual(expected, element); - }) - ); - }, `deepEquals([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, + `deepEquals([${iterableToString(expectation)}])`, + ); }; createMatcher.array.startsWith = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[index] === expectedElement; - }) - ); - }, `startsWith([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, + `startsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.endsWith = function (expectation) { - return createMatcher(function (actual) { - // This indicates the index in which we should start matching - var offset = actual.length - expectation.length; + return createMatcher( + function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[offset + index] === expectedElement; - }) - ); - }, `endsWith([${iterableToString(expectation)}])`); + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, + `endsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.contains = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement) { - return arrayIndexOf(actual, expectedElement) !== -1; - }) - ); - }, `contains([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, + `contains([${iterableToString(expectation)}])`, + ); }; createMatcher.map = createMatcher.typeOf("map"); createMatcher.map.deepEquals = function mapDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "map" && - sameLength && - every(actual, function (element, key) { - return expectation.has(key) && expectation.get(key) === element; - }) - ); - }, `deepEquals(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return ( + expectation.has(key) && expectation.get(key) === element + ); + }) + ); + }, + `deepEquals(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.map.contains = function mapContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "map" && - every(expectation, function (element, key) { - return actual.has(key) && actual.get(key) === element; - }) - ); - }, `contains(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, + `contains(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.set = createMatcher.typeOf("set"); createMatcher.set.deepEquals = function setDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "set" && - sameLength && - every(actual, function (element) { - return expectation.has(element); - }) - ); - }, `deepEquals(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, + `deepEquals(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.set.contains = function setContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "set" && - every(expectation, function (element) { - return actual.has(element); - }) - ); - }, `contains(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, + `contains(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.bool = createMatcher.typeOf("boolean"); @@ -7696,7 +8015,7 @@ createMatcher.symbol = createMatcher.typeOf("symbol"); module.exports = createMatcher; -},{"./create-matcher/assert-matcher":63,"./create-matcher/assert-method-exists":64,"./create-matcher/assert-type":65,"./create-matcher/is-iterable":66,"./create-matcher/is-matcher":67,"./create-matcher/matcher-prototype":69,"./create-matcher/type-map":70,"./deep-equal":71,"./iterable-to-string":85,"@sinonjs/commons":94,"lodash.get":139}],63:[function(require,module,exports){ +},{"./create-matcher/assert-matcher":63,"./create-matcher/assert-method-exists":64,"./create-matcher/assert-type":65,"./create-matcher/is-iterable":66,"./create-matcher/is-matcher":67,"./create-matcher/matcher-prototype":69,"./create-matcher/type-map":70,"./deep-equal":71,"./iterable-to-string":85,"@sinonjs/commons":47,"lodash.get":121}],63:[function(require,module,exports){ "use strict"; var isMatcher = require("./is-matcher"); @@ -7755,14 +8074,14 @@ function assertType(value, type, name) { var actual = typeOf(value); if (actual !== type) { throw new TypeError( - `Expected type of ${name} to be ${type}, but was ${actual}` + `Expected type of ${name} to be ${type}, but was ${actual}`, ); } } module.exports = assertType; -},{"@sinonjs/commons":94}],66:[function(require,module,exports){ +},{"@sinonjs/commons":47}],66:[function(require,module,exports){ "use strict"; var typeOf = require("@sinonjs/commons").typeOf; @@ -7780,7 +8099,7 @@ function isIterable(value) { module.exports = isIterable; -},{"@sinonjs/commons":94}],67:[function(require,module,exports){ +},{"@sinonjs/commons":47}],67:[function(require,module,exports){ "use strict"; var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; @@ -7800,7 +8119,7 @@ function isMatcher(object) { module.exports = isMatcher; -},{"./matcher-prototype":69,"@sinonjs/commons":94}],68:[function(require,module,exports){ +},{"./matcher-prototype":69,"@sinonjs/commons":47}],68:[function(require,module,exports){ "use strict"; var every = require("@sinonjs/commons").prototypes.array.every; @@ -7809,6 +8128,7 @@ var typeOf = require("@sinonjs/commons").typeOf; var deepEqualFactory = require("../deep-equal").use; +var identical = require("../identical"); var isMatcher = require("./is-matcher"); var keys = Object.keys; @@ -7844,6 +8164,9 @@ function matchObject(actual, expectation, matcher) { return false; } } else if (typeOf(exp) === "object") { + if (identical(exp, act)) { + return true; + } if (!matchObject(act, exp, matcher)) { return false; } @@ -7857,7 +8180,7 @@ function matchObject(actual, expectation, matcher) { module.exports = matchObject; -},{"../deep-equal":71,"./is-matcher":67,"@sinonjs/commons":94}],69:[function(require,module,exports){ +},{"../deep-equal":71,"../identical":73,"./is-matcher":67,"@sinonjs/commons":47}],69:[function(require,module,exports){ "use strict"; var matcherPrototype = { @@ -7972,7 +8295,7 @@ var createTypeMap = function (match) { module.exports = createTypeMap; -},{"./match-object":68,"@sinonjs/commons":94}],71:[function(require,module,exports){ +},{"./match-object":68,"@sinonjs/commons":47}],71:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8042,7 +8365,7 @@ function deepEqualCyclic(actual, expectation, match) { actualObj, expectationObj, actualPath, - expectationPath + expectationPath, ) { // If both are matchers they must be the same instance in order to be // considered equal If we didn't do that we would end up running one @@ -8115,7 +8438,7 @@ function deepEqualCyclic(actual, expectation, match) { []; var expectationKeysAndSymbols = concat( expectationKeys, - expectationSymbols + expectationSymbols, ); if (isArguments(actualObj) || isArguments(expectationObj)) { @@ -8264,7 +8587,7 @@ function deepEqualCyclic(actual, expectation, match) { actualValue, expectationValue, newActualPath, - newExpectationPath + newExpectationPath, ); }); })(actual, expectation, "$1", "$2"); @@ -8278,7 +8601,7 @@ deepEqualCyclic.use = function (match) { module.exports = deepEqualCyclic; -},{"./get-class":72,"./identical":73,"./is-arguments":74,"./is-array-type":75,"./is-date":76,"./is-element":77,"./is-iterable":78,"./is-map":79,"./is-nan":80,"./is-object":82,"./is-set":83,"./is-subset":84,"@sinonjs/commons":94}],72:[function(require,module,exports){ +},{"./get-class":72,"./identical":73,"./is-arguments":74,"./is-array-type":75,"./is-date":76,"./is-element":77,"./is-iterable":78,"./is-map":79,"./is-nan":80,"./is-object":82,"./is-set":83,"./is-subset":84,"@sinonjs/commons":47}],72:[function(require,module,exports){ "use strict"; var toString = require("@sinonjs/commons").prototypes.object.toString; @@ -8298,7 +8621,7 @@ function getClass(value) { module.exports = getClass; -},{"@sinonjs/commons":94}],73:[function(require,module,exports){ +},{"@sinonjs/commons":47}],73:[function(require,module,exports){ "use strict"; var isNaN = require("./is-nan"); @@ -8371,7 +8694,7 @@ function isArrayType(object) { module.exports = isArrayType; -},{"./array-types":61,"@sinonjs/commons":94,"type-detect":162}],76:[function(require,module,exports){ +},{"./array-types":61,"@sinonjs/commons":47,"type-detect":88}],76:[function(require,module,exports){ "use strict"; /** @@ -8572,7 +8895,7 @@ function isSubset(s1, s2, compare) { module.exports = isSubset; -},{"@sinonjs/commons":94}],85:[function(require,module,exports){ +},{"@sinonjs/commons":47}],85:[function(require,module,exports){ "use strict"; var slice = require("@sinonjs/commons").prototypes.string.slice; @@ -8645,7 +8968,7 @@ function stringify(item) { module.exports = iterableToString; -},{"@sinonjs/commons":94}],86:[function(require,module,exports){ +},{"@sinonjs/commons":47}],86:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8718,7 +9041,7 @@ function match(object, matcherOrValue) { notNull && indexOf( valueToString(object).toLowerCase(), - matcherOrValue.toLowerCase() + matcherOrValue.toLowerCase(), ) >= 0 ); case "null": @@ -8750,7 +9073,7 @@ function match(object, matcherOrValue) { /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ if (!engineCanCompareMaps) { throw new Error( - "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances", ); } @@ -8759,7 +9082,7 @@ function match(object, matcherOrValue) { arrayContains( Array.from(object), Array.from(matcherOrValue), - match + match, ) ); default: @@ -8821,7 +9144,7 @@ forEach(Object.keys(createMatcher), function (key) { module.exports = match; -},{"./create-matcher":62,"./deep-equal":71,"./is-array-type":75,"./is-subset":84,"@sinonjs/commons":94,"type-detect":162}],87:[function(require,module,exports){ +},{"./create-matcher":62,"./deep-equal":71,"./is-array-type":75,"./is-subset":84,"@sinonjs/commons":47,"type-detect":88}],87:[function(require,module,exports){ "use strict"; /** @@ -8850,351 +9173,149 @@ module.exports = { }; },{"./create-matcher":62,"./deep-equal":71,"./identical":73,"./is-arguments":74,"./is-element":77,"./is-map":79,"./is-neg-zero":81,"./is-set":83,"./match":86}],88:[function(require,module,exports){ -"use strict"; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.typeDetect = factory()); +})(this, (function () { 'use strict'; + + var promiseExists = typeof Promise === 'function'; + var globalObject = (function (Obj) { + if (typeof globalThis === 'object') { + return globalThis; + } + Object.defineProperty(Obj, 'typeDetectGlobalObject', { + get: function get() { + return this; + }, + configurable: true, + }); + var global = typeDetectGlobalObject; + delete Obj.typeDetectGlobalObject; + return global; + })(Object.prototype); + var symbolExists = typeof Symbol !== 'undefined'; + var mapExists = typeof Map !== 'undefined'; + var setExists = typeof Set !== 'undefined'; + var weakMapExists = typeof WeakMap !== 'undefined'; + var weakSetExists = typeof WeakSet !== 'undefined'; + var dataViewExists = typeof DataView !== 'undefined'; + var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; + var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; + var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; + var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; + var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); + var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); + var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; + var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); + var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; + var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); + var toStringLeftSliceLength = 8; + var toStringRightSliceLength = -1; + function typeDetect(obj) { + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + if (obj === null) { + return 'null'; + } + if (obj === globalObject) { + return 'global'; + } + if (Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))) { + return 'Array'; + } + if (typeof window === 'object' && window !== null) { + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + if (typeof window.navigator === 'object') { + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + var objPrototype = Object.getPrototypeOf(obj); + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + if (objPrototype === Date.prototype) { + return 'Date'; + } + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + if (objPrototype === null) { + return 'Object'; + } + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); + } -var every = require("./prototypes/array").every; + return typeDetect; -/** - * @private - */ -function hasCallsLeft(callMap, spy) { - if (callMap[spy.id] === undefined) { - callMap[spy.id] = 0; - } +})); - return callMap[spy.id] < spy.callCount; -} - -/** - * @private - */ -function checkAdjacentCalls(callMap, spy, index, spies) { - var calledBeforeNext = true; - - if (index !== spies.length - 1) { - calledBeforeNext = spy.calledBefore(spies[index + 1]); - } - - if (hasCallsLeft(callMap, spy) && calledBeforeNext) { - callMap[spy.id] += 1; - return true; - } - - return false; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} calledBefore - A method that determines if this proxy was called before another one - * @property {string} id - Some id - * @property {number} callCount - Number of times this proxy has been called - */ - -/** - * Returns true when the spies have been called in the order they were supplied in - * - * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments - * @returns {boolean} true when spies are called in order, false otherwise - */ -function calledInOrder(spies) { - var callMap = {}; - // eslint-disable-next-line no-underscore-dangle - var _spies = arguments.length > 1 ? arguments : spies; - - return every(_spies, checkAdjacentCalls.bind(null, callMap)); -} - -module.exports = calledInOrder; - -},{"./prototypes/array":96}],89:[function(require,module,exports){ -"use strict"; - -var functionName = require("./function-name"); - -/** - * Returns a display name for a value from a constructor - * - * @param {object} value A value to examine - * @returns {(string|null)} A string or null - */ -function className(value) { - return ( - (value.constructor && value.constructor.name) || - // The next branch is for IE11 support only: - // Because the name property is not set on the prototype - // of the Function object, we finally try to grab the - // name from its definition. This will never be reached - // in node, so we are not able to test this properly. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name - (typeof value.constructor === "function" && - /* istanbul ignore next */ - functionName(value.constructor)) || - null - ); -} - -module.exports = className; - -},{"./function-name":92}],90:[function(require,module,exports){ -/* eslint-disable no-console */ -"use strict"; - -/** - * Returns a function that will invoke the supplied function and print a - * deprecation warning to the console each time it is called. - * - * @param {Function} func - * @param {string} msg - * @returns {Function} - */ -exports.wrap = function (func, msg) { - var wrapped = function () { - exports.printWarning(msg); - return func.apply(this, arguments); - }; - if (func.prototype) { - wrapped.prototype = func.prototype; - } - return wrapped; -}; - -/** - * Returns a string which can be supplied to `wrap()` to notify the user that a - * particular part of the sinon API has been deprecated. - * - * @param {string} packageName - * @param {string} funcName - * @returns {string} - */ -exports.defaultMsg = function (packageName, funcName) { - return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; -}; - -/** - * Prints a warning on the console, when it exists - * - * @param {string} msg - * @returns {undefined} - */ -exports.printWarning = function (msg) { - /* istanbul ignore next */ - if (typeof process === "object" && process.emitWarning) { - // Emit Warnings in Node - process.emitWarning(msg); - } else if (console.info) { - console.info(msg); - } else { - console.log(msg); - } -}; - -},{}],91:[function(require,module,exports){ -"use strict"; - -/** - * Returns true when fn returns true for all members of obj. - * This is an every implementation that works for all iterables - * - * @param {object} obj - * @param {Function} fn - * @returns {boolean} - */ -module.exports = function every(obj, fn) { - var pass = true; - - try { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - obj.forEach(function () { - if (!fn.apply(this, arguments)) { - // Throwing an error is the only way to break `forEach` - throw new Error(); - } - }); - } catch (e) { - pass = false; - } - - return pass; -}; - -},{}],92:[function(require,module,exports){ -"use strict"; - -/** - * Returns a display name for a function - * - * @param {Function} func - * @returns {string} - */ -module.exports = function functionName(func) { - if (!func) { - return ""; - } - - try { - return ( - func.displayName || - func.name || - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - (String(func).match(/function ([^\s(]+)/) || [])[1] - ); - } catch (e) { - // Stringify may fail and we might get an exception, as a last-last - // resort fall back to empty string. - return ""; - } -}; - -},{}],93:[function(require,module,exports){ -"use strict"; - -/** - * A reference to the global object - * - * @type {object} globalObject - */ -var globalObject; - -/* istanbul ignore else */ -if (typeof global !== "undefined") { - // Node - globalObject = global; -} else if (typeof window !== "undefined") { - // Browser - globalObject = window; -} else { - // WebWorker - globalObject = self; -} - -module.exports = globalObject; - -},{}],94:[function(require,module,exports){ -arguments[4][47][0].apply(exports,arguments) -},{"./called-in-order":88,"./class-name":89,"./deprecated":90,"./every":91,"./function-name":92,"./global":93,"./order-by-first-call":95,"./prototypes":99,"./type-of":105,"./value-to-string":106,"dup":47}],95:[function(require,module,exports){ -"use strict"; - -var sort = require("./prototypes/array").sort; -var slice = require("./prototypes/array").slice; - -/** - * @private - */ -function comparator(a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = (aCall && aCall.callId) || -1; - var bId = (bCall && bCall.callId) || -1; - - return aId < bId ? -1 : 1; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} getCall - A method that can return the first call - */ - -/** - * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call - * - * @param {SinonProxy[] | SinonProxy} spies - * @returns {SinonProxy[]} - */ -function orderByFirstCall(spies) { - return sort(slice(spies), comparator); -} - -module.exports = orderByFirstCall; - -},{"./prototypes/array":96}],96:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":49}],97:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"./throws-on-proto":104,"dup":50}],98:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":51}],99:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./array":96,"./function":98,"./map":100,"./object":101,"./set":102,"./string":103,"dup":52}],100:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":53}],101:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":54}],102:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":55}],103:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":56}],104:[function(require,module,exports){ -"use strict"; - -/** - * Is true when the environment causes an error to be thrown for accessing the - * __proto__ property. - * - * This is necessary in order to support `node --disable-proto=throw`. - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto - * - * @type {boolean} - */ -let throwsOnProto; -try { - const object = {}; - // eslint-disable-next-line no-proto, no-unused-expressions - object.__proto__; - throwsOnProto = false; -} catch (_) { - // This branch is covered when tests are run with `--disable-proto=throw`, - // however we can test both branches at the same time, so this is ignored - /* istanbul ignore next */ - throwsOnProto = true; -} - -module.exports = throwsOnProto; - -},{}],105:[function(require,module,exports){ -"use strict"; - -var type = require("type-detect"); - -/** - * Returns the lower-case result of running type from type-detect on the value - * - * @param {*} value - * @returns {string} - */ -module.exports = function typeOf(value) { - return type(value).toLowerCase(); -}; - -},{"type-detect":162}],106:[function(require,module,exports){ -"use strict"; - -/** - * Returns a string representation of the value - * - * @param {*} value - * @returns {string} - */ -function valueToString(value) { - if (value && value.toString) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - return value.toString(); - } - return String(value); -} - -module.exports = valueToString; - -},{}],107:[function(require,module,exports){ -// This is free and unencumbered software released into the public domain. -// See LICENSE.md for more information. +},{}],89:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. var encoding = require("./lib/encoding.js"); @@ -9203,7 +9324,7 @@ module.exports = { TextDecoder: encoding.TextDecoder, }; -},{"./lib/encoding.js":109}],108:[function(require,module,exports){ +},{"./lib/encoding.js":91}],90:[function(require,module,exports){ (function(global) { 'use strict'; @@ -9251,7 +9372,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{}],109:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ // This is free and unencumbered software released into the public domain. // See LICENSE.md for more information. @@ -12565,7 +12686,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{"./encoding-indexes.js":108}],110:[function(require,module,exports){ +},{"./encoding-indexes.js":90}],92:[function(require,module,exports){ 'use strict'; var objectAssign = require('object.assign/polyfill')(); @@ -13073,7 +13194,7 @@ var objectKeys = Object.keys || function (obj) { return keys; }; -},{"object.assign/polyfill":156,"util/":113}],111:[function(require,module,exports){ +},{"object.assign/polyfill":138,"util/":95}],93:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -13098,14 +13219,14 @@ if (typeof Object.create === 'function') { } } -},{}],112:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } -},{}],113:[function(require,module,exports){ +},{}],95:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -13693,13 +13814,13 @@ function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -},{"./support/isBuffer":112,"inherits":111}],114:[function(require,module,exports){ -arguments[4][111][0].apply(exports,arguments) -},{"dup":111}],115:[function(require,module,exports){ -arguments[4][112][0].apply(exports,arguments) -},{"dup":112}],116:[function(require,module,exports){ -arguments[4][113][0].apply(exports,arguments) -},{"./support/isBuffer":115,"dup":113,"inherits":114}],117:[function(require,module,exports){ +},{"./support/isBuffer":94,"inherits":93}],96:[function(require,module,exports){ +arguments[4][93][0].apply(exports,arguments) +},{"dup":93}],97:[function(require,module,exports){ +arguments[4][94][0].apply(exports,arguments) +},{"dup":94}],98:[function(require,module,exports){ +arguments[4][95][0].apply(exports,arguments) +},{"./support/isBuffer":97,"dup":95,"inherits":96}],99:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -13716,7 +13837,7 @@ module.exports = function callBoundIntrinsic(name, allowMissing) { return intrinsic; }; -},{"./":118,"get-intrinsic":131}],118:[function(require,module,exports){ +},{"./":100,"get-intrinsic":113}],100:[function(require,module,exports){ 'use strict'; var bind = require('function-bind'); @@ -13753,7 +13874,7 @@ if ($defineProperty) { module.exports.apply = applyBind; } -},{"es-define-property":121,"es-errors/type":127,"function-bind":130,"get-intrinsic":131,"set-function-length":159}],119:[function(require,module,exports){ +},{"es-define-property":103,"es-errors/type":109,"function-bind":112,"get-intrinsic":113,"set-function-length":140}],101:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -13811,70 +13932,99 @@ module.exports = function defineDataProperty( } }; -},{"es-define-property":121,"es-errors/syntax":126,"es-errors/type":127,"gopd":132}],120:[function(require,module,exports){ +},{"es-define-property":103,"es-errors/syntax":108,"es-errors/type":109,"gopd":114}],102:[function(require,module,exports){ +/*! + + diff v7.0.0 + +BSD 3-Clause License + +Copyright (c) 2009-2015, Kevin Decker +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@license +*/ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.Diff = {})); -}(this, (function (exports) { 'use strict'; + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Diff = {})); +})(this, (function (exports) { 'use strict'; function Diff() {} Diff.prototype = { diff: function diff(oldString, newString) { var _options$timeout; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var callback = options.callback; - if (typeof options === 'function') { callback = options; options = {}; } - - this.options = options; var self = this; - function done(value) { + value = self.postProcess(value, options); if (callback) { setTimeout(function () { - callback(undefined, value); + callback(value); }, 0); return true; } else { return value; } - } // Allow subclasses to massage the input prior to running - + } - oldString = this.castInput(oldString); - newString = this.castInput(newString); - oldString = this.removeEmpty(this.tokenize(oldString)); - newString = this.removeEmpty(this.tokenize(newString)); + // Allow subclasses to massage the input prior to running + oldString = this.castInput(oldString, options); + newString = this.castInput(newString, options); + oldString = this.removeEmpty(this.tokenize(oldString, options)); + newString = this.removeEmpty(this.tokenize(newString, options)); var newLen = newString.length, - oldLen = oldString.length; + oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; - - if (options.maxEditLength) { + if (options.maxEditLength != null) { maxEditLength = Math.min(maxEditLength, options.maxEditLength); } - var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; var abortAfterTimestamp = Date.now() + maxExecutionTime; var bestPath = [{ oldPos: -1, lastComponent: undefined - }]; // Seed editLength = 0, i.e. the content starts with the same values - - var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); + }]; + // Seed editLength = 0, i.e. the content starts with the same values + var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options); if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // Identity per the equality and tokenizer - return done([{ - value: this.join(newString), - count: newString.length - }]); - } // Once we hit the right edge of the edit graph on some diagonal k, we can + return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken)); + } + + // Once we hit the right edge of the edit graph on some diagonal k, we can // definitely reach the end of the edit graph in no more than k edits, so // there's no point in considering any moves to diagonal k+1 any more (from // which we're guaranteed to need at least k+1 more edits). @@ -13891,81 +14041,67 @@ module.exports = function defineDataProperty( // where the new text simply appends d characters on the end of the // original text of length n, the true Myers algorithm will take O(n+d^2) // time while this optimization needs only O(n+d) time. - - var minDiagonalToConsider = -Infinity, - maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance. + maxDiagonalToConsider = Infinity; + // Main worker method. checks all permutations of a given edit length for acceptance. function execEditLength() { for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { var basePath = void 0; var removePath = bestPath[diagonalPath - 1], - addPath = bestPath[diagonalPath + 1]; - + addPath = bestPath[diagonalPath + 1]; if (removePath) { // No one else is going to attempt to use this value, clear it bestPath[diagonalPath - 1] = undefined; } - var canAdd = false; - if (addPath) { // what newPos will be after we do an insertion: var addPathNewPos = addPath.oldPos - diagonalPath; canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; } - var canRemove = removePath && removePath.oldPos + 1 < oldLen; - if (!canAdd && !canRemove) { // If this path is a terminal then prune bestPath[diagonalPath] = undefined; continue; - } // Select the diagonal that we want to branch from. We select the prior + } + + // Select the diagonal that we want to branch from. We select the prior // path whose position in the old string is the farthest from the origin // and does not pass the bounds of the diff graph - // TODO: Remove the `+ 1` here to make behavior match Myers algorithm - // and prefer to order removals before insertions. - - - if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { - basePath = self.addToPath(addPath, true, undefined, 0); + if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) { + basePath = self.addToPath(addPath, true, false, 0, options); } else { - basePath = self.addToPath(removePath, undefined, true, 1); + basePath = self.addToPath(removePath, false, true, 1, options); } - - newPos = self.extractCommon(basePath, newString, oldString, diagonalPath); - + newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options); if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // If we have hit the end of both strings, then we are done return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken)); } else { bestPath[diagonalPath] = basePath; - if (basePath.oldPos + 1 >= oldLen) { maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); } - if (newPos + 1 >= newLen) { minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); } } } - editLength++; - } // Performs the length of edit iteration. Is a bit fugly as this has to support the + } + + // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value // is produced, or until the edit length exceeds options.maxEditLength (if given), // in which case it will return undefined. - - if (callback) { (function exec() { setTimeout(function () { if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { return callback(); } - if (!execEditLength()) { exec(); } @@ -13974,17 +14110,15 @@ module.exports = function defineDataProperty( } else { while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { var ret = execEditLength(); - if (ret) { return ret; } } } }, - addToPath: function addToPath(path, added, removed, oldPosInc) { + addToPath: function addToPath(path, added, removed, oldPosInc, options) { var last = path.lastComponent; - - if (last && last.added === added && last.removed === removed) { + if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) { return { oldPos: path.oldPos + oldPosInc, lastComponent: { @@ -14006,80 +14140,83 @@ module.exports = function defineDataProperty( }; } }, - extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) { var newLen = newString.length, - oldLen = oldString.length, - oldPos = basePath.oldPos, - newPos = oldPos - diagonalPath, - commonCount = 0; - - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + oldLen = oldString.length, + oldPos = basePath.oldPos, + newPos = oldPos - diagonalPath, + commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) { newPos++; oldPos++; commonCount++; + if (options.oneChangePerToken) { + basePath.lastComponent = { + count: 1, + previousComponent: basePath.lastComponent, + added: false, + removed: false + }; + } } - - if (commonCount) { + if (commonCount && !options.oneChangePerToken) { basePath.lastComponent = { count: commonCount, - previousComponent: basePath.lastComponent + previousComponent: basePath.lastComponent, + added: false, + removed: false }; } - basePath.oldPos = oldPos; return newPos; }, - equals: function equals(left, right) { - if (this.options.comparator) { - return this.options.comparator(left, right); + equals: function equals(left, right, options) { + if (options.comparator) { + return options.comparator(left, right); } else { - return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase(); } }, removeEmpty: function removeEmpty(array) { var ret = []; - for (var i = 0; i < array.length; i++) { if (array[i]) { ret.push(array[i]); } } - return ret; }, castInput: function castInput(value) { return value; }, tokenize: function tokenize(value) { - return value.split(''); + return Array.from(value); }, join: function join(chars) { return chars.join(''); + }, + postProcess: function postProcess(changeObjects) { + return changeObjects; } }; - function buildValues(diff, lastComponent, newString, oldString, useLongestToken) { // First we convert our linked list of components in reverse order to an // array in the right order: var components = []; var nextComponent; - while (lastComponent) { components.push(lastComponent); nextComponent = lastComponent.previousComponent; delete lastComponent.previousComponent; lastComponent = nextComponent; } - components.reverse(); var componentPos = 0, - componentLen = components.length, - newPos = 0, - oldPos = 0; - + componentLen = components.length, + newPos = 0, + oldPos = 0; for (; componentPos < componentLen; componentPos++) { var component = components[componentPos]; - if (!component.removed) { if (!component.added && useLongestToken) { var value = newString.slice(newPos, newPos + component.count); @@ -14091,59 +14228,133 @@ module.exports = function defineDataProperty( } else { component.value = diff.join(newString.slice(newPos, newPos + component.count)); } + newPos += component.count; - newPos += component.count; // Common case - + // Common case if (!component.added) { oldPos += component.count; } } else { component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); - oldPos += component.count; // Reverse add and remove so removes are output first to match common convention - // The diffing algorithm is tied to add then remove output and this is the simplest - // route to get the desired output with minimal overhead. + oldPos += component.count; + } + } + return components; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function longestCommonPrefix(str1, str2) { + var i; + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[i] != str2[i]) { + return str1.slice(0, i); + } + } + return str1.slice(0, i); + } + function longestCommonSuffix(str1, str2) { + var i; - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } + // Unlike longestCommonPrefix, we need a special case to handle all scenarios + // where we return the empty string since str1.slice(-0) will return the + // entire string. + if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) { + return ''; + } + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) { + return str1.slice(-i); } - } // Special case handle for when one terminal is ignored (i.e. whitespace). - // For this case we merge the terminal into the prior string and drop the change. - // This is only available for string mode. - - - var finalComponent = components[componentLen - 1]; - - if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) { - components[componentLen - 2].value += finalComponent.value; - components.pop(); } - - return components; + return str1.slice(-i); } - - var characterDiff = new Diff(); - function diffChars(oldStr, newStr, options) { - return characterDiff.diff(oldStr, newStr, options); + function replacePrefix(string, oldPrefix, newPrefix) { + if (string.slice(0, oldPrefix.length) != oldPrefix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't start with prefix ").concat(JSON.stringify(oldPrefix), "; this is a bug")); + } + return newPrefix + string.slice(oldPrefix.length); + } + function replaceSuffix(string, oldSuffix, newSuffix) { + if (!oldSuffix) { + return string + newSuffix; + } + if (string.slice(-oldSuffix.length) != oldSuffix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't end with suffix ").concat(JSON.stringify(oldSuffix), "; this is a bug")); + } + return string.slice(0, -oldSuffix.length) + newSuffix; + } + function removePrefix(string, oldPrefix) { + return replacePrefix(string, oldPrefix, ''); + } + function removeSuffix(string, oldSuffix) { + return replaceSuffix(string, oldSuffix, ''); + } + function maximumOverlap(string1, string2) { + return string2.slice(0, overlapCount(string1, string2)); } - function generateOptions(options, defaults) { - if (typeof options === 'function') { - defaults.callback = options; - } else if (options) { - for (var name in options) { - /* istanbul ignore else */ - if (options.hasOwnProperty(name)) { - defaults[name] = options[name]; - } + // Nicked from https://stackoverflow.com/a/60422853/1709587 + function overlapCount(a, b) { + // Deal with cases where the strings differ in length + var startA = 0; + if (a.length > b.length) { + startA = a.length - b.length; + } + var endB = b.length; + if (a.length < b.length) { + endB = a.length; + } + // Create a back-reference for each index + // that should be followed in case of a mismatch. + // We only need B to make these references: + var map = Array(endB); + var k = 0; // Index that lags behind j + map[0] = 0; + for (var j = 1; j < endB; j++) { + if (b[j] == b[k]) { + map[j] = map[k]; // skip over the same character (optional optimisation) + } else { + map[j] = k; + } + while (k > 0 && b[j] != b[k]) { + k = map[k]; + } + if (b[j] == b[k]) { + k++; + } + } + // Phase 2: use these references while iterating over A + k = 0; + for (var i = startA; i < a.length; i++) { + while (k > 0 && a[i] != b[k]) { + k = map[k]; + } + if (a[i] == b[k]) { + k++; } } + return k; + } - return defaults; + /** + * Returns true if the string consistently uses Windows line endings. + */ + function hasOnlyWinLineEndings(string) { + return string.includes('\r\n') && !string.startsWith('\n') && !string.match(/[^\r]\n/); + } + + /** + * Returns true if the string consistently uses Unix line endings. + */ + function hasOnlyUnixLineEndings(string) { + return !string.includes('\r\n') && string.includes('\n'); } + // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode // // Ranges and exceptions: // Latin-1 Supplement, 0080–00FF @@ -14161,82 +14372,330 @@ module.exports = function defineDataProperty( // - U+02DC ˜ ˜ Small Tilde // - U+02DD ˝ ˝ Double Acute Accent // Latin Extended Additional, 1E00–1EFF + var extendedWordChars = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}"; - var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; - var reWhitespace = /\S/; + // Each token is one of the following: + // - A punctuation mark plus the surrounding whitespace + // - A word plus the surrounding whitespace + // - Pure whitespace (but only in the special case where this the entire text + // is just whitespace) + // + // We have to include surrounding whitespace in the tokens because the two + // alternative approaches produce horribly broken results: + // * If we just discard the whitespace, we can't fully reproduce the original + // text from the sequence of tokens and any attempt to render the diff will + // get the whitespace wrong. + // * If we have separate tokens for whitespace, then in a typical text every + // second token will be a single space character. But this often results in + // the optimal diff between two texts being a perverse one that preserves + // the spaces between words but deletes and reinserts actual common words. + // See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640 + // for an example. + // + // Keeping the surrounding whitespace of course has implications for .equals + // and .join, not just .tokenize. + + // This regex does NOT fully implement the tokenization rules described above. + // Instead, it gives runs of whitespace their own "token". The tokenize method + // then handles stitching whitespace tokens onto adjacent word or punctuation + // tokens. + var tokenizeIncludingWhitespace = new RegExp("[".concat(extendedWordChars, "]+|\\s+|[^").concat(extendedWordChars, "]"), 'ug'); var wordDiff = new Diff(); - - wordDiff.equals = function (left, right) { - if (this.options.ignoreCase) { + wordDiff.equals = function (left, right, options) { + if (options.ignoreCase) { left = left.toLowerCase(); right = right.toLowerCase(); } - - return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + return left.trim() === right.trim(); }; - wordDiff.tokenize = function (value) { - // All whitespace symbols except newline group into one token, each newline - in separate token - var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. - - for (var i = 0; i < tokens.length - 1; i++) { - // If we have an empty string in the next field and we have only word chars before and after, merge - if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var parts; + if (options.intlSegmenter) { + if (options.intlSegmenter.resolvedOptions().granularity != 'word') { + throw new Error('The segmenter passed must have a granularity of "word"'); } + parts = Array.from(options.intlSegmenter.segment(value), function (segment) { + return segment.segment; + }); + } else { + parts = value.match(tokenizeIncludingWhitespace) || []; } - + var tokens = []; + var prevPart = null; + parts.forEach(function (part) { + if (/\s/.test(part)) { + if (prevPart == null) { + tokens.push(part); + } else { + tokens.push(tokens.pop() + part); + } + } else if (/\s/.test(prevPart)) { + if (tokens[tokens.length - 1] == prevPart) { + tokens.push(tokens.pop() + part); + } else { + tokens.push(prevPart + part); + } + } else { + tokens.push(part); + } + prevPart = part; + }); return tokens; }; - - function diffWords(oldStr, newStr, options) { - options = generateOptions(options, { - ignoreWhitespace: true + wordDiff.join = function (tokens) { + // Tokens being joined here will always have appeared consecutively in the + // same text, so we can simply strip off the leading whitespace from all the + // tokens except the first (and except any whitespace-only tokens - but such + // a token will always be the first and only token anyway) and then join them + // and the whitespace around words and punctuation will end up correct. + return tokens.map(function (token, i) { + if (i == 0) { + return token; + } else { + return token.replace(/^\s+/, ''); + } + }).join(''); + }; + wordDiff.postProcess = function (changes, options) { + if (!changes || options.oneChangePerToken) { + return changes; + } + var lastKeep = null; + // Change objects representing any insertion or deletion since the last + // "keep" change object. There can be at most one of each. + var insertion = null; + var deletion = null; + changes.forEach(function (change) { + if (change.added) { + insertion = change; + } else if (change.removed) { + deletion = change; + } else { + if (insertion || deletion) { + // May be false at start of text + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change); + } + lastKeep = change; + insertion = null; + deletion = null; + } }); + if (insertion || deletion) { + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null); + } + return changes; + }; + function diffWords(oldStr, newStr, options) { + // This option has never been documented and never will be (it's clearer to + // just call `diffWordsWithSpace` directly if you need that behavior), but + // has existed in jsdiff for a long time, so we retain support for it here + // for the sake of backwards compatibility. + if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) { + return diffWordsWithSpace(oldStr, newStr, options); + } return wordDiff.diff(oldStr, newStr, options); } + function dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) { + // Before returning, we tidy up the leading and trailing whitespace of the + // change objects to eliminate cases where trailing whitespace in one object + // is repeated as leading whitespace in the next. + // Below are examples of the outcomes we want here to explain the code. + // I=insert, K=keep, D=delete + // 1. diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want: K:'foo ' D:'bar ' K:'baz' + // + // 2. Diffing 'foo bar baz' vs 'foo qux baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz' + // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz' + // + // 3. Diffing 'foo\nbar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:'\nbar ' K:' baz' + // After cleanup, we want K'foo' D:'\nbar' K:' baz' + // + // 4. Diffing 'foo baz' vs 'foo\nbar baz' + // Prior to cleanup, we have K:'foo\n' I:'\nbar ' K:' baz' + // After cleanup, we ideally want K'foo' I:'\nbar' K:' baz' + // but don't actually manage this currently (the pre-cleanup change + // objects don't contain enough information to make it possible). + // + // 5. Diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want K:'foo ' D:' bar ' K:'baz' + // + // Our handling is unavoidably imperfect in the case where there's a single + // indel between keeps and the whitespace has changed. For instance, consider + // diffing 'foo\tbar\nbaz' vs 'foo baz'. Unless we create an extra change + // object to represent the insertion of the space character (which isn't even + // a token), we have no way to avoid losing information about the texts' + // original whitespace in the result we return. Still, we do our best to + // output something that will look sensible if we e.g. print it with + // insertions in green and deletions in red. + + // Between two "keep" change objects (or before the first or after the last + // change object), we can have either: + // * A "delete" followed by an "insert" + // * Just an "insert" + // * Just a "delete" + // We handle the three cases separately. + if (deletion && insertion) { + var oldWsPrefix = deletion.value.match(/^\s*/)[0]; + var oldWsSuffix = deletion.value.match(/\s*$/)[0]; + var newWsPrefix = insertion.value.match(/^\s*/)[0]; + var newWsSuffix = insertion.value.match(/\s*$/)[0]; + if (startKeep) { + var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix); + startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix); + deletion.value = removePrefix(deletion.value, commonWsPrefix); + insertion.value = removePrefix(insertion.value, commonWsPrefix); + } + if (endKeep) { + var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix); + endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix); + deletion.value = removeSuffix(deletion.value, commonWsSuffix); + insertion.value = removeSuffix(insertion.value, commonWsSuffix); + } + } else if (insertion) { + // The whitespaces all reflect what was in the new text rather than + // the old, so we essentially have no information about whitespace + // insertion or deletion. We just want to dedupe the whitespace. + // We do that by having each change object keep its trailing + // whitespace and deleting duplicate leading whitespace where + // present. + if (startKeep) { + insertion.value = insertion.value.replace(/^\s*/, ''); + } + if (endKeep) { + endKeep.value = endKeep.value.replace(/^\s*/, ''); + } + // otherwise we've got a deletion and no insertion + } else if (startKeep && endKeep) { + var newWsFull = endKeep.value.match(/^\s*/)[0], + delWsStart = deletion.value.match(/^\s*/)[0], + delWsEnd = deletion.value.match(/\s*$/)[0]; + + // Any whitespace that comes straight after startKeep in both the old and + // new texts, assign to startKeep and remove from the deletion. + var newWsStart = longestCommonPrefix(newWsFull, delWsStart); + deletion.value = removePrefix(deletion.value, newWsStart); + + // Any whitespace that comes straight before endKeep in both the old and + // new texts, and hasn't already been assigned to startKeep, assign to + // endKeep and remove from the deletion. + var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd); + deletion.value = removeSuffix(deletion.value, newWsEnd); + endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd); + + // If there's any whitespace from the new text that HASN'T already been + // assigned, assign it to the start: + startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length)); + } else if (endKeep) { + // We are at the start of the text. Preserve all the whitespace on + // endKeep, and just remove whitespace from the end of deletion to the + // extent that it overlaps with the start of endKeep. + var endKeepWsPrefix = endKeep.value.match(/^\s*/)[0]; + var deletionWsSuffix = deletion.value.match(/\s*$/)[0]; + var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix); + deletion.value = removeSuffix(deletion.value, overlap); + } else if (startKeep) { + // We are at the END of the text. Preserve all the whitespace on + // startKeep, and just remove whitespace from the start of deletion to + // the extent that it overlaps with the end of startKeep. + var startKeepWsSuffix = startKeep.value.match(/\s*$/)[0]; + var deletionWsPrefix = deletion.value.match(/^\s*/)[0]; + var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix); + deletion.value = removePrefix(deletion.value, _overlap); + } + } + var wordWithSpaceDiff = new Diff(); + wordWithSpaceDiff.tokenize = function (value) { + // Slightly different to the tokenizeIncludingWhitespace regex used above in + // that this one treats each individual newline as a distinct tokens, rather + // than merging them into other surrounding whitespace. This was requested + // in https://github.com/kpdecker/jsdiff/issues/180 & + // https://github.com/kpdecker/jsdiff/issues/211 + var regex = new RegExp("(\\r?\\n)|[".concat(extendedWordChars, "]+|[^\\S\\n\\r]+|[^").concat(extendedWordChars, "]"), 'ug'); + return value.match(regex) || []; + }; function diffWordsWithSpace(oldStr, newStr, options) { - return wordDiff.diff(oldStr, newStr, options); + return wordWithSpaceDiff.diff(oldStr, newStr, options); } - var lineDiff = new Diff(); + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + return defaults; + } - lineDiff.tokenize = function (value) { - if (this.options.stripTrailingCr) { + var lineDiff = new Diff(); + lineDiff.tokenize = function (value, options) { + if (options.stripTrailingCr) { // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior value = value.replace(/\r\n/g, '\n'); } - var retLines = [], - linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + linesAndNewlines = value.split(/(\n|\r\n)/); + // Ignore the final empty token that occurs if the string ends with a new line if (!linesAndNewlines[linesAndNewlines.length - 1]) { linesAndNewlines.pop(); - } // Merge the content and line separators into single tokens - + } + // Merge the content and line separators into single tokens for (var i = 0; i < linesAndNewlines.length; i++) { var line = linesAndNewlines[i]; - - if (i % 2 && !this.options.newlineIsToken) { + if (i % 2 && !options.newlineIsToken) { retLines[retLines.length - 1] += line; } else { - if (this.options.ignoreWhitespace) { - line = line.trim(); - } - retLines.push(line); } } - return retLines; }; - + lineDiff.equals = function (left, right, options) { + // If we're ignoring whitespace, we need to normalise lines by stripping + // whitespace before checking equality. (This has an annoying interaction + // with newlineIsToken that requires special handling: if newlines get their + // own token, then we DON'T want to trim the *newline* tokens down to empty + // strings, since this would cause us to treat whitespace-only line content + // as equal to a separator between lines, which would be weird and + // inconsistent with the documented behavior of the options.) + if (options.ignoreWhitespace) { + if (!options.newlineIsToken || !left.includes('\n')) { + left = left.trim(); + } + if (!options.newlineIsToken || !right.includes('\n')) { + right = right.trim(); + } + } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) { + if (left.endsWith('\n')) { + left = left.slice(0, -1); + } + if (right.endsWith('\n')) { + right = right.slice(0, -1); + } + } + return Diff.prototype.equals.call(this, left, right, options); + }; function diffLines(oldStr, newStr, callback) { return lineDiff.diff(oldStr, newStr, callback); } + + // Kept for backwards compatibility. This is a rather arbitrary wrapper method + // that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to + // have two ways to do exactly the same thing in the API, so we no longer + // document this one (library users should explicitly use `diffLines` with + // `ignoreWhitespace: true` instead) but we keep it around to maintain + // compatibility with code that used old versions. function diffTrimmedLines(oldStr, newStr, callback) { var options = generateOptions(callback, { ignoreWhitespace: true @@ -14245,42 +14704,67 @@ module.exports = function defineDataProperty( } var sentenceDiff = new Diff(); - sentenceDiff.tokenize = function (value) { return value.split(/(\S.+?[.!?])(?=\s+|$)/); }; - function diffSentences(oldStr, newStr, callback) { return sentenceDiff.diff(oldStr, newStr, callback); } var cssDiff = new Diff(); - cssDiff.tokenize = function (value) { return value.split(/([{}:;,]|\s+)/); }; - function diffCss(oldStr, newStr, callback) { return cssDiff.diff(oldStr, newStr, callback); } - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); } - - return _typeof(obj); + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : i + ""; + } + function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, @@ -14291,56 +14775,17 @@ module.exports = function defineDataProperty( } else { obj[key] = value; } - return obj; } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -14349,238 +14794,263 @@ module.exports = function defineDataProperty( if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var objectPrototypeToString = Object.prototype.toString; - var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + var jsonDiff = new Diff(); + // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: - jsonDiff.useLongestToken = true; jsonDiff.tokenize = lineDiff.tokenize; - - jsonDiff.castInput = function (value) { - var _this$options = this.options, - undefinedReplacement = _this$options.undefinedReplacement, - _this$options$stringi = _this$options.stringifyReplacer, - stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { - return typeof v === 'undefined' ? undefinedReplacement : v; - } : _this$options$stringi; + jsonDiff.castInput = function (value, options) { + var undefinedReplacement = options.undefinedReplacement, + _options$stringifyRep = options.stringifyReplacer, + stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _options$stringifyRep; return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); }; - - jsonDiff.equals = function (left, right) { - return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + jsonDiff.equals = function (left, right, options) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'), options); }; - function diffJson(oldObj, newObj, options) { return jsonDiff.diff(oldObj, newObj, options); - } // This function handles the presence of circular references by bailing out when encountering an - // object that is already on the "stack" of items being processed. Accepts an optional replacer + } + // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer function canonicalize(obj, stack, replacementStack, replacer, key) { stack = stack || []; replacementStack = replacementStack || []; - if (replacer) { obj = replacer(key, obj); } - var i; - for (i = 0; i < stack.length; i += 1) { if (stack[i] === obj) { return replacementStack[i]; } } - var canonicalizedObj; - - if ('[object Array]' === objectPrototypeToString.call(obj)) { + if ('[object Array]' === Object.prototype.toString.call(obj)) { stack.push(obj); canonicalizedObj = new Array(obj.length); replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); } - stack.pop(); replacementStack.pop(); return canonicalizedObj; } - if (obj && obj.toJSON) { obj = obj.toJSON(); } - if (_typeof(obj) === 'object' && obj !== null) { stack.push(obj); canonicalizedObj = {}; replacementStack.push(canonicalizedObj); - var sortedKeys = [], - _key; - + _key; for (_key in obj) { /* istanbul ignore else */ - if (obj.hasOwnProperty(_key)) { + if (Object.prototype.hasOwnProperty.call(obj, _key)) { sortedKeys.push(_key); } } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { _key = sortedKeys[i]; canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); } - stack.pop(); replacementStack.pop(); } else { canonicalizedObj = obj; } - return canonicalizedObj; } var arrayDiff = new Diff(); - arrayDiff.tokenize = function (value) { return value.slice(); }; - arrayDiff.join = arrayDiff.removeEmpty = function (value) { return value; }; - function diffArrays(oldArr, newArr, callback) { return arrayDiff.diff(oldArr, newArr, callback); } - function parsePatch(uniDiff) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], - list = [], - i = 0; + function unixToWin(patch) { + if (Array.isArray(patch)) { + return patch.map(unixToWin); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line, i) { + var _hunk$lines; + return line.startsWith('\\') || line.endsWith('\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\') ? line : line + '\r'; + }) + }); + }) + }); + } + function winToUnix(patch) { + if (Array.isArray(patch)) { + return patch.map(winToUnix); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line) { + return line.endsWith('\r') ? line.substring(0, line.length - 1) : line; + }) + }); + }) + }); + } + + /** + * Returns true if the patch consistently uses Unix line endings (or only involves one line and has + * no line endings). + */ + function isUnix(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return !patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return !line.startsWith('\\') && line.endsWith('\r'); + }); + }); + }); + } + + /** + * Returns true if the patch uses Windows line endings and only Windows line endings. + */ + function isWin(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return line.endsWith('\r'); + }); + }); + }) && patch.every(function (index) { + return index.hunks.every(function (hunk) { + return hunk.lines.every(function (line, i) { + var _hunk$lines2; + return line.startsWith('\\') || line.endsWith('\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\')); + }); + }); + }); + } + function parsePatch(uniDiff) { + var diffstr = uniDiff.split(/\n/), + list = [], + i = 0; function parseIndex() { var index = {}; - list.push(index); // Parse diff metadata + list.push(index); + // Parse diff metadata while (i < diffstr.length) { - var line = diffstr[i]; // File header found, end parsing diff metadata + var line = diffstr[i]; + // File header found, end parsing diff metadata if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { break; - } // Diff index - + } + // Diff index var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); - if (header) { index.index = header[1]; } - i++; - } // Parse file headers if they are defined. Unified diff requires them, but - // there's no technical issues to have an isolated hunk without file header - + } + // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + parseFileHeader(index); parseFileHeader(index); - parseFileHeader(index); // Parse hunks + // Parse hunks index.hunks = []; - while (i < diffstr.length) { var _line = diffstr[i]; - - if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + if (/^(Index:\s|diff\s|\-\-\-\s|\+\+\+\s|===================================================================)/.test(_line)) { break; } else if (/^@@/.test(_line)) { index.hunks.push(parseHunk()); - } else if (_line && options.strict) { - // Ignore unexpected content unless in strict mode + } else if (_line) { throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); } else { i++; } } - } // Parses the --- and +++ headers, if none are found, no lines - // are consumed. - + } + // Parses the --- and +++ headers, if none are found, no lines + // are consumed. function parseFileHeader(index) { - var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); - + var fileHeader = /^(---|\+\+\+)\s+(.*)\r?$/.exec(diffstr[i]); if (fileHeader) { var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; var data = fileHeader[2].split('\t', 2); var fileName = data[0].replace(/\\\\/g, '\\'); - if (/^".*"$/.test(fileName)) { fileName = fileName.substr(1, fileName.length - 2); } - index[keyPrefix + 'FileName'] = fileName; index[keyPrefix + 'Header'] = (data[1] || '').trim(); i++; } - } // Parses a hunk - // This assumes that we are at the start of a hunk. - + } + // Parses a hunk + // This assumes that we are at the start of a hunk. function parseHunk() { var chunkHeaderIndex = i, - chunkHeaderLine = diffstr[i++], - chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); var hunk = { oldStart: +chunkHeader[1], oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], newStart: +chunkHeader[3], newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], - lines: [], - linedelimiters: [] - }; // Unified Diff Format quirk: If the chunk size is 0, + lines: [] + }; + + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart += 1; } - if (hunk.newLines === 0) { hunk.newStart += 1; } - var addCount = 0, - removeCount = 0; - - for (; i < diffstr.length; i++) { - // Lines starting with '---' could be mistaken for the "remove line" operation - // But they could be the header for the next file. Therefore prune such cases out. - if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { - break; - } - + removeCount = 0; + for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\')); i++) { + var _diffstr$i; var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; - if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { hunk.lines.push(diffstr[i]); - hunk.linedelimiters.push(delimiters[i] || '\n'); - if (operation === '+') { addCount++; } else if (operation === '-') { @@ -14590,37 +15060,30 @@ module.exports = function defineDataProperty( removeCount++; } } else { - break; + throw new Error("Hunk at line ".concat(chunkHeaderIndex + 1, " contained invalid line ").concat(diffstr[i])); } - } // Handle the empty block count case - + } + // Handle the empty block count case if (!addCount && hunk.newLines === 1) { hunk.newLines = 0; } - - if (!removeCount && hunk.oldLines === 1) { - hunk.oldLines = 0; - } // Perform optional sanity checking - - - if (options.strict) { - if (addCount !== hunk.newLines) { - throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } - - if (removeCount !== hunk.oldLines) { - throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; } + // Perform sanity checking + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } return hunk; } - while (i < diffstr.length) { parseIndex(); } - return list; } @@ -14629,210 +15092,275 @@ module.exports = function defineDataProperty( // start of 2, this will iterate 2, 3, 1, 4, 0. function distanceIterator (start, minLine, maxLine) { var wantForward = true, - backwardExhausted = false, - forwardExhausted = false, - localOffset = 1; + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; return function iterator() { if (wantForward && !forwardExhausted) { if (backwardExhausted) { localOffset++; } else { wantForward = false; - } // Check if trying to fit beyond text length, and if not, check it fits - // after offset location (or desired location on first iteration) - + } + // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) if (start + localOffset <= maxLine) { - return localOffset; + return start + localOffset; } - forwardExhausted = true; } - if (!backwardExhausted) { if (!forwardExhausted) { wantForward = true; - } // Check if trying to fit before text beginning, and if not, check it fits - // before offset location - + } + // Check if trying to fit before text beginning, and if not, check it fits + // before offset location if (minLine <= start - localOffset) { - return -localOffset++; + return start - localOffset++; } - backwardExhausted = true; return iterator(); - } // We tried to fit hunk before text beginning and beyond text length, then - // hunk can't fit on the text. Return undefined + } + // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined }; } function applyPatch(source, uniDiff) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - if (Array.isArray(uniDiff)) { if (uniDiff.length > 1) { throw new Error('applyPatch only works with a single input.'); } - uniDiff = uniDiff[0]; - } // Apply the diff to the input + } + if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) { + if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) { + uniDiff = unixToWin(uniDiff); + } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) { + uniDiff = winToUnix(uniDiff); + } + } + // Apply the diff to the input + var lines = source.split('\n'), + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0; + if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) { + throw new Error('fuzzFactor must be a non-negative integer'); + } + + // Special case for empty patch. + if (!hunks.length) { + return source; + } + + // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change + // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a + // newline that already exists - then we either return false and fail to apply the patch (if + // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0). + // If we do need to remove/add a newline at EOF, this will always be in the final hunk: + var prevLine = '', + removeEOFNL = false, + addEOFNL = false; + for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) { + var line = hunks[hunks.length - 1].lines[i]; + if (line[0] == '\\') { + if (prevLine[0] == '+') { + removeEOFNL = true; + } else if (prevLine[0] == '-') { + addEOFNL = true; + } + } + prevLine = line; + } + if (removeEOFNL) { + if (addEOFNL) { + // This means the final line gets changed but doesn't have a trailing newline in either the + // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if + // fuzzFactor is 0, we simply validate that the source file has no trailing newline. + if (!fuzzFactor && lines[lines.length - 1] == '') { + return false; + } + } else if (lines[lines.length - 1] == '') { + lines.pop(); + } else if (!fuzzFactor) { + return false; + } + } else if (addEOFNL) { + if (lines[lines.length - 1] != '') { + lines.push(''); + } else if (!fuzzFactor) { + return false; + } + } - var lines = source.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], - hunks = uniDiff.hunks, - compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { - return line === patchContent; - }, - errorCount = 0, - fuzzFactor = options.fuzzFactor || 0, - minLine = 0, - offset = 0, - removeEOFNL, - addEOFNL; /** - * Checks if the hunk exactly fits on the provided location + * Checks if the hunk can be made to fit at the provided location with at most `maxErrors` + * insertions, substitutions, or deletions, while ensuring also that: + * - lines deleted in the hunk match exactly, and + * - wherever an insertion operation or block of insertion operations appears in the hunk, the + * immediately preceding and following lines of context match exactly + * + * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0]. + * + * If the hunk can be applied, returns an object with properties `oldLineLastI` and + * `replacementLines`. Otherwise, returns null. */ - - - function hunkFits(hunk, toPos) { - for (var j = 0; j < hunk.lines.length; j++) { - var line = hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line; - - if (operation === ' ' || operation === '-') { - // Context sanity check - if (!compareLine(toPos + 1, lines[toPos], operation, content)) { - errorCount++; - - if (errorCount > fuzzFactor) { - return false; + function applyHunk(hunkLines, toPos, maxErrors) { + var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : []; + var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; + var nConsecutiveOldContextLines = 0; + var nextContextLineMustMatch = false; + for (; hunkLinesI < hunkLines.length; hunkLinesI++) { + var hunkLine = hunkLines[hunkLinesI], + operation = hunkLine.length > 0 ? hunkLine[0] : ' ', + content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine; + if (operation === '-') { + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + toPos++; + nConsecutiveOldContextLines = 0; + } else { + if (!maxErrors || lines[toPos] == null) { + return null; } + patchedLines[patchedLinesLength] = lines[toPos]; + return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1); + } + } + if (operation === '+') { + if (!lastContextLineMatched) { + return null; } + patchedLines[patchedLinesLength] = content; + patchedLinesLength++; + nConsecutiveOldContextLines = 0; + nextContextLineMustMatch = true; + } + if (operation === ' ') { + nConsecutiveOldContextLines++; + patchedLines[patchedLinesLength] = lines[toPos]; + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + patchedLinesLength++; + lastContextLineMatched = true; + nextContextLineMustMatch = false; + toPos++; + } else { + if (nextContextLineMustMatch || !maxErrors) { + return null; + } - toPos++; + // Consider 3 possibilities in sequence: + // 1. lines contains a *substitution* not included in the patch context, or + // 2. lines contains an *insertion* not included in the patch context, or + // 3. lines contains a *deletion* not included in the patch context + // The first two options are of course only possible if the line from lines is non-null - + // i.e. only option 3 is possible if we've overrun the end of the old file. + return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength); + } } } - return true; - } // Search best fit offsets for each hunk based on the previous ones - - - for (var i = 0; i < hunks.length; i++) { - var hunk = hunks[i], - maxLine = lines.length - hunk.oldLines, - localOffset = 0, - toPos = offset + hunk.oldStart - 1; - var iterator = distanceIterator(toPos, minLine, maxLine); + // Before returning, trim any unmodified context lines off the end of patchedLines and reduce + // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region + // that starts in this hunk's trailing context. + patchedLinesLength -= nConsecutiveOldContextLines; + toPos -= nConsecutiveOldContextLines; + patchedLines.length = patchedLinesLength; + return { + patchedLines: patchedLines, + oldLineLastI: toPos - 1 + }; + } + var resultLines = []; - for (; localOffset !== undefined; localOffset = iterator()) { - if (hunkFits(hunk, toPos + localOffset)) { - hunk.offset = offset += localOffset; + // Search best fit offsets for each hunk based on the previous ones + var prevHunkOffset = 0; + for (var _i = 0; _i < hunks.length; _i++) { + var hunk = hunks[_i]; + var hunkResult = void 0; + var maxLine = lines.length - hunk.oldLines + fuzzFactor; + var toPos = void 0; + for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) { + toPos = hunk.oldStart + prevHunkOffset - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + for (; toPos !== undefined; toPos = iterator()) { + hunkResult = applyHunk(hunk.lines, toPos, maxErrors); + if (hunkResult) { + break; + } + } + if (hunkResult) { break; } } - - if (localOffset === undefined) { + if (!hunkResult) { return false; - } // Set lower text limit to end of the current hunk, so next ones don't try - // to fit over already patched text - - - minLine = hunk.offset + hunk.oldStart + hunk.oldLines; - } // Apply patch hunks - - - var diffOffset = 0; - - for (var _i = 0; _i < hunks.length; _i++) { - var _hunk = hunks[_i], - _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; - - diffOffset += _hunk.newLines - _hunk.oldLines; + } - for (var j = 0; j < _hunk.lines.length; j++) { - var line = _hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line, - delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n'; + // Copy everything from the end of where we applied the last hunk to the start of this hunk + for (var _i2 = minLine; _i2 < toPos; _i2++) { + resultLines.push(lines[_i2]); + } - if (operation === ' ') { - _toPos++; - } else if (operation === '-') { - lines.splice(_toPos, 1); - delimiters.splice(_toPos, 1); - /* istanbul ignore else */ - } else if (operation === '+') { - lines.splice(_toPos, 0, content); - delimiters.splice(_toPos, 0, delimiter); - _toPos++; - } else if (operation === '\\') { - var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; - - if (previousOperation === '+') { - removeEOFNL = true; - } else if (previousOperation === '-') { - addEOFNL = true; - } - } + // Add the lines produced by applying the hunk: + for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) { + var _line = hunkResult.patchedLines[_i3]; + resultLines.push(_line); } - } // Handle EOFNL insertion/removal + // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + minLine = hunkResult.oldLineLastI + 1; - if (removeEOFNL) { - while (!lines[lines.length - 1]) { - lines.pop(); - delimiters.pop(); - } - } else if (addEOFNL) { - lines.push(''); - delimiters.push('\n'); + // Note the offset between where the patch said the hunk should've applied and where we + // applied it, so we can adjust future hunks accordingly: + prevHunkOffset = toPos + 1 - hunk.oldStart; } - for (var _k = 0; _k < lines.length - 1; _k++) { - lines[_k] = lines[_k] + delimiters[_k]; + // Copy over the rest of the lines from the old text + for (var _i4 = minLine; _i4 < lines.length; _i4++) { + resultLines.push(lines[_i4]); } + return resultLines.join('\n'); + } - return lines.join(''); - } // Wrapper that supports multiple file patches via callbacks. - + // Wrapper that supports multiple file patches via callbacks. function applyPatches(uniDiff, options) { if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - var currentIndex = 0; - function processIndex() { var index = uniDiff[currentIndex++]; - if (!index) { return options.complete(); } - options.loadFile(index, function (err, data) { if (err) { return options.complete(err); } - var updatedContent = applyPatch(data, index, options); options.patched(index, updatedContent, function (err) { if (err) { return options.complete(err); } - processIndex(); }); }); } - processIndex(); } @@ -14840,206 +15368,238 @@ module.exports = function defineDataProperty( if (!options) { options = {}; } - + if (typeof options === 'function') { + options = { + callback: options + }; + } if (typeof options.context === 'undefined') { options.context = 4; } - - var diff = diffLines(oldStr, newStr, options); - - if (!diff) { - return; + if (options.newlineIsToken) { + throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions'); } - - diff.push({ - value: '', - lines: [] - }); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function (entry) { - return ' ' + entry; - }); + if (!options.callback) { + return diffLinesResultToPatch(diffLines(oldStr, newStr, options)); + } else { + var _options = options, + _callback = _options.callback; + diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(diff) { + var patch = diffLinesResultToPatch(diff); + _callback(patch); + } + })); } + function diffLinesResultToPatch(diff) { + // STEP 1: Build up the patch with no "\ No newline at end of file" lines and with the arrays + // of lines containing trailing newline characters. We'll tidy up later... - var hunks = []; - var oldRangeStart = 0, + if (!diff) { + return; + } + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + var hunks = []; + var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1; - - var _loop = function _loop(i) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - var _curRange; - - // If we have previous context, start with that - if (!oldRangeStart) { - var prev = diff[i - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; + var _loop = function _loop() { + var current = diff[i], + lines = current.lines || splitLines(current.value); + current.lines = lines; + if (current.added || current.removed) { + var _curRange; + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } } - } // Output our changes - - (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { - return (current.added ? '+' : '-') + entry; - }))); // Track the updated file position + // Output our changes + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); - - if (current.added) { - newLine += lines.length; + // Track the updated file position + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + // end the range and output + var contextSize = Math.min(lines.length, options.context); + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + var _hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + hunks.push(_hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } oldLine += lines.length; + newLine += lines.length; } - } else { - // Identical context lines. Track line changes - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= options.context * 2 && i < diff.length - 2) { - var _curRange2; - - // Overlapping - (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); - } else { - var _curRange3; - - // end the range and output - var contextSize = Math.min(lines.length, options.context); - - (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); - - var hunk = { - oldStart: oldRangeStart, - oldLines: oldLine - oldRangeStart + contextSize, - newStart: newRangeStart, - newLines: newLine - newRangeStart + contextSize, - lines: curRange - }; - - if (i >= diff.length - 2 && lines.length <= options.context) { - // EOF is inside this hunk - var oldEOFNewline = /\n$/.test(oldStr); - var newEOFNewline = /\n$/.test(newStr); - var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; - - if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { - // special case: old has no eol and no trailing context; no-nl can end up before adds - // however, if the old file is empty, do not output the no-nl line - curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); - } - - if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { - curRange.push('\\ No newline at end of file'); - } - } + }; + for (var i = 0; i < diff.length; i++) { + _loop(); + } - hunks.push(hunk); - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; + // Step 2: eliminate the trailing `\n` from each line of each hunk, and, where needed, add + // "\ No newline at end of file". + for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) { + var hunk = _hunks[_i]; + for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) { + if (hunk.lines[_i2].endsWith('\n')) { + hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1); + } else { + hunk.lines.splice(_i2 + 1, 0, '\\ No newline at end of file'); + _i2++; // Skip the line we just added, then continue iterating } } - - oldLine += lines.length; - newLine += lines.length; } - }; - - for (var i = 0; i < diff.length; i++) { - _loop(i); + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; } - - return { - oldFileName: oldFileName, - newFileName: newFileName, - oldHeader: oldHeader, - newHeader: newHeader, - hunks: hunks - }; } function formatPatch(diff) { if (Array.isArray(diff)) { return diff.map(formatPatch).join('\n'); } - var ret = []; - if (diff.oldFileName == diff.newFileName) { ret.push('Index: ' + diff.oldFileName); } - ret.push('==================================================================='); ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); - for (var i = 0; i < diff.hunks.length; i++) { - var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + var hunk = diff.hunks[i]; + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart -= 1; } - if (hunk.newLines === 0) { hunk.newStart -= 1; } - ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); ret.push.apply(ret, hunk.lines); } - return ret.join('\n') + '\n'; } function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { - return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + var _options2; + if (typeof options === 'function') { + options = { + callback: options + }; + } + if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) { + var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options); + if (!patchObj) { + return; + } + return formatPatch(patchObj); + } else { + var _options3 = options, + _callback2 = _options3.callback; + structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(patchObj) { + if (!patchObj) { + _callback2(); + } else { + _callback2(formatPatch(patchObj)); + } + } + })); + } } function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); } + /** + * Split `text` into an array of lines, including the trailing newline character (where present) + */ + function splitLines(text) { + var hasTrailingNl = text.endsWith('\n'); + var result = text.split('\n').map(function (line) { + return line + '\n'; + }); + if (hasTrailingNl) { + result.pop(); + } else { + result.push(result.pop().slice(0, -1)); + } + return result; + } + function arrayEqual(a, b) { if (a.length !== b.length) { return false; } - return arrayStartsWith(a, b); } function arrayStartsWith(array, start) { if (start.length > array.length) { return false; } - for (var i = 0; i < start.length; i++) { if (start[i] !== array[i]) { return false; } } - return true; } function calcLineCount(hunk) { var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), - oldLines = _calcOldNewLineCount.oldLines, - newLines = _calcOldNewLineCount.newLines; - + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; if (oldLines !== undefined) { hunk.oldLines = oldLines; } else { delete hunk.oldLines; } - if (newLines !== undefined) { hunk.newLines = newLines; } else { @@ -15049,14 +15609,14 @@ module.exports = function defineDataProperty( function merge(mine, theirs, base) { mine = loadPatch(mine, base); theirs = loadPatch(theirs, base); - var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + var ret = {}; + + // For index we just let it pass through as it doesn't have any necessary meaning. // Leaving sanity checks on this to the API consumer that may know more about the // meaning in their own context. - if (mine.index || theirs.index) { ret.index = mine.index || theirs.index; } - if (mine.newFileName || theirs.newFileName) { if (!fileNameChanged(mine)) { // No header or no change in ours, use theirs (and ours if theirs does not exist) @@ -15078,21 +15638,18 @@ module.exports = function defineDataProperty( ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); } } - ret.hunks = []; var mineIndex = 0, - theirsIndex = 0, - mineOffset = 0, - theirsOffset = 0; - + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { var mineCurrent = mine.hunks[mineIndex] || { - oldStart: Infinity - }, - theirsCurrent = theirs.hunks[theirsIndex] || { - oldStart: Infinity - }; - + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; if (hunkBefore(mineCurrent, theirsCurrent)) { // This patch does not overlap with any of the others, yay. ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); @@ -15118,30 +15675,23 @@ module.exports = function defineDataProperty( ret.hunks.push(mergedHunk); } } - return ret; } - function loadPatch(param, base) { if (typeof param === 'string') { if (/^@@/m.test(param) || /^Index:/m.test(param)) { return parsePatch(param)[0]; } - if (!base) { throw new Error('Must provide a base reference or pass in a patch'); } - return structuredPatch(undefined, undefined, base, param); } - return param; } - function fileNameChanged(patch) { return patch.newFileName && patch.newFileName !== patch.oldFileName; } - function selectField(index, mine, theirs) { if (mine === theirs) { return mine; @@ -15153,11 +15703,9 @@ module.exports = function defineDataProperty( }; } } - function hunkBefore(test, check) { return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; } - function cloneHunk(hunk, offset) { return { oldStart: hunk.oldStart, @@ -15167,39 +15715,37 @@ module.exports = function defineDataProperty( lines: hunk.lines }; } - function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { // This will generally result in a conflicted hunk, but there are cases where the context // is the only overlap where we can successfully merge the content here. var mine = { - offset: mineOffset, - lines: mineLines, - index: 0 - }, - their = { - offset: theirOffset, - lines: theirLines, - index: 0 - }; // Handle any leading content + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; + // Handle any leading content insertLeading(hunk, mine, their); - insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + insertLeading(hunk, their, mine); + // Now in the overlap content. Scan through and select the best changes from each. while (mine.index < mine.lines.length && their.index < their.lines.length) { var mineCurrent = mine.lines[mine.index], - theirCurrent = their.lines[their.index]; - + theirCurrent = their.lines[their.index]; if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { // Both modified ... mutualChange(hunk, mine, their); } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { var _hunk$lines; - // Mine inserted (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { var _hunk$lines2; - // Theirs inserted (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { @@ -15217,57 +15763,44 @@ module.exports = function defineDataProperty( // Context mismatch conflict(hunk, collectChange(mine), collectChange(their)); } - } // Now push anything that may be remaining - + } + // Now push anything that may be remaining insertTrailing(hunk, mine); insertTrailing(hunk, their); calcLineCount(hunk); } - function mutualChange(hunk, mine, their) { var myChanges = collectChange(mine), - theirChanges = collectChange(their); - + theirChanges = collectChange(their); if (allRemoves(myChanges) && allRemoves(theirChanges)) { // Special case for remove changes that are supersets of one another if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { var _hunk$lines3; - (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); - return; } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { var _hunk$lines4; - (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); - return; } } else if (arrayEqual(myChanges, theirChanges)) { var _hunk$lines5; - (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); - return; } - conflict(hunk, myChanges, theirChanges); } - function removal(hunk, mine, their, swap) { var myChanges = collectChange(mine), - theirChanges = collectContext(their, myChanges); - + theirChanges = collectContext(their, myChanges); if (theirChanges.merged) { var _hunk$lines6; - (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); } else { conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); } } - function conflict(hunk, mine, their) { hunk.conflict = true; hunk.lines.push({ @@ -15276,7 +15809,6 @@ module.exports = function defineDataProperty( theirs: their }); } - function insertLeading(hunk, insert, their) { while (insert.offset < their.offset && insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; @@ -15284,25 +15816,22 @@ module.exports = function defineDataProperty( insert.offset++; } } - function insertTrailing(hunk, insert) { while (insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; hunk.lines.push(line); } } - function collectChange(state) { var ret = [], - operation = state.lines[state.index][0]; - + operation = state.lines[state.index][0]; while (state.index < state.lines.length) { - var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + var line = state.lines[state.index]; + // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. if (operation === '-' && line[0] === '+') { operation = '+'; } - if (operation === line[0]) { ret.push(line); state.index++; @@ -15310,39 +15839,35 @@ module.exports = function defineDataProperty( break; } } - return ret; } - function collectContext(state, matchChanges) { var changes = [], - merged = [], - matchIndex = 0, - contextChanges = false, - conflicted = false; - + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; while (matchIndex < matchChanges.length && state.index < state.lines.length) { var change = state.lines[state.index], - match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + match = matchChanges[matchIndex]; + // Once we've hit our add, then we are done if (match[0] === '+') { break; } - contextChanges = contextChanges || change[0] !== ' '; merged.push(match); - matchIndex++; // Consume any additions in the other block as a conflict to attempt - // to pull in the remaining context after this + matchIndex++; + // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this if (change[0] === '+') { conflicted = true; - while (change[0] === '+') { changes.push(change); change = state.lines[++state.index]; } } - if (match.substr(1) === change.substr(1)) { changes.push(change); state.index++; @@ -15350,44 +15875,35 @@ module.exports = function defineDataProperty( conflicted = true; } } - if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { conflicted = true; } - if (conflicted) { return changes; } - while (matchIndex < matchChanges.length) { merged.push(matchChanges[matchIndex++]); } - return { merged: merged, changes: changes }; } - function allRemoves(changes) { return changes.reduce(function (prev, change) { return prev && change[0] === '-'; }, true); } - function skipRemoveSuperset(state, removeChanges, delta) { for (var i = 0; i < delta; i++) { var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); - if (state.lines[state.index + i] !== ' ' + changeContent) { return false; } } - state.index += delta; return true; } - function calcOldNewLineCount(lines) { var oldLines = 0; var newLines = 0; @@ -15395,7 +15911,6 @@ module.exports = function defineDataProperty( if (typeof line !== 'string') { var myCount = calcOldNewLineCount(line.mine); var theirCount = calcOldNewLineCount(line.theirs); - if (oldLines !== undefined) { if (myCount.oldLines === theirCount.oldLines) { oldLines += myCount.oldLines; @@ -15403,7 +15918,6 @@ module.exports = function defineDataProperty( oldLines = undefined; } } - if (newLines !== undefined) { if (myCount.newLines === theirCount.newLines) { newLines += myCount.newLines; @@ -15415,7 +15929,6 @@ module.exports = function defineDataProperty( if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { newLines++; } - if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { oldLines++; } @@ -15431,7 +15944,6 @@ module.exports = function defineDataProperty( if (Array.isArray(structuredPatch)) { return structuredPatch.map(reversePatch).reverse(); } - return _objectSpread2(_objectSpread2({}, structuredPatch), {}, { oldFileName: structuredPatch.newFileName, oldHeader: structuredPatch.newHeader, @@ -15443,16 +15955,13 @@ module.exports = function defineDataProperty( oldStart: hunk.newStart, newLines: hunk.oldLines, newStart: hunk.oldStart, - linedelimiters: hunk.linedelimiters, lines: hunk.lines.map(function (l) { if (l.startsWith('-')) { return "+".concat(l.slice(1)); } - if (l.startsWith('+')) { return "-".concat(l.slice(1)); } - return l; }) }; @@ -15463,12 +15972,10 @@ module.exports = function defineDataProperty( // See: http://code.google.com/p/google-diff-match-patch/wiki/API function convertChangesToDMP(changes) { var ret = [], - change, - operation; - + change, + operation; for (var i = 0; i < changes.length; i++) { change = changes[i]; - if (change.added) { operation = 1; } else if (change.removed) { @@ -15476,37 +15983,29 @@ module.exports = function defineDataProperty( } else { operation = 0; } - ret.push([operation, change.value]); } - return ret; } function convertChangesToXML(changes) { var ret = []; - for (var i = 0; i < changes.length; i++) { var change = changes[i]; - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } - ret.push(escapeHTML(change.value)); - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } } - return ret.join(''); } - function escapeHTML(s) { var n = s; n = n.replace(/&/g, '&'); @@ -15539,11 +16038,9 @@ module.exports = function defineDataProperty( exports.reversePatch = reversePatch; exports.structuredPatch = structuredPatch; - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); +})); -},{}],121:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -15561,49 +16058,49 @@ if ($defineProperty) { module.exports = $defineProperty; -},{"get-intrinsic":131}],122:[function(require,module,exports){ +},{"get-intrinsic":113}],104:[function(require,module,exports){ 'use strict'; /** @type {import('./eval')} */ module.exports = EvalError; -},{}],123:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ 'use strict'; /** @type {import('.')} */ module.exports = Error; -},{}],124:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ 'use strict'; /** @type {import('./range')} */ module.exports = RangeError; -},{}],125:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ 'use strict'; /** @type {import('./ref')} */ module.exports = ReferenceError; -},{}],126:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ 'use strict'; /** @type {import('./syntax')} */ module.exports = SyntaxError; -},{}],127:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ 'use strict'; /** @type {import('./type')} */ module.exports = TypeError; -},{}],128:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ 'use strict'; /** @type {import('./uri')} */ module.exports = URIError; -},{}],129:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ 'use strict'; /* eslint no-invalid-this: 1 */ @@ -15689,14 +16186,14 @@ module.exports = function bind(that) { return bound; }; -},{}],130:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); module.exports = Function.prototype.bind || implementation; -},{"./implementation":129}],131:[function(require,module,exports){ +},{"./implementation":111}],113:[function(require,module,exports){ 'use strict'; var undefined; @@ -16057,7 +16554,7 @@ module.exports = function GetIntrinsic(name, allowMissing) { return value; }; -},{"es-errors":123,"es-errors/eval":122,"es-errors/range":124,"es-errors/ref":125,"es-errors/syntax":126,"es-errors/type":127,"es-errors/uri":128,"function-bind":130,"has-proto":134,"has-symbols":135,"hasown":137}],132:[function(require,module,exports){ +},{"es-errors":105,"es-errors/eval":104,"es-errors/range":106,"es-errors/ref":107,"es-errors/syntax":108,"es-errors/type":109,"es-errors/uri":110,"function-bind":112,"has-proto":116,"has-symbols":117,"hasown":119}],114:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -16075,7 +16572,7 @@ if ($gOPD) { module.exports = $gOPD; -},{"get-intrinsic":131}],133:[function(require,module,exports){ +},{"get-intrinsic":113}],115:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -16099,7 +16596,7 @@ hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBu module.exports = hasPropertyDescriptors; -},{"es-define-property":121}],134:[function(require,module,exports){ +},{"es-define-property":103}],116:[function(require,module,exports){ 'use strict'; var test = { @@ -16116,7 +16613,7 @@ module.exports = function hasProto() { && !(test instanceof $Object); }; -},{}],135:[function(require,module,exports){ +},{}],117:[function(require,module,exports){ 'use strict'; var origSymbol = typeof Symbol !== 'undefined' && Symbol; @@ -16131,7 +16628,7 @@ module.exports = function hasNativeSymbols() { return hasSymbolSham(); }; -},{"./shams":136}],136:[function(require,module,exports){ +},{"./shams":118}],118:[function(require,module,exports){ 'use strict'; /* eslint complexity: [2, 18], max-statements: [2, 33] */ @@ -16175,7 +16672,7 @@ module.exports = function hasSymbols() { return true; }; -},{}],137:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ 'use strict'; var call = Function.prototype.call; @@ -16185,7 +16682,7 @@ var bind = require('function-bind'); /** @type {import('.')} */ module.exports = bind.call(call, $hasOwn); -},{"function-bind":130}],138:[function(require,module,exports){ +},{"function-bind":112}],120:[function(require,module,exports){ module.exports = extend; /* @@ -16259,7 +16756,7 @@ function isUnextendable(val) { return !val || (typeof val != 'object' && typeof val != 'function'); } -},{}],139:[function(require,module,exports){ +},{}],121:[function(require,module,exports){ /** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` @@ -17192,7 +17689,7 @@ function get(object, path, defaultValue) { module.exports = get; -},{}],140:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ "use strict"; // cache a reference to setTimeout, so that our reference won't be stubbed out @@ -17247,7 +17744,7 @@ function configureLogger(config) { module.exports = configureLogger; -},{}],141:[function(require,module,exports){ +},{}],123:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17263,7 +17760,7 @@ CustomEvent.prototype.constructor = CustomEvent; module.exports = CustomEvent; -},{"./event":143}],142:[function(require,module,exports){ +},{"./event":125}],124:[function(require,module,exports){ "use strict"; function flattenOptions(options) { @@ -17387,7 +17884,7 @@ var EventTarget = { module.exports = EventTarget; -},{}],143:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ "use strict"; function Event(type, bubbles, cancelable, target) { @@ -17413,7 +17910,7 @@ Event.prototype = { module.exports = Event; -},{}],144:[function(require,module,exports){ +},{}],126:[function(require,module,exports){ "use strict"; module.exports = { @@ -17423,7 +17920,7 @@ module.exports = { EventTarget: require("./event-target"), }; -},{"./custom-event":141,"./event":143,"./event-target":142,"./progress-event":145}],145:[function(require,module,exports){ +},{"./custom-event":123,"./event":125,"./event-target":124,"./progress-event":127}],127:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17447,7 +17944,7 @@ ProgressEvent.prototype.constructor = ProgressEvent; module.exports = ProgressEvent; -},{"./event":143}],146:[function(require,module,exports){ +},{"./event":125}],128:[function(require,module,exports){ "use strict"; var FakeTimers = require("@sinonjs/fake-timers"); @@ -17522,7 +18019,7 @@ fakeServerWithClock.restore = function restore() { module.exports = fakeServerWithClock; -},{"./index":147,"@sinonjs/fake-timers":60}],147:[function(require,module,exports){ +},{"./index":129,"@sinonjs/fake-timers":60}],129:[function(require,module,exports){ "use strict"; var fakeXhr = require("../fake-xhr"); @@ -17675,7 +18172,6 @@ var fakeServer = { fakeHTTPMethods: true, logger: true, unsafeHeadersEnabled: true, - legacyRoutes: true, }; // eslint-disable-next-line no-param-reassign @@ -17739,8 +18235,6 @@ var fakeServer = { log: log, - legacyRoutes: true, - respondWith: function respondWith(method, url, body) { if (arguments.length === 1 && typeof method !== "function") { this.response = responseArray(method); @@ -17775,22 +18269,18 @@ var fakeServer = { url = url.replace("://", "\\://"); } if (/\*/.test(url)) { + // Uses the new syntax for repeating parameters in path-to-regexp, + // see https://github.com/pillarjs/path-to-regexp#unexpected--or- // eslint-disable-next-line no-param-reassign - url = url.replace(/\/\*/g, "/(.*)"); - } - - if (this.legacyRoutes) { - if (url.includes("?")) { - // eslint-disable-next-line no-param-reassign - url = url.replace("?", "\\?"); - } + url = url.replace(/\/\*/g, "/*path"); } } - push.call(this.responses, { method: method, url: - typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + typeof url === "string" && url !== "" + ? pathToRegexp(url).regexp + : url, response: typeof body === "function" ? body : responseArray(body), }); }, @@ -17885,7 +18375,7 @@ var fakeServer = { module.exports = fakeServer; -},{"../configure-logger":140,"../fake-xhr":150,"./log":148,"path-to-regexp":157}],148:[function(require,module,exports){ +},{"../configure-logger":122,"../fake-xhr":132,"./log":130,"path-to-regexp":139}],130:[function(require,module,exports){ "use strict"; var inspect = require("util").inspect; @@ -17903,7 +18393,7 @@ function log(response, request) { module.exports = log; -},{"util":116}],149:[function(require,module,exports){ +},{"util":98}],131:[function(require,module,exports){ "use strict"; exports.isSupported = (function () { @@ -17914,7 +18404,7 @@ exports.isSupported = (function () { } })(); -},{}],150:[function(require,module,exports){ +},{}],132:[function(require,module,exports){ "use strict"; var GlobalTextEncoder = @@ -18843,7 +19333,7 @@ module.exports = extend(fakeXMLHttpRequestFor(globalObject), { fakeXMLHttpRequestFor: fakeXMLHttpRequestFor, }); -},{"../configure-logger":140,"../event":144,"./blob":149,"@sinonjs/commons":47,"@sinonjs/text-encoding":107,"just-extend":138}],151:[function(require,module,exports){ +},{"../configure-logger":122,"../event":126,"./blob":131,"@sinonjs/commons":47,"@sinonjs/text-encoding":89,"just-extend":120}],133:[function(require,module,exports){ "use strict"; module.exports = { @@ -18852,7 +19342,7 @@ module.exports = { fakeXhr: require("./fake-xhr"), }; -},{"./fake-server":147,"./fake-server/fake-server-with-clock":146,"./fake-xhr":150}],152:[function(require,module,exports){ +},{"./fake-server":129,"./fake-server/fake-server-with-clock":128,"./fake-xhr":132}],134:[function(require,module,exports){ 'use strict'; var keysShim; @@ -18976,7 +19466,7 @@ if (!Object.keys) { } module.exports = keysShim; -},{"./isArguments":154}],153:[function(require,module,exports){ +},{"./isArguments":136}],135:[function(require,module,exports){ 'use strict'; var slice = Array.prototype.slice; @@ -19010,7 +19500,7 @@ keysShim.shim = function shimObjectKeys() { module.exports = keysShim; -},{"./implementation":152,"./isArguments":154}],154:[function(require,module,exports){ +},{"./implementation":134,"./isArguments":136}],136:[function(require,module,exports){ 'use strict'; var toStr = Object.prototype.toString; @@ -19029,7 +19519,7 @@ module.exports = function isArguments(value) { return isArgs; }; -},{}],155:[function(require,module,exports){ +},{}],137:[function(require,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es6-shim @@ -19077,7 +19567,7 @@ module.exports = function assign(target, source1) { return to; // step 4 }; -},{"call-bind/callBound":117,"has-symbols/shams":136,"object-keys":153}],156:[function(require,module,exports){ +},{"call-bind/callBound":99,"has-symbols/shams":118,"object-keys":135}],138:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); @@ -19134,604 +19624,421 @@ module.exports = function getPolyfill() { return Object.assign; }; -},{"./implementation":155}],157:[function(require,module,exports){ +},{"./implementation":137}],139:[function(require,module,exports){ "use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _Iter_peek; Object.defineProperty(exports, "__esModule", { value: true }); -exports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0; +exports.TokenData = void 0; +exports.parse = parse; +exports.compile = compile; +exports.match = match; +exports.pathToRegexp = pathToRegexp; +exports.stringify = stringify; +const DEFAULT_DELIMITER = "/"; +const NOOP_VALUE = (value) => value; +const ID_START = /^[$_\p{ID_Start}]$/u; +const ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u; +const DEBUG_URL = "https://git.new/pathToRegexpError"; +const SIMPLE_TOKENS = { + // Groups. + "{": "{", + "}": "}", + // Reserved. + "(": "(", + ")": ")", + "[": "[", + "]": "]", + "+": "+", + "?": "?", + "!": "!", +}; +/** + * Escape text for stringify to path. + */ +function escapeText(str) { + return str.replace(/[{}()\[\]+?!:*]/g, "\\$&"); +} +/** + * Escape a regular expression string. + */ +function escape(str) { + return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&"); +} /** * Tokenize input string. */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; +function* lexer(str) { + const chars = [...str]; + let i = 0; + function name() { + let value = ""; + if (ID_START.test(chars[++i])) { + value += chars[i]; + while (ID_CONTINUE.test(chars[++i])) { + value += chars[i]; } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i)); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at ".concat(j)); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; + else if (chars[i] === '"') { + let pos = i; + while (i < chars.length) { + if (chars[++i] === '"') { + i++; + pos = 0; + break; } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } + if (chars[i] === "\\") { + value += chars[++i]; } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j)); - } + else { + value += chars[i]; } - pattern += str[j++]; } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i)); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; + if (pos) { + throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`); + } } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); + if (!value) { + throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`); + } + return value; } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; + while (i < chars.length) { + const value = chars[i]; + const type = SIMPLE_TOKENS[value]; + if (type) { + yield { type, index: i++, value }; + } + else if (value === "\\") { + yield { type: "ESCAPED", index: i++, value: chars[i++] }; + } + else if (value === ":") { + const value = name(); + yield { type: "PARAM", index: i, value }; + } + else if (value === "*") { + const value = name(); + yield { type: "WILDCARD", index: i, value }; + } + else { + yield { type: "CHAR", index: i, value: chars[i++] }; + } + } + return { type: "END", index: i, value: "" }; } -/** - * Parse a string for the raw tokens. - */ -function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); +class Iter { + constructor(tokens) { + this.tokens = tokens; + _Iter_peek.set(this, void 0); + } + peek() { + if (!__classPrivateFieldGet(this, _Iter_peek, "f")) { + const next = this.tokens.next(); + __classPrivateFieldSet(this, _Iter_peek, next.value, "f"); + } + return __classPrivateFieldGet(this, _Iter_peek, "f"); + } + tryConsume(type) { + const token = this.peek(); + if (token.type !== type) + return; + __classPrivateFieldSet(this, _Iter_peek, undefined, "f"); // Reset after consumed. + return token.value; + } + consume(type) { + const value = this.tryConsume(type); if (value !== undefined) return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function () { - var result = ""; - var value; - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + const { type: nextType, index } = this.peek(); + throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`); + } + text() { + let result = ""; + let value; + while ((value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED"))) { result += value; } return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - mustConsume("END"); } - return result; } -exports.parse = parse; +_Iter_peek = new WeakMap(); /** - * Compile a string to a template function for the path. + * Tokenized path instance. */ -function compile(str, options) { - return tokensToFunction(parse(str, options), options); +class TokenData { + constructor(tokens) { + this.tokens = tokens; + } } -exports.compile = compile; +exports.TokenData = TokenData; /** - * Expose a method for transforming tokens into the path function. + * Parse a string for the raw tokens. */ -function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; +function parse(str, options = {}) { + const { encodePath = NOOP_VALUE } = options; + const it = new Iter(lexer(str)); + function consume(endType) { + const tokens = []; + while (true) { + const path = it.text(); + if (path) + tokens.push({ type: "text", value: encodePath(path) }); + const param = it.tryConsume("PARAM"); + if (param) { + tokens.push({ + type: "param", + name: param, + }); continue; } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array")); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"".concat(token.name, "\" to not be empty")); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - } + const wildcard = it.tryConsume("WILDCARD"); + if (wildcard) { + tokens.push({ + type: "wildcard", + name: wildcard, + }); continue; } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; + const open = it.tryConsume("{"); + if (open) { + tokens.push({ + type: "group", + tokens: consume("}"), + }); continue; } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage)); + it.consume(endType); + return tokens; } - return path; - }; + } + const tokens = consume("END"); + return new TokenData(tokens); } -exports.tokensToFunction = tokensToFunction; /** - * Create path match function from `path-to-regexp` spec. + * Compile a string to a template function for the path. */ -function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); +function compile(path, options = {}) { + const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const data = path instanceof TokenData ? path : parse(path, options); + const fn = tokensToFunction(data.tokens, delimiter, encode); + return function path(data = {}) { + const [path, ...missing] = fn(data); + if (missing.length) { + throw new TypeError(`Missing parameters: ${missing.join(", ")}`); + } + return path; + }; +} +function tokensToFunction(tokens, delimiter, encode) { + const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode)); + return (data) => { + const result = [""]; + for (const encoder of encoders) { + const [value, ...extras] = encoder(data); + result[0] += value; + result.push(...extras); + } + return result; + }; } -exports.match = match; /** - * Create a path match function from `path-to-regexp` output. + * Convert a single token into a path building function. */ -function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); +function tokenToFunction(token, delimiter, encode) { + if (token.type === "text") + return () => [token.value]; + if (token.type === "group") { + const fn = tokensToFunction(token.tokens, delimiter, encode); + return (data) => { + const [value, ...missing] = fn(data); + if (!missing.length) + return [value]; + return [""]; + }; + } + const encodeValue = encode || NOOP_VALUE; + if (token.type === "wildcard" && encode !== false) { + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (!Array.isArray(value) || value.length === 0) { + throw new TypeError(`Expected "${token.name}" to be a non-empty array`); } + return [ + value + .map((value, index) => { + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}/${index}" to be a string`); + } + return encodeValue(value); + }) + .join(delimiter), + ]; }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); + } + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}" to be a string`); } - return { path: path, index: index, params: params }; + return [encodeValue(value)]; }; } -exports.regexpToFunction = regexpToFunction; /** - * Escape a regular expression string. + * Transform a path into a match function. */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +function match(path, options = {}) { + const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const { regexp, keys } = pathToRegexp(path, options); + const decoders = keys.map((key) => { + if (decode === false) + return NOOP_VALUE; + if (key.type === "param") + return decode; + return (value) => value.split(delimiter).map(decode); + }); + return function match(input) { + const m = regexp.exec(input); + if (!m) + return false; + const path = m[0]; + const params = Object.create(null); + for (let i = 1; i < m.length; i++) { + if (m[i] === undefined) + continue; + const key = keys[i - 1]; + const decoder = decoders[i - 1]; + params[key.name] = decoder(m[i]); + } + return { path, params }; + }; } -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; +function pathToRegexp(path, options = {}) { + const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options; + const keys = []; + const sources = []; + const flags = sensitive ? "s" : "is"; + const paths = Array.isArray(path) ? path : [path]; + const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options)); + for (const { tokens } of items) { + for (const seq of flatten(tokens, 0, [])) { + const regexp = sequenceToRegExp(seq, delimiter, keys); + sources.push(regexp); + } + } + let pattern = `^(?:${sources.join("|")})`; + if (trailing) + pattern += `(?:${escape(delimiter)}$)?`; + pattern += end ? "$" : `(?=${escape(delimiter)}|$)`; + const regexp = new RegExp(pattern, flags); + return { regexp, keys }; } /** - * Pull out keys from a regexp. + * Generate a flat list of sequence tokens from the given tokens. */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "", - }); - execResult = groupsRegex.exec(path.source); +function* flatten(tokens, index, init) { + if (index === tokens.length) { + return yield init; } - return path; -} -/** - * Transform an array into a regexp. - */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); -} -/** - * Expose a function for taking tokens and returning a RegExp. - */ -function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } - else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } - else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } - else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } - } - else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); - } + const token = tokens[index]; + if (token.type === "group") { + const fork = init.slice(); + for (const seq of flatten(token.tokens, 0, fork)) { + yield* flatten(tokens, index + 1, seq); } } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 - : endToken === undefined; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } + init.push(token); } - return new RegExp(route, flags(options)); + yield* flatten(tokens, index + 1, init); } -exports.tokensToRegexp = tokensToRegexp; /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Transform a flat sequence of tokens into a regular expression. */ -function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); -} -exports.pathToRegexp = pathToRegexp; - -},{}],158:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); +function sequenceToRegExp(tokens, delimiter, keys) { + let result = ""; + let backtrack = ""; + let isSafeSegmentParam = true; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token.type === "text") { + result += escape(token.value); + backtrack = token.value; + isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter)); + continue; } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); + if (token.type === "param" || token.type === "wildcard") { + if (!isSafeSegmentParam && !backtrack) { + throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`); + } + if (token.type === "param") { + result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`; + } + else { + result += `(.+)`; + } + keys.push(token); + backtrack = ""; + isSafeSegmentParam = false; + continue; } } - - - + return result; } -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } +function negate(delimiter, backtrack) { + const values = [delimiter, backtrack].filter(Boolean); + const isSimple = values.every((value) => value.length === 1); + if (isSimple) + return `[^${escape(values.join(""))}]`; + return `(?:(?!${values.map(escape).join("|")}).)`; } - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); +/** + * Stringify token data into a path string. + */ +function stringify(data) { + return data.tokens + .map(function stringifyToken(token, index, tokens) { + if (token.type === "text") + return escapeText(token.value); + if (token.type === "group") { + return `{${token.tokens.map(stringifyToken).join("")}}`; + } + const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]); + const key = isSafe ? token.name : JSON.stringify(token.name); + if (token.type === "param") + return `:${key}`; + if (token.type === "wildcard") + return `*${key}`; + throw new TypeError(`Unexpected token: ${token}`); + }) + .join(""); +} +function isNameSafe(name) { + const [first, ...rest] = name; + if (!ID_START.test(first)) + return false; + return rest.every((char) => ID_CONTINUE.test(char)); } - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; +function isNextNameSafe(token) { + if (token?.type !== "text") + return true; + return !ID_CONTINUE.test(token.value[0]); } -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; -},{}],159:[function(require,module,exports){ +},{}],140:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -19775,91 +20082,14 @@ module.exports = function setFunctionLength(fn, length) { return fn; }; -},{"define-data-property":119,"es-errors/type":127,"get-intrinsic":131,"gopd":132,"has-property-descriptors":133}],160:[function(require,module,exports){ +},{"define-data-property":101,"es-errors/type":109,"get-intrinsic":113,"gopd":114,"has-property-descriptors":115}],141:[function(require,module,exports){ 'use strict'; module.exports = { stdout: false, stderr: false }; -},{}],161:[function(require,module,exports){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -},{"process/browser.js":158}],162:[function(require,module,exports){ +},{}],142:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : diff --git a/node_modules/sinon/pkg/sinon.js b/node_modules/sinon/pkg/sinon.js index 634dbbb094..71c459476e 100644 --- a/node_modules/sinon/pkg/sinon.js +++ b/node_modules/sinon/pkg/sinon.js @@ -1,4 +1,4 @@ -/* Sinon.JS 18.0.0, 2024-05-15, @license BSD-3 */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i} abortListenerMap */ /* eslint-enable jsdoc/require-property-description */ @@ -5534,6 +5541,7 @@ if (typeof require === "function" && typeof module === "object") { * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + * @property {boolean} [ignoreMissingTimers] default is false, meaning asking to fake timers that are not present will throw an error */ /* eslint-disable jsdoc/require-property-description */ @@ -5578,16 +5586,26 @@ function withGlobal(_global) { const NOOP_ARRAY = function () { return []; }; - const timeoutResult = _global.setTimeout(NOOP, 0); - const addTimerReturnsObject = typeof timeoutResult === "object"; - const hrtimePresent = + const isPresent = {}; + let timeoutResult, + addTimerReturnsObject = false; + + if (_global.setTimeout) { + isPresent.setTimeout = true; + timeoutResult = _global.setTimeout(NOOP, 0); + addTimerReturnsObject = typeof timeoutResult === "object"; + } + isPresent.clearTimeout = Boolean(_global.clearTimeout); + isPresent.setInterval = Boolean(_global.setInterval); + isPresent.clearInterval = Boolean(_global.clearInterval); + isPresent.hrtime = _global.process && typeof _global.process.hrtime === "function"; - const hrtimeBigintPresent = - hrtimePresent && typeof _global.process.hrtime.bigint === "function"; - const nextTickPresent = + isPresent.hrtimeBigint = + isPresent.hrtime && typeof _global.process.hrtime.bigint === "function"; + isPresent.nextTick = _global.process && typeof _global.process.nextTick === "function"; const utilPromisify = _global.process && require("util").promisify; - const performancePresent = + isPresent.performance = _global.performance && typeof _global.performance.now === "function"; const hasPerformancePrototype = _global.Performance && @@ -5596,29 +5614,60 @@ function withGlobal(_global) { _global.performance && _global.performance.constructor && _global.performance.constructor.prototype; - const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); - const requestAnimationFramePresent = + isPresent.queueMicrotask = _global.hasOwnProperty("queueMicrotask"); + isPresent.requestAnimationFrame = _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"; - const cancelAnimationFramePresent = + isPresent.cancelAnimationFrame = _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"; - const requestIdleCallbackPresent = + isPresent.requestIdleCallback = _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"; - const cancelIdleCallbackPresent = + isPresent.cancelIdleCallbackPresent = _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"; - const setImmediatePresent = + isPresent.setImmediate = _global.setImmediate && typeof _global.setImmediate === "function"; - const intlPresent = _global.Intl && typeof _global.Intl === "object"; + isPresent.clearImmediate = + _global.clearImmediate && typeof _global.clearImmediate === "function"; + isPresent.Intl = _global.Intl && typeof _global.Intl === "object"; - _global.clearTimeout(timeoutResult); + if (_global.clearTimeout) { + _global.clearTimeout(timeoutResult); + } const NativeDate = _global.Date; const NativeIntl = _global.Intl; let uniqueTimerId = idCounterStart; + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", + ); + } + isPresent.Date = true; + + /** + * The PerformanceEntry object encapsulates a single performance metric + * that is part of the browser's performance timeline. + * + * This is an object returned by the `mark` and `measure` methods on the Performance prototype + */ + class FakePerformanceEntry { + constructor(name, entryType, startTime, duration) { + this.name = name; + this.entryType = entryType; + this.startTime = startTime; + this.duration = duration; + } + + toJSON() { + return JSON.stringify({ ...this }); + } + } + /** * @param {number} num * @returns {boolean} @@ -5803,109 +5852,76 @@ function withGlobal(_global) { return infiniteLoopError; } - /** - * @param {Date} target - * @param {Date} source - * @returns {Date} the target after modifications - */ - function mirrorDateProperties(target, source) { - let prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + class ClockDate extends NativeDate { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * @returns void + */ + // eslint-disable-next-line no-unused-vars + constructor(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + if (arguments.length === 0) { + super(ClockDate.clock.now); + } else { + super(...arguments); + } + } + + static [Symbol.hasInstance](instance) { + return instance instanceof NativeDate; } } - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; + ClockDate.isFake = true; + + if (NativeDate.now) { + ClockDate.now = function now() { + return ClockDate.clock.now; }; - } else { - delete target.now; } - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); + if (NativeDate.toSource) { + ClockDate.toSource = function toSource() { + return NativeDate.toSource(); }; - } else { - delete target.toSource; } - // set special toString implementation - target.toString = function toString() { - return source.toString(); + ClockDate.toString = function toString() { + return NativeDate.toString(); }; - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - target.isFake = true; - - return target; - } - - //eslint-disable-next-line jsdoc/require-jsdoc - function createDate() { + // noinspection UnnecessaryLocalVariableJS /** - * @param {number} year - * @param {number} month - * @param {number} date - * @param {number} hour - * @param {number} minute - * @param {number} second - * @param {number} ms - * @returns {Date} + * A normal Class constructor cannot be called without `new`, but Date can, so we need + * to wrap it in a Proxy in order to ensure this functionality of Date is kept intact + * + * @type {ClockDate} */ - function ClockDate(year, month, date, hour, minute, second, ms) { - // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. - // This remains so in the 10th edition of 2019 as well. - if (!(this instanceof ClockDate)) { - return new NativeDate(ClockDate.clock.now).toString(); - } - - // if Date is called as a constructor with 'new' keyword - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ); - default: - return new NativeDate( - year, - month, - date, - hour, - minute, - second, - ms, + const ClockDateProxy = new Proxy(ClockDate, { + // handler for [[Call]] invocations (i.e. not using `new`) + apply() { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (this instanceof ClockDate) { + throw new TypeError( + "A Proxy should only capture `new` calls with the `construct` handler. This is not supposed to be possible, so check the logic.", ); - } - } + } + + return new NativeDate(ClockDate.clock.now).toString(); + }, + }); - return mirrorDateProperties(ClockDate, NativeDate); + return ClockDateProxy; } /** @@ -6358,6 +6374,16 @@ function withGlobal(_global) { timersModule[entry.methodName] = entry.original; } } + if (clock.timersPromisesModuleMethods !== undefined) { + for ( + let j = 0; + j < clock.timersPromisesModuleMethods.length; + j++ + ) { + const entry = clock.timersPromisesModuleMethods[j]; + timersPromisesModule[entry.methodName] = entry.original; + } + } } if (config.shouldAdvanceTime === true) { @@ -6367,6 +6393,11 @@ function withGlobal(_global) { // Prevent multiple executions which will completely remove these props clock.methods = []; + for (const [listener, signal] of clock.abortListenerMap.entries()) { + signal.removeEventListener("abort", listener); + clock.abortListenerMap.delete(listener); + } + // return pending timers, to enable checking what timers remained on uninstall if (!clock.timers) { return []; @@ -6389,8 +6420,7 @@ function withGlobal(_global) { clock[`_${method}`] = target[method]; if (method === "Date") { - const date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; + target[method] = clock[method]; } else if (method === "Intl") { target[method] = clock[method]; } else if (method === "performance") { @@ -6469,44 +6499,47 @@ function withGlobal(_global) { Date: _global.Date, }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { timers.setImmediate = _global.setImmediate; + } + + if (isPresent.clearImmediate) { timers.clearImmediate = _global.clearImmediate; } - if (hrtimePresent) { + if (isPresent.hrtime) { timers.hrtime = _global.process.hrtime; } - if (nextTickPresent) { + if (isPresent.nextTick) { timers.nextTick = _global.process.nextTick; } - if (performancePresent) { + if (isPresent.performance) { timers.performance = _global.performance; } - if (requestAnimationFramePresent) { + if (isPresent.requestAnimationFrame) { timers.requestAnimationFrame = _global.requestAnimationFrame; } - if (queueMicrotaskPresent) { - timers.queueMicrotask = true; + if (isPresent.queueMicrotask) { + timers.queueMicrotask = _global.queueMicrotask; } - if (cancelAnimationFramePresent) { + if (isPresent.cancelAnimationFrame) { timers.cancelAnimationFrame = _global.cancelAnimationFrame; } - if (requestIdleCallbackPresent) { + if (isPresent.requestIdleCallback) { timers.requestIdleCallback = _global.requestIdleCallback; } - if (cancelIdleCallbackPresent) { + if (isPresent.cancelIdleCallback) { timers.cancelIdleCallback = _global.cancelIdleCallback; } - if (intlPresent) { + if (isPresent.Intl) { timers.Intl = _global.Intl; } @@ -6525,13 +6558,6 @@ function withGlobal(_global) { let nanos = 0; const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] - if (NativeDate === undefined) { - throw new Error( - "The global scope doesn't have a `Date` object" + - " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)", - ); - } - const clock = { now: start, Date: createDate(), @@ -6592,14 +6618,14 @@ function withGlobal(_global) { return millis; } - if (hrtimeBigintPresent) { + if (isPresent.hrtimeBigint) { hrtime.bigint = function () { const parts = hrtime(); return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line }; } - if (intlPresent) { + if (isPresent.Intl) { clock.Intl = createIntl(); clock.Intl.clock = clock; } @@ -6684,7 +6710,7 @@ function withGlobal(_global) { return clearTimer(clock, timerId, "Interval"); }; - if (setImmediatePresent) { + if (isPresent.setImmediate) { clock.setImmediate = function setImmediate(func) { return addTimer(clock, { func: func, @@ -7123,12 +7149,12 @@ function withGlobal(_global) { clock.tick(ms); }; - if (performancePresent) { + if (isPresent.performance) { clock.performance = Object.create(null); clock.performance.now = fakePerformanceNow; } - if (hrtimePresent) { + if (isPresent.hrtime) { clock.hrtime = hrtime; } @@ -7176,6 +7202,20 @@ function withGlobal(_global) { ); } + /** + * @param {string} timer/object the name of the thing that is not present + * @param timer + */ + function handleMissingTimer(timer) { + if (config.ignoreMissingTimers) { + return; + } + + throw new ReferenceError( + `non-existent timers and/or objects cannot be faked: '${timer}'`, + ); + } + let i, l; const clock = createClock(config.now, config.loopLimit); clock.shouldClearNativeTimers = config.shouldClearNativeTimers; @@ -7184,13 +7224,12 @@ function withGlobal(_global) { return uninstall(clock, config); }; + clock.abortListenerMap = new Map(); + clock.methods = config.toFake || []; if (clock.methods.length === 0) { - // do not fake nextTick by default - GitHub#126 - clock.methods = Object.keys(timers).filter(function (key) { - return key !== "nextTick" && key !== "queueMicrotask"; - }); + clock.methods = Object.keys(timers); } if (config.shouldAdvanceTime === true) { @@ -7224,18 +7263,30 @@ function withGlobal(_global) { : NOOP; } }); + // ensure `mark` returns a value that is valid + clock.performance.mark = (name) => + new FakePerformanceEntry(name, "mark", 0, 0); + clock.performance.measure = (name) => + new FakePerformanceEntry(name, "measure", 0, 100); } else if ((config.toFake || []).includes("performance")) { - // user explicitly tried to fake performance when not present - throw new ReferenceError( - "non-existent performance object cannot be faked", - ); + return handleMissingTimer("performance"); } } if (_global === globalObject && timersModule) { clock.timersModuleMethods = []; } + if (_global === globalObject && timersPromisesModule) { + clock.timersPromisesModuleMethods = []; + } for (i = 0, l = clock.methods.length; i < l; i++) { const nameOfMethodToReplace = clock.methods[i]; + + if (!isPresent[nameOfMethodToReplace]) { + handleMissingTimer(nameOfMethodToReplace); + // eslint-disable-next-line + continue; + } + if (nameOfMethodToReplace === "hrtime") { if ( _global.process && @@ -7265,6 +7316,239 @@ function withGlobal(_global) { timersModule[nameOfMethodToReplace] = _global[nameOfMethodToReplace]; } + if (clock.timersPromisesModuleMethods !== undefined) { + if (nameOfMethodToReplace === "setTimeout") { + clock.timersPromisesModuleMethods.push({ + methodName: "setTimeout", + original: timersPromisesModule.setTimeout, + }); + + timersPromisesModule.setTimeout = ( + delay, + value, + options = {}, + ) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearTimeout(handle); + reject(options.signal.reason); + }; + + const handle = clock.setTimeout(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }, delay); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setImmediate") { + clock.timersPromisesModuleMethods.push({ + methodName: "setImmediate", + original: timersPromisesModule.setImmediate, + }); + + timersPromisesModule.setImmediate = (value, options = {}) => + new Promise((resolve, reject) => { + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + // This is safe, there is no code path that leads to this function + // being invoked before handle has been assigned. + // eslint-disable-next-line no-use-before-define + clock.clearImmediate(handle); + reject(options.signal.reason); + }; + + const handle = clock.setImmediate(() => { + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + resolve(value); + }); + + if (options.signal) { + if (options.signal.aborted) { + abort(); + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + }); + } else if (nameOfMethodToReplace === "setInterval") { + clock.timersPromisesModuleMethods.push({ + methodName: "setInterval", + original: timersPromisesModule.setInterval, + }); + + timersPromisesModule.setInterval = ( + delay, + value, + options = {}, + ) => ({ + [Symbol.asyncIterator]: () => { + const createResolvable = () => { + let resolve, reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + promise.resolve = resolve; + promise.reject = reject; + return promise; + }; + + let done = false; + let hasThrown = false; + let returnCall; + let nextAvailable = 0; + const nextQueue = []; + + const handle = clock.setInterval(() => { + if (nextQueue.length > 0) { + nextQueue.shift().resolve(); + } else { + nextAvailable++; + } + }, delay); + + const abort = () => { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + + clock.clearInterval(handle); + done = true; + for (const resolvable of nextQueue) { + resolvable.resolve(); + } + }; + + if (options.signal) { + if (options.signal.aborted) { + done = true; + } else { + options.signal.addEventListener( + "abort", + abort, + ); + clock.abortListenerMap.set( + abort, + options.signal, + ); + } + } + + return { + next: async () => { + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + if (nextAvailable > 0) { + nextAvailable--; + return { done: false, value: value }; + } + + const resolvable = createResolvable(); + nextQueue.push(resolvable); + + await resolvable; + + if (returnCall && nextQueue.length === 0) { + returnCall.resolve(); + } + + if (options.signal?.aborted && !hasThrown) { + hasThrown = true; + throw options.signal.reason; + } + + if (done) { + return { done: true, value: undefined }; + } + + return { done: false, value: value }; + }, + return: async () => { + if (done) { + return { done: true, value: undefined }; + } + + if (nextQueue.length > 0) { + returnCall = createResolvable(); + await returnCall; + } + + clock.clearInterval(handle); + done = true; + + if (options.signal) { + options.signal.removeEventListener( + "abort", + abort, + ); + clock.abortListenerMap.delete(abort); + } + + return { done: true, value: undefined }; + }, + }; + }, + }); + } + } } return clock; @@ -7298,7 +7582,7 @@ exports.createClock = defaultImplementation.createClock; exports.install = defaultImplementation.install; exports.withGlobal = withGlobal; -},{"@sinonjs/commons":47,"timers":161,"util":116}],61:[function(require,module,exports){ +},{"@sinonjs/commons":47,"timers":undefined,"timers/promises":undefined,"util":98}],61:[function(require,module,exports){ "use strict"; var ARRAY_TYPES = [ @@ -7363,7 +7647,7 @@ function createMatcher(expectation, message) { if (arguments.length > 2) { throw new TypeError( - `Expected 1 or 2 arguments, received ${arguments.length}` + `Expected 1 or 2 arguments, received ${arguments.length}`, ); } @@ -7408,9 +7692,12 @@ createMatcher.falsy = createMatcher(function (actual) { }, "falsy"); createMatcher.same = function (expectation) { - return createMatcher(function (actual) { - return expectation === actual; - }, `same(${valueToString(expectation)})`); + return createMatcher( + function (actual) { + return expectation === actual; + }, + `same(${valueToString(expectation)})`, + ); }; createMatcher.in = function (arrayOfExpectations) { @@ -7418,11 +7705,14 @@ createMatcher.in = function (arrayOfExpectations) { throw new TypeError("array expected"); } - return createMatcher(function (actual) { - return some(arrayOfExpectations, function (expectation) { - return expectation === actual; - }); - }, `in(${valueToString(arrayOfExpectations)})`); + return createMatcher( + function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, + `in(${valueToString(arrayOfExpectations)})`, + ); }; createMatcher.typeOf = function (type) { @@ -7444,12 +7734,15 @@ createMatcher.instanceOf = function (type) { type, Symbol.hasInstance, "type", - "[Symbol.hasInstance]" + "[Symbol.hasInstance]", ); } - return createMatcher(function (actual) { - return actual instanceof type; - }, `instanceOf(${functionName(type) || objectToString(type)})`); + return createMatcher( + function (actual) { + return actual instanceof type; + }, + `instanceOf(${functionName(type) || objectToString(type)})`, + ); }; /** @@ -7578,111 +7871,137 @@ createMatcher.some = function (predicate) { createMatcher.array = createMatcher.typeOf("array"); createMatcher.array.deepEquals = function (expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.length === expectation.length; - return ( - typeOf(actual) === "array" && - sameLength && - every(actual, function (element, index) { - var expected = expectation[index]; - return typeOf(expected) === "array" && - typeOf(element) === "array" - ? createMatcher.array.deepEquals(expected).test(element) - : deepEqual(expected, element); - }) - ); - }, `deepEquals([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, + `deepEquals([${iterableToString(expectation)}])`, + ); }; createMatcher.array.startsWith = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[index] === expectedElement; - }) - ); - }, `startsWith([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, + `startsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.endsWith = function (expectation) { - return createMatcher(function (actual) { - // This indicates the index in which we should start matching - var offset = actual.length - expectation.length; + return createMatcher( + function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement, index) { - return actual[offset + index] === expectedElement; - }) - ); - }, `endsWith([${iterableToString(expectation)}])`); + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, + `endsWith([${iterableToString(expectation)}])`, + ); }; createMatcher.array.contains = function (expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "array" && - every(expectation, function (expectedElement) { - return arrayIndexOf(actual, expectedElement) !== -1; - }) - ); - }, `contains([${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, + `contains([${iterableToString(expectation)}])`, + ); }; createMatcher.map = createMatcher.typeOf("map"); createMatcher.map.deepEquals = function mapDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "map" && - sameLength && - every(actual, function (element, key) { - return expectation.has(key) && expectation.get(key) === element; - }) - ); - }, `deepEquals(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return ( + expectation.has(key) && expectation.get(key) === element + ); + }) + ); + }, + `deepEquals(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.map.contains = function mapContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "map" && - every(expectation, function (element, key) { - return actual.has(key) && actual.get(key) === element; - }) - ); - }, `contains(Map[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, + `contains(Map[${iterableToString(expectation)}])`, + ); }; createMatcher.set = createMatcher.typeOf("set"); createMatcher.set.deepEquals = function setDeepEquals(expectation) { - return createMatcher(function (actual) { - // Comparing lengths is the fastest way to spot a difference before iterating through every item - var sameLength = actual.size === expectation.size; - return ( - typeOf(actual) === "set" && - sameLength && - every(actual, function (element) { - return expectation.has(element); - }) - ); - }, `deepEquals(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, + `deepEquals(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.set.contains = function setContains(expectation) { - return createMatcher(function (actual) { - return ( - typeOf(actual) === "set" && - every(expectation, function (element) { - return actual.has(element); - }) - ); - }, `contains(Set[${iterableToString(expectation)}])`); + return createMatcher( + function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, + `contains(Set[${iterableToString(expectation)}])`, + ); }; createMatcher.bool = createMatcher.typeOf("boolean"); @@ -7696,7 +8015,7 @@ createMatcher.symbol = createMatcher.typeOf("symbol"); module.exports = createMatcher; -},{"./create-matcher/assert-matcher":63,"./create-matcher/assert-method-exists":64,"./create-matcher/assert-type":65,"./create-matcher/is-iterable":66,"./create-matcher/is-matcher":67,"./create-matcher/matcher-prototype":69,"./create-matcher/type-map":70,"./deep-equal":71,"./iterable-to-string":85,"@sinonjs/commons":94,"lodash.get":139}],63:[function(require,module,exports){ +},{"./create-matcher/assert-matcher":63,"./create-matcher/assert-method-exists":64,"./create-matcher/assert-type":65,"./create-matcher/is-iterable":66,"./create-matcher/is-matcher":67,"./create-matcher/matcher-prototype":69,"./create-matcher/type-map":70,"./deep-equal":71,"./iterable-to-string":85,"@sinonjs/commons":47,"lodash.get":121}],63:[function(require,module,exports){ "use strict"; var isMatcher = require("./is-matcher"); @@ -7755,14 +8074,14 @@ function assertType(value, type, name) { var actual = typeOf(value); if (actual !== type) { throw new TypeError( - `Expected type of ${name} to be ${type}, but was ${actual}` + `Expected type of ${name} to be ${type}, but was ${actual}`, ); } } module.exports = assertType; -},{"@sinonjs/commons":94}],66:[function(require,module,exports){ +},{"@sinonjs/commons":47}],66:[function(require,module,exports){ "use strict"; var typeOf = require("@sinonjs/commons").typeOf; @@ -7780,7 +8099,7 @@ function isIterable(value) { module.exports = isIterable; -},{"@sinonjs/commons":94}],67:[function(require,module,exports){ +},{"@sinonjs/commons":47}],67:[function(require,module,exports){ "use strict"; var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; @@ -7800,7 +8119,7 @@ function isMatcher(object) { module.exports = isMatcher; -},{"./matcher-prototype":69,"@sinonjs/commons":94}],68:[function(require,module,exports){ +},{"./matcher-prototype":69,"@sinonjs/commons":47}],68:[function(require,module,exports){ "use strict"; var every = require("@sinonjs/commons").prototypes.array.every; @@ -7809,6 +8128,7 @@ var typeOf = require("@sinonjs/commons").typeOf; var deepEqualFactory = require("../deep-equal").use; +var identical = require("../identical"); var isMatcher = require("./is-matcher"); var keys = Object.keys; @@ -7844,6 +8164,9 @@ function matchObject(actual, expectation, matcher) { return false; } } else if (typeOf(exp) === "object") { + if (identical(exp, act)) { + return true; + } if (!matchObject(act, exp, matcher)) { return false; } @@ -7857,7 +8180,7 @@ function matchObject(actual, expectation, matcher) { module.exports = matchObject; -},{"../deep-equal":71,"./is-matcher":67,"@sinonjs/commons":94}],69:[function(require,module,exports){ +},{"../deep-equal":71,"../identical":73,"./is-matcher":67,"@sinonjs/commons":47}],69:[function(require,module,exports){ "use strict"; var matcherPrototype = { @@ -7972,7 +8295,7 @@ var createTypeMap = function (match) { module.exports = createTypeMap; -},{"./match-object":68,"@sinonjs/commons":94}],71:[function(require,module,exports){ +},{"./match-object":68,"@sinonjs/commons":47}],71:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8042,7 +8365,7 @@ function deepEqualCyclic(actual, expectation, match) { actualObj, expectationObj, actualPath, - expectationPath + expectationPath, ) { // If both are matchers they must be the same instance in order to be // considered equal If we didn't do that we would end up running one @@ -8115,7 +8438,7 @@ function deepEqualCyclic(actual, expectation, match) { []; var expectationKeysAndSymbols = concat( expectationKeys, - expectationSymbols + expectationSymbols, ); if (isArguments(actualObj) || isArguments(expectationObj)) { @@ -8264,7 +8587,7 @@ function deepEqualCyclic(actual, expectation, match) { actualValue, expectationValue, newActualPath, - newExpectationPath + newExpectationPath, ); }); })(actual, expectation, "$1", "$2"); @@ -8278,7 +8601,7 @@ deepEqualCyclic.use = function (match) { module.exports = deepEqualCyclic; -},{"./get-class":72,"./identical":73,"./is-arguments":74,"./is-array-type":75,"./is-date":76,"./is-element":77,"./is-iterable":78,"./is-map":79,"./is-nan":80,"./is-object":82,"./is-set":83,"./is-subset":84,"@sinonjs/commons":94}],72:[function(require,module,exports){ +},{"./get-class":72,"./identical":73,"./is-arguments":74,"./is-array-type":75,"./is-date":76,"./is-element":77,"./is-iterable":78,"./is-map":79,"./is-nan":80,"./is-object":82,"./is-set":83,"./is-subset":84,"@sinonjs/commons":47}],72:[function(require,module,exports){ "use strict"; var toString = require("@sinonjs/commons").prototypes.object.toString; @@ -8298,7 +8621,7 @@ function getClass(value) { module.exports = getClass; -},{"@sinonjs/commons":94}],73:[function(require,module,exports){ +},{"@sinonjs/commons":47}],73:[function(require,module,exports){ "use strict"; var isNaN = require("./is-nan"); @@ -8371,7 +8694,7 @@ function isArrayType(object) { module.exports = isArrayType; -},{"./array-types":61,"@sinonjs/commons":94,"type-detect":162}],76:[function(require,module,exports){ +},{"./array-types":61,"@sinonjs/commons":47,"type-detect":88}],76:[function(require,module,exports){ "use strict"; /** @@ -8572,7 +8895,7 @@ function isSubset(s1, s2, compare) { module.exports = isSubset; -},{"@sinonjs/commons":94}],85:[function(require,module,exports){ +},{"@sinonjs/commons":47}],85:[function(require,module,exports){ "use strict"; var slice = require("@sinonjs/commons").prototypes.string.slice; @@ -8645,7 +8968,7 @@ function stringify(item) { module.exports = iterableToString; -},{"@sinonjs/commons":94}],86:[function(require,module,exports){ +},{"@sinonjs/commons":47}],86:[function(require,module,exports){ "use strict"; var valueToString = require("@sinonjs/commons").valueToString; @@ -8718,7 +9041,7 @@ function match(object, matcherOrValue) { notNull && indexOf( valueToString(object).toLowerCase(), - matcherOrValue.toLowerCase() + matcherOrValue.toLowerCase(), ) >= 0 ); case "null": @@ -8750,7 +9073,7 @@ function match(object, matcherOrValue) { /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ if (!engineCanCompareMaps) { throw new Error( - "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances", ); } @@ -8759,7 +9082,7 @@ function match(object, matcherOrValue) { arrayContains( Array.from(object), Array.from(matcherOrValue), - match + match, ) ); default: @@ -8821,7 +9144,7 @@ forEach(Object.keys(createMatcher), function (key) { module.exports = match; -},{"./create-matcher":62,"./deep-equal":71,"./is-array-type":75,"./is-subset":84,"@sinonjs/commons":94,"type-detect":162}],87:[function(require,module,exports){ +},{"./create-matcher":62,"./deep-equal":71,"./is-array-type":75,"./is-subset":84,"@sinonjs/commons":47,"type-detect":88}],87:[function(require,module,exports){ "use strict"; /** @@ -8850,351 +9173,149 @@ module.exports = { }; },{"./create-matcher":62,"./deep-equal":71,"./identical":73,"./is-arguments":74,"./is-element":77,"./is-map":79,"./is-neg-zero":81,"./is-set":83,"./match":86}],88:[function(require,module,exports){ -"use strict"; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.typeDetect = factory()); +})(this, (function () { 'use strict'; + + var promiseExists = typeof Promise === 'function'; + var globalObject = (function (Obj) { + if (typeof globalThis === 'object') { + return globalThis; + } + Object.defineProperty(Obj, 'typeDetectGlobalObject', { + get: function get() { + return this; + }, + configurable: true, + }); + var global = typeDetectGlobalObject; + delete Obj.typeDetectGlobalObject; + return global; + })(Object.prototype); + var symbolExists = typeof Symbol !== 'undefined'; + var mapExists = typeof Map !== 'undefined'; + var setExists = typeof Set !== 'undefined'; + var weakMapExists = typeof WeakMap !== 'undefined'; + var weakSetExists = typeof WeakSet !== 'undefined'; + var dataViewExists = typeof DataView !== 'undefined'; + var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; + var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; + var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; + var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; + var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); + var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); + var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; + var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); + var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; + var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); + var toStringLeftSliceLength = 8; + var toStringRightSliceLength = -1; + function typeDetect(obj) { + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + if (obj === null) { + return 'null'; + } + if (obj === globalObject) { + return 'global'; + } + if (Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))) { + return 'Array'; + } + if (typeof window === 'object' && window !== null) { + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + if (typeof window.navigator === 'object') { + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + var objPrototype = Object.getPrototypeOf(obj); + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + if (objPrototype === Date.prototype) { + return 'Date'; + } + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + if (objPrototype === null) { + return 'Object'; + } + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); + } -var every = require("./prototypes/array").every; + return typeDetect; -/** - * @private - */ -function hasCallsLeft(callMap, spy) { - if (callMap[spy.id] === undefined) { - callMap[spy.id] = 0; - } +})); - return callMap[spy.id] < spy.callCount; -} - -/** - * @private - */ -function checkAdjacentCalls(callMap, spy, index, spies) { - var calledBeforeNext = true; - - if (index !== spies.length - 1) { - calledBeforeNext = spy.calledBefore(spies[index + 1]); - } - - if (hasCallsLeft(callMap, spy) && calledBeforeNext) { - callMap[spy.id] += 1; - return true; - } - - return false; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} calledBefore - A method that determines if this proxy was called before another one - * @property {string} id - Some id - * @property {number} callCount - Number of times this proxy has been called - */ - -/** - * Returns true when the spies have been called in the order they were supplied in - * - * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments - * @returns {boolean} true when spies are called in order, false otherwise - */ -function calledInOrder(spies) { - var callMap = {}; - // eslint-disable-next-line no-underscore-dangle - var _spies = arguments.length > 1 ? arguments : spies; - - return every(_spies, checkAdjacentCalls.bind(null, callMap)); -} - -module.exports = calledInOrder; - -},{"./prototypes/array":96}],89:[function(require,module,exports){ -"use strict"; - -var functionName = require("./function-name"); - -/** - * Returns a display name for a value from a constructor - * - * @param {object} value A value to examine - * @returns {(string|null)} A string or null - */ -function className(value) { - return ( - (value.constructor && value.constructor.name) || - // The next branch is for IE11 support only: - // Because the name property is not set on the prototype - // of the Function object, we finally try to grab the - // name from its definition. This will never be reached - // in node, so we are not able to test this properly. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name - (typeof value.constructor === "function" && - /* istanbul ignore next */ - functionName(value.constructor)) || - null - ); -} - -module.exports = className; - -},{"./function-name":92}],90:[function(require,module,exports){ -/* eslint-disable no-console */ -"use strict"; - -/** - * Returns a function that will invoke the supplied function and print a - * deprecation warning to the console each time it is called. - * - * @param {Function} func - * @param {string} msg - * @returns {Function} - */ -exports.wrap = function (func, msg) { - var wrapped = function () { - exports.printWarning(msg); - return func.apply(this, arguments); - }; - if (func.prototype) { - wrapped.prototype = func.prototype; - } - return wrapped; -}; - -/** - * Returns a string which can be supplied to `wrap()` to notify the user that a - * particular part of the sinon API has been deprecated. - * - * @param {string} packageName - * @param {string} funcName - * @returns {string} - */ -exports.defaultMsg = function (packageName, funcName) { - return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; -}; - -/** - * Prints a warning on the console, when it exists - * - * @param {string} msg - * @returns {undefined} - */ -exports.printWarning = function (msg) { - /* istanbul ignore next */ - if (typeof process === "object" && process.emitWarning) { - // Emit Warnings in Node - process.emitWarning(msg); - } else if (console.info) { - console.info(msg); - } else { - console.log(msg); - } -}; - -},{}],91:[function(require,module,exports){ -"use strict"; - -/** - * Returns true when fn returns true for all members of obj. - * This is an every implementation that works for all iterables - * - * @param {object} obj - * @param {Function} fn - * @returns {boolean} - */ -module.exports = function every(obj, fn) { - var pass = true; - - try { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - obj.forEach(function () { - if (!fn.apply(this, arguments)) { - // Throwing an error is the only way to break `forEach` - throw new Error(); - } - }); - } catch (e) { - pass = false; - } - - return pass; -}; - -},{}],92:[function(require,module,exports){ -"use strict"; - -/** - * Returns a display name for a function - * - * @param {Function} func - * @returns {string} - */ -module.exports = function functionName(func) { - if (!func) { - return ""; - } - - try { - return ( - func.displayName || - func.name || - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - (String(func).match(/function ([^\s(]+)/) || [])[1] - ); - } catch (e) { - // Stringify may fail and we might get an exception, as a last-last - // resort fall back to empty string. - return ""; - } -}; - -},{}],93:[function(require,module,exports){ -"use strict"; - -/** - * A reference to the global object - * - * @type {object} globalObject - */ -var globalObject; - -/* istanbul ignore else */ -if (typeof global !== "undefined") { - // Node - globalObject = global; -} else if (typeof window !== "undefined") { - // Browser - globalObject = window; -} else { - // WebWorker - globalObject = self; -} - -module.exports = globalObject; - -},{}],94:[function(require,module,exports){ -arguments[4][47][0].apply(exports,arguments) -},{"./called-in-order":88,"./class-name":89,"./deprecated":90,"./every":91,"./function-name":92,"./global":93,"./order-by-first-call":95,"./prototypes":99,"./type-of":105,"./value-to-string":106,"dup":47}],95:[function(require,module,exports){ -"use strict"; - -var sort = require("./prototypes/array").sort; -var slice = require("./prototypes/array").slice; - -/** - * @private - */ -function comparator(a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = (aCall && aCall.callId) || -1; - var bId = (bCall && bCall.callId) || -1; - - return aId < bId ? -1 : 1; -} - -/** - * A Sinon proxy object (fake, spy, stub) - * - * @typedef {object} SinonProxy - * @property {Function} getCall - A method that can return the first call - */ - -/** - * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call - * - * @param {SinonProxy[] | SinonProxy} spies - * @returns {SinonProxy[]} - */ -function orderByFirstCall(spies) { - return sort(slice(spies), comparator); -} - -module.exports = orderByFirstCall; - -},{"./prototypes/array":96}],96:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":49}],97:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"./throws-on-proto":104,"dup":50}],98:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":51}],99:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./array":96,"./function":98,"./map":100,"./object":101,"./set":102,"./string":103,"dup":52}],100:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":53}],101:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":54}],102:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":55}],103:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"./copy-prototype-methods":97,"dup":56}],104:[function(require,module,exports){ -"use strict"; - -/** - * Is true when the environment causes an error to be thrown for accessing the - * __proto__ property. - * - * This is necessary in order to support `node --disable-proto=throw`. - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto - * - * @type {boolean} - */ -let throwsOnProto; -try { - const object = {}; - // eslint-disable-next-line no-proto, no-unused-expressions - object.__proto__; - throwsOnProto = false; -} catch (_) { - // This branch is covered when tests are run with `--disable-proto=throw`, - // however we can test both branches at the same time, so this is ignored - /* istanbul ignore next */ - throwsOnProto = true; -} - -module.exports = throwsOnProto; - -},{}],105:[function(require,module,exports){ -"use strict"; - -var type = require("type-detect"); - -/** - * Returns the lower-case result of running type from type-detect on the value - * - * @param {*} value - * @returns {string} - */ -module.exports = function typeOf(value) { - return type(value).toLowerCase(); -}; - -},{"type-detect":162}],106:[function(require,module,exports){ -"use strict"; - -/** - * Returns a string representation of the value - * - * @param {*} value - * @returns {string} - */ -function valueToString(value) { - if (value && value.toString) { - // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods - return value.toString(); - } - return String(value); -} - -module.exports = valueToString; - -},{}],107:[function(require,module,exports){ -// This is free and unencumbered software released into the public domain. -// See LICENSE.md for more information. +},{}],89:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. var encoding = require("./lib/encoding.js"); @@ -9203,7 +9324,7 @@ module.exports = { TextDecoder: encoding.TextDecoder, }; -},{"./lib/encoding.js":109}],108:[function(require,module,exports){ +},{"./lib/encoding.js":91}],90:[function(require,module,exports){ (function(global) { 'use strict'; @@ -9251,7 +9372,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{}],109:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ // This is free and unencumbered software released into the public domain. // See LICENSE.md for more information. @@ -12565,7 +12686,7 @@ module.exports = { // For strict environments where `this` inside the global scope // is `undefined`, take a pure object instead }(this || {})); -},{"./encoding-indexes.js":108}],110:[function(require,module,exports){ +},{"./encoding-indexes.js":90}],92:[function(require,module,exports){ 'use strict'; var objectAssign = require('object.assign/polyfill')(); @@ -13073,7 +13194,7 @@ var objectKeys = Object.keys || function (obj) { return keys; }; -},{"object.assign/polyfill":156,"util/":113}],111:[function(require,module,exports){ +},{"object.assign/polyfill":138,"util/":95}],93:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -13098,14 +13219,14 @@ if (typeof Object.create === 'function') { } } -},{}],112:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } -},{}],113:[function(require,module,exports){ +},{}],95:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -13693,13 +13814,13 @@ function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -},{"./support/isBuffer":112,"inherits":111}],114:[function(require,module,exports){ -arguments[4][111][0].apply(exports,arguments) -},{"dup":111}],115:[function(require,module,exports){ -arguments[4][112][0].apply(exports,arguments) -},{"dup":112}],116:[function(require,module,exports){ -arguments[4][113][0].apply(exports,arguments) -},{"./support/isBuffer":115,"dup":113,"inherits":114}],117:[function(require,module,exports){ +},{"./support/isBuffer":94,"inherits":93}],96:[function(require,module,exports){ +arguments[4][93][0].apply(exports,arguments) +},{"dup":93}],97:[function(require,module,exports){ +arguments[4][94][0].apply(exports,arguments) +},{"dup":94}],98:[function(require,module,exports){ +arguments[4][95][0].apply(exports,arguments) +},{"./support/isBuffer":97,"dup":95,"inherits":96}],99:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -13716,7 +13837,7 @@ module.exports = function callBoundIntrinsic(name, allowMissing) { return intrinsic; }; -},{"./":118,"get-intrinsic":131}],118:[function(require,module,exports){ +},{"./":100,"get-intrinsic":113}],100:[function(require,module,exports){ 'use strict'; var bind = require('function-bind'); @@ -13753,7 +13874,7 @@ if ($defineProperty) { module.exports.apply = applyBind; } -},{"es-define-property":121,"es-errors/type":127,"function-bind":130,"get-intrinsic":131,"set-function-length":159}],119:[function(require,module,exports){ +},{"es-define-property":103,"es-errors/type":109,"function-bind":112,"get-intrinsic":113,"set-function-length":140}],101:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -13811,70 +13932,99 @@ module.exports = function defineDataProperty( } }; -},{"es-define-property":121,"es-errors/syntax":126,"es-errors/type":127,"gopd":132}],120:[function(require,module,exports){ +},{"es-define-property":103,"es-errors/syntax":108,"es-errors/type":109,"gopd":114}],102:[function(require,module,exports){ +/*! + + diff v7.0.0 + +BSD 3-Clause License + +Copyright (c) 2009-2015, Kevin Decker +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@license +*/ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.Diff = {})); -}(this, (function (exports) { 'use strict'; + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Diff = {})); +})(this, (function (exports) { 'use strict'; function Diff() {} Diff.prototype = { diff: function diff(oldString, newString) { var _options$timeout; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var callback = options.callback; - if (typeof options === 'function') { callback = options; options = {}; } - - this.options = options; var self = this; - function done(value) { + value = self.postProcess(value, options); if (callback) { setTimeout(function () { - callback(undefined, value); + callback(value); }, 0); return true; } else { return value; } - } // Allow subclasses to massage the input prior to running - + } - oldString = this.castInput(oldString); - newString = this.castInput(newString); - oldString = this.removeEmpty(this.tokenize(oldString)); - newString = this.removeEmpty(this.tokenize(newString)); + // Allow subclasses to massage the input prior to running + oldString = this.castInput(oldString, options); + newString = this.castInput(newString, options); + oldString = this.removeEmpty(this.tokenize(oldString, options)); + newString = this.removeEmpty(this.tokenize(newString, options)); var newLen = newString.length, - oldLen = oldString.length; + oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; - - if (options.maxEditLength) { + if (options.maxEditLength != null) { maxEditLength = Math.min(maxEditLength, options.maxEditLength); } - var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; var abortAfterTimestamp = Date.now() + maxExecutionTime; var bestPath = [{ oldPos: -1, lastComponent: undefined - }]; // Seed editLength = 0, i.e. the content starts with the same values - - var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); + }]; + // Seed editLength = 0, i.e. the content starts with the same values + var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options); if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // Identity per the equality and tokenizer - return done([{ - value: this.join(newString), - count: newString.length - }]); - } // Once we hit the right edge of the edit graph on some diagonal k, we can + return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken)); + } + + // Once we hit the right edge of the edit graph on some diagonal k, we can // definitely reach the end of the edit graph in no more than k edits, so // there's no point in considering any moves to diagonal k+1 any more (from // which we're guaranteed to need at least k+1 more edits). @@ -13891,81 +14041,67 @@ module.exports = function defineDataProperty( // where the new text simply appends d characters on the end of the // original text of length n, the true Myers algorithm will take O(n+d^2) // time while this optimization needs only O(n+d) time. - - var minDiagonalToConsider = -Infinity, - maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance. + maxDiagonalToConsider = Infinity; + // Main worker method. checks all permutations of a given edit length for acceptance. function execEditLength() { for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { var basePath = void 0; var removePath = bestPath[diagonalPath - 1], - addPath = bestPath[diagonalPath + 1]; - + addPath = bestPath[diagonalPath + 1]; if (removePath) { // No one else is going to attempt to use this value, clear it bestPath[diagonalPath - 1] = undefined; } - var canAdd = false; - if (addPath) { // what newPos will be after we do an insertion: var addPathNewPos = addPath.oldPos - diagonalPath; canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; } - var canRemove = removePath && removePath.oldPos + 1 < oldLen; - if (!canAdd && !canRemove) { // If this path is a terminal then prune bestPath[diagonalPath] = undefined; continue; - } // Select the diagonal that we want to branch from. We select the prior + } + + // Select the diagonal that we want to branch from. We select the prior // path whose position in the old string is the farthest from the origin // and does not pass the bounds of the diff graph - // TODO: Remove the `+ 1` here to make behavior match Myers algorithm - // and prefer to order removals before insertions. - - - if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { - basePath = self.addToPath(addPath, true, undefined, 0); + if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) { + basePath = self.addToPath(addPath, true, false, 0, options); } else { - basePath = self.addToPath(removePath, undefined, true, 1); + basePath = self.addToPath(removePath, false, true, 1, options); } - - newPos = self.extractCommon(basePath, newString, oldString, diagonalPath); - + newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options); if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { // If we have hit the end of both strings, then we are done return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken)); } else { bestPath[diagonalPath] = basePath; - if (basePath.oldPos + 1 >= oldLen) { maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); } - if (newPos + 1 >= newLen) { minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); } } } - editLength++; - } // Performs the length of edit iteration. Is a bit fugly as this has to support the + } + + // Performs the length of edit iteration. Is a bit fugly as this has to support the // sync and async mode which is never fun. Loops over execEditLength until a value // is produced, or until the edit length exceeds options.maxEditLength (if given), // in which case it will return undefined. - - if (callback) { (function exec() { setTimeout(function () { if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { return callback(); } - if (!execEditLength()) { exec(); } @@ -13974,17 +14110,15 @@ module.exports = function defineDataProperty( } else { while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { var ret = execEditLength(); - if (ret) { return ret; } } } }, - addToPath: function addToPath(path, added, removed, oldPosInc) { + addToPath: function addToPath(path, added, removed, oldPosInc, options) { var last = path.lastComponent; - - if (last && last.added === added && last.removed === removed) { + if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) { return { oldPos: path.oldPos + oldPosInc, lastComponent: { @@ -14006,80 +14140,83 @@ module.exports = function defineDataProperty( }; } }, - extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) { var newLen = newString.length, - oldLen = oldString.length, - oldPos = basePath.oldPos, - newPos = oldPos - diagonalPath, - commonCount = 0; - - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + oldLen = oldString.length, + oldPos = basePath.oldPos, + newPos = oldPos - diagonalPath, + commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) { newPos++; oldPos++; commonCount++; + if (options.oneChangePerToken) { + basePath.lastComponent = { + count: 1, + previousComponent: basePath.lastComponent, + added: false, + removed: false + }; + } } - - if (commonCount) { + if (commonCount && !options.oneChangePerToken) { basePath.lastComponent = { count: commonCount, - previousComponent: basePath.lastComponent + previousComponent: basePath.lastComponent, + added: false, + removed: false }; } - basePath.oldPos = oldPos; return newPos; }, - equals: function equals(left, right) { - if (this.options.comparator) { - return this.options.comparator(left, right); + equals: function equals(left, right, options) { + if (options.comparator) { + return options.comparator(left, right); } else { - return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase(); } }, removeEmpty: function removeEmpty(array) { var ret = []; - for (var i = 0; i < array.length; i++) { if (array[i]) { ret.push(array[i]); } } - return ret; }, castInput: function castInput(value) { return value; }, tokenize: function tokenize(value) { - return value.split(''); + return Array.from(value); }, join: function join(chars) { return chars.join(''); + }, + postProcess: function postProcess(changeObjects) { + return changeObjects; } }; - function buildValues(diff, lastComponent, newString, oldString, useLongestToken) { // First we convert our linked list of components in reverse order to an // array in the right order: var components = []; var nextComponent; - while (lastComponent) { components.push(lastComponent); nextComponent = lastComponent.previousComponent; delete lastComponent.previousComponent; lastComponent = nextComponent; } - components.reverse(); var componentPos = 0, - componentLen = components.length, - newPos = 0, - oldPos = 0; - + componentLen = components.length, + newPos = 0, + oldPos = 0; for (; componentPos < componentLen; componentPos++) { var component = components[componentPos]; - if (!component.removed) { if (!component.added && useLongestToken) { var value = newString.slice(newPos, newPos + component.count); @@ -14091,59 +14228,133 @@ module.exports = function defineDataProperty( } else { component.value = diff.join(newString.slice(newPos, newPos + component.count)); } + newPos += component.count; - newPos += component.count; // Common case - + // Common case if (!component.added) { oldPos += component.count; } } else { component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); - oldPos += component.count; // Reverse add and remove so removes are output first to match common convention - // The diffing algorithm is tied to add then remove output and this is the simplest - // route to get the desired output with minimal overhead. + oldPos += component.count; + } + } + return components; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function longestCommonPrefix(str1, str2) { + var i; + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[i] != str2[i]) { + return str1.slice(0, i); + } + } + return str1.slice(0, i); + } + function longestCommonSuffix(str1, str2) { + var i; - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } + // Unlike longestCommonPrefix, we need a special case to handle all scenarios + // where we return the empty string since str1.slice(-0) will return the + // entire string. + if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) { + return ''; + } + for (i = 0; i < str1.length && i < str2.length; i++) { + if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) { + return str1.slice(-i); } - } // Special case handle for when one terminal is ignored (i.e. whitespace). - // For this case we merge the terminal into the prior string and drop the change. - // This is only available for string mode. - - - var finalComponent = components[componentLen - 1]; - - if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) { - components[componentLen - 2].value += finalComponent.value; - components.pop(); } - - return components; + return str1.slice(-i); } - - var characterDiff = new Diff(); - function diffChars(oldStr, newStr, options) { - return characterDiff.diff(oldStr, newStr, options); + function replacePrefix(string, oldPrefix, newPrefix) { + if (string.slice(0, oldPrefix.length) != oldPrefix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't start with prefix ").concat(JSON.stringify(oldPrefix), "; this is a bug")); + } + return newPrefix + string.slice(oldPrefix.length); + } + function replaceSuffix(string, oldSuffix, newSuffix) { + if (!oldSuffix) { + return string + newSuffix; + } + if (string.slice(-oldSuffix.length) != oldSuffix) { + throw Error("string ".concat(JSON.stringify(string), " doesn't end with suffix ").concat(JSON.stringify(oldSuffix), "; this is a bug")); + } + return string.slice(0, -oldSuffix.length) + newSuffix; + } + function removePrefix(string, oldPrefix) { + return replacePrefix(string, oldPrefix, ''); + } + function removeSuffix(string, oldSuffix) { + return replaceSuffix(string, oldSuffix, ''); + } + function maximumOverlap(string1, string2) { + return string2.slice(0, overlapCount(string1, string2)); } - function generateOptions(options, defaults) { - if (typeof options === 'function') { - defaults.callback = options; - } else if (options) { - for (var name in options) { - /* istanbul ignore else */ - if (options.hasOwnProperty(name)) { - defaults[name] = options[name]; - } + // Nicked from https://stackoverflow.com/a/60422853/1709587 + function overlapCount(a, b) { + // Deal with cases where the strings differ in length + var startA = 0; + if (a.length > b.length) { + startA = a.length - b.length; + } + var endB = b.length; + if (a.length < b.length) { + endB = a.length; + } + // Create a back-reference for each index + // that should be followed in case of a mismatch. + // We only need B to make these references: + var map = Array(endB); + var k = 0; // Index that lags behind j + map[0] = 0; + for (var j = 1; j < endB; j++) { + if (b[j] == b[k]) { + map[j] = map[k]; // skip over the same character (optional optimisation) + } else { + map[j] = k; + } + while (k > 0 && b[j] != b[k]) { + k = map[k]; + } + if (b[j] == b[k]) { + k++; + } + } + // Phase 2: use these references while iterating over A + k = 0; + for (var i = startA; i < a.length; i++) { + while (k > 0 && a[i] != b[k]) { + k = map[k]; + } + if (a[i] == b[k]) { + k++; } } + return k; + } - return defaults; + /** + * Returns true if the string consistently uses Windows line endings. + */ + function hasOnlyWinLineEndings(string) { + return string.includes('\r\n') && !string.startsWith('\n') && !string.match(/[^\r]\n/); + } + + /** + * Returns true if the string consistently uses Unix line endings. + */ + function hasOnlyUnixLineEndings(string) { + return !string.includes('\r\n') && string.includes('\n'); } + // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode // // Ranges and exceptions: // Latin-1 Supplement, 0080–00FF @@ -14161,82 +14372,330 @@ module.exports = function defineDataProperty( // - U+02DC ˜ ˜ Small Tilde // - U+02DD ˝ ˝ Double Acute Accent // Latin Extended Additional, 1E00–1EFF + var extendedWordChars = "a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}"; - var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; - var reWhitespace = /\S/; + // Each token is one of the following: + // - A punctuation mark plus the surrounding whitespace + // - A word plus the surrounding whitespace + // - Pure whitespace (but only in the special case where this the entire text + // is just whitespace) + // + // We have to include surrounding whitespace in the tokens because the two + // alternative approaches produce horribly broken results: + // * If we just discard the whitespace, we can't fully reproduce the original + // text from the sequence of tokens and any attempt to render the diff will + // get the whitespace wrong. + // * If we have separate tokens for whitespace, then in a typical text every + // second token will be a single space character. But this often results in + // the optimal diff between two texts being a perverse one that preserves + // the spaces between words but deletes and reinserts actual common words. + // See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640 + // for an example. + // + // Keeping the surrounding whitespace of course has implications for .equals + // and .join, not just .tokenize. + + // This regex does NOT fully implement the tokenization rules described above. + // Instead, it gives runs of whitespace their own "token". The tokenize method + // then handles stitching whitespace tokens onto adjacent word or punctuation + // tokens. + var tokenizeIncludingWhitespace = new RegExp("[".concat(extendedWordChars, "]+|\\s+|[^").concat(extendedWordChars, "]"), 'ug'); var wordDiff = new Diff(); - - wordDiff.equals = function (left, right) { - if (this.options.ignoreCase) { + wordDiff.equals = function (left, right, options) { + if (options.ignoreCase) { left = left.toLowerCase(); right = right.toLowerCase(); } - - return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + return left.trim() === right.trim(); }; - wordDiff.tokenize = function (value) { - // All whitespace symbols except newline group into one token, each newline - in separate token - var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. - - for (var i = 0; i < tokens.length - 1; i++) { - // If we have an empty string in the next field and we have only word chars before and after, merge - if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var parts; + if (options.intlSegmenter) { + if (options.intlSegmenter.resolvedOptions().granularity != 'word') { + throw new Error('The segmenter passed must have a granularity of "word"'); } + parts = Array.from(options.intlSegmenter.segment(value), function (segment) { + return segment.segment; + }); + } else { + parts = value.match(tokenizeIncludingWhitespace) || []; } - + var tokens = []; + var prevPart = null; + parts.forEach(function (part) { + if (/\s/.test(part)) { + if (prevPart == null) { + tokens.push(part); + } else { + tokens.push(tokens.pop() + part); + } + } else if (/\s/.test(prevPart)) { + if (tokens[tokens.length - 1] == prevPart) { + tokens.push(tokens.pop() + part); + } else { + tokens.push(prevPart + part); + } + } else { + tokens.push(part); + } + prevPart = part; + }); return tokens; }; - - function diffWords(oldStr, newStr, options) { - options = generateOptions(options, { - ignoreWhitespace: true + wordDiff.join = function (tokens) { + // Tokens being joined here will always have appeared consecutively in the + // same text, so we can simply strip off the leading whitespace from all the + // tokens except the first (and except any whitespace-only tokens - but such + // a token will always be the first and only token anyway) and then join them + // and the whitespace around words and punctuation will end up correct. + return tokens.map(function (token, i) { + if (i == 0) { + return token; + } else { + return token.replace(/^\s+/, ''); + } + }).join(''); + }; + wordDiff.postProcess = function (changes, options) { + if (!changes || options.oneChangePerToken) { + return changes; + } + var lastKeep = null; + // Change objects representing any insertion or deletion since the last + // "keep" change object. There can be at most one of each. + var insertion = null; + var deletion = null; + changes.forEach(function (change) { + if (change.added) { + insertion = change; + } else if (change.removed) { + deletion = change; + } else { + if (insertion || deletion) { + // May be false at start of text + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change); + } + lastKeep = change; + insertion = null; + deletion = null; + } }); + if (insertion || deletion) { + dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null); + } + return changes; + }; + function diffWords(oldStr, newStr, options) { + // This option has never been documented and never will be (it's clearer to + // just call `diffWordsWithSpace` directly if you need that behavior), but + // has existed in jsdiff for a long time, so we retain support for it here + // for the sake of backwards compatibility. + if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) { + return diffWordsWithSpace(oldStr, newStr, options); + } return wordDiff.diff(oldStr, newStr, options); } + function dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) { + // Before returning, we tidy up the leading and trailing whitespace of the + // change objects to eliminate cases where trailing whitespace in one object + // is repeated as leading whitespace in the next. + // Below are examples of the outcomes we want here to explain the code. + // I=insert, K=keep, D=delete + // 1. diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want: K:'foo ' D:'bar ' K:'baz' + // + // 2. Diffing 'foo bar baz' vs 'foo qux baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz' + // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz' + // + // 3. Diffing 'foo\nbar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:'\nbar ' K:' baz' + // After cleanup, we want K'foo' D:'\nbar' K:' baz' + // + // 4. Diffing 'foo baz' vs 'foo\nbar baz' + // Prior to cleanup, we have K:'foo\n' I:'\nbar ' K:' baz' + // After cleanup, we ideally want K'foo' I:'\nbar' K:' baz' + // but don't actually manage this currently (the pre-cleanup change + // objects don't contain enough information to make it possible). + // + // 5. Diffing 'foo bar baz' vs 'foo baz' + // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz' + // After cleanup, we want K:'foo ' D:' bar ' K:'baz' + // + // Our handling is unavoidably imperfect in the case where there's a single + // indel between keeps and the whitespace has changed. For instance, consider + // diffing 'foo\tbar\nbaz' vs 'foo baz'. Unless we create an extra change + // object to represent the insertion of the space character (which isn't even + // a token), we have no way to avoid losing information about the texts' + // original whitespace in the result we return. Still, we do our best to + // output something that will look sensible if we e.g. print it with + // insertions in green and deletions in red. + + // Between two "keep" change objects (or before the first or after the last + // change object), we can have either: + // * A "delete" followed by an "insert" + // * Just an "insert" + // * Just a "delete" + // We handle the three cases separately. + if (deletion && insertion) { + var oldWsPrefix = deletion.value.match(/^\s*/)[0]; + var oldWsSuffix = deletion.value.match(/\s*$/)[0]; + var newWsPrefix = insertion.value.match(/^\s*/)[0]; + var newWsSuffix = insertion.value.match(/\s*$/)[0]; + if (startKeep) { + var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix); + startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix); + deletion.value = removePrefix(deletion.value, commonWsPrefix); + insertion.value = removePrefix(insertion.value, commonWsPrefix); + } + if (endKeep) { + var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix); + endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix); + deletion.value = removeSuffix(deletion.value, commonWsSuffix); + insertion.value = removeSuffix(insertion.value, commonWsSuffix); + } + } else if (insertion) { + // The whitespaces all reflect what was in the new text rather than + // the old, so we essentially have no information about whitespace + // insertion or deletion. We just want to dedupe the whitespace. + // We do that by having each change object keep its trailing + // whitespace and deleting duplicate leading whitespace where + // present. + if (startKeep) { + insertion.value = insertion.value.replace(/^\s*/, ''); + } + if (endKeep) { + endKeep.value = endKeep.value.replace(/^\s*/, ''); + } + // otherwise we've got a deletion and no insertion + } else if (startKeep && endKeep) { + var newWsFull = endKeep.value.match(/^\s*/)[0], + delWsStart = deletion.value.match(/^\s*/)[0], + delWsEnd = deletion.value.match(/\s*$/)[0]; + + // Any whitespace that comes straight after startKeep in both the old and + // new texts, assign to startKeep and remove from the deletion. + var newWsStart = longestCommonPrefix(newWsFull, delWsStart); + deletion.value = removePrefix(deletion.value, newWsStart); + + // Any whitespace that comes straight before endKeep in both the old and + // new texts, and hasn't already been assigned to startKeep, assign to + // endKeep and remove from the deletion. + var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd); + deletion.value = removeSuffix(deletion.value, newWsEnd); + endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd); + + // If there's any whitespace from the new text that HASN'T already been + // assigned, assign it to the start: + startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length)); + } else if (endKeep) { + // We are at the start of the text. Preserve all the whitespace on + // endKeep, and just remove whitespace from the end of deletion to the + // extent that it overlaps with the start of endKeep. + var endKeepWsPrefix = endKeep.value.match(/^\s*/)[0]; + var deletionWsSuffix = deletion.value.match(/\s*$/)[0]; + var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix); + deletion.value = removeSuffix(deletion.value, overlap); + } else if (startKeep) { + // We are at the END of the text. Preserve all the whitespace on + // startKeep, and just remove whitespace from the start of deletion to + // the extent that it overlaps with the end of startKeep. + var startKeepWsSuffix = startKeep.value.match(/\s*$/)[0]; + var deletionWsPrefix = deletion.value.match(/^\s*/)[0]; + var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix); + deletion.value = removePrefix(deletion.value, _overlap); + } + } + var wordWithSpaceDiff = new Diff(); + wordWithSpaceDiff.tokenize = function (value) { + // Slightly different to the tokenizeIncludingWhitespace regex used above in + // that this one treats each individual newline as a distinct tokens, rather + // than merging them into other surrounding whitespace. This was requested + // in https://github.com/kpdecker/jsdiff/issues/180 & + // https://github.com/kpdecker/jsdiff/issues/211 + var regex = new RegExp("(\\r?\\n)|[".concat(extendedWordChars, "]+|[^\\S\\n\\r]+|[^").concat(extendedWordChars, "]"), 'ug'); + return value.match(regex) || []; + }; function diffWordsWithSpace(oldStr, newStr, options) { - return wordDiff.diff(oldStr, newStr, options); + return wordWithSpaceDiff.diff(oldStr, newStr, options); } - var lineDiff = new Diff(); + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + return defaults; + } - lineDiff.tokenize = function (value) { - if (this.options.stripTrailingCr) { + var lineDiff = new Diff(); + lineDiff.tokenize = function (value, options) { + if (options.stripTrailingCr) { // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior value = value.replace(/\r\n/g, '\n'); } - var retLines = [], - linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + linesAndNewlines = value.split(/(\n|\r\n)/); + // Ignore the final empty token that occurs if the string ends with a new line if (!linesAndNewlines[linesAndNewlines.length - 1]) { linesAndNewlines.pop(); - } // Merge the content and line separators into single tokens - + } + // Merge the content and line separators into single tokens for (var i = 0; i < linesAndNewlines.length; i++) { var line = linesAndNewlines[i]; - - if (i % 2 && !this.options.newlineIsToken) { + if (i % 2 && !options.newlineIsToken) { retLines[retLines.length - 1] += line; } else { - if (this.options.ignoreWhitespace) { - line = line.trim(); - } - retLines.push(line); } } - return retLines; }; - + lineDiff.equals = function (left, right, options) { + // If we're ignoring whitespace, we need to normalise lines by stripping + // whitespace before checking equality. (This has an annoying interaction + // with newlineIsToken that requires special handling: if newlines get their + // own token, then we DON'T want to trim the *newline* tokens down to empty + // strings, since this would cause us to treat whitespace-only line content + // as equal to a separator between lines, which would be weird and + // inconsistent with the documented behavior of the options.) + if (options.ignoreWhitespace) { + if (!options.newlineIsToken || !left.includes('\n')) { + left = left.trim(); + } + if (!options.newlineIsToken || !right.includes('\n')) { + right = right.trim(); + } + } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) { + if (left.endsWith('\n')) { + left = left.slice(0, -1); + } + if (right.endsWith('\n')) { + right = right.slice(0, -1); + } + } + return Diff.prototype.equals.call(this, left, right, options); + }; function diffLines(oldStr, newStr, callback) { return lineDiff.diff(oldStr, newStr, callback); } + + // Kept for backwards compatibility. This is a rather arbitrary wrapper method + // that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to + // have two ways to do exactly the same thing in the API, so we no longer + // document this one (library users should explicitly use `diffLines` with + // `ignoreWhitespace: true` instead) but we keep it around to maintain + // compatibility with code that used old versions. function diffTrimmedLines(oldStr, newStr, callback) { var options = generateOptions(callback, { ignoreWhitespace: true @@ -14245,42 +14704,67 @@ module.exports = function defineDataProperty( } var sentenceDiff = new Diff(); - sentenceDiff.tokenize = function (value) { return value.split(/(\S.+?[.!?])(?=\s+|$)/); }; - function diffSentences(oldStr, newStr, callback) { return sentenceDiff.diff(oldStr, newStr, callback); } var cssDiff = new Diff(); - cssDiff.tokenize = function (value) { return value.split(/([{}:;,]|\s+)/); }; - function diffCss(oldStr, newStr, callback) { return cssDiff.diff(oldStr, newStr, callback); } - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); } - - return _typeof(obj); + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : i + ""; + } + function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, @@ -14291,56 +14775,17 @@ module.exports = function defineDataProperty( } else { obj[key] = value; } - return obj; } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -14349,238 +14794,263 @@ module.exports = function defineDataProperty( if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var objectPrototypeToString = Object.prototype.toString; - var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + var jsonDiff = new Diff(); + // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: - jsonDiff.useLongestToken = true; jsonDiff.tokenize = lineDiff.tokenize; - - jsonDiff.castInput = function (value) { - var _this$options = this.options, - undefinedReplacement = _this$options.undefinedReplacement, - _this$options$stringi = _this$options.stringifyReplacer, - stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { - return typeof v === 'undefined' ? undefinedReplacement : v; - } : _this$options$stringi; + jsonDiff.castInput = function (value, options) { + var undefinedReplacement = options.undefinedReplacement, + _options$stringifyRep = options.stringifyReplacer, + stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _options$stringifyRep; return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); }; - - jsonDiff.equals = function (left, right) { - return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + jsonDiff.equals = function (left, right, options) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'), options); }; - function diffJson(oldObj, newObj, options) { return jsonDiff.diff(oldObj, newObj, options); - } // This function handles the presence of circular references by bailing out when encountering an - // object that is already on the "stack" of items being processed. Accepts an optional replacer + } + // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer function canonicalize(obj, stack, replacementStack, replacer, key) { stack = stack || []; replacementStack = replacementStack || []; - if (replacer) { obj = replacer(key, obj); } - var i; - for (i = 0; i < stack.length; i += 1) { if (stack[i] === obj) { return replacementStack[i]; } } - var canonicalizedObj; - - if ('[object Array]' === objectPrototypeToString.call(obj)) { + if ('[object Array]' === Object.prototype.toString.call(obj)) { stack.push(obj); canonicalizedObj = new Array(obj.length); replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); } - stack.pop(); replacementStack.pop(); return canonicalizedObj; } - if (obj && obj.toJSON) { obj = obj.toJSON(); } - if (_typeof(obj) === 'object' && obj !== null) { stack.push(obj); canonicalizedObj = {}; replacementStack.push(canonicalizedObj); - var sortedKeys = [], - _key; - + _key; for (_key in obj) { /* istanbul ignore else */ - if (obj.hasOwnProperty(_key)) { + if (Object.prototype.hasOwnProperty.call(obj, _key)) { sortedKeys.push(_key); } } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { _key = sortedKeys[i]; canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); } - stack.pop(); replacementStack.pop(); } else { canonicalizedObj = obj; } - return canonicalizedObj; } var arrayDiff = new Diff(); - arrayDiff.tokenize = function (value) { return value.slice(); }; - arrayDiff.join = arrayDiff.removeEmpty = function (value) { return value; }; - function diffArrays(oldArr, newArr, callback) { return arrayDiff.diff(oldArr, newArr, callback); } - function parsePatch(uniDiff) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], - list = [], - i = 0; + function unixToWin(patch) { + if (Array.isArray(patch)) { + return patch.map(unixToWin); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line, i) { + var _hunk$lines; + return line.startsWith('\\') || line.endsWith('\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\') ? line : line + '\r'; + }) + }); + }) + }); + } + function winToUnix(patch) { + if (Array.isArray(patch)) { + return patch.map(winToUnix); + } + return _objectSpread2(_objectSpread2({}, patch), {}, { + hunks: patch.hunks.map(function (hunk) { + return _objectSpread2(_objectSpread2({}, hunk), {}, { + lines: hunk.lines.map(function (line) { + return line.endsWith('\r') ? line.substring(0, line.length - 1) : line; + }) + }); + }) + }); + } + + /** + * Returns true if the patch consistently uses Unix line endings (or only involves one line and has + * no line endings). + */ + function isUnix(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return !patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return !line.startsWith('\\') && line.endsWith('\r'); + }); + }); + }); + } + + /** + * Returns true if the patch uses Windows line endings and only Windows line endings. + */ + function isWin(patch) { + if (!Array.isArray(patch)) { + patch = [patch]; + } + return patch.some(function (index) { + return index.hunks.some(function (hunk) { + return hunk.lines.some(function (line) { + return line.endsWith('\r'); + }); + }); + }) && patch.every(function (index) { + return index.hunks.every(function (hunk) { + return hunk.lines.every(function (line, i) { + var _hunk$lines2; + return line.startsWith('\\') || line.endsWith('\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\')); + }); + }); + }); + } + function parsePatch(uniDiff) { + var diffstr = uniDiff.split(/\n/), + list = [], + i = 0; function parseIndex() { var index = {}; - list.push(index); // Parse diff metadata + list.push(index); + // Parse diff metadata while (i < diffstr.length) { - var line = diffstr[i]; // File header found, end parsing diff metadata + var line = diffstr[i]; + // File header found, end parsing diff metadata if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { break; - } // Diff index - + } + // Diff index var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); - if (header) { index.index = header[1]; } - i++; - } // Parse file headers if they are defined. Unified diff requires them, but - // there's no technical issues to have an isolated hunk without file header - + } + // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + parseFileHeader(index); parseFileHeader(index); - parseFileHeader(index); // Parse hunks + // Parse hunks index.hunks = []; - while (i < diffstr.length) { var _line = diffstr[i]; - - if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + if (/^(Index:\s|diff\s|\-\-\-\s|\+\+\+\s|===================================================================)/.test(_line)) { break; } else if (/^@@/.test(_line)) { index.hunks.push(parseHunk()); - } else if (_line && options.strict) { - // Ignore unexpected content unless in strict mode + } else if (_line) { throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); } else { i++; } } - } // Parses the --- and +++ headers, if none are found, no lines - // are consumed. - + } + // Parses the --- and +++ headers, if none are found, no lines + // are consumed. function parseFileHeader(index) { - var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); - + var fileHeader = /^(---|\+\+\+)\s+(.*)\r?$/.exec(diffstr[i]); if (fileHeader) { var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; var data = fileHeader[2].split('\t', 2); var fileName = data[0].replace(/\\\\/g, '\\'); - if (/^".*"$/.test(fileName)) { fileName = fileName.substr(1, fileName.length - 2); } - index[keyPrefix + 'FileName'] = fileName; index[keyPrefix + 'Header'] = (data[1] || '').trim(); i++; } - } // Parses a hunk - // This assumes that we are at the start of a hunk. - + } + // Parses a hunk + // This assumes that we are at the start of a hunk. function parseHunk() { var chunkHeaderIndex = i, - chunkHeaderLine = diffstr[i++], - chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); var hunk = { oldStart: +chunkHeader[1], oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], newStart: +chunkHeader[3], newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], - lines: [], - linedelimiters: [] - }; // Unified Diff Format quirk: If the chunk size is 0, + lines: [] + }; + + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart += 1; } - if (hunk.newLines === 0) { hunk.newStart += 1; } - var addCount = 0, - removeCount = 0; - - for (; i < diffstr.length; i++) { - // Lines starting with '---' could be mistaken for the "remove line" operation - // But they could be the header for the next file. Therefore prune such cases out. - if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { - break; - } - + removeCount = 0; + for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\')); i++) { + var _diffstr$i; var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; - if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { hunk.lines.push(diffstr[i]); - hunk.linedelimiters.push(delimiters[i] || '\n'); - if (operation === '+') { addCount++; } else if (operation === '-') { @@ -14590,37 +15060,30 @@ module.exports = function defineDataProperty( removeCount++; } } else { - break; + throw new Error("Hunk at line ".concat(chunkHeaderIndex + 1, " contained invalid line ").concat(diffstr[i])); } - } // Handle the empty block count case - + } + // Handle the empty block count case if (!addCount && hunk.newLines === 1) { hunk.newLines = 0; } - - if (!removeCount && hunk.oldLines === 1) { - hunk.oldLines = 0; - } // Perform optional sanity checking - - - if (options.strict) { - if (addCount !== hunk.newLines) { - throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } - - if (removeCount !== hunk.oldLines) { - throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); - } + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; } + // Perform sanity checking + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } return hunk; } - while (i < diffstr.length) { parseIndex(); } - return list; } @@ -14629,210 +15092,275 @@ module.exports = function defineDataProperty( // start of 2, this will iterate 2, 3, 1, 4, 0. function distanceIterator (start, minLine, maxLine) { var wantForward = true, - backwardExhausted = false, - forwardExhausted = false, - localOffset = 1; + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; return function iterator() { if (wantForward && !forwardExhausted) { if (backwardExhausted) { localOffset++; } else { wantForward = false; - } // Check if trying to fit beyond text length, and if not, check it fits - // after offset location (or desired location on first iteration) - + } + // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) if (start + localOffset <= maxLine) { - return localOffset; + return start + localOffset; } - forwardExhausted = true; } - if (!backwardExhausted) { if (!forwardExhausted) { wantForward = true; - } // Check if trying to fit before text beginning, and if not, check it fits - // before offset location - + } + // Check if trying to fit before text beginning, and if not, check it fits + // before offset location if (minLine <= start - localOffset) { - return -localOffset++; + return start - localOffset++; } - backwardExhausted = true; return iterator(); - } // We tried to fit hunk before text beginning and beyond text length, then - // hunk can't fit on the text. Return undefined + } + // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined }; } function applyPatch(source, uniDiff) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - if (Array.isArray(uniDiff)) { if (uniDiff.length > 1) { throw new Error('applyPatch only works with a single input.'); } - uniDiff = uniDiff[0]; - } // Apply the diff to the input + } + if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) { + if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) { + uniDiff = unixToWin(uniDiff); + } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) { + uniDiff = winToUnix(uniDiff); + } + } + // Apply the diff to the input + var lines = source.split('\n'), + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0; + if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) { + throw new Error('fuzzFactor must be a non-negative integer'); + } + + // Special case for empty patch. + if (!hunks.length) { + return source; + } + + // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change + // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a + // newline that already exists - then we either return false and fail to apply the patch (if + // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0). + // If we do need to remove/add a newline at EOF, this will always be in the final hunk: + var prevLine = '', + removeEOFNL = false, + addEOFNL = false; + for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) { + var line = hunks[hunks.length - 1].lines[i]; + if (line[0] == '\\') { + if (prevLine[0] == '+') { + removeEOFNL = true; + } else if (prevLine[0] == '-') { + addEOFNL = true; + } + } + prevLine = line; + } + if (removeEOFNL) { + if (addEOFNL) { + // This means the final line gets changed but doesn't have a trailing newline in either the + // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if + // fuzzFactor is 0, we simply validate that the source file has no trailing newline. + if (!fuzzFactor && lines[lines.length - 1] == '') { + return false; + } + } else if (lines[lines.length - 1] == '') { + lines.pop(); + } else if (!fuzzFactor) { + return false; + } + } else if (addEOFNL) { + if (lines[lines.length - 1] != '') { + lines.push(''); + } else if (!fuzzFactor) { + return false; + } + } - var lines = source.split(/\r\n|[\n\v\f\r\x85]/), - delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], - hunks = uniDiff.hunks, - compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { - return line === patchContent; - }, - errorCount = 0, - fuzzFactor = options.fuzzFactor || 0, - minLine = 0, - offset = 0, - removeEOFNL, - addEOFNL; /** - * Checks if the hunk exactly fits on the provided location + * Checks if the hunk can be made to fit at the provided location with at most `maxErrors` + * insertions, substitutions, or deletions, while ensuring also that: + * - lines deleted in the hunk match exactly, and + * - wherever an insertion operation or block of insertion operations appears in the hunk, the + * immediately preceding and following lines of context match exactly + * + * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0]. + * + * If the hunk can be applied, returns an object with properties `oldLineLastI` and + * `replacementLines`. Otherwise, returns null. */ - - - function hunkFits(hunk, toPos) { - for (var j = 0; j < hunk.lines.length; j++) { - var line = hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line; - - if (operation === ' ' || operation === '-') { - // Context sanity check - if (!compareLine(toPos + 1, lines[toPos], operation, content)) { - errorCount++; - - if (errorCount > fuzzFactor) { - return false; + function applyHunk(hunkLines, toPos, maxErrors) { + var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : []; + var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; + var nConsecutiveOldContextLines = 0; + var nextContextLineMustMatch = false; + for (; hunkLinesI < hunkLines.length; hunkLinesI++) { + var hunkLine = hunkLines[hunkLinesI], + operation = hunkLine.length > 0 ? hunkLine[0] : ' ', + content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine; + if (operation === '-') { + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + toPos++; + nConsecutiveOldContextLines = 0; + } else { + if (!maxErrors || lines[toPos] == null) { + return null; } + patchedLines[patchedLinesLength] = lines[toPos]; + return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1); + } + } + if (operation === '+') { + if (!lastContextLineMatched) { + return null; } + patchedLines[patchedLinesLength] = content; + patchedLinesLength++; + nConsecutiveOldContextLines = 0; + nextContextLineMustMatch = true; + } + if (operation === ' ') { + nConsecutiveOldContextLines++; + patchedLines[patchedLinesLength] = lines[toPos]; + if (compareLine(toPos + 1, lines[toPos], operation, content)) { + patchedLinesLength++; + lastContextLineMatched = true; + nextContextLineMustMatch = false; + toPos++; + } else { + if (nextContextLineMustMatch || !maxErrors) { + return null; + } - toPos++; + // Consider 3 possibilities in sequence: + // 1. lines contains a *substitution* not included in the patch context, or + // 2. lines contains an *insertion* not included in the patch context, or + // 3. lines contains a *deletion* not included in the patch context + // The first two options are of course only possible if the line from lines is non-null - + // i.e. only option 3 is possible if we've overrun the end of the old file. + return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength); + } } } - return true; - } // Search best fit offsets for each hunk based on the previous ones - - - for (var i = 0; i < hunks.length; i++) { - var hunk = hunks[i], - maxLine = lines.length - hunk.oldLines, - localOffset = 0, - toPos = offset + hunk.oldStart - 1; - var iterator = distanceIterator(toPos, minLine, maxLine); + // Before returning, trim any unmodified context lines off the end of patchedLines and reduce + // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region + // that starts in this hunk's trailing context. + patchedLinesLength -= nConsecutiveOldContextLines; + toPos -= nConsecutiveOldContextLines; + patchedLines.length = patchedLinesLength; + return { + patchedLines: patchedLines, + oldLineLastI: toPos - 1 + }; + } + var resultLines = []; - for (; localOffset !== undefined; localOffset = iterator()) { - if (hunkFits(hunk, toPos + localOffset)) { - hunk.offset = offset += localOffset; + // Search best fit offsets for each hunk based on the previous ones + var prevHunkOffset = 0; + for (var _i = 0; _i < hunks.length; _i++) { + var hunk = hunks[_i]; + var hunkResult = void 0; + var maxLine = lines.length - hunk.oldLines + fuzzFactor; + var toPos = void 0; + for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) { + toPos = hunk.oldStart + prevHunkOffset - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + for (; toPos !== undefined; toPos = iterator()) { + hunkResult = applyHunk(hunk.lines, toPos, maxErrors); + if (hunkResult) { + break; + } + } + if (hunkResult) { break; } } - - if (localOffset === undefined) { + if (!hunkResult) { return false; - } // Set lower text limit to end of the current hunk, so next ones don't try - // to fit over already patched text - - - minLine = hunk.offset + hunk.oldStart + hunk.oldLines; - } // Apply patch hunks - - - var diffOffset = 0; - - for (var _i = 0; _i < hunks.length; _i++) { - var _hunk = hunks[_i], - _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; - - diffOffset += _hunk.newLines - _hunk.oldLines; + } - for (var j = 0; j < _hunk.lines.length; j++) { - var line = _hunk.lines[j], - operation = line.length > 0 ? line[0] : ' ', - content = line.length > 0 ? line.substr(1) : line, - delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n'; + // Copy everything from the end of where we applied the last hunk to the start of this hunk + for (var _i2 = minLine; _i2 < toPos; _i2++) { + resultLines.push(lines[_i2]); + } - if (operation === ' ') { - _toPos++; - } else if (operation === '-') { - lines.splice(_toPos, 1); - delimiters.splice(_toPos, 1); - /* istanbul ignore else */ - } else if (operation === '+') { - lines.splice(_toPos, 0, content); - delimiters.splice(_toPos, 0, delimiter); - _toPos++; - } else if (operation === '\\') { - var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; - - if (previousOperation === '+') { - removeEOFNL = true; - } else if (previousOperation === '-') { - addEOFNL = true; - } - } + // Add the lines produced by applying the hunk: + for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) { + var _line = hunkResult.patchedLines[_i3]; + resultLines.push(_line); } - } // Handle EOFNL insertion/removal + // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + minLine = hunkResult.oldLineLastI + 1; - if (removeEOFNL) { - while (!lines[lines.length - 1]) { - lines.pop(); - delimiters.pop(); - } - } else if (addEOFNL) { - lines.push(''); - delimiters.push('\n'); + // Note the offset between where the patch said the hunk should've applied and where we + // applied it, so we can adjust future hunks accordingly: + prevHunkOffset = toPos + 1 - hunk.oldStart; } - for (var _k = 0; _k < lines.length - 1; _k++) { - lines[_k] = lines[_k] + delimiters[_k]; + // Copy over the rest of the lines from the old text + for (var _i4 = minLine; _i4 < lines.length; _i4++) { + resultLines.push(lines[_i4]); } + return resultLines.join('\n'); + } - return lines.join(''); - } // Wrapper that supports multiple file patches via callbacks. - + // Wrapper that supports multiple file patches via callbacks. function applyPatches(uniDiff, options) { if (typeof uniDiff === 'string') { uniDiff = parsePatch(uniDiff); } - var currentIndex = 0; - function processIndex() { var index = uniDiff[currentIndex++]; - if (!index) { return options.complete(); } - options.loadFile(index, function (err, data) { if (err) { return options.complete(err); } - var updatedContent = applyPatch(data, index, options); options.patched(index, updatedContent, function (err) { if (err) { return options.complete(err); } - processIndex(); }); }); } - processIndex(); } @@ -14840,206 +15368,238 @@ module.exports = function defineDataProperty( if (!options) { options = {}; } - + if (typeof options === 'function') { + options = { + callback: options + }; + } if (typeof options.context === 'undefined') { options.context = 4; } - - var diff = diffLines(oldStr, newStr, options); - - if (!diff) { - return; + if (options.newlineIsToken) { + throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions'); } - - diff.push({ - value: '', - lines: [] - }); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function (entry) { - return ' ' + entry; - }); + if (!options.callback) { + return diffLinesResultToPatch(diffLines(oldStr, newStr, options)); + } else { + var _options = options, + _callback = _options.callback; + diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(diff) { + var patch = diffLinesResultToPatch(diff); + _callback(patch); + } + })); } + function diffLinesResultToPatch(diff) { + // STEP 1: Build up the patch with no "\ No newline at end of file" lines and with the arrays + // of lines containing trailing newline characters. We'll tidy up later... - var hunks = []; - var oldRangeStart = 0, + if (!diff) { + return; + } + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + var hunks = []; + var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1; - - var _loop = function _loop(i) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - var _curRange; - - // If we have previous context, start with that - if (!oldRangeStart) { - var prev = diff[i - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; + var _loop = function _loop() { + var current = diff[i], + lines = current.lines || splitLines(current.value); + current.lines = lines; + if (current.added || current.removed) { + var _curRange; + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } } - } // Output our changes - - (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { - return (current.added ? '+' : '-') + entry; - }))); // Track the updated file position + // Output our changes + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); - - if (current.added) { - newLine += lines.length; + // Track the updated file position + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + // end the range and output + var contextSize = Math.min(lines.length, options.context); + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + var _hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + hunks.push(_hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } oldLine += lines.length; + newLine += lines.length; } - } else { - // Identical context lines. Track line changes - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= options.context * 2 && i < diff.length - 2) { - var _curRange2; - - // Overlapping - (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); - } else { - var _curRange3; - - // end the range and output - var contextSize = Math.min(lines.length, options.context); - - (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); - - var hunk = { - oldStart: oldRangeStart, - oldLines: oldLine - oldRangeStart + contextSize, - newStart: newRangeStart, - newLines: newLine - newRangeStart + contextSize, - lines: curRange - }; - - if (i >= diff.length - 2 && lines.length <= options.context) { - // EOF is inside this hunk - var oldEOFNewline = /\n$/.test(oldStr); - var newEOFNewline = /\n$/.test(newStr); - var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; - - if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { - // special case: old has no eol and no trailing context; no-nl can end up before adds - // however, if the old file is empty, do not output the no-nl line - curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); - } - - if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { - curRange.push('\\ No newline at end of file'); - } - } + }; + for (var i = 0; i < diff.length; i++) { + _loop(); + } - hunks.push(hunk); - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; + // Step 2: eliminate the trailing `\n` from each line of each hunk, and, where needed, add + // "\ No newline at end of file". + for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) { + var hunk = _hunks[_i]; + for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) { + if (hunk.lines[_i2].endsWith('\n')) { + hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1); + } else { + hunk.lines.splice(_i2 + 1, 0, '\\ No newline at end of file'); + _i2++; // Skip the line we just added, then continue iterating } } - - oldLine += lines.length; - newLine += lines.length; } - }; - - for (var i = 0; i < diff.length; i++) { - _loop(i); + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; } - - return { - oldFileName: oldFileName, - newFileName: newFileName, - oldHeader: oldHeader, - newHeader: newHeader, - hunks: hunks - }; } function formatPatch(diff) { if (Array.isArray(diff)) { return diff.map(formatPatch).join('\n'); } - var ret = []; - if (diff.oldFileName == diff.newFileName) { ret.push('Index: ' + diff.oldFileName); } - ret.push('==================================================================='); ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); - for (var i = 0; i < diff.hunks.length; i++) { - var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + var hunk = diff.hunks[i]; + // Unified Diff Format quirk: If the chunk size is 0, // the first number is one lower than one would expect. // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 - if (hunk.oldLines === 0) { hunk.oldStart -= 1; } - if (hunk.newLines === 0) { hunk.newStart -= 1; } - ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); ret.push.apply(ret, hunk.lines); } - return ret.join('\n') + '\n'; } function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { - return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + var _options2; + if (typeof options === 'function') { + options = { + callback: options + }; + } + if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) { + var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options); + if (!patchObj) { + return; + } + return formatPatch(patchObj); + } else { + var _options3 = options, + _callback2 = _options3.callback; + structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, { + callback: function callback(patchObj) { + if (!patchObj) { + _callback2(); + } else { + _callback2(formatPatch(patchObj)); + } + } + })); + } } function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); } + /** + * Split `text` into an array of lines, including the trailing newline character (where present) + */ + function splitLines(text) { + var hasTrailingNl = text.endsWith('\n'); + var result = text.split('\n').map(function (line) { + return line + '\n'; + }); + if (hasTrailingNl) { + result.pop(); + } else { + result.push(result.pop().slice(0, -1)); + } + return result; + } + function arrayEqual(a, b) { if (a.length !== b.length) { return false; } - return arrayStartsWith(a, b); } function arrayStartsWith(array, start) { if (start.length > array.length) { return false; } - for (var i = 0; i < start.length; i++) { if (start[i] !== array[i]) { return false; } } - return true; } function calcLineCount(hunk) { var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), - oldLines = _calcOldNewLineCount.oldLines, - newLines = _calcOldNewLineCount.newLines; - + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; if (oldLines !== undefined) { hunk.oldLines = oldLines; } else { delete hunk.oldLines; } - if (newLines !== undefined) { hunk.newLines = newLines; } else { @@ -15049,14 +15609,14 @@ module.exports = function defineDataProperty( function merge(mine, theirs, base) { mine = loadPatch(mine, base); theirs = loadPatch(theirs, base); - var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + var ret = {}; + + // For index we just let it pass through as it doesn't have any necessary meaning. // Leaving sanity checks on this to the API consumer that may know more about the // meaning in their own context. - if (mine.index || theirs.index) { ret.index = mine.index || theirs.index; } - if (mine.newFileName || theirs.newFileName) { if (!fileNameChanged(mine)) { // No header or no change in ours, use theirs (and ours if theirs does not exist) @@ -15078,21 +15638,18 @@ module.exports = function defineDataProperty( ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); } } - ret.hunks = []; var mineIndex = 0, - theirsIndex = 0, - mineOffset = 0, - theirsOffset = 0; - + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { var mineCurrent = mine.hunks[mineIndex] || { - oldStart: Infinity - }, - theirsCurrent = theirs.hunks[theirsIndex] || { - oldStart: Infinity - }; - + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; if (hunkBefore(mineCurrent, theirsCurrent)) { // This patch does not overlap with any of the others, yay. ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); @@ -15118,30 +15675,23 @@ module.exports = function defineDataProperty( ret.hunks.push(mergedHunk); } } - return ret; } - function loadPatch(param, base) { if (typeof param === 'string') { if (/^@@/m.test(param) || /^Index:/m.test(param)) { return parsePatch(param)[0]; } - if (!base) { throw new Error('Must provide a base reference or pass in a patch'); } - return structuredPatch(undefined, undefined, base, param); } - return param; } - function fileNameChanged(patch) { return patch.newFileName && patch.newFileName !== patch.oldFileName; } - function selectField(index, mine, theirs) { if (mine === theirs) { return mine; @@ -15153,11 +15703,9 @@ module.exports = function defineDataProperty( }; } } - function hunkBefore(test, check) { return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; } - function cloneHunk(hunk, offset) { return { oldStart: hunk.oldStart, @@ -15167,39 +15715,37 @@ module.exports = function defineDataProperty( lines: hunk.lines }; } - function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { // This will generally result in a conflicted hunk, but there are cases where the context // is the only overlap where we can successfully merge the content here. var mine = { - offset: mineOffset, - lines: mineLines, - index: 0 - }, - their = { - offset: theirOffset, - lines: theirLines, - index: 0 - }; // Handle any leading content + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; + // Handle any leading content insertLeading(hunk, mine, their); - insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + insertLeading(hunk, their, mine); + // Now in the overlap content. Scan through and select the best changes from each. while (mine.index < mine.lines.length && their.index < their.lines.length) { var mineCurrent = mine.lines[mine.index], - theirCurrent = their.lines[their.index]; - + theirCurrent = their.lines[their.index]; if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { // Both modified ... mutualChange(hunk, mine, their); } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { var _hunk$lines; - // Mine inserted (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { var _hunk$lines2; - // Theirs inserted (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { @@ -15217,57 +15763,44 @@ module.exports = function defineDataProperty( // Context mismatch conflict(hunk, collectChange(mine), collectChange(their)); } - } // Now push anything that may be remaining - + } + // Now push anything that may be remaining insertTrailing(hunk, mine); insertTrailing(hunk, their); calcLineCount(hunk); } - function mutualChange(hunk, mine, their) { var myChanges = collectChange(mine), - theirChanges = collectChange(their); - + theirChanges = collectChange(their); if (allRemoves(myChanges) && allRemoves(theirChanges)) { // Special case for remove changes that are supersets of one another if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { var _hunk$lines3; - (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); - return; } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { var _hunk$lines4; - (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); - return; } } else if (arrayEqual(myChanges, theirChanges)) { var _hunk$lines5; - (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); - return; } - conflict(hunk, myChanges, theirChanges); } - function removal(hunk, mine, their, swap) { var myChanges = collectChange(mine), - theirChanges = collectContext(their, myChanges); - + theirChanges = collectContext(their, myChanges); if (theirChanges.merged) { var _hunk$lines6; - (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); } else { conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); } } - function conflict(hunk, mine, their) { hunk.conflict = true; hunk.lines.push({ @@ -15276,7 +15809,6 @@ module.exports = function defineDataProperty( theirs: their }); } - function insertLeading(hunk, insert, their) { while (insert.offset < their.offset && insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; @@ -15284,25 +15816,22 @@ module.exports = function defineDataProperty( insert.offset++; } } - function insertTrailing(hunk, insert) { while (insert.index < insert.lines.length) { var line = insert.lines[insert.index++]; hunk.lines.push(line); } } - function collectChange(state) { var ret = [], - operation = state.lines[state.index][0]; - + operation = state.lines[state.index][0]; while (state.index < state.lines.length) { - var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + var line = state.lines[state.index]; + // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. if (operation === '-' && line[0] === '+') { operation = '+'; } - if (operation === line[0]) { ret.push(line); state.index++; @@ -15310,39 +15839,35 @@ module.exports = function defineDataProperty( break; } } - return ret; } - function collectContext(state, matchChanges) { var changes = [], - merged = [], - matchIndex = 0, - contextChanges = false, - conflicted = false; - + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; while (matchIndex < matchChanges.length && state.index < state.lines.length) { var change = state.lines[state.index], - match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + match = matchChanges[matchIndex]; + // Once we've hit our add, then we are done if (match[0] === '+') { break; } - contextChanges = contextChanges || change[0] !== ' '; merged.push(match); - matchIndex++; // Consume any additions in the other block as a conflict to attempt - // to pull in the remaining context after this + matchIndex++; + // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this if (change[0] === '+') { conflicted = true; - while (change[0] === '+') { changes.push(change); change = state.lines[++state.index]; } } - if (match.substr(1) === change.substr(1)) { changes.push(change); state.index++; @@ -15350,44 +15875,35 @@ module.exports = function defineDataProperty( conflicted = true; } } - if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { conflicted = true; } - if (conflicted) { return changes; } - while (matchIndex < matchChanges.length) { merged.push(matchChanges[matchIndex++]); } - return { merged: merged, changes: changes }; } - function allRemoves(changes) { return changes.reduce(function (prev, change) { return prev && change[0] === '-'; }, true); } - function skipRemoveSuperset(state, removeChanges, delta) { for (var i = 0; i < delta; i++) { var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); - if (state.lines[state.index + i] !== ' ' + changeContent) { return false; } } - state.index += delta; return true; } - function calcOldNewLineCount(lines) { var oldLines = 0; var newLines = 0; @@ -15395,7 +15911,6 @@ module.exports = function defineDataProperty( if (typeof line !== 'string') { var myCount = calcOldNewLineCount(line.mine); var theirCount = calcOldNewLineCount(line.theirs); - if (oldLines !== undefined) { if (myCount.oldLines === theirCount.oldLines) { oldLines += myCount.oldLines; @@ -15403,7 +15918,6 @@ module.exports = function defineDataProperty( oldLines = undefined; } } - if (newLines !== undefined) { if (myCount.newLines === theirCount.newLines) { newLines += myCount.newLines; @@ -15415,7 +15929,6 @@ module.exports = function defineDataProperty( if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { newLines++; } - if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { oldLines++; } @@ -15431,7 +15944,6 @@ module.exports = function defineDataProperty( if (Array.isArray(structuredPatch)) { return structuredPatch.map(reversePatch).reverse(); } - return _objectSpread2(_objectSpread2({}, structuredPatch), {}, { oldFileName: structuredPatch.newFileName, oldHeader: structuredPatch.newHeader, @@ -15443,16 +15955,13 @@ module.exports = function defineDataProperty( oldStart: hunk.newStart, newLines: hunk.oldLines, newStart: hunk.oldStart, - linedelimiters: hunk.linedelimiters, lines: hunk.lines.map(function (l) { if (l.startsWith('-')) { return "+".concat(l.slice(1)); } - if (l.startsWith('+')) { return "-".concat(l.slice(1)); } - return l; }) }; @@ -15463,12 +15972,10 @@ module.exports = function defineDataProperty( // See: http://code.google.com/p/google-diff-match-patch/wiki/API function convertChangesToDMP(changes) { var ret = [], - change, - operation; - + change, + operation; for (var i = 0; i < changes.length; i++) { change = changes[i]; - if (change.added) { operation = 1; } else if (change.removed) { @@ -15476,37 +15983,29 @@ module.exports = function defineDataProperty( } else { operation = 0; } - ret.push([operation, change.value]); } - return ret; } function convertChangesToXML(changes) { var ret = []; - for (var i = 0; i < changes.length; i++) { var change = changes[i]; - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } - ret.push(escapeHTML(change.value)); - if (change.added) { ret.push(''); } else if (change.removed) { ret.push(''); } } - return ret.join(''); } - function escapeHTML(s) { var n = s; n = n.replace(/&/g, '&'); @@ -15539,11 +16038,9 @@ module.exports = function defineDataProperty( exports.reversePatch = reversePatch; exports.structuredPatch = structuredPatch; - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); +})); -},{}],121:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -15561,49 +16058,49 @@ if ($defineProperty) { module.exports = $defineProperty; -},{"get-intrinsic":131}],122:[function(require,module,exports){ +},{"get-intrinsic":113}],104:[function(require,module,exports){ 'use strict'; /** @type {import('./eval')} */ module.exports = EvalError; -},{}],123:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ 'use strict'; /** @type {import('.')} */ module.exports = Error; -},{}],124:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ 'use strict'; /** @type {import('./range')} */ module.exports = RangeError; -},{}],125:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ 'use strict'; /** @type {import('./ref')} */ module.exports = ReferenceError; -},{}],126:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ 'use strict'; /** @type {import('./syntax')} */ module.exports = SyntaxError; -},{}],127:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ 'use strict'; /** @type {import('./type')} */ module.exports = TypeError; -},{}],128:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ 'use strict'; /** @type {import('./uri')} */ module.exports = URIError; -},{}],129:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ 'use strict'; /* eslint no-invalid-this: 1 */ @@ -15689,14 +16186,14 @@ module.exports = function bind(that) { return bound; }; -},{}],130:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); module.exports = Function.prototype.bind || implementation; -},{"./implementation":129}],131:[function(require,module,exports){ +},{"./implementation":111}],113:[function(require,module,exports){ 'use strict'; var undefined; @@ -16057,7 +16554,7 @@ module.exports = function GetIntrinsic(name, allowMissing) { return value; }; -},{"es-errors":123,"es-errors/eval":122,"es-errors/range":124,"es-errors/ref":125,"es-errors/syntax":126,"es-errors/type":127,"es-errors/uri":128,"function-bind":130,"has-proto":134,"has-symbols":135,"hasown":137}],132:[function(require,module,exports){ +},{"es-errors":105,"es-errors/eval":104,"es-errors/range":106,"es-errors/ref":107,"es-errors/syntax":108,"es-errors/type":109,"es-errors/uri":110,"function-bind":112,"has-proto":116,"has-symbols":117,"hasown":119}],114:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -16075,7 +16572,7 @@ if ($gOPD) { module.exports = $gOPD; -},{"get-intrinsic":131}],133:[function(require,module,exports){ +},{"get-intrinsic":113}],115:[function(require,module,exports){ 'use strict'; var $defineProperty = require('es-define-property'); @@ -16099,7 +16596,7 @@ hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBu module.exports = hasPropertyDescriptors; -},{"es-define-property":121}],134:[function(require,module,exports){ +},{"es-define-property":103}],116:[function(require,module,exports){ 'use strict'; var test = { @@ -16116,7 +16613,7 @@ module.exports = function hasProto() { && !(test instanceof $Object); }; -},{}],135:[function(require,module,exports){ +},{}],117:[function(require,module,exports){ 'use strict'; var origSymbol = typeof Symbol !== 'undefined' && Symbol; @@ -16131,7 +16628,7 @@ module.exports = function hasNativeSymbols() { return hasSymbolSham(); }; -},{"./shams":136}],136:[function(require,module,exports){ +},{"./shams":118}],118:[function(require,module,exports){ 'use strict'; /* eslint complexity: [2, 18], max-statements: [2, 33] */ @@ -16175,7 +16672,7 @@ module.exports = function hasSymbols() { return true; }; -},{}],137:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ 'use strict'; var call = Function.prototype.call; @@ -16185,7 +16682,7 @@ var bind = require('function-bind'); /** @type {import('.')} */ module.exports = bind.call(call, $hasOwn); -},{"function-bind":130}],138:[function(require,module,exports){ +},{"function-bind":112}],120:[function(require,module,exports){ module.exports = extend; /* @@ -16259,7 +16756,7 @@ function isUnextendable(val) { return !val || (typeof val != 'object' && typeof val != 'function'); } -},{}],139:[function(require,module,exports){ +},{}],121:[function(require,module,exports){ /** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` @@ -17192,7 +17689,7 @@ function get(object, path, defaultValue) { module.exports = get; -},{}],140:[function(require,module,exports){ +},{}],122:[function(require,module,exports){ "use strict"; // cache a reference to setTimeout, so that our reference won't be stubbed out @@ -17247,7 +17744,7 @@ function configureLogger(config) { module.exports = configureLogger; -},{}],141:[function(require,module,exports){ +},{}],123:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17263,7 +17760,7 @@ CustomEvent.prototype.constructor = CustomEvent; module.exports = CustomEvent; -},{"./event":143}],142:[function(require,module,exports){ +},{"./event":125}],124:[function(require,module,exports){ "use strict"; function flattenOptions(options) { @@ -17387,7 +17884,7 @@ var EventTarget = { module.exports = EventTarget; -},{}],143:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ "use strict"; function Event(type, bubbles, cancelable, target) { @@ -17413,7 +17910,7 @@ Event.prototype = { module.exports = Event; -},{}],144:[function(require,module,exports){ +},{}],126:[function(require,module,exports){ "use strict"; module.exports = { @@ -17423,7 +17920,7 @@ module.exports = { EventTarget: require("./event-target"), }; -},{"./custom-event":141,"./event":143,"./event-target":142,"./progress-event":145}],145:[function(require,module,exports){ +},{"./custom-event":123,"./event":125,"./event-target":124,"./progress-event":127}],127:[function(require,module,exports){ "use strict"; var Event = require("./event"); @@ -17447,7 +17944,7 @@ ProgressEvent.prototype.constructor = ProgressEvent; module.exports = ProgressEvent; -},{"./event":143}],146:[function(require,module,exports){ +},{"./event":125}],128:[function(require,module,exports){ "use strict"; var FakeTimers = require("@sinonjs/fake-timers"); @@ -17522,7 +18019,7 @@ fakeServerWithClock.restore = function restore() { module.exports = fakeServerWithClock; -},{"./index":147,"@sinonjs/fake-timers":60}],147:[function(require,module,exports){ +},{"./index":129,"@sinonjs/fake-timers":60}],129:[function(require,module,exports){ "use strict"; var fakeXhr = require("../fake-xhr"); @@ -17675,7 +18172,6 @@ var fakeServer = { fakeHTTPMethods: true, logger: true, unsafeHeadersEnabled: true, - legacyRoutes: true, }; // eslint-disable-next-line no-param-reassign @@ -17739,8 +18235,6 @@ var fakeServer = { log: log, - legacyRoutes: true, - respondWith: function respondWith(method, url, body) { if (arguments.length === 1 && typeof method !== "function") { this.response = responseArray(method); @@ -17775,22 +18269,18 @@ var fakeServer = { url = url.replace("://", "\\://"); } if (/\*/.test(url)) { + // Uses the new syntax for repeating parameters in path-to-regexp, + // see https://github.com/pillarjs/path-to-regexp#unexpected--or- // eslint-disable-next-line no-param-reassign - url = url.replace(/\/\*/g, "/(.*)"); - } - - if (this.legacyRoutes) { - if (url.includes("?")) { - // eslint-disable-next-line no-param-reassign - url = url.replace("?", "\\?"); - } + url = url.replace(/\/\*/g, "/*path"); } } - push.call(this.responses, { method: method, url: - typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + typeof url === "string" && url !== "" + ? pathToRegexp(url).regexp + : url, response: typeof body === "function" ? body : responseArray(body), }); }, @@ -17885,7 +18375,7 @@ var fakeServer = { module.exports = fakeServer; -},{"../configure-logger":140,"../fake-xhr":150,"./log":148,"path-to-regexp":157}],148:[function(require,module,exports){ +},{"../configure-logger":122,"../fake-xhr":132,"./log":130,"path-to-regexp":139}],130:[function(require,module,exports){ "use strict"; var inspect = require("util").inspect; @@ -17903,7 +18393,7 @@ function log(response, request) { module.exports = log; -},{"util":116}],149:[function(require,module,exports){ +},{"util":98}],131:[function(require,module,exports){ "use strict"; exports.isSupported = (function () { @@ -17914,7 +18404,7 @@ exports.isSupported = (function () { } })(); -},{}],150:[function(require,module,exports){ +},{}],132:[function(require,module,exports){ "use strict"; var GlobalTextEncoder = @@ -18843,7 +19333,7 @@ module.exports = extend(fakeXMLHttpRequestFor(globalObject), { fakeXMLHttpRequestFor: fakeXMLHttpRequestFor, }); -},{"../configure-logger":140,"../event":144,"./blob":149,"@sinonjs/commons":47,"@sinonjs/text-encoding":107,"just-extend":138}],151:[function(require,module,exports){ +},{"../configure-logger":122,"../event":126,"./blob":131,"@sinonjs/commons":47,"@sinonjs/text-encoding":89,"just-extend":120}],133:[function(require,module,exports){ "use strict"; module.exports = { @@ -18852,7 +19342,7 @@ module.exports = { fakeXhr: require("./fake-xhr"), }; -},{"./fake-server":147,"./fake-server/fake-server-with-clock":146,"./fake-xhr":150}],152:[function(require,module,exports){ +},{"./fake-server":129,"./fake-server/fake-server-with-clock":128,"./fake-xhr":132}],134:[function(require,module,exports){ 'use strict'; var keysShim; @@ -18976,7 +19466,7 @@ if (!Object.keys) { } module.exports = keysShim; -},{"./isArguments":154}],153:[function(require,module,exports){ +},{"./isArguments":136}],135:[function(require,module,exports){ 'use strict'; var slice = Array.prototype.slice; @@ -19010,7 +19500,7 @@ keysShim.shim = function shimObjectKeys() { module.exports = keysShim; -},{"./implementation":152,"./isArguments":154}],154:[function(require,module,exports){ +},{"./implementation":134,"./isArguments":136}],136:[function(require,module,exports){ 'use strict'; var toStr = Object.prototype.toString; @@ -19029,7 +19519,7 @@ module.exports = function isArguments(value) { return isArgs; }; -},{}],155:[function(require,module,exports){ +},{}],137:[function(require,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es6-shim @@ -19077,7 +19567,7 @@ module.exports = function assign(target, source1) { return to; // step 4 }; -},{"call-bind/callBound":117,"has-symbols/shams":136,"object-keys":153}],156:[function(require,module,exports){ +},{"call-bind/callBound":99,"has-symbols/shams":118,"object-keys":135}],138:[function(require,module,exports){ 'use strict'; var implementation = require('./implementation'); @@ -19134,604 +19624,421 @@ module.exports = function getPolyfill() { return Object.assign; }; -},{"./implementation":155}],157:[function(require,module,exports){ +},{"./implementation":137}],139:[function(require,module,exports){ "use strict"; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var _Iter_peek; Object.defineProperty(exports, "__esModule", { value: true }); -exports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0; +exports.TokenData = void 0; +exports.parse = parse; +exports.compile = compile; +exports.match = match; +exports.pathToRegexp = pathToRegexp; +exports.stringify = stringify; +const DEFAULT_DELIMITER = "/"; +const NOOP_VALUE = (value) => value; +const ID_START = /^[$_\p{ID_Start}]$/u; +const ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u; +const DEBUG_URL = "https://git.new/pathToRegexpError"; +const SIMPLE_TOKENS = { + // Groups. + "{": "{", + "}": "}", + // Reserved. + "(": "(", + ")": ")", + "[": "[", + "]": "]", + "+": "+", + "?": "?", + "!": "!", +}; +/** + * Escape text for stringify to path. + */ +function escapeText(str) { + return str.replace(/[{}()\[\]+?!:*]/g, "\\$&"); +} +/** + * Escape a regular expression string. + */ +function escape(str) { + return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&"); +} /** * Tokenize input string. */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; +function* lexer(str) { + const chars = [...str]; + let i = 0; + function name() { + let value = ""; + if (ID_START.test(chars[++i])) { + value += chars[i]; + while (ID_CONTINUE.test(chars[++i])) { + value += chars[i]; } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i)); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at ".concat(j)); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; + else if (chars[i] === '"') { + let pos = i; + while (i < chars.length) { + if (chars[++i] === '"') { + i++; + pos = 0; + break; } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } + if (chars[i] === "\\") { + value += chars[++i]; } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j)); - } + else { + value += chars[i]; } - pattern += str[j++]; } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i)); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; + if (pos) { + throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`); + } } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); + if (!value) { + throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`); + } + return value; } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; + while (i < chars.length) { + const value = chars[i]; + const type = SIMPLE_TOKENS[value]; + if (type) { + yield { type, index: i++, value }; + } + else if (value === "\\") { + yield { type: "ESCAPED", index: i++, value: chars[i++] }; + } + else if (value === ":") { + const value = name(); + yield { type: "PARAM", index: i, value }; + } + else if (value === "*") { + const value = name(); + yield { type: "WILDCARD", index: i, value }; + } + else { + yield { type: "CHAR", index: i, value: chars[i++] }; + } + } + return { type: "END", index: i, value: "" }; } -/** - * Parse a string for the raw tokens. - */ -function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); +class Iter { + constructor(tokens) { + this.tokens = tokens; + _Iter_peek.set(this, void 0); + } + peek() { + if (!__classPrivateFieldGet(this, _Iter_peek, "f")) { + const next = this.tokens.next(); + __classPrivateFieldSet(this, _Iter_peek, next.value, "f"); + } + return __classPrivateFieldGet(this, _Iter_peek, "f"); + } + tryConsume(type) { + const token = this.peek(); + if (token.type !== type) + return; + __classPrivateFieldSet(this, _Iter_peek, undefined, "f"); // Reset after consumed. + return token.value; + } + consume(type) { + const value = this.tryConsume(type); if (value !== undefined) return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function () { - var result = ""; - var value; - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + const { type: nextType, index } = this.peek(); + throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`); + } + text() { + let result = ""; + let value; + while ((value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED"))) { result += value; } return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "", - }); - continue; - } - mustConsume("END"); } - return result; } -exports.parse = parse; +_Iter_peek = new WeakMap(); /** - * Compile a string to a template function for the path. + * Tokenized path instance. */ -function compile(str, options) { - return tokensToFunction(parse(str, options), options); +class TokenData { + constructor(tokens) { + this.tokens = tokens; + } } -exports.compile = compile; +exports.TokenData = TokenData; /** - * Expose a method for transforming tokens into the path function. + * Parse a string for the raw tokens. */ -function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; +function parse(str, options = {}) { + const { encodePath = NOOP_VALUE } = options; + const it = new Iter(lexer(str)); + function consume(endType) { + const tokens = []; + while (true) { + const path = it.text(); + if (path) + tokens.push({ type: "text", value: encodePath(path) }); + const param = it.tryConsume("PARAM"); + if (param) { + tokens.push({ + type: "param", + name: param, + }); continue; } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array")); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"".concat(token.name, "\" to not be empty")); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; - } + const wildcard = it.tryConsume("WILDCARD"); + if (wildcard) { + tokens.push({ + type: "wildcard", + name: wildcard, + }); continue; } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\"")); - } - path += token.prefix + segment + token.suffix; + const open = it.tryConsume("{"); + if (open) { + tokens.push({ + type: "group", + tokens: consume("}"), + }); continue; } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage)); + it.consume(endType); + return tokens; } - return path; - }; + } + const tokens = consume("END"); + return new TokenData(tokens); } -exports.tokensToFunction = tokensToFunction; /** - * Create path match function from `path-to-regexp` spec. + * Compile a string to a template function for the path. */ -function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); +function compile(path, options = {}) { + const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const data = path instanceof TokenData ? path : parse(path, options); + const fn = tokensToFunction(data.tokens, delimiter, encode); + return function path(data = {}) { + const [path, ...missing] = fn(data); + if (missing.length) { + throw new TypeError(`Missing parameters: ${missing.join(", ")}`); + } + return path; + }; +} +function tokensToFunction(tokens, delimiter, encode) { + const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode)); + return (data) => { + const result = [""]; + for (const encoder of encoders) { + const [value, ...extras] = encoder(data); + result[0] += value; + result.push(...extras); + } + return result; + }; } -exports.match = match; /** - * Create a path match function from `path-to-regexp` output. + * Convert a single token into a path building function. */ -function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); +function tokenToFunction(token, delimiter, encode) { + if (token.type === "text") + return () => [token.value]; + if (token.type === "group") { + const fn = tokensToFunction(token.tokens, delimiter, encode); + return (data) => { + const [value, ...missing] = fn(data); + if (!missing.length) + return [value]; + return [""]; + }; + } + const encodeValue = encode || NOOP_VALUE; + if (token.type === "wildcard" && encode !== false) { + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (!Array.isArray(value) || value.length === 0) { + throw new TypeError(`Expected "${token.name}" to be a non-empty array`); } + return [ + value + .map((value, index) => { + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}/${index}" to be a string`); + } + return encodeValue(value); + }) + .join(delimiter), + ]; }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); + } + return (data) => { + const value = data[token.name]; + if (value == null) + return ["", token.name]; + if (typeof value !== "string") { + throw new TypeError(`Expected "${token.name}" to be a string`); } - return { path: path, index: index, params: params }; + return [encodeValue(value)]; }; } -exports.regexpToFunction = regexpToFunction; /** - * Escape a regular expression string. + * Transform a path into a match function. */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +function match(path, options = {}) { + const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options; + const { regexp, keys } = pathToRegexp(path, options); + const decoders = keys.map((key) => { + if (decode === false) + return NOOP_VALUE; + if (key.type === "param") + return decode; + return (value) => value.split(delimiter).map(decode); + }); + return function match(input) { + const m = regexp.exec(input); + if (!m) + return false; + const path = m[0]; + const params = Object.create(null); + for (let i = 1; i < m.length; i++) { + if (m[i] === undefined) + continue; + const key = keys[i - 1]; + const decoder = decoders[i - 1]; + params[key.name] = decoder(m[i]); + } + return { path, params }; + }; } -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; +function pathToRegexp(path, options = {}) { + const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options; + const keys = []; + const sources = []; + const flags = sensitive ? "s" : "is"; + const paths = Array.isArray(path) ? path : [path]; + const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options)); + for (const { tokens } of items) { + for (const seq of flatten(tokens, 0, [])) { + const regexp = sequenceToRegExp(seq, delimiter, keys); + sources.push(regexp); + } + } + let pattern = `^(?:${sources.join("|")})`; + if (trailing) + pattern += `(?:${escape(delimiter)}$)?`; + pattern += end ? "$" : `(?=${escape(delimiter)}|$)`; + const regexp = new RegExp(pattern, flags); + return { regexp, keys }; } /** - * Pull out keys from a regexp. + * Generate a flat list of sequence tokens from the given tokens. */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "", - }); - execResult = groupsRegex.exec(path.source); +function* flatten(tokens, index, init) { + if (index === tokens.length) { + return yield init; } - return path; -} -/** - * Transform an array into a regexp. - */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); -} -/** - * Expose a function for taking tokens and returning a RegExp. - */ -function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } - else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } - else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } - else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } - } - else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); - } + const token = tokens[index]; + if (token.type === "group") { + const fork = init.slice(); + for (const seq of flatten(token.tokens, 0, fork)) { + yield* flatten(tokens, index + 1, seq); } } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 - : endToken === undefined; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } + init.push(token); } - return new RegExp(route, flags(options)); + yield* flatten(tokens, index + 1, init); } -exports.tokensToRegexp = tokensToRegexp; /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Transform a flat sequence of tokens into a regular expression. */ -function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); -} -exports.pathToRegexp = pathToRegexp; - -},{}],158:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); +function sequenceToRegExp(tokens, delimiter, keys) { + let result = ""; + let backtrack = ""; + let isSafeSegmentParam = true; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token.type === "text") { + result += escape(token.value); + backtrack = token.value; + isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter)); + continue; } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); + if (token.type === "param" || token.type === "wildcard") { + if (!isSafeSegmentParam && !backtrack) { + throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`); + } + if (token.type === "param") { + result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`; + } + else { + result += `(.+)`; + } + keys.push(token); + backtrack = ""; + isSafeSegmentParam = false; + continue; } } - - - + return result; } -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } +function negate(delimiter, backtrack) { + const values = [delimiter, backtrack].filter(Boolean); + const isSimple = values.every((value) => value.length === 1); + if (isSimple) + return `[^${escape(values.join(""))}]`; + return `(?:(?!${values.map(escape).join("|")}).)`; } - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); +/** + * Stringify token data into a path string. + */ +function stringify(data) { + return data.tokens + .map(function stringifyToken(token, index, tokens) { + if (token.type === "text") + return escapeText(token.value); + if (token.type === "group") { + return `{${token.tokens.map(stringifyToken).join("")}}`; + } + const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]); + const key = isSafe ? token.name : JSON.stringify(token.name); + if (token.type === "param") + return `:${key}`; + if (token.type === "wildcard") + return `*${key}`; + throw new TypeError(`Unexpected token: ${token}`); + }) + .join(""); +} +function isNameSafe(name) { + const [first, ...rest] = name; + if (!ID_START.test(first)) + return false; + return rest.every((char) => ID_CONTINUE.test(char)); } - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; +function isNextNameSafe(token) { + if (token?.type !== "text") + return true; + return !ID_CONTINUE.test(token.value[0]); } -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; -},{}],159:[function(require,module,exports){ +},{}],140:[function(require,module,exports){ 'use strict'; var GetIntrinsic = require('get-intrinsic'); @@ -19775,91 +20082,14 @@ module.exports = function setFunctionLength(fn, length) { return fn; }; -},{"define-data-property":119,"es-errors/type":127,"get-intrinsic":131,"gopd":132,"has-property-descriptors":133}],160:[function(require,module,exports){ +},{"define-data-property":101,"es-errors/type":109,"get-intrinsic":113,"gopd":114,"has-property-descriptors":115}],141:[function(require,module,exports){ 'use strict'; module.exports = { stdout: false, stderr: false }; -},{}],161:[function(require,module,exports){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -},{"process/browser.js":158}],162:[function(require,module,exports){ +},{}],142:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -20252,4 +20482,4 @@ return typeDetect; },{}]},{},[2])(2) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvY3JlYXRlLXNpbm9uLWFwaS5qcyIsImxpYi9zaW5vbi5qcyIsImxpYi9zaW5vbi9hc3NlcnQuanMiLCJsaWIvc2lub24vYmVoYXZpb3IuanMiLCJsaWIvc2lub24vY29sbGVjdC1vd24tbWV0aG9kcy5qcyIsImxpYi9zaW5vbi9jb2xvcml6ZXIuanMiLCJsaWIvc2lub24vY3JlYXRlLXNhbmRib3guanMiLCJsaWIvc2lub24vY3JlYXRlLXN0dWItaW5zdGFuY2UuanMiLCJsaWIvc2lub24vZGVmYXVsdC1iZWhhdmlvcnMuanMiLCJsaWIvc2lub24vZmFrZS5qcyIsImxpYi9zaW5vbi9tb2NrLWV4cGVjdGF0aW9uLmpzIiwibGliL3Npbm9uL21vY2suanMiLCJsaWIvc2lub24vcHJvbWlzZS5qcyIsImxpYi9zaW5vbi9wcm94eS1jYWxsLXV0aWwuanMiLCJsaWIvc2lub24vcHJveHktY2FsbC5qcyIsImxpYi9zaW5vbi9wcm94eS1pbnZva2UuanMiLCJsaWIvc2lub24vcHJveHkuanMiLCJsaWIvc2lub24vcmVzdG9yZS1vYmplY3QuanMiLCJsaWIvc2lub24vc2FuZGJveC5qcyIsImxpYi9zaW5vbi9zcHktZm9ybWF0dGVycy5qcyIsImxpYi9zaW5vbi9zcHkuanMiLCJsaWIvc2lub24vc3R1Yi5qcyIsImxpYi9zaW5vbi90aHJvdy1vbi1mYWxzeS1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2V4cG9ydC1hc3luYy1iZWhhdmlvcnMuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2V4dGVuZC5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtZXMtbW9kdWxlLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9pcy1ub24tZXhpc3RlbnQtcHJvcGVydHkuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2lzLXByb3BlcnR5LWNvbmZpZ3VyYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtcmVzdG9yYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9zaW5vbi10eXBlLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkcy5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvdXNlLXByb21pc2UtbGlicmFyeS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvd2Fsay1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dhbGsuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dyYXAtbWV0aG9kLmpzIiwibGliL3Npbm9uL3V0aWwvZmFrZS10aW1lcnMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2NsYXNzLW5hbWUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvZGVwcmVjYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9ldmVyeS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9mdW5jdGlvbi1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2dsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9vcmRlci1ieS1maXJzdC1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9jb3B5LXByb3RvdHlwZS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL29iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3Rocm93cy1vbi1wcm90by5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3ZhbHVlLXRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9mYWtlLXRpbWVycy9zcmMvZmFrZS10aW1lcnMtc3JjLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvYXJyYXktdHlwZXMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC1tYXRjaGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1ldGhvZC1leGlzdHMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9hc3NlcnQtdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2lzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvaXMtbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL21hdGNoLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL21hdGNoZXItcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvdHlwZS1tYXAuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9kZWVwLWVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvZ2V0LWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaWRlbnRpY2FsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtYXJndW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtYXJyYXktdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLWRhdGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1tYXAuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1uYW4uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1uZWctemVyby5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLXNldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLXN1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2l0ZXJhYmxlLXRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL21hdGNoLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvc2Ftc2FtLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2xhc3MtbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2RlcHJlY2F0ZWQuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9ldmVyeS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2Z1bmN0aW9uLW5hbWUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9vcmRlci1ieS1maXJzdC1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy90aHJvd3Mtb24tcHJvdG8uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvdmFsdWUtdG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3RleHQtZW5jb2RpbmcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvdGV4dC1lbmNvZGluZy9saWIvZW5jb2RpbmctaW5kZXhlcy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy90ZXh0LWVuY29kaW5nL2xpYi9lbmNvZGluZy5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvc3VwcG9ydC9pc0J1ZmZlckJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIsIm5vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGVmaW5lLWRhdGEtcHJvcGVydHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanMiLCJub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanMiLCJub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIm5vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy91cmkuanMiLCJub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXByb3RvL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzIiwibm9kZV9tb2R1bGVzL2hhc293bi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qdXN0LWV4dGVuZC9pbmRleC5janMiLCJub2RlX21vZHVsZXMvbG9kYXNoLmdldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9jb25maWd1cmUtbG9nZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2V2ZW50L2N1c3RvbS1ldmVudC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9ldmVudC10YXJnZXQuanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZXZlbnQvZXZlbnQuanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZXZlbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZXZlbnQvcHJvZ3Jlc3MtZXZlbnQuanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZmFrZS1zZXJ2ZXIvZmFrZS1zZXJ2ZXItd2l0aC1jbG9jay5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXNlcnZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXNlcnZlci9sb2cuanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZmFrZS14aHIvYmxvYi5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXhoci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbXBsZW1lbnRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QuYXNzaWduL2ltcGxlbWVudGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC5hc3NpZ24vcG9seWZpbGwuanMiLCJub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QvdHlwZS1kZXRlY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9SQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQzFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsc0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuL3Npbm9uL2JlaGF2aW9yXCIpO1xuY29uc3QgY3JlYXRlU2FuZGJveCA9IHJlcXVpcmUoXCIuL3Npbm9uL2NyZWF0ZS1zYW5kYm94XCIpO1xuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vc2lub24vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbmNvbnN0IGZha2VUaW1lcnMgPSByZXF1aXJlKFwiLi9zaW5vbi91dGlsL2Zha2UtdGltZXJzXCIpO1xuY29uc3QgU2FuZGJveCA9IHJlcXVpcmUoXCIuL3Npbm9uL3NhbmRib3hcIik7XG5jb25zdCBzdHViID0gcmVxdWlyZShcIi4vc2lub24vc3R1YlwiKTtcbmNvbnN0IHByb21pc2UgPSByZXF1aXJlKFwiLi9zaW5vbi9wcm9taXNlXCIpO1xuY29uc3QgbmlzZSA9IHJlcXVpcmUoXCJuaXNlXCIpO1xuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0cyBpbmplY3Rpb24gcG9pbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgWEhSIGxpYiBpbiB0ZXN0aW5nXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0cy5zaW5vblhockxpYlxuICogQHJldHVybnMge29iamVjdH0gYSBjb25maWd1cmVkIHNhbmRib3hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVBcGkob3B0cyA9IHsgc2lub25YaHJMaWI6IG5pc2UgfSkge1xuICAgIGFzc2VydChvcHRzPy5zaW5vblhockxpYiwgXCJObyBYSFIgbGliIHBhc3NlZCBpblwiKTtcbiAgICBjb25zdCB7IHNpbm9uWGhyTGliIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgYXBpTWV0aG9kcyA9IHtcbiAgICAgICAgY3JlYXRlU2FuZGJveDogY3JlYXRlU2FuZGJveCxcbiAgICAgICAgbWF0Y2g6IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcixcbiAgICAgICAgcmVzdG9yZU9iamVjdDogcmVxdWlyZShcIi4vc2lub24vcmVzdG9yZS1vYmplY3RcIiksXG5cbiAgICAgICAgZXhwZWN0YXRpb246IHJlcXVpcmUoXCIuL3Npbm9uL21vY2stZXhwZWN0YXRpb25cIiksXG5cbiAgICAgICAgLy8gZmFrZSB0aW1lcnNcbiAgICAgICAgdGltZXJzOiBmYWtlVGltZXJzLnRpbWVycyxcblxuICAgICAgICAvLyBmYWtlIFhIUlxuICAgICAgICB4aHI6IHNpbm9uWGhyTGliLmZha2VYaHIueGhyLFxuICAgICAgICBGYWtlWE1MSHR0cFJlcXVlc3Q6IHNpbm9uWGhyTGliLmZha2VYaHIuRmFrZVhNTEh0dHBSZXF1ZXN0LFxuXG4gICAgICAgIC8vIGZha2Ugc2VydmVyXG4gICAgICAgIGZha2VTZXJ2ZXI6IHNpbm9uWGhyTGliLmZha2VTZXJ2ZXIsXG4gICAgICAgIGZha2VTZXJ2ZXJXaXRoQ2xvY2s6IHNpbm9uWGhyTGliLmZha2VTZXJ2ZXJXaXRoQ2xvY2ssXG4gICAgICAgIGNyZWF0ZUZha2VTZXJ2ZXI6IHNpbm9uWGhyTGliLmZha2VTZXJ2ZXIuY3JlYXRlLmJpbmQoXG4gICAgICAgICAgICBzaW5vblhockxpYi5mYWtlU2VydmVyLFxuICAgICAgICApLFxuICAgICAgICBjcmVhdGVGYWtlU2VydmVyV2l0aENsb2NrOiBzaW5vblhockxpYi5mYWtlU2VydmVyV2l0aENsb2NrLmNyZWF0ZS5iaW5kKFxuICAgICAgICAgICAgc2lub25YaHJMaWIuZmFrZVNlcnZlcldpdGhDbG9jayxcbiAgICAgICAgKSxcblxuICAgICAgICBhZGRCZWhhdmlvcjogZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgICAgICAgICBiZWhhdmlvci5hZGRCZWhhdmlvcihzdHViLCBuYW1lLCBmbik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZmFrZSBwcm9taXNlXG4gICAgICAgIHByb21pc2U6IHByb21pc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IHNhbmRib3ggPSBuZXcgU2FuZGJveCgpO1xuICAgIHJldHVybiBleHRlbmQoc2FuZGJveCwgYXBpTWV0aG9kcyk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNyZWF0ZUFwaSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1zaW5vbi1hcGlcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXBpKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKiBAbW9kdWxlICovXG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgY2FsbGVkSW5PcmRlciA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmNhbGxlZEluT3JkZXI7XG5jb25zdCBjcmVhdGVNYXRjaGVyID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xuY29uc3Qgb3JkZXJCeUZpcnN0Q2FsbCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLm9yZGVyQnlGaXJzdENhbGw7XG5jb25zdCB0aW1lc0luV29yZHMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvdGltZXMtaW4td29yZHNcIik7XG5jb25zdCBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcbmNvbnN0IHN0cmluZ1NsaWNlID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuc2xpY2U7XG5jb25zdCBnbG9iYWxPYmplY3QgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5nbG9iYWw7XG5cbmNvbnN0IGFycmF5U2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuY29uc3QgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG5jb25zdCBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xuY29uc3Qgam9pbiA9IGFycmF5UHJvdG8uam9pbjtcbmNvbnN0IHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG5mdW5jdGlvbiBhcHBseURlZmF1bHRzKG9iaiwgZGVmYXVsdHMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZWZhdWx0cykpIHtcbiAgICAgICAgY29uc3QgdmFsID0gb2JqW2tleV07XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZUFzc2VydE9wdGlvbnNcbiAqIEBnbG9iYWxcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRMaW1pdEFzc2VydGlvbkxvZ3NdIGRlZmF1bHQgaXMgZmFsc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSAgW2Fzc2VydGlvbkxvZ0xpbWl0XSBkZWZhdWx0IGlzIDEwS1xuICovXG5cbi8qKlxuICogQ3JlYXRlIGFuIGFzc2VydGlvbiBvYmplY3QgdGhhdCBleHBvc2VzIHNldmVyYWwgbWV0aG9kcyB0byBpbnZva2VcbiAqXG4gKiBAcGFyYW0ge0NyZWF0ZUFzc2VydE9wdGlvbnN9ICBbb3B0c10gb3B0aW9ucyBiYWdcbiAqIEByZXR1cm5zIHtvYmplY3R9IG9iamVjdCB3aXRoIG11bHRpcGxlIGFzc2VydGlvbiBtZXRob2RzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2VydE9iamVjdChvcHRzKSB7XG4gICAgY29uc3QgY2xlYW5lZEFzc2VydE9wdGlvbnMgPSBvcHRzIHx8IHt9O1xuICAgIGFwcGx5RGVmYXVsdHMoY2xlYW5lZEFzc2VydE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkTGltaXRBc3NlcnRpb25Mb2dzOiBmYWxzZSxcbiAgICAgICAgYXNzZXJ0aW9uTG9nTGltaXQ6IDFlNCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2VydCA9IHtcbiAgICAgICAgZmFpbEV4Y2VwdGlvbjogXCJBc3NlcnRFcnJvclwiLFxuXG4gICAgICAgIGZhaWw6IGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgICAgICAgbGV0IG1zZyA9IG1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoY2xlYW5lZEFzc2VydE9wdGlvbnMuc2hvdWxkTGltaXRBc3NlcnRpb25Mb2dzKSB7XG4gICAgICAgICAgICAgICAgbXNnID0gbWVzc2FnZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuZWRBc3NlcnRPcHRpb25zLmFzc2VydGlvbkxvZ0xpbWl0LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgZXJyb3IubmFtZSA9IHRoaXMuZmFpbEV4Y2VwdGlvbiB8fCBhc3NlcnQuZmFpbEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFzczogZnVuY3Rpb24gcGFzcygpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsT3JkZXI6IGZ1bmN0aW9uIGFzc2VydENhbGxPcmRlcigpIHtcbiAgICAgICAgICAgIHZlcmlmeUlzU3R1Yi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBhY3R1YWwgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoIWNhbGxlZEluT3JkZXIoYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gam9pbihhcmd1bWVudHMsIFwiLCBcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGNhbGxzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbHNbLS1pXS5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2UoY2FsbHMsIGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGpvaW4ob3JkZXJCeUZpcnN0Q2FsbChjYWxscyksIFwiLCBcIik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGZhaWxzLCB3ZSdsbCBqdXN0IGZhbGwgYmFjayB0byB0aGUgYmxhbmsgc3RyaW5nXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFpbEFzc2VydGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IHRvIGJlIGNhbGxlZCBpbiBvcmRlciBidXQgd2VyZSBjYWxsZWQgYXMgJHthY3R1YWx9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhcImNhbGxPcmRlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsQ291bnQ6IGZ1bmN0aW9uIGFzc2VydENhbGxDb3VudChtZXRob2QsIGNvdW50KSB7XG4gICAgICAgICAgICB2ZXJpZnlJc1N0dWIobWV0aG9kKTtcblxuICAgICAgICAgICAgbGV0IG1zZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY291bnQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBtc2cgPVxuICAgICAgICAgICAgICAgICAgICBgZXhwZWN0ZWQgJHtpbnNwZWN0KGNvdW50KX0gdG8gYmUgYSBudW1iZXIgYCArXG4gICAgICAgICAgICAgICAgICAgIGBidXQgd2FzIG9mIHR5cGUgJHt0eXBlb2YgY291bnR9YDtcbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKHRoaXMsIG1zZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsQ291bnQgIT09IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgbXNnID1cbiAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCAke3RpbWVzSW5Xb3Jkcyhjb3VudCl9IGAgK1xuICAgICAgICAgICAgICAgICAgICBgYnV0IHdhcyBjYWxsZWQgJWMlQ2A7XG4gICAgICAgICAgICAgICAgZmFpbEFzc2VydGlvbih0aGlzLCBtZXRob2QucHJpbnRmKG1zZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhcImNhbGxDb3VudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBleHBvc2U6IGZ1bmN0aW9uIGV4cG9zZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPVxuICAgICAgICAgICAgICAgICh0eXBlb2Ygby5wcmVmaXggPT09IFwidW5kZWZpbmVkXCIgJiYgXCJhc3NlcnRcIikgfHwgby5wcmVmaXg7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlRmFpbCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIG8uaW5jbHVkZUZhaWwgPT09IFwidW5kZWZpbmVkXCIgfHwgQm9vbGVhbihvLmluY2x1ZGVGYWlsKTtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcztcblxuICAgICAgICAgICAgZm9yRWFjaChPYmplY3Qua2V5cyhpbnN0YW5jZSksIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCAhPT0gXCJleHBvc2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICAoaW5jbHVkZUZhaWwgfHwgIS9eKGZhaWwpLy50ZXN0KG1ldGhvZCkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtleHBvc2VkTmFtZShwcmVmaXgsIG1ldGhvZCldID0gaW5zdGFuY2VbbWV0aG9kXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSxcblxuICAgICAgICBtYXRjaDogZnVuY3Rpb24gbWF0Y2goYWN0dWFsLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIoZXhwZWN0YXRpb24pO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXIudGVzdChhY3R1YWwpKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MoXCJtYXRjaFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBcImV4cGVjdGVkIHZhbHVlIHRvIG1hdGNoXCIsXG4gICAgICAgICAgICAgICAgICAgIGAgICAgZXhwZWN0ZWQgPSAke2luc3BlY3QoZXhwZWN0YXRpb24pfWAsXG4gICAgICAgICAgICAgICAgICAgIGAgICAgYWN0dWFsID0gJHtpbnNwZWN0KGFjdHVhbCl9YCxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgZmFpbEFzc2VydGlvbih0aGlzLCBqb2luKGZvcm1hdHRlZCwgXCJcXG5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlJc1N0dWIoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG5cbiAgICAgICAgZm9yRWFjaChhcmdzLCBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKFwiZmFrZSBpcyBub3QgYSBzcHlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QucHJveHkgJiYgbWV0aG9kLnByb3h5LmlzU2lub25Qcm94eSkge1xuICAgICAgICAgICAgICAgIHZlcmlmeUlzU3R1YihtZXRob2QucHJveHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKGAke21ldGhvZH0gaXMgbm90IGEgZnVuY3Rpb25gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5nZXRDYWxsICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmZhaWwoYCR7bWV0aG9kfSBpcyBub3Qgc3R1YmJlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5SXNWYWxpZEFzc2VydGlvbihhc3NlcnRpb25NZXRob2QsIGFzc2VydGlvbkFyZ3MpIHtcbiAgICAgICAgc3dpdGNoIChhc3NlcnRpb25NZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3RDYWxsZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsZWRPbmNlXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FsbGVkVHdpY2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsZWRUaHJpY2VcIjpcbiAgICAgICAgICAgICAgICBpZiAoYXNzZXJ0aW9uQXJncy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmZhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHthc3NlcnRpb25NZXRob2R9IHRha2VzIDEgYXJndW1lbnQgYnV0IHdhcyBjYWxsZWQgd2l0aCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbkFyZ3MubGVuZ3RoICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcmd1bWVudHNgLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsQXNzZXJ0aW9uKG9iamVjdCwgbXNnKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IG9iamVjdCB8fCBnbG9iYWxPYmplY3Q7XG4gICAgICAgIGNvbnN0IGZhaWxNZXRob2QgPSBvYmouZmFpbCB8fCBhc3NlcnQuZmFpbDtcbiAgICAgICAgZmFpbE1ldGhvZC5jYWxsKG9iaiwgbXNnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtaXJyb3JQcm9wQXNBc3NlcnRpb24obmFtZSwgbWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgICAgIGxldCBtc2cgPSBtZXNzYWdlO1xuICAgICAgICBsZXQgbWV0aCA9IG1ldGhvZDtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIG1zZyA9IG1ldGhvZDtcbiAgICAgICAgICAgIG1ldGggPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0W25hbWVdID0gZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgICAgIHZlcmlmeUlzU3R1YihmYWtlKTtcblxuICAgICAgICAgICAgY29uc3QgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgdmVyaWZ5SXNWYWxpZEFzc2VydGlvbihuYW1lLCBhcmdzKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQgPSAhbWV0aChmYWtlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZha2VbbWV0aF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAhZmFrZVttZXRoXS5hcHBseShmYWtlLCBhcmdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAhZmFrZVttZXRoXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIChmYWtlLnByaW50ZiB8fCBmYWtlLnByb3h5LnByaW50ZikuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWtlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0KFttc2ddLCBhcmdzKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBvc2VkTmFtZShwcmVmaXgsIHByb3ApIHtcbiAgICAgICAgcmV0dXJuICFwcmVmaXggfHwgL15mYWlsLy50ZXN0KHByb3ApXG4gICAgICAgICAgICA/IHByb3BcbiAgICAgICAgICAgIDogcHJlZml4ICtcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1NsaWNlKHByb3AsIDAsIDEpLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5nU2xpY2UocHJvcCwgMSk7XG4gICAgfVxuXG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGhhdmUgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZSBidXQgd2FzIG5ldmVyIGNhbGxlZFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcIm5vdENhbGxlZFwiLFxuICAgICAgICBmdW5jdGlvbiAoc3B5KSB7XG4gICAgICAgICAgICByZXR1cm4gIXNweS5jYWxsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZE9uY2VcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgb25jZSBidXQgd2FzIGNhbGxlZCAlYyVDXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkVHdpY2VcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgdHdpY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFRocmljZVwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB0aHJpY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZE9uXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggJTEgYXMgdGhpcyBidXQgd2FzIGNhbGxlZCB3aXRoICV0XCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkT25cIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggJTEgYXMgdGhpcyBidXQgd2FzIGNhbGxlZCB3aXRoICV0XCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJjYWxsZWRXaXRoTmV3XCIsIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggbmV3XCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJhbHdheXNDYWxsZWRXaXRoTmV3XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoIG5ld1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFdpdGhcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRXaXRoTWF0Y2hcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlRFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImFsd2F5c0NhbGxlZFdpdGhcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoIG1hdGNoICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBleGFjdCBhcmd1bWVudHMgJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPbmNlV2l0aEV4YWN0bHlcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgb25jZSBhbmQgd2l0aCBleGFjdCBhcmd1bWVudHMgJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPbmNlV2l0aE1hdGNoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIG9uY2UgYW5kIHdpdGggbWF0Y2ggJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJhbHdheXNDYWxsZWRXaXRoRXhhY3RseVwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBleGFjdCBhcmd1bWVudHMgJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJuZXZlckNhbGxlZFdpdGhcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBuZXZlciBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgJSolQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcIm5ldmVyQ2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gbmV2ZXIgYmUgY2FsbGVkIHdpdGggbWF0Y2ggJSolQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwidGhyZXdcIiwgXCIlbiBkaWQgbm90IHRocm93IGV4Y2VwdGlvbiVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImFsd2F5c1RocmV3XCIsIFwiJW4gZGlkIG5vdCBhbHdheXMgdGhyb3cgZXhjZXB0aW9uJUNcIik7XG5cbiAgICByZXR1cm4gYXNzZXJ0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2VydE9iamVjdCgpO1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlQXNzZXJ0T2JqZWN0ID0gY3JlYXRlQXNzZXJ0T2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbmNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbmNvbnN0IG5leHRUaWNrID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL25leHQtdGlja1wiKTtcbmNvbnN0IHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuY29uc3QgZXhwb3J0QXN5bmNCZWhhdmlvcnMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXhwb3J0LWFzeW5jLWJlaGF2aW9yc1wiKTtcblxuY29uc3QgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG5jb25zdCBqb2luID0gYXJyYXlQcm90by5qb2luO1xuY29uc3QgcmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuY29uc3QgdXNlTGVmdE1vc3RDYWxsYmFjayA9IC0xO1xuY29uc3QgdXNlUmlnaHRNb3N0Q2FsbGJhY2sgPSAtMjtcblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soYmVoYXZpb3IsIGFyZ3MpIHtcbiAgICBjb25zdCBjYWxsQXJnQXQgPSBiZWhhdmlvci5jYWxsQXJnQXQ7XG5cbiAgICBpZiAoY2FsbEFyZ0F0ID49IDApIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbY2FsbEFyZ0F0XTtcbiAgICB9XG5cbiAgICBsZXQgYXJndW1lbnRMaXN0O1xuXG4gICAgaWYgKGNhbGxBcmdBdCA9PT0gdXNlTGVmdE1vc3RDYWxsYmFjaykge1xuICAgICAgICBhcmd1bWVudExpc3QgPSBhcmdzO1xuICAgIH1cblxuICAgIGlmIChjYWxsQXJnQXQgPT09IHVzZVJpZ2h0TW9zdENhbGxiYWNrKSB7XG4gICAgICAgIGFyZ3VtZW50TGlzdCA9IHJldmVyc2Uoc2xpY2UoYXJncykpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxBcmdQcm9wID0gYmVoYXZpb3IuY2FsbEFyZ1Byb3A7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50TGlzdC5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgaWYgKCFjYWxsQXJnUHJvcCAmJiB0eXBlb2YgYXJndW1lbnRMaXN0W2ldID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudExpc3RbaV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjYWxsQXJnUHJvcCAmJlxuICAgICAgICAgICAgYXJndW1lbnRMaXN0W2ldICYmXG4gICAgICAgICAgICB0eXBlb2YgYXJndW1lbnRMaXN0W2ldW2NhbGxBcmdQcm9wXSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50TGlzdFtpXVtjYWxsQXJnUHJvcF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2tFcnJvcihiZWhhdmlvciwgZnVuYywgYXJncykge1xuICAgIGlmIChiZWhhdmlvci5jYWxsQXJnQXQgPCAwKSB7XG4gICAgICAgIGxldCBtc2c7XG5cbiAgICAgICAgaWYgKGJlaGF2aW9yLmNhbGxBcmdQcm9wKSB7XG4gICAgICAgICAgICBtc2cgPSBgJHtmdW5jdGlvbk5hbWUoXG4gICAgICAgICAgICAgICAgYmVoYXZpb3Iuc3R1YixcbiAgICAgICAgICAgICl9IGV4cGVjdGVkIHRvIHlpZWxkIHRvICcke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbEFyZ1Byb3AsXG4gICAgICAgICAgICApfScsIGJ1dCBubyBvYmplY3Qgd2l0aCBzdWNoIGEgcHJvcGVydHkgd2FzIHBhc3NlZC5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbXNnID0gYCR7ZnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLnN0dWIsXG4gICAgICAgICAgICApfSBleHBlY3RlZCB0byB5aWVsZCwgYnV0IG5vIGNhbGxiYWNrIHdhcyBwYXNzZWQuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1zZyArPSBgIFJlY2VpdmVkIFske2pvaW4oYXJncywgXCIsIFwiKX1dYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBhcmd1bWVudCBhdCBpbmRleCAke2JlaGF2aW9yLmNhbGxBcmdBdH0gaXMgbm90IGEgZnVuY3Rpb246ICR7ZnVuY31gO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVBcmdzKG5hbWUsIGJlaGF2aW9yLCBhcmdzKSB7XG4gICAgLy8gbWFwIGZ1bmN0aW9uIG5hbWUgdG8gaW50ZXJuYWwgcHJvcGVydHlcbiAgICAvLyAgIGNhbGxzQXJnID0+IGNhbGxBcmdBdFxuICAgIGNvbnN0IHByb3BlcnR5ID0gbmFtZS5yZXBsYWNlKC9zQXJnLywgXCJBcmdBdFwiKTtcbiAgICBjb25zdCBpbmRleCA9IGJlaGF2aW9yW3Byb3BlcnR5XTtcblxuICAgIGlmIChpbmRleCA+PSBhcmdzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYCR7bmFtZX0gZmFpbGVkOiAke2luZGV4ICsgMX0gYXJndW1lbnRzIHJlcXVpcmVkIGJ1dCBvbmx5ICR7XG4gICAgICAgICAgICAgICAgYXJncy5sZW5ndGhcbiAgICAgICAgICAgIH0gcHJlc2VudGAsXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soYmVoYXZpb3IsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGJlaGF2aW9yLmNhbGxBcmdBdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbnN1cmVBcmdzKFwiY2FsbHNBcmdcIiwgYmVoYXZpb3IsIGFyZ3MpO1xuICAgICAgICBjb25zdCBmdW5jID0gZ2V0Q2FsbGJhY2soYmVoYXZpb3IsIGFyZ3MpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGdldENhbGxiYWNrRXJyb3IoYmVoYXZpb3IsIGZ1bmMsIGFyZ3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWhhdmlvci5jYWxsYmFja0FzeW5jKSB7XG4gICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBiZWhhdmlvci5jYWxsYmFja0FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShcbiAgICAgICAgICAgICAgICBiZWhhdmlvci5jYWxsYmFja0NvbnRleHQsXG4gICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgcHJvdG8gPSB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoc3R1Yikge1xuICAgICAgICBjb25zdCBiZWhhdmlvciA9IGV4dGVuZCh7fSwgcHJvdG8pO1xuICAgICAgICBkZWxldGUgYmVoYXZpb3IuY3JlYXRlO1xuICAgICAgICBkZWxldGUgYmVoYXZpb3IuYWRkQmVoYXZpb3I7XG4gICAgICAgIGRlbGV0ZSBiZWhhdmlvci5jcmVhdGVCZWhhdmlvcjtcbiAgICAgICAgYmVoYXZpb3Iuc3R1YiA9IHN0dWI7XG5cbiAgICAgICAgaWYgKHN0dWIuZGVmYXVsdEJlaGF2aW9yICYmIHN0dWIuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgICAgICBiZWhhdmlvci5wcm9taXNlTGlicmFyeSA9IHN0dWIuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJlaGF2aW9yO1xuICAgIH0sXG5cbiAgICBpc1ByZXNlbnQ6IGZ1bmN0aW9uIGlzUHJlc2VudCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmNhbGxBcmdBdCA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdGhpcy5leGNlcHRpb24gfHxcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uQ3JlYXRvciB8fFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucmV0dXJuQXJnQXQgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVGhpcyB8fFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucmVzb2x2ZUFyZ0F0ID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVUaGlzIHx8XG4gICAgICAgICAgICB0eXBlb2YgdGhpcy50aHJvd0FyZ0F0ID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0aGlzLmZha2VGbiB8fFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZURlZmluZWRcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyplc2xpbnQgY29tcGxleGl0eTogW1wiZXJyb3JcIiwgMjBdKi9cbiAgICBpbnZva2U6IGZ1bmN0aW9uIGludm9rZShjb250ZXh0LCBhcmdzKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIGNhbGxDYWxsYmFjayAoY29uZGl0aW9uYWxseSkgY2FsbHMgZW5zdXJlQXJnc1xuICAgICAgICAgKlxuICAgICAgICAgKiBOb3RlOiBjYWxsQ2FsbGJhY2sgaW50ZW50aW9uYWxseSBoYXBwZW5zIGJlZm9yZVxuICAgICAgICAgKiBldmVyeXRoaW5nIGVsc2UgYW5kIGNhbm5vdCBiZSBtb3ZlZCBsb3dlclxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBjYWxsQ2FsbGJhY2sodGhpcywgYXJncyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLmV4Y2VwdGlvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV4Y2VwdGlvbkNyZWF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uID0gdGhpcy5leGNlcHRpb25DcmVhdG9yKCk7XG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLmV4Y2VwdGlvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5BcmdBdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZW5zdXJlQXJncyhcInJldHVybnNBcmdcIiwgdGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gYXJnc1t0aGlzLnJldHVybkFyZ0F0XTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJldHVyblRoaXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnRocm93QXJnQXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVuc3VyZUFyZ3MoXCJ0aHJvd3NBcmdcIiwgdGhpcywgYXJncyk7XG4gICAgICAgICAgICB0aHJvdyBhcmdzW3RoaXMudGhyb3dBcmdBdF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mYWtlRm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZha2VGbi5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yZXNvbHZlQXJnQXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVuc3VyZUFyZ3MoXCJyZXNvbHZlc0FyZ1wiLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5wcm9taXNlTGlicmFyeSB8fCBQcm9taXNlKS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIGFyZ3NbdGhpcy5yZXNvbHZlQXJnQXRdLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVUaGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucHJvbWlzZUxpYnJhcnkgfHwgUHJvbWlzZSkucmVzb2x2ZShjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmUpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5wcm9taXNlTGlicmFyeSB8fCBQcm9taXNlKS5yZXNvbHZlKHRoaXMucmV0dXJuVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucHJvbWlzZUxpYnJhcnkgfHwgUHJvbWlzZSkucmVqZWN0KHRoaXMucmV0dXJuVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsbHNUaHJvdWdoKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkTWV0aG9kID0gdGhpcy5lZmZlY3RpdmVXcmFwcGVkTWV0aG9kKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkTWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsbHNUaHJvdWdoV2l0aE5ldykge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBtZXRob2QgKGFzc3VtZWQgdG8gYmUgYSBjb25zdHJ1Y3RvciBpbiB0aGlzIGNhc2UpXG4gICAgICAgICAgICBjb25zdCBXcmFwcGVkQ2xhc3MgPSB0aGlzLmVmZmVjdGl2ZVdyYXBwZWRNZXRob2QoKTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGFyZ3VtZW50cyBvYmplY3QgaW50byBhIG5vcm1hbCBhcnJheVxuICAgICAgICAgICAgY29uc3QgYXJnc0FycmF5ID0gc2xpY2UoYXJncyk7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgY29uc3QgRiA9IFdyYXBwZWRDbGFzcy5iaW5kLmFwcGx5KFxuICAgICAgICAgICAgICAgIFdyYXBwZWRDbGFzcyxcbiAgICAgICAgICAgICAgICBjb25jYXQoW251bGxdLCBhcmdzQXJyYXkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRigpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJldHVyblZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5WYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jYWxsQXJnQXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJldHVyblZhbHVlO1xuICAgIH0sXG5cbiAgICBlZmZlY3RpdmVXcmFwcGVkTWV0aG9kOiBmdW5jdGlvbiBlZmZlY3RpdmVXcmFwcGVkTWV0aG9kKCkge1xuICAgICAgICBmb3IgKGxldCBzdHViYiA9IHRoaXMuc3R1Yjsgc3R1YmI7IHN0dWJiID0gc3R1YmIucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAoc3R1YmIud3JhcHBlZE1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHViYi53cmFwcGVkTWV0aG9kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHdyYXBwZWQgbWV0aG9kXCIpO1xuICAgIH0sXG5cbiAgICBvbkNhbGw6IGZ1bmN0aW9uIG9uQ2FsbChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHViLm9uQ2FsbChpbmRleCk7XG4gICAgfSxcblxuICAgIG9uRmlyc3RDYWxsOiBmdW5jdGlvbiBvbkZpcnN0Q2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vbkZpcnN0Q2FsbCgpO1xuICAgIH0sXG5cbiAgICBvblNlY29uZENhbGw6IGZ1bmN0aW9uIG9uU2Vjb25kQ2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vblNlY29uZENhbGwoKTtcbiAgICB9LFxuXG4gICAgb25UaGlyZENhbGw6IGZ1bmN0aW9uIG9uVGhpcmRDYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHViLm9uVGhpcmRDYWxsKCk7XG4gICAgfSxcblxuICAgIHdpdGhBcmdzOiBmdW5jdGlvbiB3aXRoQXJncygvKiBhcmd1bWVudHMgKi8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0RlZmluaW5nIGEgc3R1YiBieSBpbnZva2luZyBcInN0dWIub25DYWxsKC4uLikud2l0aEFyZ3MoLi4uKVwiICcgK1xuICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkLiBVc2UgXCJzdHViLndpdGhBcmdzKC4uLikub25DYWxsKC4uLilcIiAnICtcbiAgICAgICAgICAgICAgICBcInRvIGRlZmluZSBzZXF1ZW50aWFsIGJlaGF2aW9yIGZvciBjYWxscyB3aXRoIGNlcnRhaW4gYXJndW1lbnRzLlwiLFxuICAgICAgICApO1xuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCZWhhdmlvcihiZWhhdmlvck1ldGhvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yID0gdGhpcy5kZWZhdWx0QmVoYXZpb3IgfHwgcHJvdG8uY3JlYXRlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvcltiZWhhdmlvck1ldGhvZF0uYXBwbHkoXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgICAgIGFyZ3VtZW50cyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYWRkQmVoYXZpb3Ioc3R1YiwgbmFtZSwgZm4pIHtcbiAgICBwcm90b1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm4uYXBwbHkodGhpcywgY29uY2F0KFt0aGlzXSwgc2xpY2UoYXJndW1lbnRzKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHViIHx8IHRoaXM7XG4gICAgfTtcblxuICAgIHN0dWJbbmFtZV0gPSBjcmVhdGVCZWhhdmlvcihuYW1lKTtcbn1cblxucHJvdG8uYWRkQmVoYXZpb3IgPSBhZGRCZWhhdmlvcjtcbnByb3RvLmNyZWF0ZUJlaGF2aW9yID0gY3JlYXRlQmVoYXZpb3I7XG5cbmNvbnN0IGFzeW5jQmVoYXZpb3JzID0gZXhwb3J0QXN5bmNCZWhhdmlvcnMocHJvdG8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZC5ub25FbnVtKHt9LCBwcm90bywgYXN5bmNCZWhhdmlvcnMpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHdhbGsgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd2Fsa1wiKTtcbmNvbnN0IGdldFByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbmNvbnN0IGhhc093blByb3BlcnR5ID1cbiAgICByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IHB1c2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LnB1c2g7XG5cbmZ1bmN0aW9uIGNvbGxlY3RNZXRob2QobWV0aG9kcywgb2JqZWN0LCBwcm9wLCBwcm9wT3duZXIpIHtcbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IocHJvcE93bmVyLCBwcm9wKS52YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIGhhc093blByb3BlcnR5KG9iamVjdCwgcHJvcClcbiAgICApIHtcbiAgICAgICAgcHVzaChtZXRob2RzLCBvYmplY3RbcHJvcF0pO1xuICAgIH1cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgb3duIG1ldGhvZHMgb24gdGhlIHBhc3NlZCBvYmplY3RcbmZ1bmN0aW9uIGNvbGxlY3RPd25NZXRob2RzKG9iamVjdCkge1xuICAgIGNvbnN0IG1ldGhvZHMgPSBbXTtcblxuICAgIHdhbGsob2JqZWN0LCBjb2xsZWN0TWV0aG9kLmJpbmQobnVsbCwgbWV0aG9kcywgb2JqZWN0KSk7XG5cbiAgICByZXR1cm4gbWV0aG9kcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb2xsZWN0T3duTWV0aG9kcztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIENvbG9yaXplciB7XG4gICAgY29uc3RydWN0b3Ioc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoXCJzdXBwb3J0cy1jb2xvclwiKSkge1xuICAgICAgICB0aGlzLnN1cHBvcnRzQ29sb3IgPSBzdXBwb3J0c0NvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBiZSByZW5hbWVkIHRvIHRydWUgI3ByaXZhdGVGaWVsZFxuICAgICAqIHdoZW4gd2UgY2FuIGVuc3VyZSBFUzIwMjIgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb2xvcml6ZShzdHIsIGNvbG9yKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzQ29sb3Iuc3Rkb3V0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgXFx4MWJbJHtjb2xvcn1tJHtzdHJ9XFx4MWJbMG1gO1xuICAgIH1cblxuICAgIHJlZChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JpemUoc3RyLCAzMSk7XG4gICAgfVxuXG4gICAgZ3JlZW4oc3RyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yaXplKHN0ciwgMzIpO1xuICAgIH1cblxuICAgIGN5YW4oc3RyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yaXplKHN0ciwgOTYpO1xuICAgIH1cblxuICAgIHdoaXRlKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcml6ZShzdHIsIDM5KTtcbiAgICB9XG5cbiAgICBib2xkKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcml6ZShzdHIsIDEpO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBTYW5kYm94ID0gcmVxdWlyZShcIi4vc2FuZGJveFwiKTtcblxuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5cbmZ1bmN0aW9uIHByZXBhcmVTYW5kYm94RnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gbmV3IFNhbmRib3goeyBhc3NlcnRPcHRpb25zOiBjb25maWcuYXNzZXJ0T3B0aW9ucyB9KTtcblxuICAgIGlmIChjb25maWcudXNlRmFrZVNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51c2VGYWtlU2VydmVyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBzYW5kYm94LnNlcnZlclByb3RvdHlwZSA9IGNvbmZpZy51c2VGYWtlU2VydmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgc2FuZGJveC51c2VGYWtlU2VydmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy51c2VGYWtlVGltZXJzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVzZUZha2VUaW1lcnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHNhbmRib3gudXNlRmFrZVRpbWVycyhjb25maWcudXNlRmFrZVRpbWVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzYW5kYm94LnVzZUZha2VUaW1lcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzYW5kYm94O1xufVxuXG5mdW5jdGlvbiBleHBvc2VWYWx1ZShzYW5kYm94LCBjb25maWcsIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmluamVjdEludG8gJiYgIShrZXkgaW4gY29uZmlnLmluamVjdEludG8pKSB7XG4gICAgICAgIGNvbmZpZy5pbmplY3RJbnRvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcHVzaChzYW5kYm94LmluamVjdGVkS2V5cywga2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwdXNoKHNhbmRib3guYXJncywgdmFsdWUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGN1c3RvbWl6ZSBhIHNhbmRib3hcbiAqXG4gKiBUaGUgc2FuZGJveCdzIG1ldGhvZHMgY2FuIGJlIGluamVjdGVkIGludG8gYW5vdGhlciBvYmplY3QgZm9yXG4gKiBjb252ZW5pZW5jZS4gVGhlIGBpbmplY3RJbnRvYCBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gbmFtZSBhblxuICogb2JqZWN0IHRvIGFkZCBwcm9wZXJ0aWVzIHRvLlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNhbmRib3hDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIEFQSSB0byBleHBvc2Ugb24gdGhlIHNhbmRib3guIEV4YW1wbGVzOiBbJ3NweScsICdmYWtlJywgJ3Jlc3RvcmUnXVxuICogQHByb3BlcnR5IHtvYmplY3R9IGluamVjdEludG8gYW4gb2JqZWN0IGluIHdoaWNoIHRvIGluamVjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHNhbmRib3ggKGEgZmFjYWRlKS4gVGhpcyBpcyBtb3N0bHkgYW4gaW50ZWdyYXRpb24gZmVhdHVyZSAoc2lub24tdGVzdCBiZWluZyBvbmUpLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VGYWtlVGltZXJzICB3aGV0aGVyIHRpbWVycyBhcmUgZmFrZWQgYnkgZGVmYXVsdFxuICogQHByb3BlcnR5IHtib29sZWFufG9iamVjdH0gdXNlRmFrZVNlcnZlciAgd2hldGhlciBYSFIncyBhcmUgZmFrZWQgYW5kIHRoZSBzZXJ2ZXIgZmVhdHVyZSBlbmFibGVkIGJ5IGRlZmF1bHQuIEl0IGNvdWxkIGFsc28gYmUgYSBkaWZmZXJlbnQgZGVmYXVsdCBmYWtlIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0byB1c2VcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbYXNzZXJ0T3B0aW9uc10gc2VlIENyZWF0ZUFzc2VydE9wdGlvbnMgaW4gLi9hc3NlcnRcbiAqXG4gKiBUaGlzIHR5cGUgZGVmIGlzIHJlYWxseSBzdWZmZXJpbmcgZnJvbSBKU0RvYyBub3QgaGF2aW5nIHN0YW5kYXJkaXplZFxuICogaG93IHRvIHJlZmVyZW5jZSB0eXBlcyBkZWZpbmVkIGluIG90aGVyIG1vZHVsZXMgOihcbiAqL1xuXG4vKipcbiAqIEEgY29uZmlndXJlZCBzaW5vbiBzYW5kYm94IChwcml2YXRlIHR5cGUpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29uZmlndXJlZFNpbm9uU2FuZGJveFR5cGVcbiAqIEBwcml2YXRlXG4gKiBAYXVnbWVudHMgU2FuZGJveFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gaW5qZWN0ZWRLZXlzIHRoZSBrZXlzIHRoYXQgaGF2ZSBiZWVuIGluamVjdGVkIChmcm9tIGNvbmZpZy5pbmplY3RJbnRvKVxuICogQHByb3BlcnR5IHsqW119IGFyZ3MgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIHNhbmRib3hcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIHNhbmRib3hcbiAqXG4gKiBBcyBvZiBTaW5vbiA1IHRoZSBgc2lub25gIGluc3RhbmNlIGl0c2VsZiBpcyBhIFNhbmRib3gsIHNvIHlvdVxuICogaGFyZGx5IGV2ZXIgbmVlZCB0byBjcmVhdGUgYWRkaXRpb25hbCBpbnN0YW5jZXMgZm9yIHRoZSBzYWtlIG9mIHRlc3RpbmdcbiAqXG4gKiBAcGFyYW0gY29uZmlnIHtTYW5kYm94Q29uZmlnfVxuICogQHJldHVybnMge1NhbmRib3h9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNhbmRib3goY29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYW5kYm94KCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJlZFNhbmRib3ggPSBwcmVwYXJlU2FuZGJveEZyb21Db25maWcoY29uZmlnKTtcbiAgICBjb25maWd1cmVkU2FuZGJveC5hcmdzID0gY29uZmlndXJlZFNhbmRib3guYXJncyB8fCBbXTtcbiAgICBjb25maWd1cmVkU2FuZGJveC5pbmplY3RlZEtleXMgPSBbXTtcbiAgICBjb25maWd1cmVkU2FuZGJveC5pbmplY3RJbnRvID0gY29uZmlnLmluamVjdEludG87XG4gICAgY29uc3QgZXhwb3NlZCA9IGNvbmZpZ3VyZWRTYW5kYm94LmluamVjdCh7fSk7XG5cbiAgICBpZiAoY29uZmlnLnByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yRWFjaChjb25maWcucHJvcGVydGllcywgZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgICBleHBvc2VkW3Byb3BdIHx8IChwcm9wID09PSBcInNhbmRib3hcIiAmJiBjb25maWd1cmVkU2FuZGJveCk7XG4gICAgICAgICAgICBleHBvc2VWYWx1ZShjb25maWd1cmVkU2FuZGJveCwgY29uZmlnLCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cG9zZVZhbHVlKGNvbmZpZ3VyZWRTYW5kYm94LCBjb25maWcsIFwic2FuZGJveFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlndXJlZFNhbmRib3g7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2FuZGJveDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBzdHViID0gcmVxdWlyZShcIi4vc3R1YlwiKTtcbmNvbnN0IHNpbm9uVHlwZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9zaW5vbi10eXBlXCIpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuZm9yRWFjaDtcblxuZnVuY3Rpb24gaXNTdHViKHZhbHVlKSB7XG4gICAgcmV0dXJuIHNpbm9uVHlwZS5nZXQodmFsdWUpID09PSBcInN0dWJcIjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVTdHViSW5zdGFuY2UoY29uc3RydWN0b3IsIG92ZXJyaWRlcykge1xuICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHViSW5zdGFuY2UgPSBPYmplY3QuY3JlYXRlKGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG4gICAgc2lub25UeXBlLnNldChzdHViSW5zdGFuY2UsIFwic3R1Yi1pbnN0YW5jZVwiKTtcblxuICAgIGNvbnN0IHN0dWJiZWRPYmplY3QgPSBzdHViKHN0dWJJbnN0YW5jZSk7XG5cbiAgICBmb3JFYWNoKE9iamVjdC5rZXlzKG92ZXJyaWRlcyB8fCB7fSksIGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBzdHViYmVkT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG92ZXJyaWRlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKGlzU3R1Yih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzdHViYmVkT2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R1YmJlZE9iamVjdFtwcm9wZXJ0eU5hbWVdLnJldHVybnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDYW5ub3Qgc3R1YiAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IGRvZXMgbm90IGV4aXN0IWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0dWJiZWRPYmplY3Q7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1wcm9wZXJ0eS1jb25maWd1cmFibGVcIik7XG5jb25zdCBleHBvcnRBc3luY0JlaGF2aW9ycyA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHBvcnQtYXN5bmMtYmVoYXZpb3JzXCIpO1xuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcblxuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuXG5jb25zdCB1c2VMZWZ0TW9zdENhbGxiYWNrID0gLTE7XG5jb25zdCB1c2VSaWdodE1vc3RDYWxsYmFjayA9IC0yO1xuXG5mdW5jdGlvbiB0aHJvd3NFeGNlcHRpb24oZmFrZSwgZXJyb3IsIG1lc3NhZ2UpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZXJyb3I7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhjZXB0aW9uID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgfHwgYFNpbm9uLXByb3ZpZGVkICR7ZXJyb3J9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdFeGNlcHRpb24ubmFtZSA9IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0V4Y2VwdGlvbjtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCFlcnJvcikge1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFwiRXJyb3JcIik7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSBlcnJvcjtcbiAgICB9XG59XG5cbmNvbnN0IGRlZmF1bHRCZWhhdmlvcnMgPSB7XG4gICAgY2FsbHNGYWtlOiBmdW5jdGlvbiBjYWxsc0Zha2UoZmFrZSwgZm4pIHtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSBmbjtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FsbHNBcmc6IGZ1bmN0aW9uIGNhbGxzQXJnKGZha2UsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSBpbmRleDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IFtdO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGNhbGxzQXJnT246IGZ1bmN0aW9uIGNhbGxzQXJnT24oZmFrZSwgaW5kZXgsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IGluZGV4O1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gW107XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGNhbGxzQXJnV2l0aDogZnVuY3Rpb24gY2FsbHNBcmdXaXRoKGZha2UsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSBpbmRleDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMik7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FsbHNBcmdPbldpdGg6IGZ1bmN0aW9uIGNhbGxzQXJnV2l0aChmYWtlLCBpbmRleCwgY29udGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gaW5kZXg7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDMpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICB1c2luZ1Byb21pc2U6IGZ1bmN0aW9uIHVzaW5nUHJvbWlzZShmYWtlLCBwcm9taXNlTGlicmFyeSkge1xuICAgICAgICBmYWtlLnByb21pc2VMaWJyYXJ5ID0gcHJvbWlzZUxpYnJhcnk7XG4gICAgfSxcblxuICAgIHlpZWxkczogZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSB1c2VMZWZ0TW9zdENhbGxiYWNrO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgeWllbGRzUmlnaHQ6IGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gdXNlUmlnaHRNb3N0Q2FsbGJhY2s7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDEpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB5aWVsZHNPbjogZnVuY3Rpb24gKGZha2UsIGNvbnRleHQpIHtcbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSB1c2VMZWZ0TW9zdENhbGxiYWNrO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHlpZWxkc1RvOiBmdW5jdGlvbiAoZmFrZSwgcHJvcCkge1xuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IHVzZUxlZnRNb3N0Q2FsbGJhY2s7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDIpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHByb3A7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgeWllbGRzVG9PbjogZnVuY3Rpb24gKGZha2UsIHByb3AsIGNvbnRleHQpIHtcbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSB1c2VMZWZ0TW9zdENhbGxiYWNrO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAzKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gcHJvcDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB0aHJvd3M6IHRocm93c0V4Y2VwdGlvbixcbiAgICB0aHJvd3NFeGNlcHRpb246IHRocm93c0V4Y2VwdGlvbixcblxuICAgIHJldHVybnM6IGZ1bmN0aW9uIHJldHVybnMoZmFrZSwgdmFsdWUpIHtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBmYWtlLnJlc29sdmUgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZWplY3QgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZURlZmluZWQgPSB0cnVlO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgcmV0dXJuc0FyZzogZnVuY3Rpb24gcmV0dXJuc0FyZyhmYWtlLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuXG4gICAgICAgIGZha2UucmV0dXJuQXJnQXQgPSBpbmRleDtcbiAgICB9LFxuXG4gICAgdGhyb3dzQXJnOiBmdW5jdGlvbiB0aHJvd3NBcmcoZmFrZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcblxuICAgICAgICBmYWtlLnRocm93QXJnQXQgPSBpbmRleDtcbiAgICB9LFxuXG4gICAgcmV0dXJuc1RoaXM6IGZ1bmN0aW9uIHJldHVybnNUaGlzKGZha2UpIHtcbiAgICAgICAgZmFrZS5yZXR1cm5UaGlzID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgcmVzb2x2ZXM6IGZ1bmN0aW9uIHJlc29sdmVzKGZha2UsIHZhbHVlKSB7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlVGhpcyA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlamVjdCA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICByZXNvbHZlc0FyZzogZnVuY3Rpb24gcmVzb2x2ZXNBcmcoZmFrZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZmFrZS5yZXNvbHZlQXJnQXQgPSBpbmRleDtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5yZXNvbHZlID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlVGhpcyA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlamVjdCA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlRGVmaW5lZCA9IGZhbHNlO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgcmVqZWN0czogZnVuY3Rpb24gcmVqZWN0cyhmYWtlLCBlcnJvciwgbWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVhc29uO1xuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZWFzb24gPSBuZXcgRXJyb3IobWVzc2FnZSB8fCBcIlwiKTtcbiAgICAgICAgICAgIHJlYXNvbi5uYW1lID0gZXJyb3I7XG4gICAgICAgIH0gZWxzZSBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICByZWFzb24gPSBuZXcgRXJyb3IoXCJFcnJvclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYXNvbiA9IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWUgPSByZWFzb247XG4gICAgICAgIGZha2UucmVzb2x2ZSA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlc29sdmVUaGlzID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZURlZmluZWQgPSB0cnVlO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxuXG4gICAgcmVzb2x2ZXNUaGlzOiBmdW5jdGlvbiByZXNvbHZlc1RoaXMoZmFrZSkge1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLnJlc29sdmUgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlVGhpcyA9IHRydWU7XG4gICAgICAgIGZha2UucmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWVEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBjYWxsVGhyb3VnaDogZnVuY3Rpb24gY2FsbFRocm91Z2goZmFrZSkge1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IHRydWU7XG4gICAgfSxcblxuICAgIGNhbGxUaHJvdWdoV2l0aE5ldzogZnVuY3Rpb24gY2FsbFRocm91Z2hXaXRoTmV3KGZha2UpIHtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2hXaXRoTmV3ID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoZmFrZSwgZ2V0dGVyRnVuY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgcm9vdFN0dWIgPSBmYWtlLnN0dWIgfHwgZmFrZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocm9vdFN0dWIucm9vdE9iaiwgcm9vdFN0dWIucHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2V0dGVyRnVuY3Rpb24sXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGlzUHJvcGVydHlDb25maWd1cmFibGUoXG4gICAgICAgICAgICAgICAgcm9vdFN0dWIucm9vdE9iaixcbiAgICAgICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChmYWtlLCBzZXR0ZXJGdW5jdGlvbikge1xuICAgICAgICBjb25zdCByb290U3R1YiA9IGZha2Uuc3R1YiB8fCBmYWtlO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHJvb3RTdHViLnJvb3RPYmosXG4gICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhY2Nlc3Nvci1wYWlyc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNldDogc2V0dGVyRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBpc1Byb3BlcnR5Q29uZmlndXJhYmxlKFxuICAgICAgICAgICAgICAgICAgICByb290U3R1Yi5yb290T2JqLFxuICAgICAgICAgICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxuXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKGZha2UsIG5ld1ZhbCkge1xuICAgICAgICBjb25zdCByb290U3R1YiA9IGZha2Uuc3R1YiB8fCBmYWtlO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyb290U3R1Yi5yb290T2JqLCByb290U3R1Yi5wcm9wTmFtZSwge1xuICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbCxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTpcbiAgICAgICAgICAgICAgICByb290U3R1Yi5zaGFkb3dzUHJvcE9uUHJvdG90eXBlIHx8XG4gICAgICAgICAgICAgICAgaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShyb290U3R1Yi5yb290T2JqLCByb290U3R1Yi5wcm9wTmFtZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG59O1xuXG5jb25zdCBhc3luY0JlaGF2aW9ycyA9IGV4cG9ydEFzeW5jQmVoYXZpb3JzKGRlZmF1bHRCZWhhdmlvcnMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZCh7fSwgZGVmYXVsdEJlaGF2aW9ycywgYXN5bmNCZWhhdmlvcnMpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgY3JlYXRlUHJveHkgPSByZXF1aXJlKFwiLi9wcm94eVwiKTtcbmNvbnN0IG5leHRUaWNrID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL25leHQtdGlja1wiKTtcblxuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xubGV0IHByb21pc2VMaWIgPSBQcm9taXNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZha2U7XG5cbi8qKlxuICogUmV0dXJucyBhIGBmYWtlYCB0aGF0IHJlY29yZHMgYWxsIGNhbGxzLCBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMuXG4gKlxuICogV2hlbiBhbiBgZmAgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBjcmVhdGUgYW4gZW1wdHkgZmFrZVxuICogdmFyIGYxID0gc2lub24uZmFrZSgpO1xuICpcbiAqIGYxKCk7XG4gKlxuICogZjEuY2FsbGVkT25jZSgpXG4gKiAvLyB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nKSB7XG4gKiAgIGNvbnNvbGUubG9nKGBIZWxsbyAke2dyZWV0aW5nfWApO1xuICogfVxuICpcbiAqIC8vIGNyZWF0ZSBhIGZha2Ugd2l0aCBpbXBsZW1lbnRhdGlvblxuICogdmFyIGYyID0gc2lub24uZmFrZShncmVldCk7XG4gKlxuICogLy8gSGVsbG8gd29ybGRcbiAqIGYyKFwid29ybGRcIik7XG4gKlxuICogZjIuY2FsbGVkV2l0aChcIndvcmxkXCIpO1xuICogLy8gdHJ1ZVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258dW5kZWZpbmVkfSBmXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKiBAbmFtZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIGZha2UoZikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBmIGFyZ3VtZW50IHRvIGJlIGEgRnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBgZmFrZWAgdGhhdCByZXR1cm5zIHRoZSBwcm92aWRlZCBgdmFsdWVgLCBhcyB3ZWxsIGFzIHJlY29yZGluZyBhbGxcbiAqIGNhbGxzLCBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmMSA9IHNpbm9uLmZha2UucmV0dXJucyg0Mik7XG4gKlxuICogZjEoKTtcbiAqIC8vIDQyXG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS5yZXR1cm5zID0gZnVuY3Rpb24gcmV0dXJucyh2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBmYWtlYCB0aGF0IHRocm93cyBhbiBFcnJvci5cbiAqIElmIHRoZSBgdmFsdWVgIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgRXJyb3IgaW4gaXRzIHByb3RvdHlwZSBjaGFpbiwgaXQgd2lsbFxuICogYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgZXJyb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmMSA9IHNpbm9uLmZha2UudGhyb3dzKFwiaGVsbG9cIik7XG4gKlxuICogZjEoKTtcbiAqIC8vIFVuY2F1Z2h0IEVycm9yOiBoZWxsb1xuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZjIgPSBzaW5vbi5mYWtlLnRocm93cyhuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhcmd1bWVudFwiKSk7XG4gKlxuICogZjIoKTtcbiAqIC8vIFVuY2F1Z2h0IFR5cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudFxuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcGFyYW0geyp8RXJyb3J9IHZhbHVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UudGhyb3dzID0gZnVuY3Rpb24gdGhyb3dzKHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICB0aHJvdyBnZXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGZha2VgIHRoYXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcGFzc2VkIGB2YWx1ZWBcbiAqIGFyZ3VtZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZjEgPSBzaW5vbi5mYWtlLnJlc29sdmVzKFwiYXBwbGUgcGllXCIpO1xuICpcbiAqIGF3YWl0IGYxKCk7XG4gKiAvLyBcImFwcGxlIHBpZVwiXG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS5yZXNvbHZlcyA9IGZ1bmN0aW9uIHJlc29sdmVzKHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZUxpYi5yZXNvbHZlKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgZmFrZWAgdGhhdCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgdG8gdGhlIHBhc3NlZCBgdmFsdWVgXG4gKiBhcmd1bWVudC4gV2hlbiBgdmFsdWVgIGRvZXMgbm90IGhhdmUgRXJyb3IgaW4gaXRzIHByb3RvdHlwZSBjaGFpbiwgaXQgd2lsbCBiZVxuICogd3JhcHBlZCBpbiBhbiBFcnJvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGYxID0gc2lub24uZmFrZS5yZWplY3RzKFwiOihcIik7XG4gKlxuICogdHJ5IHtcbiAqICAgYXdhaXQgZjEoKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAqICAgLy8gXCI6KFwiXG4gKiB9XG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS5yZWplY3RzID0gZnVuY3Rpb24gcmVqZWN0cyh2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VMaWIucmVqZWN0KGdldEVycm9yKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBDYXVzZXMgYGZha2VgIHRvIHVzZSBhIGN1c3RvbSBQcm9taXNlIGltcGxlbWVudGF0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYXRpdmVcbiAqIFByb21pc2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGJsdWViaXJkID0gcmVxdWlyZShcImJsdWViaXJkXCIpO1xuICogc2lub24uZmFrZS51c2luZ1Byb21pc2UoYmx1ZWJpcmQpO1xuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcGFyYW0geyp9IHByb21pc2VMaWJyYXJ5XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UudXNpbmdQcm9taXNlID0gZnVuY3Rpb24gdXNpbmdQcm9taXNlKHByb21pc2VMaWJyYXJ5KSB7XG4gICAgcHJvbWlzZUxpYiA9IHByb21pc2VMaWJyYXJ5O1xuICAgIHJldHVybiBmYWtlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYGZha2VgIHRoYXQgY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGRlZmluZWQgYXJndW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAqICAgY29uc29sZS5sb2coYXJndW1lbnRzLmpvaW4oXCIqXCIpKTtcbiAqIH1cbiAqXG4gKiBjb25zdCBmMSA9IHNpbm9uLmZha2UueWllbGRzKFwiYXBwbGVcIiwgXCJwaWVcIik7XG4gKlxuICogZjEoY2FsbGJhY2spO1xuICogLy8gXCJhcHBsZSpwaWVcIlxuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UueWllbGRzID0gZnVuY3Rpb24geWllbGRzKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHNsaWNlKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgbGFzdCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgdmFsdWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBgZmFrZWAgdGhhdCBjYWxscyB0aGUgY2FsbGJhY2sgKiphc3luY2hyb25vdXNseSoqIHdpdGggdGhlXG4gKiBkZWZpbmVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gKiAgIGNvbnNvbGUubG9nKGFyZ3VtZW50cy5qb2luKFwiKlwiKSk7XG4gKiB9XG4gKlxuICogY29uc3QgZjEgPSBzaW5vbi5mYWtlLnlpZWxkcyhcImFwcGxlXCIsIFwicGllXCIpO1xuICpcbiAqIGYxKGNhbGxiYWNrKTtcbiAqXG4gKiBzZXRUaW1lb3V0KCgpID0+IHtcbiAqICAgLy8gXCJhcHBsZSpwaWVcIlxuICogfSk7XG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS55aWVsZHNBc3luYyA9IGZ1bmN0aW9uIHlpZWxkc0FzeW5jKCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHNsaWNlKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgbGFzdCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbmxldCB1dWlkID0gMDtcbi8qKlxuICogQ3JlYXRlcyBhIHByb3h5IChzaW5vbiBjb25jZXB0KSBmcm9tIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHdyYXBGdW5jKGYpIHtcbiAgICBjb25zdCBmYWtlSW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBmaXJzdEFyZywgbGFzdEFyZztcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpcnN0QXJnID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgbGFzdEFyZyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWxsYmFjayA9XG4gICAgICAgICAgICBsYXN0QXJnICYmIHR5cGVvZiBsYXN0QXJnID09PSBcImZ1bmN0aW9uXCIgPyBsYXN0QXJnIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgIHByb3h5LmZpcnN0QXJnID0gZmlyc3RBcmc7XG4gICAgICAgIHByb3h5Lmxhc3RBcmcgPSBsYXN0QXJnO1xuICAgICAgICBwcm94eS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICAgIHJldHVybiBmICYmIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkoZmFrZUluc3RhbmNlLCBmIHx8IGZha2VJbnN0YW5jZSk7XG5cbiAgICBwcm94eS5kaXNwbGF5TmFtZSA9IFwiZmFrZVwiO1xuICAgIHByb3h5LmlkID0gYGZha2UjJHt1dWlkKyt9YDtcblxuICAgIHJldHVybiBwcm94eTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIEVycm9yIGluc3RhbmNlIGZyb20gdGhlIHBhc3NlZCB2YWx1ZSwgaWYgdGhlIHZhbHVlIGlzIG5vdFxuICogYWxyZWFkeSBhbiBFcnJvciBpbnN0YW5jZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7Kn0gdmFsdWUgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybnMge0Vycm9yfSAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB2YWx1ZSA6IG5ldyBFcnJvcih2YWx1ZSk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBwcm94eUludm9rZSA9IHJlcXVpcmUoXCIuL3Byb3h5LWludm9rZVwiKTtcbmNvbnN0IHByb3h5Q2FsbFRvU3RyaW5nID0gcmVxdWlyZShcIi4vcHJveHktY2FsbFwiKS50b1N0cmluZztcbmNvbnN0IHRpbWVzSW5Xb3JkcyA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkc1wiKTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBtYXRjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbmNvbnN0IHN0dWIgPSByZXF1aXJlKFwiLi9zdHViXCIpO1xuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5kZWVwRXF1YWw7XG5jb25zdCBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcbmNvbnN0IHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG5jb25zdCBldmVyeSA9IGFycmF5UHJvdG8uZXZlcnk7XG5jb25zdCBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuZnVuY3Rpb24gY2FsbENvdW50SW5Xb3JkcyhjYWxsQ291bnQpIHtcbiAgICBpZiAoY2FsbENvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIm5ldmVyIGNhbGxlZFwiO1xuICAgIH1cblxuICAgIHJldHVybiBgY2FsbGVkICR7dGltZXNJbldvcmRzKGNhbGxDb3VudCl9YDtcbn1cblxuZnVuY3Rpb24gZXhwZWN0ZWRDYWxsQ291bnRJbldvcmRzKGV4cGVjdGF0aW9uKSB7XG4gICAgY29uc3QgbWluID0gZXhwZWN0YXRpb24ubWluQ2FsbHM7XG4gICAgY29uc3QgbWF4ID0gZXhwZWN0YXRpb24ubWF4Q2FsbHM7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGxldCBzdHIgPSB0aW1lc0luV29yZHMobWluKTtcblxuICAgICAgICBpZiAobWluICE9PSBtYXgpIHtcbiAgICAgICAgICAgIHN0ciA9IGBhdCBsZWFzdCAke3N0cn0gYW5kIGF0IG1vc3QgJHt0aW1lc0luV29yZHMobWF4KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gYGF0IGxlYXN0ICR7dGltZXNJbldvcmRzKG1pbil9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYGF0IG1vc3QgJHt0aW1lc0luV29yZHMobWF4KX1gO1xufVxuXG5mdW5jdGlvbiByZWNlaXZlZE1pbkNhbGxzKGV4cGVjdGF0aW9uKSB7XG4gICAgY29uc3QgaGFzTWluTGltaXQgPSB0eXBlb2YgZXhwZWN0YXRpb24ubWluQ2FsbHMgPT09IFwibnVtYmVyXCI7XG4gICAgcmV0dXJuICFoYXNNaW5MaW1pdCB8fCBleHBlY3RhdGlvbi5jYWxsQ291bnQgPj0gZXhwZWN0YXRpb24ubWluQ2FsbHM7XG59XG5cbmZ1bmN0aW9uIHJlY2VpdmVkTWF4Q2FsbHMoZXhwZWN0YXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGV4cGVjdGF0aW9uLm1heENhbGxzICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwZWN0YXRpb24uY2FsbENvdW50ID09PSBleHBlY3RhdGlvbi5tYXhDYWxscztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5TWF0Y2hlcihwb3NzaWJsZU1hdGNoZXIsIGFyZykge1xuICAgIGNvbnN0IGlzTWF0Y2hlciA9IG1hdGNoLmlzTWF0Y2hlcihwb3NzaWJsZU1hdGNoZXIpO1xuXG4gICAgcmV0dXJuIChpc01hdGNoZXIgJiYgcG9zc2libGVNYXRjaGVyLnRlc3QoYXJnKSkgfHwgdHJ1ZTtcbn1cblxuY29uc3QgbW9ja0V4cGVjdGF0aW9uID0ge1xuICAgIG1pbkNhbGxzOiAxLFxuICAgIG1heENhbGxzOiAxLFxuXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUobWV0aG9kTmFtZSkge1xuICAgICAgICBjb25zdCBleHBlY3RhdGlvbiA9IGV4dGVuZC5ub25FbnVtKHN0dWIoKSwgbW9ja0V4cGVjdGF0aW9uKTtcbiAgICAgICAgZGVsZXRlIGV4cGVjdGF0aW9uLmNyZWF0ZTtcbiAgICAgICAgZXhwZWN0YXRpb24ubWV0aG9kID0gbWV0aG9kTmFtZTtcblxuICAgICAgICByZXR1cm4gZXhwZWN0YXRpb247XG4gICAgfSxcblxuICAgIGludm9rZTogZnVuY3Rpb24gaW52b2tlKGZ1bmMsIHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgICB0aGlzLnZlcmlmeUNhbGxBbGxvd2VkKHRoaXNWYWx1ZSwgYXJncyk7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5SW52b2tlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIGF0TGVhc3Q6IGZ1bmN0aW9uIGF0TGVhc3QobnVtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHt2YWx1ZVRvU3RyaW5nKG51bSl9JyBpcyBub3QgbnVtYmVyYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubGltaXRzU2V0KSB7XG4gICAgICAgICAgICB0aGlzLm1heENhbGxzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGltaXRzU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWluQ2FsbHMgPSBudW07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGF0TW9zdDogZnVuY3Rpb24gYXRNb3N0KG51bSkge1xuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7dmFsdWVUb1N0cmluZyhudW0pfScgaXMgbm90IG51bWJlcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmxpbWl0c1NldCkge1xuICAgICAgICAgICAgdGhpcy5taW5DYWxscyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxpbWl0c1NldCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1heENhbGxzID0gbnVtO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBuZXZlcjogZnVuY3Rpb24gbmV2ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4YWN0bHkoMCk7XG4gICAgfSxcblxuICAgIG9uY2U6IGZ1bmN0aW9uIG9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4YWN0bHkoMSk7XG4gICAgfSxcblxuICAgIHR3aWNlOiBmdW5jdGlvbiB0d2ljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhhY3RseSgyKTtcbiAgICB9LFxuXG4gICAgdGhyaWNlOiBmdW5jdGlvbiB0aHJpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4YWN0bHkoMyk7XG4gICAgfSxcblxuICAgIGV4YWN0bHk6IGZ1bmN0aW9uIGV4YWN0bHkobnVtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHt2YWx1ZVRvU3RyaW5nKG51bSl9JyBpcyBub3QgYSBudW1iZXJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXRMZWFzdChudW0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hdE1vc3QobnVtKTtcbiAgICB9LFxuXG4gICAgbWV0OiBmdW5jdGlvbiBtZXQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5mYWlsZWQgJiYgcmVjZWl2ZWRNaW5DYWxscyh0aGlzKTtcbiAgICB9LFxuXG4gICAgdmVyaWZ5Q2FsbEFsbG93ZWQ6IGZ1bmN0aW9uIHZlcmlmeUNhbGxBbGxvd2VkKHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgICBjb25zdCBleHBlY3RlZEFyZ3VtZW50cyA9IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKHJlY2VpdmVkTWF4Q2FsbHModGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSBhbHJlYWR5IGNhbGxlZCAke3RpbWVzSW5Xb3Jkcyh0aGlzLm1heENhbGxzKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcImV4cGVjdGVkVGhpc1wiIGluIHRoaXMgJiYgdGhpcy5leHBlY3RlZFRoaXMgIT09IHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5tZXRob2R9IGNhbGxlZCB3aXRoICR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlLFxuICAgICAgICAgICAgICAgICl9IGFzIHRoaXNWYWx1ZSwgZXhwZWN0ZWQgJHt2YWx1ZVRvU3RyaW5nKHRoaXMuZXhwZWN0ZWRUaGlzKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKFwiZXhwZWN0ZWRBcmd1bWVudHNcIiBpbiB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgbm8gYXJndW1lbnRzLCBleHBlY3RlZCAke2luc3BlY3QoXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJndW1lbnRzLFxuICAgICAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBleHBlY3RlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSByZWNlaXZlZCB0b28gZmV3IGFyZ3VtZW50cyAoJHtpbnNwZWN0KFxuICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICl9KSwgZXhwZWN0ZWQgJHtpbnNwZWN0KGV4cGVjdGVkQXJndW1lbnRzKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0c0V4YWN0QXJnQ291bnQgJiZcbiAgICAgICAgICAgIGFyZ3MubGVuZ3RoICE9PSBleHBlY3RlZEFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgdG9vIG1hbnkgYXJndW1lbnRzICgke2luc3BlY3QoXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgKX0pLCBleHBlY3RlZCAke2luc3BlY3QoZXhwZWN0ZWRBcmd1bWVudHMpfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yRWFjaChcbiAgICAgICAgICAgIGV4cGVjdGVkQXJndW1lbnRzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGV4cGVjdGVkQXJndW1lbnQsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcmlmeU1hdGNoZXIoZXhwZWN0ZWRBcmd1bWVudCwgYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgd3JvbmcgYXJndW1lbnRzICR7aW5zcGVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX0sIGRpZG4ndCBtYXRjaCAke1N0cmluZyhleHBlY3RlZEFyZ3VtZW50cyl9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhcmdzW2ldLCBleHBlY3RlZEFyZ3VtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSByZWNlaXZlZCB3cm9uZyBhcmd1bWVudHMgJHtpbnNwZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICApfSwgZXhwZWN0ZWQgJHtpbnNwZWN0KGV4cGVjdGVkQXJndW1lbnRzKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBhbGxvd3NDYWxsOiBmdW5jdGlvbiBhbGxvd3NDYWxsKHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgICBjb25zdCBleHBlY3RlZEFyZ3VtZW50cyA9IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKHRoaXMubWV0KCkgJiYgcmVjZWl2ZWRNYXhDYWxscyh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFwiZXhwZWN0ZWRUaGlzXCIgaW4gdGhpcyAmJiB0aGlzLmV4cGVjdGVkVGhpcyAhPT0gdGhpc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShcImV4cGVjdGVkQXJndW1lbnRzXCIgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICAgIGNvbnN0IF9hcmdzID0gYXJncyB8fCBbXTtcblxuICAgICAgICBpZiAoX2FyZ3MubGVuZ3RoIDwgZXhwZWN0ZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV4cGVjdHNFeGFjdEFyZ0NvdW50ICYmXG4gICAgICAgICAgICBfYXJncy5sZW5ndGggIT09IGV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVyeShleHBlY3RlZEFyZ3VtZW50cywgZnVuY3Rpb24gKGV4cGVjdGVkQXJndW1lbnQsIGkpIHtcbiAgICAgICAgICAgIGlmICghdmVyaWZ5TWF0Y2hlcihleHBlY3RlZEFyZ3VtZW50LCBfYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKF9hcmdzW2ldLCBleHBlY3RlZEFyZ3VtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICB3aXRoQXJnczogZnVuY3Rpb24gd2l0aEFyZ3MoKSB7XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgd2l0aEV4YWN0QXJnczogZnVuY3Rpb24gd2l0aEV4YWN0QXJncygpIHtcbiAgICAgICAgdGhpcy53aXRoQXJncy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmV4cGVjdHNFeGFjdEFyZ0NvdW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIG9uOiBmdW5jdGlvbiBvbih0aGlzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5leHBlY3RlZFRoaXMgPSB0aGlzVmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UodGhpcy5leHBlY3RlZEFyZ3VtZW50cyB8fCBbXSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdHNFeGFjdEFyZ0NvdW50KSB7XG4gICAgICAgICAgICBwdXNoKGFyZ3MsIFwiWy4uLl1cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWxsU3RyID0gcHJveHlDYWxsVG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICBwcm94eTogdGhpcy5tZXRob2QgfHwgXCJhbm9ueW1vdXMgbW9jayBleHBlY3RhdGlvblwiLFxuICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NhbGxTdHIucmVwbGFjZShcbiAgICAgICAgICAgIFwiLCBbLi4uXCIsXG4gICAgICAgICAgICBcIlssIC4uLlwiLFxuICAgICAgICApfSAke2V4cGVjdGVkQ2FsbENvdW50SW5Xb3Jkcyh0aGlzKX1gO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYEV4cGVjdGF0aW9uIG1ldDogJHttZXNzYWdlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYEV4cGVjdGVkICR7bWVzc2FnZX0gKCR7Y2FsbENvdW50SW5Xb3Jkcyh0aGlzLmNhbGxDb3VudCl9KWA7XG4gICAgfSxcblxuICAgIHZlcmlmeTogZnVuY3Rpb24gdmVyaWZ5KCkge1xuICAgICAgICBpZiAoIXRoaXMubWV0KCkpIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFN0cmluZyh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24ucGFzcyhTdHJpbmcodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHBhc3M6IGZ1bmN0aW9uIHBhc3MobWVzc2FnZSkge1xuICAgICAgICBhc3NlcnQucGFzcyhtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgZmFpbDogZnVuY3Rpb24gZmFpbChtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgZXhjZXB0aW9uLm5hbWUgPSBcIkV4cGVjdGF0aW9uRXJyb3JcIjtcblxuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbW9ja0V4cGVjdGF0aW9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgbW9ja0V4cGVjdGF0aW9uID0gcmVxdWlyZShcIi4vbW9jay1leHBlY3RhdGlvblwiKTtcbmNvbnN0IHByb3h5Q2FsbFRvU3RyaW5nID0gcmVxdWlyZShcIi4vcHJveHktY2FsbFwiKS50b1N0cmluZztcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBkZWVwRXF1YWwgPSByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmRlZXBFcXVhbDtcbmNvbnN0IHdyYXBNZXRob2QgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd3JhcC1tZXRob2RcIik7XG5jb25zdCB1c2VQcm9taXNlTGlicmFyeSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS91c2UtcHJvbWlzZS1saWJyYXJ5XCIpO1xuXG5jb25zdCBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbmNvbnN0IGZpbHRlciA9IGFycmF5UHJvdG8uZmlsdGVyO1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IGV2ZXJ5ID0gYXJyYXlQcm90by5ldmVyeTtcbmNvbnN0IGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuY29uc3QgdW5zaGlmdCA9IGFycmF5UHJvdG8udW5zaGlmdDtcblxuZnVuY3Rpb24gbW9jayhvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBtb2NrRXhwZWN0YXRpb24uY3JlYXRlKG9iamVjdCA/IG9iamVjdCA6IFwiQW5vbnltb3VzIG1vY2tcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vY2suY3JlYXRlKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIGVhY2goY29sbGVjdGlvbiwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBjb2wgPSBjb2xsZWN0aW9uIHx8IFtdO1xuXG4gICAgZm9yRWFjaChjb2wsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gYXJyYXlFcXVhbHMoYXJyMSwgYXJyMiwgY29tcGFyZUxlbmd0aCkge1xuICAgIGlmIChjb21wYXJlTGVuZ3RoICYmIGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZXJ5KGFycjEsIGZ1bmN0aW9uIChlbGVtZW50LCBpKSB7XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWwoYXJyMltpXSwgZWxlbWVudCk7XG4gICAgfSk7XG59XG5cbmV4dGVuZChtb2NrLCB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUob2JqZWN0KSB7XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwib2JqZWN0IGlzIG51bGxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2NrT2JqZWN0ID0gZXh0ZW5kLm5vbkVudW0oe30sIG1vY2ssIHsgb2JqZWN0OiBvYmplY3QgfSk7XG4gICAgICAgIGRlbGV0ZSBtb2NrT2JqZWN0LmNyZWF0ZTtcblxuICAgICAgICByZXR1cm4gbW9ja09iamVjdDtcbiAgICB9LFxuXG4gICAgZXhwZWN0czogZnVuY3Rpb24gZXhwZWN0cyhtZXRob2QpIHtcbiAgICAgICAgaWYgKCFtZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXRob2QgaXMgZmFsc3lcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0YXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGVjdGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5wcm94aWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmZhaWx1cmVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tPYmplY3QgPSB0aGlzO1xuXG4gICAgICAgICAgICB3cmFwTWV0aG9kKHRoaXMub2JqZWN0LCBtZXRob2QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9ja09iamVjdC5pbnZva2VNZXRob2QobWV0aG9kLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHB1c2godGhpcy5wcm94aWVzLCBtZXRob2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwZWN0YXRpb24gPSBtb2NrRXhwZWN0YXRpb24uY3JlYXRlKG1ldGhvZCk7XG4gICAgICAgIGV4cGVjdGF0aW9uLndyYXBwZWRNZXRob2QgPSB0aGlzLm9iamVjdFttZXRob2RdLndyYXBwZWRNZXRob2Q7XG4gICAgICAgIHB1c2godGhpcy5leHBlY3RhdGlvbnNbbWV0aG9kXSwgZXhwZWN0YXRpb24pO1xuICAgICAgICB1c2VQcm9taXNlTGlicmFyeSh0aGlzLnByb21pc2VMaWJyYXJ5LCBleHBlY3RhdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uO1xuICAgIH0sXG5cbiAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLm9iamVjdDtcblxuICAgICAgICBlYWNoKHRoaXMucHJveGllcywgZnVuY3Rpb24gKHByb3h5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtwcm94eV0ucmVzdG9yZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0W3Byb3h5XS5yZXN0b3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICB2ZXJpZnk6IGZ1bmN0aW9uIHZlcmlmeSgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0YXRpb25zID0gdGhpcy5leHBlY3RhdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5mYWlsdXJlcyA/IHNsaWNlKHRoaXMuZmFpbHVyZXMpIDogW107XG4gICAgICAgIGNvbnN0IG1ldCA9IFtdO1xuXG4gICAgICAgIGVhY2godGhpcy5wcm94aWVzLCBmdW5jdGlvbiAocHJveHkpIHtcbiAgICAgICAgICAgIGVhY2goZXhwZWN0YXRpb25zW3Byb3h5XSwgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RhdGlvbi5tZXQoKSkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoKG1lc3NhZ2VzLCBTdHJpbmcoZXhwZWN0YXRpb24pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwdXNoKG1ldCwgU3RyaW5nKGV4cGVjdGF0aW9uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzdG9yZSgpO1xuXG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChqb2luKGNvbmNhdChtZXNzYWdlcywgbWV0KSwgXCJcXG5cIikpO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24ucGFzcyhqb2luKGNvbmNhdChtZXNzYWdlcywgbWV0KSwgXCJcXG5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHVzaW5nUHJvbWlzZTogZnVuY3Rpb24gdXNpbmdQcm9taXNlKHByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgIHRoaXMucHJvbWlzZUxpYnJhcnkgPSBwcm9taXNlTGlicmFyeTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgaW52b2tlTWV0aG9kOiBmdW5jdGlvbiBpbnZva2VNZXRob2QobWV0aG9kLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgLyogaWYgd2UgY2Fubm90IGZpbmQgYW55IG1hdGNoaW5nIGZpbGVzIHdlIHdpbGwgZXhwbGljaXRseSBjYWxsIG1vY2tFeHBlY3Rpb24jZmFpbCB3aXRoIGVycm9yIG1lc3NhZ2VzICovXG4gICAgICAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogXCJvZmZcIiAqL1xuICAgICAgICBjb25zdCBleHBlY3RhdGlvbnMgPVxuICAgICAgICAgICAgdGhpcy5leHBlY3RhdGlvbnMgJiYgdGhpcy5leHBlY3RhdGlvbnNbbWV0aG9kXVxuICAgICAgICAgICAgICAgID8gdGhpcy5leHBlY3RhdGlvbnNbbWV0aG9kXVxuICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcmdzID0gYXJncyB8fCBbXTtcbiAgICAgICAgbGV0IGF2YWlsYWJsZTtcblxuICAgICAgICBjb25zdCBleHBlY3RhdGlvbnNXaXRoTWF0Y2hpbmdBcmdzID0gZmlsdGVyKFxuICAgICAgICAgICAgZXhwZWN0YXRpb25zLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRBcmdzID0gZXhwZWN0YXRpb24uZXhwZWN0ZWRBcmd1bWVudHMgfHwgW107XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlFcXVhbHMoXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJncyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLmV4cGVjdHNFeGFjdEFyZ0NvdW50LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGF0aW9uc1RvQXBwbHkgPSBmaWx0ZXIoXG4gICAgICAgICAgICBleHBlY3RhdGlvbnNXaXRoTWF0Y2hpbmdBcmdzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgIWV4cGVjdGF0aW9uLm1ldCgpICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLmFsbG93c0NhbGwodGhpc1ZhbHVlLCBhcmdzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChleHBlY3RhdGlvbnNUb0FwcGx5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnNUb0FwcGx5WzBdLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgICBsZXQgZXhoYXVzdGVkID0gMDtcblxuICAgICAgICBmb3JFYWNoKGV4cGVjdGF0aW9uc1dpdGhNYXRjaGluZ0FyZ3MsIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uLmFsbG93c0NhbGwodGhpc1ZhbHVlLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGF2YWlsYWJsZSB8fCBleHBlY3RhdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhoYXVzdGVkICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhdmFpbGFibGUgJiYgZXhoYXVzdGVkID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKGV4cGVjdGF0aW9ucywgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBwdXNoKG1lc3NhZ2VzLCBgICAgICR7U3RyaW5nKGV4cGVjdGF0aW9uKX1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdW5zaGlmdChcbiAgICAgICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2FsbDogJHtwcm94eUNhbGxUb1N0cmluZy5jYWxsKHtcbiAgICAgICAgICAgICAgICBwcm94eTogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICB9KX1gLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgLy8gUGhhbnRvbUpTIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgc3RhY2sgdHJhY2UgdW50aWwgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93blxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwdXNoKFxuICAgICAgICAgICAgdGhpcy5mYWlsdXJlcyxcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGNhbGw6ICR7cHJveHlDYWxsVG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICAgICAgcHJveHk6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgIHN0YWNrOiBlcnIuc3RhY2ssXG4gICAgICAgICAgICB9KX1gLFxuICAgICAgICApO1xuXG4gICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKGpvaW4obWVzc2FnZXMsIFwiXFxuXCIpKTtcbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbW9jaztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBmYWtlID0gcmVxdWlyZShcIi4vZmFrZVwiKTtcbmNvbnN0IGlzUmVzdG9yYWJsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1yZXN0b3JhYmxlXCIpO1xuXG5jb25zdCBTVEFUVVNfUEVORElORyA9IFwicGVuZGluZ1wiO1xuY29uc3QgU1RBVFVTX1JFU09MVkVEID0gXCJyZXNvbHZlZFwiO1xuY29uc3QgU1RBVFVTX1JFSkVDVEVEID0gXCJyZWplY3RlZFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBmYWtlIGZvciBhIGdpdmVuIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZC4gSWYgbm8gZnVuY3Rpb24gaXMgZ2l2ZW4sIGFcbiAqIG5ldyBmYWtlIGlzIHJldHVybmVkLiBJZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYWxyZWFkeSBhIGZha2UsIGl0IGlzXG4gKiByZXR1cm5lZCBhcyBpcy4gT3RoZXJ3aXNlIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyB3cmFwcGVkIGluIGEgbmV3IGZha2UuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2V4ZWN1dG9yXSBUaGUgb3B0aW9uYWwgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEZha2VFeGVjdXRvcihleGVjdXRvcikge1xuICAgIGlmIChpc1Jlc3RvcmFibGUoZXhlY3V0b3IpKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvcjtcbiAgICB9XG4gICAgaWYgKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBmYWtlKGV4ZWN1dG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGZha2UoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IHByb21pc2UgdGhhdCBleHBvc2VzIGl0J3MgaW50ZXJuYWwgYHN0YXR1c2AsIGByZXNvbHZlZFZhbHVlYFxuICogYW5kIGByZWplY3RlZFZhbHVlYCBhbmQgY2FuIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkIGZyb20gdGhlIG91dHNpZGUgYnlcbiAqIGNhbGxpbmcgYHJlc29sdmUodmFsdWUpYCBvciBgcmVqZWN0KHJlYXNvbilgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtleGVjdXRvcl0gVGhlIG9wdGlvbmFsIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIHByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBjb25zdCBmYWtlRXhlY3V0b3IgPSBnZXRGYWtlRXhlY3V0b3IoZXhlY3V0b3IpO1xuICAgIGNvbnN0IHNpbm9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZha2VFeGVjdXRvcik7XG5cbiAgICBzaW5vblByb21pc2Uuc3RhdHVzID0gU1RBVFVTX1BFTkRJTkc7XG4gICAgc2lub25Qcm9taXNlXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IFNUQVRVU19SRVNPTFZFRDtcbiAgICAgICAgICAgIHNpbm9uUHJvbWlzZS5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICBzaW5vblByb21pc2Uuc3RhdHVzID0gU1RBVFVTX1JFSkVDVEVEO1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLnJlamVjdGVkVmFsdWUgPSByZWFzb247XG4gICAgICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgb3IgcmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBzdGF0dXMgYW5kIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmFsaXplKHN0YXR1cywgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChzaW5vblByb21pc2Uuc3RhdHVzICE9PSBTVEFUVVNfUEVORElORykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9taXNlIGFscmVhZHkgJHtzaW5vblByb21pc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cblxuICAgIHNpbm9uUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGZpbmFsaXplKFNUQVRVU19SRVNPTFZFRCwgdmFsdWUsIGZha2VFeGVjdXRvci5maXJzdENhbGwuYXJnc1swXSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgcHJvbWlzZSBzbyB0aGF0IGNhbGxlcnMgY2FuIGF3YWl0IGl0OlxuICAgICAgICByZXR1cm4gc2lub25Qcm9taXNlO1xuICAgIH07XG4gICAgc2lub25Qcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgZmluYWxpemUoU1RBVFVTX1JFSkVDVEVELCByZWFzb24sIGZha2VFeGVjdXRvci5maXJzdENhbGwuYXJnc1sxXSk7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2lub24gcHJvbWlzZSB3YXNcbiAgICAgICAgLy8gcmVqZWN0ZWQsIHNvIHRoYXQgY2FsbGVycyBjYW4gYXdhaXQgaXQ6XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLmNhdGNoKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2lub25Qcm9taXNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb21pc2U7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgcHVzaCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkucHVzaDtcblxuZXhwb3J0cy5pbmNyZW1lbnRDYWxsQ291bnQgPSBmdW5jdGlvbiBpbmNyZW1lbnRDYWxsQ291bnQocHJveHkpIHtcbiAgICBwcm94eS5jYWxsZWQgPSB0cnVlO1xuICAgIHByb3h5LmNhbGxDb3VudCArPSAxO1xuICAgIHByb3h5Lm5vdENhbGxlZCA9IGZhbHNlO1xuICAgIHByb3h5LmNhbGxlZE9uY2UgPSBwcm94eS5jYWxsQ291bnQgPT09IDE7XG4gICAgcHJveHkuY2FsbGVkVHdpY2UgPSBwcm94eS5jYWxsQ291bnQgPT09IDI7XG4gICAgcHJveHkuY2FsbGVkVGhyaWNlID0gcHJveHkuY2FsbENvdW50ID09PSAzO1xufTtcblxuZXhwb3J0cy5jcmVhdGVDYWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIGNyZWF0ZUNhbGxQcm9wZXJ0aWVzKHByb3h5KSB7XG4gICAgcHJveHkuZmlyc3RDYWxsID0gcHJveHkuZ2V0Q2FsbCgwKTtcbiAgICBwcm94eS5zZWNvbmRDYWxsID0gcHJveHkuZ2V0Q2FsbCgxKTtcbiAgICBwcm94eS50aGlyZENhbGwgPSBwcm94eS5nZXRDYWxsKDIpO1xuICAgIHByb3h5Lmxhc3RDYWxsID0gcHJveHkuZ2V0Q2FsbChwcm94eS5jYWxsQ291bnQgLSAxKTtcbn07XG5cbmV4cG9ydHMuZGVsZWdhdGVUb0NhbGxzID0gZnVuY3Rpb24gZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5LFxuICAgIG1ldGhvZCxcbiAgICBtYXRjaEFueSxcbiAgICBhY3R1YWwsXG4gICAgcmV0dXJuc1ZhbHVlcyxcbiAgICBub3RDYWxsZWQsXG4gICAgdG90YWxDYWxsQ291bnQsXG4pIHtcbiAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkKSB7XG4gICAgICAgICAgICBpZiAobm90Q2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdENhbGxlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvdGFsQ2FsbENvdW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jYWxsQ291bnQgIT09IHRvdGFsQ2FsbENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudENhbGw7XG4gICAgICAgIGxldCBtYXRjaGVzID0gMDtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWVzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLmNhbGxDb3VudDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICAgICAgY3VycmVudENhbGwgPSB0aGlzLmdldENhbGwoaSk7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGN1cnJlbnRDYWxsW2FjdHVhbCB8fCBtZXRob2RdLmFwcGx5KFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsLFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50cyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXNoKHJldHVyblZhbHVlcywgcmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcyArPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQW55KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXR1cm5zVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaGVzID09PSB0aGlzLmNhbGxDb3VudDtcbiAgICB9O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IG1hdGNoID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5kZWVwRXF1YWw7XG5jb25zdCBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG5jb25zdCBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcbmNvbnN0IHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG5jb25zdCBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbmNvbnN0IGZpbHRlciA9IGFycmF5UHJvdG8uZmlsdGVyO1xuY29uc3Qgam9pbiA9IGFycmF5UHJvdG8uam9pbjtcbmNvbnN0IG1hcCA9IGFycmF5UHJvdG8ubWFwO1xuY29uc3QgcmVkdWNlID0gYXJyYXlQcm90by5yZWR1Y2U7XG5jb25zdCBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbi8qKlxuICogQHBhcmFtIHByb3h5XG4gKiBAcGFyYW0gdGV4dFxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZnVuY3Rpb24gdGhyb3dZaWVsZEVycm9yKHByb3h5LCB0ZXh0LCBhcmdzKSB7XG4gICAgbGV0IG1zZyA9IGZ1bmN0aW9uTmFtZShwcm94eSkgKyB0ZXh0O1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBtc2cgKz0gYCBSZWNlaXZlZCBbJHtqb2luKHNsaWNlKGFyZ3MpLCBcIiwgXCIpfV1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuY29uc3QgY2FsbFByb3RvID0ge1xuICAgIGNhbGxlZE9uOiBmdW5jdGlvbiBjYWxsZWRPbih0aGlzVmFsdWUpIHtcbiAgICAgICAgaWYgKG1hdGNoLmlzTWF0Y2hlcih0aGlzVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1ZhbHVlLnRlc3QodGhpcy50aGlzVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoaXNWYWx1ZSA9PT0gdGhpc1ZhbHVlO1xuICAgIH0sXG5cbiAgICBjYWxsZWRXaXRoOiBmdW5jdGlvbiBjYWxsZWRXaXRoKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY2FsbGVkV2l0aEFyZ3MgPSBzbGljZShhcmd1bWVudHMpO1xuXG4gICAgICAgIGlmIChjYWxsZWRXaXRoQXJncy5sZW5ndGggPiBzZWxmLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgICAgICAgY2FsbGVkV2l0aEFyZ3MsXG4gICAgICAgICAgICBmdW5jdGlvbiAocHJldiwgYXJnLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgJiYgZGVlcEVxdWFsKHNlbGYuYXJnc1tpXSwgYXJnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBjYWxsZWRXaXRoTWF0Y2g6IGZ1bmN0aW9uIGNhbGxlZFdpdGhNYXRjaCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbGxlZFdpdGhNYXRjaEFyZ3MgPSBzbGljZShhcmd1bWVudHMpO1xuXG4gICAgICAgIGlmIChjYWxsZWRXaXRoTWF0Y2hBcmdzLmxlbmd0aCA+IHNlbGYuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWR1Y2UoXG4gICAgICAgICAgICBjYWxsZWRXaXRoTWF0Y2hBcmdzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHByZXYsIGV4cGVjdGF0aW9uLCBpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gc2VsZi5hcmdzW2ldO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgJiYgbWF0Y2goZXhwZWN0YXRpb24pLnRlc3QoYWN0dWFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBjYWxsZWRXaXRoRXhhY3RseTogZnVuY3Rpb24gY2FsbGVkV2l0aEV4YWN0bHkoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSB0aGlzLmFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLmNhbGxlZFdpdGguYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBub3RDYWxsZWRXaXRoOiBmdW5jdGlvbiBub3RDYWxsZWRXaXRoKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY2FsbGVkV2l0aC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBub3RDYWxsZWRXaXRoTWF0Y2g6IGZ1bmN0aW9uIG5vdENhbGxlZFdpdGhNYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNhbGxlZFdpdGhNYXRjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICByZXR1cm5lZDogZnVuY3Rpb24gcmV0dXJuZWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBFcXVhbCh0aGlzLnJldHVyblZhbHVlLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIHRocmV3OiBmdW5jdGlvbiB0aHJldyhlcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInVuZGVmaW5lZFwiIHx8ICF0aGlzLmV4Y2VwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5leGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjZXB0aW9uID09PSBlcnJvciB8fCB0aGlzLmV4Y2VwdGlvbi5uYW1lID09PSBlcnJvcjtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aE5ldzogZnVuY3Rpb24gY2FsbGVkV2l0aE5ldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkucHJvdG90eXBlICYmIHRoaXMudGhpc1ZhbHVlIGluc3RhbmNlb2YgdGhpcy5wcm94eTtcbiAgICB9LFxuXG4gICAgY2FsbGVkQmVmb3JlOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkIDwgb3RoZXIuY2FsbElkO1xuICAgIH0sXG5cbiAgICBjYWxsZWRBZnRlcjogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZCA+IG90aGVyLmNhbGxJZDtcbiAgICB9LFxuXG4gICAgY2FsbGVkSW1tZWRpYXRlbHlCZWZvcmU6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWQgPT09IG90aGVyLmNhbGxJZCAtIDE7XG4gICAgfSxcblxuICAgIGNhbGxlZEltbWVkaWF0ZWx5QWZ0ZXI6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWQgPT09IG90aGVyLmNhbGxJZCArIDE7XG4gICAgfSxcblxuICAgIGNhbGxBcmc6IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBcmdJc0FGdW5jdGlvbihwb3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcmdzW3Bvc10oKTtcbiAgICB9LFxuXG4gICAgY2FsbEFyZ09uOiBmdW5jdGlvbiAocG9zLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBcmdJc0FGdW5jdGlvbihwb3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcmdzW3Bvc10uYXBwbHkodGhpc1ZhbHVlKTtcbiAgICB9LFxuXG4gICAgY2FsbEFyZ1dpdGg6IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFyZ09uV2l0aC5hcHBseShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBjb25jYXQoW3BvcywgbnVsbF0sIHNsaWNlKGFyZ3VtZW50cywgMSkpLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBjYWxsQXJnT25XaXRoOiBmdW5jdGlvbiAocG9zLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBcmdJc0FGdW5jdGlvbihwb3MpO1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJnc1twb3NdLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgfSxcblxuICAgIHRocm93QXJnOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIGlmIChwb3MgPiB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBOb3QgZW5vdWdoIGFyZ3VtZW50czogJHtwb3N9IHJlcXVpcmVkIGJ1dCBvbmx5ICR7dGhpcy5hcmdzLmxlbmd0aH0gcHJlc2VudGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgdGhpcy5hcmdzW3Bvc107XG4gICAgfSxcblxuICAgIHlpZWxkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnlpZWxkT24uYXBwbHkodGhpcywgY29uY2F0KFtudWxsXSwgc2xpY2UoYXJndW1lbnRzLCAwKSkpO1xuICAgIH0sXG5cbiAgICB5aWVsZE9uOiBmdW5jdGlvbiAodGhpc1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzbGljZSh0aGlzLmFyZ3MpO1xuICAgICAgICBjb25zdCB5aWVsZEZuID0gZmlsdGVyKGFyZ3MsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIH0pWzBdO1xuXG4gICAgICAgIGlmICgheWllbGRGbikge1xuICAgICAgICAgICAgdGhyb3dZaWVsZEVycm9yKFxuICAgICAgICAgICAgICAgIHRoaXMucHJveHksXG4gICAgICAgICAgICAgICAgXCIgY2Fubm90IHlpZWxkIHNpbmNlIG5vIGNhbGxiYWNrIHdhcyBwYXNzZWQuXCIsXG4gICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geWllbGRGbi5hcHBseSh0aGlzVmFsdWUsIHNsaWNlKGFyZ3VtZW50cywgMSkpO1xuICAgIH0sXG5cbiAgICB5aWVsZFRvOiBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy55aWVsZFRvT24uYXBwbHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgY29uY2F0KFtwcm9wLCBudWxsXSwgc2xpY2UoYXJndW1lbnRzLCAxKSksXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIHlpZWxkVG9PbjogZnVuY3Rpb24gKHByb3AsIHRoaXNWYWx1ZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UodGhpcy5hcmdzKTtcbiAgICAgICAgY29uc3QgeWllbGRBcmcgPSBmaWx0ZXIoYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnW3Byb3BdID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICBjb25zdCB5aWVsZEZuID0geWllbGRBcmcgJiYgeWllbGRBcmdbcHJvcF07XG5cbiAgICAgICAgaWYgKCF5aWVsZEZuKSB7XG4gICAgICAgICAgICB0aHJvd1lpZWxkRXJyb3IoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICBgIGNhbm5vdCB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgICl9JyBzaW5jZSBubyBjYWxsYmFjayB3YXMgcGFzc2VkLmAsXG4gICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geWllbGRGbi5hcHBseSh0aGlzVmFsdWUsIHNsaWNlKGFyZ3VtZW50cywgMikpO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIFwiOihcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWxsU3RyID0gdGhpcy5wcm94eSA/IGAke1N0cmluZyh0aGlzLnByb3h5KX0oYCA6IFwiXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBtYXAodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdChhcmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjYWxsU3RyID0gYCR7Y2FsbFN0ciArIGpvaW4oZm9ybWF0dGVkQXJncywgXCIsIFwiKX0pYDtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0dXJuVmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNhbGxTdHIgKz0gYCA9PiAke2luc3BlY3QodGhpcy5yZXR1cm5WYWx1ZSl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4Y2VwdGlvbikge1xuICAgICAgICAgICAgY2FsbFN0ciArPSBgICEke3RoaXMuZXhjZXB0aW9uLm5hbWV9YDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjZXB0aW9uLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBjYWxsU3RyICs9IGAoJHt0aGlzLmV4Y2VwdGlvbi5tZXNzYWdlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YWNrKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgc3RhY2ssIGFkZCB0aGUgZmlyc3QgZnJhbWUgdGhhdCdzIGluIGVuZC11c2VyIGNvZGVcbiAgICAgICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IHR3byBmcmFtZXMgYmVjYXVzZSB0aGV5IHdpbGwgcmVmZXIgdG8gU2lub24gY29kZVxuICAgICAgICAgICAgY2FsbFN0ciArPSAodGhpcy5zdGFjay5zcGxpdChcIlxcblwiKVszXSB8fCBcInVua25vd25cIikucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvXlxccyooPzphdFxccyt8QCk/LyxcbiAgICAgICAgICAgICAgICBcIiBhdCBcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbFN0cjtcbiAgICB9LFxuXG4gICAgZW5zdXJlQXJnSXNBRnVuY3Rpb246IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFyZ3NbcG9zXSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBFeHBlY3RlZCBhcmd1bWVudCBhdCBwb3NpdGlvbiAke3Bvc30gdG8gYmUgYSBGdW5jdGlvbiwgYnV0IHdhcyAke3R5cGVvZiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIC5hcmdzW3Bvc119YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYWxsUHJvdG8sIFwic3RhY2tcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZXJyb3JXaXRoQ2FsbFN0YWNrICYmIHRoaXMuZXJyb3JXaXRoQ2FsbFN0YWNrLnN0YWNrKSB8fCBcIlwiO1xuICAgIH0sXG59KTtcblxuY2FsbFByb3RvLmludm9rZUNhbGxiYWNrID0gY2FsbFByb3RvLnlpZWxkO1xuXG4vKipcbiAqIEBwYXJhbSBwcm94eVxuICogQHBhcmFtIHRoaXNWYWx1ZVxuICogQHBhcmFtIGFyZ3NcbiAqIEBwYXJhbSByZXR1cm5WYWx1ZVxuICogQHBhcmFtIGV4Y2VwdGlvblxuICogQHBhcmFtIGlkXG4gKiBAcGFyYW0gZXJyb3JXaXRoQ2FsbFN0YWNrXG4gKlxuICogQHJldHVybnMge29iamVjdH0gcHJveHlDYWxsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb3h5Q2FsbChcbiAgICBwcm94eSxcbiAgICB0aGlzVmFsdWUsXG4gICAgYXJncyxcbiAgICByZXR1cm5WYWx1ZSxcbiAgICBleGNlcHRpb24sXG4gICAgaWQsXG4gICAgZXJyb3JXaXRoQ2FsbFN0YWNrLFxuKSB7XG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2FsbCBpZCBpcyBub3QgYSBudW1iZXJcIik7XG4gICAgfVxuXG4gICAgbGV0IGZpcnN0QXJnLCBsYXN0QXJnO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBmaXJzdEFyZyA9IGFyZ3NbMF07XG4gICAgICAgIGxhc3RBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgY29uc3QgcHJveHlDYWxsID0gT2JqZWN0LmNyZWF0ZShjYWxsUHJvdG8pO1xuICAgIGNvbnN0IGNhbGxiYWNrID1cbiAgICAgICAgbGFzdEFyZyAmJiB0eXBlb2YgbGFzdEFyZyA9PT0gXCJmdW5jdGlvblwiID8gbGFzdEFyZyA6IHVuZGVmaW5lZDtcblxuICAgIHByb3h5Q2FsbC5wcm94eSA9IHByb3h5O1xuICAgIHByb3h5Q2FsbC50aGlzVmFsdWUgPSB0aGlzVmFsdWU7XG4gICAgcHJveHlDYWxsLmFyZ3MgPSBhcmdzO1xuICAgIHByb3h5Q2FsbC5maXJzdEFyZyA9IGZpcnN0QXJnO1xuICAgIHByb3h5Q2FsbC5sYXN0QXJnID0gbGFzdEFyZztcbiAgICBwcm94eUNhbGwuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICBwcm94eUNhbGwucmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZTtcbiAgICBwcm94eUNhbGwuZXhjZXB0aW9uID0gZXhjZXB0aW9uO1xuICAgIHByb3h5Q2FsbC5jYWxsSWQgPSBpZDtcbiAgICBwcm94eUNhbGwuZXJyb3JXaXRoQ2FsbFN0YWNrID0gZXJyb3JXaXRoQ2FsbFN0YWNrO1xuXG4gICAgcmV0dXJuIHByb3h5Q2FsbDtcbn1cbmNyZWF0ZVByb3h5Q2FsbC50b1N0cmluZyA9IGNhbGxQcm90by50b1N0cmluZzsgLy8gdXNlZCBieSBtb2Nrc1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVByb3h5Q2FsbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IHByb3h5Q2FsbFV0aWwgPSByZXF1aXJlKFwiLi9wcm94eS1jYWxsLXV0aWxcIik7XG5cbmNvbnN0IHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5jb25zdCBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xuY29uc3QgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG5jb25zdCBFcnJvckNvbnN0cnVjdG9yID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuY29uc3QgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuXG5sZXQgY2FsbElkID0gMDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnZva2UoZnVuYywgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdzID0gdGhpcy5tYXRjaGluZ0Zha2VzKGFyZ3MpO1xuICAgIGNvbnN0IGN1cnJlbnRDYWxsSWQgPSBjYWxsSWQrKztcbiAgICBsZXQgZXhjZXB0aW9uLCByZXR1cm5WYWx1ZTtcblxuICAgIHByb3h5Q2FsbFV0aWwuaW5jcmVtZW50Q2FsbENvdW50KHRoaXMpO1xuICAgIHB1c2godGhpcy50aGlzVmFsdWVzLCB0aGlzVmFsdWUpO1xuICAgIHB1c2godGhpcy5hcmdzLCBhcmdzKTtcbiAgICBwdXNoKHRoaXMuY2FsbElkcywgY3VycmVudENhbGxJZCk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIGZ1bmN0aW9uIChtYXRjaGluZykge1xuICAgICAgICBwcm94eUNhbGxVdGlsLmluY3JlbWVudENhbGxDb3VudChtYXRjaGluZyk7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcudGhpc1ZhbHVlcywgdGhpc1ZhbHVlKTtcbiAgICAgICAgcHVzaChtYXRjaGluZy5hcmdzLCBhcmdzKTtcbiAgICAgICAgcHVzaChtYXRjaGluZy5jYWxsSWRzLCBjdXJyZW50Q2FsbElkKTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgY2FsbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiB0aGUgc3BpZWQgZnVuY3Rpb246XG4gICAgcHJveHlDYWxsVXRpbC5jcmVhdGVDYWxsUHJvcGVydGllcyh0aGlzKTtcbiAgICBmb3JFYWNoKG1hdGNoaW5ncywgcHJveHlDYWxsVXRpbC5jcmVhdGVDYWxsUHJvcGVydGllcyk7XG5cbiAgICB0cnkge1xuICAgICAgICB0aGlzLmludm9raW5nID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCB0aGlzQ2FsbCA9IHRoaXMuZ2V0Q2FsbCh0aGlzLmNhbGxDb3VudCAtIDEpO1xuXG4gICAgICAgIGlmICh0aGlzQ2FsbC5jYWxsZWRXaXRoTmV3KCkpIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhyb3VnaCB3aXRoIGBuZXdgXG4gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG5ldyAoYmluZC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmMgfHwgZnVuYyxcbiAgICAgICAgICAgICAgICBjb25jYXQoW3RoaXNWYWx1ZV0sIGFyZ3MpLFxuICAgICAgICAgICAgKSkoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXR1cm5WYWx1ZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXR1cm5WYWx1ZSAhPT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVyblZhbHVlID0gKHRoaXMuZnVuYyB8fCBmdW5jKS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBleGNlcHRpb24gPSBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmludm9raW5nO1xuICAgIH1cblxuICAgIHB1c2godGhpcy5leGNlcHRpb25zLCBleGNlcHRpb24pO1xuICAgIHB1c2godGhpcy5yZXR1cm5WYWx1ZXMsIHJldHVyblZhbHVlKTtcbiAgICBmb3JFYWNoKG1hdGNoaW5ncywgZnVuY3Rpb24gKG1hdGNoaW5nKSB7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcuZXhjZXB0aW9ucywgZXhjZXB0aW9uKTtcbiAgICAgICAgcHVzaChtYXRjaGluZy5yZXR1cm5WYWx1ZXMsIHJldHVyblZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvckNvbnN0cnVjdG9yKCk7XG4gICAgLy8gMS4gUGxlYXNlIGRvIG5vdCBnZXQgc3RhY2sgYXQgdGhpcyBwb2ludC4gSXQgbWF5IGJlIHNvIHZlcnkgc2xvdywgYW5kIG5vdCBhY3R1YWxseSB1c2VkXG4gICAgLy8gMi4gUGhhbnRvbUpTIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgc3RhY2sgdHJhY2UgdW50aWwgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bjpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvci9TdGFja1xuICAgIHRyeSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuICAgIHB1c2godGhpcy5lcnJvcnNXaXRoQ2FsbFN0YWNrLCBlcnIpO1xuICAgIGZvckVhY2gobWF0Y2hpbmdzLCBmdW5jdGlvbiAobWF0Y2hpbmcpIHtcbiAgICAgICAgcHVzaChtYXRjaGluZy5lcnJvcnNXaXRoQ2FsbFN0YWNrLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgLy8gTWFrZSByZXR1cm4gdmFsdWUgYW5kIGV4Y2VwdGlvbiBhdmFpbGFibGUgaW4gdGhlIGNhbGxzOlxuICAgIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXModGhpcyk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZnVuY3Rpb24tdG8tc3RyaW5nXCIpO1xuY29uc3QgcHJveHlDYWxsID0gcmVxdWlyZShcIi4vcHJveHktY2FsbFwiKTtcbmNvbnN0IHByb3h5Q2FsbFV0aWwgPSByZXF1aXJlKFwiLi9wcm94eS1jYWxsLXV0aWxcIik7XG5jb25zdCBwcm94eUludm9rZSA9IHJlcXVpcmUoXCIuL3Byb3h5LWludm9rZVwiKTtcbmNvbnN0IGluc3BlY3QgPSByZXF1aXJlKFwidXRpbFwiKS5pbnNwZWN0O1xuXG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuY29uc3QgZW1wdHlGYWtlcyA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4vLyBQdWJsaWMgQVBJXG5jb25zdCBwcm94eUFwaSA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb25Ub1N0cmluZyxcblxuICAgIG5hbWVkOiBmdW5jdGlvbiBuYW1lZChuYW1lKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICBjb25zdCBuYW1lRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgXCJuYW1lXCIpO1xuICAgICAgICBpZiAobmFtZURlc2NyaXB0b3IgJiYgbmFtZURlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgICAvLyBJRSAxMSBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhIG5hbWUuXG4gICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgbmFtZXMgdGhhdCBhcmUgbm90IGNvbmZpZ3VyYWJsZS5cbiAgICAgICAgICAgIG5hbWVEZXNjcmlwdG9yLnZhbHVlID0gbmFtZTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwgbmFtZURlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBpbnZva2U6IHByb3h5SW52b2tlLFxuXG4gICAgLypcbiAgICAgKiBIb29rIGZvciBkZXJpdmVkIGltcGxlbWVudGF0aW9uIHRvIHJldHVybiBmYWtlIGluc3RhbmNlcyBtYXRjaGluZyB0aGVcbiAgICAgKiBnaXZlbiBhcmd1bWVudHMuXG4gICAgICovXG4gICAgbWF0Y2hpbmdGYWtlczogZnVuY3Rpb24gKC8qYXJncywgc3RyaWN0Ki8pIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5RmFrZXM7XG4gICAgfSxcblxuICAgIGdldENhbGw6IGZ1bmN0aW9uIGdldENhbGwoaW5kZXgpIHtcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgaWYgKGkgPCAwKSB7XG4gICAgICAgICAgICAvLyBOZWdhdGl2ZSBpbmRpY2VzIG1lYW5zIGNvdW50aW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IGNhbGxcbiAgICAgICAgICAgIGkgKz0gdGhpcy5jYWxsQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5jYWxsQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3h5Q2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICB0aGlzLnRoaXNWYWx1ZXNbaV0sXG4gICAgICAgICAgICB0aGlzLmFyZ3NbaV0sXG4gICAgICAgICAgICB0aGlzLnJldHVyblZhbHVlc1tpXSxcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uc1tpXSxcbiAgICAgICAgICAgIHRoaXMuY2FsbElkc1tpXSxcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzV2l0aENhbGxTdGFja1tpXSxcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgZ2V0Q2FsbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHMgPSBbXTtcbiAgICAgICAgbGV0IGk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuY2FsbENvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHB1c2goY2FsbHMsIHRoaXMuZ2V0Q2FsbChpKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbHM7XG4gICAgfSxcblxuICAgIGNhbGxlZEJlZm9yZTogZnVuY3Rpb24gY2FsbGVkQmVmb3JlKHByb3h5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcHJveHkuY2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZHNbMF0gPCBwcm94eS5jYWxsSWRzW3Byb3h5LmNhbGxJZHMubGVuZ3RoIC0gMV07XG4gICAgfSxcblxuICAgIGNhbGxlZEFmdGVyOiBmdW5jdGlvbiBjYWxsZWRBZnRlcihwcm94eSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkIHx8ICFwcm94eS5jYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZHNbdGhpcy5jYWxsQ291bnQgLSAxXSA+IHByb3h5LmNhbGxJZHNbMF07XG4gICAgfSxcblxuICAgIGNhbGxlZEltbWVkaWF0ZWx5QmVmb3JlOiBmdW5jdGlvbiBjYWxsZWRJbW1lZGlhdGVseUJlZm9yZShwcm94eSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkIHx8ICFwcm94eS5jYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmNhbGxJZHNbdGhpcy5jYWxsQ291bnQgLSAxXSA9PT1cbiAgICAgICAgICAgIHByb3h5LmNhbGxJZHNbcHJveHkuY2FsbENvdW50IC0gMV0gLSAxXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGNhbGxlZEltbWVkaWF0ZWx5QWZ0ZXI6IGZ1bmN0aW9uIGNhbGxlZEltbWVkaWF0ZWx5QWZ0ZXIocHJveHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxlZCB8fCAhcHJveHkuY2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5jYWxsSWRzW3RoaXMuY2FsbENvdW50IC0gMV0gPT09XG4gICAgICAgICAgICBwcm94eS5jYWxsSWRzW3Byb3h5LmNhbGxDb3VudCAtIDFdICsgMVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBmb3JtYXR0ZXJzOiByZXF1aXJlKFwiLi9zcHktZm9ybWF0dGVyc1wiKSxcbiAgICBwcmludGY6IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgY29uc3Qgc3B5SW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgbGV0IGZvcm1hdHRlcjtcblxuICAgICAgICByZXR1cm4gKGZvcm1hdCB8fCBcIlwiKS5yZXBsYWNlKC8lKC4pL2csIGZ1bmN0aW9uIChtYXRjaCwgc3BlY2lmaWVyKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZXIgPSBwcm94eUFwaS5mb3JtYXR0ZXJzW3NwZWNpZmllcl07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm1hdHRlcihzcHlJbnN0YW5jZSwgYXJncykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VJbnQoc3BlY2lmaWVyLCAxMCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3BlY3QoYXJnc1tzcGVjaWZpZXIgLSAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgJSR7c3BlY2lmaWVyfWA7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNldEhpc3Rvcnk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW52b2tpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNhbm5vdCByZXNldCBTaW5vbiBmdW5jdGlvbiB3aGlsZSBpbnZva2luZyBpdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1vdmUgdGhlIGNhbGwgdG8gLnJlc2V0SGlzdG9yeSBvdXRzaWRlIG9mIHRoZSBjYWxsYmFjay5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9IFwiSW52YWxpZFJlc2V0RXhjZXB0aW9uXCI7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdENhbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGxlZFR3aWNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsbGVkVGhyaWNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsbENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5maXJzdENhbGwgPSBudWxsO1xuICAgICAgICB0aGlzLnNlY29uZENhbGwgPSBudWxsO1xuICAgICAgICB0aGlzLnRoaXJkQ2FsbCA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdENhbGwgPSBudWxsO1xuICAgICAgICB0aGlzLmFyZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5maXJzdEFyZyA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdEFyZyA9IG51bGw7XG4gICAgICAgIHRoaXMucmV0dXJuVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMudGhpc1ZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLmV4Y2VwdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYWxsSWRzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzV2l0aENhbGxTdGFjayA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmZha2VzKSB7XG4gICAgICAgICAgICBmb3JFYWNoKHRoaXMuZmFrZXMsIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgICAgICAgICAgZmFrZS5yZXNldEhpc3RvcnkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbn07XG5cbmNvbnN0IGRlbGVnYXRlVG9DYWxscyA9IHByb3h5Q2FsbFV0aWwuZGVsZWdhdGVUb0NhbGxzO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZE9uXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c0NhbGxlZE9uXCIsIGZhbHNlLCBcImNhbGxlZE9uXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJjYWxsZWRPbmNlV2l0aFwiLFxuICAgIHRydWUsXG4gICAgXCJjYWxsZWRXaXRoXCIsXG4gICAgZmFsc2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIDEsXG4pO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhNYXRjaFwiLCB0cnVlKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJhbHdheXNDYWxsZWRXaXRoXCIsIGZhbHNlLCBcImNhbGxlZFdpdGhcIik7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiYWx3YXlzQ2FsbGVkV2l0aE1hdGNoXCIsIGZhbHNlLCBcImNhbGxlZFdpdGhNYXRjaFwiKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJjYWxsZWRXaXRoRXhhY3RseVwiLCB0cnVlKTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eUFwaSxcbiAgICBcImNhbGxlZE9uY2VXaXRoRXhhY3RseVwiLFxuICAgIHRydWUsXG4gICAgXCJjYWxsZWRXaXRoRXhhY3RseVwiLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxLFxuKTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eUFwaSxcbiAgICBcImNhbGxlZE9uY2VXaXRoTWF0Y2hcIixcbiAgICB0cnVlLFxuICAgIFwiY2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgZmFsc2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIDEsXG4pO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5QXBpLFxuICAgIFwiYWx3YXlzQ2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICBmYWxzZSxcbiAgICBcImNhbGxlZFdpdGhFeGFjdGx5XCIsXG4pO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5QXBpLFxuICAgIFwibmV2ZXJDYWxsZWRXaXRoXCIsXG4gICAgZmFsc2UsXG4gICAgXCJub3RDYWxsZWRXaXRoXCIsXG4gICAgZmFsc2UsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuKTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eUFwaSxcbiAgICBcIm5ldmVyQ2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgZmFsc2UsXG4gICAgXCJub3RDYWxsZWRXaXRoTWF0Y2hcIixcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4pO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcInRocmV3XCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c1RocmV3XCIsIGZhbHNlLCBcInRocmV3XCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcInJldHVybmVkXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c1JldHVybmVkXCIsIGZhbHNlLCBcInJldHVybmVkXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhOZXdcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiYWx3YXlzQ2FsbGVkV2l0aE5ld1wiLCBmYWxzZSwgXCJjYWxsZWRXaXRoTmV3XCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVQcm94eShmdW5jLCBvcmlnaW5hbEZ1bmMpIHtcbiAgICBjb25zdCBwcm94eSA9IHdyYXBGdW5jdGlvbihmdW5jLCBvcmlnaW5hbEZ1bmMpO1xuXG4gICAgLy8gSW5oZXJpdCBmdW5jdGlvbiBwcm9wZXJ0aWVzOlxuICAgIGV4dGVuZChwcm94eSwgZnVuYyk7XG5cbiAgICBwcm94eS5wcm90b3R5cGUgPSBmdW5jLnByb3RvdHlwZTtcblxuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCBwcm94eUFwaSk7XG5cbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIHdyYXBGdW5jdGlvbihmdW5jLCBvcmlnaW5hbEZ1bmMpIHtcbiAgICBjb25zdCBhcml0eSA9IG9yaWdpbmFsRnVuYy5sZW5ndGg7XG4gICAgbGV0IHA7XG4gICAgLy8gRG8gbm90IGNoYW5nZSB0aGlzIHRvIHVzZSBhbiBldmFsLiBQcm9qZWN0cyB0aGF0IGRlcGVuZCBvbiBzaW5vbiBibG9jayB0aGUgdXNlIG9mIGV2YWwuXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9zaW5vbi9pc3N1ZXMvNzEwXG4gICAgc3dpdGNoIChhcml0eSkge1xuICAgICAgICAvKmVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzLCBtYXgtbGVuKi9cbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8qZXNsaW50LWVuYWJsZSovXG4gICAgfVxuICAgIGNvbnN0IG5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgb3JpZ2luYWxGdW5jLFxuICAgICAgICBcIm5hbWVcIixcbiAgICApO1xuICAgIGlmIChuYW1lRGVzY3JpcHRvciAmJiBuYW1lRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgLy8gSUUgMTEgZnVuY3Rpb25zIGRvbid0IGhhdmUgYSBuYW1lLlxuICAgICAgICAvLyBTYWZhcmkgOSBoYXMgbmFtZXMgdGhhdCBhcmUgbm90IGNvbmZpZ3VyYWJsZS5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIFwibmFtZVwiLCBuYW1lRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIGV4dGVuZC5ub25FbnVtKHAsIHtcbiAgICAgICAgaXNTaW5vblByb3h5OiB0cnVlLFxuXG4gICAgICAgIGNhbGxlZDogZmFsc2UsXG4gICAgICAgIG5vdENhbGxlZDogdHJ1ZSxcbiAgICAgICAgY2FsbGVkT25jZTogZmFsc2UsXG4gICAgICAgIGNhbGxlZFR3aWNlOiBmYWxzZSxcbiAgICAgICAgY2FsbGVkVGhyaWNlOiBmYWxzZSxcbiAgICAgICAgY2FsbENvdW50OiAwLFxuICAgICAgICBmaXJzdENhbGw6IG51bGwsXG4gICAgICAgIGZpcnN0QXJnOiBudWxsLFxuICAgICAgICBzZWNvbmRDYWxsOiBudWxsLFxuICAgICAgICB0aGlyZENhbGw6IG51bGwsXG4gICAgICAgIGxhc3RDYWxsOiBudWxsLFxuICAgICAgICBsYXN0QXJnOiBudWxsLFxuICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgcmV0dXJuVmFsdWVzOiBbXSxcbiAgICAgICAgdGhpc1ZhbHVlczogW10sXG4gICAgICAgIGV4Y2VwdGlvbnM6IFtdLFxuICAgICAgICBjYWxsSWRzOiBbXSxcbiAgICAgICAgZXJyb3JzV2l0aENhbGxTdGFjazogW10sXG4gICAgfSk7XG4gICAgcmV0dXJuIHA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUHJveHk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3Qgd2Fsa09iamVjdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93YWxrLW9iamVjdFwiKTtcblxuZnVuY3Rpb24gZmlsdGVyKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5XS5yZXN0b3JlICYmIG9iamVjdFtwcm9wZXJ0eV0ucmVzdG9yZS5zaW5vbjtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgb2JqZWN0W3Byb3BlcnR5XS5yZXN0b3JlKCk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVPYmplY3Qob2JqZWN0KSB7XG4gICAgcmV0dXJuIHdhbGtPYmplY3QocmVzdG9yZSwgb2JqZWN0LCBmaWx0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc3RvcmVPYmplY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5kZXByZWNhdGVkO1xuY29uc3QgY29sbGVjdE93bk1ldGhvZHMgPSByZXF1aXJlKFwiLi9jb2xsZWN0LW93bi1tZXRob2RzXCIpO1xuY29uc3QgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuY29uc3QgaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1wcm9wZXJ0eS1jb25maWd1cmFibGVcIik7XG5jb25zdCBtYXRjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbmNvbnN0IHNpbm9uQXNzZXJ0ID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xuY29uc3Qgc2lub25DbG9jayA9IHJlcXVpcmUoXCIuL3V0aWwvZmFrZS10aW1lcnNcIik7XG5jb25zdCBzaW5vbk1vY2sgPSByZXF1aXJlKFwiLi9tb2NrXCIpO1xuY29uc3Qgc2lub25TcHkgPSByZXF1aXJlKFwiLi9zcHlcIik7XG5jb25zdCBzaW5vblN0dWIgPSByZXF1aXJlKFwiLi9zdHViXCIpO1xuY29uc3Qgc2lub25DcmVhdGVTdHViSW5zdGFuY2UgPSByZXF1aXJlKFwiLi9jcmVhdGUtc3R1Yi1pbnN0YW5jZVwiKTtcbmNvbnN0IHNpbm9uRmFrZSA9IHJlcXVpcmUoXCIuL2Zha2VcIik7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbmNvbnN0IGZha2VTZXJ2ZXIgPSByZXF1aXJlKFwibmlzZVwiKS5mYWtlU2VydmVyO1xuY29uc3QgZmFrZVhociA9IHJlcXVpcmUoXCJuaXNlXCIpLmZha2VYaHI7XG5jb25zdCB1c2VQcm9taXNlTGlicmFyeSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS91c2UtcHJvbWlzZS1saWJyYXJ5XCIpO1xuXG5jb25zdCBERUZBVUxUX0xFQUtfVEhSRVNIT0xEID0gMTAwMDA7XG5cbmNvbnN0IGZpbHRlciA9IGFycmF5UHJvdG8uZmlsdGVyO1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5jb25zdCByZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG5mdW5jdGlvbiBhcHBseU9uRWFjaChmYWtlcywgbWV0aG9kKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdGYWtlcyA9IGZpbHRlcihmYWtlcywgZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBmYWtlW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIjtcbiAgICB9KTtcblxuICAgIGZvckVhY2gobWF0Y2hpbmdGYWtlcywgZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgZmFrZVttZXRob2RdKCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHRocm93T25BY2Nlc3NvcnMoZGVzY3JpcHRvcikge1xuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVc2Ugc2FuZGJveC5yZXBsYWNlR2V0dGVyIGZvciByZXBsYWNpbmcgZ2V0dGVyc1wiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXNlIHNhbmRib3gucmVwbGFjZVNldHRlciBmb3IgcmVwbGFjaW5nIHNldHRlcnNcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2ZXJpZnlTYW1lVHlwZShvYmplY3QsIHByb3BlcnR5LCByZXBsYWNlbWVudCkge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BlcnR5XSAhPT0gdHlwZW9mIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlcGxhY2UgJHt0eXBlb2Ygb2JqZWN0W1xuICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICBdfSB3aXRoICR7dHlwZW9mIHJlcGxhY2VtZW50fWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ZvclZhbGlkQXJndW1lbnRzKGRlc2NyaXB0b3IsIHByb3BlcnR5LCByZXBsYWNlbWVudCkge1xuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICApfS4gUGVyaGFwcyB5b3UgbWVhbnQgc2FuZGJveC5kZWZpbmUoKT9gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVwbGFjZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHJlcGxhY2VtZW50IGFyZ3VtZW50IHRvIGJlIGRlZmluZWRcIik7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgc2lub24gc2FuZGJveFxuICpcbiAqIEBwYXJhbSBvcHRzXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdHMuYXNzZXJ0T3B0aW9uc10gc2VlIHRoZSBDcmVhdGVBc3NlcnRPcHRpb25zIGluIC4vYXNzZXJ0XG4gKiBAY2xhc3NcbiAqL1xuZnVuY3Rpb24gU2FuZGJveChvcHRzID0ge30pIHtcbiAgICBjb25zdCBzYW5kYm94ID0gdGhpcztcbiAgICBjb25zdCBhc3NlcnRPcHRpb25zID0gb3B0cy5hc3NlcnRPcHRpb25zIHx8IHt9O1xuICAgIGxldCBmYWtlUmVzdG9yZXJzID0gW107XG4gICAgbGV0IHByb21pc2VMaWI7XG5cbiAgICBsZXQgY29sbGVjdGlvbiA9IFtdO1xuICAgIGxldCBsb2dnZWRMZWFrV2FybmluZyA9IGZhbHNlO1xuICAgIHNhbmRib3gubGVha1RocmVzaG9sZCA9IERFRkFVTFRfTEVBS19USFJFU0hPTEQ7XG5cbiAgICBmdW5jdGlvbiBhZGRUb0NvbGxlY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHB1c2goY29sbGVjdGlvbiwgb2JqZWN0KSA+IHNhbmRib3gubGVha1RocmVzaG9sZCAmJlxuICAgICAgICAgICAgIWxvZ2dlZExlYWtXYXJuaW5nXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGxvZ2dlci5wcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICAgXCJQb3RlbnRpYWwgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQ7IGJlIHN1cmUgdG8gY2FsbCByZXN0b3JlKCkgdG8gY2xlYW4gdXAgeW91ciBzYW5kYm94LiBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcsIG1vZGlmeSB0aGUgbGVha1RocmVzaG9sZCBwcm9wZXJ0eSBvZiB5b3VyIHNhbmRib3guXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9nZ2VkTGVha1dhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2FuZGJveC5hc3NlcnQgPSBzaW5vbkFzc2VydC5jcmVhdGVBc3NlcnRPYmplY3QoYXNzZXJ0T3B0aW9ucyk7XG5cbiAgICBzYW5kYm94LnNlcnZlclByb3RvdHlwZSA9IGZha2VTZXJ2ZXI7XG5cbiAgICAvLyB0aGlzIGlzIGZvciB0ZXN0aW5nIG9ubHlcbiAgICBzYW5kYm94LmdldEZha2VzID0gZnVuY3Rpb24gZ2V0RmFrZXMoKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH07XG5cbiAgICBzYW5kYm94LmNyZWF0ZVN0dWJJbnN0YW5jZSA9IGZ1bmN0aW9uIGNyZWF0ZVN0dWJJbnN0YW5jZSgpIHtcbiAgICAgICAgY29uc3Qgc3R1YmJlZCA9IHNpbm9uQ3JlYXRlU3R1Ykluc3RhbmNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgY29uc3Qgb3duTWV0aG9kcyA9IGNvbGxlY3RPd25NZXRob2RzKHN0dWJiZWQpO1xuXG4gICAgICAgIGZvckVhY2gob3duTWV0aG9kcywgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgICAgYWRkVG9Db2xsZWN0aW9uKG1ldGhvZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIG93bk1ldGhvZHMpO1xuXG4gICAgICAgIHJldHVybiBzdHViYmVkO1xuICAgIH07XG5cbiAgICBzYW5kYm94LmluamVjdCA9IGZ1bmN0aW9uIGluamVjdChvYmopIHtcbiAgICAgICAgb2JqLnNweSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnNweS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5zdHViID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3guc3R1Yi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5tb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3gubW9jay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5jcmVhdGVTdHViSW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5jcmVhdGVTdHViSW5zdGFuY2UuYXBwbHkoc2FuZGJveCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmouZmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LmZha2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmouZGVmaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3guZGVmaW5lLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqLnJlcGxhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5yZXBsYWNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqLnJlcGxhY2VTZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5yZXBsYWNlU2V0dGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqLnJlcGxhY2VHZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5yZXBsYWNlR2V0dGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNhbmRib3guY2xvY2spIHtcbiAgICAgICAgICAgIG9iai5jbG9jayA9IHNhbmRib3guY2xvY2s7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2FuZGJveC5zZXJ2ZXIpIHtcbiAgICAgICAgICAgIG9iai5zZXJ2ZXIgPSBzYW5kYm94LnNlcnZlcjtcbiAgICAgICAgICAgIG9iai5yZXF1ZXN0cyA9IHNhbmRib3guc2VydmVyLnJlcXVlc3RzO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqLm1hdGNoID0gbWF0Y2g7XG5cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5tb2NrID0gZnVuY3Rpb24gbW9jaygpIHtcbiAgICAgICAgY29uc3QgbSA9IHNpbm9uTW9jay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIGFkZFRvQ29sbGVjdGlvbihtKTtcbiAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkocHJvbWlzZUxpYiwgbSk7XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgYXBwbHlPbkVhY2goY29sbGVjdGlvbiwgXCJyZXNldFwiKTtcbiAgICAgICAgYXBwbHlPbkVhY2goY29sbGVjdGlvbiwgXCJyZXNldEhpc3RvcnlcIik7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzZXRCZWhhdmlvciA9IGZ1bmN0aW9uIHJlc2V0QmVoYXZpb3IoKSB7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwicmVzZXRCZWhhdmlvclwiKTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXNldEhpc3RvcnkgPSBmdW5jdGlvbiByZXNldEhpc3RvcnkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByaXZhdGVSZXNldEhpc3RvcnkoZikge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZi5yZXNldEhpc3RvcnkgfHwgZi5yZXNldDtcbiAgICAgICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICBtZXRob2QuY2FsbChmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvckVhY2goY29sbGVjdGlvbiwgcHJpdmF0ZVJlc2V0SGlzdG9yeSk7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJzYW5kYm94LnJlc3RvcmUoKSBkb2VzIG5vdCB0YWtlIGFueSBwYXJhbWV0ZXJzLiBQZXJoYXBzIHlvdSBtZWFudCBzdHViLnJlc3RvcmUoKVwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldmVyc2UoY29sbGVjdGlvbik7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwicmVzdG9yZVwiKTtcbiAgICAgICAgY29sbGVjdGlvbiA9IFtdO1xuXG4gICAgICAgIGZvckVhY2goZmFrZVJlc3RvcmVycywgZnVuY3Rpb24gKHJlc3RvcmVyKSB7XG4gICAgICAgICAgICByZXN0b3JlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZmFrZVJlc3RvcmVycyA9IFtdO1xuXG4gICAgICAgIHNhbmRib3gucmVzdG9yZUNvbnRleHQoKTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXN0b3JlQ29udGV4dCA9IGZ1bmN0aW9uIHJlc3RvcmVDb250ZXh0KCkge1xuICAgICAgICBpZiAoIXNhbmRib3guaW5qZWN0ZWRLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKHNhbmRib3guaW5qZWN0ZWRLZXlzLCBmdW5jdGlvbiAoaW5qZWN0ZWRLZXkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzYW5kYm94LmluamVjdEludG9baW5qZWN0ZWRLZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICBzYW5kYm94LmluamVjdGVkS2V5cy5sZW5ndGggPSAwO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVzdG9yZXIgZnVuY3Rpb24gZm9yIHRoZSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VBc3NpZ25tZW50XG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSByZXN0b3JlciBmdW5jdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5LCBmb3JjZUFzc2lnbm1lbnQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcmNlQXNzaWdubWVudCAmJiBvYmplY3RbcHJvcGVydHldO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlc3RvcmVyKCkge1xuICAgICAgICAgICAgaWYgKGZvcmNlQXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvcj8uaXNPd24pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdG9yZXIub2JqZWN0ID0gb2JqZWN0O1xuICAgICAgICByZXN0b3Jlci5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICByZXR1cm4gcmVzdG9yZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICBmb3JFYWNoKGZha2VSZXN0b3JlcnMsIGZ1bmN0aW9uIChmYWtlUmVzdG9yZXIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmYWtlUmVzdG9yZXIub2JqZWN0ID09PSBvYmplY3QgJiZcbiAgICAgICAgICAgICAgICBmYWtlUmVzdG9yZXIucHJvcGVydHkgPT09IHByb3BlcnR5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHJlcGxhY2UgJHtwcm9wZXJ0eX0gd2hpY2ggaXMgYWxyZWFkeSByZXBsYWNlZGAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZSBhbiBleGlzdGluZyBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7Kn0gcmVwbGFjZW1lbnQgYSBmYWtlLCBzdHViLCBzcHkgb3IgYW55IG90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgc2FuZGJveC5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShvYmplY3QsIHByb3BlcnR5LCByZXBsYWNlbWVudCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICBjaGVja0ZvclZhbGlkQXJndW1lbnRzKGRlc2NyaXB0b3IsIHByb3BlcnR5LCByZXBsYWNlbWVudCk7XG4gICAgICAgIHRocm93T25BY2Nlc3NvcnMoZGVzY3JpcHRvcik7XG4gICAgICAgIHZlcmlmeVNhbWVUeXBlKG9iamVjdCwgcHJvcGVydHksIHJlcGxhY2VtZW50KTtcblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICBvYmplY3RbcHJvcGVydHldID0gcmVwbGFjZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlcGxhY2UudXNpbmdBY2Nlc3NvciA9IGZ1bmN0aW9uIHJlcGxhY2VVc2luZ0FjY2Vzc29yKFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICApIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgY2hlY2tGb3JWYWxpZEFyZ3VtZW50cyhkZXNjcmlwdG9yLCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB2ZXJpZnlTYW1lVHlwZShvYmplY3QsIHByb3BlcnR5LCByZXBsYWNlbWVudCk7XG5cbiAgICAgICAgdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSBmdW5jdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXBsYWNlZCBwcm9wZXJ0eVxuICAgICAgICBwdXNoKGZha2VSZXN0b3JlcnMsIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5LCB0cnVlKSk7XG5cbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5kZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQ2Fubm90IGRlZmluZSB0aGUgYWxyZWFkeSBleGlzdGluZyBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9LiBQZXJoYXBzIHlvdSBtZWFudCBzYW5kYm94LnJlcGxhY2UoKT9gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCB2YWx1ZSBhcmd1bWVudCB0byBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSBmdW5jdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSBkZWZpbmVkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlcGxhY2VHZXR0ZXIgPSBmdW5jdGlvbiByZXBsYWNlR2V0dGVyKFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICApIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCByZXBsYWNlbWVudCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgb2JqZWN0LnByb3BlcnR5YCBpcyBub3QgYSBnZXR0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgZ2V0OiByZXBsYWNlbWVudCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmplY3QsIHByb3BlcnR5KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlcGxhY2VTZXR0ZXIgPSBmdW5jdGlvbiByZXBsYWNlU2V0dGVyKFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICApIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCByZXBsYWNlbWVudCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgb2JqZWN0LnByb3BlcnR5YCBpcyBub3QgYSBzZXR0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYWNjZXNzb3ItcGFpcnNcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHNldDogcmVwbGFjZW1lbnQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGlzUHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wZXJ0eSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUG9zdEluaXRTZXR1cChhcmdzLCBzcHkpIHtcbiAgICAgICAgY29uc3QgW29iamVjdCwgcHJvcGVydHksIHR5cGVzXSA9IGFyZ3M7XG5cbiAgICAgICAgY29uc3QgaXNTcHlpbmdPbkVudGlyZU9iamVjdCA9XG4gICAgICAgICAgICB0eXBlb2YgcHJvcGVydHkgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIjtcblxuICAgICAgICBpZiAoaXNTcHlpbmdPbkVudGlyZU9iamVjdCkge1xuICAgICAgICAgICAgY29uc3Qgb3duTWV0aG9kcyA9IGNvbGxlY3RPd25NZXRob2RzKHNweSk7XG5cbiAgICAgICAgICAgIGZvckVhY2gob3duTWV0aG9kcywgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihtZXRob2QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIG93bk1ldGhvZHMpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodHlwZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjY2Vzc29yVHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihzcHlbYWNjZXNzb3JUeXBlXSk7XG4gICAgICAgICAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkocHJvbWlzZUxpYiwgc3B5W2FjY2Vzc29yVHlwZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkVG9Db2xsZWN0aW9uKHNweSk7XG4gICAgICAgICAgICB1c2VQcm9taXNlTGlicmFyeShwcm9taXNlTGliLCBzcHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNweTtcbiAgICB9XG5cbiAgICBzYW5kYm94LnNweSA9IGZ1bmN0aW9uIHNweSgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZFNweSA9IHNpbm9uU3B5LmFwcGx5KHNpbm9uU3B5LCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY29tbW9uUG9zdEluaXRTZXR1cChhcmd1bWVudHMsIGNyZWF0ZWRTcHkpO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnN0dWIgPSBmdW5jdGlvbiBzdHViKCkge1xuICAgICAgICBjb25zdCBjcmVhdGVkU3R1YiA9IHNpbm9uU3R1Yi5hcHBseShzaW5vblN0dWIsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjb21tb25Qb3N0SW5pdFNldHVwKGFyZ3VtZW50cywgY3JlYXRlZFN0dWIpO1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBzYW5kYm94LmZha2UgPSBmdW5jdGlvbiBmYWtlKGYpIHtcbiAgICAgICAgY29uc3QgcyA9IHNpbm9uRmFrZS5hcHBseShzaW5vbkZha2UsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgYWRkVG9Db2xsZWN0aW9uKHMpO1xuXG4gICAgICAgIHJldHVybiBzO1xuICAgIH07XG5cbiAgICBmb3JFYWNoKE9iamVjdC5rZXlzKHNpbm9uRmFrZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgY29uc3QgZmFrZUJlaGF2aW9yID0gc2lub25GYWtlW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgZmFrZUJlaGF2aW9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNhbmRib3guZmFrZVtrZXldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBmYWtlQmVoYXZpb3IuYXBwbHkoZmFrZUJlaGF2aW9yLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICAgICAgYWRkVG9Db2xsZWN0aW9uKHMpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBzYW5kYm94LnVzZUZha2VUaW1lcnMgPSBmdW5jdGlvbiB1c2VGYWtlVGltZXJzKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2xvY2sgPSBzaW5vbkNsb2NrLnVzZUZha2VUaW1lcnMuY2FsbChudWxsLCBhcmdzKTtcblxuICAgICAgICBzYW5kYm94LmNsb2NrID0gY2xvY2s7XG4gICAgICAgIGFkZFRvQ29sbGVjdGlvbihjbG9jayk7XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeSgpIHtcbiAgICAgICAgYXBwbHlPbkVhY2goY29sbGVjdGlvbiwgXCJ2ZXJpZnlcIik7XG4gICAgfTtcblxuICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSA9IGZ1bmN0aW9uIHZlcmlmeUFuZFJlc3RvcmUoKSB7XG4gICAgICAgIGxldCBleGNlcHRpb247XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGU7XG4gICAgICAgIH1cblxuICAgICAgICBzYW5kYm94LnJlc3RvcmUoKTtcblxuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgc2FuZGJveC51c2VGYWtlU2VydmVyID0gZnVuY3Rpb24gdXNlRmFrZVNlcnZlcigpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBzYW5kYm94LnNlcnZlclByb3RvdHlwZSB8fCBmYWtlU2VydmVyO1xuXG4gICAgICAgIGlmICghcHJvdG8gfHwgIXByb3RvLmNyZWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzYW5kYm94LnNlcnZlciA9IHByb3RvLmNyZWF0ZSgpO1xuICAgICAgICBhZGRUb0NvbGxlY3Rpb24oc2FuZGJveC5zZXJ2ZXIpO1xuXG4gICAgICAgIHJldHVybiBzYW5kYm94LnNlcnZlcjtcbiAgICB9O1xuXG4gICAgc2FuZGJveC51c2VGYWtlWE1MSHR0cFJlcXVlc3QgPSBmdW5jdGlvbiB1c2VGYWtlWE1MSHR0cFJlcXVlc3QoKSB7XG4gICAgICAgIGNvbnN0IHhociA9IGZha2VYaHIudXNlRmFrZVhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGFkZFRvQ29sbGVjdGlvbih4aHIpO1xuICAgICAgICByZXR1cm4geGhyO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnVzaW5nUHJvbWlzZSA9IGZ1bmN0aW9uIHVzaW5nUHJvbWlzZShwcm9taXNlTGlicmFyeSkge1xuICAgICAgICBwcm9taXNlTGliID0gcHJvbWlzZUxpYnJhcnk7XG4gICAgICAgIGNvbGxlY3Rpb24ucHJvbWlzZUxpYnJhcnkgPSBwcm9taXNlTGlicmFyeTtcblxuICAgICAgICByZXR1cm4gc2FuZGJveDtcbiAgICB9O1xufVxuXG5TYW5kYm94LnByb3RvdHlwZS5tYXRjaCA9IG1hdGNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNhbmRib3g7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBDb2xvcml6ZXIgPSByZXF1aXJlKFwiLi9jb2xvcml6ZXJcIik7XG5jb25zdCBjb2xvcm9yaXplciA9IG5ldyBDb2xvcml6ZXIoKTtcbmNvbnN0IG1hdGNoID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xuY29uc3QgdGltZXNJbldvcmRzID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3RpbWVzLWluLXdvcmRzXCIpO1xuY29uc3QgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5jb25zdCBqc0RpZmYgPSByZXF1aXJlKFwiZGlmZlwiKTtcblxuY29uc3Qgam9pbiA9IGFycmF5UHJvdG8uam9pbjtcbmNvbnN0IG1hcCA9IGFycmF5UHJvdG8ubWFwO1xuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuLyoqXG4gKlxuICogQHBhcmFtIG1hdGNoZXJcbiAqIEBwYXJhbSBjYWxsZWRBcmdcbiAqIEBwYXJhbSBjYWxsZWRBcmdNZXNzYWdlXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGNvbG9yZWQgdGV4dFxuICovXG5mdW5jdGlvbiBjb2xvclNpbm9uTWF0Y2hUZXh0KG1hdGNoZXIsIGNhbGxlZEFyZywgY2FsbGVkQXJnTWVzc2FnZSkge1xuICAgIGxldCBjYWxsZWRBcmd1bWVudE1lc3NhZ2UgPSBjYWxsZWRBcmdNZXNzYWdlO1xuICAgIGxldCBtYXRjaGVyTWVzc2FnZSA9IG1hdGNoZXIubWVzc2FnZTtcbiAgICBpZiAoIW1hdGNoZXIudGVzdChjYWxsZWRBcmcpKSB7XG4gICAgICAgIG1hdGNoZXJNZXNzYWdlID0gY29sb3Jvcml6ZXIucmVkKG1hdGNoZXIubWVzc2FnZSk7XG4gICAgICAgIGlmIChjYWxsZWRBcmd1bWVudE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNhbGxlZEFyZ3VtZW50TWVzc2FnZSA9IGNvbG9yb3JpemVyLmdyZWVuKGNhbGxlZEFyZ3VtZW50TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NhbGxlZEFyZ3VtZW50TWVzc2FnZX0gJHttYXRjaGVyTWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIEBwYXJhbSBkaWZmXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGNvbG9yZWQgZGlmZlxuICovXG5mdW5jdGlvbiBjb2xvckRpZmZUZXh0KGRpZmYpIHtcbiAgICBjb25zdCBvYmplY3RzID0gbWFwKGRpZmYsIGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgIGxldCB0ZXh0ID0gcGFydC52YWx1ZTtcbiAgICAgICAgaWYgKHBhcnQuYWRkZWQpIHtcbiAgICAgICAgICAgIHRleHQgPSBjb2xvcm9yaXplci5ncmVlbih0ZXh0KTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRleHQgPSBjb2xvcm9yaXplci5yZWQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpZmYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IFwiIFwiOyAvLyBmb3JtYXQgc2ltcGxlIGRpZmZzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpvaW4ob2JqZWN0cywgXCJcIik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ30gYSBxdW90ZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHF1b3RlU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYzogZnVuY3Rpb24gKHNweUluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB0aW1lc0luV29yZHMoc3B5SW5zdGFuY2UuY2FsbENvdW50KTtcbiAgICB9LFxuXG4gICAgbjogZnVuY3Rpb24gKHNweUluc3RhbmNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICByZXR1cm4gc3B5SW5zdGFuY2UudG9TdHJpbmcoKTtcbiAgICB9LFxuXG4gICAgRDogZnVuY3Rpb24gKHNweUluc3RhbmNlLCBhcmdzKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJcIjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNweUluc3RhbmNlLmNhbGxDb3VudDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gZGVzY3JpYmUgbXVsdGlwbGUgY2FsbHNcbiAgICAgICAgICAgIGlmIChsID4gMSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcbkNhbGwgJHtpICsgMX06YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbGxlZEFyZ3MgPSBzcHlJbnN0YW5jZS5nZXRDYWxsKGkpLmFyZ3M7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZEFyZ3MgPSBzbGljZShhcmdzKTtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICAgICAgaiA8IGNhbGxlZEFyZ3MubGVuZ3RoIHx8IGogPCBleHBlY3RlZEFyZ3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgICsralxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNhbGxlZEFyZyA9IGNhbGxlZEFyZ3Nbal07XG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkQXJnID0gZXhwZWN0ZWRBcmdzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsZWRBcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnID0gcXVvdGVTdHJpbmdWYWx1ZShjYWxsZWRBcmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZEFyZykge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZyA9IHF1b3RlU3RyaW5nVmFsdWUoZXhwZWN0ZWRBcmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gXCJcXG5cIjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxlZEFyZ01lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBqIDwgY2FsbGVkQXJncy5sZW5ndGggPyBpbnNwZWN0KGNhbGxlZEFyZykgOiBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5pc01hdGNoZXIoZXhwZWN0ZWRBcmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gY29sb3JTaW5vbk1hdGNoVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZEFyZ01lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaiA8IGV4cGVjdGVkQXJncy5sZW5ndGggPyBpbnNwZWN0KGV4cGVjdGVkQXJnKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBqc0RpZmYuZGlmZkpzb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWRBcmdNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBcmdNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGNvbG9yRGlmZlRleHQoZGlmZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSxcblxuICAgIEM6IGZ1bmN0aW9uIChzcHlJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBjYWxscyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gc3B5SW5zdGFuY2UuY2FsbENvdW50OyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgICAgIGxldCBzdHJpbmdpZmllZENhbGwgPSBgICAgICR7c3B5SW5zdGFuY2UuZ2V0Q2FsbChpKS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICBpZiAoL1xcbi8udGVzdChjYWxsc1tpIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5naWZpZWRDYWxsID0gYFxcbiR7c3RyaW5naWZpZWRDYWxsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwdXNoKGNhbGxzLCBzdHJpbmdpZmllZENhbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxzLmxlbmd0aCA+IDAgPyBgXFxuJHtqb2luKGNhbGxzLCBcIlxcblwiKX1gIDogXCJcIjtcbiAgICB9LFxuXG4gICAgdDogZnVuY3Rpb24gKHNweUluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdHMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNweUluc3RhbmNlLmNhbGxDb3VudDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgcHVzaChvYmplY3RzLCBpbnNwZWN0KHNweUluc3RhbmNlLnRoaXNWYWx1ZXNbaV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBqb2luKG9iamVjdHMsIFwiLCBcIik7XG4gICAgfSxcblxuICAgIFwiKlwiOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGpvaW4oXG4gICAgICAgICAgICBtYXAoYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnNwZWN0KGFyZyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgKTtcbiAgICB9LFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGNyZWF0ZVByb3h5ID0gcmVxdWlyZShcIi4vcHJveHlcIik7XG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xuY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xuY29uc3QgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5kZWVwRXF1YWw7XG5jb25zdCBpc0VzTW9kdWxlID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2lzLWVzLW1vZHVsZVwiKTtcbmNvbnN0IHByb3h5Q2FsbFV0aWwgPSByZXF1aXJlKFwiLi9wcm94eS1jYWxsLXV0aWxcIik7XG5jb25zdCB3YWxrT2JqZWN0ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dhbGstb2JqZWN0XCIpO1xuY29uc3Qgd3JhcE1ldGhvZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93cmFwLW1ldGhvZFwiKTtcbmNvbnN0IHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG4vKiBjYWNoZSByZWZlcmVuY2VzIHRvIGxpYnJhcnkgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzbyBjYW4gYmUgc3R1YmJlZCB3aXRob3V0IHByb2JsZW1zICovXG5jb25zdCBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xuY29uc3QgcG9wID0gYXJyYXlQcm90by5wb3A7XG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuY29uc3QgZmlsdGVyID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcjtcblxubGV0IHV1aWQgPSAwO1xuXG5mdW5jdGlvbiBtYXRjaGVzKGZha2UsIGFyZ3MsIHN0cmljdCkge1xuICAgIGNvbnN0IG1hcmdzID0gZmFrZS5tYXRjaGluZ0FyZ3VtZW50cztcbiAgICBpZiAoXG4gICAgICAgIG1hcmdzLmxlbmd0aCA8PSBhcmdzLmxlbmd0aCAmJlxuICAgICAgICBkZWVwRXF1YWwoc2xpY2UoYXJncywgMCwgbWFyZ3MubGVuZ3RoKSwgbWFyZ3MpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAhc3RyaWN0IHx8IG1hcmdzLmxlbmd0aCA9PT0gYXJncy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUHVibGljIEFQSVxuY29uc3Qgc3B5QXBpID0ge1xuICAgIHdpdGhBcmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzbGljZShhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBtYXRjaGluZyA9IHBvcCh0aGlzLm1hdGNoaW5nRmFrZXMoYXJncywgdHJ1ZSkpO1xuICAgICAgICBpZiAobWF0Y2hpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcztcbiAgICAgICAgY29uc3QgZmFrZSA9IHRoaXMuaW5zdGFudGlhdGVGYWtlKCk7XG4gICAgICAgIGZha2UubWF0Y2hpbmdBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICBmYWtlLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIHB1c2godGhpcy5mYWtlcywgZmFrZSk7XG5cbiAgICAgICAgZmFrZS53aXRoQXJncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC53aXRoQXJncy5hcHBseShvcmlnaW5hbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3JFYWNoKG9yaWdpbmFsLmFyZ3MsIGZ1bmN0aW9uIChhcmcsIGkpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmYWtlLCBhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm94eUNhbGxVdGlsLmluY3JlbWVudENhbGxDb3VudChmYWtlKTtcbiAgICAgICAgICAgIHB1c2goZmFrZS50aGlzVmFsdWVzLCBvcmlnaW5hbC50aGlzVmFsdWVzW2ldKTtcbiAgICAgICAgICAgIHB1c2goZmFrZS5hcmdzLCBhcmcpO1xuICAgICAgICAgICAgcHVzaChmYWtlLnJldHVyblZhbHVlcywgb3JpZ2luYWwucmV0dXJuVmFsdWVzW2ldKTtcbiAgICAgICAgICAgIHB1c2goZmFrZS5leGNlcHRpb25zLCBvcmlnaW5hbC5leGNlcHRpb25zW2ldKTtcbiAgICAgICAgICAgIHB1c2goZmFrZS5jYWxsSWRzLCBvcmlnaW5hbC5jYWxsSWRzW2ldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJveHlDYWxsVXRpbC5jcmVhdGVDYWxsUHJvcGVydGllcyhmYWtlKTtcblxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxuXG4gICAgLy8gT3ZlcnJpZGUgcHJveHkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvblxuICAgIG1hdGNoaW5nRmFrZXM6IGZ1bmN0aW9uIChhcmdzLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMuZmFrZXMsIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhmYWtlLCBhcmdzLCBzdHJpY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxufTtcblxuLyogZXNsaW50LWRpc2FibGUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHMgKi9cbmNvbnN0IGRlbGVnYXRlVG9DYWxscyA9IHByb3h5Q2FsbFV0aWwuZGVsZWdhdGVUb0NhbGxzO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJjYWxsQXJnXCIsIGZhbHNlLCBcImNhbGxBcmdXaXRoXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IGNhbGwgYXJnIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuYCxcbiAgICApO1xufSk7XG5zcHlBcGkuY2FsbEFyZ1dpdGggPSBzcHlBcGkuY2FsbEFyZztcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwiY2FsbEFyZ09uXCIsIGZhbHNlLCBcImNhbGxBcmdPbldpdGhcIiwgdHJ1ZSwgZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgY2FsbCBhcmcgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICk7XG59KTtcbnNweUFwaS5jYWxsQXJnT25XaXRoID0gc3B5QXBpLmNhbGxBcmdPbjtcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwidGhyb3dBcmdcIiwgZmFsc2UsIFwidGhyb3dBcmdcIiwgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IHRocm93IGFyZyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgKTtcbn0pO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJ5aWVsZFwiLCBmYWxzZSwgXCJ5aWVsZFwiLCB0cnVlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB5aWVsZCBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgKTtcbn0pO1xuLy8gXCJpbnZva2VDYWxsYmFja1wiIGlzIGFuIGFsaWFzIGZvciBcInlpZWxkXCIgc2luY2UgXCJ5aWVsZFwiIGlzIGludmFsaWQgaW4gc3RyaWN0IG1vZGUuXG5zcHlBcGkuaW52b2tlQ2FsbGJhY2sgPSBzcHlBcGkueWllbGQ7XG5kZWxlZ2F0ZVRvQ2FsbHMoc3B5QXBpLCBcInlpZWxkT25cIiwgZmFsc2UsIFwieWllbGRPblwiLCB0cnVlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB5aWVsZCBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgKTtcbn0pO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJ5aWVsZFRvXCIsIGZhbHNlLCBcInlpZWxkVG9cIiwgdHJ1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICl9JyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgKTtcbn0pO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHNweUFwaSxcbiAgICBcInlpZWxkVG9PblwiLFxuICAgIGZhbHNlLFxuICAgIFwieWllbGRUb09uXCIsXG4gICAgdHJ1ZSxcbiAgICBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgeWllbGQgdG8gJyR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICl9JyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgICAgICk7XG4gICAgfSxcbik7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNweShmdW5jKSB7XG4gICAgbGV0IG5hbWU7XG4gICAgbGV0IGZ1bmsgPSBmdW5jO1xuXG4gICAgaWYgKHR5cGVvZiBmdW5rICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZnVuayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBuYW1lID0gZnVuY3Rpb25OYW1lKGZ1bmspO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkoZnVuaywgZnVuayk7XG5cbiAgICAvLyBJbmhlcml0IHNweSBBUEk6XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHNweUFwaSk7XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUgfHwgXCJzcHlcIixcbiAgICAgICAgZmFrZXM6IFtdLFxuICAgICAgICBpbnN0YW50aWF0ZUZha2U6IGNyZWF0ZVNweSxcbiAgICAgICAgaWQ6IGBzcHkjJHt1dWlkKyt9YCxcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIHNweShvYmplY3QsIHByb3BlcnR5LCB0eXBlcykge1xuICAgIGlmIChpc0VzTW9kdWxlKG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVTIE1vZHVsZXMgY2Fubm90IGJlIHNwaWVkXCIpO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydHkgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVTcHkob2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5ICYmIHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIHdhbGtPYmplY3Qoc3B5LCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmICghb2JqZWN0ICYmICFwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3B5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlcykge1xuICAgICAgICByZXR1cm4gd3JhcE1ldGhvZChvYmplY3QsIHByb3BlcnR5LCBjcmVhdGVTcHkob2JqZWN0W3Byb3BlcnR5XSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7fTtcbiAgICBjb25zdCBtZXRob2REZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgZm9yRWFjaCh0eXBlcywgZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgZGVzY3JpcHRvclt0eXBlXSA9IGNyZWF0ZVNweShtZXRob2REZXNjW3R5cGVdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpO1xufVxuXG5leHRlbmQoc3B5LCBzcHlBcGkpO1xubW9kdWxlLmV4cG9ydHMgPSBzcHk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoXCIuL2JlaGF2aW9yXCIpO1xuY29uc3QgYmVoYXZpb3JzID0gcmVxdWlyZShcIi4vZGVmYXVsdC1iZWhhdmlvcnNcIik7XG5jb25zdCBjcmVhdGVQcm94eSA9IHJlcXVpcmUoXCIuL3Byb3h5XCIpO1xuY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPVxuICAgIHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0Lmhhc093blByb3BlcnR5O1xuY29uc3QgaXNOb25FeGlzdGVudFByb3BlcnR5ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2lzLW5vbi1leGlzdGVudC1wcm9wZXJ0eVwiKTtcbmNvbnN0IHNweSA9IHJlcXVpcmUoXCIuL3NweVwiKTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3JcIik7XG5jb25zdCBpc0VzTW9kdWxlID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2lzLWVzLW1vZHVsZVwiKTtcbmNvbnN0IHNpbm9uVHlwZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9zaW5vbi10eXBlXCIpO1xuY29uc3Qgd3JhcE1ldGhvZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93cmFwLW1ldGhvZFwiKTtcbmNvbnN0IHRocm93T25GYWxzeU9iamVjdCA9IHJlcXVpcmUoXCIuL3Rocm93LW9uLWZhbHN5LW9iamVjdFwiKTtcbmNvbnN0IHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuY29uc3Qgd2Fsa09iamVjdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93YWxrLW9iamVjdFwiKTtcblxuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHBvcCA9IGFycmF5UHJvdG8ucG9wO1xuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuY29uc3Qgc29ydCA9IGFycmF5UHJvdG8uc29ydDtcblxubGV0IHV1aWQgPSAwO1xuXG5mdW5jdGlvbiBjcmVhdGVTdHViKG9yaWdpbmFsRnVuYykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgcHJveHk7XG5cbiAgICBmdW5jdGlvbiBmdW5jdGlvblN0dWIoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzbGljZShhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBtYXRjaGluZ3MgPSBwcm94eS5tYXRjaGluZ0Zha2VzKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IGZuU3R1YiA9XG4gICAgICAgICAgICBwb3AoXG4gICAgICAgICAgICAgICAgc29ydChtYXRjaGluZ3MsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1hdGNoaW5nQXJndW1lbnRzLmxlbmd0aCAtIGIubWF0Y2hpbmdBcmd1bWVudHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApIHx8IHByb3h5O1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudEJlaGF2aW9yKGZuU3R1YikuaW52b2tlKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcHJveHkgPSBjcmVhdGVQcm94eShmdW5jdGlvblN0dWIsIG9yaWdpbmFsRnVuYyB8fCBmdW5jdGlvblN0dWIpO1xuICAgIC8vIEluaGVyaXQgc3B5IEFQSTpcbiAgICBleHRlbmQubm9uRW51bShwcm94eSwgc3B5KTtcbiAgICAvLyBJbmhlcml0IHN0dWIgQVBJOlxuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCBzdHViKTtcblxuICAgIGNvbnN0IG5hbWUgPSBvcmlnaW5hbEZ1bmMgPyBmdW5jdGlvbk5hbWUob3JpZ2luYWxGdW5jKSA6IG51bGw7XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHtcbiAgICAgICAgZmFrZXM6IFtdLFxuICAgICAgICBpbnN0YW50aWF0ZUZha2U6IGNyZWF0ZVN0dWIsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lIHx8IFwic3R1YlwiLFxuICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IG51bGwsXG4gICAgICAgIGJlaGF2aW9yczogW10sXG4gICAgICAgIGlkOiBgc3R1YiMke3V1aWQrK31gLFxuICAgIH0pO1xuXG4gICAgc2lub25UeXBlLnNldChwcm94eSwgXCJzdHViXCIpO1xuXG4gICAgcmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBzdHViKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwic3R1YihvYmosICdtZXRoJywgZm4pIGhhcyBiZWVuIHJlbW92ZWQsIHNlZSBkb2N1bWVudGF0aW9uXCIsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzRXNNb2R1bGUob2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRVMgTW9kdWxlcyBjYW5ub3QgYmUgc3R1YmJlZFwiKTtcbiAgICB9XG5cbiAgICB0aHJvd09uRmFsc3lPYmplY3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcblxuICAgIGlmIChpc05vbkV4aXN0ZW50UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc3R1YiBub24tZXhpc3RlbnQgcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKHByb3BlcnR5KX1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbERlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICBhc3NlcnRWYWxpZFByb3BlcnR5RGVzY3JpcHRvcihhY3R1YWxEZXNjcmlwdG9yLCBwcm9wZXJ0eSk7XG5cbiAgICBjb25zdCBpc09iamVjdE9yRnVuY3Rpb24gPVxuICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBpc1N0dWJiaW5nRW50aXJlT2JqZWN0ID1cbiAgICAgICAgdHlwZW9mIHByb3BlcnR5ID09PSBcInVuZGVmaW5lZFwiICYmIGlzT2JqZWN0T3JGdW5jdGlvbjtcbiAgICBjb25zdCBpc0NyZWF0aW5nTmV3U3R1YiA9ICFvYmplY3QgJiYgdHlwZW9mIHByb3BlcnR5ID09PSBcInVuZGVmaW5lZFwiO1xuICAgIGNvbnN0IGlzU3R1YmJpbmdOb25GdW5jUHJvcGVydHkgPVxuICAgICAgICBpc09iamVjdE9yRnVuY3Rpb24gJiZcbiAgICAgICAgdHlwZW9mIHByb3BlcnR5ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0eXBlb2YgYWN0dWFsRGVzY3JpcHRvciA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGFjdHVhbERlc2NyaXB0b3IudmFsdWUgIT09IFwiZnVuY3Rpb25cIik7XG5cbiAgICBpZiAoaXNTdHViYmluZ0VudGlyZU9iamVjdCkge1xuICAgICAgICByZXR1cm4gd2Fsa09iamVjdChzdHViLCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmIChpc0NyZWF0aW5nTmV3U3R1Yikge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3R1YigpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bmMgPVxuICAgICAgICB0eXBlb2YgYWN0dWFsRGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IGFjdHVhbERlc2NyaXB0b3IudmFsdWVcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzID0gY3JlYXRlU3R1YihmdW5jKTtcblxuICAgIGV4dGVuZC5ub25FbnVtKHMsIHtcbiAgICAgICAgcm9vdE9iajogb2JqZWN0LFxuICAgICAgICBwcm9wTmFtZTogcHJvcGVydHksXG4gICAgICAgIHNoYWRvd3NQcm9wT25Qcm90b3R5cGU6ICFhY3R1YWxEZXNjcmlwdG9yLmlzT3duLFxuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICAgICAgaWYgKGFjdHVhbERlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxEZXNjcmlwdG9yLmlzT3duKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGFjdHVhbERlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXNTdHViYmluZ05vbkZ1bmNQcm9wZXJ0eSA/IHMgOiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIHMpO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BlcnR5RGVzY3JpcHRvcihkZXNjcmlwdG9yLCBwcm9wZXJ0eSkge1xuICAgIGlmICghZGVzY3JpcHRvciB8fCAhcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGVzY3JpcHRvci5pc093biAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBEZXNjcmlwdG9yIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBub24tY29uZmlndXJhYmxlIGFuZCBub24td3JpdGFibGVgLFxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAoKGRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3Iuc2V0KSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBEZXNjcmlwdG9yIGZvciBhY2Nlc3NvciBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBub24tY29uZmlndXJhYmxlYCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0YURlc2NyaXB0b3IoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBEZXNjcmlwdG9yIGZvciBkYXRhIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIG5vbi13cml0YWJsZWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhZGVzY3JpcHRvci52YWx1ZSAmJlxuICAgICAgICAhZGVzY3JpcHRvci53cml0YWJsZSAmJlxuICAgICAgICAhZGVzY3JpcHRvci5zZXQgJiZcbiAgICAgICAgIWRlc2NyaXB0b3IuZ2V0XG4gICAgKTtcbn1cblxuLyplc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5mdW5jdGlvbiBnZXRQYXJlbnRCZWhhdmlvdXIoc3R1Ykluc3RhbmNlKSB7XG4gICAgcmV0dXJuIHN0dWJJbnN0YW5jZS5wYXJlbnQgJiYgZ2V0Q3VycmVudEJlaGF2aW9yKHN0dWJJbnN0YW5jZS5wYXJlbnQpO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QmVoYXZpb3Ioc3R1Ykluc3RhbmNlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgc3R1Ykluc3RhbmNlLmRlZmF1bHRCZWhhdmlvciB8fFxuICAgICAgICBnZXRQYXJlbnRCZWhhdmlvdXIoc3R1Ykluc3RhbmNlKSB8fFxuICAgICAgICBiZWhhdmlvci5jcmVhdGUoc3R1Ykluc3RhbmNlKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRCZWhhdmlvcihzdHViSW5zdGFuY2UpIHtcbiAgICBjb25zdCBjdXJyZW50QmVoYXZpb3IgPSBzdHViSW5zdGFuY2UuYmVoYXZpb3JzW3N0dWJJbnN0YW5jZS5jYWxsQ291bnQgLSAxXTtcbiAgICByZXR1cm4gY3VycmVudEJlaGF2aW9yICYmIGN1cnJlbnRCZWhhdmlvci5pc1ByZXNlbnQoKVxuICAgICAgICA/IGN1cnJlbnRCZWhhdmlvclxuICAgICAgICA6IGdldERlZmF1bHRCZWhhdmlvcihzdHViSW5zdGFuY2UpO1xufVxuLyplc2xpbnQtZW5hYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lKi9cblxuY29uc3QgcHJvdG8gPSB7XG4gICAgcmVzZXRCZWhhdmlvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvciA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVoYXZpb3JzID0gW107XG5cbiAgICAgICAgZGVsZXRlIHRoaXMucmV0dXJuVmFsdWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJldHVybkFyZ0F0O1xuICAgICAgICBkZWxldGUgdGhpcy50aHJvd0FyZ0F0O1xuICAgICAgICBkZWxldGUgdGhpcy5yZXNvbHZlQXJnQXQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZha2VGbjtcbiAgICAgICAgdGhpcy5yZXR1cm5UaGlzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzb2x2ZVRoaXMgPSBmYWxzZTtcblxuICAgICAgICBmb3JFYWNoKHRoaXMuZmFrZXMsIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgICAgICBmYWtlLnJlc2V0QmVoYXZpb3IoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzZXRIaXN0b3J5KCk7XG4gICAgICAgIHRoaXMucmVzZXRCZWhhdmlvcigpO1xuICAgIH0sXG5cbiAgICBvbkNhbGw6IGZ1bmN0aW9uIG9uQ2FsbChpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMuYmVoYXZpb3JzW2luZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5iZWhhdmlvcnNbaW5kZXhdID0gYmVoYXZpb3IuY3JlYXRlKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYmVoYXZpb3JzW2luZGV4XTtcbiAgICB9LFxuXG4gICAgb25GaXJzdENhbGw6IGZ1bmN0aW9uIG9uRmlyc3RDYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbkNhbGwoMCk7XG4gICAgfSxcblxuICAgIG9uU2Vjb25kQ2FsbDogZnVuY3Rpb24gb25TZWNvbmRDYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbkNhbGwoMSk7XG4gICAgfSxcblxuICAgIG9uVGhpcmRDYWxsOiBmdW5jdGlvbiBvblRoaXJkQ2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25DYWxsKDIpO1xuICAgIH0sXG5cbiAgICB3aXRoQXJnczogZnVuY3Rpb24gd2l0aEFyZ3MoKSB7XG4gICAgICAgIGNvbnN0IGZha2UgPSBzcHkud2l0aEFyZ3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEJlaGF2aW9yICYmIHRoaXMuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgICAgICBmYWtlLmRlZmF1bHRCZWhhdmlvciA9XG4gICAgICAgICAgICAgICAgZmFrZS5kZWZhdWx0QmVoYXZpb3IgfHwgYmVoYXZpb3IuY3JlYXRlKGZha2UpO1xuICAgICAgICAgICAgZmFrZS5kZWZhdWx0QmVoYXZpb3IucHJvbWlzZUxpYnJhcnkgPVxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG59O1xuXG5mb3JFYWNoKE9iamVjdC5rZXlzKGJlaGF2aW9yKSwgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIGlmIChcbiAgICAgICAgaGFzT3duUHJvcGVydHkoYmVoYXZpb3IsIG1ldGhvZCkgJiZcbiAgICAgICAgIWhhc093blByb3BlcnR5KHByb3RvLCBtZXRob2QpICYmXG4gICAgICAgIG1ldGhvZCAhPT0gXCJjcmVhdGVcIiAmJlxuICAgICAgICBtZXRob2QgIT09IFwiaW52b2tlXCJcbiAgICApIHtcbiAgICAgICAgcHJvdG9bbWV0aG9kXSA9IGJlaGF2aW9yLmNyZWF0ZUJlaGF2aW9yKG1ldGhvZCk7XG4gICAgfVxufSk7XG5cbmZvckVhY2goT2JqZWN0LmtleXMoYmVoYXZpb3JzKSwgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiZWhhdmlvcnMsIG1ldGhvZCkgJiYgIWhhc093blByb3BlcnR5KHByb3RvLCBtZXRob2QpKSB7XG4gICAgICAgIGJlaGF2aW9yLmFkZEJlaGF2aW9yKHN0dWIsIG1ldGhvZCwgYmVoYXZpb3JzW21ldGhvZF0pO1xuICAgIH1cbn0pO1xuXG5leHRlbmQoc3R1YiwgcHJvdG8pO1xubW9kdWxlLmV4cG9ydHMgPSBzdHViO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxuZnVuY3Rpb24gdGhyb3dPbkZhbHN5T2JqZWN0KG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAocHJvcGVydHkgJiYgIW9iamVjdCkge1xuICAgICAgICBjb25zdCB0eXBlID0gb2JqZWN0ID09PSBudWxsID8gXCJudWxsXCIgOiBcInVuZGVmaW5lZFwiO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVHJ5aW5nIHRvIHN0dWIgcHJvcGVydHkgJyR7dmFsdWVUb1N0cmluZyhwcm9wZXJ0eSl9JyBvZiAke3R5cGV9YCxcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGhyb3dPbkZhbHN5T2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgcmVkdWNlID0gYXJyYXlQcm90by5yZWR1Y2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXhwb3J0QXN5bmNCZWhhdmlvcnMoYmVoYXZpb3JNZXRob2RzKSB7XG4gICAgcmV0dXJuIHJlZHVjZShcbiAgICAgICAgT2JqZWN0LmtleXMoYmVoYXZpb3JNZXRob2RzKSxcbiAgICAgICAgZnVuY3Rpb24gKGFjYywgbWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGF2b2lkIGNyZWF0aW5nIGFub3RoZXIgYXN5bmMgdmVyc2lvbnMgb2YgdGhlIG5ld2x5IGFkZGVkIGFzeW5jIG1ldGhvZHNcbiAgICAgICAgICAgIGlmIChtZXRob2QubWF0Y2goL14oY2FsbHNBcmd8eWllbGRzKS8pICYmICFtZXRob2QubWF0Y2goL0FzeW5jLykpIHtcbiAgICAgICAgICAgICAgICBhY2NbYCR7bWV0aG9kfUFzeW5jYF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJlaGF2aW9yTWV0aG9kc1ttZXRob2RdLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge30sXG4gICAgKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9XG4gICAgcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaGFzT3duUHJvcGVydHk7XG5cbmNvbnN0IGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9FQ01BU2NyaXB0X0RvbnRFbnVtX2F0dHJpYnV0ZSNKU2NyaXB0X0RvbnRFbnVtX0J1Z1xuY29uc3QgaGFzRG9udEVudW1CdWcgPSAoZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjBcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjFcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMlwiO1xuICAgICAgICB9LFxuICAgICAgICB0b0xvY2FsZVN0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiM1wiO1xuICAgICAgICB9LFxuICAgICAgICBwcm90b3R5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgaXNQcm90b3R5cGVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiNVwiO1xuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiNlwiO1xuICAgICAgICB9LFxuICAgICAgICBoYXNPd25Qcm9wZXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiN1wiO1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjhcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdW5pcXVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCI5XCI7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkpIHtcbiAgICAgICAgICAgIHB1c2gocmVzdWx0LCBvYmpbcHJvcF0oKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpvaW4ocmVzdWx0LCBcIlwiKSAhPT0gXCIwMTIzNDU2Nzg5XCI7XG59KSgpO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gc291cmNlc1xuICogQHBhcmFtIGRvQ29weVxuICogQHJldHVybnMgeyp9IHRhcmdldFxuICovXG5mdW5jdGlvbiBleHRlbmRDb21tb24odGFyZ2V0LCBzb3VyY2VzLCBkb0NvcHkpIHtcbiAgICBsZXQgc291cmNlLCBpLCBwcm9wO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc291cmNlID0gc291cmNlc1tpXTtcblxuICAgICAgICBmb3IgKHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGRvQ29weSh0YXJnZXQsIHNvdXJjZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY29weSAob3duKSB0b1N0cmluZyBtZXRob2QgZXZlbiB3aGVuIGluIEpTY3JpcHQgd2l0aCBEb250RW51bSBidWdcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRUNNQVNjcmlwdF9Eb250RW51bV9hdHRyaWJ1dGUjSlNjcmlwdF9Eb250RW51bV9CdWdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaGFzRG9udEVudW1CdWcgJiZcbiAgICAgICAgICAgIGhhc093blByb3BlcnR5KHNvdXJjZSwgXCJ0b1N0cmluZ1wiKSAmJlxuICAgICAgICAgICAgc291cmNlLnRvU3RyaW5nICE9PSB0YXJnZXQudG9TdHJpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXQudG9TdHJpbmcgPSBzb3VyY2UudG9TdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIFB1YmxpYzogRXh0ZW5kIHRhcmdldCBpbiBwbGFjZSB3aXRoIGFsbCAob3duKSBwcm9wZXJ0aWVzLCBleGNlcHQgJ25hbWUnIHdoZW4gW1t3cml0YWJsZV1dIGlzIGZhbHNlLFxuICogICAgICAgICBmcm9tIHNvdXJjZXMgaW4tb3JkZXIuIFRodXMsIGxhc3Qgc291cmNlIHdpbGwgb3ZlcnJpZGUgcHJvcGVydGllcyBpbiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgLSBUaGUgT2JqZWN0IHRvIGV4dGVuZFxuICogQHBhcmFtIHtvYmplY3RbXX0gc291cmNlcyAtIE9iamVjdHMgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgZXh0ZW5kZWQgdGFyZ2V0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBleHRlbmRDb21tb24oXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgZnVuY3Rpb24gY29weVZhbHVlKGRlc3QsIHNvdXJjZSwgcHJvcCkge1xuICAgICAgICAgICAgY29uc3QgZGVzdE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgZGVzdCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJuYW1lXCIgJiYgIWRlc3RPd25Qcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogc291cmNlT3duUHJvcGVydHlEZXNjcmlwdG9yLmVudW1lcmFibGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBpZiB0aGUgc291cmNlIGhhcyBhbiBBY2Nlc3NvciBwcm9wZXJ0eSBjb3B5IG92ZXIgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyAoZ2V0IGFuZCBzZXQpXG4gICAgICAgICAgICAgICAgZGF0YSBwcm9wZXJ0aWVzIGhhcyB3cml0YWJsZSBhdHRyaWJ1dGUgd2hlcmUgYXMgYWNjZXNzb3IgcHJvcGVydHkgZG9uJ3RcbiAgICAgICAgICAgICAgICBSRUY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvRGF0YV9zdHJ1Y3R1cmVzI3Byb3BlcnRpZXNcbiAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwid3JpdGFibGVcIikpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy53cml0YWJsZSA9IHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy52YWx1ZSA9IHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMuZ2V0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5nZXQuYmluZChkZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMuc2V0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5zZXQuYmluZChkZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdCwgcHJvcCwgZGVzY3JpcHRvcnMpO1xuICAgICAgICB9LFxuICAgICk7XG59O1xuXG4vKipcbiAqIFB1YmxpYzogRXh0ZW5kIHRhcmdldCBpbiBwbGFjZSB3aXRoIGFsbCAob3duKSBwcm9wZXJ0aWVzIGZyb20gc291cmNlcyBpbi1vcmRlci4gVGh1cywgbGFzdCBzb3VyY2Ugd2lsbFxuICogICAgICAgICBvdmVycmlkZSBwcm9wZXJ0aWVzIGluIHByZXZpb3VzIHNvdXJjZXMuIERlZmluZSB0aGUgcHJvcGVydGllcyBhcyBub24gZW51bWVyYWJsZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIE9iamVjdCB0byBleHRlbmRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNvdXJjZXMgLSBPYmplY3RzIHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMge29iamVjdH0gdGhlIGV4dGVuZGVkIHRhcmdldFxuICovXG5tb2R1bGUuZXhwb3J0cy5ub25FbnVtID0gZnVuY3Rpb24gZXh0ZW5kTm9uRW51bSh0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gZXh0ZW5kQ29tbW9uKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0eShkZXN0LCBzb3VyY2UsIHByb3ApIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZXN0LCBwcm9wLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZVtwcm9wXSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICApO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIGxldCBpLCBwcm9wLCB0aGlzVmFsdWU7XG4gICAgaWYgKHRoaXMuZ2V0Q2FsbCAmJiB0aGlzLmNhbGxDb3VudCkge1xuICAgICAgICBpID0gdGhpcy5jYWxsQ291bnQ7XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdGhpc1ZhbHVlID0gdGhpcy5nZXRDYWxsKGkpLnRoaXNWYWx1ZTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgICAgICAgICAgZm9yIChwcm9wIGluIHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzVmFsdWVbcHJvcF0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBuby1vcCAtIGFjY2Vzc2luZyBwcm9wcyBjYW4gdGhyb3cgYW4gZXJyb3IsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlOYW1lIHx8IFwic2lub24gZmFrZVwiO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCA6IG5vdCB0ZXN0aW5nIHRoYXQgc2V0VGltZW91dCB3b3JrcyAqL1xuZnVuY3Rpb24gbmV4dFRpY2soY2FsbGJhY2spIHtcbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXROZXh0VGljayhwcm9jZXNzLCBzZXRJbW1lZGlhdGUpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUaWNrO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFByb3BlcnR5RGVzY3JpcHRvclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZGVmaW5lUHJvcGVydHkjZGVzY3JpcHRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29uZmlndXJhYmxlIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVudW1lcmFibGUgICBkZWZhdWx0cyB0byBmYWxzZVxuICogQHByb3BlcnR5IHtib29sZWFufSB3cml0YWJsZSAgICAgZGVmYXVsdHMgdG8gZmFsc2VcbiAqIEBwcm9wZXJ0eSB7Kn0gdmFsdWUgZGVmYXVsdHMgdG8gdW5kZWZpbmVkXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBnZXQgZGVmYXVsdHMgdG8gdW5kZWZpbmVkXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBzZXQgZGVmYXVsdHMgdG8gdW5kZWZpbmVkXG4gKi9cblxuLypcbiAqIFRoZSBmb2xsb3dpbmcgdHlwZSBkZWYgaXMgc3RyaWN0bHkgc3BlYWtpbmcgaWxsZWdhbCBpbiBKU0RvYywgYnV0IHRoZSBleHByZXNzaW9uIGZvcm1zIGFcbiAqIGxlZ2FsIFR5cGVzY3JpcHQgdW5pb24gdHlwZSBhbmQgaXMgdW5kZXJzdG9vZCBieSBWaXN1YWwgU3R1ZGlvIGFuZCB0aGUgSW50ZWxsaUpcbiAqIGZhbWlseSBvZiBlZGl0b3JzLiBUaGUgXCJUU1wiIGZsYXZvciBvZiBKU0RvYyBpcyBiZWNvbWluZyB0aGUgZGUtZmFjdG8gc3RhbmRhcmQgdGhlc2VcbiAqIGRheXMgZm9yIHRoYXQgcmVhc29uIChhbmQgdGhlIGZhY3QgdGhhdCBKU0RvYyBpcyBlc3NlbnRpYWxseSB1bm1haW50YWluZWQpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7e2lzT3duOiBib29sZWFufSAmIFByb3BlcnR5RGVzY3JpcHRvcn0gU2lub25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAqIGEgc2xpZ2h0bHkgZW5yaWNoZWQgcHJvcGVydHkgZGVzY3JpcHRvclxuICogQHByb3BlcnR5IHtib29sZWFufSBpc093biB0cnVlIGlmIHRoZSBkZXNjcmlwdG9yIGlzIG93bmVkIGJ5IHRoaXMgb2JqZWN0LCBmYWxzZSBpZiBpdCBjb21lcyBmcm9tIHRoZSBwcm90b3R5cGVcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBzbGlnaHRseSBtb2RpZmllZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRoYXQgb25lIGNhbiB0ZWxsIGlzIGZyb20gdGhlIG9iamVjdCBvciB0aGUgcHJvdG90eXBlXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1Npbm9uUHJvcGVydHlEZXNjcmlwdG9yfVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIGxldCBwcm90byA9IG9iamVjdDtcbiAgICBsZXQgZGVzY3JpcHRvcjtcbiAgICBjb25zdCBpc093biA9IEJvb2xlYW4oXG4gICAgICAgIG9iamVjdCAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpLFxuICAgICk7XG5cbiAgICB3aGlsZSAoXG4gICAgICAgIHByb3RvICYmXG4gICAgICAgICEoZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3BlcnR5KSlcbiAgICApIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuaXNPd24gPSBpc093bjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBWZXJpZnkgaWYgYW4gb2JqZWN0IGlzIGEgRUNNQVNjcmlwdCBNb2R1bGVcbiAqXG4gKiBBcyB0aGUgZXhwb3J0cyBmcm9tIGEgbW9kdWxlIGlzIGltbXV0YWJsZSB3ZSBjYW5ub3QgYWx0ZXIgdGhlIGV4cG9ydHNcbiAqIHVzaW5nIHNwaWVzIG9yIHN0dWJzLiBMZXQgdGhlIGNvbnN1bWVyIGtub3cgdGhpcyB0byBhdm9pZCBidWcgcmVwb3J0c1xuICogb24gd2VpcmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHdoZW4gdGhlIG9iamVjdCBpcyBhIG1vZHVsZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBvYmplY3QgJiZcbiAgICAgICAgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gXCJNb2R1bGVcIiAmJlxuICAgICAgICBPYmplY3QuaXNTZWFsZWQob2JqZWN0KVxuICAgICk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgYSBwcm9wIGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGNoYWluXG4gKi9cbmZ1bmN0aW9uIGlzTm9uRXhpc3RlbnRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAgIG9iamVjdCAmJiB0eXBlb2YgcHJvcGVydHkgIT09IFwidW5kZWZpbmVkXCIgJiYgIShwcm9wZXJ0eSBpbiBvYmplY3QpLFxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOb25FeGlzdGVudFByb3BlcnR5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGdldFByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuXG5mdW5jdGlvbiBpc1Byb3BlcnR5Q29uZmlndXJhYmxlKG9iaiwgcHJvcE5hbWUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wTmFtZSk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yID8gcHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA6IHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBpc1Jlc3RvcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiBvYmoucmVzdG9yZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIG9iai5yZXN0b3JlLnNpbm9uXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Jlc3RvcmFibGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xuY29uc3QgZ2V0TmV4dFRpY2sgPSByZXF1aXJlKFwiLi9nZXQtbmV4dC10aWNrXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5leHRUaWNrKGdsb2JhbE9iamVjdC5wcm9jZXNzLCBnbG9iYWxPYmplY3Quc2V0SW1tZWRpYXRlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBzaW5vblR5cGVTeW1ib2xQcm9wZXJ0eSA9IFN5bWJvbChcIlNpbm9uVHlwZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB0eXBlIG9mIGEgU2lub24gb2JqZWN0IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaWRlbnRpZnkgaXQgbGF0ZXIgYXQgcnVudGltZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG9iamVjdCAgb2JqZWN0L2Z1bmN0aW9uIHRvIHNldCB0aGUgdHlwZSBvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBuYW1lZCB0eXBlIG9mIHRoZSBvYmplY3QvZnVuY3Rpb25cbiAgICAgKi9cbiAgICBzZXQob2JqZWN0LCB0eXBlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHNpbm9uVHlwZVN5bWJvbFByb3BlcnR5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXQob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0W3Npbm9uVHlwZVN5bWJvbFByb3BlcnR5XTtcbiAgICB9LFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheSA9IFtudWxsLCBcIm9uY2VcIiwgXCJ0d2ljZVwiLCBcInRocmljZVwiXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0aW1lc0luV29yZHMoY291bnQpIHtcbiAgICByZXR1cm4gYXJyYXlbY291bnRdIHx8IGAke2NvdW50IHx8IDB9IHRpbWVzYDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG5mdW5jdGlvbiB1c2VQcm9taXNlTGlicmFyeShsaWJyYXJ5LCBmYWtlcykge1xuICAgIGlmICh0eXBlb2YgbGlicmFyeSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmFrZXMpKSB7XG4gICAgICAgIGZvckVhY2guY2FsbChmYWtlcywgdXNlUHJvbWlzZUxpYnJhcnkuYmluZChudWxsLCBsaWJyYXJ5KSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFrZXMudXNpbmdQcm9taXNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZmFrZXMudXNpbmdQcm9taXNlKGxpYnJhcnkpO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VQcm9taXNlTGlicmFyeTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG5cbmNvbnN0IGdldFByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuY29uc3Qgd2FsayA9IHJlcXVpcmUoXCIuL3dhbGtcIik7XG5cbi8qKlxuICogQSB1dGlsaXR5IHRoYXQgYWxsb3dzIHRyYXZlcnNpbmcgYW4gb2JqZWN0LCBhcHBseWluZyBtdXRhdGluZyBmdW5jdGlvbnMgb24gdGhlIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtdXRhdG9yIGNhbGxlZCBvbiBlYWNoIHByb3BlcnR5XG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IHRoZSBvYmplY3Qgd2UgYXJlIHdhbGtpbmcgb3ZlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyIGEgcHJlZGljYXRlIChib29sZWFuIGZ1bmN0aW9uKSB0aGF0IHdpbGwgZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGFwcGx5IHRoZSBtdXRhdG9yIHRvIHRoZSBjdXJyZW50IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7dm9pZH0gbm90aGluZ1xuICovXG5mdW5jdGlvbiB3YWxrT2JqZWN0KG11dGF0b3IsIG9iamVjdCwgZmlsdGVyKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG5hbWUgPSBmdW5jdGlvbk5hbWUobXV0YXRvcik7XG5cbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVHJ5aW5nIHRvICR7bmFtZX0gb2JqZWN0IGJ1dCByZWNlaXZlZCAke1N0cmluZyhvYmplY3QpfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgd2FsayhvYmplY3QsIGZ1bmN0aW9uIChwcm9wLCBwcm9wT3duZXIpIHtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBzdHViIHRoaW5ncyBsaWtlIHRvU3RyaW5nKCksIHZhbHVlT2YoKSwgZXRjLiBzbyB3ZSBvbmx5IHN0dWIgaWYgdGhlIG9iamVjdFxuICAgICAgICAvLyBpcyBub3QgT2JqZWN0LnByb3RvdHlwZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wT3duZXIgIT09IE9iamVjdC5wcm90b3R5cGUgJiZcbiAgICAgICAgICAgIHByb3AgIT09IFwiY29uc3RydWN0b3JcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIGdldFByb3BlcnR5RGVzY3JpcHRvcihwcm9wT3duZXIsIHByb3ApLnZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcihvYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG11dGF0b3Iob2JqZWN0LCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbXV0YXRvcihvYmplY3QsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRm91bmQgbm8gbWV0aG9kcyBvbiBvYmplY3QgdG8gd2hpY2ggd2UgY291bGQgYXBwbHkgbXV0YXRpb25zYCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhbGtPYmplY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuZm9yRWFjaDtcblxuZnVuY3Rpb24gd2Fsa0ludGVybmFsKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQsIG9yaWdpbmFsT2JqLCBzZWVuKSB7XG4gICAgbGV0IHByb3A7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gZW51bWVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwcm90b3R5cGUncyBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSwgdGhlcmVmb3JlIHdlIGRlbGliZXJhdGVseSBsZWF2ZSBvdXQgYW4gb3duIHByb3BlcnR5IGNoZWNrLlxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluICovXG4gICAgICAgIGZvciAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW3Byb3BdLCBwcm9wLCBvYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2goT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSwgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKHNlZW5ba10gIT09IHRydWUpIHtcbiAgICAgICAgICAgIHNlZW5ba10gPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGspLmdldCA9PT1cbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbE9ialxuICAgICAgICAgICAgICAgICAgICA6IG9iajtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgaywgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3RvKSB7XG4gICAgICAgIHdhbGtJbnRlcm5hbChwcm90bywgaXRlcmF0b3IsIGNvbnRleHQsIG9yaWdpbmFsT2JqLCBzZWVuKTtcbiAgICB9XG59XG5cbi8qIFdhbGtzIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgYW4gb2JqZWN0IGFuZCBpdGVyYXRlcyBvdmVyIGV2ZXJ5IG93biBwcm9wZXJ0eVxuICogbmFtZSBlbmNvdW50ZXJlZC4gVGhlIGl0ZXJhdG9yIGlzIGNhbGxlZCBpbiB0aGUgc2FtZSBmYXNoaW9uIHRoYXQgQXJyYXkucHJvdG90eXBlLmZvckVhY2hcbiAqIHdvcmtzLCB3aGVyZSBpdCBpcyBwYXNzZWQgdGhlIHZhbHVlLCBrZXksIGFuZCBvd24gb2JqZWN0IGFzIHRoZSAxc3QsIDJuZCwgYW5kIDNyZCBwb3NpdGlvbmFsXG4gKiBhcmd1bWVudCwgcmVzcGVjdGl2ZWx5LiBJbiBjYXNlcyB3aGVyZSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyBpcyBub3QgYXZhaWxhYmxlLCB3YWxrIHdpbGxcbiAqIGRlZmF1bHQgdG8gdXNpbmcgYSBzaW1wbGUgZm9yLi5pbiBsb29wLlxuICpcbiAqIG9iaiAtIFRoZSBvYmplY3QgdG8gd2FsayB0aGUgcHJvdG90eXBlIGNoYWluIGZvci5cbiAqIGl0ZXJhdG9yIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBlYWNoIHBhc3Mgb2YgdGhlIHdhbGsuXG4gKiBjb250ZXh0IC0gKE9wdGlvbmFsKSBXaGVuIGdpdmVuLCB0aGUgaXRlcmF0b3Igd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIG9iamVjdCBhcyB0aGUgcmVjZWl2ZXIuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2FsayhvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHdhbGtJbnRlcm5hbChvYmosIGl0ZXJhdG9yLCBjb250ZXh0LCBvYmosIHt9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5jb25zdCBub29wID0gKCkgPT4ge307XG5jb25zdCBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL2V4dGVuZFwiKTtcbmNvbnN0IHNpbm9uVHlwZSA9IHJlcXVpcmUoXCIuL3Npbm9uLXR5cGVcIik7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9XG4gICAgcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaGFzT3duUHJvcGVydHk7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbmNvbnN0IHB1c2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LnB1c2g7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgIEJvb2xlYW4ob2JqICYmIG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY2FsbCAmJiBvYmouYXBwbHkpXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gbWlycm9yUHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh0YXJnZXQsIHByb3ApKSB7XG4gICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc29yKG9iamVjdCwgcHJvcGVydHksIG1ldGhvZCkge1xuICAgIGNvbnN0IGFjY2Vzc29ycyA9IFtcImdldFwiLCBcInNldFwiXTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGVzY3JpcHRvclthY2Nlc3NvcnNbaV1dICYmXG4gICAgICAgICAgICBkZXNjcmlwdG9yW2FjY2Vzc29yc1tpXV0ubmFtZSA9PT0gbWV0aG9kLm5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzb3JzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyBDaGVhcCB3YXkgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgRVM1IHN1cHBvcnQuXG5jb25zdCBoYXNFUzVTdXBwb3J0ID0gXCJrZXlzXCIgaW4gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdyYXBNZXRob2Qob2JqZWN0LCBwcm9wZXJ0eSwgbWV0aG9kKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNob3VsZCB3cmFwIHByb3BlcnR5IG9mIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBtZXRob2QgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwiTWV0aG9kIHdyYXBwZXIgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXcmFwcGVkTWV0aG9kKHdyYXBwZWRNZXRob2QpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuXG4gICAgICAgIGlmICghaXNGdW5jdGlvbih3cmFwcGVkTWV0aG9kKSkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gd3JhcCAke3R5cGVvZiB3cmFwcGVkTWV0aG9kfSBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9IGFzIGZ1bmN0aW9uYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAod3JhcHBlZE1ldGhvZC5yZXN0b3JlICYmIHdyYXBwZWRNZXRob2QucmVzdG9yZS5zaW5vbikge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gd3JhcCAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9IHdoaWNoIGlzIGFscmVhZHkgd3JhcHBlZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHdyYXBwZWRNZXRob2QuY2FsbGVkQmVmb3JlKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gd3JhcHBlZE1ldGhvZC5yZXR1cm5zID8gXCJzdHViYmVkXCIgOiBcInNwaWVkIG9uXCI7XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byB3cmFwICR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgKX0gd2hpY2ggaXMgYWxyZWFkeSAke3ZlcmJ9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh3cmFwcGVkTWV0aG9kICYmIHdyYXBwZWRNZXRob2Quc3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbi0tLS0tLS0tLS0tLS0tXFxuJHt3cmFwcGVkTWV0aG9kLnN0YWNrVHJhY2VFcnJvci5zdGFja31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3IsIHdyYXBwZWRNZXRob2QsIGksIHdyYXBwZWRNZXRob2REZXNjLCB0YXJnZXQsIGFjY2Vzc29yO1xuXG4gICAgY29uc3Qgd3JhcHBlZE1ldGhvZHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHNpbXBsZVByb3BlcnR5QXNzaWdubWVudCgpIHtcbiAgICAgICAgd3JhcHBlZE1ldGhvZCA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgIGNoZWNrV3JhcHBlZE1ldGhvZCh3cmFwcGVkTWV0aG9kKTtcbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IG1ldGhvZDtcbiAgICAgICAgbWV0aG9kLmRpc3BsYXlOYW1lID0gcHJvcGVydHk7XG4gICAgfVxuXG4gICAgLy8gRmlyZWZveCBoYXMgYSBwcm9ibGVtIHdoZW4gdXNpbmcgaGFzT3duLmNhbGwgb24gb2JqZWN0cyBmcm9tIG90aGVyIGZyYW1lcy5cbiAgICBjb25zdCBvd25lZCA9IG9iamVjdC5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICA/IG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICA6IGhhc093blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kRGVzYyA9XG4gICAgICAgICAgICB0eXBlb2YgbWV0aG9kID09PSBcImZ1bmN0aW9uXCIgPyB7IHZhbHVlOiBtZXRob2QgfSA6IG1ldGhvZDtcbiAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKCF3cmFwcGVkTWV0aG9kRGVzYykge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gd3JhcCAke3R5cGVvZiB3cmFwcGVkTWV0aG9kfSBwcm9wZXJ0eSAke3Byb3BlcnR5fSBhcyBmdW5jdGlvbmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MucmVzdG9yZSAmJlxuICAgICAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MucmVzdG9yZS5zaW5vblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHtwcm9wZXJ0eX0gd2hpY2ggaXMgYWxyZWFkeSB3cmFwcGVkYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAod3JhcHBlZE1ldGhvZERlc2MgJiYgd3JhcHBlZE1ldGhvZERlc2Muc3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbi0tLS0tLS0tLS0tLS0tXFxuJHt3cmFwcGVkTWV0aG9kRGVzYy5zdGFja1RyYWNlRXJyb3Iuc3RhY2t9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZXMgPSBPYmplY3Qua2V5cyhtZXRob2REZXNjKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB3cmFwcGVkTWV0aG9kID0gd3JhcHBlZE1ldGhvZERlc2NbdHlwZXNbaV1dO1xuICAgICAgICAgICAgY2hlY2tXcmFwcGVkTWV0aG9kKHdyYXBwZWRNZXRob2QpO1xuICAgICAgICAgICAgcHVzaCh3cmFwcGVkTWV0aG9kcywgd3JhcHBlZE1ldGhvZCk7XG4gICAgICAgIH1cblxuICAgICAgICBtaXJyb3JQcm9wZXJ0aWVzKG1ldGhvZERlc2MsIHdyYXBwZWRNZXRob2REZXNjKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtaXJyb3JQcm9wZXJ0aWVzKG1ldGhvZERlc2NbdHlwZXNbaV1dLCB3cmFwcGVkTWV0aG9kRGVzY1t0eXBlc1tpXV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8geW91IGFyZSBub3QgYWxsb3dlZCB0byBmbGlwIHRoZSBjb25maWd1cmFibGUgcHJvcCBvbiBhblxuICAgICAgICAvLyBleGlzdGluZyBkZXNjcmlwdG9yIHRvIGFueXRoaW5nIGJ1dCBmYWxzZSAoIzI1MTQpXG4gICAgICAgIGlmICghb3duZWQpIHtcbiAgICAgICAgICAgIG1ldGhvZERlc2MuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBtZXRob2REZXNjKTtcblxuICAgICAgICAvLyBjYXRjaCBmYWlsaW5nIGFzc2lnbm1lbnRcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY29udmVyc2Ugb2YgdGhlIGNoZWNrIGluIGAucmVzdG9yZWAgYmVsb3dcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RbcHJvcGVydHldICE9PSBtZXRob2QpIHtcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgYW55IHdyb25nZG9pbmdzIGNhdXNlZCBieSB0aGUgZGVmaW5lUHJvcGVydHkgY2FsbCBhYm92ZSxcbiAgICAgICAgICAgIC8vIHN1Y2ggYXMgYWRkaW5nIG5ldyBpdGVtcyAoaWYgb2JqZWN0IHdhcyBhIFN0b3JhZ2Ugb2JqZWN0KVxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgICBzaW1wbGVQcm9wZXJ0eUFzc2lnbm1lbnQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpbXBsZVByb3BlcnR5QXNzaWdubWVudCgpO1xuICAgIH1cblxuICAgIGV4dGVuZE9iamVjdFdpdGhXcmFwcGVkTWV0aG9kcygpO1xuXG4gICAgZnVuY3Rpb24gZXh0ZW5kT2JqZWN0V2l0aFdyYXBwZWRNZXRob2RzKCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd3JhcHBlZE1ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFjY2Vzc29yID0gZ2V0QWNjZXNzb3Iob2JqZWN0LCBwcm9wZXJ0eSwgd3JhcHBlZE1ldGhvZHNbaV0pO1xuICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IgPyBtZXRob2RbYWNjZXNzb3JdIDogbWV0aG9kO1xuICAgICAgICAgICAgZXh0ZW5kLm5vbkVudW0odGFyZ2V0LCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHByb3BlcnR5LFxuICAgICAgICAgICAgICAgIHdyYXBwZWRNZXRob2Q6IHdyYXBwZWRNZXRob2RzW2ldLFxuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHVwIGFuIEVycm9yIG9iamVjdCBmb3IgYSBzdGFjayB0cmFjZSB3aGljaCBjYW4gYmUgdXNlZCBsYXRlciB0byBmaW5kIHdoYXQgbGluZSBvZlxuICAgICAgICAgICAgICAgIC8vIGNvZGUgdGhlIG9yaWdpbmFsIG1ldGhvZCB3YXMgY3JlYXRlZCBvbi5cbiAgICAgICAgICAgICAgICBzdGFja1RyYWNlRXJyb3I6IG5ldyBFcnJvcihcIlN0YWNrIFRyYWNlIGZvciBvcmlnaW5hbFwiKSxcblxuICAgICAgICAgICAgICAgIHJlc3RvcmU6IHJlc3RvcmUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGFyZ2V0LnJlc3RvcmUuc2lub24gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgbWlycm9yUHJvcGVydGllcyh0YXJnZXQsIHdyYXBwZWRNZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgYWNjZXNzb3IgPSBnZXRBY2Nlc3NvcihvYmplY3QsIHByb3BlcnR5LCB0aGlzLndyYXBwZWRNZXRob2QpO1xuICAgICAgICBsZXQgZGVzY3JpcHRvcjtcbiAgICAgICAgLy8gRm9yIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRyeSB0byByZXNldCBieSBkZWxldGUgZmlyc3QuXG4gICAgICAgIC8vIElmIHRoaXMgZmFpbHMgKGV4OiBsb2NhbFN0b3JhZ2Ugb24gbW9iaWxlIHNhZmFyaSkgdGhlbiBmb3JjZSBhIHJlc2V0XG4gICAgICAgIC8vIHZpYSBkaXJlY3QgYXNzaWdubWVudC5cbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgICBpZiAoIW93bmVkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gc29tZSBjYXNlcyBgZGVsZXRlYCBtYXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV1bYWNjZXNzb3JdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgICAgICAgICAvLyBGb3IgbmF0aXZlIGNvZGUgZnVuY3Rpb25zIGBkZWxldGVgIGZhaWxzIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAvLyBvbiBDaHJvbWUgPCA0MywgUGhhbnRvbUpTLCBldGMuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JbYWNjZXNzb3JdID0gd3JhcHBlZE1ldGhvZERlc2NbYWNjZXNzb3JdO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWUgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldW2FjY2Vzc29yXSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbiB0byBjaGVjayBmYWlsdXJlcyB0aGVuIGZvcmNlIGEgcmVzZXRcbiAgICAgICAgICAgICAgICAvLyB2aWEgZGlyZWN0IGFzc2lnbm1lbnQuXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdFtwcm9wZXJ0eV1bYWNjZXNzb3JdID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVthY2Nlc3Nvcl0gPSB0aGlzLndyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFvd25lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRVM1U3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB3cmFwcGVkTWV0aG9kRGVzYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbm9uVHlwZS5nZXQob2JqZWN0KSA9PT0gXCJzdHViLWluc3RhbmNlXCIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgc2ltcGx5IHRvIGF2b2lkIGVycm9ycyBhZnRlciByZXN0b3JpbmcgaWYgc29tZXRoaW5nIHNob3VsZFxuICAgICAgICAgICAgLy8gdHJhdmVyc2UgdGhlIG9iamVjdCBpbiBhIGNsZWFudXAgcGhhc2UsIHJlZiAjMjQ3N1xuICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IG5vb3A7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi9jb3JlL2V4dGVuZFwiKTtcbmNvbnN0IEZha2VUaW1lcnMgPSByZXF1aXJlKFwiQHNpbm9uanMvZmFrZS10aW1lcnNcIik7XG5jb25zdCBnbG9iYWxPYmplY3QgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5nbG9iYWw7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjb25maWdcbiAqIEBwYXJhbSBnbG9iYWxDdHhcbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgY2xvY2ssIGFmdGVyIGluc3RhbGxpbmcgaXQgb24gdGhlIGdsb2JhbCBjb250ZXh0LCBpZiBnaXZlblxuICovXG5mdW5jdGlvbiBjcmVhdGVDbG9jayhjb25maWcsIGdsb2JhbEN0eCkge1xuICAgIGxldCBGYWtlVGltZXJzQ3R4ID0gRmFrZVRpbWVycztcbiAgICBpZiAoZ2xvYmFsQ3R4ICE9PSBudWxsICYmIHR5cGVvZiBnbG9iYWxDdHggPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgRmFrZVRpbWVyc0N0eCA9IEZha2VUaW1lcnMud2l0aEdsb2JhbChnbG9iYWxDdHgpO1xuICAgIH1cbiAgICBjb25zdCBjbG9jayA9IEZha2VUaW1lcnNDdHguaW5zdGFsbChjb25maWcpO1xuICAgIGNsb2NrLnJlc3RvcmUgPSBjbG9jay51bmluc3RhbGw7XG4gICAgcmV0dXJuIGNsb2NrO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZ2xvYmFsUHJvcE5hbWVcbiAqL1xuZnVuY3Rpb24gYWRkSWZEZWZpbmVkKG9iaiwgZ2xvYmFsUHJvcE5hbWUpIHtcbiAgICBjb25zdCBnbG9iYWxQcm9wID0gZ2xvYmFsT2JqZWN0W2dsb2JhbFByb3BOYW1lXTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFByb3AgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqW2dsb2JhbFByb3BOYW1lXSA9IGdsb2JhbFByb3A7XG4gICAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV8b2JqZWN0fSBkYXRlT3JDb25maWcgVGhlIHVuaXggZXBvY2ggdmFsdWUgdG8gaW5zdGFsbCB3aXRoIChkZWZhdWx0IDApXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbG9sZXggY2xvY2sgaW5zdGFuY2VcbiAqL1xuZXhwb3J0cy51c2VGYWtlVGltZXJzID0gZnVuY3Rpb24gKGRhdGVPckNvbmZpZykge1xuICAgIGNvbnN0IGhhc0FyZ3VtZW50cyA9IHR5cGVvZiBkYXRlT3JDb25maWcgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgY29uc3QgYXJndW1lbnRJc0RhdGVMaWtlID1cbiAgICAgICAgKHR5cGVvZiBkYXRlT3JDb25maWcgPT09IFwibnVtYmVyXCIgfHwgZGF0ZU9yQ29uZmlnIGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCBhcmd1bWVudElzT2JqZWN0ID1cbiAgICAgICAgZGF0ZU9yQ29uZmlnICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBkYXRlT3JDb25maWcgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMTtcblxuICAgIGlmICghaGFzQXJndW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbG9jayh7XG4gICAgICAgICAgICBub3c6IDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcmd1bWVudElzRGF0ZUxpa2UpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsb2NrKHtcbiAgICAgICAgICAgIG5vdzogZGF0ZU9yQ29uZmlnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRJc09iamVjdCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBleHRlbmQubm9uRW51bSh7fSwgZGF0ZU9yQ29uZmlnKTtcbiAgICAgICAgY29uc3QgZ2xvYmFsQ3R4ID0gY29uZmlnLmdsb2JhbDtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5nbG9iYWw7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbG9jayhjb25maWcsIGdsb2JhbEN0eCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJ1c2VGYWtlVGltZXJzIGV4cGVjdGVkIGVwb2NoIG9yIGNvbmZpZyBvYmplY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9zaW5vblwiLFxuICAgICk7XG59O1xuXG5leHBvcnRzLmNsb2NrID0ge1xuICAgIGNyZWF0ZTogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICByZXR1cm4gRmFrZVRpbWVycy5jcmVhdGVDbG9jayhub3cpO1xuICAgIH0sXG59O1xuXG5jb25zdCB0aW1lcnMgPSB7XG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dCxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dCxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwsXG4gICAgY2xlYXJJbnRlcnZhbDogY2xlYXJJbnRlcnZhbCxcbiAgICBEYXRlOiBEYXRlLFxufTtcbmFkZElmRGVmaW5lZCh0aW1lcnMsIFwic2V0SW1tZWRpYXRlXCIpO1xuYWRkSWZEZWZpbmVkKHRpbWVycywgXCJjbGVhckltbWVkaWF0ZVwiKTtcblxuZXhwb3J0cy50aW1lcnMgPSB0aW1lcnM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZXJ5ID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5ldmVyeTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoYXNDYWxsc0xlZnQoY2FsbE1hcCwgc3B5KSB7XG4gICAgaWYgKGNhbGxNYXBbc3B5LmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxNYXBbc3B5LmlkXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGxNYXBbc3B5LmlkXSA8IHNweS5jYWxsQ291bnQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tBZGphY2VudENhbGxzKGNhbGxNYXAsIHNweSwgaW5kZXgsIHNwaWVzKSB7XG4gICAgdmFyIGNhbGxlZEJlZm9yZU5leHQgPSB0cnVlO1xuXG4gICAgaWYgKGluZGV4ICE9PSBzcGllcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNhbGxlZEJlZm9yZU5leHQgPSBzcHkuY2FsbGVkQmVmb3JlKHNwaWVzW2luZGV4ICsgMV0pO1xuICAgIH1cblxuICAgIGlmIChoYXNDYWxsc0xlZnQoY2FsbE1hcCwgc3B5KSAmJiBjYWxsZWRCZWZvcmVOZXh0KSB7XG4gICAgICAgIGNhbGxNYXBbc3B5LmlkXSArPSAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQSBTaW5vbiBwcm94eSBvYmplY3QgKGZha2UsIHNweSwgc3R1YilcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpbm9uUHJveHlcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGNhbGxlZEJlZm9yZSAtIEEgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGlzIHByb3h5IHdhcyBjYWxsZWQgYmVmb3JlIGFub3RoZXIgb25lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTb21lIGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2FsbENvdW50IC0gTnVtYmVyIG9mIHRpbWVzIHRoaXMgcHJveHkgaGFzIGJlZW4gY2FsbGVkXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc3BpZXMgaGF2ZSBiZWVuIGNhbGxlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN1cHBsaWVkIGluXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllcyBBbiBhcnJheSBvZiBwcm94aWVzLCBvciBzZXZlcmFsIHByb3hpZXMgYXMgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHNwaWVzIGFyZSBjYWxsZWQgaW4gb3JkZXIsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBjYWxsZWRJbk9yZGVyKHNwaWVzKSB7XG4gICAgdmFyIGNhbGxNYXAgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICB2YXIgX3NwaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHMgOiBzcGllcztcblxuICAgIHJldHVybiBldmVyeShfc3BpZXMsIGNoZWNrQWRqYWNlbnRDYWxscy5iaW5kKG51bGwsIGNhbGxNYXApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsZWRJbk9yZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBhIGRpc3BsYXkgbmFtZSBmb3IgYSB2YWx1ZSBmcm9tIGEgY29uc3RydWN0b3JcbiAqIEBwYXJhbSAge29iamVjdH0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xudWxsKX0gQSBzdHJpbmcgb3IgbnVsbFxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgICBjb25zdCBuYW1lID0gdmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgICByZXR1cm4gbmFtZSB8fCBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgaW52b2tlIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBhbmQgcHJpbnQgYVxuICogZGVwcmVjYXRpb24gd2FybmluZyB0byB0aGUgY29uc29sZSBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSAge3N0cmluZ30gbXNnXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydHMud3JhcCA9IGZ1bmN0aW9uIChmdW5jLCBtc2cpIHtcbiAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwb3J0cy5wcmludFdhcm5pbmcobXNnKTtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGlmIChmdW5jLnByb3RvdHlwZSkge1xuICAgICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IGZ1bmMucHJvdG90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBjYW4gYmUgc3VwcGxpZWQgdG8gYHdyYXAoKWAgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYVxuICogcGFydGljdWxhciBwYXJ0IG9mIHRoZSBzaW5vbiBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cbiAqIEBwYXJhbSAge3N0cmluZ30gcGFja2FnZU5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZnVuY05hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZGVmYXVsdE1zZyA9IGZ1bmN0aW9uIChwYWNrYWdlTmFtZSwgZnVuY05hbWUpIHtcbiAgICByZXR1cm4gYCR7cGFja2FnZU5hbWV9LiR7ZnVuY05hbWV9IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwdWJsaWMgQVBJIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgJHtwYWNrYWdlTmFtZX0uYDtcbn07XG5cbi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBvbiB0aGUgY29uc29sZSwgd2hlbiBpdCBleGlzdHNcbiAqIEBwYXJhbSAge3N0cmluZ30gbXNnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5leHBvcnRzLnByaW50V2FybmluZyA9IGZ1bmN0aW9uIChtc2cpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmVtaXRXYXJuaW5nKSB7XG4gICAgICAgIC8vIEVtaXQgV2FybmluZ3MgaW4gTm9kZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG1zZyk7XG4gICAgfSBlbHNlIGlmIChjb25zb2xlLmluZm8pIHtcbiAgICAgICAgY29uc29sZS5pbmZvKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gZm4gcmV0dXJucyB0cnVlIGZvciBhbGwgbWVtYmVycyBvZiBvYmouXG4gKiBUaGlzIGlzIGFuIGV2ZXJ5IGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgZm9yIGFsbCBpdGVyYWJsZXNcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXZlcnkob2JqLCBmbikge1xuICAgIHZhciBwYXNzID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvd2luZyBhbiBlcnJvciBpcyB0aGUgb25seSB3YXkgdG8gYnJlYWsgYGZvckVhY2hgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXNzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBkaXNwbGF5IG5hbWUgZm9yIGEgZnVuY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmdW5jKSB7XG4gICAgaWYgKCFmdW5jKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmdW5jLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgICBmdW5jLm5hbWUgfHxcbiAgICAgICAgICAgIC8vIFVzZSBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIGFzIGEgbGFzdCByZXNvcnQgdG8gZ2V0IGZ1bmN0aW9uXG4gICAgICAgICAgICAvLyBuYW1lLiBEb2VzIG5vdCByZWx5IG9uIGZ1bmN0aW9uIGRlY29tcG9zaXRpb24gdG8gd29yayAtIGlmIGl0XG4gICAgICAgICAgICAvLyBkb2Vzbid0IGRlYnVnZ2luZyB3aWxsIGJlIHNsaWdodGx5IGxlc3MgaW5mb3JtYXRpdmVcbiAgICAgICAgICAgIC8vIChpLmUuIHRvU3RyaW5nIHdpbGwgc2F5ICdzcHknIHJhdGhlciB0aGFuICdteUZ1bmMnKS5cbiAgICAgICAgICAgIChTdHJpbmcoZnVuYykubWF0Y2goL2Z1bmN0aW9uIChbXlxccyhdKykvKSB8fCBbXSlbMV1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBhbmQgd2UgbWlnaHQgZ2V0IGFuIGV4Y2VwdGlvbiwgYXMgYSBsYXN0LWxhc3RcbiAgICAgICAgLy8gcmVzb3J0IGZhbGwgYmFjayB0byBlbXB0eSBzdHJpbmcuXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdFxuICogQHR5cGUge29iamVjdH0gZ2xvYmFsT2JqZWN0XG4gKi9cbnZhciBnbG9iYWxPYmplY3Q7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5pZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIE5vZGVcbiAgICBnbG9iYWxPYmplY3QgPSBnbG9iYWw7XG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAvLyBCcm93c2VyXG4gICAgZ2xvYmFsT2JqZWN0ID0gd2luZG93O1xufSBlbHNlIHtcbiAgICAvLyBXZWJXb3JrZXJcbiAgICBnbG9iYWxPYmplY3QgPSBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbE9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnbG9iYWw6IHJlcXVpcmUoXCIuL2dsb2JhbFwiKSxcbiAgICBjYWxsZWRJbk9yZGVyOiByZXF1aXJlKFwiLi9jYWxsZWQtaW4tb3JkZXJcIiksXG4gICAgY2xhc3NOYW1lOiByZXF1aXJlKFwiLi9jbGFzcy1uYW1lXCIpLFxuICAgIGRlcHJlY2F0ZWQ6IHJlcXVpcmUoXCIuL2RlcHJlY2F0ZWRcIiksXG4gICAgZXZlcnk6IHJlcXVpcmUoXCIuL2V2ZXJ5XCIpLFxuICAgIGZ1bmN0aW9uTmFtZTogcmVxdWlyZShcIi4vZnVuY3Rpb24tbmFtZVwiKSxcbiAgICBvcmRlckJ5Rmlyc3RDYWxsOiByZXF1aXJlKFwiLi9vcmRlci1ieS1maXJzdC1jYWxsXCIpLFxuICAgIHByb3RvdHlwZXM6IHJlcXVpcmUoXCIuL3Byb3RvdHlwZXNcIiksXG4gICAgdHlwZU9mOiByZXF1aXJlKFwiLi90eXBlLW9mXCIpLFxuICAgIHZhbHVlVG9TdHJpbmc6IHJlcXVpcmUoXCIuL3ZhbHVlLXRvLXN0cmluZ1wiKSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHNvcnQgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNvcnQ7XG52YXIgc2xpY2UgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNsaWNlO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmF0b3IoYSwgYikge1xuICAgIC8vIHV1aWQsIHdvbid0IGV2ZXIgYmUgZXF1YWxcbiAgICB2YXIgYUNhbGwgPSBhLmdldENhbGwoMCk7XG4gICAgdmFyIGJDYWxsID0gYi5nZXRDYWxsKDApO1xuICAgIHZhciBhSWQgPSAoYUNhbGwgJiYgYUNhbGwuY2FsbElkKSB8fCAtMTtcbiAgICB2YXIgYklkID0gKGJDYWxsICYmIGJDYWxsLmNhbGxJZCkgfHwgLTE7XG5cbiAgICByZXR1cm4gYUlkIDwgYklkID8gLTEgOiAxO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTaW5vblByb3h5XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBnZXRDYWxsIC0gQSBtZXRob2QgdGhhdCBjYW4gcmV0dXJuIHRoZSBmaXJzdCBjYWxsXG4gKi9cblxuLyoqXG4gKiBTb3J0cyBhbiBhcnJheSBvZiBTaW5vblByb3h5IGluc3RhbmNlcyAoZmFrZSwgc3B5LCBzdHViKSBieSB0aGVpciBmaXJzdCBjYWxsXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllc1xuICogQHJldHVybnMge1Npbm9uUHJveHlbXX1cbiAqL1xuZnVuY3Rpb24gb3JkZXJCeUZpcnN0Q2FsbChzcGllcykge1xuICAgIHJldHVybiBzb3J0KHNsaWNlKHNwaWVzKSwgY29tcGFyYXRvcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3JkZXJCeUZpcnN0Q2FsbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShBcnJheS5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24uY2FsbDtcbnZhciB0aHJvd3NPblByb3RvID0gcmVxdWlyZShcIi4vdGhyb3dzLW9uLXByb3RvXCIpO1xuXG52YXIgZGlzYWxsb3dlZFByb3BlcnRpZXMgPSBbXG4gICAgLy8gaWdub3JlIHNpemUgYmVjYXVzZSBpdCB0aHJvd3MgZnJvbSBNYXBcbiAgICBcInNpemVcIixcbiAgICBcImNhbGxlclwiLFxuICAgIFwiY2FsbGVlXCIsXG4gICAgXCJhcmd1bWVudHNcIixcbl07XG5cbi8vIFRoaXMgYnJhbmNoIGlzIGNvdmVyZWQgd2hlbiB0ZXN0cyBhcmUgcnVuIHdpdGggYC0tZGlzYWJsZS1wcm90bz10aHJvd2AsXG4vLyBob3dldmVyIHdlIGNhbiB0ZXN0IGJvdGggYnJhbmNoZXMgYXQgdGhlIHNhbWUgdGltZSwgc28gdGhpcyBpcyBpZ25vcmVkXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHRocm93c09uUHJvdG8pIHtcbiAgICBkaXNhbGxvd2VkUHJvcGVydGllcy5wdXNoKFwiX19wcm90b19fXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvcHlQcm90b3R5cGVNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUpLnJlZHVjZShmdW5jdGlvbiAoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgbmFtZVxuICAgICkge1xuICAgICAgICBpZiAoZGlzYWxsb3dlZFByb3BlcnRpZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZVtuYW1lXSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W25hbWVdID0gY2FsbC5iaW5kKHByb3RvdHlwZVtuYW1lXSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShGdW5jdGlvbi5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFycmF5OiByZXF1aXJlKFwiLi9hcnJheVwiKSxcbiAgICBmdW5jdGlvbjogcmVxdWlyZShcIi4vZnVuY3Rpb25cIiksXG4gICAgbWFwOiByZXF1aXJlKFwiLi9tYXBcIiksXG4gICAgb2JqZWN0OiByZXF1aXJlKFwiLi9vYmplY3RcIiksXG4gICAgc2V0OiByZXF1aXJlKFwiLi9zZXRcIiksXG4gICAgc3RyaW5nOiByZXF1aXJlKFwiLi9zdHJpbmdcIiksXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGUtbWV0aG9kc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKE1hcC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGUtbWV0aG9kc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKE9iamVjdC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGUtbWV0aG9kc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKFNldC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGUtbWV0aG9kc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKFN0cmluZy5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogSXMgdHJ1ZSB3aGVuIHRoZSBlbnZpcm9ubWVudCBjYXVzZXMgYW4gZXJyb3IgdG8gYmUgdGhyb3duIGZvciBhY2Nlc3NpbmcgdGhlXG4gKiBfX3Byb3RvX18gcHJvcGVydHkuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBzdXBwb3J0IGBub2RlIC0tZGlzYWJsZS1wcm90bz10aHJvd2AuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9wcm90b1xuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmxldCB0aHJvd3NPblByb3RvO1xudHJ5IHtcbiAgICBjb25zdCBvYmplY3QgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG8sIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIG9iamVjdC5fX3Byb3RvX187XG4gICAgdGhyb3dzT25Qcm90byA9IGZhbHNlO1xufSBjYXRjaCAoXykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIGNvdmVyZWQgd2hlbiB0ZXN0cyBhcmUgcnVuIHdpdGggYC0tZGlzYWJsZS1wcm90bz10aHJvd2AsXG4gICAgLy8gaG93ZXZlciB3ZSBjYW4gdGVzdCBib3RoIGJyYW5jaGVzIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHRoaXMgaXMgaWdub3JlZFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3dzT25Qcm90byA9IHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGhyb3dzT25Qcm90bztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoXCJ0eXBlLWRldGVjdFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb3dlci1jYXNlIHJlc3VsdCBvZiBydW5uaW5nIHR5cGUgZnJvbSB0eXBlLWRldGVjdCBvbiB0aGUgdmFsdWVcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdmFsdWVUb1N0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50b1N0cmluZykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlVG9TdHJpbmc7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xubGV0IHRpbWVyc01vZHVsZTtcbmlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgICB0aW1lcnNNb2R1bGUgPSByZXF1aXJlKFwidGltZXJzXCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaWdub3JlZFxuICAgIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJZGxlRGVhZGxpbmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlkVGltZW91dCAtIHdoZXRoZXIgb3Igbm90IHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgb3B0aW9uYWwgdGltZW91dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gdGltZVJlbWFpbmluZyAtIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgcHJvdmlkaW5nIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHJlbWFpbmluZyBpbiB0aGUgY3VycmVudCBpZGxlIHBlcmlvZFxuICovXG5cbi8qKlxuICogUXVldWVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGR1cmluZyBhIGJyb3dzZXIncyBpZGxlIHBlcmlvZHNcbiAqXG4gKiBAY2FsbGJhY2sgUmVxdWVzdElkbGVDYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbihJZGxlRGVhZGxpbmUpfSBjYWxsYmFja1xuICogQHBhcmFtIHt7dGltZW91dDogbnVtYmVyfX0gb3B0aW9ucyAtIGFuIG9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBOZXh0VGlja1xuICogQHBhcmFtIHtWb2lkVmFyQXJnc0Z1bmN9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHBhcmFtIHsuLi4qfSBhcmdzIC0gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGhcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFNldEltbWVkaWF0ZVxuICogQHBhcmFtIHtWb2lkVmFyQXJnc0Z1bmN9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHBhcmFtIHsuLi4qfSBhcmdzIC0gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGhcbiAqIEByZXR1cm5zIHtOb2RlSW1tZWRpYXRlfVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFZvaWRWYXJBcmdzRnVuY1xuICogQHBhcmFtIHsuLi4qfSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0byBydW5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIHRoZSBpZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBub3dcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENsb2NrXG4gKiBAcHJvcGVydHkge251bWJlcn0gbm93IC0gdGhlIGN1cnJlbnQgdGltZVxuICogQHByb3BlcnR5IHtEYXRlfSBEYXRlIC0gdGhlIERhdGUgY29uc3RydWN0b3JcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb29wTGltaXQgLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIGJlZm9yZSBhc3N1bWluZyBhbiBpbmZpbml0ZSBsb29wXG4gKiBAcHJvcGVydHkge1JlcXVlc3RJZGxlQ2FsbGJhY2t9IHJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTp2b2lkfSBjYW5jZWxJZGxlQ2FsbGJhY2tcbiAqIEBwcm9wZXJ0eSB7c2V0VGltZW91dH0gc2V0VGltZW91dFxuICogQHByb3BlcnR5IHtjbGVhclRpbWVvdXR9IGNsZWFyVGltZW91dFxuICogQHByb3BlcnR5IHtOZXh0VGlja30gbmV4dFRpY2tcbiAqIEBwcm9wZXJ0eSB7cXVldWVNaWNyb3Rhc2t9IHF1ZXVlTWljcm90YXNrXG4gKiBAcHJvcGVydHkge3NldEludGVydmFsfSBzZXRJbnRlcnZhbFxuICogQHByb3BlcnR5IHtjbGVhckludGVydmFsfSBjbGVhckludGVydmFsXG4gKiBAcHJvcGVydHkge1NldEltbWVkaWF0ZX0gc2V0SW1tZWRpYXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKE5vZGVJbW1lZGlhdGUpOnZvaWR9IGNsZWFySW1tZWRpYXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6bnVtYmVyfSBjb3VudFRpbWVyc1xuICogQHByb3BlcnR5IHtSZXF1ZXN0QW5pbWF0aW9uRnJhbWV9IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IGNhbmNlbEFuaW1hdGlvbkZyYW1lXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6dm9pZH0gcnVuTWljcm90YXNrc1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcgfCBudW1iZXIpOiBudW1iZXJ9IHRpY2tcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+fSB0aWNrQXN5bmNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBuZXh0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gbmV4dEFzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gcnVuQWxsXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gcnVuVG9GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IHJ1bkFsbEFzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gcnVuVG9MYXN0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gcnVuVG9MYXN0QXN5bmNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gcmVzZXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyIHwgRGF0ZSk6IHZvaWR9IHNldFN5c3RlbVRpbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTogdm9pZH0ganVtcFxuICogQHByb3BlcnR5IHtQZXJmb3JtYW5jZX0gcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyW10pOiBudW1iZXJbXX0gaHJ0aW1lIC0gcHJvY2Vzcy5ocnRpbWUgKGxlZ2FjeSlcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gdW5pbnN0YWxsIFVuaW5zdGFsbCB0aGUgY2xvY2suXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9uW119IG1ldGhvZHMgLSB0aGUgbWV0aG9kcyB0aGF0IGFyZSBmYWtlZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNdIGluaGVyaXRlZCBmcm9tIGNvbmZpZ1xuICogQHByb3BlcnR5IHt7bWV0aG9kTmFtZTpzdHJpbmcsIG9yaWdpbmFsOmFueX1bXSB8IHVuZGVmaW5lZH0gdGltZXJzTW9kdWxlTWV0aG9kc1xuICovXG4vKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtcHJvcGVydHktZGVzY3JpcHRpb24gKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGBpbnN0YWxsYCBtZXRob2QuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29uZmlnXG4gKiBAcHJvcGVydHkge251bWJlcnxEYXRlfSBbbm93XSBhIG51bWJlciAoaW4gbWlsbGlzZWNvbmRzKSBvciBhIERhdGUgb2JqZWN0IChkZWZhdWx0IGVwb2NoKVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RvRmFrZV0gbmFtZXMgb2YgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZmFrZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xvb3BMaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVycyB0aGF0IHdpbGwgYmUgcnVuIHdoZW4gY2FsbGluZyBydW5BbGwoKVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQWR2YW5jZVRpbWVdIHRlbGxzIEZha2VUaW1lcnMgdG8gaW5jcmVtZW50IG1vY2tlZCB0aW1lIGF1dG9tYXRpY2FsbHkgKGRlZmF1bHQgZmFsc2UpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FkdmFuY2VUaW1lRGVsdGFdIGluY3JlbWVudCBtb2NrZWQgdGltZSBldmVyeSA8PGFkdmFuY2VUaW1lRGVsdGE+PiBtcyAoZGVmYXVsdDogMjBtcylcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3VsZENsZWFyTmF0aXZlVGltZXJzXSBmb3J3YXJkcyBjbGVhciB0aW1lciBjYWxscyB0byBuYXRpdmUgZnVuY3Rpb25zIGlmIHRoZXkgYXJlIG5vdCBmYWtlcyAoZGVmYXVsdDogZmFsc2UpXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuLyoqXG4gKiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIHRvIGRlc2NyaWJlIGEgc2NoZWR1bGVkIGZha2UgdGltZXJcbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUaW1lclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZnVuY1xuICogQHByb3BlcnR5IHsqW119IGFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWxheVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNhbGxBdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNyZWF0ZWRBdFxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZFxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICovXG5cbi8qKlxuICogQSBOb2RlIHRpbWVyXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gTm9kZUltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBib29sZWFufSBoYXNSZWZcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogTm9kZUltbWVkaWF0ZX0gcmVmXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IE5vZGVJbW1lZGlhdGV9IHVucmVmXG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogTW9ja3MgYXZhaWxhYmxlIGZlYXR1cmVzIGluIHRoZSBzcGVjaWZpZWQgZ2xvYmFsIG5hbWVzcGFjZS5cbiAqXG4gKiBAcGFyYW0geyp9IF9nbG9iYWwgTmFtZXNwYWNlIHRvIG1vY2sgKGUuZy4gYHdpbmRvd2ApXG4gKiBAcmV0dXJucyB7RmFrZVRpbWVyc31cbiAqL1xuZnVuY3Rpb24gd2l0aEdsb2JhbChfZ2xvYmFsKSB7XG4gICAgY29uc3QgbWF4VGltZW91dCA9IE1hdGgucG93KDIsIDMxKSAtIDE7IC8vc2VlIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Fic3RyYWN0LW9wZGVmLWNvbnZlcnR0b2ludFxuICAgIGNvbnN0IGlkQ291bnRlclN0YXJ0ID0gMWUxMjsgLy8gYXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVyIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBuYXRpdmUgdGltZXIgSURzXG4gICAgY29uc3QgTk9PUCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IE5PT1BfQVJSQVkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHRpbWVvdXRSZXN1bHQgPSBfZ2xvYmFsLnNldFRpbWVvdXQoTk9PUCwgMCk7XG4gICAgY29uc3QgYWRkVGltZXJSZXR1cm5zT2JqZWN0ID0gdHlwZW9mIHRpbWVvdXRSZXN1bHQgPT09IFwib2JqZWN0XCI7XG4gICAgY29uc3QgaHJ0aW1lUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLmhydGltZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGhydGltZUJpZ2ludFByZXNlbnQgPVxuICAgICAgICBocnRpbWVQcmVzZW50ICYmIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lLmJpZ2ludCA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IG5leHRUaWNrUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLm5leHRUaWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgdXRpbFByb21pc2lmeSA9IF9nbG9iYWwucHJvY2VzcyAmJiByZXF1aXJlKFwidXRpbFwiKS5wcm9taXNpZnk7XG4gICAgY29uc3QgcGVyZm9ybWFuY2VQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZSAmJiB0eXBlb2YgX2dsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBoYXNQZXJmb3JtYW5jZVByb3RvdHlwZSA9XG4gICAgICAgIF9nbG9iYWwuUGVyZm9ybWFuY2UgJiZcbiAgICAgICAgKHR5cGVvZiBfZ2xvYmFsLlBlcmZvcm1hbmNlKS5tYXRjaCgvXihmdW5jdGlvbnxvYmplY3QpJC8pO1xuICAgIGNvbnN0IGhhc1BlcmZvcm1hbmNlQ29uc3RydWN0b3JQcm90b3R5cGUgPVxuICAgICAgICBfZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gICAgICAgIF9nbG9iYWwucGVyZm9ybWFuY2UuY29uc3RydWN0b3IgJiZcbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgY29uc3QgcXVldWVNaWNyb3Rhc2tQcmVzZW50ID0gX2dsb2JhbC5oYXNPd25Qcm9wZXJ0eShcInF1ZXVlTWljcm90YXNrXCIpO1xuICAgIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZVByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBjYW5jZWxBbmltYXRpb25GcmFtZVByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lICYmXG4gICAgICAgIHR5cGVvZiBfZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgcmVxdWVzdElkbGVDYWxsYmFja1ByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2sgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGNhbmNlbElkbGVDYWxsYmFja1ByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjayAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBzZXRJbW1lZGlhdGVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5zZXRJbW1lZGlhdGUgJiYgdHlwZW9mIF9nbG9iYWwuc2V0SW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgaW50bFByZXNlbnQgPSBfZ2xvYmFsLkludGwgJiYgdHlwZW9mIF9nbG9iYWwuSW50bCA9PT0gXCJvYmplY3RcIjtcblxuICAgIF9nbG9iYWwuY2xlYXJUaW1lb3V0KHRpbWVvdXRSZXN1bHQpO1xuXG4gICAgY29uc3QgTmF0aXZlRGF0ZSA9IF9nbG9iYWwuRGF0ZTtcbiAgICBjb25zdCBOYXRpdmVJbnRsID0gX2dsb2JhbC5JbnRsO1xuICAgIGxldCB1bmlxdWVUaW1lcklkID0gaWRDb3VudGVyU3RhcnQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJGaW5pdGUobnVtKSB7XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShudW0pO1xuICAgIH1cblxuICAgIGxldCBpc05lYXJJbmZpbml0ZUxpbWl0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKSB7XG4gICAgICAgIGlmIChjbG9jay5sb29wTGltaXQgJiYgaSA9PT0gY2xvY2subG9vcExpbWl0IC0gMSkge1xuICAgICAgICAgICAgaXNOZWFySW5maW5pdGVMaW1pdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpIHtcbiAgICAgICAgaXNOZWFySW5maW5pdGVMaW1pdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlIHN0cmluZ3MgbGlrZSBcIjAxOjEwOjAwXCIgKG1lYW5pbmcgMSBob3VyLCAxMCBtaW51dGVzLCAwIHNlY29uZHMpIGludG9cbiAgICAgKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBodW1hbi1yZWFkYWJsZSBzdHJpbmdzIHBhc3NlZFxuICAgICAqIHRvIGNsb2NrLnRpY2soKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VUaW1lKHN0cikge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHJpbmdzID0gc3RyLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgY29uc3QgbCA9IHN0cmluZ3MubGVuZ3RoO1xuICAgICAgICBsZXQgaSA9IGw7XG4gICAgICAgIGxldCBtcyA9IDA7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgaWYgKGwgPiAzIHx8ICEvXihcXGRcXGQ6KXswLDJ9XFxkXFxkPyQvLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwidGljayBvbmx5IHVuZGVyc3RhbmRzIG51bWJlcnMsICdtOnMnIGFuZCAnaDptOnMnLiBFYWNoIHBhcnQgbXVzdCBiZSB0d28gZGlnaXRzXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkID49IDYwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgJHtzdHJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1zICs9IHBhcnNlZCAqIE1hdGgucG93KDYwLCBsIC0gaSAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zICogMTAwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlY2ltYWwgcGFydCBvZiB0aGUgbWlsbGlzZWNvbmQgdmFsdWUgYXMgbmFub3NlY29uZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtc0Zsb2F0IHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAgICogQHJldHVybnMge251bWJlcn0gYW4gaW50ZWdlciBudW1iZXIgb2YgbmFub3NlY29uZHMgaW4gdGhlIHJhbmdlIFswLDFlNilcbiAgICAgKlxuICAgICAqIEV4YW1wbGU6IG5hbm9SZW1haW5lcigxMjMuNDU2Nzg5KSAtPiA0NTY3ODlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYW5vUmVtYWluZGVyKG1zRmxvYXQpIHtcbiAgICAgICAgY29uc3QgbW9kdWxvID0gMWU2O1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAobXNGbG9hdCAqIDFlNikgJSBtb2R1bG87XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlUmVtYWluZGVyID1cbiAgICAgICAgICAgIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBtb2R1bG8gOiByZW1haW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocG9zaXRpdmVSZW1haW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZ3JvayB0aGUgYG5vd2AgcGFyYW1ldGVyIHRvIGNyZWF0ZUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gZXBvY2ggdGhlIHN5c3RlbSB0aW1lXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRFcG9jaChlcG9jaCkge1xuICAgICAgICBpZiAoIWVwb2NoKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoLmdldFRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGVwb2NoLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdyBzaG91bGQgYmUgbWlsbGlzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyKSB7XG4gICAgICAgIHJldHVybiB0aW1lciAmJiB0aW1lci5jYWxsQXQgPj0gZnJvbSAmJiB0aW1lci5jYWxsQXQgPD0gdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBqb2JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJbmZpbml0ZUxvb3BFcnJvcihjbG9jaywgam9iKSB7XG4gICAgICAgIGNvbnN0IGluZmluaXRlTG9vcEVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFib3J0aW5nIGFmdGVyIHJ1bm5pbmcgJHtjbG9jay5sb29wTGltaXR9IHRpbWVycywgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcCFgLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICgham9iLmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5maW5pdGVMb29wRXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYXR0ZXJuIG5ldmVyIG1hdGNoZWQgaW4gTm9kZVxuICAgICAgICBjb25zdCBjb21wdXRlZFRhcmdldFBhdHRlcm4gPSAvdGFyZ2V0XFwuKls8fCh8W10uKj9bPnxcXF18KV1cXHMqLztcbiAgICAgICAgbGV0IGNsb2NrTWV0aG9kUGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICBTdHJpbmcoT2JqZWN0LmtleXMoY2xvY2spLmpvaW4oXCJ8XCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBub2RlLmpzIGVudmlyb25tZW50XG4gICAgICAgICAgICBjbG9ja01ldGhvZFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgIGBcXFxccythdCAoT2JqZWN0XFxcXC4pPyg/OiR7T2JqZWN0LmtleXMoY2xvY2spLmpvaW4oXCJ8XCIpfSlcXFxccytgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXRjaGVkTGluZUluZGV4ID0gLTE7XG4gICAgICAgIGpvYi5lcnJvci5zdGFjay5zcGxpdChcIlxcblwiKS5zb21lKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY29tcHV0ZWQgdGFyZ2V0IGxpbmUgKGUuZy4gc2V0VGltZW91dCkgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLiBSZXR1cm4gdHJ1ZSB0byBzdG9wIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb21wdXRlZFRhcmdldCA9IGxpbmUubWF0Y2goY29tcHV0ZWRUYXJnZXRQYXR0ZXJuKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb21wdXRlZFRhcmdldCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY2xvY2sgbWV0aG9kIGxpbmUsIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJlXG4gICAgICAgICAgICAvLyBvdGhlcnMgZnVydGhlciBkb3duIHRoZSB0cmFjZS4gUmV0dXJuIGZhbHNlIHRvIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENsb2NrTWV0aG9kID0gbGluZS5tYXRjaChjbG9ja01ldGhvZFBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDbG9ja01ldGhvZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIGFueXRoaW5nIG9uIHRoaXMgbGluZSwgYnV0IHdlIG1hdGNoZWRcbiAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgYW5kIHNldCB0aGUgbWF0Y2hlZCBsaW5lIGluZGV4LCB0aGVuIHdlIGNhbiBzdG9wLlxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHByZXZpb3VzbHksIHRoZW4gd2Ugc2hvdWxkIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRMaW5lSW5kZXggPj0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBgJHtpbmZpbml0ZUxvb3BFcnJvcn1cXG4ke2pvYi50eXBlIHx8IFwiTWljcm90YXNrXCJ9IC0gJHtcbiAgICAgICAgICAgIGpvYi5mdW5jLm5hbWUgfHwgXCJhbm9ueW1vdXNcIlxuICAgICAgICB9XFxuJHtqb2IuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLnNsaWNlKG1hdGNoZWRMaW5lSW5kZXggKyAxKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluZmluaXRlTG9vcEVycm9yLCBcInN0YWNrXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmluaXRlTG9vcEVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtEYXRlfSBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHRhcmdldCBhZnRlciBtb2RpZmljYXRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWlycm9yRGF0ZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgbGV0IHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCBub3cgaW1wbGVtZW50YXRpb25cbiAgICAgICAgaWYgKHNvdXJjZS5ub3cpIHtcbiAgICAgICAgICAgIHRhcmdldC5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbG9jay5ub3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5ub3c7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCB0b1NvdXJjZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAoc291cmNlLnRvU291cmNlKSB7XG4gICAgICAgICAgICB0YXJnZXQudG9Tb3VyY2UgPSBmdW5jdGlvbiB0b1NvdXJjZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU291cmNlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC50b1NvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzcGVjaWFsIHRvU3RyaW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHRhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS50b1N0cmluZygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUgPSBzb3VyY2UucHJvdG90eXBlO1xuICAgICAgICB0YXJnZXQucGFyc2UgPSBzb3VyY2UucGFyc2U7XG4gICAgICAgIHRhcmdldC5VVEMgPSBzb3VyY2UuVVRDO1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gc291cmNlLnByb3RvdHlwZS50b1VUQ1N0cmluZztcbiAgICAgICAgdGFyZ2V0LmlzRmFrZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtb250aFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGF0ZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaG91clxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbWludXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAgICAgICAqIEByZXR1cm5zIHtEYXRlfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gQ2xvY2tEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbXMpIHtcbiAgICAgICAgICAgIC8vIHRoZSBEYXRlIGNvbnN0cnVjdG9yIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCByZWYgRWNtYS0yNjIgRWRpdGlvbiA1LjEsIHNlY3Rpb24gMTUuOS4yLlxuICAgICAgICAgICAgLy8gVGhpcyByZW1haW5zIHNvIGluIHRoZSAxMHRoIGVkaXRpb24gb2YgMjAxOSBhcyB3ZWxsLlxuICAgICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENsb2NrRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoQ2xvY2tEYXRlLmNsb2NrLm5vdykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgRGF0ZSBpcyBjYWxsZWQgYXMgYSBjb25zdHJ1Y3RvciB3aXRoICduZXcnIGtleXdvcmRcbiAgICAgICAgICAgIC8vIERlZmVuc2l2ZSBhbmQgdmVyYm9zZSB0byBhdm9pZCBwb3RlbnRpYWwgaGFybSBpbiBwYXNzaW5nXG4gICAgICAgICAgICAvLyBleHBsaWNpdCB1bmRlZmluZWQgd2hlbiB1c2VyIGRvZXMgbm90IHBhc3MgYXJndW1lbnRcbiAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKENsb2NrRGF0ZS5jbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIpO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUpO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1pcnJvciBJbnRsIGJ5IGRlZmF1bHQgb24gb3VyIGZha2UgaW1wbGVtZW50YXRpb25cbiAgICAgKlxuICAgICAqIE1vc3Qgb2YgdGhlIHByb3BlcnRpZXMgYXJlIHRoZSBvcmlnaW5hbCBuYXRpdmUgb25lcyxcbiAgICAgKiBidXQgd2UgbmVlZCB0byB0YWtlIGNvbnRyb2wgb2YgdGhvc2UgdGhhdCBoYXZlIGFcbiAgICAgKiBkZXBlbmRlbmN5IG9uIHRoZSBjdXJyZW50IGNsb2NrLlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gdGhlIHBhcnRseSBmYWtlIEludGwgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnRsKCkge1xuICAgICAgICBjb25zdCBDbG9ja0ludGwgPSB7fTtcbiAgICAgICAgLypcbiAgICAgICAgICogQWxsIHByb3BlcnRpZXMgb2YgSW50bCBhcmUgbm9uLWVudW1lcmFibGUsIHNvIHdlIG5lZWRcbiAgICAgICAgICogdG8gZG8gYSBiaXQgb2Ygd29yayB0byBnZXQgdGhlbSBvdXQuXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVJbnRsKS5mb3JFYWNoKFxuICAgICAgICAgICAgKHByb3BlcnR5KSA9PiAoQ2xvY2tJbnRsW3Byb3BlcnR5XSA9IE5hdGl2ZUludGxbcHJvcGVydHldKSxcbiAgICAgICAgKTtcblxuICAgICAgICBDbG9ja0ludGwuRGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcmVhbEZvcm1hdHRlciA9IG5ldyBOYXRpdmVJbnRsLkRhdGVUaW1lRm9ybWF0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0ge307XG5cbiAgICAgICAgICAgIFtcImZvcm1hdFJhbmdlXCIsIFwiZm9ybWF0UmFuZ2VUb1BhcnRzXCIsIFwicmVzb2x2ZWRPcHRpb25zXCJdLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJbbWV0aG9kXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFsRm9ybWF0dGVyW21ldGhvZF0uYmluZChyZWFsRm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgW1wiZm9ybWF0XCIsIFwiZm9ybWF0VG9QYXJ0c1wiXS5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXJbbWV0aG9kXSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRm9ybWF0dGVyW21ldGhvZF0oZGF0ZSB8fCBDbG9ja0ludGwuY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgQ2xvY2tJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoXG4gICAgICAgICAgICBOYXRpdmVJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZSxcbiAgICAgICAgKTtcblxuICAgICAgICBDbG9ja0ludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mID1cbiAgICAgICAgICAgIE5hdGl2ZUludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mO1xuXG4gICAgICAgIHJldHVybiBDbG9ja0ludGw7XG4gICAgfVxuXG4gICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGVucXVldWVKb2IoY2xvY2ssIGpvYikge1xuICAgICAgICAvLyBlbnF1ZXVlcyBhIG1pY3JvdGljay1kZWZlcnJlZCB0YXNrIC0gZWNtYTI2Mi8jc2VjLWVucXVldWVqb2JcbiAgICAgICAgaWYgKCFjbG9jay5qb2JzKSB7XG4gICAgICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY2xvY2suam9icy5wdXNoKGpvYik7XG4gICAgfVxuXG4gICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIHJ1bkpvYnMoY2xvY2spIHtcbiAgICAgICAgLy8gcnVucyBhbGwgbWljcm90aWNrLWRlZmVycmVkIHRhc2tzIC0gZWNtYTI2Mi8jc2VjLXJ1bmpvYnNcbiAgICAgICAgaWYgKCFjbG9jay5qb2JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9jay5qb2JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBqb2IgPSBjbG9jay5qb2JzW2ldO1xuICAgICAgICAgICAgam9iLmZ1bmMuYXBwbHkobnVsbCwgam9iLmFyZ3MpO1xuXG4gICAgICAgICAgICBjaGVja0lzTmVhckluZmluaXRlTGltaXQoY2xvY2ssIGkpO1xuICAgICAgICAgICAgaWYgKGNsb2NrLmxvb3BMaW1pdCAmJiBpID4gY2xvY2subG9vcExpbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGpvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRJc05lYXJJbmZpbml0ZUxpbWl0KCk7XG4gICAgICAgIGNsb2NrLmpvYnMgPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7VGltZXJ9IHRpbWVyXG4gICAgICogQHJldHVybnMge251bWJlcn0gaWQgb2YgdGhlIGNyZWF0ZWQgdGltZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICAgICAgaWYgKHRpbWVyLmZ1bmMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCB0byB0aW1lciBjYWxsc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRUaW1lclJldHVybnNPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIE5vZGUuanMgZW52aXJvbm1lbnRcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFtFUlJfSU5WQUxJRF9DQUxMQkFDS106IENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4gUmVjZWl2ZWQgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyLmZ1bmNcbiAgICAgICAgICAgICAgICAgICAgfSBvZiB0eXBlICR7dHlwZW9mIHRpbWVyLmZ1bmN9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckluZmluaXRlTGltaXQpIHtcbiAgICAgICAgICAgIHRpbWVyLmVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lci50eXBlID0gdGltZXIuaW1tZWRpYXRlID8gXCJJbW1lZGlhdGVcIiA6IFwiVGltZW91dFwiO1xuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImRlbGF5XCIpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmRlbGF5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBwYXJzZUludCh0aW1lci5kZWxheSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTnVtYmVyRmluaXRlKHRpbWVyLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gdGltZXIuZGVsYXkgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmRlbGF5O1xuICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBNYXRoLm1heCgwLCB0aW1lci5kZWxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXIuaGFzT3duUHJvcGVydHkoXCJpbnRlcnZhbFwiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSW50ZXJ2YWxcIjtcbiAgICAgICAgICAgIHRpbWVyLmludGVydmFsID0gdGltZXIuaW50ZXJ2YWwgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiYW5pbWF0aW9uXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJBbmltYXRpb25GcmFtZVwiO1xuICAgICAgICAgICAgdGltZXIuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImlkbGVDYWxsYmFja1wiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSWRsZUNhbGxiYWNrXCI7XG4gICAgICAgICAgICB0aW1lci5pZGxlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZXIuaWQgPSB1bmlxdWVUaW1lcklkKys7XG4gICAgICAgIHRpbWVyLmNyZWF0ZWRBdCA9IGNsb2NrLm5vdztcbiAgICAgICAgdGltZXIuY2FsbEF0ID1cbiAgICAgICAgICAgIGNsb2NrLm5vdyArIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgICAgIGNsb2NrLnRpbWVyc1t0aW1lci5pZF0gPSB0aW1lcjtcblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgcmVmZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdW5yZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFzUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZmVkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aW1lci5jYWxsQXQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IF9taWdodF8gaGF2ZSBiZWVuIHJlbW92ZWQsIGJ1dCBpZiBub3QgdGhlIGFzc2lnbm1lbnQgaXMgcGVyZmVjdGx5IGZpbmVcbiAgICAgICAgICAgICAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXSA9IHRpbWVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbU3ltYm9sLnRvUHJpbWl0aXZlXTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZXIuaWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyLmlkO1xuICAgIH1cblxuICAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogXCJvZmZcIiAqL1xuICAgIC8qKlxuICAgICAqIFRpbWVyIGNvbXBhcml0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VGltZXJ9IGFcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBiXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlVGltZXJzKGEsIGIpIHtcbiAgICAgICAgLy8gU29ydCBmaXJzdCBieSBhYnNvbHV0ZSB0aW1pbmdcbiAgICAgICAgaWYgKGEuY2FsbEF0IDwgYi5jYWxsQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5jYWxsQXQgPiBiLmNhbGxBdCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IG5leHQgYnkgaW1tZWRpYXRlLCBpbW1lZGlhdGUgdGltZXJzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICBpZiAoYS5pbW1lZGlhdGUgJiYgIWIuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhLmltbWVkaWF0ZSAmJiBiLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IG5leHQgYnkgY3JlYXRpb24gdGltZSwgZWFybGllci1jcmVhdGVkIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKGEuY3JlYXRlZEF0IDwgYi5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPiBiLmNyZWF0ZWRBdCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IG5leHQgYnkgaWQsIGxvd2VyLWlkIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKGEuaWQgPCBiLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuaWQgPiBiLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIHRpbWVyIGlkcyBhcmUgdW5pcXVlLCBubyBmYWxsYmFjayBgMGAgaXMgbmVjZXNzYXJ5XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b1xuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBsZXQgaWQsIGlzSW5SYW5nZTtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBpblJhbmdlKGZyb20sIHRvLCB0aW1lcnNbaWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3RUaW1lcihjbG9jaykge1xuICAgICAgICBjb25zdCB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICAgIGxldCBpZDtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGNvbXBhcmVUaW1lcnModGltZXIsIHRpbWVyc1tpZF0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdFRpbWVyKGNsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgbGV0IGlkO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhbGxUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5pbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXS5jYWxsQXQgKz0gdGltZXIuaW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVyLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aW1lci5mdW5jLmFwcGx5KG51bGwsIHRpbWVyLmFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogZXNsaW50IG5vLWV2YWw6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgIGNvbnN0IGV2YWwyID0gZXZhbDtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXZhbDIodGltZXIuZnVuYyk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbGVhciBoYW5kbGVyIG5hbWUgZm9yIGEgZ2l2ZW4gdGltZXIgdHlwZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2xlYXJIYW5kbGVyKHR0eXBlKSB7XG4gICAgICAgIGlmICh0dHlwZSA9PT0gXCJJZGxlQ2FsbGJhY2tcIiB8fCB0dHlwZSA9PT0gXCJBbmltYXRpb25GcmFtZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYGNhbmNlbCR7dHR5cGV9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGNsZWFyJHt0dHlwZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2NoZWR1bGUgaGFuZGxlciBuYW1lIGZvciBhIGdpdmVuIHRpbWVyIHR5cGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0dHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFNjaGVkdWxlSGFuZGxlcih0dHlwZSkge1xuICAgICAgICBpZiAodHR5cGUgPT09IFwiSWRsZUNhbGxiYWNrXCIgfHwgdHR5cGUgPT09IFwiQW5pbWF0aW9uRnJhbWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGByZXF1ZXN0JHt0dHlwZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgc2V0JHt0dHlwZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIHRvIHdhcm4gb25seSBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV2Fybk9uY2UoKSB7XG4gICAgICAgIGxldCBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICFjYWxscysrICYmIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB3YXJuT25jZSA9IGNyZWF0ZVdhcm5PbmNlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lcklkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgdHR5cGUpIHtcbiAgICAgICAgaWYgKCF0aW1lcklkKSB7XG4gICAgICAgICAgICAvLyBudWxsIGFwcGVhcnMgdG8gYmUgYWxsb3dlZCBpbiBtb3N0IGJyb3dzZXJzLCBhbmQgYXBwZWFycyB0byBiZVxuICAgICAgICAgICAgLy8gcmVsaWVkIHVwb24gYnkgc29tZSBsaWJyYXJpZXMsIGxpa2UgQm9vdHN0cmFwIGNhcm91c2VsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBOb2RlLCB0aGUgSUQgaXMgc3RvcmVkIGFzIHRoZSBwcmltaXRpdmUgdmFsdWUgZm9yIGBUaW1lb3V0YCBvYmplY3RzXG4gICAgICAgIC8vIGZvciBgSW1tZWRpYXRlYCBvYmplY3RzLCBubyBJRCBleGlzdHMsIHNvIGl0IGdldHMgY29lcmNlZCB0byBOYU5cbiAgICAgICAgY29uc3QgaWQgPSBOdW1iZXIodGltZXJJZCk7XG5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTihpZCkgfHwgaWQgPCBpZENvdW50ZXJTdGFydCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlck5hbWUgPSBnZXRDbGVhckhhbmRsZXIodHR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoY2xvY2suc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVIYW5kbGVyID0gY2xvY2tbYF8ke2hhbmRsZXJOYW1lfWBdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgbmF0aXZlSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gbmF0aXZlSGFuZGxlcih0aW1lcklkKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzOiAke2hhbmRsZXJOYW1lfSB3YXMgaW52b2tlZCB0byBjbGVhciBhIG5hdGl2ZSB0aW1lciBpbnN0ZWFkIG9mIG9uZSBjcmVhdGVkIGJ5IHRoaXMgbGlicmFyeS5gICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5UbyBhdXRvbWF0aWNhbGx5IGNsZWFuLXVwIG5hdGl2ZSB0aW1lcnMsIHVzZSBgc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNgLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9jay50aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBJRCBtYXRjaGVzIGEgdGltZXIgb2YgdGhlIGNvcnJlY3QgdHlwZVxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBjbG9jay50aW1lcnNbaWRdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRpbWVyLnR5cGUgPT09IHR0eXBlIHx8XG4gICAgICAgICAgICAgICAgKHRpbWVyLnR5cGUgPT09IFwiVGltZW91dFwiICYmIHR0eXBlID09PSBcIkludGVydmFsXCIpIHx8XG4gICAgICAgICAgICAgICAgKHRpbWVyLnR5cGUgPT09IFwiSW50ZXJ2YWxcIiAmJiB0dHlwZSA9PT0gXCJUaW1lb3V0XCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYXIgPSBnZXRDbGVhckhhbmRsZXIodHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlID0gZ2V0U2NoZWR1bGVIYW5kbGVyKHRpbWVyLnR5cGUpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYENhbm5vdCBjbGVhciB0aW1lcjogdGltZXIgY3JlYXRlZCB3aXRoICR7c2NoZWR1bGV9KCkgYnV0IGNsZWFyZWQgd2l0aCAke2NsZWFyfSgpYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge0NvbmZpZ30gY29uZmlnXG4gICAgICogQHJldHVybnMge1RpbWVyW119XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pbnN0YWxsKGNsb2NrLCBjb25maWcpIHtcbiAgICAgICAgbGV0IG1ldGhvZCwgaSwgbDtcbiAgICAgICAgY29uc3QgaW5zdGFsbGVkSHJUaW1lID0gXCJfaHJ0aW1lXCI7XG4gICAgICAgIGNvbnN0IGluc3RhbGxlZE5leHRUaWNrID0gXCJfbmV4dFRpY2tcIjtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2xvY2subWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IGNsb2NrLm1ldGhvZHNbaV07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImhydGltZVwiICYmIF9nbG9iYWwucHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIF9nbG9iYWwucHJvY2Vzcy5ocnRpbWUgPSBjbG9ja1tpbnN0YWxsZWRIclRpbWVdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwibmV4dFRpY2tcIiAmJiBfZ2xvYmFsLnByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPSBjbG9ja1tpbnN0YWxsZWROZXh0VGlja107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIW9yaWdpbmFsUGVyZkRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbG9iYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxQZXJmRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbFttZXRob2RdID0gY2xvY2tbYF8ke21ldGhvZH1gXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfZ2xvYmFsW21ldGhvZF0gJiYgX2dsb2JhbFttZXRob2RdLmhhZE93blByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxbbWV0aG9kXSA9IGNsb2NrW2BfJHttZXRob2R9YF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfZ2xvYmFsW21ldGhvZF07XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50IG5vLWVtcHR5OiBcIm9mZlwiICovXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzTW9kdWxlTWV0aG9kcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2xvY2sudGltZXJzTW9kdWxlTWV0aG9kc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXJzTW9kdWxlW2VudHJ5Lm1ldGhvZE5hbWVdID0gZW50cnkub3JpZ2luYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsKGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBleGVjdXRpb25zIHdoaWNoIHdpbGwgY29tcGxldGVseSByZW1vdmUgdGhlc2UgcHJvcHNcbiAgICAgICAgY2xvY2subWV0aG9kcyA9IFtdO1xuXG4gICAgICAgIC8vIHJldHVybiBwZW5kaW5nIHRpbWVycywgdG8gZW5hYmxlIGNoZWNraW5nIHdoYXQgdGltZXJzIHJlbWFpbmVkIG9uIHVuaW5zdGFsbFxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpLm1hcChmdW5jdGlvbiBtYXBwZXIoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGltZXJzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgdGhlIHRhcmdldCBjb250YWluaW5nIHRoZSBtZXRob2QgdG8gcmVwbGFjZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgdGhlIGtleW5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoaWphY2tNZXRob2QodGFyZ2V0LCBtZXRob2QsIGNsb2NrKSB7XG4gICAgICAgIGNsb2NrW21ldGhvZF0uaGFkT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgICAgIGNsb2NrW2BfJHttZXRob2R9YF0gPSB0YXJnZXRbbWV0aG9kXTtcblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkRhdGVcIikge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG1pcnJvckRhdGVQcm9wZXJ0aWVzKGNsb2NrW21ldGhvZF0sIHRhcmdldFttZXRob2RdKTtcbiAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gZGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwiSW50bFwiKSB7XG4gICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGNsb2NrW21ldGhvZF07XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInBlcmZvcm1hbmNlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gSlNET00gaGFzIGEgcmVhZCBvbmx5IHBlcmZvcm1hbmNlIGZpZWxkIHNvIHdlIGhhdmUgdG8gc2F2ZS9jb3B5IGl0IGRpZmZlcmVudGx5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IuZ2V0ICYmXG4gICAgICAgICAgICAgICAgIW9yaWdpbmFsUGVyZkRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWAsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgY2xvY2ssXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG1ldGhvZCwgcGVyZkRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGNsb2NrW21ldGhvZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2tbbWV0aG9kXS5hcHBseShjbG9jaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2RdLFxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNsb2NrW21ldGhvZF0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFttZXRob2RdLmNsb2NrID0gY2xvY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWR2YW5jZVRpbWVEZWx0YVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvSW50ZXJ2YWxUaWNrKGNsb2NrLCBhZHZhbmNlVGltZURlbHRhKSB7XG4gICAgICAgIGNsb2NrLnRpY2soYWR2YW5jZVRpbWVEZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge29iamVjdH0gVGltZXJzXG4gICAgICogQHByb3BlcnR5IHtzZXRUaW1lb3V0fSBzZXRUaW1lb3V0XG4gICAgICogQHByb3BlcnR5IHtjbGVhclRpbWVvdXR9IGNsZWFyVGltZW91dFxuICAgICAqIEBwcm9wZXJ0eSB7c2V0SW50ZXJ2YWx9IHNldEludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtjbGVhckludGVydmFsfSBjbGVhckludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtEYXRlfSBEYXRlXG4gICAgICogQHByb3BlcnR5IHtJbnRsfSBJbnRsXG4gICAgICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGU9fSBzZXRJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKE5vZGVJbW1lZGlhdGUpOiB2b2lkPX0gY2xlYXJJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcltdKTpudW1iZXJbXT19IGhydGltZVxuICAgICAqIEBwcm9wZXJ0eSB7TmV4dFRpY2s9fSBuZXh0VGlja1xuICAgICAqIEBwcm9wZXJ0eSB7UGVyZm9ybWFuY2U9fSBwZXJmb3JtYW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lPX0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICogQHByb3BlcnR5IHtib29sZWFuPX0gcXVldWVNaWNyb3Rhc2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdElkbGVDYWxsYmFjaz19IHJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxJZGxlQ2FsbGJhY2tcbiAgICAgKi9cblxuICAgIC8qKiBAdHlwZSB7VGltZXJzfSAqL1xuICAgIGNvbnN0IHRpbWVycyA9IHtcbiAgICAgICAgc2V0VGltZW91dDogX2dsb2JhbC5zZXRUaW1lb3V0LFxuICAgICAgICBjbGVhclRpbWVvdXQ6IF9nbG9iYWwuY2xlYXJUaW1lb3V0LFxuICAgICAgICBzZXRJbnRlcnZhbDogX2dsb2JhbC5zZXRJbnRlcnZhbCxcbiAgICAgICAgY2xlYXJJbnRlcnZhbDogX2dsb2JhbC5jbGVhckludGVydmFsLFxuICAgICAgICBEYXRlOiBfZ2xvYmFsLkRhdGUsXG4gICAgfTtcblxuICAgIGlmIChzZXRJbW1lZGlhdGVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgdGltZXJzLmNsZWFySW1tZWRpYXRlID0gX2dsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICB9XG5cbiAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuaHJ0aW1lID0gX2dsb2JhbC5wcm9jZXNzLmhydGltZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFRpY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5uZXh0VGljayA9IF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljaztcbiAgICB9XG5cbiAgICBpZiAocGVyZm9ybWFuY2VQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5wZXJmb3JtYW5jZSA9IF9nbG9iYWwucGVyZm9ybWFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RBbmltYXRpb25GcmFtZVByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZU1pY3JvdGFza1ByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnF1ZXVlTWljcm90YXNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuICAgIH1cblxuICAgIGlmIChjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjaztcbiAgICB9XG5cbiAgICBpZiAoaW50bFByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLkludGwgPSBfZ2xvYmFsLkludGw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxTZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRJbW1lZGlhdGUgfHwgX2dsb2JhbC5zZXRUaW1lb3V0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gW3N0YXJ0XSB0aGUgc3lzdGVtIHRpbWUgLSBub24taW50ZWdlciB2YWx1ZXMgYXJlIGZsb29yZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb3BMaW1pdF0gbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsb2NrKHN0YXJ0LCBsb29wTGltaXQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihnZXRFcG9jaChzdGFydCkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgbG9vcExpbWl0ID0gbG9vcExpbWl0IHx8IDEwMDA7XG4gICAgICAgIGxldCBuYW5vcyA9IDA7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkU3lzdGVtVGltZSA9IFswLCAwXTsgLy8gW21pbGxpcywgbmFub3JlbWFpbmRlcl1cblxuICAgICAgICBpZiAoTmF0aXZlRGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaGUgZ2xvYmFsIHNjb3BlIGRvZXNuJ3QgaGF2ZSBhIGBEYXRlYCBvYmplY3RcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Npbm9uanMvc2lub24vaXNzdWVzLzE4NTIjaXNzdWVjb21tZW50LTQxOTYyMjc4MClcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG9jayA9IHtcbiAgICAgICAgICAgIG5vdzogc3RhcnQsXG4gICAgICAgICAgICBEYXRlOiBjcmVhdGVEYXRlKCksXG4gICAgICAgICAgICBsb29wTGltaXQ6IGxvb3BMaW1pdCxcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5EYXRlLmNsb2NrID0gY2xvY2s7XG5cbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICBmdW5jdGlvbiBnZXRUaW1lVG9OZXh0RnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTYgLSAoKGNsb2NrLm5vdyAtIHN0YXJ0KSAlIDE2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICAgICAgZnVuY3Rpb24gaHJ0aW1lKHByZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc1NpbmNlU3RhcnQgPSBjbG9jay5ub3cgLSBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gLSBzdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHNlY3NTaW5jZVN0YXJ0ID0gTWF0aC5mbG9vcihtaWxsaXNTaW5jZVN0YXJ0IC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXJJbk5hbm9zID1cbiAgICAgICAgICAgICAgICAobWlsbGlzU2luY2VTdGFydCAtIHNlY3NTaW5jZVN0YXJ0ICogMWUzKSAqIDFlNiArXG4gICAgICAgICAgICAgICAgbmFub3MgLVxuICAgICAgICAgICAgICAgIGFkanVzdGVkU3lzdGVtVGltZVsxXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldikpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldlsxXSA+IDFlOSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJOdW1iZXIgb2YgbmFub3NlY29uZHMgY2FuJ3QgZXhjZWVkIGEgYmlsbGlvblwiLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFNlY3MgPSBwcmV2WzBdO1xuICAgICAgICAgICAgICAgIGxldCBuYW5vRGlmZiA9IHJlbWFpbmRlckluTmFub3MgLSBwcmV2WzFdO1xuICAgICAgICAgICAgICAgIGxldCBzZWNEaWZmID0gc2Vjc1NpbmNlU3RhcnQgLSBvbGRTZWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5hbm9EaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuYW5vRGlmZiArPSAxZTk7XG4gICAgICAgICAgICAgICAgICAgIHNlY0RpZmYgLT0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlY0RpZmYsIG5hbm9EaWZmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbc2Vjc1NpbmNlU3RhcnQsIHJlbWFpbmRlckluTmFub3NdO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgaGlnaCByZXNvbHV0aW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlZGVmIHtudW1iZXJ9IERPTUhpZ2hSZXNUaW1lU3RhbXBcbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIHtET01IaWdoUmVzVGltZVN0YW1wfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZmFrZVBlcmZvcm1hbmNlTm93KCkge1xuICAgICAgICAgICAgY29uc3QgaHJ0ID0gaHJ0aW1lKCk7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXMgPSBocnRbMF0gKiAxMDAwICsgaHJ0WzFdIC8gMWU2O1xuICAgICAgICAgICAgcmV0dXJuIG1pbGxpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChocnRpbWVCaWdpbnRQcmVzZW50KSB7XG4gICAgICAgICAgICBocnRpbWUuYmlnaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaHJ0aW1lKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJpZ0ludChwYXJ0c1swXSkgKiBCaWdJbnQoMWU5KSArIEJpZ0ludChwYXJ0c1sxXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50bFByZXNlbnQpIHtcbiAgICAgICAgICAgIGNsb2NrLkludGwgPSBjcmVhdGVJbnRsKCk7XG4gICAgICAgICAgICBjbG9jay5JbnRsLmNsb2NrID0gY2xvY2s7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gZnVuY3Rpb24gcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICAgICAgICAgIGZ1bmMsXG4gICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCB0aW1lVG9OZXh0SWRsZVBlcmlvZCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChjbG9jay5jb3VudFRpbWVycygpID4gMCkge1xuICAgICAgICAgICAgICAgIHRpbWVUb05leHRJZGxlUGVyaW9kID0gNTA7IC8vIGNvbnN0IGZvciBub3dcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICAgICAgZGVsYXk6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aW1lb3V0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRpbWVUb05leHRJZGxlUGVyaW9kXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWluKHRpbWVvdXQsIHRpbWVUb05leHRJZGxlUGVyaW9kKSxcbiAgICAgICAgICAgICAgICBpZGxlQ2FsbGJhY2s6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLmNhbmNlbElkbGVDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbElkbGVDYWxsYmFjayh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJZGxlQ2FsbGJhY2tcIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0VGltZW91dCA9IGZ1bmN0aW9uIHNldFRpbWVvdXQoZnVuYywgdGltZW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHV0aWxQcm9taXNpZnkpIHtcbiAgICAgICAgICAgIGNsb2NrLnNldFRpbWVvdXRbdXRpbFByb21pc2lmeS5jdXN0b21dID1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9taXNpZmllZFNldFRpbWVvdXQodGltZW91dCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldFRpbWVvdXRFeGVjdXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFthcmddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclRpbWVvdXQodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiVGltZW91dFwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5uZXh0VGljayA9IGZ1bmN0aW9uIG5leHRUaWNrKGZ1bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnF1ZXVlSm9iKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBpc05lYXJJbmZpbml0ZUxpbWl0ID8gbmV3IEVycm9yKCkgOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucXVldWVNaWNyb3Rhc2sgPSBmdW5jdGlvbiBxdWV1ZU1pY3JvdGFzayhmdW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2submV4dFRpY2soZnVuYyk7IC8vIGV4cGxpY2l0bHkgZHJvcCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnNldEludGVydmFsID0gZnVuY3Rpb24gc2V0SW50ZXJ2YWwoZnVuYywgdGltZW91dCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgIGludGVydmFsOiB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFySW50ZXJ2YWwodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW50ZXJ2YWxcIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNldEltbWVkaWF0ZVByZXNlbnQpIHtcbiAgICAgICAgICAgIGNsb2NrLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmdW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHV0aWxQcm9taXNpZnkpIHtcbiAgICAgICAgICAgICAgICBjbG9jay5zZXRJbW1lZGlhdGVbdXRpbFByb21pc2lmeS5jdXN0b21dID1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRJbW1lZGlhdGUoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGVFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW2FyZ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5jbGVhckltbWVkaWF0ZSA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKHRpbWVySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJbW1lZGlhdGVcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2suY291bnRUaW1lcnMgPSBmdW5jdGlvbiBjb3VudFRpbWVycygpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2xvY2sudGltZXJzIHx8IHt9KS5sZW5ndGggK1xuICAgICAgICAgICAgICAgIChjbG9jay5qb2JzIHx8IFtdKS5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBkZWxheTogZ2V0VGltZVRvTmV4dEZyYW1lKCksXG4gICAgICAgICAgICAgICAgZ2V0IGFyZ3MoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmFrZVBlcmZvcm1hbmNlTm93KCldO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJ1bk1pY3JvdGFza3MgPSBmdW5jdGlvbiBydW5NaWNyb3Rhc2tzKCkge1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdGlja1ZhbHVlIG1pbGxpc2Vjb25kcyBvciBhIHN0cmluZyBwYXJzZWFibGUgYnkgcGFyc2VUaW1lXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3luY1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZSBvciBub3RoaW5nIGZvciBhc3luY1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZG9UaWNrKHRpY2tWYWx1ZSwgaXNBc3luYywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBtc0Zsb2F0ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGlja1ZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gdGlja1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VUaW1lKHRpY2tWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBtcyA9IE1hdGguZmxvb3IobXNGbG9hdCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBuYW5vUmVtYWluZGVyKG1zRmxvYXQpO1xuICAgICAgICAgICAgbGV0IG5hbm9zVG90YWwgPSBuYW5vcyArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIGxldCB0aWNrVG8gPSBjbG9jay5ub3cgKyBtcztcblxuICAgICAgICAgICAgaWYgKG1zRmxvYXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5lZ2F0aXZlIHRpY2tzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGp1c3QgZm9yIHBvc2l0aXZlIG92ZXJmbG93XG4gICAgICAgICAgICBpZiAobmFub3NUb3RhbCA+PSAxZTYpIHtcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gMTtcbiAgICAgICAgICAgICAgICBuYW5vc1RvdGFsIC09IDFlNjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgbGV0IHRpY2tGcm9tID0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gY2xvY2subm93O1xuICAgICAgICAgICAgLy8gRVNMaW50IGZhaWxzIHRvIGRldGVjdCB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgICAgICBsZXQgdGltZXIsXG4gICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgb2xkTm93LFxuICAgICAgICAgICAgICAgIG5leHRQcm9taXNlVGljayxcbiAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjayxcbiAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItY29uc3QgKi9cblxuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHBlcmZvcm0gbWljcm90YXNrc1xuICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIG1pY3JvdGFzayBjYWxsYmFja1xuICAgICAgICAgICAgICAgIHRpY2tGcm9tICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgICAgICBmdW5jdGlvbiBkb1RpY2tJbm5lcigpIHtcbiAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGVhY2ggdGltZXIgaW4gdGhlIHJlcXVlc3RlZCByYW5nZVxuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRpbWVyICYmIHRpY2tGcm9tIDw9IHRpY2tUbykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzW3RpbWVyLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROb3cgPSBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggdXAgYWZ0ZXIgbmF0aXZlIHNldEltbWVkaWF0ZSBjYWxsYmFjayB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBuYXRpdmUgZXM2IHByb21pc2VzIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzIGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB0aW1lciBmaXJlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQobmV4dFByb21pc2VUaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGlvbkNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBwcm9jZXNzLm5leHRUaWNrKClzIGFnYWluXG4gICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIHByb2Nlc3MubmV4dFRpY2soKSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNvcm5lciBjYXNlOiBkdXJpbmcgcnVuSm9icyBuZXcgdGltZXJzIHdlcmUgc2NoZWR1bGVkIHdoaWNoIGNvdWxkIGJlIGluIHRoZSByYW5nZSBbY2xvY2subm93LCB0aWNrVG9dXG4gICAgICAgICAgICAgICAgdGltZXIgPSBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgdGlja0Zyb20sIHRpY2tUbyk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay50aWNrKHRpY2tUbyAtIGNsb2NrLm5vdyk7IC8vIGRvIGl0IGFsbCBhZ2FpbiAtIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24gPSBmaXJzdEV4Y2VwdGlvbiB8fCBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdGltZXJzIHJlbWFpbmluZyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlOiBtb3ZlIHRoZSBjbG9jayBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpY2tUbztcblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbmFub3NcbiAgICAgICAgICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0UHJvbWlzZVRpY2sgPVxuICAgICAgICAgICAgICAgIGlzQXN5bmMgJiZcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyB0aW1lciBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwb3N0VGltZXJDYWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRpY2tWYWx1ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9yIGEgaHVtYW4tcmVhZGFibGUgdmFsdWUgbGlrZSBcIjAxOjExOjE1XCJcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgY2xvY2sudGljayA9IGZ1bmN0aW9uIHRpY2sodGlja1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrKHRpY2tWYWx1ZSwgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGlja1ZhbHVlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb3IgYSBodW1hbi1yZWFkYWJsZSB2YWx1ZSBsaWtlIFwiMDE6MTE6MTVcIlxuICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNsb2NrLnRpY2tBc3luYyA9IGZ1bmN0aW9uIHRpY2tBc3luYyh0aWNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGljayh0aWNrVmFsdWUsIHRydWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2xvY2submV4dEFzeW5jID0gZnVuY3Rpb24gbmV4dEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJ1bkFsbCA9IGZ1bmN0aW9uIHJ1bkFsbCgpIHtcbiAgICAgICAgICAgIGxldCBudW1UaW1lcnMsIGk7XG4gICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjbG9jay5sb29wTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChudW1UaW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRJc05lYXJJbmZpbml0ZUxpbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xvY2submV4dCgpO1xuICAgICAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgdGhyb3cgZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucnVuVG9GcmFtZSA9IGZ1bmN0aW9uIHJ1blRvRnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGljayhnZXRUaW1lVG9OZXh0RnJhbWUoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1bkFsbEFzeW5jID0gZnVuY3Rpb24gcnVuQWxsQXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1UaW1lcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY2xvY2subG9vcExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnRpbWVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVRpbWVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucnVuVG9MYXN0ID0gZnVuY3Rpb24gcnVuVG9MYXN0KCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBsYXN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9jay50aWNrKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1blRvTGFzdEFzeW5jID0gZnVuY3Rpb24gcnVuVG9MYXN0QXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IGxhc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2sudGlja0FzeW5jKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIG5hbm9zID0gMDtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICAgICAgY2xvY2subm93ID0gc3RhcnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0U3lzdGVtVGltZSA9IGZ1bmN0aW9uIHNldFN5c3RlbVRpbWUoc3lzdGVtVGltZSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRpbWUgZGlmZmVyZW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3Tm93ID0gZ2V0RXBvY2goc3lzdGVtVGltZSk7XG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gbmV3Tm93IC0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IGlkLCB0aW1lcjtcblxuICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdID0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdICsgZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIGFkanVzdGVkU3lzdGVtVGltZVsxXSA9IGFkanVzdGVkU3lzdGVtVGltZVsxXSArIG5hbm9zO1xuICAgICAgICAgICAgLy8gdXBkYXRlICdzeXN0ZW0gY2xvY2snXG4gICAgICAgICAgICBjbG9jay5ub3cgPSBuZXdOb3c7XG4gICAgICAgICAgICBuYW5vcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aW1lcnMgYW5kIGludGVydmFscyB0byBrZWVwIHRoZW0gc3RhYmxlXG4gICAgICAgICAgICBmb3IgKGlkIGluIGNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuY3JlYXRlZEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLmNhbGxBdCArPSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0aWNrVmFsdWUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvciBhIGh1bWFuLXJlYWRhYmxlIHZhbHVlIGxpa2UgXCIwMToxMToxNVwiXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHdpbGwgcmV0dXJuIHRoZSBuZXcgYG5vd2AgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGNsb2NrLmp1bXAgPSBmdW5jdGlvbiBqdW1wKHRpY2tWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbXNGbG9hdCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRpY2tWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICA/IHRpY2tWYWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IHBhcnNlVGltZSh0aWNrVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgbXMgPSBNYXRoLmZsb29yKG1zRmxvYXQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbWVyIG9mIE9iamVjdC52YWx1ZXMoY2xvY2sudGltZXJzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjbG9jay5ub3cgKyBtcyA+IHRpbWVyLmNhbGxBdCkge1xuICAgICAgICAgICAgICAgICAgICB0aW1lci5jYWxsQXQgPSBjbG9jay5ub3cgKyBtcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbG9jay50aWNrKG1zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGVyZm9ybWFuY2VQcmVzZW50KSB7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5ub3cgPSBmYWtlUGVyZm9ybWFuY2VOb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suaHJ0aW1lID0gaHJ0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29uZmlnPX0gW2NvbmZpZ10gT3B0aW9uYWwgY29uZmlnXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3RhbGwoY29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICBjb25maWcgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzLmluc3RhbGwgY2FsbGVkIHdpdGggJHtTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICApfSBpbnN0YWxsIHJlcXVpcmVzIGFuIG9iamVjdCBwYXJhbWV0ZXJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZ2xvYmFsLkRhdGUuaXNGYWtlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBUaW1lcnMgYXJlIGFscmVhZHkgZmFrZWQ7IHRoaXMgaXMgYSBwcm9ibGVtLlxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgdXNlciByZXNldCB0aW1lcnMgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2FuJ3QgaW5zdGFsbCBmYWtlIHRpbWVycyB0d2ljZSBvbiB0aGUgc2FtZSBnbG9iYWwgb2JqZWN0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBjb25maWcgPSB0eXBlb2YgY29uZmlnICE9PSBcInVuZGVmaW5lZFwiID8gY29uZmlnIDoge307XG4gICAgICAgIGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9IGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSB8fCBmYWxzZTtcbiAgICAgICAgY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEgPSBjb25maWcuYWR2YW5jZVRpbWVEZWx0YSB8fCAyMDtcbiAgICAgICAgY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID1cbiAgICAgICAgICAgIGNvbmZpZy5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoY29uZmlnLnRhcmdldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBcImNvbmZpZy50YXJnZXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIGB3aXRoR2xvYmFsKHRhcmdldClgIGluc3RlYWQuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gY3JlYXRlQ2xvY2soY29uZmlnLm5vdywgY29uZmlnLmxvb3BMaW1pdCk7XG4gICAgICAgIGNsb2NrLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID0gY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzO1xuXG4gICAgICAgIGNsb2NrLnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2subWV0aG9kcyA9IGNvbmZpZy50b0Zha2UgfHwgW107XG5cbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkbyBub3QgZmFrZSBuZXh0VGljayBieSBkZWZhdWx0IC0gR2l0SHViIzEyNlxuICAgICAgICAgICAgY2xvY2subWV0aG9kcyA9IE9iamVjdC5rZXlzKHRpbWVycykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ICE9PSBcIm5leHRUaWNrXCIgJiYga2V5ICE9PSBcInF1ZXVlTWljcm90YXNrXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsVGljayA9IGRvSW50ZXJ2YWxUaWNrLmJpbmQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gX2dsb2JhbC5zZXRJbnRlcnZhbChcbiAgICAgICAgICAgICAgICBpbnRlcnZhbFRpY2ssXG4gICAgICAgICAgICAgICAgY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY2xvY2suYXR0YWNoZWRJbnRlcnZhbCA9IGludGVydmFsSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvY2subWV0aG9kcy5pbmNsdWRlcyhcInBlcmZvcm1hbmNlXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90byA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc1BlcmZvcm1hbmNlQ29uc3RydWN0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nbG9iYWwucGVyZm9ybWFuY2UuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGFzUGVyZm9ybWFuY2VQcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nbG9iYWwuUGVyZm9ybWFuY2UucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPT0gXCJub3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sucGVyZm9ybWFuY2VbbmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuaW5kZXhPZihcImdldEVudHJpZXNcIikgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBOT09QX0FSUkFZXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTk9PUDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoY29uZmlnLnRvRmFrZSB8fCBbXSkuaW5jbHVkZXMoXCJwZXJmb3JtYW5jZVwiKSkge1xuICAgICAgICAgICAgICAgIC8vIHVzZXIgZXhwbGljaXRseSB0cmllZCB0byBmYWtlIHBlcmZvcm1hbmNlIHdoZW4gbm90IHByZXNlbnRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwibm9uLWV4aXN0ZW50IHBlcmZvcm1hbmNlIG9iamVjdCBjYW5ub3QgYmUgZmFrZWRcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChfZ2xvYmFsID09PSBnbG9iYWxPYmplY3QgJiYgdGltZXJzTW9kdWxlKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICAgICAgaWYgKG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaGlqYWNrTWV0aG9kKF9nbG9iYWwucHJvY2VzcywgbmFtZU9mTWV0aG9kVG9SZXBsYWNlLCBjbG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwibmV4dFRpY2tcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QoX2dsb2JhbC5wcm9jZXNzLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZChfZ2xvYmFsLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXTtcbiAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lOiBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBvcmlnaW5hbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXSA9XG4gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVyczogdGltZXJzLFxuICAgICAgICBjcmVhdGVDbG9jazogY3JlYXRlQ2xvY2ssXG4gICAgICAgIGluc3RhbGw6IGluc3RhbGwsXG4gICAgICAgIHdpdGhHbG9iYWw6IHdpdGhHbG9iYWwsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGYWtlVGltZXJzXG4gKiBAcHJvcGVydHkge1RpbWVyc30gdGltZXJzXG4gKiBAcHJvcGVydHkge2NyZWF0ZUNsb2NrfSBjcmVhdGVDbG9ja1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaW5zdGFsbFxuICogQHByb3BlcnR5IHt3aXRoR2xvYmFsfSB3aXRoR2xvYmFsXG4gKi9cblxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKiBAdHlwZSB7RmFrZVRpbWVyc30gKi9cbmNvbnN0IGRlZmF1bHRJbXBsZW1lbnRhdGlvbiA9IHdpdGhHbG9iYWwoZ2xvYmFsT2JqZWN0KTtcblxuZXhwb3J0cy50aW1lcnMgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24udGltZXJzO1xuZXhwb3J0cy5jcmVhdGVDbG9jayA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5jcmVhdGVDbG9jaztcbmV4cG9ydHMuaW5zdGFsbCA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5pbnN0YWxsO1xuZXhwb3J0cy53aXRoR2xvYmFsID0gd2l0aEdsb2JhbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQVJSQVlfVFlQRVMgPSBbXG4gICAgQXJyYXksXG4gICAgSW50OEFycmF5LFxuICAgIFVpbnQ4QXJyYXksXG4gICAgVWludDhDbGFtcGVkQXJyYXksXG4gICAgSW50MTZBcnJheSxcbiAgICBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LFxuICAgIFVpbnQzMkFycmF5LFxuICAgIEZsb2F0MzJBcnJheSxcbiAgICBGbG9hdDY0QXJyYXksXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFSUkFZX1RZUEVTO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBkZWVwRXF1YWwgPSByZXF1aXJlKFwiLi9kZWVwLWVxdWFsXCIpLnVzZShjcmVhdGVNYXRjaGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxudmFyIGV2ZXJ5ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZXZlcnk7XG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xudmFyIGdldCA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIGl0ZXJhYmxlVG9TdHJpbmcgPSByZXF1aXJlKFwiLi9pdGVyYWJsZS10by1zdHJpbmdcIik7XG52YXIgb2JqZWN0UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdDtcbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbnZhciBhc3NlcnRNYXRjaGVyID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1hdGNoZXJcIik7XG52YXIgYXNzZXJ0TWV0aG9kRXhpc3RzID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1ldGhvZC1leGlzdHNcIik7XG52YXIgYXNzZXJ0VHlwZSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC10eXBlXCIpO1xudmFyIGlzSXRlcmFibGUgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9pcy1pdGVyYWJsZVwiKTtcbnZhciBpc01hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9pcy1tYXRjaGVyXCIpO1xuXG52YXIgbWF0Y2hlclByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL21hdGNoZXItcHJvdG90eXBlXCIpO1xuXG52YXIgYXJyYXlJbmRleE9mID0gYXJyYXlQcm90by5pbmRleE9mO1xudmFyIHNvbWUgPSBhcnJheVByb3RvLnNvbWU7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbnZhciBUWVBFX01BUCA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL3R5cGUtbWFwXCIpKGNyZWF0ZU1hdGNoZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdGNoZXIgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGV4cGVjdGF0aW9uXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uY3JlYXRlTWF0Y2hlclxuICogQHBhcmFtIHsqfSBleHBlY3RhdGlvbiBBbiBleHBlY3R0YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEEgbWVzc2FnZSBmb3IgdGhlIGV4cGVjdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBIG1hdGNoZXIgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoZXIoZXhwZWN0YXRpb24sIG1lc3NhZ2UpIHtcbiAgICB2YXIgbSA9IE9iamVjdC5jcmVhdGUobWF0Y2hlclByb3RvdHlwZSk7XG4gICAgdmFyIHR5cGUgPSB0eXBlT2YoZXhwZWN0YXRpb24pO1xuXG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWVzc2FnZSBzaG91bGQgYmUgYSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgMSBvciAyIGFyZ3VtZW50cywgcmVjZWl2ZWQgJHthcmd1bWVudHMubGVuZ3RofWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSBpbiBUWVBFX01BUCkge1xuICAgICAgICBUWVBFX01BUFt0eXBlXShtLCBleHBlY3RhdGlvbiwgbWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGF0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIW0ubWVzc2FnZSkge1xuICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX0pYDtcbiAgICB9XG5cbiAgICAvLyBlbnN1cmUgdGhhdCBub3RoaW5nIG11dGF0ZXMgdGhlIGV4cG9ydGVkIG1lc3NhZ2UgdmFsdWUsIHJlZiBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9zaW5vbi9pc3N1ZXMvMjUwMlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCBcIm1lc3NhZ2VcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBtLm1lc3NhZ2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbTtcbn1cblxuY3JlYXRlTWF0Y2hlci5pc01hdGNoZXIgPSBpc01hdGNoZXI7XG5cbmNyZWF0ZU1hdGNoZXIuYW55ID0gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG59LCBcImFueVwiKTtcblxuY3JlYXRlTWF0Y2hlci5kZWZpbmVkID0gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgcmV0dXJuIGFjdHVhbCAhPT0gbnVsbCAmJiBhY3R1YWwgIT09IHVuZGVmaW5lZDtcbn0sIFwiZGVmaW5lZFwiKTtcblxuY3JlYXRlTWF0Y2hlci50cnV0aHkgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICByZXR1cm4gQm9vbGVhbihhY3R1YWwpO1xufSwgXCJ0cnV0aHlcIik7XG5cbmNyZWF0ZU1hdGNoZXIuZmFsc3kgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICByZXR1cm4gIWFjdHVhbDtcbn0sIFwiZmFsc3lcIik7XG5cbmNyZWF0ZU1hdGNoZXIuc2FtZSA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uID09PSBhY3R1YWw7XG4gICAgfSwgYHNhbWUoJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmluID0gZnVuY3Rpb24gKGFycmF5T2ZFeHBlY3RhdGlvbnMpIHtcbiAgICBpZiAodHlwZU9mKGFycmF5T2ZFeHBlY3RhdGlvbnMpICE9PSBcImFycmF5XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFycmF5IGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIHNvbWUoYXJyYXlPZkV4cGVjdGF0aW9ucywgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24gPT09IGFjdHVhbDtcbiAgICAgICAgfSk7XG4gICAgfSwgYGluKCR7dmFsdWVUb1N0cmluZyhhcnJheU9mRXhwZWN0YXRpb25zKX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLnR5cGVPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgYXNzZXJ0VHlwZSh0eXBlLCBcInN0cmluZ1wiLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gdHlwZU9mKGFjdHVhbCkgPT09IHR5cGU7XG4gICAgfSwgYHR5cGVPZihcIiR7dHlwZX1cIilgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgICB0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBTeW1ib2wuaGFzSW5zdGFuY2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICApIHtcbiAgICAgICAgYXNzZXJ0VHlwZSh0eXBlLCBcImZ1bmN0aW9uXCIsIFwidHlwZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnRNZXRob2RFeGlzdHMoXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgU3ltYm9sLmhhc0luc3RhbmNlLFxuICAgICAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgICAgICBcIltTeW1ib2wuaGFzSW5zdGFuY2VdXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gYWN0dWFsIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9LCBgaW5zdGFuY2VPZigke2Z1bmN0aW9uTmFtZSh0eXBlKSB8fCBvYmplY3RUb1N0cmluZyh0eXBlKX0pYCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm9wZXJ0eSBtYXRjaGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BlcnR5VGVzdCBBIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIHByb3BlcnR5IGFnYWluc3QgYSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VQcmVmaXggQSBwcmVmaXggdG8gdXNlIGZvciBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIG1hdGNoZXJcbiAqIEByZXR1cm5zIHtvYmplY3R9IEEgbWF0Y2hlclxuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIocHJvcGVydHlUZXN0LCBtZXNzYWdlUHJlZml4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0VHlwZShwcm9wZXJ0eSwgXCJzdHJpbmdcIiwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgdmFyIG9ubHlQcm9wZXJ0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgICAgIHZhciBtZXNzYWdlID0gYCR7bWVzc2FnZVByZWZpeH0oXCIke3Byb3BlcnR5fVwiYDtcbiAgICAgICAgaWYgKCFvbmx5UHJvcGVydHkpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCwgJHt2YWx1ZVRvU3RyaW5nKHZhbHVlKX1gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gXCIpXCI7XG4gICAgICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhY3R1YWwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICFwcm9wZXJ0eVRlc3QoYWN0dWFsLCBwcm9wZXJ0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvbmx5UHJvcGVydHkgfHwgZGVlcEVxdWFsKGFjdHVhbFtwcm9wZXJ0eV0sIHZhbHVlKTtcbiAgICAgICAgfSwgbWVzc2FnZSk7XG4gICAgfTtcbn1cblxuY3JlYXRlTWF0Y2hlci5oYXMgPSBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCwgcHJvcGVydHkpIHtcbiAgICBpZiAodHlwZW9mIGFjdHVhbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gcHJvcGVydHkgaW4gYWN0dWFsO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkO1xufSwgXCJoYXNcIik7XG5cbmNyZWF0ZU1hdGNoZXIuaGFzT3duID0gY3JlYXRlUHJvcGVydHlNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5KGFjdHVhbCwgcHJvcGVydHkpO1xufSwgXCJoYXNPd25cIik7XG5cbmNyZWF0ZU1hdGNoZXIuaGFzTmVzdGVkID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgIGFzc2VydFR5cGUocHJvcGVydHksIFwic3RyaW5nXCIsIFwicHJvcGVydHlcIik7XG4gICAgdmFyIG9ubHlQcm9wZXJ0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgdmFyIG1lc3NhZ2UgPSBgaGFzTmVzdGVkKFwiJHtwcm9wZXJ0eX1cImA7XG4gICAgaWYgKCFvbmx5UHJvcGVydHkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgLCAke3ZhbHVlVG9TdHJpbmcodmFsdWUpfWA7XG4gICAgfVxuICAgIG1lc3NhZ2UgKz0gXCIpXCI7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhY3R1YWwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgYWN0dWFsID09PSBudWxsIHx8XG4gICAgICAgICAgICBnZXQoYWN0dWFsLCBwcm9wZXJ0eSkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb25seVByb3BlcnR5IHx8IGRlZXBFcXVhbChnZXQoYWN0dWFsLCBwcm9wZXJ0eSksIHZhbHVlKTtcbiAgICB9LCBtZXNzYWdlKTtcbn07XG5cbnZhciBqc29uUGFyc2VSZXN1bHRUeXBlcyA9IHtcbiAgICBudWxsOiB0cnVlLFxuICAgIGJvb2xlYW46IHRydWUsXG4gICAgbnVtYmVyOiB0cnVlLFxuICAgIHN0cmluZzogdHJ1ZSxcbiAgICBvYmplY3Q6IHRydWUsXG4gICAgYXJyYXk6IHRydWUsXG59O1xuY3JlYXRlTWF0Y2hlci5qc29uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCFqc29uUGFyc2VSZXN1bHRUeXBlc1t0eXBlT2YodmFsdWUpXSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgY2Fubm90IGJlIHRoZSByZXN1bHQgb2YgSlNPTi5wYXJzZVwiKTtcbiAgICB9XG4gICAgdmFyIG1lc3NhZ2UgPSBganNvbigke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgXCIpfSlgO1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoYWN0dWFsKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWwocGFyc2VkLCB2YWx1ZSk7XG4gICAgfSwgbWVzc2FnZSk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmV2ZXJ5ID0gZnVuY3Rpb24gKHByZWRpY2F0ZSkge1xuICAgIGFzc2VydE1hdGNoZXIocHJlZGljYXRlKTtcblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgaWYgKHR5cGVPZihhY3R1YWwpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlcnkoT2JqZWN0LmtleXMoYWN0dWFsKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUudGVzdChhY3R1YWxba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbCkgJiZcbiAgICAgICAgICAgIGV2ZXJ5KGFjdHVhbCwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlLnRlc3QoZWxlbWVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBldmVyeSgke3ByZWRpY2F0ZS5tZXNzYWdlfSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc29tZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHtcbiAgICBhc3NlcnRNYXRjaGVyKHByZWRpY2F0ZSk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIGlmICh0eXBlT2YoYWN0dWFsKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuICFldmVyeShPYmplY3Qua2V5cyhhY3R1YWwpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUudGVzdChhY3R1YWxba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbCkgJiZcbiAgICAgICAgICAgICFldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUudGVzdChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYHNvbWUoJHtwcmVkaWNhdGUubWVzc2FnZX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5ID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJhcnJheVwiKTtcblxuY3JlYXRlTWF0Y2hlci5hcnJheS5kZWVwRXF1YWxzID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBDb21wYXJpbmcgbGVuZ3RocyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gc3BvdCBhIGRpZmZlcmVuY2UgYmVmb3JlIGl0ZXJhdGluZyB0aHJvdWdoIGV2ZXJ5IGl0ZW1cbiAgICAgICAgdmFyIHNhbWVMZW5ndGggPSBhY3R1YWwubGVuZ3RoID09PSBleHBlY3RhdGlvbi5sZW5ndGg7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBzYW1lTGVuZ3RoICYmXG4gICAgICAgICAgICBldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGV4cGVjdGF0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZU9mKGV4cGVjdGVkKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVPZihlbGVtZW50KSA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICAgICAgICAgID8gY3JlYXRlTWF0Y2hlci5hcnJheS5kZWVwRXF1YWxzKGV4cGVjdGVkKS50ZXN0KGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIDogZGVlcEVxdWFsKGV4cGVjdGVkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGRlZXBFcXVhbHMoWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgIGV2ZXJ5KGV4cGVjdGF0aW9uLCBmdW5jdGlvbiAoZXhwZWN0ZWRFbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWxbaW5kZXhdID09PSBleHBlY3RlZEVsZW1lbnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBzdGFydHNXaXRoKFske2l0ZXJhYmxlVG9TdHJpbmcoZXhwZWN0YXRpb24pfV0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5LmVuZHNXaXRoID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBUaGlzIGluZGljYXRlcyB0aGUgaW5kZXggaW4gd2hpY2ggd2Ugc2hvdWxkIHN0YXJ0IG1hdGNoaW5nXG4gICAgICAgIHZhciBvZmZzZXQgPSBhY3R1YWwubGVuZ3RoIC0gZXhwZWN0YXRpb24ubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0dWFsW29mZnNldCArIGluZGV4XSA9PT0gZXhwZWN0ZWRFbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgZW5kc1dpdGgoWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkuY29udGFpbnMgPSBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYWN0dWFsLCBleHBlY3RlZEVsZW1lbnQpICE9PSAtMTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGNvbnRhaW5zKFske2l0ZXJhYmxlVG9TdHJpbmcoZXhwZWN0YXRpb24pfV0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLm1hcCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwibWFwXCIpO1xuXG5jcmVhdGVNYXRjaGVyLm1hcC5kZWVwRXF1YWxzID0gZnVuY3Rpb24gbWFwRGVlcEVxdWFscyhleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgLy8gQ29tcGFyaW5nIGxlbmd0aHMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIHNwb3QgYSBkaWZmZXJlbmNlIGJlZm9yZSBpdGVyYXRpbmcgdGhyb3VnaCBldmVyeSBpdGVtXG4gICAgICAgIHZhciBzYW1lTGVuZ3RoID0gYWN0dWFsLnNpemUgPT09IGV4cGVjdGF0aW9uLnNpemU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJtYXBcIiAmJlxuICAgICAgICAgICAgc2FtZUxlbmd0aCAmJlxuICAgICAgICAgICAgZXZlcnkoYWN0dWFsLCBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmhhcyhrZXkpICYmIGV4cGVjdGF0aW9uLmdldChrZXkpID09PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgZGVlcEVxdWFscyhNYXBbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5tYXAuY29udGFpbnMgPSBmdW5jdGlvbiBtYXBDb250YWlucyhleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcIm1hcFwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGVsZW1lbnQsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWwuaGFzKGtleSkgJiYgYWN0dWFsLmdldChrZXkpID09PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgY29udGFpbnMoTWFwWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc2V0ID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJzZXRcIik7XG5cbmNyZWF0ZU1hdGNoZXIuc2V0LmRlZXBFcXVhbHMgPSBmdW5jdGlvbiBzZXREZWVwRXF1YWxzKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBDb21wYXJpbmcgbGVuZ3RocyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gc3BvdCBhIGRpZmZlcmVuY2UgYmVmb3JlIGl0ZXJhdGluZyB0aHJvdWdoIGV2ZXJ5IGl0ZW1cbiAgICAgICAgdmFyIHNhbWVMZW5ndGggPSBhY3R1YWwuc2l6ZSA9PT0gZXhwZWN0YXRpb24uc2l6ZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcInNldFwiICYmXG4gICAgICAgICAgICBzYW1lTGVuZ3RoICYmXG4gICAgICAgICAgICBldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmhhcyhlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGRlZXBFcXVhbHMoU2V0WyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc2V0LmNvbnRhaW5zID0gZnVuY3Rpb24gc2V0Q29udGFpbnMoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJzZXRcIiAmJlxuICAgICAgICAgICAgZXZlcnkoZXhwZWN0YXRpb24sIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbC5oYXMoZWxlbWVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBjb250YWlucyhTZXRbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5ib29sID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJib29sZWFuXCIpO1xuY3JlYXRlTWF0Y2hlci5udW1iZXIgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcIm51bWJlclwiKTtcbmNyZWF0ZU1hdGNoZXIuc3RyaW5nID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJzdHJpbmdcIik7XG5jcmVhdGVNYXRjaGVyLm9iamVjdCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwib2JqZWN0XCIpO1xuY3JlYXRlTWF0Y2hlci5mdW5jID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJmdW5jdGlvblwiKTtcbmNyZWF0ZU1hdGNoZXIucmVnZXhwID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJyZWdleHBcIik7XG5jcmVhdGVNYXRjaGVyLmRhdGUgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcImRhdGVcIik7XG5jcmVhdGVNYXRjaGVyLnN5bWJvbCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwic3ltYm9sXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZU1hdGNoZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzTWF0Y2hlciA9IHJlcXVpcmUoXCIuL2lzLW1hdGNoZXJcIik7XG5cbi8qKlxuICogVGhyb3dzIGEgVHlwZUVycm9yIHdoZW4gYHZhbHVlYCBpcyBub3QgYSBtYXRjaGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV4YW1pbmVcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWF0Y2hlcih2YWx1ZSkge1xuICAgIGlmICghaXNNYXRjaGVyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWF0Y2hlciBleHBlY3RlZFwiKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0TWF0Y2hlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFRocm93cyBhIFR5cGVFcnJvciB3aGVuIGV4cGVjdGVkIG1ldGhvZCBkb2Vzbid0IGV4aXN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gbG9vayBmb3JcbiAqIEBwYXJhbSB7bmFtZX0gbmFtZSBBIG5hbWUgdG8gdXNlIGZvciB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFBhdGggVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byB1c2UgZm9yIGVycm9yIG1lc3NhZ2VzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IFdoZW4gdGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1ldGhvZEV4aXN0cyh2YWx1ZSwgbWV0aG9kLCBuYW1lLCBtZXRob2RQYXRoKSB7XG4gICAgaWYgKHZhbHVlW21ldGhvZF0gPT09IG51bGwgfHwgdmFsdWVbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICR7bmFtZX0gdG8gaGF2ZSBtZXRob2QgJHttZXRob2RQYXRofWApO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NlcnRNZXRob2RFeGlzdHM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdmFsdWUgaXMgb2YgdHlwZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgQSBiYXNpYyBKYXZhU2NyaXB0IHR5cGUgdG8gY29tcGFyZSB0bywgZS5nLiBcIm9iamVjdFwiLCBcInN0cmluZ1wiXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIHN0cmluZyB0byB1c2UgZm9yIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHZhbHVlIGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZSwgbmFtZSkge1xuICAgIHZhciBhY3R1YWwgPSB0eXBlT2YodmFsdWUpO1xuICAgIGlmIChhY3R1YWwgIT09IHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBFeHBlY3RlZCB0eXBlIG9mICR7bmFtZX0gdG8gYmUgJHt0eXBlfSwgYnV0IHdhcyAke2FjdHVhbH1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2VydFR5cGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBmb3IgaXRlcmFibGVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGxvb2tzIGxpa2UgYW4gaXRlcmFibGVcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKSAmJiB0eXBlT2YodmFsdWUuZm9yRWFjaCkgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhYmxlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaXNQcm90b3R5cGVPZjtcblxudmFyIG1hdGNoZXJQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9tYXRjaGVyLXByb3RvdHlwZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGEgbWF0Y2hlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9iamVjdCBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGEgbWF0Y2hlclxuICovXG5mdW5jdGlvbiBpc01hdGNoZXIob2JqZWN0KSB7XG4gICAgcmV0dXJuIGlzUHJvdG90eXBlT2YobWF0Y2hlclByb3RvdHlwZSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hdGNoZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZXJ5ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5ldmVyeTtcbnZhciBjb25jYXQgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmNvbmNhdDtcbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG5cbnZhciBkZWVwRXF1YWxGYWN0b3J5ID0gcmVxdWlyZShcIi4uL2RlZXAtZXF1YWxcIikudXNlO1xuXG52YXIgaXNNYXRjaGVyID0gcmVxdWlyZShcIi4vaXMtbWF0Y2hlclwiKTtcblxudmFyIGtleXMgPSBPYmplY3Qua2V5cztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIE1hdGNoZXMgYGFjdHVhbGAgd2l0aCBgZXhwZWN0YXRpb25gXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYWN0dWFsIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHBhcmFtIHtvYmplY3R9IGV4cGVjdGF0aW9uIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdG8gbWF0Y2ggb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXRjaGVyIEEgbWF0Y2hlciB0byB1c2UgZm9yIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgYWN0dWFsYCBtYXRjaGVzIGFsbCBwcm9wZXJ0aWVzIGluIGBleHBlY3RhdGlvbmBcbiAqL1xuZnVuY3Rpb24gbWF0Y2hPYmplY3QoYWN0dWFsLCBleHBlY3RhdGlvbiwgbWF0Y2hlcikge1xuICAgIHZhciBkZWVwRXF1YWwgPSBkZWVwRXF1YWxGYWN0b3J5KG1hdGNoZXIpO1xuICAgIGlmIChhY3R1YWwgPT09IG51bGwgfHwgYWN0dWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBleHBlY3RlZEtleXMgPSBrZXlzKGV4cGVjdGF0aW9uKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogY2Fubm90IGNvbGxlY3QgY292ZXJhZ2UgZm9yIGVuZ2luZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBTeW1ib2wgKi9cbiAgICBpZiAodHlwZU9mKGdldE93blByb3BlcnR5U3ltYm9scykgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBleHBlY3RlZEtleXMgPSBjb25jYXQoZXhwZWN0ZWRLZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXhwZWN0YXRpb24pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlcnkoZXhwZWN0ZWRLZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBleHAgPSBleHBlY3RhdGlvbltrZXldO1xuICAgICAgICB2YXIgYWN0ID0gYWN0dWFsW2tleV07XG5cbiAgICAgICAgaWYgKGlzTWF0Y2hlcihleHApKSB7XG4gICAgICAgICAgICBpZiAoIWV4cC50ZXN0KGFjdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9mKGV4cCkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hPYmplY3QoYWN0LCBleHAsIG1hdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFkZWVwRXF1YWwoYWN0LCBleHApKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaE9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWF0Y2hlclByb3RvdHlwZSA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH0sXG59O1xuXG5tYXRjaGVyUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHZhbHVlT3JNYXRjaGVyKSB7XG4gICAgdmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi4vY3JlYXRlLW1hdGNoZXJcIik7XG4gICAgdmFyIGlzTWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIuaXNNYXRjaGVyO1xuXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNYXRjaGVyIGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIHZhciBtMiA9IGlzTWF0Y2hlcih2YWx1ZU9yTWF0Y2hlcilcbiAgICAgICAgPyB2YWx1ZU9yTWF0Y2hlclxuICAgICAgICA6IGNyZWF0ZU1hdGNoZXIodmFsdWVPck1hdGNoZXIpO1xuICAgIHZhciBtMSA9IHRoaXM7XG4gICAgdmFyIG9yID0gT2JqZWN0LmNyZWF0ZShtYXRjaGVyUHJvdG90eXBlKTtcbiAgICBvci50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gbTEudGVzdChhY3R1YWwpIHx8IG0yLnRlc3QoYWN0dWFsKTtcbiAgICB9O1xuICAgIG9yLm1lc3NhZ2UgPSBgJHttMS5tZXNzYWdlfS5vcigke20yLm1lc3NhZ2V9KWA7XG4gICAgcmV0dXJuIG9yO1xufTtcblxubWF0Y2hlclByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiAodmFsdWVPck1hdGNoZXIpIHtcbiAgICB2YXIgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtbWF0Y2hlclwiKTtcbiAgICB2YXIgaXNNYXRjaGVyID0gY3JlYXRlTWF0Y2hlci5pc01hdGNoZXI7XG5cbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hdGNoZXIgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIG0yID0gaXNNYXRjaGVyKHZhbHVlT3JNYXRjaGVyKVxuICAgICAgICA/IHZhbHVlT3JNYXRjaGVyXG4gICAgICAgIDogY3JlYXRlTWF0Y2hlcih2YWx1ZU9yTWF0Y2hlcik7XG4gICAgdmFyIG0xID0gdGhpcztcbiAgICB2YXIgYW5kID0gT2JqZWN0LmNyZWF0ZShtYXRjaGVyUHJvdG90eXBlKTtcbiAgICBhbmQudGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIG0xLnRlc3QoYWN0dWFsKSAmJiBtMi50ZXN0KGFjdHVhbCk7XG4gICAgfTtcbiAgICBhbmQubWVzc2FnZSA9IGAke20xLm1lc3NhZ2V9LmFuZCgke20yLm1lc3NhZ2V9KWA7XG4gICAgcmV0dXJuIGFuZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlclByb3RvdHlwZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xudmFyIGpvaW4gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmpvaW47XG52YXIgbWFwID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5tYXA7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuc3RyaW5nLmluZGV4T2Y7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbnZhciBtYXRjaE9iamVjdCA9IHJlcXVpcmUoXCIuL21hdGNoLW9iamVjdFwiKTtcblxudmFyIGNyZWF0ZVR5cGVNYXAgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmdW5jdGlvbjogZnVuY3Rpb24gKG0sIGV4cGVjdGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICBtLnRlc3QgPSBleHBlY3RhdGlvbjtcbiAgICAgICAgICAgIG0ubWVzc2FnZSA9IG1lc3NhZ2UgfHwgYG1hdGNoKCR7ZnVuY3Rpb25OYW1lKGV4cGVjdGF0aW9uKX0pYDtcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHR5cGUgY29lcmNpb24gaGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbiA9PSBhY3R1YWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBvYmplY3Q6IGZ1bmN0aW9uIChtLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwZWN0YXRpb24udGVzdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24udGVzdChhY3R1YWwpID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbS5tZXNzYWdlID0gYG1hdGNoKCR7ZnVuY3Rpb25OYW1lKGV4cGVjdGF0aW9uLnRlc3QpfSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcnJheSA9IG1hcChPYmplY3Qua2V5cyhleHBlY3RhdGlvbiksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uW2tleV0pfWA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE9iamVjdChhY3R1YWwsIGV4cGVjdGF0aW9uLCBtYXRjaCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbS5tZXNzYWdlID0gYG1hdGNoKCR7am9pbihhcnJheSwgXCIsIFwiKX0pYDtcblxuICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2V4cDogZnVuY3Rpb24gKG0sIGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09IFwic3RyaW5nXCIgJiYgZXhwZWN0YXRpb24udGVzdChhY3R1YWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaW5nOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ0luZGV4T2YoYWN0dWFsLCBleHBlY3RhdGlvbikgIT09IC0xXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goXCIke2V4cGVjdGF0aW9ufVwiKWA7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlVHlwZU1hcDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG52YXIgY2xhc3NOYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuY2xhc3NOYW1lO1xudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBvYmplY3RQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0O1xudmFyIG1hcEZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm1hcC5mb3JFYWNoO1xuXG52YXIgZ2V0Q2xhc3MgPSByZXF1aXJlKFwiLi9nZXQtY2xhc3NcIik7XG52YXIgaWRlbnRpY2FsID0gcmVxdWlyZShcIi4vaWRlbnRpY2FsXCIpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZShcIi4vaXMtYXJndW1lbnRzXCIpO1xudmFyIGlzQXJyYXlUeXBlID0gcmVxdWlyZShcIi4vaXMtYXJyYXktdHlwZVwiKTtcbnZhciBpc0RhdGUgPSByZXF1aXJlKFwiLi9pcy1kYXRlXCIpO1xudmFyIGlzRWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzLWVsZW1lbnRcIik7XG52YXIgaXNJdGVyYWJsZSA9IHJlcXVpcmUoXCIuL2lzLWl0ZXJhYmxlXCIpO1xudmFyIGlzTWFwID0gcmVxdWlyZShcIi4vaXMtbWFwXCIpO1xudmFyIGlzTmFOID0gcmVxdWlyZShcIi4vaXMtbmFuXCIpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZShcIi4vaXMtb2JqZWN0XCIpO1xudmFyIGlzU2V0ID0gcmVxdWlyZShcIi4vaXMtc2V0XCIpO1xudmFyIGlzU3Vic2V0ID0gcmVxdWlyZShcIi4vaXMtc3Vic2V0XCIpO1xuXG52YXIgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG52YXIgZXZlcnkgPSBhcnJheVByb3RvLmV2ZXJ5O1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5cbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xudmFyIGluZGV4T2YgPSBhcnJheVByb3RvLmluZGV4T2Y7XG52YXIga2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogRGVlcCBlcXVhbCBjb21wYXJpc29uLiBUd28gdmFsdWVzIGFyZSBcImRlZXAgZXF1YWxcIiB3aGVuOlxuICpcbiAqICAgLSBUaGV5IGFyZSBlcXVhbCwgYWNjb3JkaW5nIHRvIHNhbXNhbS5pZGVudGljYWxcbiAqICAgLSBUaGV5IGFyZSBib3RoIGRhdGUgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHNhbWUgdGltZVxuICogICAtIFRoZXkgYXJlIGJvdGggYXJyYXlzIGNvbnRhaW5pbmcgZWxlbWVudHMgdGhhdCBhcmUgYWxsIGRlZXBFcXVhbFxuICogICAtIFRoZXkgYXJlIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcywgYW5kIGVhY2ggcHJvcGVydHlcbiAqICAgICBpbiBgYGFjdHVhbGBgIGlzIGRlZXBFcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiBgYGV4cGVjdGF0aW9uYGBcbiAqXG4gKiBTdXBwb3J0cyBjeWNsaWMgb2JqZWN0cy5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5kZWVwRXF1YWxcbiAqIEBwYXJhbSB7Kn0gYWN0dWFsIFRoZSBvYmplY3QgdG8gZXhhbWluZVxuICogQHBhcmFtIHsqfSBleHBlY3RhdGlvbiBUaGUgb2JqZWN0IGFjdHVhbCBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCB0b1xuICogQHBhcmFtIHtvYmplY3R9IG1hdGNoIEEgdmFsdWUgdG8gbWF0Y2ggb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhY3R1YWwgYW5kIGV4cGVjdGF0aW9uIGFyZSBjb25zaWRlcmVkIGVxdWFsXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbEN5Y2xpYyhhY3R1YWwsIGV4cGVjdGF0aW9uLCBtYXRjaCkge1xuICAgIC8vIHVzZWQgZm9yIGN5Y2xpYyBjb21wYXJpc29uXG4gICAgLy8gY29udGFpbiBhbHJlYWR5IHZpc2l0ZWQgb2JqZWN0c1xuICAgIHZhciBhY3R1YWxPYmplY3RzID0gW107XG4gICAgdmFyIGV4cGVjdGF0aW9uT2JqZWN0cyA9IFtdO1xuICAgIC8vIGNvbnRhaW4gcGF0aGVzIChwb3NpdGlvbiBpbiB0aGUgb2JqZWN0IHN0cnVjdHVyZSlcbiAgICAvLyBvZiB0aGUgYWxyZWFkeSB2aXNpdGVkIG9iamVjdHNcbiAgICAvLyBpbmRleGVzIHNhbWUgYXMgaW4gb2JqZWN0cyBhcnJheXNcbiAgICB2YXIgYWN0dWFsUGF0aHMgPSBbXTtcbiAgICB2YXIgZXhwZWN0YXRpb25QYXRocyA9IFtdO1xuICAgIC8vIGNvbnRhaW5zIGNvbWJpbmF0aW9ucyBvZiBhbHJlYWR5IGNvbXBhcmVkIG9iamVjdHNcbiAgICAvLyBpbiB0aGUgbWFubmVyOiB7IFwiJDFbJ3JlZiddJDJbJ3JlZiddXCI6IHRydWUgfVxuICAgIHZhciBjb21wYXJlZCA9IHt9O1xuXG4gICAgLy8gZG9lcyB0aGUgcmVjdXJzaW9uIGZvciB0aGUgZGVlcCBlcXVhbCBjaGVja1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcmV0dXJuIChmdW5jdGlvbiBkZWVwRXF1YWwoXG4gICAgICAgIGFjdHVhbE9iaixcbiAgICAgICAgZXhwZWN0YXRpb25PYmosXG4gICAgICAgIGFjdHVhbFBhdGgsXG4gICAgICAgIGV4cGVjdGF0aW9uUGF0aFxuICAgICkge1xuICAgICAgICAvLyBJZiBib3RoIGFyZSBtYXRjaGVycyB0aGV5IG11c3QgYmUgdGhlIHNhbWUgaW5zdGFuY2UgaW4gb3JkZXIgdG8gYmVcbiAgICAgICAgLy8gY29uc2lkZXJlZCBlcXVhbCBJZiB3ZSBkaWRuJ3QgZG8gdGhhdCB3ZSB3b3VsZCBlbmQgdXAgcnVubmluZyBvbmVcbiAgICAgICAgLy8gbWF0Y2hlciBhZ2FpbnN0IHRoZSBvdGhlclxuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaXNNYXRjaGVyKGV4cGVjdGF0aW9uT2JqKSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmlzTWF0Y2hlcihhY3R1YWxPYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25PYmoudGVzdChhY3R1YWxPYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbFR5cGUgPSB0eXBlb2YgYWN0dWFsT2JqO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25UeXBlID0gdHlwZW9mIGV4cGVjdGF0aW9uT2JqO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmogfHxcbiAgICAgICAgICAgIGlzTmFOKGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgIGlzTmFOKGV4cGVjdGF0aW9uT2JqKSB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSBudWxsIHx8XG4gICAgICAgICAgICBleHBlY3RhdGlvbk9iaiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFjdHVhbFR5cGUgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uVHlwZSAhPT0gXCJvYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpZGVudGljYWwoYWN0dWFsT2JqLCBleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbGVtZW50cyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwoZXhwZWN0ZWQsIGFjdHVhbClcbiAgICAgICAgaWYgKGlzRWxlbWVudChhY3R1YWxPYmopIHx8IGlzRWxlbWVudChleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc0FjdHVhbERhdGUgPSBpc0RhdGUoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGlzRXhwZWN0YXRpb25EYXRlID0gaXNEYXRlKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgaWYgKGlzQWN0dWFsRGF0ZSB8fCBpc0V4cGVjdGF0aW9uRGF0ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpc0FjdHVhbERhdGUgfHxcbiAgICAgICAgICAgICAgICAhaXNFeHBlY3RhdGlvbkRhdGUgfHxcbiAgICAgICAgICAgICAgICBnZXRUaW1lLmNhbGwoYWN0dWFsT2JqKSAhPT0gZ2V0VGltZS5jYWxsKGV4cGVjdGF0aW9uT2JqKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlVG9TdHJpbmcoYWN0dWFsT2JqKSAhPT0gdmFsdWVUb1N0cmluZyhleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0dWFsT2JqIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIEVycm9yICYmIGV4cGVjdGF0aW9uT2JqIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbENsYXNzID0gZ2V0Q2xhc3MoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGV4cGVjdGF0aW9uQ2xhc3MgPSBnZXRDbGFzcyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxLZXlzID0ga2V5cyhhY3R1YWxPYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25LZXlzID0ga2V5cyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxOYW1lID0gY2xhc3NOYW1lKGFjdHVhbE9iaik7XG4gICAgICAgIHZhciBleHBlY3RhdGlvbk5hbWUgPSBjbGFzc05hbWUoZXhwZWN0YXRpb25PYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25TeW1ib2xzID1cbiAgICAgICAgICAgIHR5cGVPZihnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGdldE93blByb3BlcnR5U3ltYm9scyhleHBlY3RhdGlvbk9iailcbiAgICAgICAgICAgICAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBjYW5ub3QgY29sbGVjdCBjb3ZlcmFnZSBmb3IgZW5naW5lIHRoYXQgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCAqL1xuICAgICAgICAgICAgICAgICAgW107XG4gICAgICAgIHZhciBleHBlY3RhdGlvbktleXNBbmRTeW1ib2xzID0gY29uY2F0KFxuICAgICAgICAgICAgZXhwZWN0YXRpb25LZXlzLFxuICAgICAgICAgICAgZXhwZWN0YXRpb25TeW1ib2xzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzQXJndW1lbnRzKGFjdHVhbE9iaikgfHwgaXNBcmd1bWVudHMoZXhwZWN0YXRpb25PYmopKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsT2JqLmxlbmd0aCAhPT0gZXhwZWN0YXRpb25PYmoubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdHVhbFR5cGUgIT09IGV4cGVjdGF0aW9uVHlwZSB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbENsYXNzICE9PSBleHBlY3RhdGlvbkNsYXNzIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsS2V5cy5sZW5ndGggIT09IGV4cGVjdGF0aW9uS2V5cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAoYWN0dWFsTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbk5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsTmFtZSAhPT0gZXhwZWN0YXRpb25OYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2V0KGFjdHVhbE9iaikgfHwgaXNTZXQoZXhwZWN0YXRpb25PYmopKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWlzU2V0KGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgICAgICAhaXNTZXQoZXhwZWN0YXRpb25PYmopIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsT2JqLnNpemUgIT09IGV4cGVjdGF0aW9uT2JqLnNpemVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGlzU3Vic2V0KGFjdHVhbE9iaiwgZXhwZWN0YXRpb25PYmosIGRlZXBFcXVhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXAoYWN0dWFsT2JqKSB8fCBpc01hcChleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhaXNNYXAoYWN0dWFsT2JqKSB8fFxuICAgICAgICAgICAgICAgICFpc01hcChleHBlY3RhdGlvbk9iaikgfHxcbiAgICAgICAgICAgICAgICBhY3R1YWxPYmouc2l6ZSAhPT0gZXhwZWN0YXRpb25PYmouc2l6ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbWFwc0RlZXBseUVxdWFsID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hcEZvckVhY2goYWN0dWFsT2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcHNEZWVwbHlFcXVhbCA9XG4gICAgICAgICAgICAgICAgICAgIG1hcHNEZWVwbHlFcXVhbCAmJlxuICAgICAgICAgICAgICAgICAgICBkZWVwRXF1YWxDeWNsaWModmFsdWUsIGV4cGVjdGF0aW9uT2JqLmdldChrZXkpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbWFwc0RlZXBseUVxdWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8galF1ZXJ5IG9iamVjdHMgaGF2ZSBpdGVyYXRpb24gcHJvdG9jb2xzXG4gICAgICAgIC8vIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvSXRlcmF0aW9uX3Byb3RvY29sc1xuICAgICAgICAvLyBCdXQsIHRoZXkgZG9uJ3Qgd29yayB3ZWxsIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGNvbmNlcm5pbmcgaXRlcmFibGVzIGJlbG93LFxuICAgICAgICAvLyBzbyB3ZSB3aWxsIGRldGVjdCB0aGVtIGFuZCB1c2UgalF1ZXJ5J3Mgb3duIGVxdWFsaXR5IGZ1bmN0aW9uXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0tIHRoaXMgY2FuIG9ubHkgYmUgdGVzdGVkIGluIHRoZSBgdGVzdC1oZWFkbGVzc2Agc2NyaXB0ICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdHVhbE9iai5jb25zdHJ1Y3RvciAmJlxuICAgICAgICAgICAgYWN0dWFsT2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwialF1ZXJ5XCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBhY3R1YWxPYmouaXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmouaXMoZXhwZWN0YXRpb25PYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlzQWN0dWFsTm9uQXJyYXlJdGVyYWJsZSA9XG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbE9iaikgJiZcbiAgICAgICAgICAgICFpc0FycmF5VHlwZShhY3R1YWxPYmopICYmXG4gICAgICAgICAgICAhaXNBcmd1bWVudHMoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGlzRXhwZWN0YXRpb25Ob25BcnJheUl0ZXJhYmxlID1cbiAgICAgICAgICAgIGlzSXRlcmFibGUoZXhwZWN0YXRpb25PYmopICYmXG4gICAgICAgICAgICAhaXNBcnJheVR5cGUoZXhwZWN0YXRpb25PYmopICYmXG4gICAgICAgICAgICAhaXNBcmd1bWVudHMoZXhwZWN0YXRpb25PYmopO1xuICAgICAgICBpZiAoaXNBY3R1YWxOb25BcnJheUl0ZXJhYmxlIHx8IGlzRXhwZWN0YXRpb25Ob25BcnJheUl0ZXJhYmxlKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsQXJyYXkgPSBBcnJheS5mcm9tKGFjdHVhbE9iaik7XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25BcnJheSA9IEFycmF5LmZyb20oZXhwZWN0YXRpb25PYmopO1xuICAgICAgICAgICAgaWYgKGFjdHVhbEFycmF5Lmxlbmd0aCAhPT0gZXhwZWN0YXRpb25BcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBhcnJheURlZXBseUVxdWFscyA9IHRydWU7XG4gICAgICAgICAgICBldmVyeShhY3R1YWxBcnJheSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGFycmF5RGVlcGx5RXF1YWxzID1cbiAgICAgICAgICAgICAgICAgICAgYXJyYXlEZWVwbHlFcXVhbHMgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVlcEVxdWFsQ3ljbGljKGFjdHVhbEFycmF5W2tleV0sIGV4cGVjdGF0aW9uQXJyYXlba2V5XSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGFycmF5RGVlcGx5RXF1YWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2ZXJ5KGV4cGVjdGF0aW9uS2V5c0FuZFN5bWJvbHMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoYWN0dWFsT2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWN0dWFsVmFsdWUgPSBhY3R1YWxPYmpba2V5XTtcbiAgICAgICAgICAgIHZhciBleHBlY3RhdGlvblZhbHVlID0gZXhwZWN0YXRpb25PYmpba2V5XTtcbiAgICAgICAgICAgIHZhciBhY3R1YWxPYmplY3QgPSBpc09iamVjdChhY3R1YWxWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25PYmplY3QgPSBpc09iamVjdChleHBlY3RhdGlvblZhbHVlKTtcbiAgICAgICAgICAgIC8vIGRldGVybWluZXMsIGlmIHRoZSBvYmplY3RzIHdlcmUgYWxyZWFkeSB2aXNpdGVkXG4gICAgICAgICAgICAvLyAoaXQncyBmYXN0ZXIgdG8gY2hlY2sgZm9yIGlzT2JqZWN0IGZpcnN0LCB0aGFuIHRvXG4gICAgICAgICAgICAvLyBnZXQgLTEgZnJvbSBnZXRJbmRleCBmb3Igbm9uIG9iamVjdHMpXG4gICAgICAgICAgICB2YXIgYWN0dWFsSW5kZXggPSBhY3R1YWxPYmplY3RcbiAgICAgICAgICAgICAgICA/IGluZGV4T2YoYWN0dWFsT2JqZWN0cywgYWN0dWFsVmFsdWUpXG4gICAgICAgICAgICAgICAgOiAtMTtcbiAgICAgICAgICAgIHZhciBleHBlY3RhdGlvbkluZGV4ID0gZXhwZWN0YXRpb25PYmplY3RcbiAgICAgICAgICAgICAgICA/IGluZGV4T2YoZXhwZWN0YXRpb25PYmplY3RzLCBleHBlY3RhdGlvblZhbHVlKVxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmVzIHRoZSBuZXcgcGF0aHMgb2YgdGhlIG9iamVjdHNcbiAgICAgICAgICAgIC8vIC0gZm9yIG5vbiBjeWNsaWMgb2JqZWN0cyB0aGUgY3VycmVudCBwYXRoIHdpbGwgYmUgZXh0ZW5kZWRcbiAgICAgICAgICAgIC8vICAgYnkgY3VycmVudCBwcm9wZXJ0eSBuYW1lXG4gICAgICAgICAgICAvLyAtIGZvciBjeWNsaWMgb2JqZWN0cyB0aGUgc3RvcmVkIHBhdGggaXMgdGFrZW5cbiAgICAgICAgICAgIHZhciBuZXdBY3R1YWxQYXRoID1cbiAgICAgICAgICAgICAgICBhY3R1YWxJbmRleCAhPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgPyBhY3R1YWxQYXRoc1thY3R1YWxJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiBgJHthY3R1YWxQYXRofVske0pTT04uc3RyaW5naWZ5KGtleSl9XWA7XG4gICAgICAgICAgICB2YXIgbmV3RXhwZWN0YXRpb25QYXRoID1cbiAgICAgICAgICAgICAgICBleHBlY3RhdGlvbkluZGV4ICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IGV4cGVjdGF0aW9uUGF0aHNbZXhwZWN0YXRpb25JbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiBgJHtleHBlY3RhdGlvblBhdGh9WyR7SlNPTi5zdHJpbmdpZnkoa2V5KX1dYDtcbiAgICAgICAgICAgIHZhciBjb21iaW5lZFBhdGggPSBuZXdBY3R1YWxQYXRoICsgbmV3RXhwZWN0YXRpb25QYXRoO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHJlY3Vyc2lvbiBpZiBjdXJyZW50IG9iamVjdHMgYXJlIGFscmVhZHkgY29tcGFyZWRcbiAgICAgICAgICAgIGlmIChjb21wYXJlZFtjb21iaW5lZFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoZSBjdXJyZW50IG9iamVjdHMgYW5kIHRoZWlyIHBhdGhzXG4gICAgICAgICAgICBpZiAoYWN0dWFsSW5kZXggPT09IC0xICYmIGFjdHVhbE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHB1c2goYWN0dWFsT2JqZWN0cywgYWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIHB1c2goYWN0dWFsUGF0aHMsIG5ld0FjdHVhbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uSW5kZXggPT09IC0xICYmIGV4cGVjdGF0aW9uT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcHVzaChleHBlY3RhdGlvbk9iamVjdHMsIGV4cGVjdGF0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgIHB1c2goZXhwZWN0YXRpb25QYXRocywgbmV3RXhwZWN0YXRpb25QYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBvYmplY3RzIGFyZSBhbHJlYWR5IGNvbXBhcmVkXG4gICAgICAgICAgICBpZiAoYWN0dWFsT2JqZWN0ICYmIGV4cGVjdGF0aW9uT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29tcGFyZWRbY29tYmluZWRQYXRoXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuZCBvZiBjeWNsaWMgbG9naWNcblxuICAgICAgICAgICAgLy8gbmVpdGhlciBhY3R1YWxWYWx1ZSBub3IgZXhwZWN0YXRpb25WYWx1ZSBpcyBhIGN5Y2xlXG4gICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIG5leHQgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwoXG4gICAgICAgICAgICAgICAgYWN0dWFsVmFsdWUsXG4gICAgICAgICAgICAgICAgZXhwZWN0YXRpb25WYWx1ZSxcbiAgICAgICAgICAgICAgICBuZXdBY3R1YWxQYXRoLFxuICAgICAgICAgICAgICAgIG5ld0V4cGVjdGF0aW9uUGF0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSkoYWN0dWFsLCBleHBlY3RhdGlvbiwgXCIkMVwiLCBcIiQyXCIpO1xufVxuXG5kZWVwRXF1YWxDeWNsaWMudXNlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWxDeWNsaWMoYSwgYiwgbWF0Y2gpO1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBFcXVhbEN5Y2xpYztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC50b1N0cmluZztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBgQ2xhc3NgIGJ5IGNhbGxpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG4gKiB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZSBhcyBgdGhpc2AuIFJldHVybiB2YWx1ZSBpcyBhIGBTdHJpbmdgLCBuYW1pbmcgdGhlXG4gKiBpbnRlcm5hbCBjbGFzcywgZS5nLiBcIkFycmF5XCJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7Kn0gdmFsdWUgLSBBbnkgdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGBDbGFzc2Agb2YgYHZhbHVlYFxuICovXG5mdW5jdGlvbiBnZXRDbGFzcyh2YWx1ZSkge1xuICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkuc3BsaXQoL1sgXFxdXS8pWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldENsYXNzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc05hTiA9IHJlcXVpcmUoXCIuL2lzLW5hblwiKTtcbnZhciBpc05lZ1plcm8gPSByZXF1aXJlKFwiLi9pcy1uZWctemVyb1wiKTtcblxuLyoqXG4gKiBTdHJpY3QgZXF1YWxpdHkgY2hlY2sgYWNjb3JkaW5nIHRvIEVjbWFTY3JpcHQgSGFybW9ueSdzIGBlZ2FsYC5cbiAqXG4gKiAqKkZyb20gdGhlIEhhcm1vbnkgd2lraToqKlxuICogPiBBbiBgZWdhbGAgZnVuY3Rpb24gc2ltcGx5IG1ha2VzIGF2YWlsYWJsZSB0aGUgaW50ZXJuYWwgYFNhbWVWYWx1ZWAgZnVuY3Rpb25cbiAqID4gZnJvbSBzZWN0aW9uIDkuMTIgb2YgdGhlIEVTNSBzcGVjLiBJZiB0d28gdmFsdWVzIGFyZSBlZ2FsLCB0aGVuIHRoZXkgYXJlIG5vdFxuICogPiBvYnNlcnZhYmx5IGRpc3Rpbmd1aXNoYWJsZS5cbiAqXG4gKiBgaWRlbnRpY2FsYCByZXR1cm5zIGB0cnVlYCB3aGVuIGA9PT1gIGlzIGB0cnVlYCwgZXhjZXB0IGZvciBgLTBgIGFuZFxuICogYCswYCwgd2hlcmUgaXQgcmV0dXJucyBgZmFsc2VgLiBBZGRpdGlvbmFsbHksIGl0IHJldHVybnMgYHRydWVgIHdoZW5cbiAqIGBOYU5gIGlzIGNvbXBhcmVkIHRvIGl0c2VsZi5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pZGVudGljYWxcbiAqIEBwYXJhbSB7Kn0gb2JqMSBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHsqfSBvYmoyIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIHdoZW4gdGhlIG9iamVjdHMgYXJlICplZ2FsKiwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaWRlbnRpY2FsKG9iajEsIG9iajIpIHtcbiAgICBpZiAob2JqMSA9PT0gb2JqMiB8fCAoaXNOYU4ob2JqMSkgJiYgaXNOYU4ob2JqMikpKSB7XG4gICAgICAgIHJldHVybiBvYmoxICE9PSAwIHx8IGlzTmVnWmVybyhvYmoxKSA9PT0gaXNOZWdaZXJvKG9iajIpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGljYWw7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldENsYXNzID0gcmVxdWlyZShcIi4vZ2V0LWNsYXNzXCIpO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlzQXJndW1lbnRzXG4gKiBAcGFyYW0gIHsqfSAgb2JqZWN0IC0gVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkge1xuICAgIHJldHVybiBnZXRDbGFzcyhvYmplY3QpID09PSBcIkFyZ3VtZW50c1wiO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuaW5kZXhPZjtcbnZhciBtYXAgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5Lm1hcDtcbnZhciBBUlJBWV9UWVBFUyA9IHJlcXVpcmUoXCIuL2FycmF5LXR5cGVzXCIpO1xudmFyIHR5cGUgPSByZXF1aXJlKFwidHlwZS1kZXRlY3RcIik7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBhcnJheSB0eXBlLCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSAgeyp9ICBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBhcnJheSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0FycmF5VHlwZShvYmplY3QpIHtcbiAgICByZXR1cm4gaW5kZXhPZihtYXAoQVJSQVlfVFlQRVMsIGZ1bmN0aW9uTmFtZSksIHR5cGUob2JqZWN0KSkgIT09IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlUeXBlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGFuIGluc3RhbmNlIG9mIERhdGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7RGF0ZX0gIHZhbHVlIFRoZSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZGl2ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhIERPTSBlbGVtZW50IG5vZGUuXG4gKlxuICogVW5saWtlIFVuZGVyc2NvcmUuanMvbG9kYXNoLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgYG9iamVjdGBcbiAqIGlzIGFuICplbGVtZW50LWxpa2UqIG9iamVjdCwgaS5lLiBhIHJlZ3VsYXIgb2JqZWN0IHdpdGggYSBgbm9kZVR5cGVgXG4gKiBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSB2YWx1ZSBgMWAuXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNFbGVtZW50XG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGZvciBET00gZWxlbWVudCBub2Rlc1xuICovXG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QgfHwgb2JqZWN0Lm5vZGVUeXBlICE9PSAxIHx8ICFkaXYpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBvYmplY3QuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgb2JqZWN0LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRWxlbWVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGl0ZXJhYmxlLCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlzSXRlcmFibGVcbiAqIEBwYXJhbSAgeyp9ICB2YWwgLSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpdGVyYWJsZSwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWwpIHtcbiAgICAvLyBjaGVja3MgZm9yIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB2YWxbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmFibGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYSBNYXBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYE1hcGAsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc01hcCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgTWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29tcGFyZXMgYSBgdmFsdWVgIHRvIGBOYU5gXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGBOYU5gXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgLy8gVW5saWtlIGdsb2JhbCBgaXNOYU5gLCB0aGlzIGZ1bmN0aW9uIGF2b2lkcyB0eXBlIGNvZXJjaW9uXG4gICAgLy8gYHR5cGVvZmAgY2hlY2sgYXZvaWRzIElFIGhvc3Qgb2JqZWN0IGlzc3VlcywgaGF0IHRpcCB0b1xuICAgIC8vIGxvZGFzaFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGAtMGBcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pc05lZ1plcm9cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGAtMGBcbiAqL1xuZnVuY3Rpb24gaXNOZWdaZXJvKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA9PT0gLUluZmluaXR5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmVnWmVybztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gdGhlIHZhbHVlIGlzIGEgcmVndWxhciBPYmplY3QgYW5kIG5vdCBhIHNwZWNpYWxpemVkIE9iamVjdFxuICpcbiAqIFRoaXMgaGVscHMgc3BlZWQgdXAgZGVlcEVxdWFsIGN5Y2xpYyBjaGVja3NcbiAqXG4gKiBUaGUgcHJlbWlzZSBpcyB0aGF0IG9ubHkgT2JqZWN0cyBhcmUgc3RvcmVkIGluIHRoZSB2aXNpdGVkIGFycmF5LlxuICogU28gaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoZVxuICogZXhwZW5zaXZlIG9wZXJhdGlvbiBvZiBzZWFyY2hpbmcgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgdGhlIGFycmF5IG9mIGFscmVhZHlcbiAqIHZpc2l0ZWQgb2JqZWN0c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtvYmplY3R9ICAgdmFsdWUgVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgYHRydWVgIHdoZW4gdGhlIG9iamVjdCBpcyBhIG5vbi1zcGVjaWFsaXNlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgLy8gbm9uZSBvZiB0aGVzZSBhcmUgY29sbGVjdGlvbiBvYmplY3RzLCBzbyB3ZSBjYW4gcmV0dXJuIGZhbHNlXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBTZXQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNTZXRcbiAqIEBwYXJhbSAgeyp9ICB2YWwgLSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBTZXQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGlzU2V0KHZhbCkge1xuICAgIHJldHVybiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWwgaW5zdGFuY2VvZiBTZXQpIHx8IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zZXQuZm9yRWFjaDtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBzMWAgaXMgYSBzdWJzZXQgb2YgYHMyYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QXJyYXl8U2V0fSAgczEgICAgICBUaGUgdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gIHtBcnJheXxTZXR9ICBzMiAgICAgIFRoZSBjb250YWluaW5nIHZhbHVlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGNvbXBhcmUgQSBjb21wYXJpc29uIGZ1bmN0aW9uLCBzaG91bGQgcmV0dXJuIGB0cnVlYCB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWFsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgczFgIGlzIGEgc3Vic2V0IG9mIGBzMmAsIGBmYWxzZWBgIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBpc1N1YnNldChzMSwgczIsIGNvbXBhcmUpIHtcbiAgICB2YXIgYWxsQ29udGFpbmVkID0gdHJ1ZTtcbiAgICBmb3JFYWNoKHMxLCBmdW5jdGlvbiAodjEpIHtcbiAgICAgICAgdmFyIGluY2x1ZGVzID0gZmFsc2U7XG4gICAgICAgIGZvckVhY2goczIsIGZ1bmN0aW9uICh2Mikge1xuICAgICAgICAgICAgaWYgKGNvbXBhcmUodjIsIHYxKSkge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFsbENvbnRhaW5lZCA9IGFsbENvbnRhaW5lZCAmJiBpbmNsdWRlcztcbiAgICB9KTtcblxuICAgIHJldHVybiBhbGxDb250YWluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdWJzZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHNsaWNlID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuc2xpY2U7XG52YXIgdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudHlwZU9mO1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhbiBpdGVyYWJsZSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge29iamVjdH0gb2JqIFRoZSBpdGVyYWJsZSBvYmplY3QgdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gaXRlcmFibGVUb1N0cmluZyhvYmopIHtcbiAgICBpZiAodHlwZU9mKG9iaikgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIG1hcFRvU3RyaW5nKG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlbmVyaWNJdGVyYWJsZVRvU3RyaW5nKG9iaik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIE1hcFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7TWFwfSBtYXAgICAgVGhlIG1hcCB0byBzdHJpbmdpZnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICBBIHN0cmluZyByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBtYXBUb1N0cmluZyhtYXApIHtcbiAgICB2YXIgcmVwcmVzZW50YXRpb24gPSBcIlwiO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmVwcmVzZW50YXRpb24gKz0gYFske3N0cmluZ2lmeShrZXkpfSwke3N0cmluZ2lmeSh2YWx1ZSl9XSxgO1xuICAgIH0pO1xuXG4gICAgcmVwcmVzZW50YXRpb24gPSBzbGljZShyZXByZXNlbnRhdGlvbiwgMCwgLTEpO1xuICAgIHJldHVybiByZXByZXNlbnRhdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBmb3IgYW4gaXRlcmFibGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge29iamVjdH0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2VuZXJpY0l0ZXJhYmxlVG9TdHJpbmcoaXRlcmFibGUpIHtcbiAgICB2YXIgcmVwcmVzZW50YXRpb24gPSBcIlwiO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmVwcmVzZW50YXRpb24gKz0gYCR7c3RyaW5naWZ5KHZhbHVlKX0sYDtcbiAgICB9KTtcblxuICAgIHJlcHJlc2VudGF0aW9uID0gc2xpY2UocmVwcmVzZW50YXRpb24sIDAsIC0xKTtcbiAgICByZXR1cm4gcmVwcmVzZW50YXRpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIGBpdGVtYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtvYmplY3R9IGl0ZW0gVGhlIGl0ZW0gdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBpdGVtYFxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkoaXRlbSkge1xuICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGAnJHtpdGVtfSdgIDogdmFsdWVUb1N0cmluZyhpdGVtKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYWJsZVRvU3RyaW5nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbnZhciBpbmRleE9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuaW5kZXhPZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5mb3JFYWNoO1xudmFyIHR5cGUgPSByZXF1aXJlKFwidHlwZS1kZXRlY3RcIik7XG5cbnZhciBlbmdpbmVDYW5Db21wYXJlTWFwcyA9IHR5cGVvZiBBcnJheS5mcm9tID09PSBcImZ1bmN0aW9uXCI7XG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVlcC1lcXVhbFwiKS51c2UobWF0Y2gpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG52YXIgaXNBcnJheVR5cGUgPSByZXF1aXJlKFwiLi9pcy1hcnJheS10eXBlXCIpO1xudmFyIGlzU3Vic2V0ID0gcmVxdWlyZShcIi4vaXMtc3Vic2V0XCIpO1xudmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlclwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBgYXJyYXlgIGNvbnRhaW5zIGFsbCBvZiBgc3Vic2V0YCBhcyBkZWZpbmVkIGJ5IHRoZSBgY29tcGFyZWBcbiAqIGFyZ3VtZW50XG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFycmF5ICAgQW4gYXJyYXkgdG8gc2VhcmNoIGZvciBhIHN1YnNldFxuICogQHBhcmFtICB7QXJyYXl9IHN1YnNldCAgVGhlIHN1YnNldCB0byBmaW5kIGluIHRoZSBhcnJheVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNvbXBhcmUgQSBjb21wYXJpc29uIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgICBbZGVzY3JpcHRpb25dXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcnJheUNvbnRhaW5zKGFycmF5LCBzdWJzZXQsIGNvbXBhcmUpIHtcbiAgICBpZiAoc3Vic2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGksIGwsIGosIGs7XG4gICAgZm9yIChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgc3Vic2V0WzBdKSkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgayA9IHN1YnNldC5sZW5ndGg7IGogPCBrOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAoaSArIGogPj0gbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShhcnJheVtpICsgal0sIHN1YnNldFtqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyoqXG4gKiBNYXRjaGVzIGFuIG9iamVjdCB3aXRoIGEgbWF0Y2hlciAob3IgdmFsdWUpXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0ubWF0Y2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCBjYW5kaWRhdGUgdG8gbWF0Y2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXRjaGVyT3JWYWx1ZSBBIG1hdGNoZXIgb3IgdmFsdWUgdG8gbWF0Y2ggYWdhaW5zdFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiBgb2JqZWN0YCBtYXRjaGVzIGBtYXRjaGVyT3JWYWx1ZWBcbiAqL1xuZnVuY3Rpb24gbWF0Y2gob2JqZWN0LCBtYXRjaGVyT3JWYWx1ZSkge1xuICAgIGlmIChtYXRjaGVyT3JWYWx1ZSAmJiB0eXBlb2YgbWF0Y2hlck9yVmFsdWUudGVzdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVyT3JWYWx1ZS50ZXN0KG9iamVjdCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKG1hdGNoZXJPclZhbHVlKSkge1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJPclZhbHVlID09PSBvYmplY3Q7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJPclZhbHVlKG9iamVjdCkgPT09IHRydWU7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHZhciBub3ROdWxsID0gdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIiB8fCBCb29sZWFuKG9iamVjdCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG5vdE51bGwgJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RyaW5nKG9iamVjdCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck9yVmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICkgPj0gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlKG9iamVjdCkgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRUaW1lKCkgPT09IG1hdGNoZXJPclZhbHVlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGJhc2ljYWxseSB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGlzIGNvdmVyZWQgKi9cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDE2QXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJVaW50MzJBcnJheVwiOlxuICAgICAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJGbG9hdDY0QXJyYXlcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaXNBcnJheVR5cGUobWF0Y2hlck9yVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgYXJyYXlDb250YWlucyhvYmplY3QsIG1hdGNoZXJPclZhbHVlLCBtYXRjaClcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGNvdmVyZWQgYnkgYSB0ZXN0LCB0aGF0IGlzIG9ubHkgcnVuIGluIElFLCBidXQgd2UgY29sbGVjdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBpbiBub2RlKi9cbiAgICAgICAgICAgIGlmICghZW5naW5lQ2FuQ29tcGFyZU1hcHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhlIEphdmFTY3JpcHQgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSBhbmQgY2Fubm90IHJlbGlhYmx5IGRvIHZhbHVlIGNvbXBhcmlzb24gb2YgTWFwIGluc3RhbmNlc1wiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0eXBlKG9iamVjdCkgPT09IFwiTWFwXCIgJiZcbiAgICAgICAgICAgICAgICBhcnJheUNvbnRhaW5zKFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKG9iamVjdCksXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20obWF0Y2hlck9yVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUob2JqZWN0KSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIFwiU2V0XCI6XG4gICAgICAgICAgICByZXR1cm4gaXNTdWJzZXQobWF0Y2hlck9yVmFsdWUsIG9iamVjdCwgbWF0Y2gpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAobWF0Y2hlck9yVmFsdWUgJiYgdHlwZW9mIG1hdGNoZXJPclZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChtYXRjaGVyT3JWYWx1ZSA9PT0gb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRjaGVyT3JWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvYmplY3QuZ2V0QXR0cmlidXRlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0LmdldEF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtYXRjaGVyT3JWYWx1ZVtwcm9wXSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaGVyT3JWYWx1ZVtwcm9wXSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBtYXRjaGVyT3JWYWx1ZVtwcm9wXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgICAgICAgICAhZGVlcEVxdWFsKHZhbHVlLCBtYXRjaGVyT3JWYWx1ZVtwcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1hdGNoZXIgd2FzIGFuIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgdHlwZVwiKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG5mb3JFYWNoKE9iamVjdC5rZXlzKGNyZWF0ZU1hdGNoZXIpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgbWF0Y2hba2V5XSA9IGNyZWF0ZU1hdGNoZXJba2V5XTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQG1vZHVsZSBzYW1zYW1cbiAqL1xudmFyIGlkZW50aWNhbCA9IHJlcXVpcmUoXCIuL2lkZW50aWNhbFwiKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoXCIuL2lzLWFyZ3VtZW50c1wiKTtcbnZhciBpc0VsZW1lbnQgPSByZXF1aXJlKFwiLi9pcy1lbGVtZW50XCIpO1xudmFyIGlzTmVnWmVybyA9IHJlcXVpcmUoXCIuL2lzLW5lZy16ZXJvXCIpO1xudmFyIGlzU2V0ID0gcmVxdWlyZShcIi4vaXMtc2V0XCIpO1xudmFyIGlzTWFwID0gcmVxdWlyZShcIi4vaXMtbWFwXCIpO1xudmFyIG1hdGNoID0gcmVxdWlyZShcIi4vbWF0Y2hcIik7XG52YXIgZGVlcEVxdWFsQ3ljbGljID0gcmVxdWlyZShcIi4vZGVlcC1lcXVhbFwiKS51c2UobWF0Y2gpO1xudmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlclwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY3JlYXRlTWF0Y2hlcjogY3JlYXRlTWF0Y2hlcixcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbEN5Y2xpYyxcbiAgICBpZGVudGljYWw6IGlkZW50aWNhbCxcbiAgICBpc0FyZ3VtZW50czogaXNBcmd1bWVudHMsXG4gICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgaXNNYXA6IGlzTWFwLFxuICAgIGlzTmVnWmVybzogaXNOZWdaZXJvLFxuICAgIGlzU2V0OiBpc1NldCxcbiAgICBtYXRjaDogbWF0Y2gsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVyeSA9IHJlcXVpcmUoXCIuL3Byb3RvdHlwZXMvYXJyYXlcIikuZXZlcnk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkge1xuICAgIGlmIChjYWxsTWFwW3NweS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxsTWFwW3NweS5pZF0gPCBzcHkuY2FsbENvdW50O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWRqYWNlbnRDYWxscyhjYWxsTWFwLCBzcHksIGluZGV4LCBzcGllcykge1xuICAgIHZhciBjYWxsZWRCZWZvcmVOZXh0ID0gdHJ1ZTtcblxuICAgIGlmIChpbmRleCAhPT0gc3BpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjYWxsZWRCZWZvcmVOZXh0ID0gc3B5LmNhbGxlZEJlZm9yZShzcGllc1tpbmRleCArIDFdKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkgJiYgY2FsbGVkQmVmb3JlTmV4dCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gY2FsbGVkQmVmb3JlIC0gQSBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIGlmIHRoaXMgcHJveHkgd2FzIGNhbGxlZCBiZWZvcmUgYW5vdGhlciBvbmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFNvbWUgaWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjYWxsQ291bnQgLSBOdW1iZXIgb2YgdGltZXMgdGhpcyBwcm94eSBoYXMgYmVlbiBjYWxsZWRcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzcGllcyBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc3VwcGxpZWQgaW5cbiAqXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllcyBBbiBhcnJheSBvZiBwcm94aWVzLCBvciBzZXZlcmFsIHByb3hpZXMgYXMgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHNwaWVzIGFyZSBjYWxsZWQgaW4gb3JkZXIsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBjYWxsZWRJbk9yZGVyKHNwaWVzKSB7XG4gICAgdmFyIGNhbGxNYXAgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICB2YXIgX3NwaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHMgOiBzcGllcztcblxuICAgIHJldHVybiBldmVyeShfc3BpZXMsIGNoZWNrQWRqYWNlbnRDYWxscy5iaW5kKG51bGwsIGNhbGxNYXApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsZWRJbk9yZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi1uYW1lXCIpO1xuXG4vKipcbiAqIFJldHVybnMgYSBkaXNwbGF5IG5hbWUgZm9yIGEgdmFsdWUgZnJvbSBhIGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSB2YWx1ZSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfSBBIHN0cmluZyBvciBudWxsXG4gKi9cbmZ1bmN0aW9uIGNsYXNzTmFtZSh2YWx1ZSkge1xuICAgIHJldHVybiAoXG4gICAgICAgICh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB8fFxuICAgICAgICAvLyBUaGUgbmV4dCBicmFuY2ggaXMgZm9yIElFMTEgc3VwcG9ydCBvbmx5OlxuICAgICAgICAvLyBCZWNhdXNlIHRoZSBuYW1lIHByb3BlcnR5IGlzIG5vdCBzZXQgb24gdGhlIHByb3RvdHlwZVxuICAgICAgICAvLyBvZiB0aGUgRnVuY3Rpb24gb2JqZWN0LCB3ZSBmaW5hbGx5IHRyeSB0byBncmFiIHRoZVxuICAgICAgICAvLyBuYW1lIGZyb20gaXRzIGRlZmluaXRpb24uIFRoaXMgd2lsbCBuZXZlciBiZSByZWFjaGVkXG4gICAgICAgIC8vIGluIG5vZGUsIHNvIHdlIGFyZSBub3QgYWJsZSB0byB0ZXN0IHRoaXMgcHJvcGVybHkuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Z1bmN0aW9uL25hbWVcbiAgICAgICAgKHR5cGVvZiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lKHZhbHVlLmNvbnN0cnVjdG9yKSkgfHxcbiAgICAgICAgbnVsbFxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBpbnZva2UgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIGFuZCBwcmludCBhXG4gKiBkZXByZWNhdGlvbiB3YXJuaW5nIHRvIHRoZSBjb25zb2xlIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSAge3N0cmluZ30gbXNnXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydHMud3JhcCA9IGZ1bmN0aW9uIChmdW5jLCBtc2cpIHtcbiAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwb3J0cy5wcmludFdhcm5pbmcobXNnKTtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGlmIChmdW5jLnByb3RvdHlwZSkge1xuICAgICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IGZ1bmMucHJvdG90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBjYW4gYmUgc3VwcGxpZWQgdG8gYHdyYXAoKWAgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYVxuICogcGFydGljdWxhciBwYXJ0IG9mIHRoZSBzaW5vbiBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhY2thZ2VOYW1lXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGZ1bmNOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmRlZmF1bHRNc2cgPSBmdW5jdGlvbiAocGFja2FnZU5hbWUsIGZ1bmNOYW1lKSB7XG4gICAgcmV0dXJuIGAke3BhY2thZ2VOYW1lfS4ke2Z1bmNOYW1lfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIEFQSSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mICR7cGFja2FnZU5hbWV9LmA7XG59O1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgb24gdGhlIGNvbnNvbGUsIHdoZW4gaXQgZXhpc3RzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBtc2dcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmV4cG9ydHMucHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKG1zZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZW1pdFdhcm5pbmcpIHtcbiAgICAgICAgLy8gRW1pdCBXYXJuaW5ncyBpbiBOb2RlXG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobXNnKTtcbiAgICB9IGVsc2UgaWYgKGNvbnNvbGUuaW5mbykge1xuICAgICAgICBjb25zb2xlLmluZm8obXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBmbiByZXR1cm5zIHRydWUgZm9yIGFsbCBtZW1iZXJzIG9mIG9iai5cbiAqIFRoaXMgaXMgYW4gZXZlcnkgaW1wbGVtZW50YXRpb24gdGhhdCB3b3JrcyBmb3IgYWxsIGl0ZXJhYmxlc1xuICpcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXZlcnkob2JqLCBmbikge1xuICAgIHZhciBwYXNzID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvd2luZyBhbiBlcnJvciBpcyB0aGUgb25seSB3YXkgdG8gYnJlYWsgYGZvckVhY2hgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXNzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBkaXNwbGF5IG5hbWUgZm9yIGEgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmdW5jdGlvbk5hbWUoZnVuYykge1xuICAgIGlmICghZnVuYykge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZnVuYy5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgZnVuYy5uYW1lIHx8XG4gICAgICAgICAgICAvLyBVc2UgZnVuY3Rpb24gZGVjb21wb3NpdGlvbiBhcyBhIGxhc3QgcmVzb3J0IHRvIGdldCBmdW5jdGlvblxuICAgICAgICAgICAgLy8gbmFtZS4gRG9lcyBub3QgcmVseSBvbiBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIHRvIHdvcmsgLSBpZiBpdFxuICAgICAgICAgICAgLy8gZG9lc24ndCBkZWJ1Z2dpbmcgd2lsbCBiZSBzbGlnaHRseSBsZXNzIGluZm9ybWF0aXZlXG4gICAgICAgICAgICAvLyAoaS5lLiB0b1N0cmluZyB3aWxsIHNheSAnc3B5JyByYXRoZXIgdGhhbiAnbXlGdW5jJykuXG4gICAgICAgICAgICAoU3RyaW5nKGZ1bmMpLm1hdGNoKC9mdW5jdGlvbiAoW15cXHMoXSspLykgfHwgW10pWzFdXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTdHJpbmdpZnkgbWF5IGZhaWwgYW5kIHdlIG1pZ2h0IGdldCBhbiBleGNlcHRpb24sIGFzIGEgbGFzdC1sYXN0XG4gICAgICAgIC8vIHJlc29ydCBmYWxsIGJhY2sgdG8gZW1wdHkgc3RyaW5nLlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAdHlwZSB7b2JqZWN0fSBnbG9iYWxPYmplY3RcbiAqL1xudmFyIGdsb2JhbE9iamVjdDtcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gTm9kZVxuICAgIGdsb2JhbE9iamVjdCA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIEJyb3dzZXJcbiAgICBnbG9iYWxPYmplY3QgPSB3aW5kb3c7XG59IGVsc2Uge1xuICAgIC8vIFdlYldvcmtlclxuICAgIGdsb2JhbE9iamVjdCA9IHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzb3J0ID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zb3J0O1xudmFyIHNsaWNlID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zbGljZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb21wYXJhdG9yKGEsIGIpIHtcbiAgICAvLyB1dWlkLCB3b24ndCBldmVyIGJlIGVxdWFsXG4gICAgdmFyIGFDYWxsID0gYS5nZXRDYWxsKDApO1xuICAgIHZhciBiQ2FsbCA9IGIuZ2V0Q2FsbCgwKTtcbiAgICB2YXIgYUlkID0gKGFDYWxsICYmIGFDYWxsLmNhbGxJZCkgfHwgLTE7XG4gICAgdmFyIGJJZCA9IChiQ2FsbCAmJiBiQ2FsbC5jYWxsSWQpIHx8IC0xO1xuXG4gICAgcmV0dXJuIGFJZCA8IGJJZCA/IC0xIDogMTtcbn1cblxuLyoqXG4gKiBBIFNpbm9uIHByb3h5IG9iamVjdCAoZmFrZSwgc3B5LCBzdHViKVxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpbm9uUHJveHlcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldENhbGwgLSBBIG1ldGhvZCB0aGF0IGNhbiByZXR1cm4gdGhlIGZpcnN0IGNhbGxcbiAqL1xuXG4vKipcbiAqIFNvcnRzIGFuIGFycmF5IG9mIFNpbm9uUHJveHkgaW5zdGFuY2VzIChmYWtlLCBzcHksIHN0dWIpIGJ5IHRoZWlyIGZpcnN0IGNhbGxcbiAqXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllc1xuICogQHJldHVybnMge1Npbm9uUHJveHlbXX1cbiAqL1xuZnVuY3Rpb24gb3JkZXJCeUZpcnN0Q2FsbChzcGllcykge1xuICAgIHJldHVybiBzb3J0KHNsaWNlKHNwaWVzKSwgY29tcGFyYXRvcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3JkZXJCeUZpcnN0Q2FsbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIElzIHRydWUgd2hlbiB0aGUgZW52aXJvbm1lbnQgY2F1c2VzIGFuIGVycm9yIHRvIGJlIHRocm93biBmb3IgYWNjZXNzaW5nIHRoZVxuICogX19wcm90b19fIHByb3BlcnR5LlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHN1cHBvcnQgYG5vZGUgLS1kaXNhYmxlLXByb3RvPXRocm93YC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L3Byb3RvXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmxldCB0aHJvd3NPblByb3RvO1xudHJ5IHtcbiAgICBjb25zdCBvYmplY3QgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG8sIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIG9iamVjdC5fX3Byb3RvX187XG4gICAgdGhyb3dzT25Qcm90byA9IGZhbHNlO1xufSBjYXRjaCAoXykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIGNvdmVyZWQgd2hlbiB0ZXN0cyBhcmUgcnVuIHdpdGggYC0tZGlzYWJsZS1wcm90bz10aHJvd2AsXG4gICAgLy8gaG93ZXZlciB3ZSBjYW4gdGVzdCBib3RoIGJyYW5jaGVzIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHRoaXMgaXMgaWdub3JlZFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3dzT25Qcm90byA9IHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGhyb3dzT25Qcm90bztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoXCJ0eXBlLWRldGVjdFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb3dlci1jYXNlIHJlc3VsdCBvZiBydW5uaW5nIHR5cGUgZnJvbSB0eXBlLWRldGVjdCBvbiB0aGUgdmFsdWVcbiAqXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0eXBlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZSh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWx1ZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWVUb1N0cmluZztcbiIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxudmFyIGVuY29kaW5nID0gcmVxdWlyZShcIi4vbGliL2VuY29kaW5nLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVGV4dEVuY29kZXI6IGVuY29kaW5nLlRleHRFbmNvZGVyLFxuICBUZXh0RGVjb2RlcjogZW5jb2RpbmcuVGV4dERlY29kZXIsXG59O1xuIiwiKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiAgfVxuXG4gIGdsb2JhbFtcImVuY29kaW5nLWluZGV4ZXNcIl0gPVxue1xuICBcImJpZzVcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxNzAwMDAsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0MDAwLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMjAwMCwyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEsMjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQyMjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwxMzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEzODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEzNzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywzNTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMzMDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcsMTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAxLDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4NiwxNTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgyMDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQyODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDksMjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQsMTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAzOTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEyMDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAsMTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcsMTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwxNjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQsMTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQsMTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIsMTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwxOTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2NzkzLDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIxNTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAsMjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUyNywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYzNTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyMDAwLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMTAwMCwyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzMDAwMCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyMzAwMCwyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMjAwMCwzMjAwOSwzMjAwNywzMjAwNCwzMjAwNiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwzMzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwzMzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwzMzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMzMSwzNTk5OCwzNjAwMCwzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNjAwMCwyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzNzAwMCwzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwzODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwzOTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwzOTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwyODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0NiwyOTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4NiwzMDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3NiwzNTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwzNTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwzNjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgzMiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOTAwMCwzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzODAwMCwzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyODAwMCwyODA1NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywyODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwyODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwyODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQzNCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwyOTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwzMDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwzMDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2NiwzMTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2NywzMTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5NiwzMTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAxNCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAxNSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYwMywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwzMzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwzMzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwzMzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwzNDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwzNDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwzNDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIxNCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwzNzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5MiwzODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5MiwyMDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUwMSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwyMTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwyMTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywyMTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUwOSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwyMzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwyMzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywyMzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEyMSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwyNDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3NiwyNDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2NiwyNDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUxNSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywyNTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1NiwyNTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwyNjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0MywyNzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwyNzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3NiwyODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEyNSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwyODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0NywyODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwyOTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcwMywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwzMDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwzMDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5MywzMDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIyNiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUyNCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5NiwzMTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwzMjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2MiwzMjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcxMSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgzOSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwzMzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwzMzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwzMzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwzNDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4NiwzNDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwzNDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAwNSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5NywzNzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywzNzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwzNzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUxMywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYzNSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwyMDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwyMTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwyMTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkwMiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2MiwyMzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwyMzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwyMzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUwNSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2MiwyMzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4NiwyNDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4MiwyNDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUzOSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwyNTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0NywyNTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2MiwyNTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIyNSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgzNSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwyNjg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwyNjg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwyNjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIzMSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwyODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwyODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1NiwyODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwyOTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwyOTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwyOTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUzNCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwzMDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwzMDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwzMTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkwNSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEwNiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwzMjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0NywzMjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywzMzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgxMCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzczNiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywzMzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwzMzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwzMzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUzMSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkwMSwzNTAwMiwzNTAzMSwzNTAwMSwzNTAwMCwzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyNzAwMCwyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNDAwMCwzMzk0OSwzMzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5NiwzMzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwzMzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYwNiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYwNCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYwNSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2MywzNTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwzNTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwzNTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwzNzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwzNzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwzNzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUyNSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUxMCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUzMywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwzODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwzOTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2MywzOTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4NiwyMjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwyMjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwyMjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMxMSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwyNDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwyNTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwyNDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwyNzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwyNzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwyNzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwyODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwyODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwyODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEwNiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwyOTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwyOTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwyOTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkwNywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkxNSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwzMTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3MywzMTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0NywzMjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2MywzNDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwzNDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1NiwzNDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAzOCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwzNDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwzNDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1MywzNDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIzNSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwzNTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwzNTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3MiwzNjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwzNzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwzNzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwzNzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYwOCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwzODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2MywzODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwzODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwyMDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEyNSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcyOCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcyNiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwyMzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4MiwyMzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2NywyNDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNTAwMCwyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNDAwMCwyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0MDAwMCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sXG4gIFwiZXVjLWtyXCI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2MDAwLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4MDAwLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAwLDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQyLDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEyLDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIxLDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4MzgzLDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4MzkyLDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAxLDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQyLDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUwLDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAwLDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcyLDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4NjkwLDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAzLDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4NzcwLDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQwLDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAzLDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUyLDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5MDAwLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDUwMDAwLDUwMDAxLDUwMDAyLDUwMDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUwMDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUwMDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUwMDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUwMDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkxLDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUwMTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUwMTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUwMTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYyLDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcyLDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUwMTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUwMTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUwMTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEzLDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIxLDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUwMjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUwMjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUwMjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUwMzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUwMzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUwMzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMzLDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUwMzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUwMzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkxLDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUwNDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUwNDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUwNDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUzLDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYxLDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUwNDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUwNDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUwNDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUwNTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUwNTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUwNTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUwNjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUwNjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgzLDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUwNzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUwNzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUwNzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzkyLDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUwODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUwODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUwODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUwODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUwOTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIzLDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMzLDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUwOTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUwOTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUwOTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkwLDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxMDAwLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDUwMDAsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDcwMDAsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcwNDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcxMDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcxMTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAsNDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYsNDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcsNDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDczMjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDczNDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDczOTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIsNTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgsNTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYsNTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUsNTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUsNTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAsNDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEsNDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYsNDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3MjksNDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEsNDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQsNDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4MzgsNTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQsNTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEsNTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMsNTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAsNDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAsNDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgwNDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAsNDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMsNDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUsNDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgxOTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgyMDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgyNjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMsNTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEsNTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5MjksNTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMsNTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEsNTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAsNTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQwMDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgyOTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgzMDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQsNDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMsNDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcsNDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgsNDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUsNDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAsNTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQwMzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQwNDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcsNTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgsNTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcsNTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQwOTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQxMDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQxMTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIsNDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQsNDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQsNDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAsNDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcsNDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQsNDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkzNTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkzNzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQxMjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIsNTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAsNTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIsNTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQxNzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQxODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUsNTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEsNTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIsNTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQsNDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgsNDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1MjgsNDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYsNDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMsNTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAsNTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQyNjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQyNzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgsNTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYsNTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQzMTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQzMTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQzMjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIsNDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEsNDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEsNDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgsNTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUsNTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAsNTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQzMjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQzMzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQzNDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgsNTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYsNTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQzODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQzOTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcsNTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQsNTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYsNTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDksNTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAsNTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYsNTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQsNTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAsNTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgsNTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODksNTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgsNTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODksNTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQsNTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3MjgsNTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQsNTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAsNTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAsNTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMsNTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1NjksNTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYsNTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUsNTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYsNTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQsNTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEwMDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEwMjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEwMzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzksNTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODksNTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUsNTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTExNDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTExNzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEyMTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDksNTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYsNTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIsNTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgsNTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUsNTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEyMTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEyMzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEyNjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMsNTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgsNTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYsNTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMsNTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgsNTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQsNTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcsNTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUsNTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAsNTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUsNTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAsNTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTIwMDAsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTUwMDAsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTMwMDAsNTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQsNTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgsNTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMxMzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMyMTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMyNDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcsNTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUsNTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYsNTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUwOTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUxMDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUxMTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIsNTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEsNTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUxNzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUxNzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMzMzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0MjksNTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgsNTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0NjgsNTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAsNTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3NjcsNTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAsNTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUxOTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUyMDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYsNTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUsNTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMsNTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTQwMDAsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMjAwMCwzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzNzAwMCwxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwyODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywzOTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwzNTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywyMDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5NiwzMjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4MiwyMTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwyNjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwyOTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMwMiw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwyNzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwzMzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwyMjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwyMTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwyNjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwzMjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQyMCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3NiwyMTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1NiwyNjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0MiwzMDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwzNjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwyMDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwyNTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwyNDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwyNDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwzNDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcyMSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwyMTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3NiwzNjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0MywyNDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwzNTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODkyNSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIzOCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNjAwMCwzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNjAwMCwyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMTAwMCwyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMzMCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQyNywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODkyOCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwyNzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcxMSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5MywyOTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwzOTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwzNDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwyMzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywyNTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5MiwzOTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwzNjc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwyMzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwzNDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywzODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwyOTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywzNDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywyMTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwyMzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2MCw2Mzk0MiwzODQ5OCwzOTAwMCw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzMDAwMCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQzOSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAxOSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQzNCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwxOTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3NiwyMjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3MywyNTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywyNTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwyNjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwyOTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwyOTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYxOCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwyNjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwyODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwzMjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkwOSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgwMywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4NywyNzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywyODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwyMDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwyODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwzMjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMzNywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwzODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwyNDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4NywzNDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwyMDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0NiwyNzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwzNjk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAxMywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwyMzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwyNjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwzMTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwyNDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1NywyNTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAyOSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMwNywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQzMywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwyODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwzNTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwzMDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NDAwMCwyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyNzAwMCwyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJnYjE4MDMwXCI6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDIwMDAwLDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIwMDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIwMDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkzLDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAxLDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIwMTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIwMTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIwMTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIwMjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIwMjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMxLDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIwMzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIwMzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIwNDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUwLDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIwNDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIwNDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMwLDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIwNTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkzLDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAxLDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIwNjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIwNjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcyLDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIwNjk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIwNzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMyLDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIwNzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIwNzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIwODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIwODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIwODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAyLDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEwLDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIwOTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIwOTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIzLDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIxMDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIxMDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTkyLDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAxLDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjExLDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIxMjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIxMjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIxMjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIxMzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIxMzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIxMzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzkyLDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAxLDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIxNDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIxNDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDczLDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAzLDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIxNTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIxNTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIxNjg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIxNjk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIxNzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUxLDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcyLDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIxNzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIxODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIxODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQyLDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUwLDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIxODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIxOTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIxOTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIxOTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIyMDAwLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0MDAwLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5MDAwLDI5MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkzLDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEwLDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYwLDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQyLDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMxLDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjExLDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzExLDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIzMCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAxLDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcyMyw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcyOSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODczNiw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEyLDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgzLDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkwLDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMyLDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYxLDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5MDAwLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0MywzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzEwMDAsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjUwMDAsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYwOTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcwODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgsMzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgsNDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgsMjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTksMzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYsMzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAsMzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTksMzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQzODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUsMjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYsMzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgsMjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUzODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEyMjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMsMjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2NjksMzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIsMzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODksMzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzIwMDAsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsMzAwMDAsMjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcsMzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUsMzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIsMzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYsMzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYsMzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAsMzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAxNzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEzNjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEsMzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIsMjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUsMjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgyODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcsMzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTksMzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgsMzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2NjgsMzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2NzcsMzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODksMzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUsMjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTksMzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTksMjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUxMDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgwNTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAsMzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQsMjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIsMjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIsMzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4MzksMzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYsMzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMsMzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgxMTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAzODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAsMzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQsMzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMsMjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcyMzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEwNjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgsMzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQsMzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIsMzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5MzcsMzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAsMzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAsMzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAsMjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQsMjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIsMjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcyNjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQsMzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcsMzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMsMjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzUwMDAsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzYwMDAsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjEwMDAsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYsMjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjksMjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEsMjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYwMTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYwMjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYwMjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMsMzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDksMzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYsMzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYwNzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYwNzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYwODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgsMzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQsMzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEsMjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgsMjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQsMjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcsMjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEyNDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMwNDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQsMzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAsMzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgsMzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYyMTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYyMjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYyMzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMsMzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEsMzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgsMzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYyOTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYzMDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYsMzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgsMzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAsMzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMsMzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYsMzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEsMzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYzMjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYzMzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYzNTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAsMzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcsMzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODksMzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMsMzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUsMzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAsMzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcxNjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEyMDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEsMjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMsMjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQsMjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAsMzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODksMzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgsMzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgsMzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQsMzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIsMzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgsMzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEsMzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIsMzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUsMzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMsMzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcsMzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAsMzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYsMzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMsMzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUsMzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIsMzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYsMzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQsMzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5MjgsMzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAsMzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzQwMDAsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjgwMDAsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzcwMDAsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcsMzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMsMzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMsMzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDksMzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYsMzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjMwMDAsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDAsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjcwMDAsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEsMjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMsMjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTksMjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcyNjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3MjcsMzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3MzgsMzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgzNzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUsMzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEsMzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIsMzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIsMjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAsMjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYxNjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYyMDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAsMzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgsMzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQsMzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkzMjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1NjksMzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUsMzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYsMzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMsMzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2NjcsMzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2NzksMzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgsMzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEsMzI5OTksMzMwMDAsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjYwMDAsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzkwMDAsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAsMzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYsMzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIsMzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAwMzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAwODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEsMzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMsMzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAsMzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgwODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgwOTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgxMDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYsMzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEsMzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQsMzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkwOTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkxMDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkxMTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYsMzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIsMzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEsMzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkxNjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkxNzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgxMjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQsMzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQsMzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUsMzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgyMTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgyMjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgyMzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDksMzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgsMzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMsMzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkxODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkxOTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEsMzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzkyNDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzkyNTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMsMzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTksMzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQsMzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAsNDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYsNDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIsMzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAxODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAxOTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAyMzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgsMzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUsMzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkzNTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkzNjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkzNzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUsMzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEsMzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgsMzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAyNjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAyNjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMsMzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIsMzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAsMzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUwNjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUwOTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUxNzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYsMzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEsMzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMsMzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYsMzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIsMzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0NjksMzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEsMzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUsMzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQsMzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAsMzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAsMzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYsMzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1MjcsMzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUsMzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAsMzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAsMzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2NjksMzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMsMzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYsMzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgsMzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIsMzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYsMzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODksMzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAsMzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIsMzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIsMzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUsMzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMzODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUxNjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQsMzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMsMzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAsMzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYxOTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcxOTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIsMzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4MjgsMzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUsMzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4NzcsMzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMsMzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAsMzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcyNDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcyNTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcyOTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcsMzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQsMzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMsMzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIsMzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIsMzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYsMzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgsMzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQsMzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMsMzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAsMzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4MzcsNDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAwNjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQsNDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEsNDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAsNDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAxMzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5OTgsMzk5OTksNDAwMDAsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNTgwMDAsNTgwMDEsNDAyNTksNDAyNjAsNDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYsNDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMsNDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAyODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAyOTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAzMDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUsNDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEsNDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgsNDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAzNDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgwMDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcsNTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMsNTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAsNTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgwNDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgwNTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgwNTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIsNTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgsNTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUsNTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAzNTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAzNjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAzNzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYsNDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIsNDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTksNDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEsNDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcsNDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTksNTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgxMTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgxMjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgxMjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEsNTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcsNTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQsNTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgxNjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgxNzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgxODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcsNDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAsNDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMsNDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIsNDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIsNDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgxOTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAsNTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYsNTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMsNTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgyMzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgyNDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgyNTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUsNTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEsNTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgsNTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMsNDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIsNDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcsNDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUsNTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIsNTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgzMDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgzMTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgzMjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQsNTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAsNTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcsNTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgzNjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgzNjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgzNzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAsNDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3NzcsNDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYsNDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4MjgsNDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYsNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMsNDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgzODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgzODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMsNTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDksNTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYsNTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgsNTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQsNTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEsNjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQwNDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAsMTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAsMTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEsMTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIsNTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0NzgsNTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUsNTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1MjcsNTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMsNTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAsNTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLFxuICBcImdiMTgwMzAtcmFuZ2VzXCI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEwMCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNdLFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxbMTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcxXSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQxLDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0sWzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0sWzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQsODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgzODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQsODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYsODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10sWzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkwNDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYyMl0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0sWzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10sWzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsxMTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRdLFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJdLFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsxMTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjddLFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMsMTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMsMTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUxODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUsMTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxbMTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxbMTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxbMzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4OTAwMCw2NTUzNl1dLFxuICBcImppczAyMDhcIjpbMTIyODgsMTIyODksMTIyOTAsNjUyOTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAsNjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwxODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3NiwxMzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwxMzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwxMzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEyOTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEyODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywyNDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5NywyNjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwyMjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIzOSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwyNDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwzODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwzMjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywzNTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwyNDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwyMjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUwMywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgzMCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwyMzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwzMzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwyODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIzMywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4NiwzNDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwzMzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwyMDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkxMywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAyOCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwzOTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywzNDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywyNTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEwNiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwzODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwzNzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwyMTAwMCwzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOTAwMCwyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMjAwMCwyNDUwOSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEzOCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0NywzMjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwzODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwzMDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAyNiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywzNzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwyMDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwyMDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAxNiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwyMjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1MywyOTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwzNDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUxMCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUzMywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwyNjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwzNDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1MiwzMTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkzNSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMzMSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywyNTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwyNzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2MywyNjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIxMSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwyODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwzNTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwyMjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2MiwzOTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwyMDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwyMTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIxOCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMwNCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwzMjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwzMzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwzNjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwyMDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwyNTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwzMjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQwOCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwzMzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwyNjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4NiwyNzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgzMCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0MiwyMzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwyOTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwzNzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAzMSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwzMzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwzNTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywyMDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkxMywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYwMCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwzNDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwzNDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwyNjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQxNywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5MywzMjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0NywyMzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwzMTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIyOCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMxMywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwyMDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwzOTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0NywyODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYwNCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwyMzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5NiwyNDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwyNTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwzODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwyMDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwyNDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwyODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwzMjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywzNjc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgwNSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIxOCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUxMiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwyMzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwyNjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwyNTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5NiwyNTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwzMTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0NywzMDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywzMzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwzNjk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5MiwyODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQwMSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDczNiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwyNTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwyNjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwzMDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwzNDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2MiwyNTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwzNTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkwNywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwyODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3NiwyNTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwyODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUwNCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0MywyMjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3MywzMDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3NywyNjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAxMywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwyMDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5MywyNDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwyNjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwzNDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwyMjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3MiwyMDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcxNiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQyMCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwyODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwzNzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwzMjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzMDAwMCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNjAwMCwyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwyNjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2MywyNjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwzMzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQyNiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwyOTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0MiwyMzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwyNjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNjAwMCwzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3MDAwLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0MDAwLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAyLDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTczLDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcwLDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgxLDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDczLDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMzLDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcwLDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEwLDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIzLDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUwLDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcxLDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEzLDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAzLDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAxLDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3NDE3LDM4MDAwLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImppczAyMTJcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMxLDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVsbCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVsbCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDExMTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGwsMzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMyOSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAsMTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIwMywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgsMzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEsMjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3MiwyMjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTksNDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgwLDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIwMDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIwMTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIwMTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIwMzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIwMzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgzLDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIwNDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIwNTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIwNjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAzLDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQzLDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIwNzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIwODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkzLDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIxMDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIxMDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIyLDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIxMTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIxMjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIxMjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIxNDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIxNDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUxLDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIxNjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIxNjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIxODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIxODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIxODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIyMDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIyMDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAwLDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIyMjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIyMjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUzLDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgyLDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIyMzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIyMzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIyMzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIwLDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIyNTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIyNTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIyNTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMxLDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIyNjk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIyNzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIyNzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEzLDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMyLDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIyOTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIyOTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIyOTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIyLDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIzMTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIzMTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYwLDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIzMzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIzMzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIzNDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAxLDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIzNTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIzNTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIzNjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzExLDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMyLDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIzODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIzODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIzODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYzLDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0MzgxLDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIwLDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcxLDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5LDI0OTkxLDI0OTkyLDI0OTk3LDI1MDAwLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3MDAwLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwiaWJtODY2XCI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSxcbiAgXCJpc28tODg1OS0yXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLFxuICBcImlzby04ODU5LTNcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLFxuICBcImlzby04ODU5LTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sXG4gIFwiaXNvLTg4NTktNVwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSxcbiAgXCJpc28tODg1OS02XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImlzby04ODU5LTdcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJpc28tODg1OS04XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcImlzby04ODU5LTEwXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSxcbiAgXCJpc28tODg1OS0xM1wiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sXG4gIFwiaXNvLTg4NTktMTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLFxuICBcImlzby04ODU5LTE1XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSxcbiAgXCJpc28tODg1OS0xNlwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSxcbiAgXCJrb2k4LXJcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJrb2k4LXVcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJtYWNpbnRvc2hcIjpbMTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIyOCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwyMDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3MzMsNzMxLDcxMV0sXG4gIFwid2luZG93cy04NzRcIjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAxLDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgsMzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEsMzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTBcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUzLDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQsMjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUxLDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSxcbiAgXCJ3aW5kb3dzLTEyNTFcIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEwMzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwxNjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDNdLFxuICBcIndpbmRvd3MtMTI1MlwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLFxuICBcIndpbmRvd3MtMTI1M1wiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTRcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwzNTEsMjU1XSxcbiAgXCJ3aW5kb3dzLTEyNTVcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0NjIsMTQ2MywxNDY0LDE0NjUsMTQ2NiwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIzLDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcIndpbmRvd3MtMTI1NlwiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgyMDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIsMTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYwOCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSxcbiAgXCJ3aW5kb3dzLTEyNTdcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3MjldLFxuICBcIndpbmRvd3MtMTI1OFwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjExLDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgwMywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsNDMyLDgzNjMsMjU1XSxcbiAgXCJ4LW1hYy1jeXJpbGxpY1wiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTExMCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywxMTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEwOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDExMDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XVxufTtcblxuLy8gRm9yIHN0cmljdCBlbnZpcm9ubWVudHMgd2hlcmUgYHRoaXNgIGluc2lkZSB0aGUgZ2xvYmFsIHNjb3BlXG4vLyBpcyBgdW5kZWZpbmVkYCwgdGFrZSBhIHB1cmUgb2JqZWN0IGluc3RlYWRcbn0odGhpcyB8fCB7fSkpOyIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEdsb2JhbCB8dGhpc3wgcmVxdWlyZWQgZm9yIHJlc29sdmluZyBpbmRleGVzIGluIG5vZGUuXG4gKiBAc3VwcHJlc3Mge2dsb2JhbFRoaXN9XG4gKi9cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIElmIHdlJ3JlIGluIG5vZGUgcmVxdWlyZSBlbmNvZGluZy1pbmRleGVzIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGdsb2JhbC5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAhZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXSkge1xuICAgIGdsb2JhbFtcImVuY29kaW5nLWluZGV4ZXNcIl0gPVxuICAgICAgcmVxdWlyZShcIi4vZW5jb2RpbmctaW5kZXhlcy5qc1wiKVtcImVuY29kaW5nLWluZGV4ZXNcIl07XG4gIH1cblxuICAvL1xuICAvLyBVdGlsaXRpZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGEgVGhlIG51bWJlciB0byB0ZXN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluIFRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgPj0gbWluIGFuZCBhIDw9IG1heC5cbiAgICovXG4gIGZ1bmN0aW9uIGluUmFuZ2UoYSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluIDw9IGEgJiYgYSA8PSBtYXg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHshQXJyYXkuPCo+fSBhcnJheSBUaGUgYXJyYXkgdG8gY2hlY2suXG4gICAqIEBwYXJhbSB7Kn0gaXRlbSBUaGUgaXRlbSB0byBsb29rIGZvciBpbiB0aGUgYXJyYXkuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGl0ZW0gYXBwZWFycyBpbiB0aGUgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbiAgfVxuXG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBmdW5jdGlvbiBUb0RpY3Rpb25hcnkobykge1xuICAgIGlmIChvID09PSB1bmRlZmluZWQpIHJldHVybiB7fTtcbiAgICBpZiAobyA9PT0gT2JqZWN0KG8pKSByZXR1cm4gbztcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGRpY3Rpb25hcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIElucHV0IHN0cmluZyBvZiBVVEYtMTYgY29kZSB1bml0cy5cbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBDb2RlIHBvaW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQ29kZVBvaW50cyhzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGVcblxuICAgIC8vIDEuIExldCBTIGJlIHRoZSBET01TdHJpbmcgdmFsdWUuXG4gICAgdmFyIHMgPSBTdHJpbmcoc3RyaW5nKTtcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBsZW5ndGggb2YgUy5cbiAgICB2YXIgbiA9IHMubGVuZ3RoO1xuXG4gICAgLy8gMy4gSW5pdGlhbGl6ZSBpIHRvIDAuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgLy8gNC4gSW5pdGlhbGl6ZSBVIHRvIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIFVuaWNvZGUgY2hhcmFjdGVycy5cbiAgICB2YXIgdSA9IFtdO1xuXG4gICAgLy8gNS4gV2hpbGUgaSA8IG46XG4gICAgd2hpbGUgKGkgPCBuKSB7XG5cbiAgICAgIC8vIDEuIExldCBjIGJlIHRoZSBjb2RlIHVuaXQgaW4gUyBhdCBpbmRleCBpLlxuICAgICAgdmFyIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIC8vIDIuIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYzpcblxuICAgICAgLy8gYyA8IDB4RDgwMCBvciBjID4gMHhERkZGXG4gICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgIC8vIEFwcGVuZCB0byBVIHRoZSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQgYy5cbiAgICAgICAgdS5wdXNoKGMpO1xuICAgICAgfVxuXG4gICAgICAvLyAweERDMDAg4omkIGMg4omkIDB4REZGRlxuICAgICAgZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgLy8gQXBwZW5kIHRvIFUgYSBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICB1LnB1c2goMHhGRkZEKTtcbiAgICAgIH1cblxuICAgICAgLy8gMHhEODAwIOKJpCBjIOKJpCAweERCRkZcbiAgICAgIGVsc2UgaWYgKDB4RDgwMCA8PSBjICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIC8vIDEuIElmIGkgPSBu4oiSMSwgdGhlbiBhcHBlbmQgdG8gVSBhIFUrRkZGRCBSRVBMQUNFTUVOVFxuICAgICAgICAvLyBDSEFSQUNURVIuXG4gICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaSA8IG7iiJIxOlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyAxLiBMZXQgZCBiZSB0aGUgY29kZSB1bml0IGluIFMgYXQgaW5kZXggaSsxLlxuICAgICAgICAgIHZhciBkID0gcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICAgIC8vIDIuIElmIDB4REMwMCDiiaQgZCDiiaQgMHhERkZGLCB0aGVuOlxuICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgLy8gMS4gTGV0IGEgYmUgYyAmIDB4M0ZGLlxuICAgICAgICAgICAgdmFyIGEgPSBjICYgMHgzRkY7XG5cbiAgICAgICAgICAgIC8vIDIuIExldCBiIGJlIGQgJiAweDNGRi5cbiAgICAgICAgICAgIHZhciBiID0gZCAmIDB4M0ZGO1xuXG4gICAgICAgICAgICAvLyAzLiBBcHBlbmQgdG8gVSB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCBjb2RlIHBvaW50XG4gICAgICAgICAgICAvLyAyXjE2KzJeMTAqYStiLlxuICAgICAgICAgICAgdS5wdXNoKDB4MTAwMDAgKyAoYSA8PCAxMCkgKyBiKTtcblxuICAgICAgICAgICAgLy8gNC4gU2V0IGkgdG8gaSsxLlxuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDMuIE90aGVyd2lzZSwgZCA8IDB4REMwMCBvciBkID4gMHhERkZGLiBBcHBlbmQgdG8gVSBhXG4gICAgICAgICAgLy8gVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi5cbiAgICAgICAgICBlbHNlICB7XG4gICAgICAgICAgICB1LnB1c2goMHhGRkZEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gU2V0IGkgdG8gaSsxLlxuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIC8vIDYuIFJldHVybiBVLlxuICAgIHJldHVybiB1O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2RlX3BvaW50cyBBcnJheSBvZiBjb2RlIHBvaW50cy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIG9mIFVURi0xNiBjb2RlIHVuaXRzLlxuICAgKi9cbiAgZnVuY3Rpb24gY29kZVBvaW50c1RvU3RyaW5nKGNvZGVfcG9pbnRzKSB7XG4gICAgdmFyIHMgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVfcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY3AgPSBjb2RlX3BvaW50c1tpXTtcbiAgICAgIGlmIChjcCA8PSAweEZGRkYpIHtcbiAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNwIC09IDB4MTAwMDA7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY3AgPj4gMTApICsgMHhEODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuXG4gIC8vXG4gIC8vIEltcGxlbWVudGF0aW9uIG9mIEVuY29kaW5nIHNwZWNpZmljYXRpb25cbiAgLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvXG4gIC8vXG5cbiAgLy9cbiAgLy8gNC4gVGVybWlub2xvZ3lcbiAgLy9cblxuICAvKipcbiAgICogQW4gQVNDSUkgYnl0ZSBpcyBhIGJ5dGUgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg3RiwgaW5jbHVzaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgbnVtYmVyIHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCBpbmNsdXNpdmUuXG4gICAqL1xuICBmdW5jdGlvbiBpc0FTQ0lJQnl0ZShhKSB7XG4gICAgcmV0dXJuIDB4MDAgPD0gYSAmJiBhIDw9IDB4N0Y7XG4gIH1cblxuICAvKipcbiAgICogQW4gQVNDSUkgY29kZSBwb2ludCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFUrMDAwMCB0b1xuICAgKiBVKzAwN0YsIGluY2x1c2l2ZS5cbiAgICovXG4gIHZhciBpc0FTQ0lJQ29kZVBvaW50ID0gaXNBU0NJSUJ5dGU7XG5cblxuICAvKipcbiAgICogRW5kLW9mLXN0cmVhbSBpcyBhIHNwZWNpYWwgdG9rZW4gdGhhdCBzaWduaWZpZXMgbm8gbW9yZSB0b2tlbnNcbiAgICogYXJlIGluIHRoZSBzdHJlYW0uXG4gICAqIEBjb25zdFxuICAgKi8gdmFyIGVuZF9vZl9zdHJlYW0gPSAtMTtcblxuICAvKipcbiAgICogQSBzdHJlYW0gcmVwcmVzZW50cyBhbiBvcmRlcmVkIHNlcXVlbmNlIG9mIHRva2Vucy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gdG9rZW5zIEFycmF5IG9mIHRva2VucyB0aGF0IHByb3ZpZGVcbiAgICogdGhlIHN0cmVhbS5cbiAgICovXG4gIGZ1bmN0aW9uIFN0cmVhbSh0b2tlbnMpIHtcbiAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICB0aGlzLnRva2VucyA9IFtdLnNsaWNlLmNhbGwodG9rZW5zKTtcbiAgICAvLyBSZXZlcnNlZCBhcyBwdXNoL3BvcCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHNoaWZ0L3Vuc2hpZnQuXG4gICAgdGhpcy50b2tlbnMucmV2ZXJzZSgpO1xuICB9XG5cbiAgU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGVuZC1vZi1zdHJlYW0gaGFzIGJlZW4gaGl0LlxuICAgICAqL1xuICAgIGVuZE9mU3RyZWFtOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy50b2tlbnMubGVuZ3RoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgdG9rZW4gaXMgcmVhZCBmcm9tIGEgc3RyZWFtLCB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgYW5kIHN1YnNlcXVlbnRseSByZW1vdmVkLCBhbmRcbiAgICAgKiBlbmQtb2Ytc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBHZXQgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgc3RyZWFtLCBvclxuICAgICAqIGVuZF9vZl9zdHJlYW0uXG4gICAgICovXG4gICAgIHJlYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLnRva2Vucy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBlbmRfb2Zfc3RyZWFtO1xuICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5wb3AoKTtcbiAgICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25lIG9yIG1vcmUgdG9rZW5zIGFyZSBwcmVwZW5kZWQgdG8gYSBzdHJlYW0sIHRob3NlIHRva2Vuc1xuICAgICAqIG11c3QgYmUgaW5zZXJ0ZWQsIGluIGdpdmVuIG9yZGVyLCBiZWZvcmUgdGhlIGZpcnN0IHRva2VuIGluIHRoZVxuICAgICAqIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSB0b2tlbiBUaGUgdG9rZW4ocykgdG8gcHJlcGVuZCB0byB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICovXG4gICAgcHJlcGVuZDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW5zLnBvcCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG9uZSBvciBtb3JlIHRva2VucyBhcmUgcHVzaGVkIHRvIGEgc3RyZWFtLCB0aG9zZSB0b2tlbnNcbiAgICAgKiBtdXN0IGJlIGluc2VydGVkLCBpbiBnaXZlbiBvcmRlciwgYWZ0ZXIgdGhlIGxhc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IHRva2VuIFRoZSB0b2tlbnMocykgdG8gcHVzaCB0byB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICovXG4gICAgcHVzaDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnVuc2hpZnQodG9rZW5zLnNoaWZ0KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMudW5zaGlmdCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vXG4gIC8vIDUuIEVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDUuMSBFbmNvZGVycyBhbmQgZGVjb2RlcnNcblxuICAvKiogQGNvbnN0ICovXG4gIHZhciBmaW5pc2hlZCA9IC0xO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhdGFsIElmIHRydWUsIGRlY29kaW5nIGVycm9ycyByYWlzZSBhbiBleGNlcHRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2NvZGVfcG9pbnQgT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGZhbGxiYWNrIGNvZGUgcG9pbnQuXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvZGUgcG9pbnQgdG8gaW5zZXJ0IG9uIGEgZGVjb2RpbmcgZXJyb3IuXG4gICAqL1xuICBmdW5jdGlvbiBkZWNvZGVyRXJyb3IoZmF0YWwsIG9wdF9jb2RlX3BvaW50KSB7XG4gICAgaWYgKGZhdGFsKVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdEZWNvZGVyIGVycm9yJyk7XG4gICAgcmV0dXJuIG9wdF9jb2RlX3BvaW50IHx8IDB4RkZGRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgY29kZSBwb2ludCB0aGF0IGNvdWxkIG5vdCBiZSBlbmNvZGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFsd2F5cyB0aHJvd3MsIG5vIHZhbHVlIGlzIGFjdHVhbGx5IHJldHVybmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1RoZSBjb2RlIHBvaW50ICcgKyBjb2RlX3BvaW50ICsgJyBjb3VsZCBub3QgYmUgZW5jb2RlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJmYWNlICovXG4gIGZ1bmN0aW9uIERlY29kZXIoKSB7fVxuICBEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHt9XG4gIH07XG5cbiAgLyoqIEBpbnRlcmZhY2UgKi9cbiAgZnVuY3Rpb24gRW5jb2RlcigpIHt9XG4gIEVuY29kZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBjb2RlIHBvaW50cyBiZWluZyBlbmNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHt9XG4gIH07XG5cbiAgLy8gNS4yIE5hbWVzIGFuZCBsYWJlbHNcblxuICAvLyBUT0RPOiBEZWZpbmUgQHR5cGVkZWYgZm9yIEVuY29kaW5nOiB7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzI0N1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgVGhlIGVuY29kaW5nIGxhYmVsLlxuICAgKiBAcmV0dXJuIHs/e25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn19XG4gICAqL1xuICBmdW5jdGlvbiBnZXRFbmNvZGluZyhsYWJlbCkge1xuICAgIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAgIGxhYmVsID0gU3RyaW5nKGxhYmVsKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgICAvLyBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgLy8gZW5jb2RpbmcsIGFuZCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxhYmVsX3RvX2VuY29kaW5nLCBsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbF90b19lbmNvZGluZ1tsYWJlbF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kaW5ncyB0YWJsZTogaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvZW5jb2RpbmdzLmpzb25cbiAgICogQGNvbnN0XG4gICAqIEB0eXBlIHshQXJyYXkuPHtcbiAgICogICAgICAgICAgaGVhZGluZzogc3RyaW5nLFxuICAgKiAgICAgICAgICBlbmNvZGluZ3M6IEFycmF5Ljx7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fT5cbiAgICogICAgICAgIH0+fVxuICAgKi9cbiAgdmFyIGVuY29kaW5ncyA9IFtcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcInVuaWNvZGUtMS0xLXV0Zi04XCIsXG4gICAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgICBcInV0ZjhcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiVVRGLThcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiVGhlIEVuY29kaW5nXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiODY2XCIsXG4gICAgICAgICAgICBcImNwODY2XCIsXG4gICAgICAgICAgICBcImNzaWJtODY2XCIsXG4gICAgICAgICAgICBcImlibTg2NlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJQk04NjZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluMlwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS0yXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMDFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0yXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkyXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTJcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMjoxOTg3XCIsXG4gICAgICAgICAgICBcImwyXCIsXG4gICAgICAgICAgICBcImxhdGluMlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0yXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjNcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktM1wiLFxuICAgICAgICAgICAgXCJpc28taXItMTA5XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktM1wiLFxuICAgICAgICAgICAgXCJpc284ODU5M1wiLFxuICAgICAgICAgICAgXCJpc29fODg1OS0zXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTM6MTk4OFwiLFxuICAgICAgICAgICAgXCJsM1wiLFxuICAgICAgICAgICAgXCJsYXRpbjNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktM1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW40XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTRcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTExMFwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTRcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTRcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNFwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS00OjE5ODhcIixcbiAgICAgICAgICAgIFwibDRcIixcbiAgICAgICAgICAgIFwibGF0aW40XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwiY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ0XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktNVwiLFxuICAgICAgICAgICAgXCJpc284ODU5NVwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS01XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTU6MTk4OFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS01XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiYXJhYmljXCIsXG4gICAgICAgICAgICBcImFzbW8tNzA4XCIsXG4gICAgICAgICAgICBcImNzaXNvODg1OTZlXCIsXG4gICAgICAgICAgICBcImNzaXNvODg1OTZpXCIsXG4gICAgICAgICAgICBcImNzaXNvbGF0aW5hcmFiaWNcIixcbiAgICAgICAgICAgIFwiZWNtYS0xMTRcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNlwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS02LWVcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNi1pXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMjdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS02XCIsXG4gICAgICAgICAgICBcImlzbzg4NTk2XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTZcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNjoxOTg3XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluZ3JlZWtcIixcbiAgICAgICAgICAgIFwiZWNtYS0xMThcIixcbiAgICAgICAgICAgIFwiZWxvdF85MjhcIixcbiAgICAgICAgICAgIFwiZ3JlZWtcIixcbiAgICAgICAgICAgIFwiZ3JlZWs4XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTdcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTEyNlwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTdcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktN1wiLFxuICAgICAgICAgICAgXCJpc29fODg1OS03OjE5ODdcIixcbiAgICAgICAgICAgIFwic3VuX2V1X2dyZWVrXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTdcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzbzg4NTk4ZVwiLFxuICAgICAgICAgICAgXCJjc2lzb2xhdGluaGVicmV3XCIsXG4gICAgICAgICAgICBcImhlYnJld1wiLFxuICAgICAgICAgICAgXCJpc28tODg1OS04XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTgtZVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTM4XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktOFwiLFxuICAgICAgICAgICAgXCJpc284ODU5OFwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS04XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTg6MTk4OFwiLFxuICAgICAgICAgICAgXCJ2aXN1YWxcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktOFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvODg1OThpXCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTgtaVwiLFxuICAgICAgICAgICAgXCJsb2dpY2FsXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTgtSVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW42XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTEwXCIsXG4gICAgICAgICAgICBcImlzby1pci0xNTdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xMFwiLFxuICAgICAgICAgICAgXCJpc284ODU5MTBcIixcbiAgICAgICAgICAgIFwibDZcIixcbiAgICAgICAgICAgIFwibGF0aW42XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTEwXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTNcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xM1wiLFxuICAgICAgICAgICAgXCJpc284ODU5MTNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTNcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJpc28tODg1OS0xNFwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTE0XCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxNFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0xNFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW45XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTE1XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktMTVcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTE1XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTE1XCIsXG4gICAgICAgICAgICBcImw5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTE1XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTZcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2tvaThyXCIsXG4gICAgICAgICAgICBcImtvaVwiLFxuICAgICAgICAgICAgXCJrb2k4XCIsXG4gICAgICAgICAgICBcImtvaTgtclwiLFxuICAgICAgICAgICAgXCJrb2k4X3JcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiS09JOC1SXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwia29pOC1ydVwiLFxuICAgICAgICAgICAgXCJrb2k4LXVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiS09JOC1VXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3NtYWNpbnRvc2hcIixcbiAgICAgICAgICAgIFwibWFjXCIsXG4gICAgICAgICAgICBcIm1hY2ludG9zaFwiLFxuICAgICAgICAgICAgXCJ4LW1hYy1yb21hblwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJtYWNpbnRvc2hcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJkb3MtODc0XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTExXCIsXG4gICAgICAgICAgICBcImlzbzg4NTktMTFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTExXCIsXG4gICAgICAgICAgICBcInRpcy02MjBcIixcbiAgICAgICAgICAgIFwid2luZG93cy04NzRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy04NzRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTBcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjUwXCIsXG4gICAgICAgICAgICBcIngtY3AxMjUwXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1MFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1MVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTFcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTFcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUxXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiYW5zaV94My40LTE5NjhcIixcbiAgICAgICAgICAgIFwiYXNjaWlcIixcbiAgICAgICAgICAgIFwiY3AxMjUyXCIsXG4gICAgICAgICAgICBcImNwODE5XCIsXG4gICAgICAgICAgICBcImNzaXNvbGF0aW4xXCIsXG4gICAgICAgICAgICBcImlibTgxOVwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS0xXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMDBcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTFcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMToxOTg3XCIsXG4gICAgICAgICAgICBcImwxXCIsXG4gICAgICAgICAgICBcImxhdGluMVwiLFxuICAgICAgICAgICAgXCJ1cy1hc2NpaVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTJcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUyXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjUzXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1M1wiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1M1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTNcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTRcIixcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjVcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktOVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ4XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktOVwiLFxuICAgICAgICAgICAgXCJpc284ODU5OVwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS05XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTk6MTk4OVwiLFxuICAgICAgICAgICAgXCJsNVwiLFxuICAgICAgICAgICAgXCJsYXRpbjVcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjU0XCIsXG4gICAgICAgICAgICBcIngtY3AxMjU0XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1NFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1NVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTVcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU1XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjU2XCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1NlwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1NlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTdcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjU3XCIsXG4gICAgICAgICAgICBcIngtY3AxMjU3XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1N1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1OFwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNThcIixcbiAgICAgICAgICAgIFwieC1jcDEyNThcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU4XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwieC1tYWMtY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwieC1tYWMtdWtyYWluaWFuXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIngtbWFjLWN5cmlsbGljXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjaGluZXNlXCIsXG4gICAgICAgICAgICBcImNzZ2IyMzEyXCIsXG4gICAgICAgICAgICBcImNzaXNvNThnYjIzMTI4MFwiLFxuICAgICAgICAgICAgXCJnYjIzMTJcIixcbiAgICAgICAgICAgIFwiZ2JfMjMxMlwiLFxuICAgICAgICAgICAgXCJnYl8yMzEyLTgwXCIsXG4gICAgICAgICAgICBcImdia1wiLFxuICAgICAgICAgICAgXCJpc28taXItNThcIixcbiAgICAgICAgICAgIFwieC1nYmtcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiR0JLXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiZ2IxODAzMFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJnYjE4MDMwXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5nc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImJpZzVcIixcbiAgICAgICAgICAgIFwiYmlnNS1oa3Njc1wiLFxuICAgICAgICAgICAgXCJjbi1iaWc1XCIsXG4gICAgICAgICAgICBcImNzYmlnNVwiLFxuICAgICAgICAgICAgXCJ4LXgtYmlnNVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJCaWc1XCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2V1Y3BrZGZtdGphcGFuZXNlXCIsXG4gICAgICAgICAgICBcImV1Yy1qcFwiLFxuICAgICAgICAgICAgXCJ4LWV1Yy1qcFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJFVUMtSlBcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzbzIwMjJqcFwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1qcFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tMjAyMi1KUFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzc2hpZnRqaXNcIixcbiAgICAgICAgICAgIFwibXM5MzJcIixcbiAgICAgICAgICAgIFwibXNfa2FuamlcIixcbiAgICAgICAgICAgIFwic2hpZnQtamlzXCIsXG4gICAgICAgICAgICBcInNoaWZ0X2ppc1wiLFxuICAgICAgICAgICAgXCJzamlzXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMzFqXCIsXG4gICAgICAgICAgICBcIngtc2ppc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJTaGlmdF9KSVNcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3NldWNrclwiLFxuICAgICAgICAgICAgXCJjc2tzYzU2MDExOTg3XCIsXG4gICAgICAgICAgICBcImV1Yy1rclwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ5XCIsXG4gICAgICAgICAgICBcImtvcmVhblwiLFxuICAgICAgICAgICAgXCJrc19jXzU2MDEtMTk4N1wiLFxuICAgICAgICAgICAgXCJrc19jXzU2MDEtMTk4OVwiLFxuICAgICAgICAgICAgXCJrc2M1NjAxXCIsXG4gICAgICAgICAgICBcImtzY181NjAxXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtOTQ5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIkVVQy1LUlwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImhlYWRpbmdcIjogXCJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc28yMDIya3JcIixcbiAgICAgICAgICAgIFwiaHotZ2ItMjMxMlwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1jblwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1jbi1leHRcIixcbiAgICAgICAgICAgIFwiaXNvLTIwMjIta3JcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVwbGFjZW1lbnRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJ1dGYtMTZiZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJVVEYtMTZCRVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcInV0Zi0xNlwiLFxuICAgICAgICAgICAgXCJ1dGYtMTZsZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJVVEYtMTZMRVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5nc1wiXG4gICAgfVxuICBdO1xuXG4gIC8vIExhYmVsIHRvIGVuY29kaW5nIHJlZ2lzdHJ5LlxuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLHtuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59Pn0gKi9cbiAgdmFyIGxhYmVsX3RvX2VuY29kaW5nID0ge307XG4gIGVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgY2F0ZWdvcnkuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgIGVuY29kaW5nLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIGxhYmVsX3RvX2VuY29kaW5nW2xhYmVsXSA9IGVuY29kaW5nO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJlZ2lzdHJ5IG9mIG9mIGVuY29kZXIvZGVjb2RlciBmYWN0b3JpZXMsIGJ5IGVuY29kaW5nIG5hbWUuXG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKHtmYXRhbDpib29sZWFufSk6IEVuY29kZXI+fSAqL1xuICB2YXIgZW5jb2RlcnMgPSB7fTtcbiAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oe2ZhdGFsOmJvb2xlYW59KTogRGVjb2Rlcj59ICovXG4gIHZhciBkZWNvZGVycyA9IHt9O1xuXG4gIC8vXG4gIC8vIDYuIEluZGV4ZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvaW50ZXIgVGhlIHxwb2ludGVyfCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyghQXJyYXkuPD9udW1iZXI+fHVuZGVmaW5lZCl9IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KSB7XG4gICAgaWYgKCFpbmRleCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGluZGV4W3BvaW50ZXJdIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyFBcnJheS48P251bWJlcj59IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBmaXJzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gfGNvZGUgcG9pbnR8IGluXG4gICAqICAgICB8aW5kZXh8LCBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCkge1xuICAgIHZhciBwb2ludGVyID0gaW5kZXguaW5kZXhPZihjb2RlX3BvaW50KTtcbiAgICByZXR1cm4gcG9pbnRlciA9PT0gLTEgPyBudWxsIDogcG9pbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBpbmRleC5cbiAgICogQHJldHVybiB7KCFBcnJheS48bnVtYmVyPnwhQXJyYXkuPEFycmF5LjxudW1iZXI+Pil9XG4gICAqICAqL1xuICBmdW5jdGlvbiBpbmRleChuYW1lKSB7XG4gICAgaWYgKCEoJ2VuY29kaW5nLWluZGV4ZXMnIGluIGdsb2JhbCkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiSW5kZXhlcyBtaXNzaW5nLlwiICtcbiAgICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD9cIik7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxbJ2VuY29kaW5nLWluZGV4ZXMnXVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9pbnRlciBUaGUgfHBvaW50ZXJ8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEdCMTgwMzBSYW5nZXNDb2RlUG9pbnRGb3IocG9pbnRlcikge1xuICAgIC8vIDEuIElmIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDM5NDE5IGFuZCBsZXNzIHRoYW4gMTg5MDAwLCBvclxuICAgIC8vIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDEyMzc1NzUsIHJldHVybiBudWxsLlxuICAgIGlmICgocG9pbnRlciA+IDM5NDE5ICYmIHBvaW50ZXIgPCAxODkwMDApIHx8IChwb2ludGVyID4gMTIzNzU3NSkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIDIuIElmIHBvaW50ZXIgaXMgNzQ1NywgcmV0dXJuIGNvZGUgcG9pbnQgVStFN0M3LlxuICAgIGlmIChwb2ludGVyID09PSA3NDU3KSByZXR1cm4gMHhFN0M3O1xuXG4gICAgLy8gMy4gTGV0IG9mZnNldCBiZSB0aGUgbGFzdCBwb2ludGVyIGluIGluZGV4IGdiMTgwMzAgcmFuZ2VzIHRoYXRcbiAgICAvLyBpcyBlcXVhbCB0byBvciBsZXNzIHRoYW4gcG9pbnRlciBhbmQgbGV0IGNvZGUgcG9pbnQgb2Zmc2V0IGJlXG4gICAgLy8gaXRzIGNvcnJlc3BvbmRpbmcgY29kZSBwb2ludC5cbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgY29kZV9wb2ludF9vZmZzZXQgPSAwO1xuICAgIHZhciBpZHggPSBpbmRleCgnZ2IxODAzMC1yYW5nZXMnKTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWR4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICAgIHZhciBlbnRyeSA9IGlkeFtpXTtcbiAgICAgIGlmIChlbnRyeVswXSA8PSBwb2ludGVyKSB7XG4gICAgICAgIG9mZnNldCA9IGVudHJ5WzBdO1xuICAgICAgICBjb2RlX3BvaW50X29mZnNldCA9IGVudHJ5WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IG9mZnNldCArXG4gICAgLy8gcG9pbnRlciDiiJIgb2Zmc2V0LlxuICAgIHJldHVybiBjb2RlX3BvaW50X29mZnNldCArIHBvaW50ZXIgLSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBsb2NhdGUgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGZpcnN0IHBvaW50ZXIgY29ycmVzcG9uZGluZyB0byB8Y29kZSBwb2ludHwgaW4gdGhlXG4gICAqICAgICBnYjE4MDMwIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhHQjE4MDMwUmFuZ2VzUG9pbnRlckZvcihjb2RlX3BvaW50KSB7XG4gICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBVK0U3QzcsIHJldHVybiBwb2ludGVyIDc0NTcuXG4gICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4RTdDNykgcmV0dXJuIDc0NTc7XG5cbiAgICAvLyAyLiBMZXQgb2Zmc2V0IGJlIHRoZSBsYXN0IGNvZGUgcG9pbnQgaW4gaW5kZXggZ2IxODAzMCByYW5nZXNcbiAgICAvLyB0aGF0IGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBjb2RlIHBvaW50IGFuZCBsZXQgcG9pbnRlciBvZmZzZXRcbiAgICAvLyBiZSBpdHMgY29ycmVzcG9uZGluZyBwb2ludGVyLlxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBwb2ludGVyX29mZnNldCA9IDA7XG4gICAgdmFyIGlkeCA9IGluZGV4KCdnYjE4MDMwLXJhbmdlcycpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpZHgubGVuZ3RoOyArK2kpIHtcbiAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgICAgdmFyIGVudHJ5ID0gaWR4W2ldO1xuICAgICAgaWYgKGVudHJ5WzFdIDw9IGNvZGVfcG9pbnQpIHtcbiAgICAgICAgb2Zmc2V0ID0gZW50cnlbMV07XG4gICAgICAgIHBvaW50ZXJfb2Zmc2V0ID0gZW50cnlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4gYSBwb2ludGVyIHdob3NlIHZhbHVlIGlzIHBvaW50ZXIgb2Zmc2V0ICsgY29kZSBwb2ludFxuICAgIC8vIOKIkiBvZmZzZXQuXG4gICAgcmV0dXJuIHBvaW50ZXJfb2Zmc2V0ICsgY29kZV9wb2ludCAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGVfcG9pbnR8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIFNoaWZ0X0pJU1xuICAgKiAgICAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIFNoaWZ0X0pJUyBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggamlzMDIwOCBleGNsdWRpbmcgYWxsIGVudHJpZXMgd2hvc2VcbiAgICAvLyBwb2ludGVyIGlzIGluIHRoZSByYW5nZSA4MjcyIHRvIDg4MzUsIGluY2x1c2l2ZS5cbiAgICBzaGlmdF9qaXNfaW5kZXggPSBzaGlmdF9qaXNfaW5kZXggfHxcbiAgICAgIGluZGV4KCdqaXMwMjA4JykubWFwKGZ1bmN0aW9uKGNvZGVfcG9pbnQsIHBvaW50ZXIpIHtcbiAgICAgICAgcmV0dXJuIGluUmFuZ2UocG9pbnRlciwgODI3MiwgODgzNSkgPyBudWxsIDogY29kZV9wb2ludDtcbiAgICAgIH0pO1xuICAgIHZhciBpbmRleF8gPSBzaGlmdF9qaXNfaW5kZXg7XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXguXG4gICAgcmV0dXJuIGluZGV4Xy5pbmRleE9mKGNvZGVfcG9pbnQpO1xuICB9XG4gIHZhciBzaGlmdF9qaXNfaW5kZXg7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSB8Y29kZV9wb2ludHwgdG8gc2VhcmNoIGZvciBpbiB0aGUgYmlnNVxuICAgKiAgICAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGJpZzUgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEJpZzVQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggQmlnNSBleGNsdWRpbmcgYWxsIGVudHJpZXMgd2hvc2UgcG9pbnRlclxuICAgIGJpZzVfaW5kZXhfbm9faGtzY3MgPSBiaWc1X2luZGV4X25vX2hrc2NzIHx8XG4gICAgICBpbmRleCgnYmlnNScpLm1hcChmdW5jdGlvbihjb2RlX3BvaW50LCBwb2ludGVyKSB7XG4gICAgICAgIHJldHVybiAocG9pbnRlciA8ICgweEExIC0gMHg4MSkgKiAxNTcpID8gbnVsbCA6IGNvZGVfcG9pbnQ7XG4gICAgICB9KTtcbiAgICB2YXIgaW5kZXhfID0gYmlnNV9pbmRleF9ub19oa3NjcztcblxuICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgVSsyNTUwLCBVKzI1NUUsIFUrMjU2MSwgVSsyNTZBLCBVKzUzNDEsIG9yXG4gICAgLy8gVSs1MzQ1LCByZXR1cm4gdGhlIGxhc3QgcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIGNvZGUgcG9pbnQgaW5cbiAgICAvLyBpbmRleC5cbiAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyNTUwIHx8IGNvZGVfcG9pbnQgPT09IDB4MjU1RSB8fFxuICAgICAgICBjb2RlX3BvaW50ID09PSAweDI1NjEgfHwgY29kZV9wb2ludCA9PT0gMHgyNTZBIHx8XG4gICAgICAgIGNvZGVfcG9pbnQgPT09IDB4NTM0MSB8fCBjb2RlX3BvaW50ID09PSAweDUzNDUpIHtcbiAgICAgIHJldHVybiBpbmRleF8ubGFzdEluZGV4T2YoY29kZV9wb2ludCk7XG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4LlxuICAgIHJldHVybiBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXhfKTtcbiAgfVxuICB2YXIgYmlnNV9pbmRleF9ub19oa3NjcztcblxuICAvL1xuICAvLyA4LiBBUElcbiAgLy9cblxuICAvKiogQGNvbnN0ICovIHZhciBERUZBVUxUX0VOQ09ESU5HID0gJ3V0Zi04JztcblxuICAvLyA4LjEgSW50ZXJmYWNlIFRleHREZWNvZGVyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgZW5jb2Rpbmc7XG4gICAqICAgICBkZWZhdWx0cyB0byAndXRmLTgnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFRleHREZWNvZGVyKGxhYmVsLCBvcHRpb25zKSB7XG4gICAgLy8gV2ViIElETCBjb252ZW50aW9uc1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUZXh0RGVjb2RlcikpXG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0NhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCBcXCduZXdcXCc/Jyk7XG4gICAgbGFiZWwgPSBsYWJlbCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKGxhYmVsKSA6IERFRkFVTFRfRU5DT0RJTkc7XG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIEEgVGV4dERlY29kZXIgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIGVuY29kaW5nLCBkZWNvZGVyLFxuICAgIC8vIHN0cmVhbSwgaWdub3JlIEJPTSBmbGFnIChpbml0aWFsbHkgdW5zZXQpLCBCT00gc2VlbiBmbGFnXG4gICAgLy8gKGluaXRpYWxseSB1bnNldCksIGVycm9yIG1vZGUgKGluaXRpYWxseSByZXBsYWNlbWVudCksIGFuZCBkb1xuICAgIC8vIG5vdCBmbHVzaCBmbGFnIChpbml0aWFsbHkgdW5zZXQpLlxuXG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBudWxsO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7P0RlY29kZXJ9ICovXG4gICAgdGhpcy5fZGVjb2RlciA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2lnbm9yZUJPTSA9IGZhbHNlO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9CT01zZWVuID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5fZXJyb3JfbW9kZSA9ICdyZXBsYWNlbWVudCc7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2RvX25vdF9mbHVzaCA9IGZhbHNlO1xuXG5cbiAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb21cbiAgICAvLyBsYWJlbC5cbiAgICB2YXIgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhsYWJlbCk7XG5cbiAgICAvLyAyLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlIG9yIHJlcGxhY2VtZW50LCB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKGVuY29kaW5nID09PSBudWxsIHx8IGVuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICB0aHJvdyBSYW5nZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgbGFiZWwpO1xuICAgIGlmICghZGVjb2RlcnNbZW5jb2RpbmcubmFtZV0pIHtcbiAgICAgIHRocm93IEVycm9yKCdEZWNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgJyBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Jyk7XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlYyBiZSBhIG5ldyBUZXh0RGVjb2RlciBvYmplY3QuXG4gICAgdmFyIGRlYyA9IHRoaXM7XG5cbiAgICAvLyA0LiBTZXQgZGVjJ3MgZW5jb2RpbmcgdG8gZW5jb2RpbmcuXG4gICAgZGVjLl9lbmNvZGluZyA9IGVuY29kaW5nO1xuXG4gICAgLy8gNS4gSWYgb3B0aW9ucydzIGZhdGFsIG1lbWJlciBpcyB0cnVlLCBzZXQgZGVjJ3MgZXJyb3IgbW9kZSB0b1xuICAgIC8vIGZhdGFsLlxuICAgIGlmIChCb29sZWFuKG9wdGlvbnNbJ2ZhdGFsJ10pKVxuICAgICAgZGVjLl9lcnJvcl9tb2RlID0gJ2ZhdGFsJztcblxuICAgIC8vIDYuIElmIG9wdGlvbnMncyBpZ25vcmVCT00gbWVtYmVyIGlzIHRydWUsIHNldCBkZWMncyBpZ25vcmUgQk9NXG4gICAgLy8gZmxhZy5cbiAgICBpZiAoQm9vbGVhbihvcHRpb25zWydpZ25vcmVCT00nXSkpXG4gICAgICBkZWMuX2lnbm9yZUJPTSA9IHRydWU7XG5cbiAgICAvLyBGb3IgcHJlLUVTNSBydW50aW1lczpcbiAgICBpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5lbmNvZGluZyA9IGRlYy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5mYXRhbCA9IGRlYy5fZXJyb3JfbW9kZSA9PT0gJ2ZhdGFsJztcbiAgICAgIHRoaXMuaWdub3JlQk9NID0gZGVjLl9pZ25vcmVCT007XG4gICAgfVxuXG4gICAgLy8gNy4gUmV0dXJuIGRlYy5cbiAgICByZXR1cm4gZGVjO1xuICB9XG5cbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgIC8vIFRoZSBlbmNvZGluZyBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gZW5jb2RpbmcncyBuYW1lLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0RGVjb2Rlci5wcm90b3R5cGUsICdlbmNvZGluZycsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZmF0YWwgYXR0cmlidXRlJ3MgZ2V0dGVyIG11c3QgcmV0dXJuIHRydWUgaWYgZXJyb3IgbW9kZVxuICAgIC8vIGlzIGZhdGFsLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0RGVjb2Rlci5wcm90b3R5cGUsICdmYXRhbCcsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZXJyb3JfbW9kZSA9PT0gJ2ZhdGFsJzsgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhlIGlnbm9yZUJPTSBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gdHJ1ZSBpZiBpZ25vcmVcbiAgICAvLyBCT00gZmxhZyBpcyBzZXQsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHREZWNvZGVyLnByb3RvdHlwZSwgJ2lnbm9yZUJPTScsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5faWdub3JlQk9NOyB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJTb3VyY2U9fSBpbnB1dCBUaGUgYnVmZmVyIG9mIGJ5dGVzIHRvIGRlY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nLlxuICAgKi9cbiAgVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShpbnB1dCwgb3B0aW9ucykge1xuICAgIHZhciBieXRlcztcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgJ2J1ZmZlcicgaW4gaW5wdXQgJiZcbiAgICAgICAgICAgICAgIGlucHV0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0LmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYnl0ZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIDEuIElmIHRoZSBkbyBub3QgZmx1c2ggZmxhZyBpcyB1bnNldCwgc2V0IGRlY29kZXIgdG8gYSBuZXdcbiAgICAvLyBlbmNvZGluZydzIGRlY29kZXIsIHNldCBzdHJlYW0gdG8gYSBuZXcgc3RyZWFtLCBhbmQgdW5zZXQgdGhlXG4gICAgLy8gQk9NIHNlZW4gZmxhZy5cbiAgICBpZiAoIXRoaXMuX2RvX25vdF9mbHVzaCkge1xuICAgICAgdGhpcy5fZGVjb2RlciA9IGRlY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtcbiAgICAgICAgZmF0YWw6IHRoaXMuX2Vycm9yX21vZGUgPT09ICdmYXRhbCd9KTtcbiAgICAgIHRoaXMuX0JPTXNlZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBvcHRpb25zJ3Mgc3RyZWFtIGlzIHRydWUsIHNldCB0aGUgZG8gbm90IGZsdXNoIGZsYWcsIGFuZFxuICAgIC8vIHVuc2V0IHRoZSBkbyBub3QgZmx1c2ggZmxhZyBvdGhlcndpc2UuXG4gICAgdGhpcy5fZG9fbm90X2ZsdXNoID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAvLyAzLiBJZiBpbnB1dCBpcyBnaXZlbiwgcHVzaCBhIGNvcHkgb2YgaW5wdXQgdG8gc3RyZWFtLlxuICAgIC8vIFRPRE86IEFsaWduIHdpdGggc3BlYyBhbGdvcml0aG0gLSBtYWludGFpbiBzdHJlYW0gb24gaW5zdGFuY2UuXG4gICAgdmFyIGlucHV0X3N0cmVhbSA9IG5ldyBTdHJlYW0oYnl0ZXMpO1xuXG4gICAgLy8gNC4gTGV0IG91dHB1dCBiZSBhIG5ldyBzdHJlYW0uXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICAvLyA1LiBXaGlsZSB0cnVlOlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gc3RyZWFtLlxuICAgICAgdmFyIHRva2VuID0gaW5wdXRfc3RyZWFtLnJlYWQoKTtcblxuICAgICAgLy8gMi4gSWYgdG9rZW4gaXMgZW5kLW9mLXN0cmVhbSBhbmQgdGhlIGRvIG5vdCBmbHVzaCBmbGFnIGlzXG4gICAgICAvLyBzZXQsIHJldHVybiBvdXRwdXQsIHNlcmlhbGl6ZWQuXG4gICAgICAvLyBUT0RPOiBBbGlnbiB3aXRoIHNwZWMgYWxnb3JpdGhtLlxuICAgICAgaWYgKHRva2VuID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICBicmVhaztcblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBydW4gdGhlc2Ugc3Vic3Vic3RlcHM6XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIHRva2VuIGZvciBkZWNvZGVyLFxuICAgICAgLy8gc3RyZWFtLCBvdXRwdXQsIGFuZCBlcnJvciBtb2RlLlxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2Rlci5oYW5kbGVyKGlucHV0X3N0cmVhbSwgdG9rZW4pO1xuXG4gICAgICAvLyAyLiBJZiByZXN1bHQgaXMgZmluaXNoZWQsIHJldHVybiBvdXRwdXQsIHNlcmlhbGl6ZWQuXG4gICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXRwdXQucHVzaChyZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHJlc3VsdCBpcyBlcnJvciwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAvLyAoVGhyb3duIGluIGhhbmRsZXIpXG5cbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgZG8gbm90aGluZy5cbiAgICB9XG4gICAgLy8gVE9ETzogQWxpZ24gd2l0aCBzcGVjIGFsZ29yaXRobS5cbiAgICBpZiAoIXRoaXMuX2RvX25vdF9mbHVzaCkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCBpbnB1dF9zdHJlYW0ucmVhZCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH0gd2hpbGUgKCFpbnB1dF9zdHJlYW0uZW5kT2ZTdHJlYW0oKSk7XG4gICAgICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBIFRleHREZWNvZGVyIG9iamVjdCBhbHNvIGhhcyBhbiBhc3NvY2lhdGVkIHNlcmlhbGl6ZSBzdHJlYW1cbiAgICAvLyBhbGdvcml0aG0uLi5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gc3RyZWFtXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqIEB0aGlzIHtUZXh0RGVjb2Rlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVTdHJlYW0oc3RyZWFtKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gc3RyZWFtLlxuICAgICAgLy8gKERvbmUgaW4tcGxhY2Ugb24gYXJyYXksIHJhdGhlciB0aGFuIGFzIGEgc3RyZWFtKVxuXG4gICAgICAvLyAyLiBJZiBlbmNvZGluZyBpcyBVVEYtOCwgVVRGLTE2QkUsIG9yIFVURi0xNkxFLCBhbmQgaWdub3JlXG4gICAgICAvLyBCT00gZmxhZyBhbmQgQk9NIHNlZW4gZmxhZyBhcmUgdW5zZXQsIHJ1biB0aGVzZSBzdWJzdWJzdGVwczpcbiAgICAgIGlmIChpbmNsdWRlcyhbJ1VURi04JywgJ1VURi0xNkxFJywgJ1VURi0xNkJFJ10sIHRoaXMuX2VuY29kaW5nLm5hbWUpICYmXG4gICAgICAgICAgIXRoaXMuX2lnbm9yZUJPTSAmJiAhdGhpcy5fQk9Nc2Vlbikge1xuICAgICAgICBpZiAoc3RyZWFtLmxlbmd0aCA+IDAgJiYgc3RyZWFtWzBdID09PSAweEZFRkYpIHtcbiAgICAgICAgICAvLyAxLiBJZiB0b2tlbiBpcyBVK0ZFRkYsIHNldCBCT00gc2VlbiBmbGFnLlxuICAgICAgICAgIHRoaXMuX0JPTXNlZW4gPSB0cnVlO1xuICAgICAgICAgIHN0cmVhbS5zaGlmdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0b2tlbiBpcyBub3QgZW5kLW9mLXN0cmVhbSwgc2V0IEJPTSBzZWVuXG4gICAgICAgICAgLy8gZmxhZyBhbmQgYXBwZW5kIHRva2VuIHRvIHN0cmVhbS5cbiAgICAgICAgICB0aGlzLl9CT01zZWVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRva2VuIGlzIG5vdCBlbmQtb2Ytc3RyZWFtLCBhcHBlbmQgdG9rZW5cbiAgICAgICAgICAvLyB0byBvdXRwdXQuXG4gICAgICAgICAgLy8gKG5vLW9wKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBvdXRwdXQuXG4gICAgICByZXR1cm4gY29kZVBvaW50c1RvU3RyaW5nKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZVN0cmVhbS5jYWxsKHRoaXMsIG91dHB1dCk7XG4gIH07XG5cbiAgLy8gOC4yIEludGVyZmFjZSBUZXh0RW5jb2RlclxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGVuY29kaW5nLiBOT05TVEFOREFSRC5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIE5PTlNUQU5EQVJELlxuICAgKi9cbiAgZnVuY3Rpb24gVGV4dEVuY29kZXIobGFiZWwsIG9wdGlvbnMpIHtcbiAgICAvLyBXZWIgSURMIGNvbnZlbnRpb25zXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRleHRFbmNvZGVyKSlcbiAgICAgIHRocm93IFR5cGVFcnJvcignQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0IFxcJ25ld1xcJz8nKTtcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgLy8gQSBUZXh0RW5jb2RlciBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgZW5jb2RpbmcgYW5kIGVuY29kZXIuXG5cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICB0aGlzLl9lbmNvZGluZyA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHs/RW5jb2Rlcn0gKi9cbiAgICB0aGlzLl9lbmNvZGVyID0gbnVsbDtcblxuICAgIC8vIE5vbi1zdGFuZGFyZFxuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9kb19ub3RfZmx1c2ggPSBmYWxzZTtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLl9mYXRhbCA9IEJvb2xlYW4ob3B0aW9uc1snZmF0YWwnXSkgPyAnZmF0YWwnIDogJ3JlcGxhY2VtZW50JztcblxuICAgIC8vIDEuIExldCBlbmMgYmUgYSBuZXcgVGV4dEVuY29kZXIgb2JqZWN0LlxuICAgIHZhciBlbmMgPSB0aGlzO1xuXG4gICAgLy8gMi4gU2V0IGVuYydzIGVuY29kaW5nIHRvIFVURi04J3MgZW5jb2Rlci5cbiAgICBpZiAoQm9vbGVhbihvcHRpb25zWydOT05TVEFOREFSRF9hbGxvd0xlZ2FjeUVuY29kaW5nJ10pKSB7XG4gICAgICAvLyBOT05TVEFOREFSRCBiZWhhdmlvci5cbiAgICAgIGxhYmVsID0gbGFiZWwgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhsYWJlbCkgOiBERUZBVUxUX0VOQ09ESU5HO1xuICAgICAgdmFyIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcobGFiZWwpO1xuICAgICAgaWYgKGVuY29kaW5nID09PSBudWxsIHx8IGVuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBsYWJlbCk7XG4gICAgICBpZiAoIWVuY29kZXJzW2VuY29kaW5nLm5hbWVdKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFbmNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgICAnIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8nKTtcbiAgICAgIH1cbiAgICAgIGVuYy5fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IuXG4gICAgICBlbmMuX2VuY29kaW5nID0gZ2V0RW5jb2RpbmcoJ3V0Zi04Jyk7XG5cbiAgICAgIGlmIChsYWJlbCAhPT0gdW5kZWZpbmVkICYmICdjb25zb2xlJyBpbiBnbG9iYWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUZXh0RW5jb2RlciBjb25zdHJ1Y3RvciBjYWxsZWQgd2l0aCBlbmNvZGluZyBsYWJlbCwgJ1xuICAgICAgICAgICAgICAgICAgICAgKyAnd2hpY2ggaXMgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgcHJlLUVTNSBydW50aW1lczpcbiAgICBpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcbiAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIDMuIFJldHVybiBlbmMuXG4gICAgcmV0dXJuIGVuYztcbiAgfVxuXG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAvLyBUaGUgZW5jb2RpbmcgYXR0cmlidXRlJ3MgZ2V0dGVyIG11c3QgcmV0dXJuIGVuY29kaW5nJ3MgbmFtZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dEVuY29kZXIucHJvdG90eXBlLCAnZW5jb2RpbmcnLCB7XG4gICAgICAvKiogQHRoaXMge1RleHRFbmNvZGVyfSAqL1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKTsgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0cmluZyBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqIEByZXR1cm4geyFVaW50OEFycmF5fSBFbmNvZGVkIGJ5dGVzLCBhcyBhIFVpbnQ4QXJyYXkuXG4gICAqL1xuICBUZXh0RW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG9wdF9zdHJpbmcsIG9wdGlvbnMpIHtcbiAgICBvcHRfc3RyaW5nID0gb3B0X3N0cmluZyA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcob3B0X3N0cmluZyk7XG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIE5PVEU6IFRoaXMgb3B0aW9uIGlzIG5vbnN0YW5kYXJkLiBOb25lIG9mIHRoZSBlbmNvZGluZ3NcbiAgICAvLyBwZXJtaXR0ZWQgZm9yIGVuY29kaW5nIChpLmUuIFVURi04LCBVVEYtMTYpIGFyZSBzdGF0ZWZ1bCB3aGVuXG4gICAgLy8gdGhlIGlucHV0IGlzIGEgVVNWU3RyaW5nIHNvIHN0cmVhbWluZyBpcyBub3QgbmVjZXNzYXJ5LlxuICAgIGlmICghdGhpcy5fZG9fbm90X2ZsdXNoKVxuICAgICAgdGhpcy5fZW5jb2RlciA9IGVuY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtcbiAgICAgICAgZmF0YWw6IHRoaXMuX2ZhdGFsID09PSAnZmF0YWwnfSk7XG4gICAgdGhpcy5fZG9fbm90X2ZsdXNoID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAvLyAxLiBDb252ZXJ0IGlucHV0IHRvIGEgc3RyZWFtLlxuICAgIHZhciBpbnB1dCA9IG5ldyBTdHJlYW0oc3RyaW5nVG9Db2RlUG9pbnRzKG9wdF9zdHJpbmcpKTtcblxuICAgIC8vIDIuIExldCBvdXRwdXQgYmUgYSBuZXcgc3RyZWFtXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgIHZhciByZXN1bHQ7XG4gICAgLy8gMy4gV2hpbGUgdHJ1ZSwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gaW5wdXQuXG4gICAgICB2YXIgdG9rZW4gPSBpbnB1dC5yZWFkKCk7XG4gICAgICBpZiAodG9rZW4gPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgdG9rZW4gZm9yIGVuY29kZXIsXG4gICAgICAvLyBpbnB1dCwgb3V0cHV0LlxuICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2Rlci5oYW5kbGVyKGlucHV0LCB0b2tlbik7XG4gICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgYnJlYWs7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICBlbHNlXG4gICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIC8vIFRPRE86IEFsaWduIHdpdGggc3BlYyBhbGdvcml0aG0uXG4gICAgaWYgKCF0aGlzLl9kb19ub3RfZmx1c2gpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZXIuaGFuZGxlcihpbnB1dCwgaW5wdXQucmVhZCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VuY29kZXIgPSBudWxsO1xuICAgIH1cbiAgICAvLyAzLiBJZiByZXN1bHQgaXMgZmluaXNoZWQsIGNvbnZlcnQgb3V0cHV0IGludG8gYSBieXRlIHNlcXVlbmNlLFxuICAgIC8vIGFuZCB0aGVuIHJldHVybiBhIFVpbnQ4QXJyYXkgb2JqZWN0IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyXG4gICAgLy8gY29udGFpbmluZyBvdXRwdXQuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG91dHB1dCk7XG4gIH07XG5cblxuICAvL1xuICAvLyA5LiBUaGUgZW5jb2RpbmdcbiAgLy9cblxuICAvLyA5LjEgdXRmLThcblxuICAvLyA5LjEuMSB1dGYtOCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVVRGOERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG5cbiAgICAvLyB1dGYtOCdzIGRlY29kZXIncyBoYXMgYW4gYXNzb2NpYXRlZCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOFxuICAgIC8vIGJ5dGVzIHNlZW4sIGFuZCB1dGYtOCBieXRlcyBuZWVkZWQgKGFsbCBpbml0aWFsbHkgMCksIGEgdXRmLThcbiAgICAvLyBsb3dlciBib3VuZGFyeSAoaW5pdGlhbGx5IDB4ODApLCBhbmQgYSB1dGYtOCB1cHBlciBib3VuZGFyeVxuICAgIC8vIChpbml0aWFsbHkgMHhCRikuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2NvZGVfcG9pbnQgPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9ieXRlc19zZWVuID0gMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4QkY7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgdXRmLTggYnl0ZXMgbmVlZGVkIGlzIG5vdCAwLFxuICAgICAgLy8gc2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiB1dGY4X2J5dGVzX25lZWRlZCAhPT0gMCkge1xuICAgICAgICB1dGY4X2J5dGVzX25lZWRlZCA9IDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIHV0Zi04IGJ5dGVzIG5lZWRlZCBpcyAwLCBiYXNlZCBvbiBieXRlOlxuICAgICAgaWYgKHV0ZjhfYnl0ZXNfbmVlZGVkID09PSAwKSB7XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgICAgIHJldHVybiBiaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHhDMiB0byAweERGXG4gICAgICAgIGVsc2UgaWYgKGluUmFuZ2UoYml0ZSwgMHhDMiwgMHhERikpIHtcbiAgICAgICAgICAvLyAxLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDEuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAxO1xuXG4gICAgICAgICAgLy8gMi4gU2V0IFVURi04IGNvZGUgcG9pbnQgdG8gYnl0ZSAmIDB4MUYuXG4gICAgICAgICAgdXRmOF9jb2RlX3BvaW50ID0gYml0ZSAmIDB4MUY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEUwIHRvIDB4RUZcbiAgICAgICAgZWxzZSBpZiAoaW5SYW5nZShiaXRlLCAweEUwLCAweEVGKSkge1xuICAgICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgMHhFMCwgc2V0IHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIDB4QTAuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RTApXG4gICAgICAgICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHhBMDtcbiAgICAgICAgICAvLyAyLiBJZiBieXRlIGlzIDB4RUQsIHNldCB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweDlGLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEVEKVxuICAgICAgICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4OUY7XG4gICAgICAgICAgLy8gMy4gU2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAyLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMjtcbiAgICAgICAgICAvLyA0LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byBieXRlICYgMHhGLlxuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgJiAweEY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEYwIHRvIDB4RjRcbiAgICAgICAgZWxzZSBpZiAoaW5SYW5nZShiaXRlLCAweEYwLCAweEY0KSkge1xuICAgICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgMHhGMCwgc2V0IHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIDB4OTAuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RjApXG4gICAgICAgICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg5MDtcbiAgICAgICAgICAvLyAyLiBJZiBieXRlIGlzIDB4RjQsIHNldCB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweDhGLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEY0KVxuICAgICAgICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4OEY7XG4gICAgICAgICAgLy8gMy4gU2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAzLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMztcbiAgICAgICAgICAvLyA0LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byBieXRlICYgMHg3LlxuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgJiAweDc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGVycm9yLlxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBub3QgaW4gdGhlIHJhbmdlIHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIHV0Zi04XG4gICAgICAvLyB1cHBlciBib3VuZGFyeSwgaW5jbHVzaXZlLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoIWluUmFuZ2UoYml0ZSwgdXRmOF9sb3dlcl9ib3VuZGFyeSwgdXRmOF91cHBlcl9ib3VuZGFyeSkpIHtcblxuICAgICAgICAvLyAxLiBTZXQgdXRmLTggY29kZSBwb2ludCwgdXRmLTggYnl0ZXMgbmVlZGVkLCBhbmQgdXRmLThcbiAgICAgICAgLy8gYnl0ZXMgc2VlbiB0byAwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCwgYW5kIHNldFxuICAgICAgICAvLyB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweEJGLlxuICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2J5dGVzX25lZWRlZCA9IHV0ZjhfYnl0ZXNfc2VlbiA9IDA7XG4gICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwO1xuICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHhCRjtcblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyAzLiBSZXR1cm4gZXJyb3IuXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBTZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCBhbmQgdXRmLTggdXBwZXIgYm91bmRhcnlcbiAgICAgIC8vIHRvIDB4QkYuXG4gICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg4MDtcbiAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgICAvLyA2LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byAoVVRGLTggY29kZSBwb2ludCA8PCA2KSB8IChieXRlICZcbiAgICAgIC8vIDB4M0YpXG4gICAgICB1dGY4X2NvZGVfcG9pbnQgPSAodXRmOF9jb2RlX3BvaW50IDw8IDYpIHwgKGJpdGUgJiAweDNGKTtcblxuICAgICAgLy8gNy4gSW5jcmVhc2UgdXRmLTggYnl0ZXMgc2VlbiBieSBvbmUuXG4gICAgICB1dGY4X2J5dGVzX3NlZW4gKz0gMTtcblxuICAgICAgLy8gOC4gSWYgdXRmLTggYnl0ZXMgc2VlbiBpcyBub3QgZXF1YWwgdG8gdXRmLTggYnl0ZXMgbmVlZGVkLFxuICAgICAgLy8gY29udGludWUuXG4gICAgICBpZiAodXRmOF9ieXRlc19zZWVuICE9PSB1dGY4X2J5dGVzX25lZWRlZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIDkuIExldCBjb2RlIHBvaW50IGJlIHV0Zi04IGNvZGUgcG9pbnQuXG4gICAgICB2YXIgY29kZV9wb2ludCA9IHV0ZjhfY29kZV9wb2ludDtcblxuICAgICAgLy8gMTAuIFNldCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOCBieXRlcyBuZWVkZWQsIGFuZCB1dGYtOCBieXRlc1xuICAgICAgLy8gc2VlbiB0byAwLlxuICAgICAgdXRmOF9jb2RlX3BvaW50ID0gdXRmOF9ieXRlc19uZWVkZWQgPSB1dGY4X2J5dGVzX3NlZW4gPSAwO1xuXG4gICAgICAvLyAxMS4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDkuMS4yIHV0Zi04IGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEY4RW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gU2V0IGNvdW50IGFuZCBvZmZzZXQgYmFzZWQgb24gdGhlIHJhbmdlIGNvZGUgcG9pbnQgaXMgaW46XG4gICAgICB2YXIgY291bnQsIG9mZnNldDtcbiAgICAgIC8vIFUrMDA4MCB0byBVKzA3RkYsIGluY2x1c2l2ZTpcbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDA4MCwgMHgwN0ZGKSkge1xuICAgICAgICAvLyAxIGFuZCAweEMwXG4gICAgICAgIGNvdW50ID0gMTtcbiAgICAgICAgb2Zmc2V0ID0gMHhDMDtcbiAgICAgIH1cbiAgICAgIC8vIFUrMDgwMCB0byBVK0ZGRkYsIGluY2x1c2l2ZTpcbiAgICAgIGVsc2UgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwODAwLCAweEZGRkYpKSB7XG4gICAgICAgIC8vIDIgYW5kIDB4RTBcbiAgICAgICAgY291bnQgPSAyO1xuICAgICAgICBvZmZzZXQgPSAweEUwO1xuICAgICAgfVxuICAgICAgLy8gVSsxMDAwMCB0byBVKzEwRkZGRiwgaW5jbHVzaXZlOlxuICAgICAgZWxzZSBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDEwMDAwLCAweDEwRkZGRikpIHtcbiAgICAgICAgLy8gMyBhbmQgMHhGMFxuICAgICAgICBjb3VudCA9IDM7XG4gICAgICAgIG9mZnNldCA9IDB4RjA7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIExldCBieXRlcyBiZSBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgZmlyc3QgYnl0ZSBpcyAoY29kZVxuICAgICAgLy8gcG9pbnQgPj4gKDYgw5cgY291bnQpKSArIG9mZnNldC5cbiAgICAgIHZhciBieXRlcyA9IFsoY29kZV9wb2ludCA+PiAoNiAqIGNvdW50KSkgKyBvZmZzZXRdO1xuXG4gICAgICAvLyA1LiBSdW4gdGhlc2Ugc3Vic3RlcHMgd2hpbGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIDA6XG4gICAgICB3aGlsZSAoY291bnQgPiAwKSB7XG5cbiAgICAgICAgLy8gMS4gU2V0IHRlbXAgdG8gY29kZSBwb2ludCA+PiAoNiDDlyAoY291bnQg4oiSIDEpKS5cbiAgICAgICAgdmFyIHRlbXAgPSBjb2RlX3BvaW50ID4+ICg2ICogKGNvdW50IC0gMSkpO1xuXG4gICAgICAgIC8vIDIuIEFwcGVuZCB0byBieXRlcyAweDgwIHwgKHRlbXAgJiAweDNGKS5cbiAgICAgICAgYnl0ZXMucHVzaCgweDgwIHwgKHRlbXAgJiAweDNGKSk7XG5cbiAgICAgICAgLy8gMy4gRGVjcmVhc2UgY291bnQgYnkgb25lLlxuICAgICAgICBjb3VudCAtPSAxO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBSZXR1cm4gYnl0ZXMgYnl0ZXMsIGluIG9yZGVyLlxuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydVVEYtOCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGOEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ1VURi04J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEY4RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvL1xuICAvLyAxMC4gTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDEwLjEgc2luZ2xlLWJ5dGUgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gaW5kZXggVGhlIGVuY29kaW5nIGluZGV4LlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNpbmdsZUJ5dGVEZWNvZGVyKGluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBhbiBBU0NJSSBieXRlLCByZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlXG4gICAgICAvLyBpcyBieXRlLlxuICAgICAgaWYgKGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gMy4gTGV0IGNvZGUgcG9pbnQgYmUgdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIGJ5dGUg4oiSIDB4ODAgaW5cbiAgICAgIC8vIGluZGV4IHNpbmdsZS1ieXRlLlxuICAgICAgdmFyIGNvZGVfcG9pbnQgPSBpbmRleFtiaXRlIC0gMHg4MF07XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTAuMiBzaW5nbGUtYnl0ZSBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7IUFycmF5Ljw/bnVtYmVyPn0gaW5kZXggVGhlIGVuY29kaW5nIGluZGV4LlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNpbmdsZUJ5dGVFbmNvZGVyKGluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIHNpbmdsZS1ieXRlLlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBieXRlIHdob3NlIHZhbHVlIGlzIHBvaW50ZXIgKyAweDgwLlxuICAgICAgcmV0dXJuIHBvaW50ZXIgKyAweDgwO1xuICAgIH07XG4gIH1cblxuICAoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEoJ2VuY29kaW5nLWluZGV4ZXMnIGluIGdsb2JhbCkpXG4gICAgICByZXR1cm47XG4gICAgZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgIGlmIChjYXRlZ29yeS5oZWFkaW5nICE9PSAnTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncycpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhdGVnb3J5LmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgIHZhciBuYW1lID0gZW5jb2RpbmcubmFtZTtcbiAgICAgICAgdmFyIGlkeCA9IGluZGV4KG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgICAgICAgZGVjb2RlcnNbbmFtZV0gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVCeXRlRGVjb2RlcihpZHgsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gICAgICAgIGVuY29kZXJzW25hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlQnl0ZUVuY29kZXIoaWR4LCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KCkpO1xuXG4gIC8vXG4gIC8vIDExLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMS4xIGdia1xuXG4gIC8vIDExLjEuMSBnYmsgZGVjb2RlclxuICAvLyBnYmsncyBkZWNvZGVyIGlzIGdiMTgwMzAncyBkZWNvZGVyLlxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydHQksnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDExLjEuMiBnYmsgZW5jb2RlclxuICAvLyBnYmsncyBlbmNvZGVyIGlzIGdiMTgwMzAncyBlbmNvZGVyIHdpdGggaXRzIGdiayBmbGFnIHNldC5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snR0JLJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCB0cnVlKTtcbiAgfTtcblxuICAvLyAxMS4yIGdiMTgwMzBcblxuICAvLyAxMS4yLjEgZ2IxODAzMCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gR0IxODAzMERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2IxODAzMCBmaXJzdCwgZ2IxODAzMFxuICAgIC8vIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgKGFsbCBpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBnYjE4MDMwX2ZpcnN0ID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfc2Vjb25kID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIGFyZSAweDAwLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBnYjE4MDMwX2ZpcnN0ID09PSAweDAwICYmXG4gICAgICAgICAgZ2IxODAzMF9zZWNvbmQgPT09IDB4MDAgJiYgZ2IxODAzMF90aGlyZCA9PT0gMHgwMCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIG9yIGdiMTgwMzAgdGhpcmQgaXMgbm90IDB4MDAsIHNldCBnYjE4MDMwIGZpcnN0LFxuICAgICAgLy8gZ2IxODAzMCBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJlxuICAgICAgICAgIChnYjE4MDMwX2ZpcnN0ICE9PSAweDAwIHx8IGdiMTgwMzBfc2Vjb25kICE9PSAweDAwIHx8XG4gICAgICAgICAgIGdiMTgwMzBfdGhpcmQgIT09IDB4MDApKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgICAgICBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuICAgICAgdmFyIGNvZGVfcG9pbnQ7XG4gICAgICAvLyAzLiBJZiBnYjE4MDMwIHRoaXJkIGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF90aGlyZCAhPT0gMHgwMCkge1xuICAgICAgICAvLyAxLiBMZXQgY29kZSBwb2ludCBiZSBudWxsLlxuICAgICAgICBjb2RlX3BvaW50ID0gbnVsbDtcbiAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDM5LCBpbmNsdXNpdmUsIHNldFxuICAgICAgICAvLyBjb2RlIHBvaW50IHRvIHRoZSBpbmRleCBnYjE4MDMwIHJhbmdlcyBjb2RlIHBvaW50IGZvclxuICAgICAgICAvLyAoKChnYjE4MDMwIGZpcnN0IOKIkiAweDgxKSDDlyAxMCArIGdiMTgwMzAgc2Vjb25kIOKIkiAweDMwKSDDl1xuICAgICAgICAvLyAxMjYgKyBnYjE4MDMwIHRoaXJkIOKIkiAweDgxKSDDlyAxMCArIGJ5dGUg4oiSIDB4MzAuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MzAsIDB4MzkpKSB7XG4gICAgICAgICAgY29kZV9wb2ludCA9IGluZGV4R0IxODAzMFJhbmdlc0NvZGVQb2ludEZvcihcbiAgICAgICAgICAgICAgKCgoZ2IxODAzMF9maXJzdCAtIDB4ODEpICogMTAgKyBnYjE4MDMwX3NlY29uZCAtIDB4MzApICogMTI2ICtcbiAgICAgICAgICAgICAgIGdiMTgwMzBfdGhpcmQgLSAweDgxKSAqIDEwICsgYml0ZSAtIDB4MzApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gTGV0IGJ1ZmZlciBiZSBhIGJ5dGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBnYjE4MDMwXG4gICAgICAgIC8vIHNlY29uZCwgZ2IxODAzMCB0aGlyZCwgYW5kIGJ5dGUsIGluIG9yZGVyLlxuICAgICAgICB2YXIgYnVmZmVyID0gW2diMTgwMzBfc2Vjb25kLCBnYjE4MDMwX3RoaXJkLCBiaXRlXTtcblxuICAgICAgICAvLyA0LiBTZXQgZ2IxODAzMCBmaXJzdCwgZ2IxODAzMCBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIHRvXG4gICAgICAgIC8vIDB4MDAuXG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcHJlcGVuZCBidWZmZXIgdG8gc3RyZWFtIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKSB7XG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYnVmZmVyKTtcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGdiMTgwMzAgc2Vjb25kIGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF9zZWNvbmQgIT09IDB4MDApIHtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgdGhpcmQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICAgIGdiMTgwMzBfdGhpcmQgPSBiaXRlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCBnYjE4MDMwIHNlY29uZCBmb2xsb3dlZCBieSBieXRlIHRvIHN0cmVhbSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgYW5kIGdiMTgwMzAgc2Vjb25kIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKFtnYjE4MDMwX3NlY29uZCwgYml0ZV0pO1xuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF9zZWNvbmQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgZ2IxODAzMCBmaXJzdCBpcyBub3QgMHgwMCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKGdiMTgwMzBfZmlyc3QgIT09IDB4MDApIHtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDMwIHRvIDB4MzksIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgc2Vjb25kIHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgzMCwgMHgzOSkpIHtcbiAgICAgICAgICBnYjE4MDMwX3NlY29uZCA9IGJpdGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBMZXQgbGVhZCBiZSBnYjE4MDMwIGZpcnN0LCBsZXQgcG9pbnRlciBiZSBudWxsLCBhbmQgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgdG8gMHgwMC5cbiAgICAgICAgdmFyIGxlYWQgPSBnYjE4MDMwX2ZpcnN0O1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuXG4gICAgICAgIC8vIDMuIExldCBvZmZzZXQgYmUgMHg0MCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGIGFuZCAweDQxXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IGJpdGUgPCAweDdGID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFLCBpbmNsdXNpdmUsIG9yIDB4ODBcbiAgICAgICAgLy8gdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgMHg4MSkgw5cgMTkwICtcbiAgICAgICAgLy8gKGJ5dGUg4oiSIG9mZnNldCkuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHg4MCwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyAoYml0ZSAtIG9mZnNldCk7XG5cbiAgICAgICAgLy8gNS4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCBpZiBwb2ludGVyIGlzIG51bGwgYW5kIHRoZSBpbmRleFxuICAgICAgICAvLyBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGdiMTgwMzAgb3RoZXJ3aXNlLlxuICAgICAgICBjb2RlX3BvaW50ID0gcG9pbnRlciA9PT0gbnVsbCA/IG51bGwgOlxuICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2diMTgwMzAnKSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4ODAsIHJldHVybiBjb2RlIHBvaW50IFUrMjBBQy5cbiAgICAgIGlmIChiaXRlID09PSAweDgwKVxuICAgICAgICByZXR1cm4gMHgyMEFDO1xuXG4gICAgICAvLyA4LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAvLyBnYjE4MDMwIGZpcnN0IHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gOS4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDExLjIuMiBnYjE4MDMwIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGdia19mbGFnXG4gICAqL1xuICBmdW5jdGlvbiBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCBnYmtfZmxhZykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2JrIGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVStFNUU1LCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4RTVFNSlcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNC4gSWYgdGhlIGdiayBmbGFnIGlzIHNldCBhbmQgY29kZSBwb2ludCBpcyBVKzIwQUMsIHJldHVyblxuICAgICAgLy8gYnl0ZSAweDgwLlxuICAgICAgaWYgKGdia19mbGFnICYmIGNvZGVfcG9pbnQgPT09IDB4MjBBQylcbiAgICAgICAgcmV0dXJuIDB4ODA7XG5cbiAgICAgIC8vIDUuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBnYjE4MDMwLlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2diMTgwMzAnKSk7XG5cbiAgICAgIC8vIDYuIElmIHBvaW50ZXIgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChwb2ludGVyICE9PSBudWxsKSB7XG5cbiAgICAgICAgLy8gMS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE5MCkgKyAweDgxLlxuICAgICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxOTApICsgMHg4MTtcblxuICAgICAgICAvLyAyLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE5MC5cbiAgICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDE5MDtcblxuICAgICAgICAvLyAzLiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YgYW5kIDB4NDEgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgb2Zmc2V0ID0gdHJhaWwgPCAweDNGID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gNC4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsICsgb2Zmc2V0LlxuICAgICAgICByZXR1cm4gW2xlYWQsIHRyYWlsICsgb2Zmc2V0XTtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gSWYgZ2JrIGZsYWcgaXMgc2V0LCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKGdia19mbGFnKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBTZXQgcG9pbnRlciB0byB0aGUgaW5kZXggZ2IxODAzMCByYW5nZXMgcG9pbnRlciBmb3IgY29kZVxuICAgICAgLy8gcG9pbnQuXG4gICAgICBwb2ludGVyID0gaW5kZXhHQjE4MDMwUmFuZ2VzUG9pbnRlckZvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGJ5dGUxIGJlIGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNiAvIDEwKS5cbiAgICAgIHZhciBieXRlMSA9IGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNiAvIDEwKTtcblxuICAgICAgLy8gMTAuIFNldCBwb2ludGVyIHRvIHBvaW50ZXIg4oiSIGJ5dGUxIMOXIDEwIMOXIDEyNiDDlyAxMC5cbiAgICAgIHBvaW50ZXIgPSBwb2ludGVyIC0gYnl0ZTEgKiAxMCAqIDEyNiAqIDEwO1xuXG4gICAgICAvLyAxMS4gTGV0IGJ5dGUyIGJlIGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNikuXG4gICAgICB2YXIgYnl0ZTIgPSBmbG9vcihwb2ludGVyIC8gMTAgLyAxMjYpO1xuXG4gICAgICAvLyAxMi4gU2V0IHBvaW50ZXIgdG8gcG9pbnRlciDiiJIgYnl0ZTIgw5cgMTAgw5cgMTI2LlxuICAgICAgcG9pbnRlciA9IHBvaW50ZXIgLSBieXRlMiAqIDEwICogMTI2O1xuXG4gICAgICAvLyAxMy4gTGV0IGJ5dGUzIGJlIGZsb29yKHBvaW50ZXIgLyAxMCkuXG4gICAgICB2YXIgYnl0ZTMgPSBmbG9vcihwb2ludGVyIC8gMTApO1xuXG4gICAgICAvLyAxNC4gTGV0IGJ5dGU0IGJlIHBvaW50ZXIg4oiSIGJ5dGUzIMOXIDEwLlxuICAgICAgdmFyIGJ5dGU0ID0gcG9pbnRlciAtIGJ5dGUzICogMTA7XG5cbiAgICAgIC8vIDE1LiBSZXR1cm4gZm91ciBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGJ5dGUxICsgMHg4MSwgYnl0ZTIgK1xuICAgICAgLy8gMHgzMCwgYnl0ZTMgKyAweDgxLCBieXRlNCArIDB4MzAuXG4gICAgICByZXR1cm4gW2J5dGUxICsgMHg4MSxcbiAgICAgICAgICAgICAgYnl0ZTIgKyAweDMwLFxuICAgICAgICAgICAgICBieXRlMyArIDB4ODEsXG4gICAgICAgICAgICAgIGJ5dGU0ICsgMHgzMF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2diMTgwMzAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydnYjE4MDMwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDEyLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTIuMSBCaWc1XG5cbiAgLy8gMTIuMS4xIEJpZzUgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEJpZzVEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIEJpZzUncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIEJpZzUgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gQmlnNV9sZWFkID0gMHgwMDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBCaWc1IGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gQmlnNSBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIEJpZzVfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBCaWc1X2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBCaWc1IGxlYWQgaXMgMHgwMCwgcmV0dXJuXG4gICAgICAvLyBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIEJpZzVfbGVhZCA9PT0gMHgwMClcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBCaWc1IGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIEJpZzUgbGVhZCwgbGV0XG4gICAgICAvLyBwb2ludGVyIGJlIG51bGwsIHNldCBCaWc1IGxlYWQgdG8gMHgwMCwgYW5kIHRoZW4gcnVuIHRoZXNlXG4gICAgICAvLyBzdWJzdGVwczpcbiAgICAgIGlmIChCaWc1X2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBCaWc1X2xlYWQ7XG4gICAgICAgIHZhciBwb2ludGVyID0gbnVsbDtcbiAgICAgICAgQmlnNV9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgYnl0ZSBpcyBsZXNzIHRoYW4gMHg3RiBhbmQgMHg2MlxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSBiaXRlIDwgMHg3RiA/IDB4NDAgOiAweDYyO1xuXG4gICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSwgaW5jbHVzaXZlLCBvciAweEExXG4gICAgICAgIC8vIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE1NyArXG4gICAgICAgIC8vIChieXRlIOKIkiBvZmZzZXQpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQwLCAweDdFKSB8fCBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHBvaW50ZXIgPSAobGVhZCAtIDB4ODEpICogMTU3ICsgKGJpdGUgLSBvZmZzZXQpO1xuXG4gICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGEgcm93IGluIHRoZSB0YWJsZSBiZWxvdyB3aG9zZSBmaXJzdCBjb2x1bW5cbiAgICAgICAgLy8gaXMgcG9pbnRlciwgcmV0dXJuIHRoZSB0d28gY29kZSBwb2ludHMgbGlzdGVkIGluIGl0cyBzZWNvbmRcbiAgICAgICAgLy8gY29sdW1uXG4gICAgICAgIC8vIFBvaW50ZXIgfCBDb2RlIHBvaW50c1xuICAgICAgICAvLyAtLS0tLS0tLSstLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyAxMTMzICAgIHwgVSswMENBIFUrMDMwNFxuICAgICAgICAvLyAxMTM1ICAgIHwgVSswMENBIFUrMDMwQ1xuICAgICAgICAvLyAxMTY0ICAgIHwgVSswMEVBIFUrMDMwNFxuICAgICAgICAvLyAxMTY2ICAgIHwgVSswMEVBIFUrMDMwQ1xuICAgICAgICBzd2l0Y2ggKHBvaW50ZXIpIHtcbiAgICAgICAgICBjYXNlIDExMzM6IHJldHVybiBbMHgwMENBLCAweDAzMDRdO1xuICAgICAgICAgIGNhc2UgMTEzNTogcmV0dXJuIFsweDAwQ0EsIDB4MDMwQ107XG4gICAgICAgICAgY2FzZSAxMTY0OiByZXR1cm4gWzB4MDBFQSwgMHgwMzA0XTtcbiAgICAgICAgICBjYXNlIDExNjY6IHJldHVybiBbMHgwMEVBLCAweDAzMENdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCBpZiBwb2ludGVyIGlzIG51bGwgYW5kIHRoZSBpbmRleFxuICAgICAgICAvLyBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IEJpZzUgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IChwb2ludGVyID09PSBudWxsKSA/IG51bGwgOlxuICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2JpZzUnKSk7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA3LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0IEJpZzVcbiAgICAgIC8vIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHhGRSkpIHtcbiAgICAgICAgQmlnNV9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxMi4xLjIgQmlnNSBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gQmlnNUVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBCaWc1IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4QmlnNVBvaW50ZXJGb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gMTU3KSArIDB4ODEuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxNTcpICsgMHg4MTtcblxuICAgICAgLy8gNi4gSWYgbGVhZCBpcyBsZXNzIHRoYW4gMHhBMSwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChsZWFkIDwgMHhBMSlcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNy4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxNTcuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgMTU3O1xuXG4gICAgICAvLyA4LiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YgYW5kIDB4NjJcbiAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgIHZhciBvZmZzZXQgPSB0cmFpbCA8IDB4M0YgPyAweDQwIDogMHg2MjtcblxuICAgICAgLy8gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsICsgb2Zmc2V0LlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbCArIG9mZnNldF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ0JpZzUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJpZzVFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydCaWc1J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBCaWc1RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDEzLiBMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMy4xIGV1Yy1qcFxuXG4gIC8vIDEzLjEuMSBldWMtanAgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0pQRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIGV1Yy1qcCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZXVjLWpwIGppczAyMTIgZmxhZ1xuICAgIC8vIChpbml0aWFsbHkgdW5zZXQpIGFuZCBldWMtanAgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge2Jvb2xlYW59ICovIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZXVjanBfbGVhZCA9IDB4MDA7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWpwIGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2pwX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1qcCBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNqcF9sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEUgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4REYsIGluY2x1c2l2ZSwgc2V0IGV1Yy1qcCBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBhIGNvZGVcbiAgICAgIC8vIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4RkY2MSDiiJIgMHhBMSArIGJ5dGUuXG4gICAgICBpZiAoZXVjanBfbGVhZCA9PT0gMHg4RSAmJiBpblJhbmdlKGJpdGUsIDB4QTEsIDB4REYpKSB7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gMHhGRjYxIC0gMHhBMSArIGJpdGU7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEYgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4RkUsIGluY2x1c2l2ZSwgc2V0IHRoZSBldWMtanAgamlzMDIxMiBmbGFnLCBzZXQgZXVjLWpwIGxlYWRcbiAgICAgIC8vIHRvIGJ5dGUsIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoZXVjanBfbGVhZCA9PT0gMHg4RiAmJiBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKSB7XG4gICAgICAgIGV1Y2pwX2ppczAyMTJfZmxhZyA9IHRydWU7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgZXVjLWpwIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIGV1Yy1qcCBsZWFkLCBzZXRcbiAgICAgIC8vIGV1Yy1qcCBsZWFkIHRvIDB4MDAsIGFuZCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZXVjanBfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IGV1Y2pwX2xlYWQ7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIExldCBjb2RlIHBvaW50IGJlIG51bGwuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gbnVsbDtcblxuICAgICAgICAvLyAyLiBJZiBsZWFkIGFuZCBieXRlIGFyZSBib3RoIGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsXG4gICAgICAgIC8vIGluY2x1c2l2ZSwgc2V0IGNvZGUgcG9pbnQgdG8gdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIChsZWFkXG4gICAgICAgIC8vIOKIkiAweEExKSDDlyA5NCArIGJ5dGUg4oiSIDB4QTEgaW4gaW5kZXggamlzMDIwOCBpZiB0aGUgZXVjLWpwXG4gICAgICAgIC8vIGppczAyMTIgZmxhZyBpcyB1bnNldCBhbmQgaW4gaW5kZXggamlzMDIxMiBvdGhlcndpc2UuXG4gICAgICAgIGlmIChpblJhbmdlKGxlYWQsIDB4QTEsIDB4RkUpICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgICBjb2RlX3BvaW50ID0gaW5kZXhDb2RlUG9pbnRGb3IoXG4gICAgICAgICAgICAobGVhZCAtIDB4QTEpICogOTQgKyAoYml0ZSAtIDB4QTEpLFxuICAgICAgICAgICAgaW5kZXgoIWV1Y2pwX2ppczAyMTJfZmxhZyA/ICdqaXMwMjA4JyA6ICdqaXMwMjEyJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVW5zZXQgdGhlIGV1Yy1qcCBqaXMwMjEyIGZsYWcuXG4gICAgICAgIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIDQuIElmIGJ5dGUgaXMgbm90IGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsIGluY2x1c2l2ZSxcbiAgICAgICAgLy8gcHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKCFpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA2LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4OEUsIDB4OEYsIG9yIGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsXG4gICAgICAvLyBpbmNsdXNpdmUsIHNldCBldWMtanAgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoYml0ZSA9PT0gMHg4RSB8fCBiaXRlID09PSAweDhGIHx8IGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA4LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTMuMS4yIGV1Yy1qcCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDSlBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlIHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDAwQTUpXG4gICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwM0UpXG4gICAgICAgIHJldHVybiAweDdFO1xuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0ZGNjEgdG8gVStGRjlGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgMHg4RSBhbmQgY29kZSBwb2ludCDiiJJcbiAgICAgIC8vIDB4RkY2MSArIDB4QTEuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEZGNjEsIDB4RkY5RikpXG4gICAgICAgIHJldHVybiBbMHg4RSwgY29kZV9wb2ludCAtIDB4RkY2MSArIDB4QTFdO1xuXG4gICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIFUrMjIxMiwgc2V0IGl0IHRvIFUrRkYwRC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIyMTIpXG4gICAgICAgIGNvZGVfcG9pbnQgPSAweEZGMEQ7XG5cbiAgICAgIC8vIDcuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBqaXMwMjA4LlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgIC8vIDguIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA5LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gOTQpICsgMHhBMS5cbiAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDk0KSArIDB4QTE7XG5cbiAgICAgIC8vIDEwLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDk0ICsgMHhBMS5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSA5NCArIDB4QTE7XG5cbiAgICAgIC8vIDExLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snRVVDLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNKUEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ0VVQy1KUCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDSlBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEzLjIgaXNvLTIwMjItanBcblxuICAvLyAxMy4yLjEgaXNvLTIwMjItanAgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIElTTzIwMjJKUERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqIEBlbnVtICovXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgIEFTQ0lJOiAwLFxuICAgICAgUm9tYW46IDEsXG4gICAgICBLYXRha2FuYTogMixcbiAgICAgIExlYWRCeXRlOiAzLFxuICAgICAgVHJhaWxCeXRlOiA0LFxuICAgICAgRXNjYXBlU3RhcnQ6IDUsXG4gICAgICBFc2NhcGU6IDZcbiAgICB9O1xuICAgIC8vIGlzby0yMDIyLWpwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBpc28tMjAyMi1qcCBkZWNvZGVyXG4gICAgLy8gc3RhdGUgKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlXG4gICAgLy8gKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGxlYWQgKGluaXRpYWxseSAweDAwKSwgYW5kXG4gICAgLy8gaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9sZWFkID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLyBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIHN3aXRjaGluZyBvbiBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlOlxuICAgICAgc3dpdGNoIChpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2Ugc3RhdGVzLkFTQ0lJOlxuICAgICAgICAvLyBBU0NJSVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGLCBleGNsdWRpbmcgMHgwRSwgMHgwRiwgYW5kIDB4MUJcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikgJiYgYml0ZSAhPT0gMHgwRVxuICAgICAgICAgICAgJiYgYml0ZSAhPT0gMHgwRiAmJiBiaXRlICE9PSAweDFCKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlJvbWFuOlxuICAgICAgICAvLyBSb21hblxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHg1Q1xuICAgICAgICBpZiAoYml0ZSA9PT0gMHg1Qykge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyBVKzAwQTUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIDB4MDBBNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4N0VcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4N0UpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gVSsyMDNFLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAweDIwM0U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDAwIHRvIDB4N0YsIGV4Y2x1ZGluZyAweDBFLCAweDBGLCAweDFCLCAweDVDLCBhbmQgMHg3RVxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSAmJiBiaXRlICE9PSAweDBFICYmIGJpdGUgIT09IDB4MEZcbiAgICAgICAgICAgICYmIGJpdGUgIT09IDB4MUIgJiYgYml0ZSAhPT0gMHg1QyAmJiBiaXRlICE9PSAweDdFKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkthdGFrYW5hOlxuICAgICAgICAvLyBLYXRha2FuYVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDVGXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4NUYpKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgMHhGRjYxIOKIkiAweDIxICsgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gMHhGRjYxIC0gMHgyMSArIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5MZWFkQnl0ZTpcbiAgICAgICAgLy8gTGVhZCBieXRlXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDIxIHRvIDB4N0VcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgyMSwgMHg3RSkpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcCBsZWFkXG4gICAgICAgICAgLy8gdG8gYnl0ZSwgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byB0cmFpbCBieXRlLCBhbmRcbiAgICAgICAgICAvLyByZXR1cm4gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSBiaXRlO1xuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLlRyYWlsQnl0ZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlRyYWlsQnl0ZTpcbiAgICAgICAgLy8gVHJhaWwgYnl0ZVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDdFXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4N0UpKSB7XG4gICAgICAgICAgLy8gMS4gU2V0IHRoZSBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcblxuICAgICAgICAgIC8vIDIuIExldCBwb2ludGVyIGJlIChpc28tMjAyMi1qcCBsZWFkIOKIkiAweDIxKSDDlyA5NCArIGJ5dGUg4oiSIDB4MjEuXG4gICAgICAgICAgdmFyIHBvaW50ZXIgPSAoaXNvMjAyMmpwX2xlYWQgLSAweDIxKSAqIDk0ICsgYml0ZSAtIDB4MjE7XG5cbiAgICAgICAgICAvLyAzLiBMZXQgY29kZSBwb2ludCBiZSB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgcG9pbnRlciBpblxuICAgICAgICAgIC8vIGluZGV4IGppczAyMDguXG4gICAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAgIC8vIGJ5dGUgdG8gc3RyZWFtLCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZSBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkVzY2FwZVN0YXJ0OlxuICAgICAgICAvLyBFc2NhcGUgc3RhcnRcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGVpdGhlciAweDI0IG9yIDB4MjgsIHNldCBpc28tMjAyMi1qcCBsZWFkIHRvXG4gICAgICAgIC8vIGJ5dGUsIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlLCBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgyNCB8fCBiaXRlID09PSAweDI4KSB7XG4gICAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSBiaXRlO1xuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDMuIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZywgc2V0IGlzby0yMDIyLWpwXG4gICAgICAgIC8vIGRlY29kZXIgc3RhdGUgdG8gaXNvLTIwMjItanAgZGVjb2RlciBvdXRwdXQgc3RhdGUsIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkVzY2FwZTpcbiAgICAgICAgLy8gRXNjYXBlXG5cbiAgICAgICAgLy8gMS4gTGV0IGxlYWQgYmUgaXNvLTIwMjItanAgbGVhZCBhbmQgc2V0IGlzby0yMDIyLWpwIGxlYWQgdG9cbiAgICAgICAgLy8gMHgwMC5cbiAgICAgICAgdmFyIGxlYWQgPSBpc28yMDIyanBfbGVhZDtcbiAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDIuIExldCBzdGF0ZSBiZSBudWxsLlxuICAgICAgICB2YXIgc3RhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIDMuIElmIGxlYWQgaXMgMHgyOCBhbmQgYnl0ZSBpcyAweDQyLCBzZXQgc3RhdGUgdG8gQVNDSUkuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI4ICYmIGJpdGUgPT09IDB4NDIpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuQVNDSUk7XG5cbiAgICAgICAgLy8gNC4gSWYgbGVhZCBpcyAweDI4IGFuZCBieXRlIGlzIDB4NEEsIHNldCBzdGF0ZSB0byBSb21hbi5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjggJiYgYml0ZSA9PT0gMHg0QSlcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5Sb21hbjtcblxuICAgICAgICAvLyA1LiBJZiBsZWFkIGlzIDB4MjggYW5kIGJ5dGUgaXMgMHg0OSwgc2V0IHN0YXRlIHRvIEthdGFrYW5hLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyOCAmJiBiaXRlID09PSAweDQ5KVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLkthdGFrYW5hO1xuXG4gICAgICAgIC8vIDYuIElmIGxlYWQgaXMgMHgyNCBhbmQgYnl0ZSBpcyBlaXRoZXIgMHg0MCBvciAweDQyLCBzZXRcbiAgICAgICAgLy8gc3RhdGUgdG8gbGVhZCBieXRlLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyNCAmJiAoYml0ZSA9PT0gMHg0MCB8fCBiaXRlID09PSAweDQyKSlcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcblxuICAgICAgICAvLyA3LiBJZiBzdGF0ZSBpcyBub24tbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAxLiBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSBhbmQgaXNvLTIwMjItanAgZGVjb2RlclxuICAgICAgICAgIC8vIG91dHB1dCBzdGF0ZSB0byBzdGF0ZXMuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgICAgLy8gMi4gTGV0IG91dHB1dCBmbGFnIGJlIHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZy5cbiAgICAgICAgICB2YXIgb3V0cHV0X2ZsYWcgPSBpc28yMDIyanBfb3V0cHV0X2ZsYWc7XG5cbiAgICAgICAgICAvLyAzLiBTZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IHRydWU7XG5cbiAgICAgICAgICAvLyA0LiBSZXR1cm4gY29udGludWUsIGlmIG91dHB1dCBmbGFnIGlzIHVuc2V0LCBhbmQgZXJyb3JcbiAgICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgICAgcmV0dXJuICFvdXRwdXRfZmxhZyA/IG51bGwgOiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gOC4gUHJlcGVuZCBsZWFkIGFuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoW2xlYWQsIGJpdGVdKTtcblxuICAgICAgICAvLyA5LiBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcFxuICAgICAgICAvLyBkZWNvZGVyIHN0YXRlIHRvIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEzLjIuMiBpc28tMjAyMi1qcCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gSVNPMjAyMkpQRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBpc28tMjAyMi1qcCdzIGVuY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgaXNvLTIwMjItanAgZW5jb2RlclxuICAgIC8vIHN0YXRlIHdoaWNoIGlzIG9uZSBvZiBBU0NJSSwgUm9tYW4sIGFuZCBqaXMwMjA4IChpbml0aWFsbHlcbiAgICAvLyBBU0NJSSkuXG4gICAgLyoqIEBlbnVtICovXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgIEFTQ0lJOiAwLFxuICAgICAgUm9tYW46IDEsXG4gICAgICBqaXMwMjA4OiAyXG4gICAgfTtcbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5BU0NJSTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0gYW5kIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgICAgIC8vIHN0YXRlIGlzIG5vdCBBU0NJSSwgcHJlcGVuZCBjb2RlIHBvaW50IHRvIHN0cmVhbSwgc2V0XG4gICAgICAvLyBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIEFTQ0lJLCBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzXG4gICAgICAvLyAweDFCIDB4MjggMHg0Mi5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtICYmXG4gICAgICAgICAgaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuQVNDSUkpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5BU0NJSTtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDQyXTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgICAvLyBzdGF0ZSBpcyBBU0NJSSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0gJiYgaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkpXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgSVNPLTIwMjItSlAgZW5jb2RlciBzdGF0ZSBpcyBBU0NJSSBvciBSb21hbiwgYW5kIGNvZGVcbiAgICAgIC8vIHBvaW50IGlzIFUrMDAwRSwgVSswMDBGLCBvciBVKzAwMUIsIHJldHVybiBlcnJvciB3aXRoIFUrRkZGRC5cbiAgICAgIGlmICgoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkgfHxcbiAgICAgICAgICAgaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuUm9tYW4pICYmXG4gICAgICAgICAgKGNvZGVfcG9pbnQgPT09IDB4MDAwRSB8fCBjb2RlX3BvaW50ID09PSAweDAwMEYgfHxcbiAgICAgICAgICAgY29kZV9wb2ludCA9PT0gMHgwMDFCKSkge1xuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKDB4RkZGRCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgQVNDSUkgYW5kIGNvZGUgcG9pbnQgaXMgYW5cbiAgICAgIC8vIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSAmJlxuICAgICAgICAgIGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyA1LiBJZiBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIGlzIFJvbWFuIGFuZCBjb2RlIHBvaW50IGlzIGFuXG4gICAgICAvLyBBU0NJSSBjb2RlIHBvaW50LCBleGNsdWRpbmcgVSswMDVDIGFuZCBVKzAwN0UsIG9yIGlzIFUrMDBBNVxuICAgICAgLy8gb3IgVSsyMDNFLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuUm9tYW4gJiZcbiAgICAgICAgICAoKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkgJiZcbiAgICAgICAgICAgY29kZV9wb2ludCAhPT0gMHgwMDVDICYmIGNvZGVfcG9pbnQgIT09IDB4MDA3RSkgfHxcbiAgICAgICAgICAoY29kZV9wb2ludCA9PSAweDAwQTUgfHwgY29kZV9wb2ludCA9PSAweDIwM0UpKSkge1xuXG4gICAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZVxuICAgICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgICByZXR1cm4gMHg1QztcblxuICAgICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgICByZXR1cm4gMHg3RTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCBhbmQgaXNvLTIwMjItanBcbiAgICAgIC8vIGVuY29kZXIgc3RhdGUgaXMgbm90IEFTQ0lJLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gQVNDSUksIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDQyLlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkgJiZcbiAgICAgICAgICBpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5BU0NJSSkge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLkFTQ0lJO1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjgsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBJZiBjb2RlIHBvaW50IGlzIGVpdGhlciBVKzAwQTUgb3IgVSsyMDNFLCBhbmQgaXNvLTIwMjItanBcbiAgICAgIC8vIGVuY29kZXIgc3RhdGUgaXMgbm90IFJvbWFuLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gUm9tYW4sIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDRBLlxuICAgICAgaWYgKChjb2RlX3BvaW50ID09PSAweDAwQTUgfHwgY29kZV9wb2ludCA9PT0gMHgyMDNFKSAmJlxuICAgICAgICAgIGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLlJvbWFuKSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuUm9tYW47XG4gICAgICAgIHJldHVybiBbMHgxQiwgMHgyOCwgMHg0QV07XG4gICAgICB9XG5cbiAgICAgIC8vIDguIElmIGNvZGUgcG9pbnQgaXMgVSsyMjEyLCBzZXQgaXQgdG8gVStGRjBELlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjIxMilcbiAgICAgICAgY29kZV9wb2ludCA9IDB4RkYwRDtcblxuICAgICAgLy8gOS4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGppczAyMDguXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgLy8gMTAuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyAxMS4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBub3QgamlzMDIwOCwgcHJlcGVuZCBjb2RlXG4gICAgICAvLyBwb2ludCB0byBzdHJlYW0sIHNldCBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIGppczAyMDgsXG4gICAgICAvLyBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzIDB4MUIgMHgyNCAweDQyLlxuICAgICAgaWYgKGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLmppczAyMDgpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5qaXMwMjA4O1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjQsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyAxMi4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDk0KSArIDB4MjEuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyA5NCkgKyAweDIxO1xuXG4gICAgICAvLyAxMy4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSA5NCArIDB4MjEuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgOTQgKyAweDIxO1xuXG4gICAgICAvLyAxNC4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ0lTTy0yMDIyLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBJU08yMDIySlBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydJU08tMjAyMi1KUCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgSVNPMjAyMkpQRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxMy4zIFNoaWZ0X0pJU1xuXG4gIC8vIDEzLjMuMSBTaGlmdF9KSVMgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNoaWZ0SklTRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBTaGlmdF9KSVMncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIFNoaWZ0X0pJUyBsZWFkIChpbml0aWFsbHlcbiAgICAvLyAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIFNoaWZ0X0pJU19sZWFkID0gMHgwMDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgU2hpZnRfSklTIGxlYWQgaXMgbm90IDB4MDAsXG4gICAgICAvLyBzZXQgU2hpZnRfSklTIGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgU2hpZnRfSklTX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgU2hpZnRfSklTX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBTaGlmdF9KSVMgbGVhZCBpcyAweDAwLFxuICAgICAgLy8gcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgU2hpZnRfSklTX2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgU2hpZnRfSklTIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIFNoaWZ0X0pJUyBsZWFkLFxuICAgICAgLy8gbGV0IHBvaW50ZXIgYmUgbnVsbCwgc2V0IFNoaWZ0X0pJUyBsZWFkIHRvIDB4MDAsIGFuZCB0aGVuIHJ1blxuICAgICAgLy8gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoU2hpZnRfSklTX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBTaGlmdF9KSVNfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBTaGlmdF9KSVNfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IG9mZnNldCBiZSAweDQwLCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGLCBhbmQgMHg0MVxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSAoYml0ZSA8IDB4N0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gMi4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4QTAsIGFuZFxuICAgICAgICAvLyAweEMxIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGxlYWRfb2Zmc2V0ID0gKGxlYWQgPCAweEEwKSA/IDB4ODEgOiAweEMxO1xuXG4gICAgICAgIC8vIDMuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSwgaW5jbHVzaXZlLCBvciAweDgwXG4gICAgICAgIC8vIHRvIDB4RkMsIGluY2x1c2l2ZSwgc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIGxlYWQgb2Zmc2V0KSDDl1xuICAgICAgICAvLyAxODggKyBieXRlIOKIkiBvZmZzZXQuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHg4MCwgMHhGQykpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gbGVhZF9vZmZzZXQpICogMTg4ICsgYml0ZSAtIG9mZnNldDtcblxuICAgICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIGluIHRoZSByYW5nZSA4ODM2IHRvIDEwNzE1LCBpbmNsdXNpdmUsXG4gICAgICAgIC8vIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhFMDAwIOKIkiA4ODM2ICsgcG9pbnRlci5cbiAgICAgICAgaWYgKGluUmFuZ2UocG9pbnRlciwgODgzNiwgMTA3MTUpKVxuICAgICAgICAgIHJldHVybiAweEUwMDAgLSA4ODM2ICsgcG9pbnRlcjtcblxuICAgICAgICAvLyA1LiBMZXQgY29kZSBwb2ludCBiZSBudWxsLCBpZiBwb2ludGVyIGlzIG51bGwsIGFuZCB0aGVcbiAgICAgICAgLy8gaW5kZXggY29kZSBwb2ludCBmb3IgcG9pbnRlciBpbiBpbmRleCBqaXMwMjA4IG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSAocG9pbnRlciA9PT0gbnVsbCkgPyBudWxsIDpcbiAgICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUgb3IgMHg4MCwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSB8fCBiaXRlID09PSAweDgwKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gNS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0byAweERGLCBpbmNsdXNpdmUsIHJldHVybiBhXG4gICAgICAvLyBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4RkY2MSDiiJIgMHhBMSArIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweEExLCAweERGKSlcbiAgICAgICAgcmV0dXJuIDB4RkY2MSAtIDB4QTEgKyBiaXRlO1xuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4OUYsIGluY2x1c2l2ZSwgb3IgMHhFMFxuICAgICAgLy8gdG8gMHhGQywgaW5jbHVzaXZlLCBzZXQgU2hpZnRfSklTIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuXG4gICAgICAvLyBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4OUYpIHx8IGluUmFuZ2UoYml0ZSwgMHhFMCwgMHhGQykpIHtcbiAgICAgICAgU2hpZnRfSklTX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEzLjMuMiBTaGlmdF9KSVMgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCBvciBVKzAwODAsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSB8fCBjb2RlX3BvaW50ID09PSAweDAwODApXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDAwQTUpXG4gICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwM0UpXG4gICAgICAgIHJldHVybiAweDdFO1xuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0ZGNjEgdG8gVStGRjlGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gYSBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQg4oiSIDB4RkY2MSArIDB4QTEuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEZGNjEsIDB4RkY5RikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50IC0gMHhGRjYxICsgMHhBMTtcblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBVKzIyMTIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMjEyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA3LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggU2hpZnRfSklTIHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE4OCkuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxODgpO1xuXG4gICAgICAvLyAxMC4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4MUYsIGFuZFxuICAgICAgLy8gMHhDMSBvdGhlcndpc2UuXG4gICAgICB2YXIgbGVhZF9vZmZzZXQgPSAobGVhZCA8IDB4MUYpID8gMHg4MSA6IDB4QzE7XG5cbiAgICAgIC8vIDExLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE4OC5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSAxODg7XG5cbiAgICAgIC8vIDEyLiBMZXQgb2Zmc2V0IGJlIDB4NDAsIGlmIHRyYWlsIGlzIGxlc3MgdGhhbiAweDNGLCBhbmQgMHg0MVxuICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgdmFyIG9mZnNldCA9ICh0cmFpbCA8IDB4M0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCArIGxlYWQgb2Zmc2V0IGFuZFxuICAgICAgLy8gdHJhaWwgKyBvZmZzZXQuXG4gICAgICByZXR1cm4gW2xlYWQgKyBsZWFkX29mZnNldCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydTaGlmdF9KSVMnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snU2hpZnRfSklTJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBTaGlmdEpJU0RlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy9cbiAgLy8gMTQuIExlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxNC4xIGV1Yy1rclxuXG4gIC8vIDE0LjEuMSBldWMta3IgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0tSRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIGV1Yy1rcidzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZXVjLWtyIGxlYWQgKGluaXRpYWxseSAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGV1Y2tyX2xlYWQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMta3IgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBldWMta3IgbGVhZCB0byAweDAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNrcl9sZWFkICE9PSAwKSB7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMta3IgbGVhZCBpcyAweDAwLCByZXR1cm5cbiAgICAgIC8vIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgZXVja3JfbGVhZCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBldWMta3IgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgZXVjLWtyIGxlYWQsIGxldFxuICAgICAgLy8gcG9pbnRlciBiZSBudWxsLCBzZXQgZXVjLWtyIGxlYWQgdG8gMHgwMCwgYW5kIHRoZW4gcnVuIHRoZXNlXG4gICAgICAvLyBzdWJzdGVwczpcbiAgICAgIGlmIChldWNrcl9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIHZhciBsZWFkID0gZXVja3JfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBldWNrcl9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDQxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE5MCArIChieXRlIOKIkiAweDQxKS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MSwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyAoYml0ZSAtIDB4NDEpO1xuXG4gICAgICAgIC8vIDIuIExldCBjb2RlIHBvaW50IGJlIG51bGwsIGlmIHBvaW50ZXIgaXMgbnVsbCwgYW5kIHRoZVxuICAgICAgICAvLyBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGV1Yy1rciBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgICAgICAgID8gbnVsbCA6IGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdldWMta3InKSk7XG5cbiAgICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChwb2ludGVyID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAvLyBldWMta3IgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICBldWNrcl9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxNC4xLjIgZXVjLWtyIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNLUkVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBldWMta3IuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnZXVjLWtyJykpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE5MCkgKyAweDgxLlxuICAgICAgdmFyIGxlYWQgPSBmbG9vcihwb2ludGVyIC8gMTkwKSArIDB4ODE7XG5cbiAgICAgIC8vIDYuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTkwICsgMHg0MS5cbiAgICAgIHZhciB0cmFpbCA9IChwb2ludGVyICUgMTkwKSArIDB4NDE7XG5cbiAgICAgIC8vIDcuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkIGFuZCB0cmFpbC5cbiAgICAgIHJldHVybiBbbGVhZCwgdHJhaWxdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydFVUMtS1InXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0tSRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snRVVDLUtSJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNLUkRlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cblxuICAvL1xuICAvLyAxNS4gTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTUuMSByZXBsYWNlbWVudFxuXG4gIC8vIE5vdCBuZWVkZWQgLSBBUEkgdGhyb3dzIFJhbmdlRXJyb3JcblxuICAvLyAxNS4yIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IgdXRmLTE2YmUgYW5kIHV0Zi0xNmxlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3VuaXRcbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNmJlXG4gICAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gYnl0ZXNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV91bml0LCB1dGYxNmJlKSB7XG4gICAgLy8gMS4gTGV0IGJ5dGUxIGJlIGNvZGUgdW5pdCA+PiA4LlxuICAgIHZhciBieXRlMSA9IGNvZGVfdW5pdCA+PiA4O1xuXG4gICAgLy8gMi4gTGV0IGJ5dGUyIGJlIGNvZGUgdW5pdCAmIDB4MDBGRi5cbiAgICB2YXIgYnl0ZTIgPSBjb2RlX3VuaXQgJiAweDAwRkY7XG5cbiAgICAvLyAzLiBUaGVuIHJldHVybiB0aGUgYnl0ZXMgaW4gb3JkZXI6XG4gICAgICAgIC8vIHV0Zi0xNmJlIGZsYWcgaXMgc2V0OiBieXRlMSwgdGhlbiBieXRlMi5cbiAgICBpZiAodXRmMTZiZSlcbiAgICAgIHJldHVybiBbYnl0ZTEsIGJ5dGUyXTtcbiAgICAvLyB1dGYtMTZiZSBmbGFnIGlzIHVuc2V0OiBieXRlMiwgdGhlbiBieXRlMS5cbiAgICByZXR1cm4gW2J5dGUyLCBieXRlMV07XG4gIH1cblxuICAvLyAxNS4yLjEgc2hhcmVkIHV0Zi0xNiBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXRmMTZfYmUgVHJ1ZSBpZiBiaWctZW5kaWFuLCBmYWxzZSBpZiBsaXR0bGUtZW5kaWFuLlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjE2RGVjb2Rlcih1dGYxNl9iZSwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgdmFyIC8qKiBAdHlwZSB7P251bWJlcn0gKi8gdXRmMTZfbGVhZF9ieXRlID0gbnVsbCxcbiAgICAgICAgLyoqIEB0eXBlIHs/bnVtYmVyfSAqLyB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGVpdGhlciB1dGYtMTYgbGVhZCBieXRlIG9yXG4gICAgICAvLyB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgaXMgbm90IG51bGwsIHNldCB1dGYtMTYgbGVhZCBieXRlIGFuZFxuICAgICAgLy8gdXRmLTE2IGxlYWQgc3Vycm9nYXRlIHRvIG51bGwsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiAodXRmMTZfbGVhZF9ieXRlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB1dGYtMTYgbGVhZCBieXRlIGFuZCB1dGYtMTZcbiAgICAgIC8vIGxlYWQgc3Vycm9nYXRlIGFyZSBudWxsLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiB1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwgJiZcbiAgICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHV0Zi0xNiBsZWFkIGJ5dGUgaXMgbnVsbCwgc2V0IHV0Zi0xNiBsZWFkIGJ5dGUgdG8gYnl0ZVxuICAgICAgLy8gYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmICh1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwpIHtcbiAgICAgICAgdXRmMTZfbGVhZF9ieXRlID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIExldCBjb2RlIHVuaXQgYmUgdGhlIHJlc3VsdCBvZjpcbiAgICAgIHZhciBjb2RlX3VuaXQ7XG4gICAgICBpZiAodXRmMTZfYmUpIHtcbiAgICAgICAgLy8gdXRmLTE2YmUgZGVjb2RlciBmbGFnIGlzIHNldFxuICAgICAgICAvLyAgICh1dGYtMTYgbGVhZCBieXRlIDw8IDgpICsgYnl0ZS5cbiAgICAgICAgY29kZV91bml0ID0gKHV0ZjE2X2xlYWRfYnl0ZSA8PCA4KSArIGJpdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1dGYtMTZiZSBkZWNvZGVyIGZsYWcgaXMgdW5zZXRcbiAgICAgICAgLy8gICAoYnl0ZSA8PCA4KSArIHV0Zi0xNiBsZWFkIGJ5dGUuXG4gICAgICAgIGNvZGVfdW5pdCA9IChiaXRlIDw8IDgpICsgdXRmMTZfbGVhZF9ieXRlO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiBzZXQgdXRmLTE2IGxlYWQgYnl0ZSB0byBudWxsLlxuICAgICAgdXRmMTZfbGVhZF9ieXRlID0gbnVsbDtcblxuICAgICAgLy8gNS4gSWYgdXRmLTE2IGxlYWQgc3Vycm9nYXRlIGlzIG5vdCBudWxsLCBsZXQgbGVhZCBzdXJyb2dhdGVcbiAgICAgIC8vIGJlIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSwgc2V0IHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSB0byBudWxsLFxuICAgICAgLy8gYW5kIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsZWFkX3N1cnJvZ2F0ZSA9IHV0ZjE2X2xlYWRfc3Vycm9nYXRlO1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gMS4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0RDMDAgdG8gVStERkZGLFxuICAgICAgICAvLyBpbmNsdXNpdmUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHgxMDAwMCArXG4gICAgICAgIC8vICgobGVhZCBzdXJyb2dhdGUg4oiSIDB4RDgwMCkgPDwgMTApICsgKGNvZGUgdW5pdCDiiJIgMHhEQzAwKS5cbiAgICAgICAgaWYgKGluUmFuZ2UoY29kZV91bml0LCAweERDMDAsIDB4REZGRikpIHtcbiAgICAgICAgICByZXR1cm4gMHgxMDAwMCArIChsZWFkX3N1cnJvZ2F0ZSAtIDB4RDgwMCkgKiAweDQwMCArXG4gICAgICAgICAgICAgIChjb2RlX3VuaXQgLSAweERDMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCB0aGUgc2VxdWVuY2UgcmVzdWx0aW5nIG9mIGNvbnZlcnRpbmcgY29kZSB1bml0XG4gICAgICAgIC8vIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGRlY29kZXIgZmxhZyB0byBzdHJlYW0gYW5kIHJldHVyblxuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3VuaXQsIHV0ZjE2X2JlKSk7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBjb2RlIHVuaXQgaXMgaW4gdGhlIHJhbmdlIFUrRDgwMCB0byBVK0RCRkYsIGluY2x1c2l2ZSxcbiAgICAgIC8vIHNldCB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgdG8gY29kZSB1bml0IGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4RDgwMCwgMHhEQkZGKSkge1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IGNvZGVfdW5pdDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDcuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEQzAwIHRvIFUrREZGRiwgaW5jbHVzaXZlLFxuICAgICAgLy8gcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV91bml0LCAweERDMDAsIDB4REZGRikpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA4LiBSZXR1cm4gY29kZSBwb2ludCBjb2RlIHVuaXQuXG4gICAgICByZXR1cm4gY29kZV91bml0O1xuICAgIH07XG4gIH1cblxuICAvLyAxNS4yLjIgc2hhcmVkIHV0Zi0xNiBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXRmMTZfYmUgVHJ1ZSBpZiBiaWctZW5kaWFuLCBmYWxzZSBpZiBsaXR0bGUtZW5kaWFuLlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjE2RW5jb2Rlcih1dGYxNl9iZSwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVStGRkZGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gdGhlIHNlcXVlbmNlIHJlc3VsdGluZyBvZiBjb252ZXJ0aW5nIGNvZGUgcG9pbnQgdG9cbiAgICAgIC8vIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHhGRkZGKSlcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV9wb2ludCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyAzLiBMZXQgbGVhZCBiZSAoKGNvZGUgcG9pbnQg4oiSIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgbGVhZCA9IGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoXG4gICAgICAgICgoY29kZV9wb2ludCAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA0LiBMZXQgdHJhaWwgYmUgKChjb2RlIHBvaW50IOKIkiAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgdHJhaWwgPSBjb252ZXJ0Q29kZVVuaXRUb0J5dGVzKFxuICAgICAgICAoKGNvZGVfcG9pbnQgLSAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIG9mIGxlYWQgZm9sbG93ZWQgYnkgdHJhaWwuXG4gICAgICByZXR1cm4gbGVhZC5jb25jYXQodHJhaWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxNS4zIHV0Zi0xNmJlXG4gIC8vIDE1LjMuMSB1dGYtMTZiZSBkZWNvZGVyXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ1VURi0xNkJFJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkVuY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG4gIC8vIDE1LjMuMiB1dGYtMTZiZSBlbmNvZGVyXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ1VURi0xNkJFJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkRlY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTUuNCB1dGYtMTZsZVxuICAvLyAxNS40LjEgdXRmLTE2bGUgZGVjb2RlclxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydVVEYtMTZMRSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGMTZFbmNvZGVyKGZhbHNlLCBvcHRpb25zKTtcbiAgfTtcbiAgLy8gMTUuNC4yIHV0Zi0xNmxlIGVuY29kZXJcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snVVRGLTE2TEUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RGVjb2RlcihmYWxzZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTUuNSB4LXVzZXItZGVmaW5lZFxuXG4gIC8vIDE1LjUuMSB4LXVzZXItZGVmaW5lZCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gWFVzZXJEZWZpbmVkRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBhbiBBU0NJSSBieXRlLCByZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlXG4gICAgICAvLyBpcyBieXRlLlxuICAgICAgaWYgKGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gMy4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweEY3ODAgKyBieXRlIOKIkiAweDgwLlxuICAgICAgcmV0dXJuIDB4Rjc4MCArIGJpdGUgLSAweDgwO1xuICAgIH07XG4gIH1cblxuICAvLyAxNS41LjIgeC11c2VyLWRlZmluZWQgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFhVc2VyRGVmaW5lZEVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS5JZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVStGNzgwIHRvIFUrRjdGRiwgaW5jbHVzaXZlLFxuICAgICAgLy8gcmV0dXJuIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IOKIkiAweEY3ODAgKyAweDgwLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHhGNzgwLCAweEY3RkYpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludCAtIDB4Rjc4MCArIDB4ODA7XG5cbiAgICAgIC8vIDQuIFJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWyd4LXVzZXItZGVmaW5lZCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWFVzZXJEZWZpbmVkRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1sneC11c2VyLWRlZmluZWQnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFhVc2VyRGVmaW5lZERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxbJ1RleHRFbmNvZGVyJ10pXG4gICAgZ2xvYmFsWydUZXh0RW5jb2RlciddID0gVGV4dEVuY29kZXI7XG4gIGlmICghZ2xvYmFsWydUZXh0RGVjb2RlciddKVxuICAgIGdsb2JhbFsnVGV4dERlY29kZXInXSA9IFRleHREZWNvZGVyO1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICBUZXh0RW5jb2RlcjogZ2xvYmFsWydUZXh0RW5jb2RlciddLFxuICAgICAgVGV4dERlY29kZXI6IGdsb2JhbFsnVGV4dERlY29kZXInXSxcbiAgICAgIEVuY29kaW5nSW5kZXhlczogZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXVxuICAgIH07XG4gIH1cblxuLy8gRm9yIHN0cmljdCBlbnZpcm9ubWVudHMgd2hlcmUgYHRoaXNgIGluc2lkZSB0aGUgZ2xvYmFsIHNjb3BlXG4vLyBpcyBgdW5kZWZpbmVkYCwgdGFrZSBhIHB1cmUgb2JqZWN0IGluc3RlYWRcbn0odGhpcyB8fCB7fSkpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9iamVjdEFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC5hc3NpZ24vcG9seWZpbGwnKSgpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgc2V0RnVuY3Rpb25MZW5ndGggPSByZXF1aXJlKCdzZXQtZnVuY3Rpb24tbGVuZ3RoJyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkbWF4ID0gR2V0SW50cmluc2ljKCclTWF0aC5tYXglJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHRpZiAodHlwZW9mIG9yaWdpbmFsRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYSBmdW5jdGlvbiBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0cmV0dXJuIHNldEZ1bmN0aW9uTGVuZ3RoKFxuXHRcdGZ1bmMsXG5cdFx0MSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSxcblx0XHR0cnVlXG5cdCk7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyICRTeW50YXhFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9zeW50YXgnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcblxudmFyIGdvcGQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZURhdGFQcm9wZXJ0eShcblx0b2JqLFxuXHRwcm9wZXJ0eSxcblx0dmFsdWVcbikge1xuXHRpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAnKTtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcHJvcGVydHkgIT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1szXSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIHR5cGVvZiBhcmd1bWVudHNbNF0gIT09ICdib29sZWFuJyAmJiBhcmd1bWVudHNbNF0gIT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgdHlwZW9mIGFyZ3VtZW50c1s1XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s1XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDYgJiYgdHlwZW9mIGFyZ3VtZW50c1s2XSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIG5vbkVudW1lcmFibGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG5cdHZhciBub25Xcml0YWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ID8gYXJndW1lbnRzWzRdIDogbnVsbDtcblx0dmFyIG5vbkNvbmZpZ3VyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogbnVsbDtcblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgPyBhcmd1bWVudHNbNl0gOiBmYWxzZTtcblxuXHQvKiBAdHlwZSB7ZmFsc2UgfCBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPn0gKi9cblx0dmFyIGRlc2MgPSAhIWdvcGQgJiYgZ29wZChvYmosIHByb3BlcnR5KTtcblxuXHRpZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KG9iaiwgcHJvcGVydHksIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogbm9uQ29uZmlndXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmNvbmZpZ3VyYWJsZSA6ICFub25Db25maWd1cmFibGUsXG5cdFx0XHRlbnVtZXJhYmxlOiBub25FbnVtZXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmVudW1lcmFibGUgOiAhbm9uRW51bWVyYWJsZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdHdyaXRhYmxlOiBub25Xcml0YWJsZSA9PT0gbnVsbCAmJiBkZXNjID8gZGVzYy53cml0YWJsZSA6ICFub25Xcml0YWJsZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGxvb3NlIHx8ICghbm9uRW51bWVyYWJsZSAmJiAhbm9uV3JpdGFibGUgJiYgIW5vbkNvbmZpZ3VyYWJsZSkpIHtcblx0XHQvLyBtdXN0IGZhbGwgYmFjayB0byBbW1NldF1dLCBhbmQgd2FzIG5vdCBleHBsaWNpdGx5IGFza2VkIHRvIG1ha2Ugbm9uLWVudW1lcmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWNvbmZpZ3VyYWJsZVxuXHRcdG9ialtwcm9wZXJ0eV0gPSB2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ1RoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuJyk7XG5cdH1cbn07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuRGlmZiA9IHt9KSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gRGlmZigpIHt9XG4gIERpZmYucHJvdG90eXBlID0ge1xuICAgIGRpZmY6IGZ1bmN0aW9uIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcpIHtcbiAgICAgIHZhciBfb3B0aW9ucyR0aW1lb3V0O1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG5cblxuICAgICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcbiAgICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG4gICAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG4gICAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG4gICAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuICAgICAgdmFyIGVkaXRMZW5ndGggPSAxO1xuICAgICAgdmFyIG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG5cbiAgICAgIGlmIChvcHRpb25zLm1heEVkaXRMZW5ndGgpIHtcbiAgICAgICAgbWF4RWRpdExlbmd0aCA9IE1hdGgubWluKG1heEVkaXRMZW5ndGgsIG9wdGlvbnMubWF4RWRpdExlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXhFeGVjdXRpb25UaW1lID0gKF9vcHRpb25zJHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9vcHRpb25zJHRpbWVvdXQgIT09IHZvaWQgMCA/IF9vcHRpb25zJHRpbWVvdXQgOiBJbmZpbml0eTtcbiAgICAgIHZhciBhYm9ydEFmdGVyVGltZXN0YW1wID0gRGF0ZS5ub3coKSArIG1heEV4ZWN1dGlvblRpbWU7XG4gICAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgICBvbGRQb3M6IC0xLFxuICAgICAgICBsYXN0Q29tcG9uZW50OiB1bmRlZmluZWRcbiAgICAgIH1dOyAvLyBTZWVkIGVkaXRMZW5ndGggPSAwLCBpLmUuIHRoZSBjb250ZW50IHN0YXJ0cyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuXG4gICAgICB2YXIgbmV3UG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG5cbiAgICAgIGlmIChiZXN0UGF0aFswXS5vbGRQb3MgKyAxID49IG9sZExlbiAmJiBuZXdQb3MgKyAxID49IG5ld0xlbikge1xuICAgICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcbiAgICAgICAgcmV0dXJuIGRvbmUoW3tcbiAgICAgICAgICB2YWx1ZTogdGhpcy5qb2luKG5ld1N0cmluZyksXG4gICAgICAgICAgY291bnQ6IG5ld1N0cmluZy5sZW5ndGhcbiAgICAgICAgfV0pO1xuICAgICAgfSAvLyBPbmNlIHdlIGhpdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgZWRpdCBncmFwaCBvbiBzb21lIGRpYWdvbmFsIGssIHdlIGNhblxuICAgICAgLy8gZGVmaW5pdGVseSByZWFjaCB0aGUgZW5kIG9mIHRoZSBlZGl0IGdyYXBoIGluIG5vIG1vcmUgdGhhbiBrIGVkaXRzLCBzb1xuICAgICAgLy8gdGhlcmUncyBubyBwb2ludCBpbiBjb25zaWRlcmluZyBhbnkgbW92ZXMgdG8gZGlhZ29uYWwgaysxIGFueSBtb3JlIChmcm9tXG4gICAgICAvLyB3aGljaCB3ZSdyZSBndWFyYW50ZWVkIHRvIG5lZWQgYXQgbGVhc3QgaysxIG1vcmUgZWRpdHMpLlxuICAgICAgLy8gU2ltaWxhcmx5LCBvbmNlIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBncmFwaCwgdGhlcmUncyBub1xuICAgICAgLy8gcG9pbnQgY29uc2lkZXJpbmcgbW92ZXMgdG8gbG93ZXIgZGlhZ29uYWxzLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgZmFjdCBieSBzZXR0aW5nIG1pbkRpYWdvbmFsVG9Db25zaWRlciBhbmRcbiAgICAgIC8vIG1heERpYWdvbmFsVG9Db25zaWRlciB0byBzb21lIGZpbml0ZSB2YWx1ZSBvbmNlIHdlJ3ZlIGhpdCB0aGUgZWRnZSBvZlxuICAgICAgLy8gdGhlIGVkaXQgZ3JhcGguXG4gICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgZmFpdGhmdWwgdG8gdGhlIG9yaWdpbmFsIGFsZ29yaXRobSBwcmVzZW50ZWQgaW5cbiAgICAgIC8vIE15ZXJzJ3MgcGFwZXIsIHdoaWNoIGluc3RlYWQgcG9pbnRsZXNzbHkgZXh0ZW5kcyBELXBhdGhzIG9mZiB0aGUgZW5kIG9mXG4gICAgICAvLyB0aGUgZWRpdCBncmFwaCAtIHNlZSBwYWdlIDcgb2YgTXllcnMncyBwYXBlciB3aGljaCBub3RlcyB0aGlzIHBvaW50XG4gICAgICAvLyBleHBsaWNpdGx5IGFuZCBpbGx1c3RyYXRlcyBpdCB3aXRoIGEgZGlhZ3JhbS4gVGhpcyBoYXMgbWFqb3IgcGVyZm9ybWFuY2VcbiAgICAgIC8vIGltcGxpY2F0aW9ucyBmb3Igc29tZSBjb21tb24gc2NlbmFyaW9zLiBGb3IgaW5zdGFuY2UsIHRvIGNvbXB1dGUgYSBkaWZmXG4gICAgICAvLyB3aGVyZSB0aGUgbmV3IHRleHQgc2ltcGx5IGFwcGVuZHMgZCBjaGFyYWN0ZXJzIG9uIHRoZSBlbmQgb2YgdGhlXG4gICAgICAvLyBvcmlnaW5hbCB0ZXh0IG9mIGxlbmd0aCBuLCB0aGUgdHJ1ZSBNeWVycyBhbGdvcml0aG0gd2lsbCB0YWtlIE8obitkXjIpXG4gICAgICAvLyB0aW1lIHdoaWxlIHRoaXMgb3B0aW1pemF0aW9uIG5lZWRzIG9ubHkgTyhuK2QpIHRpbWUuXG5cblxuICAgICAgdmFyIG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IC1JbmZpbml0eSxcbiAgICAgICAgICBtYXhEaWFnb25hbFRvQ29uc2lkZXIgPSBJbmZpbml0eTsgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuXG4gICAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcbiAgICAgICAgZm9yICh2YXIgZGlhZ29uYWxQYXRoID0gTWF0aC5tYXgobWluRGlhZ29uYWxUb0NvbnNpZGVyLCAtZWRpdExlbmd0aCk7IGRpYWdvbmFsUGF0aCA8PSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGVkaXRMZW5ndGgpOyBkaWFnb25hbFBhdGggKz0gMikge1xuICAgICAgICAgIHZhciBiYXNlUGF0aCA9IHZvaWQgMDtcbiAgICAgICAgICB2YXIgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgICBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV07XG5cbiAgICAgICAgICBpZiAocmVtb3ZlUGF0aCkge1xuICAgICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYW5BZGQgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChhZGRQYXRoKSB7XG4gICAgICAgICAgICAvLyB3aGF0IG5ld1BvcyB3aWxsIGJlIGFmdGVyIHdlIGRvIGFuIGluc2VydGlvbjpcbiAgICAgICAgICAgIHZhciBhZGRQYXRoTmV3UG9zID0gYWRkUGF0aC5vbGRQb3MgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgICAgICBjYW5BZGQgPSBhZGRQYXRoICYmIDAgPD0gYWRkUGF0aE5ld1BvcyAmJiBhZGRQYXRoTmV3UG9zIDwgbmV3TGVuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIHJlbW92ZVBhdGgub2xkUG9zICsgMSA8IG9sZExlbjtcblxuICAgICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFNlbGVjdCB0aGUgZGlhZ29uYWwgdGhhdCB3ZSB3YW50IHRvIGJyYW5jaCBmcm9tLiBXZSBzZWxlY3QgdGhlIHByaW9yXG4gICAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgb2xkIHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGUgYCsgMWAgaGVyZSB0byBtYWtlIGJlaGF2aW9yIG1hdGNoIE15ZXJzIGFsZ29yaXRobVxuICAgICAgICAgIC8vICAgICAgIGFuZCBwcmVmZXIgdG8gb3JkZXIgcmVtb3ZhbHMgYmVmb3JlIGluc2VydGlvbnMuXG5cblxuICAgICAgICAgIGlmICghY2FuUmVtb3ZlIHx8IGNhbkFkZCAmJiByZW1vdmVQYXRoLm9sZFBvcyArIDEgPCBhZGRQYXRoLm9sZFBvcykge1xuICAgICAgICAgICAgYmFzZVBhdGggPSBzZWxmLmFkZFRvUGF0aChhZGRQYXRoLCB0cnVlLCB1bmRlZmluZWQsIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUGF0aCA9IHNlbGYuYWRkVG9QYXRoKHJlbW92ZVBhdGgsIHVuZGVmaW5lZCwgdHJ1ZSwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3UG9zID0gc2VsZi5leHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKTtcblxuICAgICAgICAgIGlmIChiYXNlUGF0aC5vbGRQb3MgKyAxID49IG9sZExlbiAmJiBuZXdQb3MgKyAxID49IG5ld0xlbikge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmxhc3RDb21wb25lbnQsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG5cbiAgICAgICAgICAgIGlmIChiYXNlUGF0aC5vbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgICAgICBtYXhEaWFnb25hbFRvQ29uc2lkZXIgPSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGRpYWdvbmFsUGF0aCAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3UG9zICsgMSA+PSBuZXdMZW4pIHtcbiAgICAgICAgICAgICAgbWluRGlhZ29uYWxUb0NvbnNpZGVyID0gTWF0aC5tYXgobWluRGlhZ29uYWxUb0NvbnNpZGVyLCBkaWFnb25hbFBhdGggKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlZGl0TGVuZ3RoKys7XG4gICAgICB9IC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgICAvLyBpcyBwcm9kdWNlZCwgb3IgdW50aWwgdGhlIGVkaXQgbGVuZ3RoIGV4Y2VlZHMgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoIChpZiBnaXZlbiksXG4gICAgICAvLyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cblxuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZWRpdExlbmd0aCA+IG1heEVkaXRMZW5ndGggfHwgRGF0ZS5ub3coKSA+IGFib3J0QWZ0ZXJUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXhlY0VkaXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgICBleGVjKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAoZWRpdExlbmd0aCA8PSBtYXhFZGl0TGVuZ3RoICYmIERhdGUubm93KCkgPD0gYWJvcnRBZnRlclRpbWVzdGFtcCkge1xuICAgICAgICAgIHZhciByZXQgPSBleGVjRWRpdExlbmd0aCgpO1xuXG4gICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZFRvUGF0aDogZnVuY3Rpb24gYWRkVG9QYXRoKHBhdGgsIGFkZGVkLCByZW1vdmVkLCBvbGRQb3NJbmMpIHtcbiAgICAgIHZhciBsYXN0ID0gcGF0aC5sYXN0Q29tcG9uZW50O1xuXG4gICAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvbGRQb3M6IHBhdGgub2xkUG9zICsgb2xkUG9zSW5jLFxuICAgICAgICAgIGxhc3RDb21wb25lbnQ6IHtcbiAgICAgICAgICAgIGNvdW50OiBsYXN0LmNvdW50ICsgMSxcbiAgICAgICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgICAgICAgICBwcmV2aW91c0NvbXBvbmVudDogbGFzdC5wcmV2aW91c0NvbXBvbmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2xkUG9zOiBwYXRoLm9sZFBvcyArIG9sZFBvc0luYyxcbiAgICAgICAgICBsYXN0Q29tcG9uZW50OiB7XG4gICAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgICAgICAgICBwcmV2aW91c0NvbXBvbmVudDogbGFzdFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4dHJhY3RDb21tb246IGZ1bmN0aW9uIGV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpIHtcbiAgICAgIHZhciBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgb2xkUG9zID0gYmFzZVBhdGgub2xkUG9zLFxuICAgICAgICAgIG5ld1BvcyA9IG9sZFBvcyAtIGRpYWdvbmFsUGF0aCxcbiAgICAgICAgICBjb21tb25Db3VudCA9IDA7XG5cbiAgICAgIHdoaWxlIChuZXdQb3MgKyAxIDwgbmV3TGVuICYmIG9sZFBvcyArIDEgPCBvbGRMZW4gJiYgdGhpcy5lcXVhbHMobmV3U3RyaW5nW25ld1BvcyArIDFdLCBvbGRTdHJpbmdbb2xkUG9zICsgMV0pKSB7XG4gICAgICAgIG5ld1BvcysrO1xuICAgICAgICBvbGRQb3MrKztcbiAgICAgICAgY29tbW9uQ291bnQrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICAgIGJhc2VQYXRoLmxhc3RDb21wb25lbnQgPSB7XG4gICAgICAgICAgY291bnQ6IGNvbW1vbkNvdW50LFxuICAgICAgICAgIHByZXZpb3VzQ29tcG9uZW50OiBiYXNlUGF0aC5sYXN0Q29tcG9uZW50XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGJhc2VQYXRoLm9sZFBvcyA9IG9sZFBvcztcbiAgICAgIHJldHVybiBuZXdQb3M7XG4gICAgfSxcbiAgICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlRW1wdHk6IGZ1bmN0aW9uIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgICB2YXIgcmV0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgICAgcmV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBjYXN0SW5wdXQ6IGZ1bmN0aW9uIGNhc3RJbnB1dCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgdG9rZW5pemU6IGZ1bmN0aW9uIHRva2VuaXplKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihjaGFycykge1xuICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBsYXN0Q29tcG9uZW50LCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgLy8gRmlyc3Qgd2UgY29udmVydCBvdXIgbGlua2VkIGxpc3Qgb2YgY29tcG9uZW50cyBpbiByZXZlcnNlIG9yZGVyIHRvIGFuXG4gICAgLy8gYXJyYXkgaW4gdGhlIHJpZ2h0IG9yZGVyOlxuICAgIHZhciBjb21wb25lbnRzID0gW107XG4gICAgdmFyIG5leHRDb21wb25lbnQ7XG5cbiAgICB3aGlsZSAobGFzdENvbXBvbmVudCkge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGxhc3RDb21wb25lbnQpO1xuICAgICAgbmV4dENvbXBvbmVudCA9IGxhc3RDb21wb25lbnQucHJldmlvdXNDb21wb25lbnQ7XG4gICAgICBkZWxldGUgbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICAgIGxhc3RDb21wb25lbnQgPSBuZXh0Q29tcG9uZW50O1xuICAgIH1cblxuICAgIGNvbXBvbmVudHMucmV2ZXJzZSgpO1xuICAgIHZhciBjb21wb25lbnRQb3MgPSAwLFxuICAgICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgICAgbmV3UG9zID0gMCxcbiAgICAgICAgb2xkUG9zID0gMDtcblxuICAgIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRQb3NdO1xuXG4gICAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50LmFkZGVkICYmIHVzZUxvbmdlc3RUb2tlbikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24gKHZhbHVlLCBpKSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgICByZXR1cm4gb2xkVmFsdWUubGVuZ3RoID4gdmFsdWUubGVuZ3RoID8gb2xkVmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1BvcyArPSBjb21wb25lbnQuY291bnQ7IC8vIENvbW1vbiBjYXNlXG5cbiAgICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7IC8vIFJldmVyc2UgYWRkIGFuZCByZW1vdmUgc28gcmVtb3ZlcyBhcmUgb3V0cHV0IGZpcnN0IHRvIG1hdGNoIGNvbW1vbiBjb252ZW50aW9uXG4gICAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAgIC8vIHJvdXRlIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLlxuXG4gICAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICAgIHZhciB0bXAgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdO1xuICAgICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkIChpLmUuIHdoaXRlc3BhY2UpLlxuICAgIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuXG5cbiAgICB2YXIgZmluYWxDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuXG4gICAgaWYgKGNvbXBvbmVudExlbiA+IDEgJiYgdHlwZW9mIGZpbmFsQ29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJyAmJiAoZmluYWxDb21wb25lbnQuYWRkZWQgfHwgZmluYWxDb21wb25lbnQucmVtb3ZlZCkgJiYgZGlmZi5lcXVhbHMoJycsIGZpbmFsQ29tcG9uZW50LnZhbHVlKSkge1xuICAgICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBmaW5hbENvbXBvbmVudC52YWx1ZTtcbiAgICAgIGNvbXBvbmVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gIH1cblxuICB2YXIgY2hhcmFjdGVyRGlmZiA9IG5ldyBEaWZmKCk7XG4gIGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICAgIHJldHVybiBjaGFyYWN0ZXJEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZWZhdWx0cy5jYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH1cblxuICAvL1xuICAvLyBSYW5nZXMgYW5kIGV4Y2VwdGlvbnM6XG4gIC8vIExhdGluLTEgU3VwcGxlbWVudCwgMDA4MOKAkzAwRkZcbiAgLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4gIC8vICAtIFUrMDBGNyAgw7cgRGl2aXNpb24gc2lnblxuICAvLyBMYXRpbiBFeHRlbmRlZC1BLCAwMTAw4oCTMDE3RlxuICAvLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuICAvLyBJUEEgRXh0ZW5zaW9ucywgMDI1MOKAkzAyQUZcbiAgLy8gU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzLCAwMkIw4oCTMDJGRlxuICAvLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbiAgLy8gIC0gVSswMkQ4ICDLmCAmIzcyODsgIEJyZXZlXG4gIC8vICAtIFUrMDJEOSAgy5kgJiM3Mjk7ICBEb3QgQWJvdmVcbiAgLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbiAgLy8gIC0gVSswMkRCICDLmyAmIzczMTsgIE9nb25la1xuICAvLyAgLSBVKzAyREMgIMucICYjNzMyOyAgU21hbGwgVGlsZGVcbiAgLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbiAgLy8gTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgMUUwMOKAkzFFRkZcblxuICB2YXIgZXh0ZW5kZWRXb3JkQ2hhcnMgPSAvXltBLVphLXpcXHhDMC1cXHUwMkM2XFx1MDJDOC1cXHUwMkQ3XFx1MDJERS1cXHUwMkZGXFx1MUUwMC1cXHUxRUZGXSskLztcbiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xuICB2YXIgd29yZERpZmYgPSBuZXcgRGlmZigpO1xuXG4gIHdvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgICAgbGVmdCA9IGxlZnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJpZ2h0ID0gcmlnaHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCk7XG4gIH07XG5cbiAgd29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyBBbGwgd2hpdGVzcGFjZSBzeW1ib2xzIGV4Y2VwdCBuZXdsaW5lIGdyb3VwIGludG8gb25lIHRva2VuLCBlYWNoIG5ld2xpbmUgLSBpbiBzZXBhcmF0ZSB0b2tlblxuICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCgvKFteXFxTXFxyXFxuXSt8WygpW1xcXXt9J1wiXFxyXFxuXXxcXGIpLyk7IC8vIEpvaW4gdGhlIGJvdW5kYXJ5IHNwbGl0cyB0aGF0IHdlIGRvIG5vdCBjb25zaWRlciB0byBiZSBib3VuZGFyaWVzLiBUaGlzIGlzIHByaW1hcmlseSB0aGUgZXh0ZW5kZWQgTGF0aW4gY2hhcmFjdGVyIHNldC5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIG5leHQgZmllbGQgYW5kIHdlIGhhdmUgb25seSB3b3JkIGNoYXJzIGJlZm9yZSBhbmQgYWZ0ZXIsIG1lcmdlXG4gICAgICBpZiAoIXRva2Vuc1tpICsgMV0gJiYgdG9rZW5zW2kgKyAyXSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpXSkgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgICB0b2tlbnNbaV0gKz0gdG9rZW5zW2kgKyAyXTtcbiAgICAgICAgdG9rZW5zLnNwbGljZShpICsgMSwgMik7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywge1xuICAgICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiBkaWZmV29yZHNXaXRoU3BhY2Uob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgbGluZURpZmYgPSBuZXcgRGlmZigpO1xuXG4gIGxpbmVEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpcFRyYWlsaW5nQ3IpIHtcbiAgICAgIC8vIHJlbW92ZSBvbmUgXFxyIGJlZm9yZSBcXG4gdG8gbWF0Y2ggR05VIGRpZmYncyAtLXN0cmlwLXRyYWlsaW5nLWNyIGJlaGF2aW9yXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gICAgfVxuXG4gICAgdmFyIHJldExpbmVzID0gW10sXG4gICAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7IC8vIElnbm9yZSB0aGUgZmluYWwgZW1wdHkgdG9rZW4gdGhhdCBvY2N1cnMgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggYSBuZXcgbGluZVxuXG4gICAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICAgIGxpbmVzQW5kTmV3bGluZXMucG9wKCk7XG4gICAgfSAvLyBNZXJnZSB0aGUgY29udGVudCBhbmQgbGluZSBzZXBhcmF0b3JzIGludG8gc2luZ2xlIHRva2Vuc1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzQW5kTmV3bGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgICAgcmV0TGluZXNbcmV0TGluZXMubGVuZ3RoIC0gMV0gKz0gbGluZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldExpbmVzLnB1c2gobGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldExpbmVzO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuICB9XG4gIGZ1bmN0aW9uIGRpZmZUcmltbWVkTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMoY2FsbGJhY2ssIHtcbiAgICAgIGlnbm9yZVdoaXRlc3BhY2U6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIH1cblxuICB2YXIgc2VudGVuY2VEaWZmID0gbmV3IERpZmYoKTtcblxuICBzZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2VudGVuY2VEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHZhciBjc3NEaWZmID0gbmV3IERpZmYoKTtcblxuICBjc3NEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oW3t9OjssXXxcXHMrKS8pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRpZmZDc3Mob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdHlwZW9mKG9iaik7XG4gIH1cblxuICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSk7XG4gICAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICAgIGlmIChpICUgMikge1xuICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gICAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cblxuICBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIganNvbkRpZmYgPSBuZXcgRGlmZigpOyAvLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuICAvLyBkYW5nbGluZyBjb21tYSBhbmQgdGhlIG90aGVyIGRvZXNuJ3QuIFR1cm5zIG91dCBpbmNsdWRpbmcgdGhlIGRhbmdsaW5nIGNvbW1hIHlpZWxkcyB0aGUgbmljZXN0IG91dHB1dDpcblxuICBqc29uRGlmZi51c2VMb25nZXN0VG9rZW4gPSB0cnVlO1xuICBqc29uRGlmZi50b2tlbml6ZSA9IGxpbmVEaWZmLnRva2VuaXplO1xuXG4gIGpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICB1bmRlZmluZWRSZXBsYWNlbWVudCA9IF90aGlzJG9wdGlvbnMudW5kZWZpbmVkUmVwbGFjZW1lbnQsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkc3RyaW5naSA9IF90aGlzJG9wdGlvbnMuc3RyaW5naWZ5UmVwbGFjZXIsXG4gICAgICAgIHN0cmluZ2lmeVJlcGxhY2VyID0gX3RoaXMkb3B0aW9ucyRzdHJpbmdpID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoaywgdikge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZFJlcGxhY2VtZW50IDogdjtcbiAgICB9IDogX3RoaXMkb3B0aW9ucyRzdHJpbmdpO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeShjYW5vbmljYWxpemUodmFsdWUsIG51bGwsIG51bGwsIHN0cmluZ2lmeVJlcGxhY2VyKSwgc3RyaW5naWZ5UmVwbGFjZXIsICcgICcpO1xuICB9O1xuXG4gIGpzb25EaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBEaWZmLnByb3RvdHlwZS5lcXVhbHMuY2FsbChqc29uRGlmZiwgbGVmdC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSwgcmlnaHQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJykpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRpZmZKc29uKG9sZE9iaiwgbmV3T2JqLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGpzb25EaWZmLmRpZmYob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICB9IC8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuICAvLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5cbiAgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuICAgIHJlcGxhY2VtZW50U3RhY2sgPSByZXBsYWNlbWVudFN0YWNrIHx8IFtdO1xuXG4gICAgaWYgKHJlcGxhY2VyKSB7XG4gICAgICBvYmogPSByZXBsYWNlcihrZXksIG9iaik7XG4gICAgfVxuXG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzdGFja1tpXSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjYW5vbmljYWxpemVkT2JqO1xuXG4gICAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqKSkge1xuICAgICAgc3RhY2sucHVzaChvYmopO1xuICAgICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjYW5vbmljYWxpemVkT2JqW2ldID0gY2Fub25pY2FsaXplKG9ialtpXSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgICAgfVxuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gICAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgICB9XG5cbiAgICBpZiAob2JqICYmIG9iai50b0pTT04pIHtcbiAgICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgICB9XG5cbiAgICBpZiAoX3R5cGVvZihvYmopID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmogPSB7fTtcbiAgICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblxuICAgICAgdmFyIHNvcnRlZEtleXMgPSBbXSxcbiAgICAgICAgICBfa2V5O1xuXG4gICAgICBmb3IgKF9rZXkgaW4gb2JqKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoX2tleSkpIHtcbiAgICAgICAgICBzb3J0ZWRLZXlzLnB1c2goX2tleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc29ydGVkS2V5cy5zb3J0KCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIF9rZXkgPSBzb3J0ZWRLZXlzW2ldO1xuICAgICAgICBjYW5vbmljYWxpemVkT2JqW19rZXldID0gY2Fub25pY2FsaXplKG9ialtfa2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBfa2V5KTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucG9wKCk7XG4gICAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5vbmljYWxpemVkT2JqID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuICB9XG5cbiAgdmFyIGFycmF5RGlmZiA9IG5ldyBEaWZmKCk7XG5cbiAgYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG4gIH07XG5cbiAgYXJyYXlEaWZmLmpvaW4gPSBhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgZGlmZnN0ciA9IHVuaURpZmYuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG4gICAgICAgIGRlbGltaXRlcnMgPSB1bmlEaWZmLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgICAgbGlzdCA9IFtdLFxuICAgICAgICBpID0gMDtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSW5kZXgoKSB7XG4gICAgICB2YXIgaW5kZXggPSB7fTtcbiAgICAgIGxpc3QucHVzaChpbmRleCk7IC8vIFBhcnNlIGRpZmYgbWV0YWRhdGFcblxuICAgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgbGluZSA9IGRpZmZzdHJbaV07IC8vIEZpbGUgaGVhZGVyIGZvdW5kLCBlbmQgcGFyc2luZyBkaWZmIG1ldGFkYXRhXG5cbiAgICAgICAgaWYgKC9eKFxcLVxcLVxcLXxcXCtcXCtcXCt8QEApXFxzLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gRGlmZiBpbmRleFxuXG5cbiAgICAgICAgdmFyIGhlYWRlciA9IC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLy5leGVjKGxpbmUpO1xuXG4gICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICBpbmRleC5pbmRleCA9IGhlYWRlclsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICAgIH0gLy8gUGFyc2UgZmlsZSBoZWFkZXJzIGlmIHRoZXkgYXJlIGRlZmluZWQuIFVuaWZpZWQgZGlmZiByZXF1aXJlcyB0aGVtLCBidXRcbiAgICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuXG5cbiAgICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpOyAvLyBQYXJzZSBodW5rc1xuXG4gICAgICBpbmRleC5odW5rcyA9IFtdO1xuXG4gICAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBfbGluZSA9IGRpZmZzdHJbaV07XG5cbiAgICAgICAgaWYgKC9eKEluZGV4OnxkaWZmfFxcLVxcLVxcLXxcXCtcXCtcXCspXFxzLy50ZXN0KF9saW5lKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKC9eQEAvLnRlc3QoX2xpbmUpKSB7XG4gICAgICAgICAgaW5kZXguaHVua3MucHVzaChwYXJzZUh1bmsoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2xpbmUgJiYgb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsaW5lICcgKyAoaSArIDEpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkoX2xpbmUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG4gICAgLy8gYXJlIGNvbnN1bWVkLlxuXG5cbiAgICBmdW5jdGlvbiBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpIHtcbiAgICAgIHZhciBmaWxlSGVhZGVyID0gL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvLmV4ZWMoZGlmZnN0cltpXSk7XG5cbiAgICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICAgIHZhciBrZXlQcmVmaXggPSBmaWxlSGVhZGVyWzFdID09PSAnLS0tJyA/ICdvbGQnIDogJ25ldyc7XG4gICAgICAgIHZhciBkYXRhID0gZmlsZUhlYWRlclsyXS5zcGxpdCgnXFx0JywgMik7XG4gICAgICAgIHZhciBmaWxlTmFtZSA9IGRhdGFbMF0ucmVwbGFjZSgvXFxcXFxcXFwvZywgJ1xcXFwnKTtcblxuICAgICAgICBpZiAoL15cIi4qXCIkLy50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDEsIGZpbGVOYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcbiAgICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gKGRhdGFbMV0gfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gLy8gUGFyc2VzIGEgaHVua1xuICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBodW5rLlxuXG5cbiAgICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgICB2YXIgY2h1bmtIZWFkZXJJbmRleCA9IGksXG4gICAgICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuICAgICAgICAgIGNodW5rSGVhZGVyID0gY2h1bmtIZWFkZXJMaW5lLnNwbGl0KC9AQCAtKFxcZCspKD86LChcXGQrKSk/IFxcKyhcXGQrKSg/OiwoXFxkKykpPyBAQC8pO1xuICAgICAgdmFyIGh1bmsgPSB7XG4gICAgICAgIG9sZFN0YXJ0OiArY2h1bmtIZWFkZXJbMV0sXG4gICAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgICAgbmV3U3RhcnQ6ICtjaHVua0hlYWRlclszXSxcbiAgICAgICAgbmV3TGluZXM6IHR5cGVvZiBjaHVua0hlYWRlcls0XSA9PT0gJ3VuZGVmaW5lZCcgPyAxIDogK2NodW5rSGVhZGVyWzRdLFxuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGxpbmVkZWxpbWl0ZXJzOiBbXVxuICAgICAgfTsgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAgIC8vIHRoZSBmaXJzdCBudW1iZXIgaXMgb25lIGxvd2VyIHRoYW4gb25lIHdvdWxkIGV4cGVjdC5cbiAgICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuXG4gICAgICBpZiAoaHVuay5vbGRMaW5lcyA9PT0gMCkge1xuICAgICAgICBodW5rLm9sZFN0YXJ0ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFkZENvdW50ID0gMCxcbiAgICAgICAgICByZW1vdmVDb3VudCA9IDA7XG5cbiAgICAgIGZvciAoOyBpIDwgZGlmZnN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuICAgICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG4gICAgICAgIGlmIChkaWZmc3RyW2ldLmluZGV4T2YoJy0tLSAnKSA9PT0gMCAmJiBpICsgMiA8IGRpZmZzdHIubGVuZ3RoICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMCAmJiBkaWZmc3RyW2kgKyAyXS5pbmRleE9mKCdAQCcpID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3BlcmF0aW9uID0gZGlmZnN0cltpXS5sZW5ndGggPT0gMCAmJiBpICE9IGRpZmZzdHIubGVuZ3RoIC0gMSA/ICcgJyA6IGRpZmZzdHJbaV1bMF07XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuICAgICAgICAgIGh1bmsubGluZWRlbGltaXRlcnMucHVzaChkZWxpbWl0ZXJzW2ldIHx8ICdcXG4nKTtcblxuICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICAgIGFkZENvdW50Kys7XG4gICAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSAvLyBIYW5kbGUgdGhlIGVtcHR5IGJsb2NrIGNvdW50IGNhc2VcblxuXG4gICAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcbiAgICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVtb3ZlQ291bnQgJiYgaHVuay5vbGRMaW5lcyA9PT0gMSkge1xuICAgICAgICBodW5rLm9sZExpbmVzID0gMDtcbiAgICAgIH0gLy8gUGVyZm9ybSBvcHRpb25hbCBzYW5pdHkgY2hlY2tpbmdcblxuXG4gICAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgaWYgKGFkZENvdW50ICE9PSBodW5rLm5ld0xpbmVzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbW92ZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBodW5rO1xuICAgIH1cblxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIHBhcnNlSW5kZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8vIEl0ZXJhdG9yIHRoYXQgdHJhdmVyc2VzIGluIHRoZSByYW5nZSBvZiBbbWluLCBtYXhdLCBzdGVwcGluZ1xuICAvLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuICAvLyBzdGFydCBvZiAyLCB0aGlzIHdpbGwgaXRlcmF0ZSAyLCAzLCAxLCA0LCAwLlxuICBmdW5jdGlvbiBkaXN0YW5jZUl0ZXJhdG9yIChzdGFydCwgbWluTGluZSwgbWF4TGluZSkge1xuICAgIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG4gICAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcbiAgICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICAgIGlmICh3YW50Rm9yd2FyZCAmJiAhZm9yd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBpZiAoYmFja3dhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhbnRGb3J3YXJkID0gZmFsc2U7XG4gICAgICAgIH0gLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgICAgLy8gYWZ0ZXIgb2Zmc2V0IGxvY2F0aW9uIChvciBkZXNpcmVkIGxvY2F0aW9uIG9uIGZpcnN0IGl0ZXJhdGlvbilcblxuXG4gICAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcbiAgICAgICAgICByZXR1cm4gbG9jYWxPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgICB3YW50Rm9yd2FyZCA9IHRydWU7XG4gICAgICAgIH0gLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuXG5cbiAgICAgICAgaWYgKG1pbkxpbmUgPD0gc3RhcnQgLSBsb2NhbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiAtbG9jYWxPZmZzZXQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XG4gICAgICB9IC8vIFdlIHRyaWVkIHRvIGZpdCBodW5rIGJlZm9yZSB0ZXh0IGJlZ2lubmluZyBhbmQgYmV5b25kIHRleHQgbGVuZ3RoLCB0aGVuXG4gICAgICAvLyBodW5rIGNhbid0IGZpdCBvbiB0aGUgdGV4dC4gUmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgICAgdW5pRGlmZiA9IHBhcnNlUGF0Y2godW5pRGlmZik7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICAgIGlmICh1bmlEaWZmLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcHBseVBhdGNoIG9ubHkgd29ya3Mgd2l0aCBhIHNpbmdsZSBpbnB1dC4nKTtcbiAgICAgIH1cblxuICAgICAgdW5pRGlmZiA9IHVuaURpZmZbMF07XG4gICAgfSAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgaW5wdXRcblxuXG4gICAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgICBkZWxpbWl0ZXJzID0gc291cmNlLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuICAgICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgZnVuY3Rpb24gKGxpbmVOdW1iZXIsIGxpbmUsIG9wZXJhdGlvbiwgcGF0Y2hDb250ZW50KSB7XG4gICAgICByZXR1cm4gbGluZSA9PT0gcGF0Y2hDb250ZW50O1xuICAgIH0sXG4gICAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgICBmdXp6RmFjdG9yID0gb3B0aW9ucy5mdXp6RmFjdG9yIHx8IDAsXG4gICAgICAgIG1pbkxpbmUgPSAwLFxuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICByZW1vdmVFT0ZOTCxcbiAgICAgICAgYWRkRU9GTkw7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBodW5rIGV4YWN0bHkgZml0cyBvbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICAgKi9cblxuXG4gICAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbGluZSA9IGh1bmsubGluZXNbal0sXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnLFxuICAgICAgICAgICAgY29udGVudCA9IGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICAvLyBDb250ZXh0IHNhbml0eSBjaGVja1xuICAgICAgICAgIGlmICghY29tcGFyZUxpbmUodG9Qb3MgKyAxLCBsaW5lc1t0b1Bvc10sIG9wZXJhdGlvbiwgY29udGVudCkpIHtcbiAgICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgICAgaWYgKGVycm9yQ291bnQgPiBmdXp6RmFjdG9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0b1BvcysrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaHVuayA9IGh1bmtzW2ldLFxuICAgICAgICAgIG1heExpbmUgPSBsaW5lcy5sZW5ndGggLSBodW5rLm9sZExpbmVzLFxuICAgICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgICB0b1BvcyA9IG9mZnNldCArIGh1bmsub2xkU3RhcnQgLSAxO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gZGlzdGFuY2VJdGVyYXRvcih0b1BvcywgbWluTGluZSwgbWF4TGluZSk7XG5cbiAgICAgIGZvciAoOyBsb2NhbE9mZnNldCAhPT0gdW5kZWZpbmVkOyBsb2NhbE9mZnNldCA9IGl0ZXJhdG9yKCkpIHtcbiAgICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgICAgaHVuay5vZmZzZXQgPSBvZmZzZXQgKz0gbG9jYWxPZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxvY2FsT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBTZXQgbG93ZXIgdGV4dCBsaW1pdCB0byBlbmQgb2YgdGhlIGN1cnJlbnQgaHVuaywgc28gbmV4dCBvbmVzIGRvbid0IHRyeVxuICAgICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcblxuXG4gICAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgICB9IC8vIEFwcGx5IHBhdGNoIGh1bmtzXG5cblxuICAgIHZhciBkaWZmT2Zmc2V0ID0gMDtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBodW5rcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaHVuayA9IGh1bmtzW19pXSxcbiAgICAgICAgICBfdG9Qb3MgPSBfaHVuay5vbGRTdGFydCArIF9odW5rLm9mZnNldCArIGRpZmZPZmZzZXQgLSAxO1xuXG4gICAgICBkaWZmT2Zmc2V0ICs9IF9odW5rLm5ld0xpbmVzIC0gX2h1bmsub2xkTGluZXM7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2h1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBfaHVuay5saW5lc1tqXSxcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmUubGVuZ3RoID4gMCA/IGxpbmVbMF0gOiAnICcsXG4gICAgICAgICAgICBjb250ZW50ID0gbGluZS5sZW5ndGggPiAwID8gbGluZS5zdWJzdHIoMSkgOiBsaW5lLFxuICAgICAgICAgICAgZGVsaW1pdGVyID0gX2h1bmsubGluZWRlbGltaXRlcnMgJiYgX2h1bmsubGluZWRlbGltaXRlcnNbal0gfHwgJ1xcbic7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgX3RvUG9zKys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICBsaW5lcy5zcGxpY2UoX3RvUG9zLCAxKTtcbiAgICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDEpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICBsaW5lcy5zcGxpY2UoX3RvUG9zLCAwLCBjb250ZW50KTtcbiAgICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDAsIGRlbGltaXRlcik7XG4gICAgICAgICAgX3RvUG9zKys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNPcGVyYXRpb24gPSBfaHVuay5saW5lc1tqIC0gMV0gPyBfaHVuay5saW5lc1tqIC0gMV1bMF0gOiBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICAgIHJlbW92ZUVPRk5MID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuXG5cbiAgICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICAgIHdoaWxlICghbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgbGluZXMucG9wKCk7XG4gICAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhZGRFT0ZOTCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBkZWxpbWl0ZXJzLnB1c2goJ1xcbicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBsaW5lcy5sZW5ndGggLSAxOyBfaysrKSB7XG4gICAgICBsaW5lc1tfa10gPSBsaW5lc1tfa10gKyBkZWxpbWl0ZXJzW19rXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignJyk7XG4gIH0gLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuXG4gIGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgICAgdW5pRGlmZiA9IHBhcnNlUGF0Y2godW5pRGlmZik7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgICB2YXIgaW5kZXggPSB1bmlEaWZmW2N1cnJlbnRJbmRleCsrXTtcblxuICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMucGF0Y2hlZChpbmRleCwgdXBkYXRlZENvbnRlbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NJbmRleCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb2Nlc3NJbmRleCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuICAgIH1cblxuICAgIHZhciBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblxuICAgIGlmICghZGlmZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZmYucHVzaCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBsaW5lczogW11cbiAgICB9KTsgLy8gQXBwZW5kIGFuIGVtcHR5IHZhbHVlIHRvIG1ha2UgY2xlYW51cCBlYXNpZXJcblxuICAgIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuICcgJyArIGVudHJ5O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGh1bmtzID0gW107XG4gICAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMCxcbiAgICAgICAgY3VyUmFuZ2UgPSBbXSxcbiAgICAgICAgb2xkTGluZSA9IDEsXG4gICAgICAgIG5ld0xpbmUgPSAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgICAgY3VycmVudC5saW5lcyA9IGxpbmVzO1xuXG4gICAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgICAgdmFyIF9jdXJSYW5nZTtcblxuICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuICAgICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgICB2YXIgcHJldiA9IGRpZmZbaSAtIDFdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgICBuZXdSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG5cblxuICAgICAgICAoX2N1clJhbmdlID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlLCBfdG9Db25zdW1hYmxlQXJyYXkobGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgICAgfSkpKTsgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgICBpZiAob2xkUmFuZ2VTdGFydCkge1xuICAgICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgIHZhciBfY3VyUmFuZ2UyO1xuXG4gICAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgICAgKF9jdXJSYW5nZTIgPSBjdXJSYW5nZSkucHVzaC5hcHBseShfY3VyUmFuZ2UyLCBfdG9Db25zdW1hYmxlQXJyYXkoY29udGV4dExpbmVzKGxpbmVzKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX2N1clJhbmdlMztcblxuICAgICAgICAgICAgLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG4gICAgICAgICAgICB2YXIgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAgICAgICAgIChfY3VyUmFuZ2UzID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG5cbiAgICAgICAgICAgIHZhciBodW5rID0ge1xuICAgICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG4gICAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICBuZXdMaW5lczogbmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcbiAgICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuICAgICAgICAgICAgICB2YXIgb2xkRU9GTmV3bGluZSA9IC9cXG4kLy50ZXN0KG9sZFN0cik7XG4gICAgICAgICAgICAgIHZhciBuZXdFT0ZOZXdsaW5lID0gL1xcbiQvLnRlc3QobmV3U3RyKTtcbiAgICAgICAgICAgICAgdmFyIG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcblxuICAgICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG4gICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaWYgdGhlIG9sZCBmaWxlIGlzIGVtcHR5LCBkbyBub3Qgb3V0cHV0IHRoZSBuby1ubCBsaW5lXG4gICAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuICAgICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9sb29wKGkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsXG4gICAgICBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG4gICAgICBvbGRIZWFkZXI6IG9sZEhlYWRlcixcbiAgICAgIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgICAgaHVua3M6IGh1bmtzXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZikpIHtcbiAgICAgIHJldHVybiBkaWZmLm1hcChmb3JtYXRQYXRjaCkuam9pbignXFxuJyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IFtdO1xuXG4gICAgaWYgKGRpZmYub2xkRmlsZU5hbWUgPT0gZGlmZi5uZXdGaWxlTmFtZSkge1xuICAgICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGh1bmsgPSBkaWZmLmh1bmtzW2ldOyAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG5cbiAgICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsub2xkU3RhcnQgLT0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgICAgaHVuay5uZXdTdGFydCAtPSAxO1xuICAgICAgfVxuXG4gICAgICByZXQucHVzaCgnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lcyArICcgKycgKyBodW5rLm5ld1N0YXJ0ICsgJywnICsgaHVuay5uZXdMaW5lcyArICcgQEAnKTtcbiAgICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXlTdGFydHNXaXRoKGEsIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgICBpZiAoc3RhcnQubGVuZ3RoID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjTGluZUNvdW50KGh1bmspIHtcbiAgICB2YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuICAgICAgICBvbGRMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm9sZExpbmVzLFxuICAgICAgICBuZXdMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm5ld0xpbmVzO1xuXG4gICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gICAgfVxuXG4gICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGh1bmsubmV3TGluZXM7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1lcmdlKG1pbmUsIHRoZWlycywgYmFzZSkge1xuICAgIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gICAgdGhlaXJzID0gbG9hZFBhdGNoKHRoZWlycywgYmFzZSk7XG4gICAgdmFyIHJldCA9IHt9OyAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG4gICAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gICAgLy8gbWVhbmluZyBpbiB0aGVpciBvd24gY29udGV4dC5cblxuICAgIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuICAgICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG4gICAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuICAgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcbiAgICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcbiAgICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG4gICAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuICAgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcbiAgICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuICAgICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuICAgICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG4gICAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcbiAgICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuICAgICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0Lmh1bmtzID0gW107XG4gICAgdmFyIG1pbmVJbmRleCA9IDAsXG4gICAgICAgIHRoZWlyc0luZGV4ID0gMCxcbiAgICAgICAgbWluZU9mZnNldCA9IDAsXG4gICAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgICB3aGlsZSAobWluZUluZGV4IDwgbWluZS5odW5rcy5sZW5ndGggfHwgdGhlaXJzSW5kZXggPCB0aGVpcnMuaHVua3MubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge1xuICAgICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICAgIH0sXG4gICAgICAgICAgdGhlaXJzQ3VycmVudCA9IHRoZWlycy5odW5rc1t0aGVpcnNJbmRleF0gfHwge1xuICAgICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICAgIH07XG5cbiAgICAgIGlmIChodW5rQmVmb3JlKG1pbmVDdXJyZW50LCB0aGVpcnNDdXJyZW50KSkge1xuICAgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcbiAgICAgICAgbWluZUluZGV4Kys7XG4gICAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuICAgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICAgIG1pbmVPZmZzZXQgKz0gdGhlaXJzQ3VycmVudC5uZXdMaW5lcyAtIHRoZWlyc0N1cnJlbnQub2xkTGluZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuICAgICAgICB2YXIgbWVyZ2VkSHVuayA9IHtcbiAgICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICAgIG9sZExpbmVzOiAwLFxuICAgICAgICAgIG5ld1N0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5uZXdTdGFydCArIG1pbmVPZmZzZXQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQgKyB0aGVpcnNPZmZzZXQpLFxuICAgICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICAgIGxpbmVzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgICByZXQuaHVua3MucHVzaChtZXJnZWRIdW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICgvXkBAL20udGVzdChwYXJhbSkgfHwgL15JbmRleDovbS50ZXN0KHBhcmFtKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VQYXRjaChwYXJhbSlbMF07XG4gICAgICB9XG5cbiAgICAgIGlmICghYmFzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhIGJhc2UgcmVmZXJlbmNlIG9yIHBhc3MgaW4gYSBwYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RydWN0dXJlZFBhdGNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBiYXNlLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG4gICAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdEZpZWxkKGluZGV4LCBtaW5lLCB0aGVpcnMpIHtcbiAgICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgICByZXR1cm4gbWluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluZTogbWluZSxcbiAgICAgICAgdGhlaXJzOiB0aGVpcnNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuICAgIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnQgJiYgdGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMgPCBjaGVjay5vbGRTdGFydDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsXG4gICAgICBvbGRMaW5lczogaHVuay5vbGRMaW5lcyxcbiAgICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LFxuICAgICAgbmV3TGluZXM6IGh1bmsubmV3TGluZXMsXG4gICAgICBsaW5lczogaHVuay5saW5lc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcbiAgICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuICAgIC8vIGlzIHRoZSBvbmx5IG92ZXJsYXAgd2hlcmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtZXJnZSB0aGUgY29udGVudCBoZXJlLlxuICAgIHZhciBtaW5lID0ge1xuICAgICAgb2Zmc2V0OiBtaW5lT2Zmc2V0LFxuICAgICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICAgIGluZGV4OiAwXG4gICAgfSxcbiAgICAgICAgdGhlaXIgPSB7XG4gICAgICBvZmZzZXQ6IHRoZWlyT2Zmc2V0LFxuICAgICAgbGluZXM6IHRoZWlyTGluZXMsXG4gICAgICBpbmRleDogMFxuICAgIH07IC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG5cbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTsgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXG4gICAgd2hpbGUgKG1pbmUuaW5kZXggPCBtaW5lLmxpbmVzLmxlbmd0aCAmJiB0aGVpci5pbmRleCA8IHRoZWlyLmxpbmVzLmxlbmd0aCkge1xuICAgICAgdmFyIG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcbiAgICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICAgIGlmICgobWluZUN1cnJlbnRbMF0gPT09ICctJyB8fCBtaW5lQ3VycmVudFswXSA9PT0gJysnKSAmJiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgfHwgdGhlaXJDdXJyZW50WzBdID09PSAnKycpKSB7XG4gICAgICAgIC8vIEJvdGggbW9kaWZpZWQgLi4uXG4gICAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnKycgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgICAgdmFyIF9odW5rJGxpbmVzO1xuXG4gICAgICAgIC8vIE1pbmUgaW5zZXJ0ZWRcbiAgICAgICAgKF9odW5rJGxpbmVzID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lcywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbGxlY3RDaGFuZ2UobWluZSkpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgICB2YXIgX2h1bmskbGluZXMyO1xuXG4gICAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgICAoX2h1bmskbGluZXMyID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczIsIF90b0NvbnN1bWFibGVBcnJheShjb2xsZWN0Q2hhbmdlKHRoZWlyKSkpO1xuICAgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCB0aGVpciwgbWluZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgICBodW5rLmxpbmVzLnB1c2gobWluZUN1cnJlbnQpO1xuICAgICAgICBtaW5lLmluZGV4Kys7XG4gICAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICAgIH1cbiAgICB9IC8vIE5vdyBwdXNoIGFueXRoaW5nIHRoYXQgbWF5IGJlIHJlbWFpbmluZ1xuXG5cbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCBtaW5lKTtcbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG4gICAgY2FsY0xpbmVDb3VudChodW5rKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcikge1xuICAgIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuICAgIGlmIChhbGxSZW1vdmVzKG15Q2hhbmdlcykgJiYgYWxsUmVtb3Zlcyh0aGVpckNoYW5nZXMpKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgICB2YXIgX2h1bmskbGluZXMzO1xuXG4gICAgICAgIChfaHVuayRsaW5lczMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMywgX3RvQ29uc3VtYWJsZUFycmF5KG15Q2hhbmdlcykpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoYXJyYXlTdGFydHNXaXRoKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKSAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIF9odW5rJGxpbmVzNDtcblxuICAgICAgICAoX2h1bmskbGluZXM0ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczQsIF90b0NvbnN1bWFibGVBcnJheSh0aGVpckNoYW5nZXMpKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcnJheUVxdWFsKG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKSkge1xuICAgICAgdmFyIF9odW5rJGxpbmVzNTtcblxuICAgICAgKF9odW5rJGxpbmVzNSA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM1LCBfdG9Db25zdW1hYmxlQXJyYXkobXlDaGFuZ2VzKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG4gICAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuXG4gICAgaWYgKHRoZWlyQ2hhbmdlcy5tZXJnZWQpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczY7XG5cbiAgICAgIChfaHVuayRsaW5lczYgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzNiwgX3RvQ29uc3VtYWJsZUFycmF5KHRoZWlyQ2hhbmdlcy5tZXJnZWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgICBodW5rLmxpbmVzLnB1c2goe1xuICAgICAgY29uZmxpY3Q6IHRydWUsXG4gICAgICBtaW5lOiBtaW5lLFxuICAgICAgdGhlaXJzOiB0aGVpclxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0TGVhZGluZyhodW5rLCBpbnNlcnQsIHRoZWlyKSB7XG4gICAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgICAgdmFyIGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuICAgICAgaW5zZXJ0Lm9mZnNldCsrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICAgIHdoaWxlIChpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG4gICAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICAgIHZhciByZXQgPSBbXSxcbiAgICAgICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuXG4gICAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTsgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gbGluZVswXSkge1xuICAgICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgICAgc3RhdGUuaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gICAgdmFyIGNoYW5nZXMgPSBbXSxcbiAgICAgICAgbWVyZ2VkID0gW10sXG4gICAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuICAgICAgICBjb25mbGljdGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGggJiYgc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07IC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcblxuICAgICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG4gICAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgICBtYXRjaEluZGV4Kys7IC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG4gICAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG5cbiAgICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuICAgICAgICB3aGlsZSAoY2hhbmdlWzBdID09PSAnKycpIHtcbiAgICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICBzdGF0ZS5pbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF0gfHwgJycpWzBdID09PSAnKycgJiYgY29udGV4dENoYW5nZXMpIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb25mbGljdGVkKSB7XG4gICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG5cbiAgICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsbFJlbW92ZXMoY2hhbmdlcykge1xuICAgIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY2hhbmdlKSB7XG4gICAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNraXBSZW1vdmVTdXBlcnNldChzdGF0ZSwgcmVtb3ZlQ2hhbmdlcywgZGVsdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcbiAgICAgIHZhciBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gICAgdmFyIG9sZExpbmVzID0gMDtcbiAgICB2YXIgbmV3TGluZXMgPSAwO1xuICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2YgbGluZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICAgIHZhciB0aGVpckNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLnRoZWlycyk7XG5cbiAgICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgICAgb2xkTGluZXMgKz0gbXlDb3VudC5vbGRMaW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobXlDb3VudC5uZXdMaW5lcyA9PT0gdGhlaXJDb3VudC5uZXdMaW5lcykge1xuICAgICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgICAgb2xkTGluZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBvbGRMaW5lczogb2xkTGluZXMsXG4gICAgICBuZXdMaW5lczogbmV3TGluZXNcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJzZVBhdGNoKHN0cnVjdHVyZWRQYXRjaCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHN0cnVjdHVyZWRQYXRjaCkpIHtcbiAgICAgIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2gubWFwKHJldmVyc2VQYXRjaCkucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RydWN0dXJlZFBhdGNoKSwge30sIHtcbiAgICAgIG9sZEZpbGVOYW1lOiBzdHJ1Y3R1cmVkUGF0Y2gubmV3RmlsZU5hbWUsXG4gICAgICBvbGRIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5uZXdIZWFkZXIsXG4gICAgICBuZXdGaWxlTmFtZTogc3RydWN0dXJlZFBhdGNoLm9sZEZpbGVOYW1lLFxuICAgICAgbmV3SGVhZGVyOiBzdHJ1Y3R1cmVkUGF0Y2gub2xkSGVhZGVyLFxuICAgICAgaHVua3M6IHN0cnVjdHVyZWRQYXRjaC5odW5rcy5tYXAoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvbGRMaW5lczogaHVuay5uZXdMaW5lcyxcbiAgICAgICAgICBvbGRTdGFydDogaHVuay5uZXdTdGFydCxcbiAgICAgICAgICBuZXdMaW5lczogaHVuay5vbGRMaW5lcyxcbiAgICAgICAgICBuZXdTdGFydDogaHVuay5vbGRTdGFydCxcbiAgICAgICAgICBsaW5lZGVsaW1pdGVyczogaHVuay5saW5lZGVsaW1pdGVycyxcbiAgICAgICAgICBsaW5lczogaHVuay5saW5lcy5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gXCIrXCIuY29uY2F0KGwuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobC5zdGFydHNXaXRoKCcrJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiLVwiLmNvbmNhdChsLnNsaWNlKDEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICAvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuICBmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvRE1QKGNoYW5nZXMpIHtcbiAgICB2YXIgcmV0ID0gW10sXG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgb3BlcmF0aW9uO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BlcmF0aW9uID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0LnB1c2goW29wZXJhdGlvbiwgY2hhbmdlLnZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9YTUwoY2hhbmdlcykge1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV07XG5cbiAgICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8ZGVsPicpO1xuICAgICAgfVxuXG4gICAgICByZXQucHVzaChlc2NhcGVIVE1MKGNoYW5nZS52YWx1ZSkpO1xuXG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgICAgcmV0LnB1c2goJzwvZGVsPicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQuam9pbignJyk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHtcbiAgICB2YXIgbiA9IHM7XG4gICAgbiA9IG4ucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcbiAgICBuID0gbi5yZXBsYWNlKC88L2csICcmbHQ7Jyk7XG4gICAgbiA9IG4ucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgIG4gPSBuLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIGV4cG9ydHMuRGlmZiA9IERpZmY7XG4gIGV4cG9ydHMuYXBwbHlQYXRjaCA9IGFwcGx5UGF0Y2g7XG4gIGV4cG9ydHMuYXBwbHlQYXRjaGVzID0gYXBwbHlQYXRjaGVzO1xuICBleHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGNhbm9uaWNhbGl6ZTtcbiAgZXhwb3J0cy5jb252ZXJ0Q2hhbmdlc1RvRE1QID0gY29udmVydENoYW5nZXNUb0RNUDtcbiAgZXhwb3J0cy5jb252ZXJ0Q2hhbmdlc1RvWE1MID0gY29udmVydENoYW5nZXNUb1hNTDtcbiAgZXhwb3J0cy5jcmVhdGVQYXRjaCA9IGNyZWF0ZVBhdGNoO1xuICBleHBvcnRzLmNyZWF0ZVR3b0ZpbGVzUGF0Y2ggPSBjcmVhdGVUd29GaWxlc1BhdGNoO1xuICBleHBvcnRzLmRpZmZBcnJheXMgPSBkaWZmQXJyYXlzO1xuICBleHBvcnRzLmRpZmZDaGFycyA9IGRpZmZDaGFycztcbiAgZXhwb3J0cy5kaWZmQ3NzID0gZGlmZkNzcztcbiAgZXhwb3J0cy5kaWZmSnNvbiA9IGRpZmZKc29uO1xuICBleHBvcnRzLmRpZmZMaW5lcyA9IGRpZmZMaW5lcztcbiAgZXhwb3J0cy5kaWZmU2VudGVuY2VzID0gZGlmZlNlbnRlbmNlcztcbiAgZXhwb3J0cy5kaWZmVHJpbW1lZExpbmVzID0gZGlmZlRyaW1tZWRMaW5lcztcbiAgZXhwb3J0cy5kaWZmV29yZHMgPSBkaWZmV29yZHM7XG4gIGV4cG9ydHMuZGlmZldvcmRzV2l0aFNwYWNlID0gZGlmZldvcmRzV2l0aFNwYWNlO1xuICBleHBvcnRzLmZvcm1hdFBhdGNoID0gZm9ybWF0UGF0Y2g7XG4gIGV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbiAgZXhwb3J0cy5wYXJzZVBhdGNoID0gcGFyc2VQYXRjaDtcbiAgZXhwb3J0cy5yZXZlcnNlUGF0Y2ggPSByZXZlcnNlUGF0Y2g7XG4gIGV4cG9ydHMuc3RydWN0dXJlZFBhdGNoID0gc3RydWN0dXJlZFBhdGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpIHx8IGZhbHNlO1xuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRkZWZpbmVQcm9wZXJ0eTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vZXZhbCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBFdmFsRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yYW5nZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSYW5nZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yZWYnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmVmZXJlbmNlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3N5bnRheCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBTeW50YXhFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBUeXBlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3VyaScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBVUklFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxudmFyIGNvbmNhdHR5ID0gZnVuY3Rpb24gY29uY2F0dHkoYSwgYikge1xuICAgIHZhciBhcnIgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBhcnJbaV0gPSBhW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYXJyW2ogKyBhLmxlbmd0aF0gPSBiW2pdO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgc2xpY3kgPSBmdW5jdGlvbiBzbGljeShhcnJMaWtlLCBvZmZzZXQpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldCB8fCAwLCBqID0gMDsgaSA8IGFyckxpa2UubGVuZ3RoOyBpICs9IDEsIGogKz0gMSkge1xuICAgICAgICBhcnJbal0gPSBhcnJMaWtlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIGpvaW55ID0gZnVuY3Rpb24gKGFyciwgam9pbmVyKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHN0ciArPSBhcnJbaV07XG4gICAgICAgIGlmIChpICsgMSA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0ciArPSBqb2luZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuYXBwbHkodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljeShhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICk7XG5cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gbWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3NbaV0gPSAnJCcgKyBpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBqb2lueShib3VuZEFyZ3MsICcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIHx8IGltcGxlbWVudGF0aW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzJyk7XG52YXIgJEV2YWxFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9ldmFsJyk7XG52YXIgJFJhbmdlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmFuZ2UnKTtcbnZhciAkUmVmZXJlbmNlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmVmJyk7XG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRVUklFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy91cmknKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGhhc1Byb3RvID0gcmVxdWlyZSgnaGFzLXByb3RvJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IChcblx0aGFzUHJvdG9cblx0XHQ/IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cdFx0OiBudWxsXG4pO1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJpZ0ludDY0QXJyYXklJzogdHlwZW9mIEJpZ0ludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50NjRBcnJheSxcblx0JyVCaWdVaW50NjRBcnJheSUnOiB0eXBlb2YgQmlnVWludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnVWludDY0QXJyYXksXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiAkRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogJEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiAkUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiAkUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6ICRVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxuaWYgKGdldFByb3RvKSB7XG5cdHRyeSB7XG5cdFx0bnVsbC5lcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL3B1bGwvMzg0I2lzc3VlY29tbWVudC0xMzY0MjY0MjI5XG5cdFx0dmFyIGVycm9yUHJvdG8gPSBnZXRQcm90byhnZXRQcm90byhlKSk7XG5cdFx0SU5UUklOU0lDU1snJUVycm9yLnByb3RvdHlwZSUnXSA9IGVycm9yUHJvdG87XG5cdH1cbn1cblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbiAmJiBnZXRQcm90bykge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzb3duJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xudmFyICRleGVjID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0aWYgKCRleGVjKC9eJT9bXiVdKiU/JC8sIG5hbWUpID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZScpO1xuXHR9XG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGdPUEQgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJScsIHRydWUpO1xuXG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRChbXSwgJ2xlbmd0aCcpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZ09QRFxuXHRcdCRnT1BEID0gbnVsbDtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRnT1BEO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gaGFzUHJvcGVydHlEZXNjcmlwdG9ycygpIHtcblx0cmV0dXJuICEhJGRlZmluZVByb3BlcnR5O1xufTtcblxuaGFzUHJvcGVydHlEZXNjcmlwdG9ycy5oYXNBcnJheUxlbmd0aERlZmluZUJ1ZyA9IGZ1bmN0aW9uIGhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnKCkge1xuXHQvLyBub2RlIHYwLjYgaGFzIGEgYnVnIHdoZXJlIGFycmF5IGxlbmd0aHMgY2FuIGJlIFNldCBidXQgbm90IERlZmluZWRcblx0aWYgKCEkZGVmaW5lUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR0cnkge1xuXHRcdHJldHVybiAkZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHZhbHVlOiAxIH0pLmxlbmd0aCAhPT0gMTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIEluIEZpcmVmb3ggNC0yMiwgZGVmaW5pbmcgbGVuZ3RoIG9uIGFuIGFycmF5IHRocm93cyBhbiBleGNlcHRpb24uXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRlc3QgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0Zm9vOiB7fVxufTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1Byb3RvKCkge1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yOiBUUyBlcnJvcnMgb24gYW4gaW5oZXJpdGVkIHByb3BlcnR5IGZvciBzb21lIHJlYXNvblxuXHRyZXR1cm4geyBfX3Byb3RvX186IHRlc3QgfS5mb28gPT09IHRlc3QuZm9vXG5cdFx0JiYgISh0ZXN0IGluc3RhbmNlb2YgJE9iamVjdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG52YXIgJGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKGNhbGwsICRoYXNPd24pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmQ7XG5cbi8qXG4gIHZhciBvYmogPSB7YTogMywgYjogNX07XG4gIGV4dGVuZChvYmosIHthOiA0LCBjOiA4fSk7IC8vIHthOiA0LCBiOiA1LCBjOiA4fVxuICBvYmo7IC8vIHthOiA0LCBiOiA1LCBjOiA4fVxuXG4gIHZhciBvYmogPSB7YTogMywgYjogNX07XG4gIGV4dGVuZCh7fSwgb2JqLCB7YTogNCwgYzogOH0pOyAvLyB7YTogNCwgYjogNSwgYzogOH1cbiAgb2JqOyAvLyB7YTogMywgYjogNX1cblxuICB2YXIgYXJyID0gWzEsIDIsIDNdO1xuICB2YXIgb2JqID0ge2E6IDMsIGI6IDV9O1xuICBleHRlbmQob2JqLCB7YzogYXJyfSk7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgM119XG4gIGFyci5wdXNoKDQpO1xuICBvYmo7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgMywgNF19XG5cbiAgdmFyIGFyciA9IFsxLCAyLCAzXTtcbiAgdmFyIG9iaiA9IHthOiAzLCBiOiA1fTtcbiAgZXh0ZW5kKHRydWUsIG9iaiwge2M6IGFycn0pOyAvLyB7YTogMywgYjogNSwgYzogWzEsIDIsIDNdfVxuICBhcnIucHVzaCg0KTtcbiAgb2JqOyAvLyB7YTogMywgYjogNSwgYzogWzEsIDIsIDNdfVxuXG4gIGV4dGVuZCh7YTogNCwgYjogNX0pOyAvLyB7YTogNCwgYjogNX1cbiAgZXh0ZW5kKHthOiA0LCBiOiA1fSwgMyk7IHthOiA0LCBiOiA1fVxuICBleHRlbmQoe2E6IDQsIGI6IDV9LCB0cnVlKTsge2E6IDQsIGI6IDV9XG4gIGV4dGVuZCgnaGVsbG8nLCB7YTogNCwgYjogNX0pOyAvLyB0aHJvd3NcbiAgZXh0ZW5kKDMsIHthOiA0LCBiOiA1fSk7IC8vIHRocm93c1xuKi9cblxuZnVuY3Rpb24gZXh0ZW5kKC8qIFtkZWVwXSwgb2JqMSwgb2JqMiwgW29iam5dICovKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB2YXIgZGVlcCA9IGZhbHNlO1xuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZGVlcCA9IGFyZ3Muc2hpZnQoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gYXJnc1swXTtcbiAgaWYgKGlzVW5leHRlbmRhYmxlKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4dGVuZGVlIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGV4dGVuZGVycyA9IGFyZ3Muc2xpY2UoMSk7XG4gIHZhciBsZW4gPSBleHRlbmRlcnMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGV4dGVuZGVyID0gZXh0ZW5kZXJzW2ldO1xuICAgIGZvciAodmFyIGtleSBpbiBleHRlbmRlcikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHRlbmRlciwga2V5KSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBleHRlbmRlcltrZXldO1xuICAgICAgICBpZiAoZGVlcCAmJiBpc0Nsb25lYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YXIgYmFzZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fTtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGV4dGVuZChcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpICYmICFpc1VuZXh0ZW5kYWJsZShyZXN1bHRba2V5XSlcbiAgICAgICAgICAgICAgPyByZXN1bHRba2V5XVxuICAgICAgICAgICAgICA6IGJhc2UsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0Nsb25lYWJsZShvYmopIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSB8fCB7fS50b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIGlzVW5leHRlbmRhYmxlKHZhbCkge1xuICByZXR1cm4gIXZhbCB8fCAodHlwZW9mIHZhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsICE9ICdmdW5jdGlvbicpO1xufVxuIiwiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgcmVMZWFkaW5nRG90ID0gL15cXC4vLFxuICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0IGluIElFIDwgOS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSG9zdE9iamVjdCh2YWx1ZSkge1xuICAvLyBNYW55IGhvc3Qgb2JqZWN0cyBhcmUgYE9iamVjdGAgb2JqZWN0cyB0aGF0IGNhbiBjb2VyY2UgdG8gc3RyaW5nc1xuICAvLyBkZXNwaXRlIGhhdmluZyBpbXByb3Blcmx5IGRlZmluZWQgYHRvU3RyaW5nYCBtZXRob2RzLlxuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9ICEhKHZhbHVlICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXG4gICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2wsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICByZXR1cm4gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGlzS2V5KHBhdGgsIG9iamVjdCkgPyBbcGF0aF0gOiBjYXN0UGF0aChwYXRoKTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0hvc3RPYmplY3QodmFsdWUpKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogc3RyaW5nVG9QYXRoKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplKGZ1bmN0aW9uKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHJlTGVhZGluZ0RvdC50ZXN0KHN0cmluZykpIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBBc3NpZ24gY2FjaGUgdG8gYF8ubWVtb2l6ZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGNhY2hlIGEgcmVmZXJlbmNlIHRvIHNldFRpbWVvdXQsIHNvIHRoYXQgb3VyIHJlZmVyZW5jZSB3b24ndCBiZSBzdHViYmVkIG91dFxuLy8gd2hlbiB1c2luZyBmYWtlIHRpbWVycyBhbmQgZXJyb3JzIHdpbGwgc3RpbGwgZ2V0IGxvZ2dlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nqb2hhbnNlbi9TaW5vbi5KUy9pc3N1ZXMvMzgxXG52YXIgcmVhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuXG5mdW5jdGlvbiBjb25maWd1cmVMb2dnZXIoY29uZmlnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIC8vIEZ1bmN0aW9uIHdoaWNoIHByaW50cyBlcnJvcnMuXG4gICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoXCJsb2dnZXJcIikpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgIGNvbmZpZy5sb2dnZXIgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICB9XG4gICAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSwgYW55IGVycm9ycyBsb2dnZWQgd2lsbCBiZSB0aHJvd24gaW1tZWRpYXRlbHk7XG4gICAgLy8gSWYgc2V0IHRvIGZhbHNlLCB0aGUgZXJyb3JzIHdpbGwgYmUgdGhyb3duIGluIHNlcGFyYXRlIGV4ZWN1dGlvbiBmcmFtZS5cbiAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcInVzZUltbWVkaWF0ZUV4Y2VwdGlvbnNcIikpIHtcbiAgICAgICAgY29uZmlnLnVzZUltbWVkaWF0ZUV4Y2VwdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgICAvLyB3cmFwIHJlYWxTZXRUaW1lb3V0IHdpdGggc29tZXRoaW5nIHdlIGNhbiBzdHViIGluIHRlc3RzXG4gICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoXCJzZXRUaW1lb3V0XCIpKSB7XG4gICAgICAgIGNvbmZpZy5zZXRUaW1lb3V0ID0gcmVhbFNldFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGxvZ0Vycm9yKGxhYmVsLCBlKSB7XG4gICAgICAgIHZhciBtc2cgPSBgJHtsYWJlbH0gdGhyZXcgZXhjZXB0aW9uOiBgO1xuICAgICAgICB2YXIgZXJyID0ge1xuICAgICAgICAgICAgbmFtZTogZS5uYW1lIHx8IGxhYmVsLFxuICAgICAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlIHx8IGUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHN0YWNrOiBlLnN0YWNrLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHRocm93TG9nZ2VkRXJyb3IoKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IG1zZyArIGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLmxvZ2dlcihgJHttc2d9WyR7ZXJyLm5hbWV9XSAke2Vyci5tZXNzYWdlfWApO1xuXG4gICAgICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIoZXJyLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcudXNlSW1tZWRpYXRlRXhjZXB0aW9ucykge1xuICAgICAgICAgICAgdGhyb3dMb2dnZWRFcnJvcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLnNldFRpbWVvdXQodGhyb3dMb2dnZWRFcnJvciwgMCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbmZpZ3VyZUxvZ2dlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgRXZlbnQgPSByZXF1aXJlKFwiLi9ldmVudFwiKTtcblxuZnVuY3Rpb24gQ3VzdG9tRXZlbnQodHlwZSwgY3VzdG9tRGF0YSwgdGFyZ2V0KSB7XG4gICAgdGhpcy5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCB0YXJnZXQpO1xuICAgIHRoaXMuZGV0YWlsID0gY3VzdG9tRGF0YS5kZXRhaWwgfHwgbnVsbDtcbn1cblxuQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gbmV3IEV2ZW50KCk7XG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN1c3RvbUV2ZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEN1c3RvbUV2ZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYXB0dXJlOiBCb29sZWFuKG9wdGlvbnMpLFxuICAgICAgICAgICAgb25jZTogZmFsc2UsXG4gICAgICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FwdHVyZTogQm9vbGVhbihvcHRpb25zLmNhcHR1cmUpLFxuICAgICAgICBvbmNlOiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgIHBhc3NpdmU6IEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gbm90KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICFmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5mdW5jdGlvbiBoYXNMaXN0ZW5lckZpbHRlcihsaXN0ZW5lciwgY2FwdHVyZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobGlzdGVuZXJTcGVjKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBsaXN0ZW5lclNwZWMuY2FwdHVyZSA9PT0gY2FwdHVyZSAmJlxuICAgICAgICAgICAgbGlzdGVuZXJTcGVjLmxpc3RlbmVyID09PSBsaXN0ZW5lclxuICAgICAgICApO1xuICAgIH07XG59XG5cbnZhciBFdmVudFRhcmdldCA9IHtcbiAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ldmVudHRhcmdldC1hZGRldmVudGxpc3RlbmVyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBwcm92aWRlZE9wdGlvbnMsXG4gICAgKSB7XG4gICAgICAgIC8vIDMuIExldCBjYXB0dXJlLCBwYXNzaXZlLCBhbmQgb25jZSBiZSB0aGUgcmVzdWx0IG9mIGZsYXR0ZW5pbmcgbW9yZSBvcHRpb25zLlxuICAgICAgICAvLyBGbGF0dGVuIHByb3BlcnR5IGJlZm9yZSBleGVjdXRpbmcgc3RlcCAyLFxuICAgICAgICAvLyBmZXR1cmUgZGV0ZWN0aW9uIGlzIHVzdWFsbHkgYmFzZWQgb24gcmVnaXN0ZXJpbmcgaGFuZGxlciB3aXRoIG9wdGlvbnMgb2JqZWN0LFxuICAgICAgICAvLyB0aGF0IGhhcyBnZXR0ZXIgZGVmaW5lZFxuICAgICAgICAvLyBhZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7fSwge1xuICAgICAgICAvLyAgICBnZXQgb25jZSgpIHsgc3VwcG9ydHNPbmNlID0gdHJ1ZTsgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBmbGF0dGVuT3B0aW9ucyhwcm92aWRlZE9wdGlvbnMpO1xuXG4gICAgICAgIC8vIDIuIElmIGNhbGxiYWNrIGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICAgICAgICBpZiAobGlzdGVuZXIgPT09IG51bGwgfHwgbGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMgfHwge307XG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdID0gdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0gfHwgW107XG5cbiAgICAgICAgLy8gNC4gSWYgY29udGV4dCBvYmplY3TigJlzIGFzc29jaWF0ZWQgbGlzdCBvZiBldmVudCBsaXN0ZW5lclxuICAgICAgICAvLyAgICBkb2VzIG5vdCBjb250YWluIGFuIGV2ZW50IGxpc3RlbmVyIHdob3NlIHR5cGUgaXMgdHlwZSxcbiAgICAgICAgLy8gICAgY2FsbGJhY2sgaXMgY2FsbGJhY2ssIGFuZCBjYXB0dXJlIGlzIGNhcHR1cmUsIHRoZW4gYXBwZW5kXG4gICAgICAgIC8vICAgIGEgbmV3IGV2ZW50IGxpc3RlbmVyIHRvIGl0LCB3aG9zZSB0eXBlIGlzIHR5cGUsIGNhbGxiYWNrIGlzXG4gICAgICAgIC8vICAgIGNhbGxiYWNrLCBjYXB0dXJlIGlzIGNhcHR1cmUsIHBhc3NpdmUgaXMgcGFzc2l2ZSwgYW5kIG9uY2UgaXMgb25jZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLnNvbWUoXG4gICAgICAgICAgICAgICAgaGFzTGlzdGVuZXJGaWx0ZXIobGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSksXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgICAgICAgIGNhcHR1cmU6IG9wdGlvbnMuY2FwdHVyZSxcbiAgICAgICAgICAgICAgICBvbmNlOiBvcHRpb25zLm9uY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ldmVudHRhcmdldC1yZW1vdmVldmVudGxpc3RlbmVyXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBwcm92aWRlZE9wdGlvbnMsXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5ldmVudExpc3RlbmVycyB8fCAhdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIExldCBjYXB0dXJlIGJlIHRoZSByZXN1bHQgb2YgZmxhdHRlbmluZyBvcHRpb25zLlxuICAgICAgICB2YXIgb3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25zKHByb3ZpZGVkT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gMy4gSWYgdGhlcmUgaXMgYW4gZXZlbnQgbGlzdGVuZXIgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZlxuICAgICAgICAvLyAgICBldmVudCBsaXN0ZW5lcnMgd2hvc2UgdHlwZSBpcyB0eXBlLCBjYWxsYmFjayBpcyBjYWxsYmFjayxcbiAgICAgICAgLy8gICAgYW5kIGNhcHR1cmUgaXMgY2FwdHVyZSwgdGhlbiBzZXQgdGhhdCBldmVudCBsaXN0ZW5lcuKAmXNcbiAgICAgICAgLy8gICAgcmVtb3ZlZCB0byB0cnVlIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgYXNzb2NpYXRlZCBsaXN0IG9mIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0gPSB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XS5maWx0ZXIoXG4gICAgICAgICAgICBub3QoaGFzTGlzdGVuZXJGaWx0ZXIobGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSkpLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV2ZW50OiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5ldmVudExpc3RlbmVycyB8fCAhdGhpcy5ldmVudExpc3RlbmVyc1tldmVudC50eXBlXSkge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZXZlbnQuZGVmYXVsdFByZXZlbnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciB0eXBlID0gZXZlbnQudHlwZTtcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHNlbGYuZXZlbnRMaXN0ZW5lcnNbdHlwZV07XG5cbiAgICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycywgdGhhdCBzaG91bGQgYmUgZGlzcGF0Y2hlZCBvbmNlXG4gICAgICAgIC8vIGJlZm9yZSBydW5uaW5nIGRpc3BhdGNoIGxvb3AgdG8gYXZvaWQgbmVzdGVkIGRpc3BhdGNoIGlzc3Vlc1xuICAgICAgICBzZWxmLmV2ZW50TGlzdGVuZXJzW3R5cGVdID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobGlzdGVuZXJTcGVjKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxpc3RlbmVyU3BlYy5vbmNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyU3BlYykge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJTcGVjLmxpc3RlbmVyO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbChzZWxmLCBldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZXZlbnQuZGVmYXVsdFByZXZlbnRlZCk7XG4gICAgfSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRUYXJnZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdGFyZ2V0KSB7XG4gICAgdGhpcy5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdGFyZ2V0KTtcbn1cblxuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIGluaXRFdmVudDogZnVuY3Rpb24gKHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHRhcmdldCkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmJ1YmJsZXMgPSBidWJibGVzO1xuICAgICAgICB0aGlzLmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH0sXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFdmVudDogcmVxdWlyZShcIi4vZXZlbnRcIiksXG4gICAgUHJvZ3Jlc3NFdmVudDogcmVxdWlyZShcIi4vcHJvZ3Jlc3MtZXZlbnRcIiksXG4gICAgQ3VzdG9tRXZlbnQ6IHJlcXVpcmUoXCIuL2N1c3RvbS1ldmVudFwiKSxcbiAgICBFdmVudFRhcmdldDogcmVxdWlyZShcIi4vZXZlbnQtdGFyZ2V0XCIpLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgRXZlbnQgPSByZXF1aXJlKFwiLi9ldmVudFwiKTtcblxuZnVuY3Rpb24gUHJvZ3Jlc3NFdmVudCh0eXBlLCBwcm9ncmVzc0V2ZW50UmF3LCB0YXJnZXQpIHtcbiAgICB0aGlzLmluaXRFdmVudCh0eXBlLCBmYWxzZSwgZmFsc2UsIHRhcmdldCk7XG4gICAgdGhpcy5sb2FkZWQgPVxuICAgICAgICB0eXBlb2YgcHJvZ3Jlc3NFdmVudFJhdy5sb2FkZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gcHJvZ3Jlc3NFdmVudFJhdy5sb2FkZWRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB0aGlzLnRvdGFsID1cbiAgICAgICAgdHlwZW9mIHByb2dyZXNzRXZlbnRSYXcudG90YWwgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gcHJvZ3Jlc3NFdmVudFJhdy50b3RhbFxuICAgICAgICAgICAgOiBudWxsO1xuICAgIHRoaXMubGVuZ3RoQ29tcHV0YWJsZSA9IEJvb2xlYW4ocHJvZ3Jlc3NFdmVudFJhdy50b3RhbCk7XG59XG5cblByb2dyZXNzRXZlbnQucHJvdG90eXBlID0gbmV3IEV2ZW50KCk7XG5cblByb2dyZXNzRXZlbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJvZ3Jlc3NFdmVudDtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9ncmVzc0V2ZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBGYWtlVGltZXJzID0gcmVxdWlyZShcIkBzaW5vbmpzL2Zha2UtdGltZXJzXCIpO1xudmFyIGZha2VTZXJ2ZXIgPSByZXF1aXJlKFwiLi9pbmRleFwiKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5mdW5jdGlvbiBTZXJ2ZXIoKSB7fVxuU2VydmVyLnByb3RvdHlwZSA9IGZha2VTZXJ2ZXI7XG5cbnZhciBmYWtlU2VydmVyV2l0aENsb2NrID0gbmV3IFNlcnZlcigpO1xuXG5mYWtlU2VydmVyV2l0aENsb2NrLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHhocikge1xuICAgIGlmICh4aHIuYXN5bmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0LmNsb2NrID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmNsb2NrID0gc2V0VGltZW91dC5jbG9jaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvY2sgPSBGYWtlVGltZXJzLmluc3RhbGwoKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDbG9jayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubG9uZ2VzdFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHZhciBjbG9ja1NldFRpbWVvdXQgPSB0aGlzLmNsb2NrLnNldFRpbWVvdXQ7XG4gICAgICAgICAgICB2YXIgY2xvY2tTZXRJbnRlcnZhbCA9IHRoaXMuY2xvY2suc2V0SW50ZXJ2YWw7XG4gICAgICAgICAgICB2YXIgc2VydmVyID0gdGhpcztcblxuICAgICAgICAgICAgdGhpcy5jbG9jay5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc2VydmVyLmxvbmdlc3RUaW1lb3V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5sb25nZXN0VGltZW91dCB8fCAwLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2tTZXRUaW1lb3V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmNsb2NrLnNldEludGVydmFsID0gZnVuY3Rpb24gKGZuLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc2VydmVyLmxvbmdlc3RUaW1lb3V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5sb25nZXN0VGltZW91dCB8fCAwLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2tTZXRJbnRlcnZhbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWtlU2VydmVyLmFkZFJlcXVlc3QuY2FsbCh0aGlzLCB4aHIpO1xufTtcblxuZmFrZVNlcnZlcldpdGhDbG9jay5yZXNwb25kID0gZnVuY3Rpb24gcmVzcG9uZCgpIHtcbiAgICB2YXIgcmV0dXJuVmFsID0gZmFrZVNlcnZlci5yZXNwb25kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5jbG9jaykge1xuICAgICAgICB0aGlzLmNsb2NrLnRpY2sodGhpcy5sb25nZXN0VGltZW91dCB8fCAwKTtcbiAgICAgICAgdGhpcy5sb25nZXN0VGltZW91dCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMucmVzZXRDbG9jaykge1xuICAgICAgICAgICAgdGhpcy5jbG9jay51bmluc3RhbGwoKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDbG9jayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbDtcbn07XG5cbmZha2VTZXJ2ZXJXaXRoQ2xvY2sucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuY2xvY2spIHtcbiAgICAgICAgdGhpcy5jbG9jay51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFrZVNlcnZlci5yZXN0b3JlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZha2VTZXJ2ZXJXaXRoQ2xvY2s7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGZha2VYaHIgPSByZXF1aXJlKFwiLi4vZmFrZS14aHJcIik7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG52YXIgbG9nID0gcmVxdWlyZShcIi4vbG9nXCIpO1xudmFyIGNvbmZpZ3VyZUxvZ0Vycm9yID0gcmVxdWlyZShcIi4uL2NvbmZpZ3VyZS1sb2dnZXJcIik7XG52YXIgcGF0aFRvUmVnZXhwID0gcmVxdWlyZShcInBhdGgtdG8tcmVnZXhwXCIpLnBhdGhUb1JlZ2V4cDtcblxudmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbmZ1bmN0aW9uIHJlc3BvbnNlQXJyYXkoaGFuZGxlcikge1xuICAgIHZhciByZXNwb25zZSA9IGhhbmRsZXI7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGhhbmRsZXIpICE9PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBbMjAwLCB7fSwgaGFuZGxlcl07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZVsyXSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoIXN1cHBvcnRzQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEZha2Ugc2VydmVyIHJlc3BvbnNlIGJvZHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBidXQgd2FzICR7dHlwZW9mIHJlc3BvbnNlWzJdfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCEocmVzcG9uc2VbMl0gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEZha2Ugc2VydmVyIHJlc3BvbnNlIGJvZHkgc2hvdWxkIGJlIGEgc3RyaW5nIG9yIEFycmF5QnVmZmVyLCBidXQgd2FzICR7dHlwZW9mIHJlc3BvbnNlWzJdfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0V2luZG93TG9jYXRpb24oKSB7XG4gICAgdmFyIHdpbmxvYyA9IHtcbiAgICAgICAgaG9zdG5hbWU6IFwibG9jYWxob3N0XCIsXG4gICAgICAgIHBvcnQ6IHByb2Nlc3MuZW52LlBPUlQgfHwgODAsXG4gICAgICAgIHByb3RvY29sOiBcImh0dHA6XCIsXG4gICAgfTtcbiAgICB3aW5sb2MuaG9zdCA9XG4gICAgICAgIHdpbmxvYy5ob3N0bmFtZSArXG4gICAgICAgIChTdHJpbmcod2lubG9jLnBvcnQpID09PSBcIjgwXCIgPyBcIlwiIDogYDoke3dpbmxvYy5wb3J0fWApO1xuICAgIHJldHVybiB3aW5sb2M7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd0xvY2F0aW9uKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0V2luZG93TG9jYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBCcm93c2VycyBwbGFjZSBsb2NhdGlvbiBvbiB3aW5kb3dcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cud2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cud2luZG93LmxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICAgKSB7XG4gICAgICAgIC8vIFJlYWN0IE5hdGl2ZSBvbiBBbmRyb2lkIHBsYWNlcyBsb2NhdGlvbiBvbiB3aW5kb3cud2luZG93XG4gICAgICAgIHJldHVybiB3aW5kb3cud2luZG93LmxvY2F0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBnZXREZWZhdWx0V2luZG93TG9jYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hPbmUocmVzcG9uc2UsIHJlcU1ldGhvZCwgcmVxVXJsKSB7XG4gICAgdmFyIHJtZXRoID0gcmVzcG9uc2UubWV0aG9kO1xuICAgIHZhciBtYXRjaE1ldGhvZCA9ICFybWV0aCB8fCBybWV0aC50b0xvd2VyQ2FzZSgpID09PSByZXFNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgdXJsID0gcmVzcG9uc2UudXJsO1xuICAgIHZhciBtYXRjaFVybCA9XG4gICAgICAgICF1cmwgfHxcbiAgICAgICAgdXJsID09PSByZXFVcmwgfHxcbiAgICAgICAgKHR5cGVvZiB1cmwudGVzdCA9PT0gXCJmdW5jdGlvblwiICYmIHVybC50ZXN0KHJlcVVybCkpIHx8XG4gICAgICAgICh0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgJiYgdXJsKHJlcVVybCkgPT09IHRydWUpO1xuXG4gICAgcmV0dXJuIG1hdGNoTWV0aG9kICYmIG1hdGNoVXJsO1xufVxuXG5mdW5jdGlvbiBtYXRjaChyZXNwb25zZSwgcmVxdWVzdCkge1xuICAgIHZhciB3bG9jID0gZ2V0V2luZG93TG9jYXRpb24oKTtcblxuICAgIHZhciByQ3VyckxvYyA9IG5ldyBSZWdFeHAoYF4ke3dsb2MucHJvdG9jb2x9Ly8ke3dsb2MuaG9zdH0vYCk7XG5cbiAgICB2YXIgcmVxdWVzdFVybCA9IHJlcXVlc3QudXJsO1xuXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QocmVxdWVzdFVybCkgfHwgckN1cnJMb2MudGVzdChyZXF1ZXN0VXJsKSkge1xuICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5yZXBsYWNlKHJDdXJyTG9jLCBcIi9cIik7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoT25lKHJlc3BvbnNlLCB0aGlzLmdldEhUVFBNZXRob2QocmVxdWVzdCksIHJlcXVlc3RVcmwpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UucmVzcG9uc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHJ1ID0gcmVzcG9uc2UudXJsO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbcmVxdWVzdF0uY29uY2F0KFxuICAgICAgICAgICAgICAgIHJ1ICYmIHR5cGVvZiBydS5leGVjID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBydS5leGVjKHJlcXVlc3RVcmwpLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3BvbnNlLmFwcGx5KHJlc3BvbnNlLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaW5jcmVtZW50UmVxdWVzdENvdW50KCkge1xuICAgIHZhciBjb3VudCA9ICsrdGhpcy5yZXF1ZXN0Q291bnQ7XG5cbiAgICB0aGlzLnJlcXVlc3RlZCA9IHRydWU7XG5cbiAgICB0aGlzLnJlcXVlc3RlZE9uY2UgPSBjb3VudCA9PT0gMTtcbiAgICB0aGlzLnJlcXVlc3RlZFR3aWNlID0gY291bnQgPT09IDI7XG4gICAgdGhpcy5yZXF1ZXN0ZWRUaHJpY2UgPSBjb3VudCA9PT0gMztcblxuICAgIHRoaXMuZmlyc3RSZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KDApO1xuICAgIHRoaXMuc2Vjb25kUmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdCgxKTtcbiAgICB0aGlzLnRoaXJkUmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdCgyKTtcblxuICAgIHRoaXMubGFzdFJlcXVlc3QgPSB0aGlzLmdldFJlcXVlc3QoY291bnQgLSAxKTtcbn1cblxudmFyIGZha2VTZXJ2ZXIgPSB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBzZXJ2ZXIgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICBzZXJ2ZXIuY29uZmlndXJlKGNvbmZpZyk7XG4gICAgICAgIHRoaXMueGhyID0gZmFrZVhoci51c2VGYWtlWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgc2VydmVyLnJlcXVlc3RzID0gW107XG4gICAgICAgIHNlcnZlci5yZXF1ZXN0Q291bnQgPSAwO1xuICAgICAgICBzZXJ2ZXIucXVldWUgPSBbXTtcbiAgICAgICAgc2VydmVyLnJlc3BvbnNlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMueGhyLm9uQ3JlYXRlID0gZnVuY3Rpb24gKHhock9iaikge1xuICAgICAgICAgICAgeGhyT2JqLnVuc2FmZUhlYWRlcnNFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhKHNlcnZlci51bnNhZmVIZWFkZXJzRW5hYmxlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlcnZlci5hZGRSZXF1ZXN0KHhock9iaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNlcnZlcjtcbiAgICB9LFxuXG4gICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGFsbG93bGlzdCA9IHtcbiAgICAgICAgICAgIGF1dG9SZXNwb25kOiB0cnVlLFxuICAgICAgICAgICAgYXV0b1Jlc3BvbmRBZnRlcjogdHJ1ZSxcbiAgICAgICAgICAgIHJlc3BvbmRJbW1lZGlhdGVseTogdHJ1ZSxcbiAgICAgICAgICAgIGZha2VIVFRQTWV0aG9kczogdHJ1ZSxcbiAgICAgICAgICAgIGxvZ2dlcjogdHJ1ZSxcbiAgICAgICAgICAgIHVuc2FmZUhlYWRlcnNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgbGVnYWN5Um91dGVzOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBjb25maWcgPSBjb25maWcgfHwge307XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZyBpbiBhbGxvd2xpc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmW3NldHRpbmddID0gY29uZmlnW3NldHRpbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZWxmLmxvZ0Vycm9yID0gY29uZmlndXJlTG9nRXJyb3IoY29uZmlnKTtcbiAgICB9LFxuXG4gICAgYWRkUmVxdWVzdDogZnVuY3Rpb24gYWRkUmVxdWVzdCh4aHJPYmopIHtcbiAgICAgICAgdmFyIHNlcnZlciA9IHRoaXM7XG4gICAgICAgIHB1c2guY2FsbCh0aGlzLnJlcXVlc3RzLCB4aHJPYmopO1xuXG4gICAgICAgIGluY3JlbWVudFJlcXVlc3RDb3VudC5jYWxsKHRoaXMpO1xuXG4gICAgICAgIHhock9iai5vblNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXJ2ZXIuaGFuZGxlUmVxdWVzdCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZlci5yZXNwb25kSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIucmVzcG9uZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZXJ2ZXIuYXV0b1Jlc3BvbmQgJiYgIXNlcnZlci5yZXNwb25kaW5nKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXNwb25kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXNwb25kKCk7XG4gICAgICAgICAgICAgICAgfSwgc2VydmVyLmF1dG9SZXNwb25kQWZ0ZXIgfHwgMTApO1xuXG4gICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBnZXRIVFRQTWV0aG9kOiBmdW5jdGlvbiBnZXRIVFRQTWV0aG9kKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZmFrZUhUVFBNZXRob2RzICYmIC9wb3N0L2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gKHJlcXVlc3QucmVxdWVzdEJvZHkgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAgICAgL19tZXRob2Q9KFteXFxiO10rKS8sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogcmVxdWVzdC5tZXRob2Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVxdWVzdC5tZXRob2Q7XG4gICAgfSxcblxuICAgIGhhbmRsZVJlcXVlc3Q6IGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoeGhyKSB7XG4gICAgICAgIGlmICh4aHIuYXN5bmMpIHtcbiAgICAgICAgICAgIHB1c2guY2FsbCh0aGlzLnF1ZXVlLCB4aHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdCh4aHIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGxvZ2dlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBuby1vcDsgb3ZlcnJpZGUgdmlhIGNvbmZpZ3VyZSgpXG4gICAgfSxcblxuICAgIGxvZ0Vycm9yOiBjb25maWd1cmVMb2dFcnJvcih7fSksXG5cbiAgICBsb2c6IGxvZyxcblxuICAgIGxlZ2FjeVJvdXRlczogdHJ1ZSxcblxuICAgIHJlc3BvbmRXaXRoOiBmdW5jdGlvbiByZXNwb25kV2l0aChtZXRob2QsIHVybCwgYm9keSkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZUFycmF5KG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBib2R5ID0gbWV0aG9kO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB1cmwgPSBtZXRob2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgYm9keSA9IHVybDtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdXJsID0gbWV0aG9kO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBtZXRob2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXNjYXBlIHBvcnQgbnVtYmVyIHRvIHByZXZlbnQgXCJuYW1lZFwiIHBhcmFtZXRlcnMgaW4gJ3BhdGgtdG8tcmVnZXhwJyBtb2R1bGVcbiAgICAgICAgaWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIgJiYgdXJsICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBpZiAoLzpbMC05XStcXC8vLnRlc3QodXJsKSkge1xuICAgICAgICAgICAgICAgIHZhciBtID0gdXJsLm1hdGNoKC9eKGh0dHBzPzpcXC9cXC8uKj8pOihbMC05XStcXC8uKikkLyk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgdXJsID0gYCR7bVsxXX1cXFxcOiR7bVsyXX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKC86XFwvXFwvLy50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcIjovL1wiLCBcIlxcXFw6Ly9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoL1xcKi8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcL1xcKi9nLCBcIi8oLiopXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5sZWdhY3lSb3V0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFwiP1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXCI/XCIsIFwiXFxcXD9cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHVzaC5jYWxsKHRoaXMucmVzcG9uc2VzLCB7XG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiICYmIHVybCAhPT0gXCJcIiA/IHBhdGhUb1JlZ2V4cCh1cmwpIDogdXJsLFxuICAgICAgICAgICAgcmVzcG9uc2U6IHR5cGVvZiBib2R5ID09PSBcImZ1bmN0aW9uXCIgPyBib2R5IDogcmVzcG9uc2VBcnJheShib2R5KSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlc3BvbmQ6IGZ1bmN0aW9uIHJlc3BvbmQoKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25kV2l0aC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZSB8fCBbXTtcbiAgICAgICAgdmFyIHJlcXVlc3RzID0gcXVldWUuc3BsaWNlKDAsIHF1ZXVlLmxlbmd0aCk7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICByZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBzZWxmLnByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVzcG9uZEFsbDogZnVuY3Rpb24gcmVzcG9uZEFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uZEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5yZXF1ZXN0cy5zbGljZSgwKTtcblxuICAgICAgICB2YXIgcmVxdWVzdDtcbiAgICAgICAgd2hpbGUgKChyZXF1ZXN0ID0gdGhpcy5xdWV1ZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmVxdWVzdDogZnVuY3Rpb24gcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZSB8fCBbNDA0LCB7fSwgXCJcIl07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlcykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSB0aGlzLnJlc3BvbnNlcy5sZW5ndGgsIGkgPSBsIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmNhbGwodGhpcywgdGhpcy5yZXNwb25zZXNbaV0sIHJlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHRoaXMucmVzcG9uc2VzW2ldLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhyZXNwb25zZSwgcmVxdWVzdCk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbmQocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdLCByZXNwb25zZVsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nRXJyb3IoXCJGYWtlIHNlcnZlciByZXF1ZXN0IHByb2Nlc3NpbmdcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueGhyLnJlc3RvcmUgJiYgdGhpcy54aHIucmVzdG9yZS5hcHBseSh0aGlzLnhociwgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgZ2V0UmVxdWVzdDogZnVuY3Rpb24gZ2V0UmVxdWVzdChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0c1tpbmRleF0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0QmVoYXZpb3IoKTtcbiAgICAgICAgdGhpcy5yZXNldEhpc3RvcnkoKTtcbiAgICB9LFxuXG4gICAgcmVzZXRCZWhhdmlvcjogZnVuY3Rpb24gcmVzZXRCZWhhdmlvcigpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZXMubGVuZ3RoID0gdGhpcy5xdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0sXG5cbiAgICByZXNldEhpc3Rvcnk6IGZ1bmN0aW9uIHJlc2V0SGlzdG9yeSgpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5sZW5ndGggPSB0aGlzLnJlcXVlc3RDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0ZWRPbmNlID1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdGVkVHdpY2UgPVxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ZWRUaHJpY2UgPVxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ZWQgPVxuICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZmlyc3RSZXF1ZXN0ID1cbiAgICAgICAgICAgIHRoaXMuc2Vjb25kUmVxdWVzdCA9XG4gICAgICAgICAgICB0aGlzLnRoaXJkUmVxdWVzdCA9XG4gICAgICAgICAgICB0aGlzLmxhc3RSZXF1ZXN0ID1cbiAgICAgICAgICAgICAgICBudWxsO1xuICAgIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZha2VTZXJ2ZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcblxuZnVuY3Rpb24gbG9nKHJlc3BvbnNlLCByZXF1ZXN0KSB7XG4gICAgdmFyIHN0cjtcblxuICAgIHN0ciA9IGBSZXF1ZXN0OlxcbiR7aW5zcGVjdChyZXF1ZXN0KX1cXG5cXG5gO1xuICAgIHN0ciArPSBgUmVzcG9uc2U6XFxuJHtpbnNwZWN0KHJlc3BvbnNlKX1cXG5cXG5gO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IHdoZW4gdGhpcy5sb2dnZXIgaXMgbm90IGEgZnVuY3Rpb24sIGl0IGNhbid0IGJlIGNhbGxlZCAqL1xuICAgIGlmICh0eXBlb2YgdGhpcy5sb2dnZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmxvZ2dlcihzdHIpO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsb2c7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pc1N1cHBvcnRlZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4obmV3IEJsb2IoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgR2xvYmFsVGV4dEVuY29kZXIgPVxuICAgIHR5cGVvZiBUZXh0RW5jb2RlciAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IFRleHRFbmNvZGVyXG4gICAgICAgIDogcmVxdWlyZShcIkBzaW5vbmpzL3RleHQtZW5jb2RpbmdcIikuVGV4dEVuY29kZXI7XG52YXIgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xudmFyIGNvbmZpZ3VyZUxvZ0Vycm9yID0gcmVxdWlyZShcIi4uL2NvbmZpZ3VyZS1sb2dnZXJcIik7XG52YXIgc2lub25FdmVudCA9IHJlcXVpcmUoXCIuLi9ldmVudFwiKTtcbnZhciBleHRlbmQgPSByZXF1aXJlKFwianVzdC1leHRlbmRcIik7XG5cbnZhciBzdXBwb3J0c1Byb2dyZXNzID0gdHlwZW9mIFByb2dyZXNzRXZlbnQgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgc3VwcG9ydHNDdXN0b21FdmVudCA9IHR5cGVvZiBDdXN0b21FdmVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBzdXBwb3J0c0Zvcm1EYXRhID0gdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgc3VwcG9ydHNCbG9iID0gcmVxdWlyZShcIi4vYmxvYlwiKS5pc1N1cHBvcnRlZDtcblxuZnVuY3Rpb24gZ2V0V29ya2luZ1hIUihnbG9iYWxTY29wZSkge1xuICAgIHZhciBzdXBwb3J0c1hIUiA9IHR5cGVvZiBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBpZiAoc3VwcG9ydHNYSFIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0O1xuICAgIH1cblxuICAgIHZhciBzdXBwb3J0c0FjdGl2ZVggPSB0eXBlb2YgZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBpZiAoc3VwcG9ydHNBY3RpdmVYKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlLkFjdGl2ZVhPYmplY3QoXCJNU1hNTDIuWE1MSFRUUC4zLjBcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4taGVhZGVyLW5hbWVcbnZhciB1bnNhZmVIZWFkZXJzID0ge1xuICAgIFwiQWNjZXB0LUNoYXJzZXRcIjogdHJ1ZSxcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiOiB0cnVlLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2RcIjogdHJ1ZSxcbiAgICBcIkFjY2VwdC1FbmNvZGluZ1wiOiB0cnVlLFxuICAgIENvbm5lY3Rpb246IHRydWUsXG4gICAgXCJDb250ZW50LUxlbmd0aFwiOiB0cnVlLFxuICAgIENvb2tpZTogdHJ1ZSxcbiAgICBDb29raWUyOiB0cnVlLFxuICAgIFwiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ1wiOiB0cnVlLFxuICAgIERhdGU6IHRydWUsXG4gICAgRE5UOiB0cnVlLFxuICAgIEV4cGVjdDogdHJ1ZSxcbiAgICBIb3N0OiB0cnVlLFxuICAgIFwiS2VlcC1BbGl2ZVwiOiB0cnVlLFxuICAgIE9yaWdpbjogdHJ1ZSxcbiAgICBSZWZlcmVyOiB0cnVlLFxuICAgIFRFOiB0cnVlLFxuICAgIFRyYWlsZXI6IHRydWUsXG4gICAgXCJUcmFuc2Zlci1FbmNvZGluZ1wiOiB0cnVlLFxuICAgIFVwZ3JhZGU6IHRydWUsXG4gICAgXCJVc2VyLUFnZW50XCI6IHRydWUsXG4gICAgVmlhOiB0cnVlLFxufTtcblxuZnVuY3Rpb24gRXZlbnRUYXJnZXRIYW5kbGVyKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZXZlbnRzID0gW1xuICAgICAgICBcImxvYWRzdGFydFwiLFxuICAgICAgICBcInByb2dyZXNzXCIsXG4gICAgICAgIFwiYWJvcnRcIixcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBcImxvYWRcIixcbiAgICAgICAgXCJ0aW1lb3V0XCIsXG4gICAgICAgIFwibG9hZGVuZFwiLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSkge1xuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHNlbGZbYG9uJHtldmVudE5hbWV9YF07XG5cbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBldmVudHMuZm9yRWFjaChhZGRFdmVudExpc3RlbmVyKTtcbn1cblxuRXZlbnRUYXJnZXRIYW5kbGVyLnByb3RvdHlwZSA9IHNpbm9uRXZlbnQuRXZlbnRUYXJnZXQ7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlclZhbHVlKHZhbHVlKSB7XG4gICAgLy8gUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlLWJ5dGVzXG4gICAgLyplc2xpbnQgbm8tY29udHJvbC1yZWdleDogXCJvZmZcIiovXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL15bXFx4MDlcXHgwQVxceDBEXFx4MjBdK3xbXFx4MDlcXHgwQVxceDBEXFx4MjBdKyQvZywgXCJcIik7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJzLCBoZWFkZXIpIHtcbiAgICB2YXIgZm91bmRIZWFkZXIgPSBPYmplY3Qua2V5cyhoZWFkZXJzKS5maWx0ZXIoZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgcmV0dXJuIGgudG9Mb3dlckNhc2UoKSA9PT0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm91bmRIZWFkZXJbMF0gfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gZXhjbHVkZVNldENvb2tpZTJIZWFkZXIoaGVhZGVyKSB7XG4gICAgcmV0dXJuICEvXlNldC1Db29raWUyPyQvaS50ZXN0KGhlYWRlcik7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVJlc3BvbnNlQm9keVR5cGUoYm9keSwgcmVzcG9uc2VUeXBlKSB7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcbiAgICB2YXIgaXNTdHJpbmcgPSB0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIjtcblxuICAgIGlmIChyZXNwb25zZVR5cGUgPT09IFwiYXJyYXlidWZmZXJcIikge1xuICAgICAgICBpZiAoIWlzU3RyaW5nICYmICEoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNwb25kIHRvIGZha2UgWE1MSHR0cFJlcXVlc3Qgd2l0aCAke2JvZHl9LCB3aGljaCBpcyBub3QgYSBzdHJpbmcgb3IgQXJyYXlCdWZmZXIuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnJvci5uYW1lID0gXCJJbnZhbGlkQm9keUV4Y2VwdGlvblwiO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09IFwiYmxvYlwiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmluZyAmJlxuICAgICAgICAgICAgIShib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpICYmXG4gICAgICAgICAgICBzdXBwb3J0c0Jsb2IgJiZcbiAgICAgICAgICAgICEoYm9keSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNwb25kIHRvIGZha2UgWE1MSHR0cFJlcXVlc3Qgd2l0aCAke2JvZHl9LCB3aGljaCBpcyBub3QgYSBzdHJpbmcsIEFycmF5QnVmZmVyLCBvciBCbG9iLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyb3IubmFtZSA9IFwiSW52YWxpZEJvZHlFeGNlcHRpb25cIjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNwb25kIHRvIGZha2UgWE1MSHR0cFJlcXVlc3Qgd2l0aCAke2JvZHl9LCB3aGljaCBpcyBub3QgYSBzdHJpbmcuYCxcbiAgICAgICAgKTtcbiAgICAgICAgZXJyb3IubmFtZSA9IFwiSW52YWxpZEJvZHlFeGNlcHRpb25cIjtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9BcnJheUJ1ZmZlcihib2R5LCBlbmNvZGluZykge1xuICAgIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBHbG9iYWxUZXh0RW5jb2RlcihlbmNvZGluZyB8fCBcInV0Zi04XCIpLmVuY29kZShib2R5KS5idWZmZXI7XG59XG5cbmZ1bmN0aW9uIGlzWG1sQ29udGVudFR5cGUoY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhY29udGVudFR5cGUgfHxcbiAgICAgICAgLyh0ZXh0XFwveG1sKXwoYXBwbGljYXRpb25cXC94bWwpfChcXCt4bWwpLy50ZXN0KGNvbnRlbnRUeXBlKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyUmVzcG9uc2UoeGhyKSB7XG4gICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiXCIgfHwgeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlID0geGhyLnJlc3BvbnNlVGV4dCA9IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlID0geGhyLnJlc3BvbnNlVGV4dCA9IG51bGw7XG4gICAgfVxuICAgIHhoci5yZXNwb25zZVhNTCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZha2VYTUxIdHRwUmVxdWVzdEZvcihnbG9iYWxTY29wZSkge1xuICAgIHZhciBpc1JlYWN0TmF0aXZlID1cbiAgICAgICAgZ2xvYmFsU2NvcGUubmF2aWdhdG9yICYmXG4gICAgICAgIGdsb2JhbFNjb3BlLm5hdmlnYXRvci5wcm9kdWN0ID09PSBcIlJlYWN0TmF0aXZlXCI7XG4gICAgdmFyIHNpbm9uWGhyID0geyBYTUxIdHRwUmVxdWVzdDogZ2xvYmFsU2NvcGUuWE1MSHR0cFJlcXVlc3QgfTtcbiAgICBzaW5vblhoci5HbG9iYWxYTUxIdHRwUmVxdWVzdCA9IGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0O1xuICAgIHNpbm9uWGhyLkdsb2JhbEFjdGl2ZVhPYmplY3QgPSBnbG9iYWxTY29wZS5BY3RpdmVYT2JqZWN0O1xuICAgIHNpbm9uWGhyLnN1cHBvcnRzQWN0aXZlWCA9XG4gICAgICAgIHR5cGVvZiBzaW5vblhoci5HbG9iYWxBY3RpdmVYT2JqZWN0ICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIHNpbm9uWGhyLnN1cHBvcnRzWEhSID0gdHlwZW9mIHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0ICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIHNpbm9uWGhyLndvcmtpbmdYSFIgPSBnZXRXb3JraW5nWEhSKGdsb2JhbFNjb3BlKTtcbiAgICBzaW5vblhoci5zdXBwb3J0c1RpbWVvdXQgPVxuICAgICAgICBzaW5vblhoci5zdXBwb3J0c1hIUiAmJlxuICAgICAgICBcInRpbWVvdXRcIiBpbiBuZXcgc2lub25YaHIuR2xvYmFsWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBzaW5vblhoci5zdXBwb3J0c0NPUlMgPVxuICAgICAgICBpc1JlYWN0TmF0aXZlIHx8XG4gICAgICAgIChzaW5vblhoci5zdXBwb3J0c1hIUiAmJlxuICAgICAgICAgICAgXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiBuZXcgc2lub25YaHIuR2xvYmFsWE1MSHR0cFJlcXVlc3QoKSk7XG5cbiAgICAvLyBOb3RlIHRoYXQgZm9yIEZha2VYTUxIdHRwUmVxdWVzdCB0byB3b3JrIHByZSBFUzVcbiAgICAvLyB3ZSBsb3NlIHNvbWUgb2YgdGhlIGFsaWdubWVudCB3aXRoIHRoZSBzcGVjLlxuICAgIC8vIFRvIGVuc3VyZSBhcyBjbG9zZSBhIG1hdGNoIGFzIHBvc3NpYmxlLFxuICAgIC8vIHNldCByZXNwb25zZVR5cGUgYmVmb3JlIGNhbGxpbmcgb3Blbiwgc2VuZCBvciByZXNwb25kO1xuICAgIGZ1bmN0aW9uIEZha2VYTUxIdHRwUmVxdWVzdChjb25maWcpIHtcbiAgICAgICAgRXZlbnRUYXJnZXRIYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IEZha2VYTUxIdHRwUmVxdWVzdC5VTlNFTlQ7XG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0Qm9keSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gXCJcIjtcbiAgICAgICAgdGhpcy51cGxvYWQgPSBuZXcgRXZlbnRUYXJnZXRIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMucmVzcG9uc2VUeXBlID0gXCJcIjtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IFwiXCI7XG4gICAgICAgIHRoaXMubG9nRXJyb3IgPSBjb25maWd1cmVMb2dFcnJvcihjb25maWcpO1xuXG4gICAgICAgIGlmIChzaW5vblhoci5zdXBwb3J0c1RpbWVvdXQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNDT1JTKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBGYWtlWE1MSHR0cFJlcXVlc3Qub25DcmVhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgRmFrZVhNTEh0dHBSZXF1ZXN0Lm9uQ3JlYXRlKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5U3RhdGUoeGhyKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gRmFrZVhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeGhyLnNlbmRGbGFnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJTlZBTElEX1NUQVRFX0VSUlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGxhcmdlc3QgYXJpdHkgaW4gWEhSIGlzIDUgLSBYSFIjb3BlblxuICAgIHZhciBhcHBseSA9IGZ1bmN0aW9uIChvYmosIG1ldGhvZCwgYXJncykge1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKCk7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZF0oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIGNhc2VcIik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LmZpbHRlcnMgPSBbXTtcbiAgICBGYWtlWE1MSHR0cFJlcXVlc3QuYWRkRmlsdGVyID0gZnVuY3Rpb24gYWRkRmlsdGVyKGZuKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZuKTtcbiAgICB9O1xuICAgIEZha2VYTUxIdHRwUmVxdWVzdC5kZWZha2UgPSBmdW5jdGlvbiBkZWZha2UoZmFrZVhociwgeGhyQXJncykge1xuICAgICAgICB2YXIgeGhyID0gbmV3IHNpbm9uWGhyLndvcmtpbmdYSFIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgXCJvcGVuXCIsXG4gICAgICAgICAgICBcInNldFJlcXVlc3RIZWFkZXJcIixcbiAgICAgICAgICAgIFwiYWJvcnRcIixcbiAgICAgICAgICAgIFwiZ2V0UmVzcG9uc2VIZWFkZXJcIixcbiAgICAgICAgICAgIFwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzXCIsXG4gICAgICAgICAgICBcImFkZEV2ZW50TGlzdGVuZXJcIixcbiAgICAgICAgICAgIFwib3ZlcnJpZGVNaW1lVHlwZVwiLFxuICAgICAgICAgICAgXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgICAgICBmYWtlWGhyW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHhociwgbWV0aG9kLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmFrZVhoci5zZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gUmVmOiBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1yZXNwb25zZXR5cGUtYXR0cmlidXRlXG4gICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSAhPT0gZmFrZVhoci5yZXNwb25zZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gZmFrZVhoci5yZXNwb25zZVR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkoeGhyLCBcInNlbmRcIiwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgY29weUF0dHJzID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGZha2VYaHJbYXR0cl0gPSB4aHJbYXR0cl07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc3RhdGVDaGFuZ2VTdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZha2VYaHIucmVhZHlTdGF0ZSA9IHhoci5yZWFkeVN0YXRlO1xuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID49IEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgICAgICAgICAgY29weUF0dHJzKFtcInN0YXR1c1wiLCBcInN0YXR1c1RleHRcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID49IEZha2VYTUxIdHRwUmVxdWVzdC5MT0FESU5HKSB7XG4gICAgICAgICAgICAgICAgY29weUF0dHJzKFtcInJlc3BvbnNlXCJdKTtcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiB8fCB4aHIucmVzcG9uc2VUeXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgICAgICAgICBjb3B5QXR0cnMoW1wicmVzcG9uc2VUZXh0XCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGUgPT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FICYmXG4gICAgICAgICAgICAgICAgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiXCIgfHwgeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29weUF0dHJzKFtcInJlc3BvbnNlWE1MXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc3RhdGVDaGFuZ2VFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZmFrZVhoci5vbnJlYWR5c3RhdGVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgICAgICAgICAgICAgZmFrZVhoci5vbnJlYWR5c3RhdGVjaGFuZ2UuY2FsbChmYWtlWGhyLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogZmFrZVhocixcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogZmFrZVhocixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBzdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgICAgIHN0YXRlQ2hhbmdlU3RhcnQoKTtcbiAgICAgICAgICAgIHN0YXRlQ2hhbmdlRW5kKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHhoci5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwgc3RhdGVDaGFuZ2VTdGFydCk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZha2VYaHIuZXZlbnRMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgLyplc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMqL1xuICAgICAgICAgICAgICAgIGZha2VYaHIuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIubGlzdGVuZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmU6IGhhbmRsZXIuY2FwdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2U6IGhhbmRsZXIub25jZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLyplc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyovXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHN0YXRlQ2hhbmdlRW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBzdGF0ZUNoYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseSh4aHIsIFwib3BlblwiLCB4aHJBcmdzKTtcbiAgICB9O1xuICAgIEZha2VYTUxIdHRwUmVxdWVzdC51c2VGaWx0ZXJzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlSZXF1ZXN0T3BlbmVkKHhocikge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5PUEVORUQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGUgPT09IEZha2VYTUxIdHRwUmVxdWVzdC5VTlNFTlRcbiAgICAgICAgICAgICAgICAgICAgPyBcIklOVkFMSURfU1RBVEVfRVJSIC0geW91IG1pZ2h0IGJlIHRyeWluZyB0byBzZXQgdGhlIHJlcXVlc3Qgc3RhdGUgZm9yIGEgcmVxdWVzdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2hlY2sgJ3JlYWR5U3RhdGUnIGZpcnN0Li4uXCJcbiAgICAgICAgICAgICAgICAgICAgOiBgSU5WQUxJRF9TVEFURV9FUlIgLSAke3hoci5yZWFkeVN0YXRlfWA7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeVJlcXVlc3RTZW50KHhocikge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0IGRvbmVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlIZWFkZXJzUmVjZWl2ZWQoeGhyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHhoci5hc3luYyAmJlxuICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaGVhZGVycyByZWNlaXZlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXNwb25zZUJvZHkocmVzcG9uc2VUeXBlLCBjb250ZW50VHlwZSwgYm9keSkge1xuICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnRzQXJyYXlCdWZmZXIgJiYgcmVzcG9uc2VUeXBlID09PSBcImFycmF5YnVmZmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9BcnJheUJ1ZmZlcihib2R5KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFJldHVybiBwYXJzaW5nIGZhaWx1cmUgYXMgbnVsbFxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnRzQmxvYiAmJiByZXNwb25zZVR5cGUgPT09IFwiYmxvYlwiKSB7XG4gICAgICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGJsb2JPcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBibG9iT3B0aW9ucy50eXBlID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2NvbnZlcnRUb0FycmF5QnVmZmVyKGJvZHkpXSwgYmxvYk9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgICAgICBpZiAoaXNYbWxDb250ZW50VHlwZShjb250ZW50VHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRmFrZVhNTEh0dHBSZXF1ZXN0LnBhcnNlWE1MKGJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlVHlwZSAke3Jlc3BvbnNlVHlwZX1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGVwcyB0byBmb2xsb3cgd2hlbiB0aGVyZSBpcyBhbiBlcnJvciwgYWNjb3JkaW5nIHRvOlxuICAgICAqIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1lcnJvci1zdGVwc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcXVlc3RFcnJvclN0ZXBzKHhocikge1xuICAgICAgICBjbGVhclJlc3BvbnNlKHhocik7XG4gICAgICAgIHhoci5lcnJvckZsYWcgPSB0cnVlO1xuICAgICAgICB4aHIucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgeGhyLnJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlICE9PSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UICYmXG4gICAgICAgICAgICB4aHIuc2VuZEZsYWcgJiZcbiAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlICE9PSBGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5ET05FKTtcbiAgICAgICAgICAgIHhoci5zZW5kRmxhZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LnBhcnNlWE1MID0gZnVuY3Rpb24gcGFyc2VYTUwodGV4dCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJpbmcgYXMgcGFyc2luZyBmYWlsdXJlXG4gICAgICAgIGlmICh0ZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRE9NUGFyc2VyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXJlcnJvck5TID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlcmVycm9ycyA9IHBhcnNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wYXJzZUZyb21TdHJpbmcoXCJJTlZBTElEXCIsIFwidGV4dC94bWxcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZXJlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyZXJyb3JOUyA9IHBhcnNlcmVycm9yc1swXS5uYW1lc3BhY2VVUkk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgaW52YWxpZCBYTUwgbWFrZXMgSUUxMSB0aHJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gbm8gbmFtZXNwYWNlIG5lZWRzIHRvIGJlIGRldGVybWluZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRleHQsIFwidGV4dC94bWxcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJlcnJvck5TLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJzZXJlcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHhtbERvYyA9IG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxET01cIik7XG4gICAgICAgICAgICAgICAgeG1sRG9jLmFzeW5jID0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgIHhtbERvYy5sb2FkWE1MKHRleHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB4bWxEb2MucGFyc2VFcnJvci5lcnJvckNvZGUgIT09IDAgPyBudWxsIDogeG1sRG9jO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFVuYWJsZSB0byBwYXJzZSBYTUwgLSBubyBiaWdnaWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBGYWtlWE1MSHR0cFJlcXVlc3Quc3RhdHVzQ29kZXMgPSB7XG4gICAgICAgIDEwMDogXCJDb250aW51ZVwiLFxuICAgICAgICAxMDE6IFwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFxuICAgICAgICAyMDA6IFwiT0tcIixcbiAgICAgICAgMjAxOiBcIkNyZWF0ZWRcIixcbiAgICAgICAgMjAyOiBcIkFjY2VwdGVkXCIsXG4gICAgICAgIDIwMzogXCJOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvblwiLFxuICAgICAgICAyMDQ6IFwiTm8gQ29udGVudFwiLFxuICAgICAgICAyMDU6IFwiUmVzZXQgQ29udGVudFwiLFxuICAgICAgICAyMDY6IFwiUGFydGlhbCBDb250ZW50XCIsXG4gICAgICAgIDIwNzogXCJNdWx0aS1TdGF0dXNcIixcbiAgICAgICAgMzAwOiBcIk11bHRpcGxlIENob2ljZVwiLFxuICAgICAgICAzMDE6IFwiTW92ZWQgUGVybWFuZW50bHlcIixcbiAgICAgICAgMzAyOiBcIkZvdW5kXCIsXG4gICAgICAgIDMwMzogXCJTZWUgT3RoZXJcIixcbiAgICAgICAgMzA0OiBcIk5vdCBNb2RpZmllZFwiLFxuICAgICAgICAzMDU6IFwiVXNlIFByb3h5XCIsXG4gICAgICAgIDMwNzogXCJUZW1wb3JhcnkgUmVkaXJlY3RcIixcbiAgICAgICAgNDAwOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIDQwMTogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgICAgNDAyOiBcIlBheW1lbnQgUmVxdWlyZWRcIixcbiAgICAgICAgNDAzOiBcIkZvcmJpZGRlblwiLFxuICAgICAgICA0MDQ6IFwiTm90IEZvdW5kXCIsXG4gICAgICAgIDQwNTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcbiAgICAgICAgNDA2OiBcIk5vdCBBY2NlcHRhYmxlXCIsXG4gICAgICAgIDQwNzogXCJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICAgICAgICA0MDg6IFwiUmVxdWVzdCBUaW1lb3V0XCIsXG4gICAgICAgIDQwOTogXCJDb25mbGljdFwiLFxuICAgICAgICA0MTA6IFwiR29uZVwiLFxuICAgICAgICA0MTE6IFwiTGVuZ3RoIFJlcXVpcmVkXCIsXG4gICAgICAgIDQxMjogXCJQcmVjb25kaXRpb24gRmFpbGVkXCIsXG4gICAgICAgIDQxMzogXCJSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2VcIixcbiAgICAgICAgNDE0OiBcIlJlcXVlc3QtVVJJIFRvbyBMb25nXCIsXG4gICAgICAgIDQxNTogXCJVbnN1cHBvcnRlZCBNZWRpYSBUeXBlXCIsXG4gICAgICAgIDQxNjogXCJSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlzZmlhYmxlXCIsXG4gICAgICAgIDQxNzogXCJFeHBlY3RhdGlvbiBGYWlsZWRcIixcbiAgICAgICAgNDIyOiBcIlVucHJvY2Vzc2FibGUgRW50aXR5XCIsXG4gICAgICAgIDUwMDogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIixcbiAgICAgICAgNTAxOiBcIk5vdCBJbXBsZW1lbnRlZFwiLFxuICAgICAgICA1MDI6IFwiQmFkIEdhdGV3YXlcIixcbiAgICAgICAgNTAzOiBcIlNlcnZpY2UgVW5hdmFpbGFibGVcIixcbiAgICAgICAgNTA0OiBcIkdhdGV3YXkgVGltZW91dFwiLFxuICAgICAgICA1MDU6IFwiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWRcIixcbiAgICB9O1xuXG4gICAgZXh0ZW5kKEZha2VYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIHNpbm9uRXZlbnQuRXZlbnRUYXJnZXQsIHtcbiAgICAgICAgYXN5bmM6IHRydWUsXG5cbiAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgICAgIHRoaXMuYXN5bmMgPSB0eXBlb2YgYXN5bmMgPT09IFwiYm9vbGVhblwiID8gYXN5bmMgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZsYWcgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKEZha2VYTUxIdHRwUmVxdWVzdC51c2VGaWx0ZXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHhockFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmFrZSA9IEZha2VYTUxIdHRwUmVxdWVzdC5maWx0ZXJzLnNvbWUoZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyLmFwcGx5KHRoaXMsIHhockFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChkZWZha2UpIHtcbiAgICAgICAgICAgICAgICAgICAgRmFrZVhNTEh0dHBSZXF1ZXN0LmRlZmFrZSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5PUEVORUQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWR5U3RhdGVDaGFuZ2U6IGZ1bmN0aW9uIHJlYWR5U3RhdGVDaGFuZ2Uoc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgICAgICB2YXIgcmVhZHlTdGF0ZUNoYW5nZUV2ZW50ID0gbmV3IHNpbm9uRXZlbnQuRXZlbnQoXG4gICAgICAgICAgICAgICAgXCJyZWFkeXN0YXRlY2hhbmdlXCIsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZShyZWFkeVN0YXRlQ2hhbmdlRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dFcnJvcihcIkZha2UgWEhSIG9ucmVhZHlzdGF0ZWNoYW5nZSBoYW5kbGVyXCIsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQocmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50LCBwcm9ncmVzcztcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVkT3V0IHx8IHRoaXMuYWJvcnRlZCB8fCB0aGlzLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHsgbG9hZGVkOiAwLCB0b3RhbDogMCB9O1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy50aW1lZE91dCAmJiBcInRpbWVvdXRcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFib3J0ZWQgJiYgXCJhYm9ydFwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0geyBsb2FkZWQ6IDEwMCwgdG90YWw6IDEwMCB9O1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9IFwibG9hZFwiO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c1Byb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoZXZlbnQsIHByb2dyZXNzLCB0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzLCB0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiLCBwcm9ncmVzcywgdGhpcyksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoZXZlbnQsIHByb2dyZXNzLCB0aGlzKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChyZWFkeVN0YXRlQ2hhbmdlRXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIiwgcHJvZ3Jlc3MsIHRoaXMpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gUmVmIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLXNldHJlcXVlc3RoZWFkZXIoKS1tZXRob2RcbiAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEJ5IFJGQzcyMzAsIHNlY3Rpb24gMy4yLjQsIGhlYWRlciB2YWx1ZXMgc2hvdWxkIGJlIHN0cmluZ3MuIEdvdCAke3R5cGVvZiB2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXJpZnlTdGF0ZSh0aGlzKTtcblxuICAgICAgICAgICAgdmFyIGNoZWNrVW5zYWZlSGVhZGVycyA9IHRydWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudW5zYWZlSGVhZGVyc0VuYWJsZWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGNoZWNrVW5zYWZlSGVhZGVycyA9IHRoaXMudW5zYWZlSGVhZGVyc0VuYWJsZWQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNoZWNrVW5zYWZlSGVhZGVycyAmJlxuICAgICAgICAgICAgICAgIChnZXRIZWFkZXIodW5zYWZlSGVhZGVycywgaGVhZGVyKSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAvXihTZWMtfFByb3h5LSkvaS50ZXN0KGhlYWRlcikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgYFJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIke2hlYWRlcn1cImAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB2YWx1ZSA9IG5vcm1hbGl6ZUhlYWRlclZhbHVlKHZhbHVlKTtcblxuICAgICAgICAgICAgdmFyIGV4aXN0aW5nSGVhZGVyID0gZ2V0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcnMsIGhlYWRlcik7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzW2V4aXN0aW5nSGVhZGVyXSArPSBgLCAke3ZhbHVlfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnNbaGVhZGVyXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldFN0YXR1czogZnVuY3Rpb24gc2V0U3RhdHVzKHN0YXR1cykge1xuICAgICAgICAgICAgdmFyIHNhbml0aXplZFN0YXR1cyA9IHR5cGVvZiBzdGF0dXMgPT09IFwibnVtYmVyXCIgPyBzdGF0dXMgOiAyMDA7XG5cbiAgICAgICAgICAgIHZlcmlmeVJlcXVlc3RPcGVuZWQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHNhbml0aXplZFN0YXR1cztcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzVGV4dCA9IEZha2VYTUxIdHRwUmVxdWVzdC5zdGF0dXNDb2Rlc1tzYW5pdGl6ZWRTdGF0dXNdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIEhlbHBzIHRlc3RpbmdcbiAgICAgICAgc2V0UmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbiBzZXRSZXNwb25zZUhlYWRlcnMoaGVhZGVycykge1xuICAgICAgICAgICAgdmVyaWZ5UmVxdWVzdE9wZW5lZCh0aGlzKTtcblxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICh0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHt9KTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzW2hlYWRlcl0gPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGVDaGFuZ2UoRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBDdXJyZW50bHkgdHJlYXRzIEFMTCBkYXRhIGFzIGEgRE9NU3RyaW5nIChpLmUuIG5vIERvY3VtZW50KVxuICAgICAgICBzZW5kOiBmdW5jdGlvbiBzZW5kKGRhdGEpIHtcbiAgICAgICAgICAgIHZlcmlmeVN0YXRlKHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAoIS9eKGhlYWQpJC9pLnRlc3QodGhpcy5tZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gZ2V0SGVhZGVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdEhlYWRlcnNbY29udGVudFR5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucmVxdWVzdEhlYWRlcnNbY29udGVudFR5cGVdLnNwbGl0KFwiO1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyc1tjb250ZW50VHlwZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7dmFsdWVbMF19O2NoYXJzZXQ9dXRmLThgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNGb3JtRGF0YSAmJiAhKGRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtOFwiO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEJvZHkgPSBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVycm9yRmxhZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZW5kRmxhZyA9IHRoaXMuYXN5bmM7XG4gICAgICAgICAgICBjbGVhclJlc3BvbnNlKHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub25TZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VuZCh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSBsaXN0ZW4gaWYgc2V0SW50ZXJ2YWwgYW5kIERhdGUgYXJlIGEgc3R1YmJlZC5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzaW5vblhoci5zdXBwb3J0c1RpbWVvdXQgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2Ygc2V0SW50ZXJ2YWwuY2xvY2sgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgRGF0ZS5jbG9jayA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluaXRpYXRlZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgICAgIC8vIExpc3RlbiB0byBhbnkgcG9zc2libGUgdGljayBieSBmYWtlIHRpbWVycyBhbmQgY2hlY2sgdG8gc2VlIGlmIHRpbWVvdXQgaGFzXG4gICAgICAgICAgICAgICAgLy8gYmVlbiBleGNlZWRlZC4gSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRpbWVvdXQgY2FuIGJlIGNoYW5nZWQgd2hpbGUgYSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgLy8gaXMgaW4gZmxpZ2h0LCBzbyB3ZSBtdXN0IGNoZWNrIGFueXRpbWUgdGhlIGVuZCB1c2VyIGZvcmNlcyBhIGNsb2NrIHRpY2sgdG8gbWFrZVxuICAgICAgICAgICAgICAgIC8vIHN1cmUgdGltZW91dCBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2RmblJldHVybkxpbmstMlxuICAgICAgICAgICAgICAgIHZhciBjbGVhckludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWFkeVN0YXRlIGhhcyBiZWVuIHJlc2V0IG9yIGlzIGRvbmUuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBubyB0aW1lb3V0LiBUaGlzIHdpbGwgYWxzbyBwcmV2ZW50IGFib3J0ZWQgcmVxdWVzdHMgYW5kXG4gICAgICAgICAgICAgICAgICAgIC8vIGZha2VTZXJ2ZXJXaXRoQ2xvY2sgZnJvbSB0cmlnZ2VyaW5nIHVubmVjZXNzYXJ5IHJlc3BvbnNlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWR5U3RhdGUgPT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhckludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYudGltZW91dCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0ID4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpID49IGluaXRpYXRlZFRpbWUgKyBzZWxmLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJUaW1lb3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhckludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5FdmVudChcImxvYWRzdGFydFwiLCBmYWxzZSwgZmFsc2UsIHRoaXMpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhYm9ydDogZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVxdWVzdEVycm9yU3RlcHModGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbGVhclJlc3BvbnNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lcnJvckZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5ET05FKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0cmlnZ2VyVGltZW91dDogZnVuY3Rpb24gdHJpZ2dlclRpbWVvdXQoKSB7XG4gICAgICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEVycm9yU3RlcHModGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyKGhlYWRlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA8IEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgvXlNldC1Db29raWUyPyQvaS50ZXN0KGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBoZWFkZXIgPSBnZXRIZWFkZXIodGhpcy5yZXNwb25zZUhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlSGVhZGVyc1toZWFkZXJdIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbiBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlIDwgRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBPYmplY3Qua2V5cyhyZXNwb25zZUhlYWRlcnMpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihleGNsdWRlU2V0Q29va2llMkhlYWRlcilcbiAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVzcG9uc2VIZWFkZXJzW2hlYWRlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3ByZXZ9JHtoZWFkZXJ9OiAke3ZhbHVlfVxcclxcbmA7XG4gICAgICAgICAgICAgICAgfSwgXCJcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldFJlc3BvbnNlQm9keTogZnVuY3Rpb24gc2V0UmVzcG9uc2VCb2R5KGJvZHkpIHtcbiAgICAgICAgICAgIHZlcmlmeVJlcXVlc3RTZW50KHRoaXMpO1xuICAgICAgICAgICAgdmVyaWZ5SGVhZGVyc1JlY2VpdmVkKHRoaXMpO1xuICAgICAgICAgICAgdmVyaWZ5UmVzcG9uc2VCb2R5VHlwZShib2R5LCB0aGlzLnJlc3BvbnNlVHlwZSk7XG4gICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPVxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGRlbk1pbWVUeXBlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcblxuICAgICAgICAgICAgdmFyIGlzVGV4dFJlc3BvbnNlID1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiB8fCB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBjbGVhclJlc3BvbnNlKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5jaHVua1NpemUgfHwgMTA7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5MT0FESU5HKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0ID0gdGhpcy5yZXNwb25zZSArPSBib2R5LnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArIGNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gY2h1bmtTaXplO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4IDwgYm9keS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gY29udmVydFJlc3BvbnNlQm9keShcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpc1RleHRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0ID0gdGhpcy5yZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlWE1MID0gdGhpcy5yZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUgPT09IFwiXCIgJiZcbiAgICAgICAgICAgICAgICBpc1htbENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVhNTCA9IEZha2VYTUxIdHRwUmVxdWVzdC5wYXJzZVhNTChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVRleHQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uZDogZnVuY3Rpb24gcmVzcG9uZChzdGF0dXMsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VVUkwgPSB0aGlzLnVybDtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzcG9uc2VIZWFkZXJzKGhlYWRlcnMgfHwge30pO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXNwb25zZUJvZHkoYm9keSB8fCBcIlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGxvYWRQcm9ncmVzczogZnVuY3Rpb24gdXBsb2FkUHJvZ3Jlc3MocHJvZ3Jlc3NFdmVudFJhdykge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZG93bmxvYWRQcm9ncmVzczogZnVuY3Rpb24gZG93bmxvYWRQcm9ncmVzcyhwcm9ncmVzc0V2ZW50UmF3KSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBsb2FkRXJyb3I6IGZ1bmN0aW9uIHVwbG9hZEVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNDdXN0b21FdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LkN1c3RvbUV2ZW50KFwiZXJyb3JcIiwgeyBkZXRhaWw6IGVycm9yIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24gb3ZlcnJpZGVNaW1lVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID49IEZha2VYTUxIdHRwUmVxdWVzdC5MT0FESU5HKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRkZW5NaW1lVHlwZSA9IHR5cGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB2YXIgc3RhdGVzID0ge1xuICAgICAgICBVTlNFTlQ6IDAsXG4gICAgICAgIE9QRU5FRDogMSxcbiAgICAgICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICAgICAgTE9BRElORzogMyxcbiAgICAgICAgRE9ORTogNCxcbiAgICB9O1xuXG4gICAgZXh0ZW5kKEZha2VYTUxIdHRwUmVxdWVzdCwgc3RhdGVzKTtcbiAgICBleHRlbmQoRmFrZVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgc3RhdGVzKTtcblxuICAgIGZ1bmN0aW9uIHVzZUZha2VYTUxIdHRwUmVxdWVzdCgpIHtcbiAgICAgICAgRmFrZVhNTEh0dHBSZXF1ZXN0LnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKGtlZXBPbkNyZWF0ZSkge1xuICAgICAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzWEhSKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuWE1MSHR0cFJlcXVlc3QgPSBzaW5vblhoci5HbG9iYWxYTUxIdHRwUmVxdWVzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzQWN0aXZlWCkge1xuICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLkFjdGl2ZVhPYmplY3QgPSBzaW5vblhoci5HbG9iYWxBY3RpdmVYT2JqZWN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgRmFrZVhNTEh0dHBSZXF1ZXN0LnJlc3RvcmU7XG5cbiAgICAgICAgICAgIGlmIChrZWVwT25DcmVhdGUgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgRmFrZVhNTEh0dHBSZXF1ZXN0Lm9uQ3JlYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNYSFIpIHtcbiAgICAgICAgICAgIGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0ID0gRmFrZVhNTEh0dHBSZXF1ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzQWN0aXZlWCkge1xuICAgICAgICAgICAgZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdCA9IGZ1bmN0aW9uIEFjdGl2ZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG9iaklkID09PSBcIk1pY3Jvc29mdC5YTUxIVFRQXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgL15Nc3htbDJcXC5YTUxIVFRQL2kudGVzdChvYmpJZClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGYWtlWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNpbm9uWGhyLkdsb2JhbEFjdGl2ZVhPYmplY3Qob2JqSWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBGYWtlWE1MSHR0cFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgeGhyOiBzaW5vblhocixcbiAgICAgICAgRmFrZVhNTEh0dHBSZXF1ZXN0OiBGYWtlWE1MSHR0cFJlcXVlc3QsXG4gICAgICAgIHVzZUZha2VYTUxIdHRwUmVxdWVzdDogdXNlRmFrZVhNTEh0dHBSZXF1ZXN0LFxuICAgIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kKGZha2VYTUxIdHRwUmVxdWVzdEZvcihnbG9iYWxPYmplY3QpLCB7XG4gICAgZmFrZVhNTEh0dHBSZXF1ZXN0Rm9yOiBmYWtlWE1MSHR0cFJlcXVlc3RGb3IsXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmYWtlU2VydmVyOiByZXF1aXJlKFwiLi9mYWtlLXNlcnZlclwiKSxcbiAgICBmYWtlU2VydmVyV2l0aENsb2NrOiByZXF1aXJlKFwiLi9mYWtlLXNlcnZlci9mYWtlLXNlcnZlci13aXRoLWNsb2NrXCIpLFxuICAgIGZha2VYaHI6IHJlcXVpcmUoXCIuL2Zha2UteGhyXCIpLFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7XG5cbnZhciBvcmlnS2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGtleXNTaGltID0gb3JpZ0tleXMgPyBmdW5jdGlvbiBrZXlzKG8pIHsgcmV0dXJuIG9yaWdLZXlzKG8pOyB9IDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgb3JpZ2luYWxLZXlzID0gT2JqZWN0LmtleXM7XG5cbmtleXNTaGltLnNoaW0gPSBmdW5jdGlvbiBzaGltT2JqZWN0S2V5cygpIHtcblx0aWYgKE9iamVjdC5rZXlzKSB7XG5cdFx0dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gU2FmYXJpIDUuMCBidWdcblx0XHRcdHZhciBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBhcmdzICYmIGFyZ3MubGVuZ3RoID09PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdH0oMSwgMikpO1xuXHRcdGlmICgha2V5c1dvcmtzV2l0aEFyZ3VtZW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuXHRcdFx0XHRpZiAoaXNBcmdzKG9iamVjdCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKHNsaWNlLmNhbGwob2JqZWN0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhvYmplY3QpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMgPSBrZXlzU2hpbTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmtleXMgfHwga2V5c1NoaW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIG1vZGlmaWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNi1zaGltXG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJ29iamVjdC1rZXlzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJykoKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgdG9PYmplY3QgPSBPYmplY3Q7XG52YXIgJHB1c2ggPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5wdXNoJyk7XG52YXIgJHByb3BJc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcbnZhciBvcmlnaW5hbEdldFN5bWJvbHMgPSBoYXNTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA6IG51bGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UxKSB7XG5cdGlmICh0YXJnZXQgPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTsgfVxuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpOyAvLyBzdGVwIDFcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdG87IC8vIHN0ZXAgMlxuXHR9XG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgKytzKSB7XG5cdFx0dmFyIGZyb20gPSB0b09iamVjdChhcmd1bWVudHNbc10pOyAvLyBzdGVwIDMuYS5pXG5cblx0XHQvLyBzdGVwIDMuYS5paTpcblx0XHR2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSk7XG5cdFx0dmFyIGdldFN5bWJvbHMgPSBoYXNTeW1ib2xzICYmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzIHx8IG9yaWdpbmFsR2V0U3ltYm9scyk7XG5cdFx0aWYgKGdldFN5bWJvbHMpIHtcblx0XHRcdHZhciBzeW1zID0gZ2V0U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR2YXIga2V5ID0gc3ltc1tqXTtcblx0XHRcdFx0aWYgKCRwcm9wSXNFbnVtZXJhYmxlKGZyb20sIGtleSkpIHtcblx0XHRcdFx0XHQkcHVzaChrZXlzLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc3RlcCAzLmEuaWlpOlxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0dmFyIG5leHRLZXkgPSBrZXlzW2ldO1xuXHRcdFx0aWYgKCRwcm9wSXNFbnVtZXJhYmxlKGZyb20sIG5leHRLZXkpKSB7IC8vIHN0ZXAgMy5hLmlpaS4yXG5cdFx0XHRcdHZhciBwcm9wVmFsdWUgPSBmcm9tW25leHRLZXldOyAvLyBzdGVwIDMuYS5paWkuMi5hXG5cdFx0XHRcdHRvW25leHRLZXldID0gcHJvcFZhbHVlOyAvLyBzdGVwIDMuYS5paWkuMi5iXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvOyAvLyBzdGVwIDRcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlciA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIHY4LCBzcGVjaWZpY2FsbHkgaW4gbm9kZSA0LngsIGhhcyBhIGJ1ZyB3aXRoIGluY29ycmVjdCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlclxuXHQgKiBub3RlOiB0aGlzIGRvZXMgbm90IGRldGVjdCB0aGUgYnVnIHVubGVzcyB0aGVyZSdzIDIwIGNoYXJhY3RlcnNcblx0ICovXG5cdHZhciBzdHIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuXHR2YXIgbGV0dGVycyA9IHN0ci5zcGxpdCgnJyk7XG5cdHZhciBtYXAgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWFwW2xldHRlcnNbaV1dID0gbGV0dGVyc1tpXTtcblx0fVxuXHR2YXIgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwKTtcblx0dmFyIGFjdHVhbCA9ICcnO1xuXHRmb3IgKHZhciBrIGluIG9iaikge1xuXHRcdGFjdHVhbCArPSBrO1xuXHR9XG5cdHJldHVybiBzdHIgIT09IGFjdHVhbDtcbn07XG5cbnZhciBhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduIHx8ICFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Lypcblx0ICogRmlyZWZveCAzNyBzdGlsbCBoYXMgXCJwZW5kaW5nIGV4Y2VwdGlvblwiIGxvZ2ljIGluIGl0cyBPYmplY3QuYXNzaWduIGltcGxlbWVudGF0aW9uLFxuXHQgKiB3aGljaCBpcyA3MiUgc2xvd2VyIHRoYW4gb3VyIHNoaW0sIGFuZCBGaXJlZm94IDQwJ3MgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxuXHQgKi9cblx0dmFyIHRocm93ZXIgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoeyAxOiAyIH0pO1xuXHR0cnkge1xuXHRcdE9iamVjdC5hc3NpZ24odGhyb3dlciwgJ3h5Jyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gdGhyb3dlclsxXSA9PT0gJ3knO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBpbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRpZiAobGFja3NQcm9wZXJFbnVtZXJhdGlvbk9yZGVyKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGFzc2lnbkhhc1BlbmRpbmdFeGNlcHRpb25zKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0cmV0dXJuIE9iamVjdC5hc3NpZ247XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhdGhUb1JlZ2V4cCA9IGV4cG9ydHMudG9rZW5zVG9SZWdleHAgPSBleHBvcnRzLnJlZ2V4cFRvRnVuY3Rpb24gPSBleHBvcnRzLm1hdGNoID0gZXhwb3J0cy50b2tlbnNUb0Z1bmN0aW9uID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5wYXJzZSA9IHZvaWQgMDtcbi8qKlxuICogVG9rZW5pemUgaW5wdXQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBsZXhlcihzdHIpIHtcbiAgICB2YXIgdG9rZW5zID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgY2hhciA9IHN0cltpXTtcbiAgICAgICAgaWYgKGNoYXIgPT09IFwiKlwiIHx8IGNoYXIgPT09IFwiK1wiIHx8IGNoYXIgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiTU9ESUZJRVJcIiwgaW5kZXg6IGksIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIkVTQ0FQRURfQ0hBUlwiLCBpbmRleDogaSsrLCB2YWx1ZTogc3RyW2krK10gfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gXCJ7XCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJPUEVOXCIsIGluZGV4OiBpLCB2YWx1ZTogc3RyW2krK10gfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJDTE9TRVwiLCBpbmRleDogaSwgdmFsdWU6IHN0cltpKytdIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IFwiOlwiKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgaiA9IGkgKyAxO1xuICAgICAgICAgICAgd2hpbGUgKGogPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChqKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gYDAtOWBcbiAgICAgICAgICAgICAgICAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBgQS1aYFxuICAgICAgICAgICAgICAgICAgICAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBgYS16YFxuICAgICAgICAgICAgICAgICAgICAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEyMikgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gYF9gXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPT09IDk1KSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gc3RyW2orK107XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWlzc2luZyBwYXJhbWV0ZXIgbmFtZSBhdCBcIi5jb25jYXQoaSkpO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIk5BTUVcIiwgaW5kZXg6IGksIHZhbHVlOiBuYW1lIH0pO1xuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDE7XG4gICAgICAgICAgICB2YXIgcGF0dGVybiA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgaiA9IGkgKyAxO1xuICAgICAgICAgICAgaWYgKHN0cltqXSA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGF0dGVybiBjYW5ub3Qgc3RhcnQgd2l0aCBcXFwiP1xcXCIgYXQgXCIuY29uY2F0KGopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChqIDwgc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChzdHJbal0gPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gc3RyW2orK10gKyBzdHJbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdHJbal0gPT09IFwiKVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyW2pdID09PSBcIihcIikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyW2ogKyAxXSAhPT0gXCI/XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYXB0dXJpbmcgZ3JvdXBzIGFyZSBub3QgYWxsb3dlZCBhdCBcIi5jb25jYXQoaikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gc3RyW2orK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY291bnQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYmFsYW5jZWQgcGF0dGVybiBhdCBcIi5jb25jYXQoaSkpO1xuICAgICAgICAgICAgaWYgKCFwYXR0ZXJuKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNaXNzaW5nIHBhdHRlcm4gYXQgXCIuY29uY2F0KGkpKTtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJQQVRURVJOXCIsIGluZGV4OiBpLCB2YWx1ZTogcGF0dGVybiB9KTtcbiAgICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIkNIQVJcIiwgaW5kZXg6IGksIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICB9XG4gICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIkVORFwiLCBpbmRleDogaSwgdmFsdWU6IFwiXCIgfSk7XG4gICAgcmV0dXJuIHRva2Vucztcbn1cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICovXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciB0b2tlbnMgPSBsZXhlcihzdHIpO1xuICAgIHZhciBfYSA9IG9wdGlvbnMucHJlZml4ZXMsIHByZWZpeGVzID0gX2EgPT09IHZvaWQgMCA/IFwiLi9cIiA6IF9hO1xuICAgIHZhciBkZWZhdWx0UGF0dGVybiA9IFwiW15cIi5jb25jYXQoZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8IFwiLyM/XCIpLCBcIl0rP1wiKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwYXRoID0gXCJcIjtcbiAgICB2YXIgdHJ5Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmIChpIDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaV0udHlwZSA9PT0gdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnNbaSsrXS52YWx1ZTtcbiAgICB9O1xuICAgIHZhciBtdXN0Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRyeUNvbnN1bWUodHlwZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgX2EgPSB0b2tlbnNbaV0sIG5leHRUeXBlID0gX2EudHlwZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuZXhwZWN0ZWQgXCIuY29uY2F0KG5leHRUeXBlLCBcIiBhdCBcIikuY29uY2F0KGluZGV4LCBcIiwgZXhwZWN0ZWQgXCIpLmNvbmNhdCh0eXBlKSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3VtZVRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBcIlwiO1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHdoaWxlICgodmFsdWUgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKSB8fCB0cnlDb25zdW1lKFwiRVNDQVBFRF9DSEFSXCIpKSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB3aGlsZSAoaSA8IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGNoYXIgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKTtcbiAgICAgICAgdmFyIG5hbWUgPSB0cnlDb25zdW1lKFwiTkFNRVwiKTtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSB0cnlDb25zdW1lKFwiUEFUVEVSTlwiKTtcbiAgICAgICAgaWYgKG5hbWUgfHwgcGF0dGVybikge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGNoYXIgfHwgXCJcIjtcbiAgICAgICAgICAgIGlmIChwcmVmaXhlcy5pbmRleE9mKHByZWZpeCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBwcmVmaXg7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybiB8fCBkZWZhdWx0UGF0dGVybixcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogdHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpIHx8IFwiXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZSA9IGNoYXIgfHwgdHJ5Q29uc3VtZShcIkVTQ0FQRURfQ0hBUlwiKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBwYXRoICs9IHZhbHVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgcGF0aCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wZW4gPSB0cnlDb25zdW1lKFwiT1BFTlwiKTtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSBjb25zdW1lVGV4dCgpO1xuICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHRyeUNvbnN1bWUoXCJOQU1FXCIpIHx8IFwiXCI7XG4gICAgICAgICAgICB2YXIgcGF0dGVybl8xID0gdHJ5Q29uc3VtZShcIlBBVFRFUk5cIikgfHwgXCJcIjtcbiAgICAgICAgICAgIHZhciBzdWZmaXggPSBjb25zdW1lVGV4dCgpO1xuICAgICAgICAgICAgbXVzdENvbnN1bWUoXCJDTE9TRVwiKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXzEgfHwgKHBhdHRlcm5fMSA/IGtleSsrIDogXCJcIiksXG4gICAgICAgICAgICAgICAgcGF0dGVybjogbmFtZV8xICYmICFwYXR0ZXJuXzEgPyBkZWZhdWx0UGF0dGVybiA6IHBhdHRlcm5fMSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IHN1ZmZpeCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogdHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpIHx8IFwiXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG11c3RDb25zdW1lKFwiRU5EXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICovXG5mdW5jdGlvbiBjb21waWxlKHN0ciwgb3B0aW9ucykge1xuICAgIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucyksIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZTtcbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24odG9rZW5zLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgcmVGbGFncyA9IGZsYWdzKG9wdGlvbnMpO1xuICAgIHZhciBfYSA9IG9wdGlvbnMuZW5jb2RlLCBlbmNvZGUgPSBfYSA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfYSwgX2IgPSBvcHRpb25zLnZhbGlkYXRlLCB2YWxpZGF0ZSA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7XG4gICAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gICAgdmFyIG1hdGNoZXMgPSB0b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIi5jb25jYXQodG9rZW4ucGF0dGVybiwgXCIpJFwiKSwgcmVGbGFncyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHBhdGggPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHBhdGggKz0gdG9rZW47XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhID8gZGF0YVt0b2tlbi5uYW1lXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciBvcHRpb25hbCA9IHRva2VuLm1vZGlmaWVyID09PSBcIj9cIiB8fCB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCI7XG4gICAgICAgICAgICB2YXIgcmVwZWF0ID0gdG9rZW4ubW9kaWZpZXIgPT09IFwiKlwiIHx8IHRva2VuLm1vZGlmaWVyID09PSBcIitcIjtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBcXFwiXCIuY29uY2F0KHRva2VuLm5hbWUsIFwiXFxcIiB0byBub3QgcmVwZWF0LCBidXQgZ290IGFuIGFycmF5XCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIi5jb25jYXQodG9rZW4ubmFtZSwgXCJcXFwiIHRvIG5vdCBiZSBlbXB0eVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0sIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlICYmICFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhbGwgXFxcIlwiLmNvbmNhdCh0b2tlbi5uYW1lLCBcIlxcXCIgdG8gbWF0Y2ggXFxcIlwiKS5jb25jYXQodG9rZW4ucGF0dGVybiwgXCJcXFwiLCBidXQgZ290IFxcXCJcIikuY29uY2F0KHNlZ21lbnQsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50ICsgdG9rZW4uc3VmZml4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlZ21lbnQgPSBlbmNvZGUoU3RyaW5nKHZhbHVlKSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZSAmJiAhbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBcXFwiXCIuY29uY2F0KHRva2VuLm5hbWUsIFwiXFxcIiB0byBtYXRjaCBcXFwiXCIpLmNvbmNhdCh0b2tlbi5wYXR0ZXJuLCBcIlxcXCIsIGJ1dCBnb3QgXFxcIlwiKS5jb25jYXQoc2VnbWVudCwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50ICsgdG9rZW4uc3VmZml4O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHR5cGVPZk1lc3NhZ2UgPSByZXBlYXQgPyBcImFuIGFycmF5XCIgOiBcImEgc3RyaW5nXCI7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgXFxcIlwiLmNvbmNhdCh0b2tlbi5uYW1lLCBcIlxcXCIgdG8gYmUgXCIpLmNvbmNhdCh0eXBlT2ZNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfTtcbn1cbmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb247XG4vKipcbiAqIENyZWF0ZSBwYXRoIG1hdGNoIGZ1bmN0aW9uIGZyb20gYHBhdGgtdG8tcmVnZXhwYCBzcGVjLlxuICovXG5mdW5jdGlvbiBtYXRjaChzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIHZhciByZSA9IHBhdGhUb1JlZ2V4cChzdHIsIGtleXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiByZWdleHBUb0Z1bmN0aW9uKHJlLCBrZXlzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubWF0Y2ggPSBtYXRjaDtcbi8qKlxuICogQ3JlYXRlIGEgcGF0aCBtYXRjaCBmdW5jdGlvbiBmcm9tIGBwYXRoLXRvLXJlZ2V4cGAgb3V0cHV0LlxuICovXG5mdW5jdGlvbiByZWdleHBUb0Z1bmN0aW9uKHJlLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLmRlY29kZSwgZGVjb2RlID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9IDogX2E7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwYXRobmFtZSkge1xuICAgICAgICB2YXIgbSA9IHJlLmV4ZWMocGF0aG5hbWUpO1xuICAgICAgICBpZiAoIW0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBwYXRoID0gbVswXSwgaW5kZXggPSBtLmluZGV4O1xuICAgICAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaWYgKG1baV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKGtleS5tb2RpZmllciA9PT0gXCIqXCIgfHwga2V5Lm1vZGlmaWVyID09PSBcIitcIikge1xuICAgICAgICAgICAgICAgIHBhcmFtc1trZXkubmFtZV0gPSBtW2ldLnNwbGl0KGtleS5wcmVmaXggKyBrZXkuc3VmZml4KS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGUodmFsdWUsIGtleSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5Lm5hbWVdID0gZGVjb2RlKG1baV0sIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBwYXRoOiBwYXRoLCBpbmRleDogaW5kZXgsIHBhcmFtczogcGFyYW1zIH07XG4gICAgfTtcbn1cbmV4cG9ydHMucmVnZXhwVG9GdW5jdGlvbiA9IHJlZ2V4cFRvRnVuY3Rpb247XG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18L1xcXFxdKS9nLCBcIlxcXFwkMVwiKTtcbn1cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZmxhZ3Mob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuc2Vuc2l0aXZlID8gXCJcIiA6IFwiaVwiO1xufVxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIGtleXMpIHtcbiAgICBpZiAoIWtleXMpXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIHZhciBncm91cHNSZWdleCA9IC9cXCgoPzpcXD88KC4qPyk+KT8oPyFcXD8pL2c7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZXhlY1Jlc3VsdCA9IGdyb3Vwc1JlZ2V4LmV4ZWMocGF0aC5zb3VyY2UpO1xuICAgIHdoaWxlIChleGVjUmVzdWx0KSB7XG4gICAgICAgIGtleXMucHVzaCh7XG4gICAgICAgICAgICAvLyBVc2UgcGFyZW50aGVzaXplZCBzdWJzdHJpbmcgbWF0Y2ggaWYgYXZhaWxhYmxlLCBpbmRleCBvdGhlcndpc2VcbiAgICAgICAgICAgIG5hbWU6IGV4ZWNSZXN1bHRbMV0gfHwgaW5kZXgrKyxcbiAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgIHN1ZmZpeDogXCJcIixcbiAgICAgICAgICAgIG1vZGlmaWVyOiBcIlwiLFxuICAgICAgICAgICAgcGF0dGVybjogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGV4ZWNSZXN1bHQgPSBncm91cHNSZWdleC5leGVjKHBhdGguc291cmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG59XG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwKHBhdGhzLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnRzID0gcGF0aHMubWFwKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiBwYXRoVG9SZWdleHAocGF0aCwga2V5cywgb3B0aW9ucykuc291cmNlOyB9KTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIig/OlwiLmNvbmNhdChwYXJ0cy5qb2luKFwifFwiKSwgXCIpXCIpLCBmbGFncyhvcHRpb25zKSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRva2Vuc1RvUmVnZXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdleHAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLnN0cmljdCwgc3RyaWN0ID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5zdGFydCwgc3RhcnQgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IG9wdGlvbnMuZW5kLCBlbmQgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuZW5jb2RlLCBlbmNvZGUgPSBfZCA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfZCwgX2UgPSBvcHRpb25zLmRlbGltaXRlciwgZGVsaW1pdGVyID0gX2UgPT09IHZvaWQgMCA/IFwiLyM/XCIgOiBfZSwgX2YgPSBvcHRpb25zLmVuZHNXaXRoLCBlbmRzV2l0aCA9IF9mID09PSB2b2lkIDAgPyBcIlwiIDogX2Y7XG4gICAgdmFyIGVuZHNXaXRoUmUgPSBcIltcIi5jb25jYXQoZXNjYXBlU3RyaW5nKGVuZHNXaXRoKSwgXCJdfCRcIik7XG4gICAgdmFyIGRlbGltaXRlclJlID0gXCJbXCIuY29uY2F0KGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpLCBcIl1cIik7XG4gICAgdmFyIHJvdXRlID0gc3RhcnQgPyBcIl5cIiA6IFwiXCI7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgICBmb3IgKHZhciBfaSA9IDAsIHRva2Vuc18xID0gdG9rZW5zOyBfaSA8IHRva2Vuc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNfMVtfaV07XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyhlbmNvZGUodG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcoZW5jb2RlKHRva2VuLnByZWZpeCkpO1xuICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IGVzY2FwZVN0cmluZyhlbmNvZGUodG9rZW4uc3VmZml4KSk7XG4gICAgICAgICAgICBpZiAodG9rZW4ucGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmIChrZXlzKVxuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggfHwgc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi5tb2RpZmllciA9PT0gXCIrXCIgfHwgdG9rZW4ubW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gdG9rZW4ubW9kaWZpZXIgPT09IFwiKlwiID8gXCI/XCIgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUgKz0gXCIoPzpcIi5jb25jYXQocHJlZml4LCBcIigoPzpcIikuY29uY2F0KHRva2VuLnBhdHRlcm4sIFwiKSg/OlwiKS5jb25jYXQoc3VmZml4KS5jb25jYXQocHJlZml4LCBcIig/OlwiKS5jb25jYXQodG9rZW4ucGF0dGVybiwgXCIpKSopXCIpLmNvbmNhdChzdWZmaXgsIFwiKVwiKS5jb25jYXQobW9kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlICs9IFwiKD86XCIuY29uY2F0KHByZWZpeCwgXCIoXCIpLmNvbmNhdCh0b2tlbi5wYXR0ZXJuLCBcIilcIikuY29uY2F0KHN1ZmZpeCwgXCIpXCIpLmNvbmNhdCh0b2tlbi5tb2RpZmllcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi5tb2RpZmllciA9PT0gXCIrXCIgfHwgdG9rZW4ubW9kaWZpZXIgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIigoPzpcIi5jb25jYXQodG9rZW4ucGF0dGVybiwgXCIpXCIpLmNvbmNhdCh0b2tlbi5tb2RpZmllciwgXCIpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGUgKz0gXCIoXCIuY29uY2F0KHRva2VuLnBhdHRlcm4sIFwiKVwiKS5jb25jYXQodG9rZW4ubW9kaWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm91dGUgKz0gXCIoPzpcIi5jb25jYXQocHJlZml4KS5jb25jYXQoc3VmZml4LCBcIilcIikuY29uY2F0KHRva2VuLm1vZGlmaWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5kKSB7XG4gICAgICAgIGlmICghc3RyaWN0KVxuICAgICAgICAgICAgcm91dGUgKz0gXCJcIi5jb25jYXQoZGVsaW1pdGVyUmUsIFwiP1wiKTtcbiAgICAgICAgcm91dGUgKz0gIW9wdGlvbnMuZW5kc1dpdGggPyBcIiRcIiA6IFwiKD89XCIuY29uY2F0KGVuZHNXaXRoUmUsIFwiKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBlbmRUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgIHZhciBpc0VuZERlbGltaXRlZCA9IHR5cGVvZiBlbmRUb2tlbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyBkZWxpbWl0ZXJSZS5pbmRleE9mKGVuZFRva2VuW2VuZFRva2VuLmxlbmd0aCAtIDFdKSA+IC0xXG4gICAgICAgICAgICA6IGVuZFRva2VuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiLmNvbmNhdChkZWxpbWl0ZXJSZSwgXCIoPz1cIikuY29uY2F0KGVuZHNXaXRoUmUsIFwiKSk/XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbmREZWxpbWl0ZWQpIHtcbiAgICAgICAgICAgIHJvdXRlICs9IFwiKD89XCIuY29uY2F0KGRlbGltaXRlclJlLCBcInxcIikuY29uY2F0KGVuZHNXaXRoUmUsIFwiKVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlZ0V4cChyb3V0ZSwgZmxhZ3Mob3B0aW9ucykpO1xufVxuZXhwb3J0cy50b2tlbnNUb1JlZ2V4cCA9IHRva2Vuc1RvUmVnZXhwO1xuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGdpdmVuIHBhdGggc3RyaW5nLCByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGhlIGtleXMsIHdoaWNoIHdpbGwgaG9sZCB0aGVcbiAqIHBsYWNlaG9sZGVyIGtleSBkZXNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCB1c2luZyBgL3VzZXIvOmlkYCwgYGtleXNgIHdpbGxcbiAqIGNvbnRhaW4gYFt7IG5hbWU6ICdpZCcsIGRlbGltaXRlcjogJy8nLCBvcHRpb25hbDogZmFsc2UsIHJlcGVhdDogZmFsc2UgfV1gLlxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICAgIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKVxuICAgICAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwga2V5cyk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpXG4gICAgICAgIHJldHVybiBhcnJheVRvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBzdHJpbmdUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMucGF0aFRvUmVnZXhwID0gcGF0aFRvUmVnZXhwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtZGF0YS1wcm9wZXJ0eScpO1xudmFyIGhhc0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzJykoKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnZ29wZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJGZsb29yID0gR2V0SW50cmluc2ljKCclTWF0aC5mbG9vciUnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0RnVuY3Rpb25MZW5ndGgoZm4sIGxlbmd0aCkge1xuXHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BmbmAgaXMgbm90IGEgZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAodHlwZW9mIGxlbmd0aCAhPT0gJ251bWJlcicgfHwgbGVuZ3RoIDwgMCB8fCBsZW5ndGggPiAweEZGRkZGRkZGIHx8ICRmbG9vcihsZW5ndGgpICE9PSBsZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyJyk7XG5cdH1cblxuXHR2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiAhIWFyZ3VtZW50c1syXTtcblxuXHR2YXIgZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSA9IHRydWU7XG5cdHZhciBmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgPSB0cnVlO1xuXHRpZiAoJ2xlbmd0aCcgaW4gZm4gJiYgZ09QRCkge1xuXHRcdHZhciBkZXNjID0gZ09QRChmbiwgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0ZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGVzYyAmJiAhZGVzYy53cml0YWJsZSkge1xuXHRcdFx0ZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgfHwgZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlIHx8ICFsb29zZSkge1xuXHRcdGlmIChoYXNEZXNjcmlwdG9ycykge1xuXHRcdFx0ZGVmaW5lKC8qKiBAdHlwZSB7UGFyYW1ldGVyczxkZWZpbmU+WzBdfSAqLyAoZm4pLCAnbGVuZ3RoJywgbGVuZ3RoLCB0cnVlLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVmaW5lKC8qKiBAdHlwZSB7UGFyYW1ldGVyczxkZWZpbmU+WzBdfSAqLyAoZm4pLCAnbGVuZ3RoJywgbGVuZ3RoKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZuO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdGRvdXQ6IGZhbHNlLFxuXHRzdGRlcnI6IGZhbHNlXG59O1xuIiwidmFyIG5leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy9icm93c2VyLmpzJykubmV4dFRpY2s7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaW1tZWRpYXRlSWRzID0ge307XG52YXIgbmV4dEltbWVkaWF0ZUlkID0gMDtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsgdGltZW91dC5jbG9zZSgpOyB9O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdywgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIFRoYXQncyBub3QgaG93IG5vZGUuanMgaW1wbGVtZW50cyBpdCBidXQgdGhlIGV4cG9zZWQgYXBpIGlzIHRoZSBzYW1lLlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCIgPyBzZXRJbW1lZGlhdGUgOiBmdW5jdGlvbihmbikge1xuICB2YXIgaWQgPSBuZXh0SW1tZWRpYXRlSWQrKztcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGZhbHNlIDogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gIGltbWVkaWF0ZUlkc1tpZF0gPSB0cnVlO1xuXG4gIG5leHRUaWNrKGZ1bmN0aW9uIG9uTmV4dFRpY2soKSB7XG4gICAgaWYgKGltbWVkaWF0ZUlkc1tpZF0pIHtcbiAgICAgIC8vIGZuLmNhbGwoKSBpcyBmYXN0ZXIgc28gd2Ugb3B0aW1pemUgZm9yIHRoZSBjb21tb24gdXNlLWNhc2VcbiAgICAgIC8vIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vY2FsbC1hcHBseS1zZWd1XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCk7XG4gICAgICB9XG4gICAgICAvLyBQcmV2ZW50IGlkcyBmcm9tIGxlYWtpbmdcbiAgICAgIGV4cG9ydHMuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9IHR5cGVvZiBjbGVhckltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gY2xlYXJJbW1lZGlhdGUgOiBmdW5jdGlvbihpZCkge1xuICBkZWxldGUgaW1tZWRpYXRlSWRzW2lkXTtcbn07IiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLnR5cGVEZXRlY3QgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIHR5cGUtZGV0ZWN0XG4gKiBDb3B5cmlnaHQoYykgMjAxMyBqYWtlIGx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG52YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xudmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0XG5cbnZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJztcbnZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFeGlzdHMgPSB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrTWFwRXhpc3RzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtTZXRFeGlzdHMgPSB0eXBlb2YgV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgZGF0YVZpZXdFeGlzdHMgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbEl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEVudHJpZXNFeGlzdHMgPSBzZXRFeGlzdHMgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBtYXBFbnRyaWVzRXhpc3RzID0gbWFwRXhpc3RzICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgc2V0SXRlcmF0b3JQcm90b3R5cGUgPSBzZXRFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgU2V0KCkuZW50cmllcygpKTtcbnZhciBtYXBJdGVyYXRvclByb3RvdHlwZSA9IG1hcEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBNYXAoKS5lbnRyaWVzKCkpO1xudmFyIGFycmF5SXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgYXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgc3RyaW5nSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlID0gc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgdG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGggPSA4O1xudmFyIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCA9IC0xO1xuLyoqXG4gKiAjIyMgdHlwZU9mIChvYmopXG4gKlxuICogVXNlcyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIG9iamVjdCxcbiAqIG5vcm1hbGlzaW5nIGJlaGF2aW91ciBhY3Jvc3MgZW5naW5lIHZlcnNpb25zICYgd2VsbCBvcHRpbWlzZWQuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IG9iamVjdCB0eXBlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB0eXBlRGV0ZWN0KG9iaikge1xuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMywwMzksMDM1IG9wcy9zZWMgwrExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIMKxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyDCsTEuOTElICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggOSw5NzgsNjYwIG9wcy9zZWMgwrExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIMKxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgwrExLjE1JSAoNzkgcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDMxLDE0OCw5NDAgb3BzL3NlYyDCsTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIMKxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgwrExLjA3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDMxLDI5Niw4NzAgb3BzL3NlYyDCsTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyDCsTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIMKxMS4zNyUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93KWBgXG4gICAqICAtIE5vZGUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gUGhhbnRvbUpTID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSBFZGdlID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcylgYFxuICAgKiAgLSBDaHJvbWUgV29ya2VyID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gU2FmYXJpIFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIDExIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIEVkZ2UgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICovXG4gIGlmIChvYmogPT09IGdsb2JhbE9iamVjdCkge1xuICAgIHJldHVybiAnZ2xvYmFsJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyLDg4OCwzNTIgb3BzL3NlYyDCsTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIMKxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgwrExLjU4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggMSwyNzksODUyIG9wcy9zZWMgwrEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgwrExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgwrEyLjI1JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggMSwxMjgsMDQwIG9wcy9zZWMgwrEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgwrEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgwrE1Ljc5JSAoODYgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggMSwwNTgsNzA3IG9wcy9zZWMgwrE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgwrE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyDCsTEzLjQ3JSAoNjQgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggNSw4ODcsOTEyIG9wcy9zZWMgwrExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgwrExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgwrExLjY3JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggNiw0NjMsOTY2IG9wcy9zZWMgwrExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgwrEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgwrExLjk4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggNiw2MDYsMDc4IG9wcy9zZWMgwrExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgwrExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyDCsTEuODUlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAyLDE0Myw2MzQgb3BzL3NlYyDCsTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIMKxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIMKxMC41OCUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gUmVnRXhwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnUmVnRXhwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgZGF0ZSAgICAgICAgICAgICAgIHggMiwxMzAsMDc0IG9wcy9zZWMgwrE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyDCsTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyDCsTEuMzElICg4MiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHNldCAgICAgICAgICAgICAgICB4IDQsNTQ1LDg3OSBvcHMvc2VjIMKxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIMKxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgwrE2LjU5JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha3NldCAgICAgICAgICAgIHggMSwzMjMsMjIwIG9wcy9zZWMgwrEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyDCsTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyDCsTIuMDIlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWttYXAgICAgICAgICAgICB4IDMsODgxLDM4NCBvcHMvc2VjIMKxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgwrExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyDCsTAuOTklICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0XG4gICAgLnByb3RvdHlwZVxuICAgIC50b1N0cmluZ1xuICAgIC5jYWxsKG9iailcbiAgICAuc2xpY2UodG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGgsIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCk7XG59XG5cbnJldHVybiB0eXBlRGV0ZWN0O1xuXG59KSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvY3JlYXRlLXNpbm9uLWFwaS5qcyIsImxpYi9zaW5vbi5qcyIsImxpYi9zaW5vbi9hc3NlcnQuanMiLCJsaWIvc2lub24vYmVoYXZpb3IuanMiLCJsaWIvc2lub24vY29sbGVjdC1vd24tbWV0aG9kcy5qcyIsImxpYi9zaW5vbi9jb2xvcml6ZXIuanMiLCJsaWIvc2lub24vY3JlYXRlLXNhbmRib3guanMiLCJsaWIvc2lub24vY3JlYXRlLXN0dWItaW5zdGFuY2UuanMiLCJsaWIvc2lub24vZGVmYXVsdC1iZWhhdmlvcnMuanMiLCJsaWIvc2lub24vZmFrZS5qcyIsImxpYi9zaW5vbi9tb2NrLWV4cGVjdGF0aW9uLmpzIiwibGliL3Npbm9uL21vY2suanMiLCJsaWIvc2lub24vcHJvbWlzZS5qcyIsImxpYi9zaW5vbi9wcm94eS1jYWxsLXV0aWwuanMiLCJsaWIvc2lub24vcHJveHktY2FsbC5qcyIsImxpYi9zaW5vbi9wcm94eS1pbnZva2UuanMiLCJsaWIvc2lub24vcHJveHkuanMiLCJsaWIvc2lub24vcmVzdG9yZS1vYmplY3QuanMiLCJsaWIvc2lub24vc2FuZGJveC5qcyIsImxpYi9zaW5vbi9zcHktZm9ybWF0dGVycy5qcyIsImxpYi9zaW5vbi9zcHkuanMiLCJsaWIvc2lub24vc3R1Yi5qcyIsImxpYi9zaW5vbi90aHJvdy1vbi1mYWxzeS1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2V4cG9ydC1hc3luYy1iZWhhdmlvcnMuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2V4dGVuZC5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtZXMtbW9kdWxlLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9pcy1ub24tZXhpc3RlbnQtcHJvcGVydHkuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2lzLXByb3BlcnR5LWNvbmZpZ3VyYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtcmVzdG9yYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9zaW5vbi10eXBlLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkcy5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvdXNlLXByb21pc2UtbGlicmFyeS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvd2Fsay1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dhbGsuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dyYXAtbWV0aG9kLmpzIiwibGliL3Npbm9uL3V0aWwvZmFrZS10aW1lcnMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2NsYXNzLW5hbWUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvZGVwcmVjYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9ldmVyeS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9mdW5jdGlvbi1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2dsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9vcmRlci1ieS1maXJzdC1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9jb3B5LXByb3RvdHlwZS1tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvZnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL29iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3NldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3Rocm93cy1vbi1wcm90by5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3ZhbHVlLXRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9mYWtlLXRpbWVycy9zcmMvZmFrZS10aW1lcnMtc3JjLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvYXJyYXktdHlwZXMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC1tYXRjaGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1ldGhvZC1leGlzdHMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9hc3NlcnQtdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2lzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvaXMtbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL21hdGNoLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL21hdGNoZXItcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvdHlwZS1tYXAuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9kZWVwLWVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvZ2V0LWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaWRlbnRpY2FsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtYXJndW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtYXJyYXktdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLWRhdGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtaXRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1tYXAuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1uYW4uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1uZWctemVyby5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLXNldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLXN1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2l0ZXJhYmxlLXRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL21hdGNoLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvc2Ftc2FtLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9ub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QvdHlwZS1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvdGV4dC1lbmNvZGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy90ZXh0LWVuY29kaW5nL2xpYi9lbmNvZGluZy1pbmRleGVzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3RleHQtZW5jb2RpbmcvbGliL2VuY29kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jYWxsLWJpbmQvY2FsbEJvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWZpbmUtZGF0YS1wcm9wZXJ0eS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qcyIsIm5vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXMtZXJyb3JzL2V2YWwuanMiLCJub2RlX21vZHVsZXMvZXMtZXJyb3JzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmVmLmpzIiwibm9kZV9tb2R1bGVzL2VzLWVycm9ycy9zeW50YXguanMiLCJub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiLCJub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcyIsIm5vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9nb3BkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXMtcHJvdG8vaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCJub2RlX21vZHVsZXMvaGFzb3duL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2p1c3QtZXh0ZW5kL2luZGV4LmNqcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guZ2V0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2NvbmZpZ3VyZS1sb2dnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZXZlbnQvY3VzdG9tLWV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2V2ZW50L2V2ZW50LXRhcmdldC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9ldmVudC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9wcm9ncmVzcy1ldmVudC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXNlcnZlci9mYWtlLXNlcnZlci13aXRoLWNsb2NrLmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2Utc2VydmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2Utc2VydmVyL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXhoci9ibG9iLmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2UteGhyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2lzQXJndW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC5hc3NpZ24vaW1wbGVtZW50YXRpb24uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NldC1mdW5jdGlvbi1sZW5ndGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ROQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FDMWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWpFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbjZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy81QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi9zaW5vbi9iZWhhdmlvclwiKTtcbmNvbnN0IGNyZWF0ZVNhbmRib3ggPSByZXF1aXJlKFwiLi9zaW5vbi9jcmVhdGUtc2FuZGJveFwiKTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3Npbm9uL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBmYWtlVGltZXJzID0gcmVxdWlyZShcIi4vc2lub24vdXRpbC9mYWtlLXRpbWVyc1wiKTtcbmNvbnN0IFNhbmRib3ggPSByZXF1aXJlKFwiLi9zaW5vbi9zYW5kYm94XCIpO1xuY29uc3Qgc3R1YiA9IHJlcXVpcmUoXCIuL3Npbm9uL3N0dWJcIik7XG5jb25zdCBwcm9taXNlID0gcmVxdWlyZShcIi4vc2lub24vcHJvbWlzZVwiKTtcbmNvbnN0IG5pc2UgPSByZXF1aXJlKFwibmlzZVwiKTtcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdHMgaW5qZWN0aW9uIHBvaW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFhIUiBsaWIgaW4gdGVzdGluZ1xuICogQHBhcmFtIHtvYmplY3R9IG9wdHMuc2lub25YaHJMaWJcbiAqIEByZXR1cm5zIHtvYmplY3R9IGEgY29uZmlndXJlZCBzYW5kYm94XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlQXBpKG9wdHMgPSB7IHNpbm9uWGhyTGliOiBuaXNlIH0pIHtcbiAgICBhc3NlcnQob3B0cz8uc2lub25YaHJMaWIsIFwiTm8gWEhSIGxpYiBwYXNzZWQgaW5cIik7XG4gICAgY29uc3QgeyBzaW5vblhockxpYiB9ID0gb3B0cztcblxuICAgIGNvbnN0IGFwaU1ldGhvZHMgPSB7XG4gICAgICAgIGNyZWF0ZVNhbmRib3g6IGNyZWF0ZVNhbmRib3gsXG4gICAgICAgIG1hdGNoOiByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmNyZWF0ZU1hdGNoZXIsXG4gICAgICAgIHJlc3RvcmVPYmplY3Q6IHJlcXVpcmUoXCIuL3Npbm9uL3Jlc3RvcmUtb2JqZWN0XCIpLFxuXG4gICAgICAgIGV4cGVjdGF0aW9uOiByZXF1aXJlKFwiLi9zaW5vbi9tb2NrLWV4cGVjdGF0aW9uXCIpLFxuXG4gICAgICAgIC8vIGZha2UgdGltZXJzXG4gICAgICAgIHRpbWVyczogZmFrZVRpbWVycy50aW1lcnMsXG5cbiAgICAgICAgLy8gZmFrZSBYSFJcbiAgICAgICAgeGhyOiBzaW5vblhockxpYi5mYWtlWGhyLnhocixcbiAgICAgICAgRmFrZVhNTEh0dHBSZXF1ZXN0OiBzaW5vblhockxpYi5mYWtlWGhyLkZha2VYTUxIdHRwUmVxdWVzdCxcblxuICAgICAgICAvLyBmYWtlIHNlcnZlclxuICAgICAgICBmYWtlU2VydmVyOiBzaW5vblhockxpYi5mYWtlU2VydmVyLFxuICAgICAgICBmYWtlU2VydmVyV2l0aENsb2NrOiBzaW5vblhockxpYi5mYWtlU2VydmVyV2l0aENsb2NrLFxuICAgICAgICBjcmVhdGVGYWtlU2VydmVyOiBzaW5vblhockxpYi5mYWtlU2VydmVyLmNyZWF0ZS5iaW5kKFxuICAgICAgICAgICAgc2lub25YaHJMaWIuZmFrZVNlcnZlcixcbiAgICAgICAgKSxcbiAgICAgICAgY3JlYXRlRmFrZVNlcnZlcldpdGhDbG9jazogc2lub25YaHJMaWIuZmFrZVNlcnZlcldpdGhDbG9jay5jcmVhdGUuYmluZChcbiAgICAgICAgICAgIHNpbm9uWGhyTGliLmZha2VTZXJ2ZXJXaXRoQ2xvY2ssXG4gICAgICAgICksXG5cbiAgICAgICAgYWRkQmVoYXZpb3I6IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgICAgICAgICAgYmVoYXZpb3IuYWRkQmVoYXZpb3Ioc3R1YiwgbmFtZSwgZm4pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZha2UgcHJvbWlzZVxuICAgICAgICBwcm9taXNlOiBwcm9taXNlLFxuICAgIH07XG5cbiAgICBjb25zdCBzYW5kYm94ID0gbmV3IFNhbmRib3goKTtcbiAgICByZXR1cm4gZXh0ZW5kKHNhbmRib3gsIGFwaU1ldGhvZHMpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjcmVhdGVBcGkgPSByZXF1aXJlKFwiLi9jcmVhdGUtc2lub24tYXBpXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFwaSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKiogQG1vZHVsZSAqL1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGNhbGxlZEluT3JkZXIgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5jYWxsZWRJbk9yZGVyO1xuY29uc3QgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbmNvbnN0IG9yZGVyQnlGaXJzdENhbGwgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5vcmRlckJ5Rmlyc3RDYWxsO1xuY29uc3QgdGltZXNJbldvcmRzID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3RpbWVzLWluLXdvcmRzXCIpO1xuY29uc3QgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5jb25zdCBzdHJpbmdTbGljZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuc3RyaW5nLnNsaWNlO1xuY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xuXG5jb25zdCBhcnJheVNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbmNvbnN0IGNvbmNhdCA9IGFycmF5UHJvdG8uY29uY2F0O1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG5jb25zdCBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuZnVuY3Rpb24gYXBwbHlEZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IG9ialtrZXldO1xuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDcmVhdGVBc3NlcnRPcHRpb25zXG4gKiBAZ2xvYmFsXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkTGltaXRBc3NlcnRpb25Mb2dzXSBkZWZhdWx0IGlzIGZhbHNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gIFthc3NlcnRpb25Mb2dMaW1pdF0gZGVmYXVsdCBpcyAxMEtcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhc3NlcnRpb24gb2JqZWN0IHRoYXQgZXhwb3NlcyBzZXZlcmFsIG1ldGhvZHMgdG8gaW52b2tlXG4gKlxuICogQHBhcmFtIHtDcmVhdGVBc3NlcnRPcHRpb25zfSAgW29wdHNdIG9wdGlvbnMgYmFnXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBvYmplY3Qgd2l0aCBtdWx0aXBsZSBhc3NlcnRpb24gbWV0aG9kc1xuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NlcnRPYmplY3Qob3B0cykge1xuICAgIGNvbnN0IGNsZWFuZWRBc3NlcnRPcHRpb25zID0gb3B0cyB8fCB7fTtcbiAgICBhcHBseURlZmF1bHRzKGNsZWFuZWRBc3NlcnRPcHRpb25zLCB7XG4gICAgICAgIHNob3VsZExpbWl0QXNzZXJ0aW9uTG9nczogZmFsc2UsXG4gICAgICAgIGFzc2VydGlvbkxvZ0xpbWl0OiAxZTQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3NlcnQgPSB7XG4gICAgICAgIGZhaWxFeGNlcHRpb246IFwiQXNzZXJ0RXJyb3JcIixcblxuICAgICAgICBmYWlsOiBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBtZXNzYWdlO1xuICAgICAgICAgICAgaWYgKGNsZWFuZWRBc3NlcnRPcHRpb25zLnNob3VsZExpbWl0QXNzZXJ0aW9uTG9ncykge1xuICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2Uuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICBjbGVhbmVkQXNzZXJ0T3B0aW9ucy5hc3NlcnRpb25Mb2dMaW1pdCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGVycm9yLm5hbWUgPSB0aGlzLmZhaWxFeGNlcHRpb24gfHwgYXNzZXJ0LmZhaWxFeGNlcHRpb247XG5cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhc3M6IGZ1bmN0aW9uIHBhc3MoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbE9yZGVyOiBmdW5jdGlvbiBhc3NlcnRDYWxsT3JkZXIoKSB7XG4gICAgICAgICAgICB2ZXJpZnlJc1N0dWIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgYWN0dWFsID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKCFjYWxsZWRJbk9yZGVyKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGpvaW4oYXJndW1lbnRzLCBcIiwgXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxscyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBjYWxscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxzWy0taV0uY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlKGNhbGxzLCBpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBqb2luKG9yZGVyQnlGaXJzdENhbGwoY2FsbHMpLCBcIiwgXCIpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscywgd2UnbGwganVzdCBmYWxsIGJhY2sgdG8gdGhlIGJsYW5rIHN0cmluZ1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGBleHBlY3RlZCAke2V4cGVjdGVkfSB0byBiZSBjYWxsZWQgaW4gb3JkZXIgYnV0IHdlcmUgY2FsbGVkIGFzICR7YWN0dWFsfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MoXCJjYWxsT3JkZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbENvdW50OiBmdW5jdGlvbiBhc3NlcnRDYWxsQ291bnQobWV0aG9kLCBjb3VudCkge1xuICAgICAgICAgICAgdmVyaWZ5SXNTdHViKG1ldGhvZCk7XG5cbiAgICAgICAgICAgIGxldCBtc2c7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvdW50ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbXNnID1cbiAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkICR7aW5zcGVjdChjb3VudCl9IHRvIGJlIGEgbnVtYmVyIGAgK1xuICAgICAgICAgICAgICAgICAgICBgYnV0IHdhcyBvZiB0eXBlICR7dHlwZW9mIGNvdW50fWA7XG4gICAgICAgICAgICAgICAgZmFpbEFzc2VydGlvbih0aGlzLCBtc2cpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QuY2FsbENvdW50ICE9PSBjb3VudCkge1xuICAgICAgICAgICAgICAgIG1zZyA9XG4gICAgICAgICAgICAgICAgICAgIGBleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgJHt0aW1lc0luV29yZHMoY291bnQpfSBgICtcbiAgICAgICAgICAgICAgICAgICAgYGJ1dCB3YXMgY2FsbGVkICVjJUNgO1xuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgbWV0aG9kLnByaW50Zihtc2cpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MoXCJjYWxsQ291bnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXhwb3NlOiBmdW5jdGlvbiBleHBvc2UodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YXJnZXQgaXMgbnVsbCBvciB1bmRlZmluZWRcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG8gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID1cbiAgICAgICAgICAgICAgICAodHlwZW9mIG8ucHJlZml4ID09PSBcInVuZGVmaW5lZFwiICYmIFwiYXNzZXJ0XCIpIHx8IG8ucHJlZml4O1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUZhaWwgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBvLmluY2x1ZGVGYWlsID09PSBcInVuZGVmaW5lZFwiIHx8IEJvb2xlYW4oby5pbmNsdWRlRmFpbCk7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGZvckVhY2goT2JqZWN0LmtleXMoaW5zdGFuY2UpLCBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09IFwiZXhwb3NlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgKGluY2x1ZGVGYWlsIHx8ICEvXihmYWlsKS8udGVzdChtZXRob2QpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbZXhwb3NlZE5hbWUocHJlZml4LCBtZXRob2QpXSA9IGluc3RhbmNlW21ldGhvZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWF0Y2g6IGZ1bmN0aW9uIG1hdGNoKGFjdHVhbCwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXIgPSBjcmVhdGVNYXRjaGVyKGV4cGVjdGF0aW9uKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVyLnRlc3QoYWN0dWFsKSkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5wYXNzKFwibWF0Y2hcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgXCJleHBlY3RlZCB2YWx1ZSB0byBtYXRjaFwiLFxuICAgICAgICAgICAgICAgICAgICBgICAgIGV4cGVjdGVkID0gJHtpbnNwZWN0KGV4cGVjdGF0aW9uKX1gLFxuICAgICAgICAgICAgICAgICAgICBgICAgIGFjdHVhbCA9ICR7aW5zcGVjdChhY3R1YWwpfWAsXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgam9pbihmb3JtYXR0ZWQsIFwiXFxuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdmVyaWZ5SXNTdHViKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuXG4gICAgICAgIGZvckVhY2goYXJncywgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgICAgaWYgKCFtZXRob2QpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuZmFpbChcImZha2UgaXMgbm90IGEgc3B5XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0aG9kLnByb3h5ICYmIG1ldGhvZC5wcm94eS5pc1Npbm9uUHJveHkpIHtcbiAgICAgICAgICAgICAgICB2ZXJpZnlJc1N0dWIobWV0aG9kLnByb3h5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZmFpbChgJHttZXRob2R9IGlzIG5vdCBhIGZ1bmN0aW9uYCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QuZ2V0Q2FsbCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKGAke21ldGhvZH0gaXMgbm90IHN0dWJiZWRgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeUlzVmFsaWRBc3NlcnRpb24oYXNzZXJ0aW9uTWV0aG9kLCBhc3NlcnRpb25BcmdzKSB7XG4gICAgICAgIHN3aXRjaCAoYXNzZXJ0aW9uTWV0aG9kKSB7XG4gICAgICAgICAgICBjYXNlIFwibm90Q2FsbGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FsbGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FsbGVkT25jZVwiOlxuICAgICAgICAgICAgY2FzZSBcImNhbGxlZFR3aWNlXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FsbGVkVGhyaWNlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFzc2VydGlvbkFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7YXNzZXJ0aW9uTWV0aG9kfSB0YWtlcyAxIGFyZ3VtZW50IGJ1dCB3YXMgY2FsbGVkIHdpdGggJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25BcmdzLmxlbmd0aCArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXJndW1lbnRzYCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFpbEFzc2VydGlvbihvYmplY3QsIG1zZykge1xuICAgICAgICBjb25zdCBvYmogPSBvYmplY3QgfHwgZ2xvYmFsT2JqZWN0O1xuICAgICAgICBjb25zdCBmYWlsTWV0aG9kID0gb2JqLmZhaWwgfHwgYXNzZXJ0LmZhaWw7XG4gICAgICAgIGZhaWxNZXRob2QuY2FsbChvYmosIG1zZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWlycm9yUHJvcEFzQXNzZXJ0aW9uKG5hbWUsIG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICBsZXQgbXNnID0gbWVzc2FnZTtcbiAgICAgICAgbGV0IG1ldGggPSBtZXRob2Q7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBtc2cgPSBtZXRob2Q7XG4gICAgICAgICAgICBtZXRoID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydFtuYW1lXSA9IGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgICAgICB2ZXJpZnlJc1N0dWIoZmFrZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHZlcmlmeUlzVmFsaWRBc3NlcnRpb24obmFtZSwgYXJncyk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkID0gIW1ldGgoZmFrZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZCA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmYWtlW21ldGhdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gIWZha2VbbWV0aF0uYXBwbHkoZmFrZSwgYXJncylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogIWZha2VbbWV0aF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAoZmFrZS5wcmludGYgfHwgZmFrZS5wcm94eS5wcmludGYpLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdChbbXNnXSwgYXJncyksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwb3NlZE5hbWUocHJlZml4LCBwcm9wKSB7XG4gICAgICAgIHJldHVybiAhcHJlZml4IHx8IC9eZmFpbC8udGVzdChwcm9wKVxuICAgICAgICAgICAgPyBwcm9wXG4gICAgICAgICAgICA6IHByZWZpeCArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdTbGljZShwcm9wLCAwLCAxKS50b1VwcGVyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1NsaWNlKHByb3AsIDEpO1xuICAgIH1cblxuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBoYXZlIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UgYnV0IHdhcyBuZXZlciBjYWxsZWRcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJub3RDYWxsZWRcIixcbiAgICAgICAgZnVuY3Rpb24gKHNweSkge1xuICAgICAgICAgICAgcmV0dXJuICFzcHkuY2FsbGVkO1xuICAgICAgICB9LFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIG5vdCBoYXZlIGJlZW4gY2FsbGVkIGJ1dCB3YXMgY2FsbGVkICVjJUNcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPbmNlXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIG9uY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFR3aWNlXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHR3aWNlIGJ1dCB3YXMgY2FsbGVkICVjJUNcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRUaHJpY2VcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgdGhyaWNlIGJ1dCB3YXMgY2FsbGVkICVjJUNcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPblwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB3aXRoICUxIGFzIHRoaXMgYnV0IHdhcyBjYWxsZWQgd2l0aCAldFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImFsd2F5c0NhbGxlZE9uXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoICUxIGFzIHRoaXMgYnV0IHdhcyBjYWxsZWQgd2l0aCAldFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwiY2FsbGVkV2l0aE5ld1wiLCBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB3aXRoIG5ld1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkV2l0aE5ld1wiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBuZXdcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRXaXRoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggbWF0Y2ggJURcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJhbHdheXNDYWxsZWRXaXRoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyAlRFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImFsd2F5c0NhbGxlZFdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlRFwiLFxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFdpdGhFeGFjdGx5XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggZXhhY3QgYXJndW1lbnRzICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkT25jZVdpdGhFeGFjdGx5XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIG9uY2UgYW5kIHdpdGggZXhhY3QgYXJndW1lbnRzICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkT25jZVdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCBvbmNlIGFuZCB3aXRoIG1hdGNoICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggZXhhY3QgYXJndW1lbnRzICVEXCIsXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwibmV2ZXJDYWxsZWRXaXRoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gbmV2ZXIgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICUqJUNcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJuZXZlckNhbGxlZFdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIG5ldmVyIGJlIGNhbGxlZCB3aXRoIG1hdGNoICUqJUNcIixcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcInRocmV3XCIsIFwiJW4gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24lQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJhbHdheXNUaHJld1wiLCBcIiVuIGRpZCBub3QgYWx3YXlzIHRocm93IGV4Y2VwdGlvbiVDXCIpO1xuXG4gICAgcmV0dXJuIGFzc2VydDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NlcnRPYmplY3QoKTtcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFzc2VydE9iamVjdCA9IGNyZWF0ZUFzc2VydE9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG5jb25zdCBuZXh0VGljayA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9uZXh0LXRpY2tcIik7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbmNvbnN0IGV4cG9ydEFzeW5jQmVoYXZpb3JzID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4cG9ydC1hc3luYy1iZWhhdmlvcnNcIik7XG5cbmNvbnN0IGNvbmNhdCA9IGFycmF5UHJvdG8uY29uY2F0O1xuY29uc3Qgam9pbiA9IGFycmF5UHJvdG8uam9pbjtcbmNvbnN0IHJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG5jb25zdCBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbmNvbnN0IHVzZUxlZnRNb3N0Q2FsbGJhY2sgPSAtMTtcbmNvbnN0IHVzZVJpZ2h0TW9zdENhbGxiYWNrID0gLTI7XG5cbmZ1bmN0aW9uIGdldENhbGxiYWNrKGJlaGF2aW9yLCBhcmdzKSB7XG4gICAgY29uc3QgY2FsbEFyZ0F0ID0gYmVoYXZpb3IuY2FsbEFyZ0F0O1xuXG4gICAgaWYgKGNhbGxBcmdBdCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2NhbGxBcmdBdF07XG4gICAgfVxuXG4gICAgbGV0IGFyZ3VtZW50TGlzdDtcblxuICAgIGlmIChjYWxsQXJnQXQgPT09IHVzZUxlZnRNb3N0Q2FsbGJhY2spIHtcbiAgICAgICAgYXJndW1lbnRMaXN0ID0gYXJncztcbiAgICB9XG5cbiAgICBpZiAoY2FsbEFyZ0F0ID09PSB1c2VSaWdodE1vc3RDYWxsYmFjaykge1xuICAgICAgICBhcmd1bWVudExpc3QgPSByZXZlcnNlKHNsaWNlKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWxsQXJnUHJvcCA9IGJlaGF2aW9yLmNhbGxBcmdQcm9wO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudExpc3QubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgIGlmICghY2FsbEFyZ1Byb3AgJiYgdHlwZW9mIGFyZ3VtZW50TGlzdFtpXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRMaXN0W2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2FsbEFyZ1Byb3AgJiZcbiAgICAgICAgICAgIGFyZ3VtZW50TGlzdFtpXSAmJlxuICAgICAgICAgICAgdHlwZW9mIGFyZ3VtZW50TGlzdFtpXVtjYWxsQXJnUHJvcF0gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudExpc3RbaV1bY2FsbEFyZ1Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldENhbGxiYWNrRXJyb3IoYmVoYXZpb3IsIGZ1bmMsIGFyZ3MpIHtcbiAgICBpZiAoYmVoYXZpb3IuY2FsbEFyZ0F0IDwgMCkge1xuICAgICAgICBsZXQgbXNnO1xuXG4gICAgICAgIGlmIChiZWhhdmlvci5jYWxsQXJnUHJvcCkge1xuICAgICAgICAgICAgbXNnID0gYCR7ZnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLnN0dWIsXG4gICAgICAgICAgICApfSBleHBlY3RlZCB0byB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLmNhbGxBcmdQcm9wLFxuICAgICAgICAgICAgKX0nLCBidXQgbm8gb2JqZWN0IHdpdGggc3VjaCBhIHByb3BlcnR5IHdhcyBwYXNzZWQuYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IGAke2Z1bmN0aW9uTmFtZShcbiAgICAgICAgICAgICAgICBiZWhhdmlvci5zdHViLFxuICAgICAgICAgICAgKX0gZXhwZWN0ZWQgdG8geWllbGQsIGJ1dCBubyBjYWxsYmFjayB3YXMgcGFzc2VkLmA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtc2cgKz0gYCBSZWNlaXZlZCBbJHtqb2luKGFyZ3MsIFwiLCBcIil9XWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXNnO1xuICAgIH1cblxuICAgIHJldHVybiBgYXJndW1lbnQgYXQgaW5kZXggJHtiZWhhdmlvci5jYWxsQXJnQXR9IGlzIG5vdCBhIGZ1bmN0aW9uOiAke2Z1bmN9YDtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQXJncyhuYW1lLCBiZWhhdmlvciwgYXJncykge1xuICAgIC8vIG1hcCBmdW5jdGlvbiBuYW1lIHRvIGludGVybmFsIHByb3BlcnR5XG4gICAgLy8gICBjYWxsc0FyZyA9PiBjYWxsQXJnQXRcbiAgICBjb25zdCBwcm9wZXJ0eSA9IG5hbWUucmVwbGFjZSgvc0FyZy8sIFwiQXJnQXRcIik7XG4gICAgY29uc3QgaW5kZXggPSBiZWhhdmlvcltwcm9wZXJ0eV07XG5cbiAgICBpZiAoaW5kZXggPj0gYXJncy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGAke25hbWV9IGZhaWxlZDogJHtpbmRleCArIDF9IGFyZ3VtZW50cyByZXF1aXJlZCBidXQgb25seSAke1xuICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoXG4gICAgICAgICAgICB9IHByZXNlbnRgLFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGJlaGF2aW9yLCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBiZWhhdmlvci5jYWxsQXJnQXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZW5zdXJlQXJncyhcImNhbGxzQXJnXCIsIGJlaGF2aW9yLCBhcmdzKTtcbiAgICAgICAgY29uc3QgZnVuYyA9IGdldENhbGxiYWNrKGJlaGF2aW9yLCBhcmdzKTtcblxuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihnZXRDYWxsYmFja0Vycm9yKGJlaGF2aW9yLCBmdW5jLCBhcmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVoYXZpb3IuY2FsbGJhY2tBc3luYykge1xuICAgICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yLmNhbGxiYWNrQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoXG4gICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLmNhbGxiYWNrQXJndW1lbnRzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IHByb3RvID0ge1xuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKHN0dWIpIHtcbiAgICAgICAgY29uc3QgYmVoYXZpb3IgPSBleHRlbmQoe30sIHByb3RvKTtcbiAgICAgICAgZGVsZXRlIGJlaGF2aW9yLmNyZWF0ZTtcbiAgICAgICAgZGVsZXRlIGJlaGF2aW9yLmFkZEJlaGF2aW9yO1xuICAgICAgICBkZWxldGUgYmVoYXZpb3IuY3JlYXRlQmVoYXZpb3I7XG4gICAgICAgIGJlaGF2aW9yLnN0dWIgPSBzdHViO1xuXG4gICAgICAgIGlmIChzdHViLmRlZmF1bHRCZWhhdmlvciAmJiBzdHViLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeSkge1xuICAgICAgICAgICAgYmVoYXZpb3IucHJvbWlzZUxpYnJhcnkgPSBzdHViLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiZWhhdmlvcjtcbiAgICB9LFxuXG4gICAgaXNQcmVzZW50OiBmdW5jdGlvbiBpc1ByZXNlbnQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jYWxsQXJnQXQgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uIHx8XG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbkNyZWF0b3IgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJldHVybkFyZ0F0ID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0aGlzLnJldHVyblRoaXMgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlc29sdmVBcmdBdCA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlVGhpcyB8fFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudGhyb3dBcmdBdCA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdGhpcy5mYWtlRm4gfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVEZWZpbmVkXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qZXNsaW50IGNvbXBsZXhpdHk6IFtcImVycm9yXCIsIDIwXSovXG4gICAgaW52b2tlOiBmdW5jdGlvbiBpbnZva2UoY29udGV4dCwgYXJncykge1xuICAgICAgICAvKlxuICAgICAgICAgKiBjYWxsQ2FsbGJhY2sgKGNvbmRpdGlvbmFsbHkpIGNhbGxzIGVuc3VyZUFyZ3NcbiAgICAgICAgICpcbiAgICAgICAgICogTm90ZTogY2FsbENhbGxiYWNrIGludGVudGlvbmFsbHkgaGFwcGVucyBiZWZvcmVcbiAgICAgICAgICogZXZlcnl0aGluZyBlbHNlIGFuZCBjYW5ub3QgYmUgbW92ZWQgbG93ZXJcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gY2FsbENhbGxiYWNrKHRoaXMsIGFyZ3MpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5leGNlcHRpb247XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5leGNlcHRpb25DcmVhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbiA9IHRoaXMuZXhjZXB0aW9uQ3JlYXRvcigpO1xuICAgICAgICAgICAgdGhpcy5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5leGNlcHRpb247XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmV0dXJuQXJnQXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVuc3VyZUFyZ3MoXCJyZXR1cm5zQXJnXCIsIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbdGhpcy5yZXR1cm5BcmdBdF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXR1cm5UaGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy50aHJvd0FyZ0F0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbnN1cmVBcmdzKFwidGhyb3dzQXJnXCIsIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgdGhyb3cgYXJnc1t0aGlzLnRocm93QXJnQXRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmFrZUZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWtlRm4uYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmVzb2x2ZUFyZ0F0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbnN1cmVBcmdzKFwicmVzb2x2ZXNBcmdcIiwgdGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucHJvbWlzZUxpYnJhcnkgfHwgUHJvbWlzZSkucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBhcmdzW3RoaXMucmVzb2x2ZUFyZ0F0XSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlVGhpcykge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnByb21pc2VMaWJyYXJ5IHx8IFByb21pc2UpLnJlc29sdmUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucHJvbWlzZUxpYnJhcnkgfHwgUHJvbWlzZSkucmVzb2x2ZSh0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnByb21pc2VMaWJyYXJ5IHx8IFByb21pc2UpLnJlamVjdCh0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxzVGhyb3VnaCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZE1ldGhvZCA9IHRoaXMuZWZmZWN0aXZlV3JhcHBlZE1ldGhvZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlZE1ldGhvZC5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxzVGhyb3VnaFdpdGhOZXcpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgbWV0aG9kIChhc3N1bWVkIHRvIGJlIGEgY29uc3RydWN0b3IgaW4gdGhpcyBjYXNlKVxuICAgICAgICAgICAgY29uc3QgV3JhcHBlZENsYXNzID0gdGhpcy5lZmZlY3RpdmVXcmFwcGVkTWV0aG9kKCk7XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBhcmd1bWVudHMgb2JqZWN0IGludG8gYSBub3JtYWwgYXJyYXlcbiAgICAgICAgICAgIGNvbnN0IGFyZ3NBcnJheSA9IHNsaWNlKGFyZ3MpO1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgICAgIGNvbnN0IEYgPSBXcmFwcGVkQ2xhc3MuYmluZC5hcHBseShcbiAgICAgICAgICAgICAgICBXcmFwcGVkQ2xhc3MsXG4gICAgICAgICAgICAgICAgY29uY2F0KFtudWxsXSwgYXJnc0FycmF5KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5WYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2FsbEFyZ0F0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5WYWx1ZTtcbiAgICB9LFxuXG4gICAgZWZmZWN0aXZlV3JhcHBlZE1ldGhvZDogZnVuY3Rpb24gZWZmZWN0aXZlV3JhcHBlZE1ldGhvZCgpIHtcbiAgICAgICAgZm9yIChsZXQgc3R1YmIgPSB0aGlzLnN0dWI7IHN0dWJiOyBzdHViYiA9IHN0dWJiLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHN0dWJiLndyYXBwZWRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R1YmIud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB3cmFwcGVkIG1ldGhvZFwiKTtcbiAgICB9LFxuXG4gICAgb25DYWxsOiBmdW5jdGlvbiBvbkNhbGwoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vbkNhbGwoaW5kZXgpO1xuICAgIH0sXG5cbiAgICBvbkZpcnN0Q2FsbDogZnVuY3Rpb24gb25GaXJzdENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0dWIub25GaXJzdENhbGwoKTtcbiAgICB9LFxuXG4gICAgb25TZWNvbmRDYWxsOiBmdW5jdGlvbiBvblNlY29uZENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0dWIub25TZWNvbmRDYWxsKCk7XG4gICAgfSxcblxuICAgIG9uVGhpcmRDYWxsOiBmdW5jdGlvbiBvblRoaXJkQ2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vblRoaXJkQ2FsbCgpO1xuICAgIH0sXG5cbiAgICB3aXRoQXJnczogZnVuY3Rpb24gd2l0aEFyZ3MoLyogYXJndW1lbnRzICovKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdEZWZpbmluZyBhIHN0dWIgYnkgaW52b2tpbmcgXCJzdHViLm9uQ2FsbCguLi4pLndpdGhBcmdzKC4uLilcIiAnICtcbiAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZC4gVXNlIFwic3R1Yi53aXRoQXJncyguLi4pLm9uQ2FsbCguLi4pXCIgJyArXG4gICAgICAgICAgICAgICAgXCJ0byBkZWZpbmUgc2VxdWVudGlhbCBiZWhhdmlvciBmb3IgY2FsbHMgd2l0aCBjZXJ0YWluIGFyZ3VtZW50cy5cIixcbiAgICAgICAgKTtcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmVoYXZpb3IoYmVoYXZpb3JNZXRob2QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvciA9IHRoaXMuZGVmYXVsdEJlaGF2aW9yIHx8IHByb3RvLmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0QmVoYXZpb3JbYmVoYXZpb3JNZXRob2RdLmFwcGx5KFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0QmVoYXZpb3IsXG4gICAgICAgICAgICBhcmd1bWVudHMsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFkZEJlaGF2aW9yKHN0dWIsIG5hbWUsIGZuKSB7XG4gICAgcHJvdG9bbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZuLmFwcGx5KHRoaXMsIGNvbmNhdChbdGhpc10sIHNsaWNlKGFyZ3VtZW50cykpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1YiB8fCB0aGlzO1xuICAgIH07XG5cbiAgICBzdHViW25hbWVdID0gY3JlYXRlQmVoYXZpb3IobmFtZSk7XG59XG5cbnByb3RvLmFkZEJlaGF2aW9yID0gYWRkQmVoYXZpb3I7XG5wcm90by5jcmVhdGVCZWhhdmlvciA9IGNyZWF0ZUJlaGF2aW9yO1xuXG5jb25zdCBhc3luY0JlaGF2aW9ycyA9IGV4cG9ydEFzeW5jQmVoYXZpb3JzKHByb3RvKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHRlbmQubm9uRW51bSh7fSwgcHJvdG8sIGFzeW5jQmVoYXZpb3JzKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB3YWxrID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dhbGtcIik7XG5jb25zdCBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3JcIik7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9XG4gICAgcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaGFzT3duUHJvcGVydHk7XG5jb25zdCBwdXNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5wdXNoO1xuXG5mdW5jdGlvbiBjb2xsZWN0TWV0aG9kKG1ldGhvZHMsIG9iamVjdCwgcHJvcCwgcHJvcE93bmVyKSB7XG4gICAgaWYgKFxuICAgICAgICB0eXBlb2YgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHByb3BPd25lciwgcHJvcCkudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3ApXG4gICAgKSB7XG4gICAgICAgIHB1c2gobWV0aG9kcywgb2JqZWN0W3Byb3BdKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG93biBtZXRob2RzIG9uIHRoZSBwYXNzZWQgb2JqZWN0XG5mdW5jdGlvbiBjb2xsZWN0T3duTWV0aG9kcyhvYmplY3QpIHtcbiAgICBjb25zdCBtZXRob2RzID0gW107XG5cbiAgICB3YWxrKG9iamVjdCwgY29sbGVjdE1ldGhvZC5iaW5kKG51bGwsIG1ldGhvZHMsIG9iamVjdCkpO1xuXG4gICAgcmV0dXJuIG1ldGhvZHM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29sbGVjdE93bk1ldGhvZHM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBDb2xvcml6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKFwic3VwcG9ydHMtY29sb3JcIikpIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0NvbG9yID0gc3VwcG9ydHNDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgYmUgcmVuYW1lZCB0byB0cnVlICNwcml2YXRlRmllbGRcbiAgICAgKiB3aGVuIHdlIGNhbiBlbnN1cmUgRVMyMDIyIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29sb3JpemUoc3RyLCBjb2xvcikge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c0NvbG9yLnN0ZG91dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxceDFiWyR7Y29sb3J9bSR7c3RyfVxceDFiWzBtYDtcbiAgICB9XG5cbiAgICByZWQoc3RyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yaXplKHN0ciwgMzEpO1xuICAgIH1cblxuICAgIGdyZWVuKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcml6ZShzdHIsIDMyKTtcbiAgICB9XG5cbiAgICBjeWFuKHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcml6ZShzdHIsIDk2KTtcbiAgICB9XG5cbiAgICB3aGl0ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JpemUoc3RyLCAzOSk7XG4gICAgfVxuXG4gICAgYm9sZChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JpemUoc3RyLCAxKTtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgU2FuZGJveCA9IHJlcXVpcmUoXCIuL3NhbmRib3hcIik7XG5cbmNvbnN0IGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuXG5mdW5jdGlvbiBwcmVwYXJlU2FuZGJveEZyb21Db25maWcoY29uZmlnKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IG5ldyBTYW5kYm94KHsgYXNzZXJ0T3B0aW9uczogY29uZmlnLmFzc2VydE9wdGlvbnMgfSk7XG5cbiAgICBpZiAoY29uZmlnLnVzZUZha2VTZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudXNlRmFrZVNlcnZlciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgc2FuZGJveC5zZXJ2ZXJQcm90b3R5cGUgPSBjb25maWcudXNlRmFrZVNlcnZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhbmRib3gudXNlRmFrZVNlcnZlcigpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcudXNlRmFrZVRpbWVycykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51c2VGYWtlVGltZXJzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBzYW5kYm94LnVzZUZha2VUaW1lcnMoY29uZmlnLnVzZUZha2VUaW1lcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2FuZGJveC51c2VGYWtlVGltZXJzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2FuZGJveDtcbn1cblxuZnVuY3Rpb24gZXhwb3NlVmFsdWUoc2FuZGJveCwgY29uZmlnLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5pbmplY3RJbnRvICYmICEoa2V5IGluIGNvbmZpZy5pbmplY3RJbnRvKSkge1xuICAgICAgICBjb25maWcuaW5qZWN0SW50b1trZXldID0gdmFsdWU7XG4gICAgICAgIHB1c2goc2FuZGJveC5pbmplY3RlZEtleXMsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHVzaChzYW5kYm94LmFyZ3MsIHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBjdXN0b21pemUgYSBzYW5kYm94XG4gKlxuICogVGhlIHNhbmRib3gncyBtZXRob2RzIGNhbiBiZSBpbmplY3RlZCBpbnRvIGFub3RoZXIgb2JqZWN0IGZvclxuICogY29udmVuaWVuY2UuIFRoZSBgaW5qZWN0SW50b2AgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIG5hbWUgYW5cbiAqIG9iamVjdCB0byBhZGQgcHJvcGVydGllcyB0by5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTYW5kYm94Q29uZmlnXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBBUEkgdG8gZXhwb3NlIG9uIHRoZSBzYW5kYm94LiBFeGFtcGxlczogWydzcHknLCAnZmFrZScsICdyZXN0b3JlJ11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBpbmplY3RJbnRvIGFuIG9iamVjdCBpbiB3aGljaCB0byBpbmplY3QgcHJvcGVydGllcyBmcm9tIHRoZSBzYW5kYm94IChhIGZhY2FkZSkuIFRoaXMgaXMgbW9zdGx5IGFuIGludGVncmF0aW9uIGZlYXR1cmUgKHNpbm9uLXRlc3QgYmVpbmcgb25lKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlRmFrZVRpbWVycyAgd2hldGhlciB0aW1lcnMgYXJlIGZha2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnxvYmplY3R9IHVzZUZha2VTZXJ2ZXIgIHdoZXRoZXIgWEhSJ3MgYXJlIGZha2VkIGFuZCB0aGUgc2VydmVyIGZlYXR1cmUgZW5hYmxlZCBieSBkZWZhdWx0LiBJdCBjb3VsZCBhbHNvIGJlIGEgZGlmZmVyZW50IGRlZmF1bHQgZmFrZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlXG4gKiBAcHJvcGVydHkge29iamVjdH0gW2Fzc2VydE9wdGlvbnNdIHNlZSBDcmVhdGVBc3NlcnRPcHRpb25zIGluIC4vYXNzZXJ0XG4gKlxuICogVGhpcyB0eXBlIGRlZiBpcyByZWFsbHkgc3VmZmVyaW5nIGZyb20gSlNEb2Mgbm90IGhhdmluZyBzdGFuZGFyZGl6ZWRcbiAqIGhvdyB0byByZWZlcmVuY2UgdHlwZXMgZGVmaW5lZCBpbiBvdGhlciBtb2R1bGVzIDooXG4gKi9cblxuLyoqXG4gKiBBIGNvbmZpZ3VyZWQgc2lub24gc2FuZGJveCAocHJpdmF0ZSB0eXBlKVxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbmZpZ3VyZWRTaW5vblNhbmRib3hUeXBlXG4gKiBAcHJpdmF0ZVxuICogQGF1Z21lbnRzIFNhbmRib3hcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGluamVjdGVkS2V5cyB0aGUga2V5cyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZCAoZnJvbSBjb25maWcuaW5qZWN0SW50bylcbiAqIEBwcm9wZXJ0eSB7KltdfSBhcmdzIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBzYW5kYm94XG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBzYW5kYm94XG4gKlxuICogQXMgb2YgU2lub24gNSB0aGUgYHNpbm9uYCBpbnN0YW5jZSBpdHNlbGYgaXMgYSBTYW5kYm94LCBzbyB5b3VcbiAqIGhhcmRseSBldmVyIG5lZWQgdG8gY3JlYXRlIGFkZGl0aW9uYWwgaW5zdGFuY2VzIGZvciB0aGUgc2FrZSBvZiB0ZXN0aW5nXG4gKlxuICogQHBhcmFtIGNvbmZpZyB7U2FuZGJveENvbmZpZ31cbiAqIEByZXR1cm5zIHtTYW5kYm94fVxuICovXG5mdW5jdGlvbiBjcmVhdGVTYW5kYm94KGNvbmZpZykge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FuZGJveCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyZWRTYW5kYm94ID0gcHJlcGFyZVNhbmRib3hGcm9tQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uZmlndXJlZFNhbmRib3guYXJncyA9IGNvbmZpZ3VyZWRTYW5kYm94LmFyZ3MgfHwgW107XG4gICAgY29uZmlndXJlZFNhbmRib3guaW5qZWN0ZWRLZXlzID0gW107XG4gICAgY29uZmlndXJlZFNhbmRib3guaW5qZWN0SW50byA9IGNvbmZpZy5pbmplY3RJbnRvO1xuICAgIGNvbnN0IGV4cG9zZWQgPSBjb25maWd1cmVkU2FuZGJveC5pbmplY3Qoe30pO1xuXG4gICAgaWYgKGNvbmZpZy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvckVhY2goY29uZmlnLnByb3BlcnRpZXMsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgZXhwb3NlZFtwcm9wXSB8fCAocHJvcCA9PT0gXCJzYW5kYm94XCIgJiYgY29uZmlndXJlZFNhbmRib3gpO1xuICAgICAgICAgICAgZXhwb3NlVmFsdWUoY29uZmlndXJlZFNhbmRib3gsIGNvbmZpZywgcHJvcCwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHBvc2VWYWx1ZShjb25maWd1cmVkU2FuZGJveCwgY29uZmlnLCBcInNhbmRib3hcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRTYW5kYm94O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNhbmRib3g7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3Qgc3R1YiA9IHJlcXVpcmUoXCIuL3N0dWJcIik7XG5jb25zdCBzaW5vblR5cGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvc2lub24tdHlwZVwiKTtcbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmZvckVhY2g7XG5cbmZ1bmN0aW9uIGlzU3R1Yih2YWx1ZSkge1xuICAgIHJldHVybiBzaW5vblR5cGUuZ2V0KHZhbHVlKSA9PT0gXCJzdHViXCI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlU3R1Ykluc3RhbmNlKGNvbnN0cnVjdG9yLCBvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R1Ykluc3RhbmNlID0gT2JqZWN0LmNyZWF0ZShjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuICAgIHNpbm9uVHlwZS5zZXQoc3R1Ykluc3RhbmNlLCBcInN0dWItaW5zdGFuY2VcIik7XG5cbiAgICBjb25zdCBzdHViYmVkT2JqZWN0ID0gc3R1YihzdHViSW5zdGFuY2UpO1xuXG4gICAgZm9yRWFjaChPYmplY3Qua2V5cyhvdmVycmlkZXMgfHwge30pLCBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gc3R1YmJlZE9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvdmVycmlkZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmIChpc1N0dWIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgc3R1YmJlZE9iamVjdFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0dWJiZWRPYmplY3RbcHJvcGVydHlOYW1lXS5yZXR1cm5zKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ2Fubm90IHN0dWIgJHtwcm9wZXJ0eU5hbWV9LiBQcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCFgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdHViYmVkT2JqZWN0O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGlzUHJvcGVydHlDb25maWd1cmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcHJvcGVydHktY29uZmlndXJhYmxlXCIpO1xuY29uc3QgZXhwb3J0QXN5bmNCZWhhdmlvcnMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXhwb3J0LWFzeW5jLWJlaGF2aW9yc1wiKTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5cbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuY29uc3QgdXNlTGVmdE1vc3RDYWxsYmFjayA9IC0xO1xuY29uc3QgdXNlUmlnaHRNb3N0Q2FsbGJhY2sgPSAtMjtcblxuZnVuY3Rpb24gdGhyb3dzRXhjZXB0aW9uKGZha2UsIGVycm9yLCBtZXNzYWdlKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IGVycm9yO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBtZXNzYWdlIHx8IGBTaW5vbi1wcm92aWRlZCAke2Vycm9yfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RXhjZXB0aW9uLm5hbWUgPSBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBuZXdFeGNlcHRpb247XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkVycm9yXCIpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gZXJyb3I7XG4gICAgfVxufVxuXG5jb25zdCBkZWZhdWx0QmVoYXZpb3JzID0ge1xuICAgIGNhbGxzRmFrZTogZnVuY3Rpb24gY2FsbHNGYWtlKGZha2UsIGZuKSB7XG4gICAgICAgIGZha2UuZmFrZUZuID0gZm47XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGNhbGxzQXJnOiBmdW5jdGlvbiBjYWxsc0FyZyhmYWtlLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gaW5kZXg7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBbXTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBjYWxsc0FyZ09uOiBmdW5jdGlvbiBjYWxsc0FyZ09uKGZha2UsIGluZGV4LCBjb250ZXh0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSBpbmRleDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IFtdO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBjYWxsc0FyZ1dpdGg6IGZ1bmN0aW9uIGNhbGxzQXJnV2l0aChmYWtlLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gaW5kZXg7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDIpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGNhbGxzQXJnT25XaXRoOiBmdW5jdGlvbiBjYWxsc0FyZ1dpdGgoZmFrZSwgaW5kZXgsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IGluZGV4O1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAzKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgdXNpbmdQcm9taXNlOiBmdW5jdGlvbiB1c2luZ1Byb21pc2UoZmFrZSwgcHJvbWlzZUxpYnJhcnkpIHtcbiAgICAgICAgZmFrZS5wcm9taXNlTGlicmFyeSA9IHByb21pc2VMaWJyYXJ5O1xuICAgIH0sXG5cbiAgICB5aWVsZHM6IGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gdXNlTGVmdE1vc3RDYWxsYmFjaztcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHlpZWxkc1JpZ2h0OiBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IHVzZVJpZ2h0TW9zdENhbGxiYWNrO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaCA9IGZhbHNlO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgeWllbGRzT246IGZ1bmN0aW9uIChmYWtlLCBjb250ZXh0KSB7XG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gdXNlTGVmdE1vc3RDYWxsYmFjaztcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMik7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB5aWVsZHNUbzogZnVuY3Rpb24gKGZha2UsIHByb3ApIHtcbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSB1c2VMZWZ0TW9zdENhbGxiYWNrO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSBwcm9wO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHlpZWxkc1RvT246IGZ1bmN0aW9uIChmYWtlLCBwcm9wLCBjb250ZXh0KSB7XG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gdXNlTGVmdE1vc3RDYWxsYmFjaztcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMyk7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHByb3A7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgdGhyb3dzOiB0aHJvd3NFeGNlcHRpb24sXG4gICAgdGhyb3dzRXhjZXB0aW9uOiB0aHJvd3NFeGNlcHRpb24sXG5cbiAgICByZXR1cm5zOiBmdW5jdGlvbiByZXR1cm5zKGZha2UsIHZhbHVlKSB7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHJldHVybnNBcmc6IGZ1bmN0aW9uIHJldHVybnNBcmcoZmFrZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcblxuICAgICAgICBmYWtlLnJldHVybkFyZ0F0ID0gaW5kZXg7XG4gICAgfSxcblxuICAgIHRocm93c0FyZzogZnVuY3Rpb24gdGhyb3dzQXJnKGZha2UsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG5cbiAgICAgICAgZmFrZS50aHJvd0FyZ0F0ID0gaW5kZXg7XG4gICAgfSxcblxuICAgIHJldHVybnNUaGlzOiBmdW5jdGlvbiByZXR1cm5zVGhpcyhmYWtlKSB7XG4gICAgICAgIGZha2UucmV0dXJuVGhpcyA9IHRydWU7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHJlc29sdmVzOiBmdW5jdGlvbiByZXNvbHZlcyhmYWtlLCB2YWx1ZSkge1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlID0gdmFsdWU7XG4gICAgICAgIGZha2UucmVzb2x2ZSA9IHRydWU7XG4gICAgICAgIGZha2UucmVzb2x2ZVRoaXMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZWplY3QgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZURlZmluZWQgPSB0cnVlO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgcmVzb2x2ZXNBcmc6IGZ1bmN0aW9uIHJlc29sdmVzQXJnKGZha2UsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZha2UucmVzb2x2ZUFyZ0F0ID0gaW5kZXg7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UucmVzb2x2ZSA9IHRydWU7XG4gICAgICAgIGZha2UucmVzb2x2ZVRoaXMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZWplY3QgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZURlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHJlamVjdHM6IGZ1bmN0aW9uIHJlamVjdHMoZmFrZSwgZXJyb3IsIG1lc3NhZ2UpIHtcbiAgICAgICAgbGV0IHJlYXNvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVhc29uID0gbmV3IEVycm9yKG1lc3NhZ2UgfHwgXCJcIik7XG4gICAgICAgICAgICByZWFzb24ubmFtZSA9IGVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgcmVhc29uID0gbmV3IEVycm9yKFwiRXJyb3JcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWFzb24gPSBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmYWtlLnJldHVyblZhbHVlID0gcmVhc29uO1xuICAgICAgICBmYWtlLnJlc29sdmUgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXNvbHZlVGhpcyA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlamVjdCA9IHRydWU7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgfSxcblxuICAgIHJlc29sdmVzVGhpczogZnVuY3Rpb24gcmVzb2x2ZXNUaGlzKGZha2UpIHtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5yZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVzb2x2ZVRoaXMgPSB0cnVlO1xuICAgICAgICBmYWtlLnJlamVjdCA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlRGVmaW5lZCA9IGZhbHNlO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FsbFRocm91Z2g6IGZ1bmN0aW9uIGNhbGxUaHJvdWdoKGZha2UpIHtcbiAgICAgICAgZmFrZS5jYWxsc1Rocm91Z2ggPSB0cnVlO1xuICAgIH0sXG5cbiAgICBjYWxsVGhyb3VnaFdpdGhOZXc6IGZ1bmN0aW9uIGNhbGxUaHJvdWdoV2l0aE5ldyhmYWtlKSB7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoV2l0aE5ldyA9IHRydWU7XG4gICAgfSxcblxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGZha2UsIGdldHRlckZ1bmN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdHViID0gZmFrZS5zdHViIHx8IGZha2U7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3RTdHViLnJvb3RPYmosIHJvb3RTdHViLnByb3BOYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdldHRlckZ1bmN0aW9uLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBpc1Byb3BlcnR5Q29uZmlndXJhYmxlKFxuICAgICAgICAgICAgICAgIHJvb3RTdHViLnJvb3RPYmosXG4gICAgICAgICAgICAgICAgcm9vdFN0dWIucHJvcE5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoZmFrZSwgc2V0dGVyRnVuY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgcm9vdFN0dWIgPSBmYWtlLnN0dWIgfHwgZmFrZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICByb290U3R1Yi5yb290T2JqLFxuICAgICAgICAgICAgcm9vdFN0dWIucHJvcE5hbWUsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYWNjZXNzb3ItcGFpcnNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZXQ6IHNldHRlckZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShcbiAgICAgICAgICAgICAgICAgICAgcm9vdFN0dWIucm9vdE9iaixcbiAgICAgICAgICAgICAgICAgICAgcm9vdFN0dWIucHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgfSxcblxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShmYWtlLCBuZXdWYWwpIHtcbiAgICAgICAgY29uc3Qgcm9vdFN0dWIgPSBmYWtlLnN0dWIgfHwgZmFrZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocm9vdFN0dWIucm9vdE9iaiwgcm9vdFN0dWIucHJvcE5hbWUsIHtcbiAgICAgICAgICAgIHZhbHVlOiBuZXdWYWwsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6XG4gICAgICAgICAgICAgICAgcm9vdFN0dWIuc2hhZG93c1Byb3BPblByb3RvdHlwZSB8fFxuICAgICAgICAgICAgICAgIGlzUHJvcGVydHlDb25maWd1cmFibGUocm9vdFN0dWIucm9vdE9iaiwgcm9vdFN0dWIucHJvcE5hbWUpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxufTtcblxuY29uc3QgYXN5bmNCZWhhdmlvcnMgPSBleHBvcnRBc3luY0JlaGF2aW9ycyhkZWZhdWx0QmVoYXZpb3JzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHRlbmQoe30sIGRlZmF1bHRCZWhhdmlvcnMsIGFzeW5jQmVoYXZpb3JzKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGNyZWF0ZVByb3h5ID0gcmVxdWlyZShcIi4vcHJveHlcIik7XG5jb25zdCBuZXh0VGljayA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9uZXh0LXRpY2tcIik7XG5cbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbmxldCBwcm9taXNlTGliID0gUHJvbWlzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWtlO1xuXG4vKipcbiAqIFJldHVybnMgYSBgZmFrZWAgdGhhdCByZWNvcmRzIGFsbCBjYWxscywgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzLlxuICpcbiAqIFdoZW4gYW4gYGZgIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gY3JlYXRlIGFuIGVtcHR5IGZha2VcbiAqIHZhciBmMSA9IHNpbm9uLmZha2UoKTtcbiAqXG4gKiBmMSgpO1xuICpcbiAqIGYxLmNhbGxlZE9uY2UoKVxuICogLy8gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZykge1xuICogICBjb25zb2xlLmxvZyhgSGVsbG8gJHtncmVldGluZ31gKTtcbiAqIH1cbiAqXG4gKiAvLyBjcmVhdGUgYSBmYWtlIHdpdGggaW1wbGVtZW50YXRpb25cbiAqIHZhciBmMiA9IHNpbm9uLmZha2UoZ3JlZXQpO1xuICpcbiAqIC8vIEhlbGxvIHdvcmxkXG4gKiBmMihcIndvcmxkXCIpO1xuICpcbiAqIGYyLmNhbGxlZFdpdGgoXCJ3b3JsZFwiKTtcbiAqIC8vIHRydWVcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHVuZGVmaW5lZH0gZlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICogQG5hbWVzcGFjZVxuICovXG5mdW5jdGlvbiBmYWtlKGYpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgZiBhcmd1bWVudCB0byBiZSBhIEZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYGZha2VgIHRoYXQgcmV0dXJucyB0aGUgcHJvdmlkZWQgYHZhbHVlYCwgYXMgd2VsbCBhcyByZWNvcmRpbmcgYWxsXG4gKiBjYWxscywgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZjEgPSBzaW5vbi5mYWtlLnJldHVybnMoNDIpO1xuICpcbiAqIGYxKCk7XG4gKiAvLyA0MlxuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UucmV0dXJucyA9IGZ1bmN0aW9uIHJldHVybnModmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgZmFrZWAgdGhhdCB0aHJvd3MgYW4gRXJyb3IuXG4gKiBJZiB0aGUgYHZhbHVlYCBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIEVycm9yIGluIGl0cyBwcm90b3R5cGUgY2hhaW4sIGl0IHdpbGxcbiAqIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGVycm9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZjEgPSBzaW5vbi5mYWtlLnRocm93cyhcImhlbGxvXCIpO1xuICpcbiAqIGYxKCk7XG4gKiAvLyBVbmNhdWdodCBFcnJvcjogaGVsbG9cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGYyID0gc2lub24uZmFrZS50aHJvd3MobmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXJndW1lbnRcIikpO1xuICpcbiAqIGYyKCk7XG4gKiAvLyBVbmNhdWdodCBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnRcbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHBhcmFtIHsqfEVycm9yfSB2YWx1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnRocm93cyA9IGZ1bmN0aW9uIHRocm93cyh2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgdGhyb3cgZ2V0RXJyb3IodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBmYWtlYCB0aGF0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBhc3NlZCBgdmFsdWVgXG4gKiBhcmd1bWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGYxID0gc2lub24uZmFrZS5yZXNvbHZlcyhcImFwcGxlIHBpZVwiKTtcbiAqXG4gKiBhd2FpdCBmMSgpO1xuICogLy8gXCJhcHBsZSBwaWVcIlxuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UucmVzb2x2ZXMgPSBmdW5jdGlvbiByZXNvbHZlcyh2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VMaWIucmVzb2x2ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGZha2VgIHRoYXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZWplY3RzIHRvIHRoZSBwYXNzZWQgYHZhbHVlYFxuICogYXJndW1lbnQuIFdoZW4gYHZhbHVlYCBkb2VzIG5vdCBoYXZlIEVycm9yIGluIGl0cyBwcm90b3R5cGUgY2hhaW4sIGl0IHdpbGwgYmVcbiAqIHdyYXBwZWQgaW4gYW4gRXJyb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmMSA9IHNpbm9uLmZha2UucmVqZWN0cyhcIjooXCIpO1xuICpcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IGYxKCk7XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBjb25zb2xlLmxvZyhlcnJvcik7XG4gKiAgIC8vIFwiOihcIlxuICogfVxuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UucmVqZWN0cyA9IGZ1bmN0aW9uIHJlamVjdHModmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlTGliLnJlamVjdChnZXRFcnJvcih2YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbi8qKlxuICogQ2F1c2VzIGBmYWtlYCB0byB1c2UgYSBjdXN0b20gUHJvbWlzZSBpbXBsZW1lbnRhdGlvbiwgaW5zdGVhZCBvZiB0aGUgbmF0aXZlXG4gKiBQcm9taXNlIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBibHVlYmlyZCA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTtcbiAqIHNpbm9uLmZha2UudXNpbmdQcm9taXNlKGJsdWViaXJkKTtcbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHBhcmFtIHsqfSBwcm9taXNlTGlicmFyeVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnVzaW5nUHJvbWlzZSA9IGZ1bmN0aW9uIHVzaW5nUHJvbWlzZShwcm9taXNlTGlicmFyeSkge1xuICAgIHByb21pc2VMaWIgPSBwcm9taXNlTGlicmFyeTtcbiAgICByZXR1cm4gZmFrZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGBmYWtlYCB0aGF0IGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBkZWZpbmVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gKiAgIGNvbnNvbGUubG9nKGFyZ3VtZW50cy5qb2luKFwiKlwiKSk7XG4gKiB9XG4gKlxuICogY29uc3QgZjEgPSBzaW5vbi5mYWtlLnlpZWxkcyhcImFwcGxlXCIsIFwicGllXCIpO1xuICpcbiAqIGYxKGNhbGxiYWNrKTtcbiAqIC8vIFwiYXBwbGUqcGllXCJcbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnlpZWxkcyA9IGZ1bmN0aW9uIHlpZWxkcygpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBzbGljZShhcmd1bWVudHMpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGxhc3QgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYGZha2VgIHRoYXQgY2FsbHMgdGhlIGNhbGxiYWNrICoqYXN5bmNocm9ub3VzbHkqKiB3aXRoIHRoZVxuICogZGVmaW5lZCBhcmd1bWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICogICBjb25zb2xlLmxvZyhhcmd1bWVudHMuam9pbihcIipcIikpO1xuICogfVxuICpcbiAqIGNvbnN0IGYxID0gc2lub24uZmFrZS55aWVsZHMoXCJhcHBsZVwiLCBcInBpZVwiKTtcbiAqXG4gKiBmMShjYWxsYmFjayk7XG4gKlxuICogc2V0VGltZW91dCgoKSA9PiB7XG4gKiAgIC8vIFwiYXBwbGUqcGllXCJcbiAqIH0pO1xuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UueWllbGRzQXN5bmMgPSBmdW5jdGlvbiB5aWVsZHNBc3luYygpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBzbGljZShhcmd1bWVudHMpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGxhc3QgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCB2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG5sZXQgdXVpZCA9IDA7XG4vKipcbiAqIENyZWF0ZXMgYSBwcm94eSAoc2lub24gY29uY2VwdCkgZnJvbSB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB3cmFwRnVuYyhmKSB7XG4gICAgY29uc3QgZmFrZUluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZmlyc3RBcmcsIGxhc3RBcmc7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaXJzdEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIGxhc3RBcmcgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPVxuICAgICAgICAgICAgbGFzdEFyZyAmJiB0eXBlb2YgbGFzdEFyZyA9PT0gXCJmdW5jdGlvblwiID8gbGFzdEFyZyA6IHVuZGVmaW5lZDtcblxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuICAgICAgICBwcm94eS5maXJzdEFyZyA9IGZpcnN0QXJnO1xuICAgICAgICBwcm94eS5sYXN0QXJnID0gbGFzdEFyZztcbiAgICAgICAgcHJveHkuY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgICByZXR1cm4gZiAmJiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICBjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KGZha2VJbnN0YW5jZSwgZiB8fCBmYWtlSW5zdGFuY2UpO1xuXG4gICAgcHJveHkuZGlzcGxheU5hbWUgPSBcImZha2VcIjtcbiAgICBwcm94eS5pZCA9IGBmYWtlIyR7dXVpZCsrfWA7XG5cbiAgICByZXR1cm4gcHJveHk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBFcnJvciBpbnN0YW5jZSBmcm9tIHRoZSBwYXNzZWQgdmFsdWUsIGlmIHRoZSB2YWx1ZSBpcyBub3RcbiAqIGFscmVhZHkgYW4gRXJyb3IgaW5zdGFuY2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgeyp9IHZhbHVlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm5zIHtFcnJvcn0gICAgICAgW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBnZXRFcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yID8gdmFsdWUgOiBuZXcgRXJyb3IodmFsdWUpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgcHJveHlJbnZva2UgPSByZXF1aXJlKFwiLi9wcm94eS1pbnZva2VcIik7XG5jb25zdCBwcm94eUNhbGxUb1N0cmluZyA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGxcIikudG9TdHJpbmc7XG5jb25zdCB0aW1lc0luV29yZHMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvdGltZXMtaW4td29yZHNcIik7XG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xuY29uc3QgbWF0Y2ggPSByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmNyZWF0ZU1hdGNoZXI7XG5jb25zdCBzdHViID0gcmVxdWlyZShcIi4vc3R1YlwiKTtcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IGRlZXBFcXVhbCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuZGVlcEVxdWFsO1xuY29uc3QgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxuY29uc3QgZXZlcnkgPSBhcnJheVByb3RvLmV2ZXJ5O1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5jb25zdCBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbmZ1bmN0aW9uIGNhbGxDb3VudEluV29yZHMoY2FsbENvdW50KSB7XG4gICAgaWYgKGNhbGxDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJuZXZlciBjYWxsZWRcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gYGNhbGxlZCAke3RpbWVzSW5Xb3JkcyhjYWxsQ291bnQpfWA7XG59XG5cbmZ1bmN0aW9uIGV4cGVjdGVkQ2FsbENvdW50SW5Xb3JkcyhleHBlY3RhdGlvbikge1xuICAgIGNvbnN0IG1pbiA9IGV4cGVjdGF0aW9uLm1pbkNhbGxzO1xuICAgIGNvbnN0IG1heCA9IGV4cGVjdGF0aW9uLm1heENhbGxzO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBsZXQgc3RyID0gdGltZXNJbldvcmRzKG1pbik7XG5cbiAgICAgICAgaWYgKG1pbiAhPT0gbWF4KSB7XG4gICAgICAgICAgICBzdHIgPSBgYXQgbGVhc3QgJHtzdHJ9IGFuZCBhdCBtb3N0ICR7dGltZXNJbldvcmRzKG1heCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGBhdCBsZWFzdCAke3RpbWVzSW5Xb3JkcyhtaW4pfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBhdCBtb3N0ICR7dGltZXNJbldvcmRzKG1heCl9YDtcbn1cblxuZnVuY3Rpb24gcmVjZWl2ZWRNaW5DYWxscyhleHBlY3RhdGlvbikge1xuICAgIGNvbnN0IGhhc01pbkxpbWl0ID0gdHlwZW9mIGV4cGVjdGF0aW9uLm1pbkNhbGxzID09PSBcIm51bWJlclwiO1xuICAgIHJldHVybiAhaGFzTWluTGltaXQgfHwgZXhwZWN0YXRpb24uY2FsbENvdW50ID49IGV4cGVjdGF0aW9uLm1pbkNhbGxzO1xufVxuXG5mdW5jdGlvbiByZWNlaXZlZE1heENhbGxzKGV4cGVjdGF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RhdGlvbi5tYXhDYWxscyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdGF0aW9uLmNhbGxDb3VudCA9PT0gZXhwZWN0YXRpb24ubWF4Q2FsbHM7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeU1hdGNoZXIocG9zc2libGVNYXRjaGVyLCBhcmcpIHtcbiAgICBjb25zdCBpc01hdGNoZXIgPSBtYXRjaC5pc01hdGNoZXIocG9zc2libGVNYXRjaGVyKTtcblxuICAgIHJldHVybiAoaXNNYXRjaGVyICYmIHBvc3NpYmxlTWF0Y2hlci50ZXN0KGFyZykpIHx8IHRydWU7XG59XG5cbmNvbnN0IG1vY2tFeHBlY3RhdGlvbiA9IHtcbiAgICBtaW5DYWxsczogMSxcbiAgICBtYXhDYWxsczogMSxcblxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0YXRpb24gPSBleHRlbmQubm9uRW51bShzdHViKCksIG1vY2tFeHBlY3RhdGlvbik7XG4gICAgICAgIGRlbGV0ZSBleHBlY3RhdGlvbi5jcmVhdGU7XG4gICAgICAgIGV4cGVjdGF0aW9uLm1ldGhvZCA9IG1ldGhvZE5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uO1xuICAgIH0sXG5cbiAgICBpbnZva2U6IGZ1bmN0aW9uIGludm9rZShmdW5jLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlDYWxsQWxsb3dlZCh0aGlzVmFsdWUsIGFyZ3MpO1xuXG4gICAgICAgIHJldHVybiBwcm94eUludm9rZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBhdExlYXN0OiBmdW5jdGlvbiBhdExlYXN0KG51bSkge1xuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7dmFsdWVUb1N0cmluZyhudW0pfScgaXMgbm90IG51bWJlcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmxpbWl0c1NldCkge1xuICAgICAgICAgICAgdGhpcy5tYXhDYWxscyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxpbWl0c1NldCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1pbkNhbGxzID0gbnVtO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBhdE1vc3Q6IGZ1bmN0aW9uIGF0TW9zdChudW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke3ZhbHVlVG9TdHJpbmcobnVtKX0nIGlzIG5vdCBudW1iZXJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5saW1pdHNTZXQpIHtcbiAgICAgICAgICAgIHRoaXMubWluQ2FsbHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5saW1pdHNTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYXhDYWxscyA9IG51bTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgbmV2ZXI6IGZ1bmN0aW9uIG5ldmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDApO1xuICAgIH0sXG5cbiAgICBvbmNlOiBmdW5jdGlvbiBvbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDEpO1xuICAgIH0sXG5cbiAgICB0d2ljZTogZnVuY3Rpb24gdHdpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4YWN0bHkoMik7XG4gICAgfSxcblxuICAgIHRocmljZTogZnVuY3Rpb24gdGhyaWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDMpO1xuICAgIH0sXG5cbiAgICBleGFjdGx5OiBmdW5jdGlvbiBleGFjdGx5KG51bSkge1xuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7dmFsdWVUb1N0cmluZyhudW0pfScgaXMgbm90IGEgbnVtYmVyYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF0TGVhc3QobnVtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXRNb3N0KG51bSk7XG4gICAgfSxcblxuICAgIG1ldDogZnVuY3Rpb24gbWV0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZmFpbGVkICYmIHJlY2VpdmVkTWluQ2FsbHModGhpcyk7XG4gICAgfSxcblxuICAgIHZlcmlmeUNhbGxBbGxvd2VkOiBmdW5jdGlvbiB2ZXJpZnlDYWxsQWxsb3dlZCh0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRBcmd1bWVudHMgPSB0aGlzLmV4cGVjdGVkQXJndW1lbnRzO1xuXG4gICAgICAgIGlmIChyZWNlaXZlZE1heENhbGxzKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gYWxyZWFkeSBjYWxsZWQgJHt0aW1lc0luV29yZHModGhpcy5tYXhDYWxscyl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXCJleHBlY3RlZFRoaXNcIiBpbiB0aGlzICYmIHRoaXMuZXhwZWN0ZWRUaGlzICE9PSB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSBjYWxsZWQgd2l0aCAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSxcbiAgICAgICAgICAgICAgICApfSBhcyB0aGlzVmFsdWUsIGV4cGVjdGVkICR7dmFsdWVUb1N0cmluZyh0aGlzLmV4cGVjdGVkVGhpcyl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShcImV4cGVjdGVkQXJndW1lbnRzXCIgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5tZXRob2R9IHJlY2VpdmVkIG5vIGFyZ3VtZW50cywgZXhwZWN0ZWQgJHtpbnNwZWN0KFxuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgZXhwZWN0ZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgdG9vIGZldyBhcmd1bWVudHMgKCR7aW5zcGVjdChcbiAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICApfSksIGV4cGVjdGVkICR7aW5zcGVjdChleHBlY3RlZEFyZ3VtZW50cyl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV4cGVjdHNFeGFjdEFyZ0NvdW50ICYmXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCAhPT0gZXhwZWN0ZWRBcmd1bWVudHMubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5tZXRob2R9IHJlY2VpdmVkIHRvbyBtYW55IGFyZ3VtZW50cyAoJHtpbnNwZWN0KFxuICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICl9KSwgZXhwZWN0ZWQgJHtpbnNwZWN0KGV4cGVjdGVkQXJndW1lbnRzKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvckVhY2goXG4gICAgICAgICAgICBleHBlY3RlZEFyZ3VtZW50cyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChleHBlY3RlZEFyZ3VtZW50LCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJpZnlNYXRjaGVyKGV4cGVjdGVkQXJndW1lbnQsIGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5tZXRob2R9IHJlY2VpdmVkIHdyb25nIGFyZ3VtZW50cyAke2luc3BlY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9LCBkaWRuJ3QgbWF0Y2ggJHtTdHJpbmcoZXhwZWN0ZWRBcmd1bWVudHMpfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYXJnc1tpXSwgZXhwZWN0ZWRBcmd1bWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgd3JvbmcgYXJndW1lbnRzICR7aW5zcGVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX0sIGV4cGVjdGVkICR7aW5zcGVjdChleHBlY3RlZEFyZ3VtZW50cyl9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgYWxsb3dzQ2FsbDogZnVuY3Rpb24gYWxsb3dzQ2FsbCh0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRBcmd1bWVudHMgPSB0aGlzLmV4cGVjdGVkQXJndW1lbnRzO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldCgpICYmIHJlY2VpdmVkTWF4Q2FsbHModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcImV4cGVjdGVkVGhpc1wiIGluIHRoaXMgJiYgdGhpcy5leHBlY3RlZFRoaXMgIT09IHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoXCJleHBlY3RlZEFyZ3VtZW50c1wiIGluIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICBjb25zdCBfYXJncyA9IGFyZ3MgfHwgW107XG5cbiAgICAgICAgaWYgKF9hcmdzLmxlbmd0aCA8IGV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCAmJlxuICAgICAgICAgICAgX2FyZ3MubGVuZ3RoICE9PSBleHBlY3RlZEFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXZlcnkoZXhwZWN0ZWRBcmd1bWVudHMsIGZ1bmN0aW9uIChleHBlY3RlZEFyZ3VtZW50LCBpKSB7XG4gICAgICAgICAgICBpZiAoIXZlcmlmeU1hdGNoZXIoZXhwZWN0ZWRBcmd1bWVudCwgX2FyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChfYXJnc1tpXSwgZXhwZWN0ZWRBcmd1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgd2l0aEFyZ3M6IGZ1bmN0aW9uIHdpdGhBcmdzKCkge1xuICAgICAgICB0aGlzLmV4cGVjdGVkQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHdpdGhFeGFjdEFyZ3M6IGZ1bmN0aW9uIHdpdGhFeGFjdEFyZ3MoKSB7XG4gICAgICAgIHRoaXMud2l0aEFyZ3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24gb24odGhpc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRUaGlzID0gdGhpc1ZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHNsaWNlKHRoaXMuZXhwZWN0ZWRBcmd1bWVudHMgfHwgW10pO1xuXG4gICAgICAgIGlmICghdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCkge1xuICAgICAgICAgICAgcHVzaChhcmdzLCBcIlsuLi5dXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FsbFN0ciA9IHByb3h5Q2FsbFRvU3RyaW5nLmNhbGwoe1xuICAgICAgICAgICAgcHJveHk6IHRoaXMubWV0aG9kIHx8IFwiYW5vbnltb3VzIG1vY2sgZXhwZWN0YXRpb25cIixcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtjYWxsU3RyLnJlcGxhY2UoXG4gICAgICAgICAgICBcIiwgWy4uLlwiLFxuICAgICAgICAgICAgXCJbLCAuLi5cIixcbiAgICAgICAgKX0gJHtleHBlY3RlZENhbGxDb3VudEluV29yZHModGhpcyl9YDtcblxuICAgICAgICBpZiAodGhpcy5tZXQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBFeHBlY3RhdGlvbiBtZXQ6ICR7bWVzc2FnZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBFeHBlY3RlZCAke21lc3NhZ2V9ICgke2NhbGxDb3VudEluV29yZHModGhpcy5jYWxsQ291bnQpfSlgO1xuICAgIH0sXG5cbiAgICB2ZXJpZnk6IGZ1bmN0aW9uIHZlcmlmeSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1ldCgpKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChTdHJpbmcodGhpcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLnBhc3MoU3RyaW5nKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBwYXNzOiBmdW5jdGlvbiBwYXNzKG1lc3NhZ2UpIHtcbiAgICAgICAgYXNzZXJ0LnBhc3MobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIGZhaWw6IGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgICBjb25zdCBleGNlcHRpb24gPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIGV4Y2VwdGlvbi5uYW1lID0gXCJFeHBlY3RhdGlvbkVycm9yXCI7XG5cbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1vY2tFeHBlY3RhdGlvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IG1vY2tFeHBlY3RhdGlvbiA9IHJlcXVpcmUoXCIuL21vY2stZXhwZWN0YXRpb25cIik7XG5jb25zdCBwcm94eUNhbGxUb1N0cmluZyA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGxcIikudG9TdHJpbmc7XG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5kZWVwRXF1YWw7XG5jb25zdCB3cmFwTWV0aG9kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dyYXAtbWV0aG9kXCIpO1xuY29uc3QgdXNlUHJvbWlzZUxpYnJhcnkgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvdXNlLXByb21pc2UtbGlicmFyeVwiKTtcblxuY29uc3QgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG5jb25zdCBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbmNvbnN0IGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG5jb25zdCBldmVyeSA9IGFycmF5UHJvdG8uZXZlcnk7XG5jb25zdCBqb2luID0gYXJyYXlQcm90by5qb2luO1xuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbmNvbnN0IHVuc2hpZnQgPSBhcnJheVByb3RvLnVuc2hpZnQ7XG5cbmZ1bmN0aW9uIG1vY2sob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gbW9ja0V4cGVjdGF0aW9uLmNyZWF0ZShvYmplY3QgPyBvYmplY3QgOiBcIkFub255bW91cyBtb2NrXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2NrLmNyZWF0ZShvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBlYWNoKGNvbGxlY3Rpb24sIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgY29sID0gY29sbGVjdGlvbiB8fCBbXTtcblxuICAgIGZvckVhY2goY29sLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGFycmF5RXF1YWxzKGFycjEsIGFycjIsIGNvbXBhcmVMZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyZUxlbmd0aCAmJiBhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBldmVyeShhcnIxLCBmdW5jdGlvbiAoZWxlbWVudCwgaSkge1xuICAgICAgICByZXR1cm4gZGVlcEVxdWFsKGFycjJbaV0sIGVsZW1lbnQpO1xuICAgIH0pO1xufVxuXG5leHRlbmQobW9jaywge1xuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKG9iamVjdCkge1xuICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9iamVjdCBpcyBudWxsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9ja09iamVjdCA9IGV4dGVuZC5ub25FbnVtKHt9LCBtb2NrLCB7IG9iamVjdDogb2JqZWN0IH0pO1xuICAgICAgICBkZWxldGUgbW9ja09iamVjdC5jcmVhdGU7XG5cbiAgICAgICAgcmV0dXJuIG1vY2tPYmplY3Q7XG4gICAgfSxcblxuICAgIGV4cGVjdHM6IGZ1bmN0aW9uIGV4cGVjdHMobWV0aG9kKSB7XG4gICAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibWV0aG9kIGlzIGZhbHN5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5leHBlY3RhdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucHJveGllcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5mYWlsdXJlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGF0aW9uc1ttZXRob2RdKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGVjdGF0aW9uc1ttZXRob2RdID0gW107XG4gICAgICAgICAgICBjb25zdCBtb2NrT2JqZWN0ID0gdGhpcztcblxuICAgICAgICAgICAgd3JhcE1ldGhvZCh0aGlzLm9iamVjdCwgbWV0aG9kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tPYmplY3QuaW52b2tlTWV0aG9kKG1ldGhvZCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwdXNoKHRoaXMucHJveGllcywgbWV0aG9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGVjdGF0aW9uID0gbW9ja0V4cGVjdGF0aW9uLmNyZWF0ZShtZXRob2QpO1xuICAgICAgICBleHBlY3RhdGlvbi53cmFwcGVkTWV0aG9kID0gdGhpcy5vYmplY3RbbWV0aG9kXS53cmFwcGVkTWV0aG9kO1xuICAgICAgICBwdXNoKHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0sIGV4cGVjdGF0aW9uKTtcbiAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkodGhpcy5wcm9taXNlTGlicmFyeSwgZXhwZWN0YXRpb24pO1xuXG4gICAgICAgIHJldHVybiBleHBlY3RhdGlvbjtcbiAgICB9LFxuXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5vYmplY3Q7XG5cbiAgICAgICAgZWFjaCh0aGlzLnByb3hpZXMsIGZ1bmN0aW9uIChwcm94eSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbcHJveHldLnJlc3RvcmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iamVjdFtwcm94eV0ucmVzdG9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgdmVyaWZ5OiBmdW5jdGlvbiB2ZXJpZnkoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGF0aW9ucyA9IHRoaXMuZXhwZWN0YXRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFpbHVyZXMgPyBzbGljZSh0aGlzLmZhaWx1cmVzKSA6IFtdO1xuICAgICAgICBjb25zdCBtZXQgPSBbXTtcblxuICAgICAgICBlYWNoKHRoaXMucHJveGllcywgZnVuY3Rpb24gKHByb3h5KSB7XG4gICAgICAgICAgICBlYWNoKGV4cGVjdGF0aW9uc1twcm94eV0sIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghZXhwZWN0YXRpb24ubWV0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaChtZXNzYWdlcywgU3RyaW5nKGV4cGVjdGF0aW9uKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaChtZXQsIFN0cmluZyhleHBlY3RhdGlvbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlc3RvcmUoKTtcblxuICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoam9pbihjb25jYXQobWVzc2FnZXMsIG1ldCksIFwiXFxuXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLnBhc3Moam9pbihjb25jYXQobWVzc2FnZXMsIG1ldCksIFwiXFxuXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICB1c2luZ1Byb21pc2U6IGZ1bmN0aW9uIHVzaW5nUHJvbWlzZShwcm9taXNlTGlicmFyeSkge1xuICAgICAgICB0aGlzLnByb21pc2VMaWJyYXJ5ID0gcHJvbWlzZUxpYnJhcnk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGludm9rZU1ldGhvZDogZnVuY3Rpb24gaW52b2tlTWV0aG9kKG1ldGhvZCwgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIC8qIGlmIHdlIGNhbm5vdCBmaW5kIGFueSBtYXRjaGluZyBmaWxlcyB3ZSB3aWxsIGV4cGxpY2l0bHkgY2FsbCBtb2NrRXhwZWN0aW9uI2ZhaWwgd2l0aCBlcnJvciBtZXNzYWdlcyAqL1xuICAgICAgICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IFwib2ZmXCIgKi9cbiAgICAgICAgY29uc3QgZXhwZWN0YXRpb25zID1cbiAgICAgICAgICAgIHRoaXMuZXhwZWN0YXRpb25zICYmIHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF1cbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF1cbiAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJncyA9IGFyZ3MgfHwgW107XG4gICAgICAgIGxldCBhdmFpbGFibGU7XG5cbiAgICAgICAgY29uc3QgZXhwZWN0YXRpb25zV2l0aE1hdGNoaW5nQXJncyA9IGZpbHRlcihcbiAgICAgICAgICAgIGV4cGVjdGF0aW9ucyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkQXJncyA9IGV4cGVjdGF0aW9uLmV4cGVjdGVkQXJndW1lbnRzIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcmdzLFxuICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5leHBlY3RzRXhhY3RBcmdDb3VudCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBleHBlY3RhdGlvbnNUb0FwcGx5ID0gZmlsdGVyKFxuICAgICAgICAgICAgZXhwZWN0YXRpb25zV2l0aE1hdGNoaW5nQXJncyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICFleHBlY3RhdGlvbi5tZXQoKSAmJlxuICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5hbGxvd3NDYWxsKHRoaXNWYWx1ZSwgYXJncylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZXhwZWN0YXRpb25zVG9BcHBseS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25zVG9BcHBseVswXS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgbGV0IGV4aGF1c3RlZCA9IDA7XG5cbiAgICAgICAgZm9yRWFjaChleHBlY3RhdGlvbnNXaXRoTWF0Y2hpbmdBcmdzLCBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbi5hbGxvd3NDYWxsKHRoaXNWYWx1ZSwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBhdmFpbGFibGUgfHwgZXhwZWN0YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aGF1c3RlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYXZhaWxhYmxlICYmIGV4aGF1c3RlZCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yRWFjaChleHBlY3RhdGlvbnMsIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgcHVzaChtZXNzYWdlcywgYCAgICAke1N0cmluZyhleHBlY3RhdGlvbil9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVuc2hpZnQoXG4gICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGNhbGw6ICR7cHJveHlDYWxsVG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICAgICAgcHJveHk6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgfSl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIC8vIFBoYW50b21KUyBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIHN0YWNrIHRyYWNlIHVudGlsIHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvd25cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHVzaChcbiAgICAgICAgICAgIHRoaXMuZmFpbHVyZXMsXG4gICAgICAgICAgICBgVW5leHBlY3RlZCBjYWxsOiAke3Byb3h5Q2FsbFRvU3RyaW5nLmNhbGwoe1xuICAgICAgICAgICAgICAgIHByb3h5OiBtZXRob2QsXG4gICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICBzdGFjazogZXJyLnN0YWNrLFxuICAgICAgICAgICAgfSl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChqb2luKG1lc3NhZ2VzLCBcIlxcblwiKSk7XG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1vY2s7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZmFrZSA9IHJlcXVpcmUoXCIuL2Zha2VcIik7XG5jb25zdCBpc1Jlc3RvcmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcmVzdG9yYWJsZVwiKTtcblxuY29uc3QgU1RBVFVTX1BFTkRJTkcgPSBcInBlbmRpbmdcIjtcbmNvbnN0IFNUQVRVU19SRVNPTFZFRCA9IFwicmVzb2x2ZWRcIjtcbmNvbnN0IFNUQVRVU19SRUpFQ1RFRCA9IFwicmVqZWN0ZWRcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZmFrZSBmb3IgYSBnaXZlbiBmdW5jdGlvbiBvciB1bmRlZmluZWQuIElmIG5vIGZ1bmN0aW9uIGlzIGdpdmVuLCBhXG4gKiBuZXcgZmFrZSBpcyByZXR1cm5lZC4gSWYgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGFscmVhZHkgYSBmYWtlLCBpdCBpc1xuICogcmV0dXJuZWQgYXMgaXMuIE90aGVyd2lzZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgd3JhcHBlZCBpbiBhIG5ldyBmYWtlLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtleGVjdXRvcl0gVGhlIG9wdGlvbmFsIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRGYWtlRXhlY3V0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAoaXNSZXN0b3JhYmxlKGV4ZWN1dG9yKSkge1xuICAgICAgICByZXR1cm4gZXhlY3V0b3I7XG4gICAgfVxuICAgIGlmIChleGVjdXRvcikge1xuICAgICAgICByZXR1cm4gZmFrZShleGVjdXRvcik7XG4gICAgfVxuICAgIHJldHVybiBmYWtlKCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5ldyBwcm9taXNlIHRoYXQgZXhwb3NlcyBpdCdzIGludGVybmFsIGBzdGF0dXNgLCBgcmVzb2x2ZWRWYWx1ZWBcbiAqIGFuZCBgcmVqZWN0ZWRWYWx1ZWAgYW5kIGNhbiBiZSByZXNvbHZlZCBvciByZWplY3RlZCBmcm9tIHRoZSBvdXRzaWRlIGJ5XG4gKiBjYWxsaW5nIGByZXNvbHZlKHZhbHVlKWAgb3IgYHJlamVjdChyZWFzb24pYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0b3JdIFRoZSBvcHRpb25hbCBleGVjdXRvciBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBwcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgY29uc3QgZmFrZUV4ZWN1dG9yID0gZ2V0RmFrZUV4ZWN1dG9yKGV4ZWN1dG9yKTtcbiAgICBjb25zdCBzaW5vblByb21pc2UgPSBuZXcgUHJvbWlzZShmYWtlRXhlY3V0b3IpO1xuXG4gICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IFNUQVRVU19QRU5ESU5HO1xuICAgIHNpbm9uUHJvbWlzZVxuICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNpbm9uUHJvbWlzZS5zdGF0dXMgPSBTVEFUVVNfUkVTT0xWRUQ7XG4gICAgICAgICAgICBzaW5vblByb21pc2UucmVzb2x2ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IFNUQVRVU19SRUpFQ1RFRDtcbiAgICAgICAgICAgIHNpbm9uUHJvbWlzZS5yZWplY3RlZFZhbHVlID0gcmVhc29uO1xuICAgICAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIG9yIHJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gc3RhdHVzIGFuZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5hbGl6ZShzdGF0dXMsIHZhbHVlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoc2lub25Qcm9taXNlLnN0YXR1cyAhPT0gU1RBVFVTX1BFTkRJTkcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvbWlzZSBhbHJlYWR5ICR7c2lub25Qcm9taXNlLnN0YXR1c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNpbm9uUHJvbWlzZS5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG5cbiAgICBzaW5vblByb21pc2UucmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBmaW5hbGl6ZShTVEFUVVNfUkVTT0xWRUQsIHZhbHVlLCBmYWtlRXhlY3V0b3IuZmlyc3RDYWxsLmFyZ3NbMF0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHByb21pc2Ugc28gdGhhdCBjYWxsZXJzIGNhbiBhd2FpdCBpdDpcbiAgICAgICAgcmV0dXJuIHNpbm9uUHJvbWlzZTtcbiAgICB9O1xuICAgIHNpbm9uUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGZpbmFsaXplKFNUQVRVU19SRUpFQ1RFRCwgcmVhc29uLCBmYWtlRXhlY3V0b3IuZmlyc3RDYWxsLmFyZ3NbMV0pO1xuICAgICAgICAvLyBSZXR1cm4gYSBuZXcgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNpbm9uIHByb21pc2Ugd2FzXG4gICAgICAgIC8vIHJlamVjdGVkLCBzbyB0aGF0IGNhbGxlcnMgY2FuIGF3YWl0IGl0OlxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHNpbm9uUHJvbWlzZS5jYXRjaCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNpbm9uUHJvbWlzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9taXNlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHB1c2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LnB1c2g7XG5cbmV4cG9ydHMuaW5jcmVtZW50Q2FsbENvdW50ID0gZnVuY3Rpb24gaW5jcmVtZW50Q2FsbENvdW50KHByb3h5KSB7XG4gICAgcHJveHkuY2FsbGVkID0gdHJ1ZTtcbiAgICBwcm94eS5jYWxsQ291bnQgKz0gMTtcbiAgICBwcm94eS5ub3RDYWxsZWQgPSBmYWxzZTtcbiAgICBwcm94eS5jYWxsZWRPbmNlID0gcHJveHkuY2FsbENvdW50ID09PSAxO1xuICAgIHByb3h5LmNhbGxlZFR3aWNlID0gcHJveHkuY2FsbENvdW50ID09PSAyO1xuICAgIHByb3h5LmNhbGxlZFRocmljZSA9IHByb3h5LmNhbGxDb3VudCA9PT0gMztcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ2FsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiBjcmVhdGVDYWxsUHJvcGVydGllcyhwcm94eSkge1xuICAgIHByb3h5LmZpcnN0Q2FsbCA9IHByb3h5LmdldENhbGwoMCk7XG4gICAgcHJveHkuc2Vjb25kQ2FsbCA9IHByb3h5LmdldENhbGwoMSk7XG4gICAgcHJveHkudGhpcmRDYWxsID0gcHJveHkuZ2V0Q2FsbCgyKTtcbiAgICBwcm94eS5sYXN0Q2FsbCA9IHByb3h5LmdldENhbGwocHJveHkuY2FsbENvdW50IC0gMSk7XG59O1xuXG5leHBvcnRzLmRlbGVnYXRlVG9DYWxscyA9IGZ1bmN0aW9uIGRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eSxcbiAgICBtZXRob2QsXG4gICAgbWF0Y2hBbnksXG4gICAgYWN0dWFsLFxuICAgIHJldHVybnNWYWx1ZXMsXG4gICAgbm90Q2FsbGVkLFxuICAgIHRvdGFsQ2FsbENvdW50LFxuKSB7XG4gICAgcHJveHlbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxlZCkge1xuICAgICAgICAgICAgaWYgKG5vdENhbGxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3RDYWxsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b3RhbENhbGxDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY2FsbENvdW50ICE9PSB0b3RhbENhbGxDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRDYWxsO1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IDA7XG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jYWxsQ291bnQ7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDYWxsID0gdGhpcy5nZXRDYWxsKGkpO1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBjdXJyZW50Q2FsbFthY3R1YWwgfHwgbWV0aG9kXS5hcHBseShcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbCxcbiAgICAgICAgICAgICAgICBhcmd1bWVudHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHVzaChyZXR1cm5WYWx1ZXMsIHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXMgKz0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaEFueSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuc1ZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcyA9PT0gdGhpcy5jYWxsQ291bnQ7XG4gICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBtYXRjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbmNvbnN0IGRlZXBFcXVhbCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuZGVlcEVxdWFsO1xuY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xuY29uc3QgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxuY29uc3QgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG5jb25zdCBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbmNvbnN0IGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG5jb25zdCBtYXAgPSBhcnJheVByb3RvLm1hcDtcbmNvbnN0IHJlZHVjZSA9IGFycmF5UHJvdG8ucmVkdWNlO1xuY29uc3Qgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuXG4vKipcbiAqIEBwYXJhbSBwcm94eVxuICogQHBhcmFtIHRleHRcbiAqIEBwYXJhbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIHRocm93WWllbGRFcnJvcihwcm94eSwgdGV4dCwgYXJncykge1xuICAgIGxldCBtc2cgPSBmdW5jdGlvbk5hbWUocHJveHkpICsgdGV4dDtcbiAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgbXNnICs9IGAgUmVjZWl2ZWQgWyR7am9pbihzbGljZShhcmdzKSwgXCIsIFwiKX1dYDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmNvbnN0IGNhbGxQcm90byA9IHtcbiAgICBjYWxsZWRPbjogZnVuY3Rpb24gY2FsbGVkT24odGhpc1ZhbHVlKSB7XG4gICAgICAgIGlmIChtYXRjaC5pc01hdGNoZXIodGhpc1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZS50ZXN0KHRoaXMudGhpc1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aGlzVmFsdWUgPT09IHRoaXNWYWx1ZTtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aDogZnVuY3Rpb24gY2FsbGVkV2l0aCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbGxlZFdpdGhBcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAoY2FsbGVkV2l0aEFyZ3MubGVuZ3RoID4gc2VsZi5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZHVjZShcbiAgICAgICAgICAgIGNhbGxlZFdpdGhBcmdzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHByZXYsIGFyZywgaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICYmIGRlZXBFcXVhbChzZWxmLmFyZ3NbaV0sIGFyZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aE1hdGNoOiBmdW5jdGlvbiBjYWxsZWRXaXRoTWF0Y2goKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBjYWxsZWRXaXRoTWF0Y2hBcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAoY2FsbGVkV2l0aE1hdGNoQXJncy5sZW5ndGggPiBzZWxmLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgICAgICAgY2FsbGVkV2l0aE1hdGNoQXJncyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChwcmV2LCBleHBlY3RhdGlvbiwgaSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbCA9IHNlbGYuYXJnc1tpXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICYmIG1hdGNoKGV4cGVjdGF0aW9uKS50ZXN0KGFjdHVhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aEV4YWN0bHk6IGZ1bmN0aW9uIGNhbGxlZFdpdGhFeGFjdGx5KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gdGhpcy5hcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy5jYWxsZWRXaXRoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgbm90Q2FsbGVkV2l0aDogZnVuY3Rpb24gbm90Q2FsbGVkV2l0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNhbGxlZFdpdGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgbm90Q2FsbGVkV2l0aE1hdGNoOiBmdW5jdGlvbiBub3RDYWxsZWRXaXRoTWF0Y2goKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jYWxsZWRXaXRoTWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgcmV0dXJuZWQ6IGZ1bmN0aW9uIHJldHVybmVkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWwodGhpcy5yZXR1cm5WYWx1ZSwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICB0aHJldzogZnVuY3Rpb24gdGhyZXcoZXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhdGhpcy5leGNlcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmV4Y2VwdGlvbiA9PT0gZXJyb3IgfHwgdGhpcy5leGNlcHRpb24ubmFtZSA9PT0gZXJyb3I7XG4gICAgfSxcblxuICAgIGNhbGxlZFdpdGhOZXc6IGZ1bmN0aW9uIGNhbGxlZFdpdGhOZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5LnByb3RvdHlwZSAmJiB0aGlzLnRoaXNWYWx1ZSBpbnN0YW5jZW9mIHRoaXMucHJveHk7XG4gICAgfSxcblxuICAgIGNhbGxlZEJlZm9yZTogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZCA8IG90aGVyLmNhbGxJZDtcbiAgICB9LFxuXG4gICAgY2FsbGVkQWZ0ZXI6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWQgPiBvdGhlci5jYWxsSWQ7XG4gICAgfSxcblxuICAgIGNhbGxlZEltbWVkaWF0ZWx5QmVmb3JlOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkID09PSBvdGhlci5jYWxsSWQgLSAxO1xuICAgIH0sXG5cbiAgICBjYWxsZWRJbW1lZGlhdGVseUFmdGVyOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkID09PSBvdGhlci5jYWxsSWQgKyAxO1xuICAgIH0sXG5cbiAgICBjYWxsQXJnOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXJnSXNBRnVuY3Rpb24ocG9zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJnc1twb3NdKCk7XG4gICAgfSxcblxuICAgIGNhbGxBcmdPbjogZnVuY3Rpb24gKHBvcywgdGhpc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXJnSXNBRnVuY3Rpb24ocG9zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJnc1twb3NdLmFwcGx5KHRoaXNWYWx1ZSk7XG4gICAgfSxcblxuICAgIGNhbGxBcmdXaXRoOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcmdPbldpdGguYXBwbHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgY29uY2F0KFtwb3MsIG51bGxdLCBzbGljZShhcmd1bWVudHMsIDEpKSxcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgY2FsbEFyZ09uV2l0aDogZnVuY3Rpb24gKHBvcywgdGhpc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXJnSXNBRnVuY3Rpb24ocG9zKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMik7XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3NbcG9zXS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgIH0sXG5cbiAgICB0aHJvd0FyZzogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICBpZiAocG9zID4gdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgTm90IGVub3VnaCBhcmd1bWVudHM6ICR7cG9zfSByZXF1aXJlZCBidXQgb25seSAke3RoaXMuYXJncy5sZW5ndGh9IHByZXNlbnRgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IHRoaXMuYXJnc1twb3NdO1xuICAgIH0sXG5cbiAgICB5aWVsZDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55aWVsZE9uLmFwcGx5KHRoaXMsIGNvbmNhdChbbnVsbF0sIHNsaWNlKGFyZ3VtZW50cywgMCkpKTtcbiAgICB9LFxuXG4gICAgeWllbGRPbjogZnVuY3Rpb24gKHRoaXNWYWx1ZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UodGhpcy5hcmdzKTtcbiAgICAgICAgY29uc3QgeWllbGRGbiA9IGZpbHRlcihhcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9KVswXTtcblxuICAgICAgICBpZiAoIXlpZWxkRm4pIHtcbiAgICAgICAgICAgIHRocm93WWllbGRFcnJvcihcbiAgICAgICAgICAgICAgICB0aGlzLnByb3h5LFxuICAgICAgICAgICAgICAgIFwiIGNhbm5vdCB5aWVsZCBzaW5jZSBubyBjYWxsYmFjayB3YXMgcGFzc2VkLlwiLFxuICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkRm4uYXBwbHkodGhpc1ZhbHVlLCBzbGljZShhcmd1bWVudHMsIDEpKTtcbiAgICB9LFxuXG4gICAgeWllbGRUbzogZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWllbGRUb09uLmFwcGx5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGNvbmNhdChbcHJvcCwgbnVsbF0sIHNsaWNlKGFyZ3VtZW50cywgMSkpLFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICB5aWVsZFRvT246IGZ1bmN0aW9uIChwcm9wLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHNsaWNlKHRoaXMuYXJncyk7XG4gICAgICAgIGNvbnN0IHlpZWxkQXJnID0gZmlsdGVyKGFyZ3MsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZ1twcm9wXSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgY29uc3QgeWllbGRGbiA9IHlpZWxkQXJnICYmIHlpZWxkQXJnW3Byb3BdO1xuXG4gICAgICAgIGlmICgheWllbGRGbikge1xuICAgICAgICAgICAgdGhyb3dZaWVsZEVycm9yKFxuICAgICAgICAgICAgICAgIHRoaXMucHJveHksXG4gICAgICAgICAgICAgICAgYCBjYW5ub3QgeWllbGQgdG8gJyR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgICApfScgc2luY2Ugbm8gY2FsbGJhY2sgd2FzIHBhc3NlZC5gLFxuICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkRm4uYXBwbHkodGhpc1ZhbHVlLCBzbGljZShhcmd1bWVudHMsIDIpKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjooXCI7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FsbFN0ciA9IHRoaXMucHJveHkgPyBgJHtTdHJpbmcodGhpcy5wcm94eSl9KGAgOiBcIlwiO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gbWFwKHRoaXMuYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3QoYXJnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2FsbFN0ciA9IGAke2NhbGxTdHIgKyBqb2luKGZvcm1hdHRlZEFyZ3MsIFwiLCBcIil9KWA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHVyblZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjYWxsU3RyICs9IGAgPT4gJHtpbnNwZWN0KHRoaXMucmV0dXJuVmFsdWUpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leGNlcHRpb24pIHtcbiAgICAgICAgICAgIGNhbGxTdHIgKz0gYCAhJHt0aGlzLmV4Y2VwdGlvbi5uYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2VwdGlvbi5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgY2FsbFN0ciArPSBgKCR7dGhpcy5leGNlcHRpb24ubWVzc2FnZX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFjaykge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHN0YWNrLCBhZGQgdGhlIGZpcnN0IGZyYW1lIHRoYXQncyBpbiBlbmQtdXNlciBjb2RlXG4gICAgICAgICAgICAvLyBTa2lwIHRoZSBmaXJzdCB0d28gZnJhbWVzIGJlY2F1c2UgdGhleSB3aWxsIHJlZmVyIHRvIFNpbm9uIGNvZGVcbiAgICAgICAgICAgIGNhbGxTdHIgKz0gKHRoaXMuc3RhY2suc3BsaXQoXCJcXG5cIilbM10gfHwgXCJ1bmtub3duXCIpLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL15cXHMqKD86YXRcXHMrfEApPy8sXG4gICAgICAgICAgICAgICAgXCIgYXQgXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTdHI7XG4gICAgfSxcblxuICAgIGVuc3VyZUFyZ0lzQUZ1bmN0aW9uOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcmdzW3Bvc10gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRXhwZWN0ZWQgYXJndW1lbnQgYXQgcG9zaXRpb24gJHtwb3N9IHRvIGJlIGEgRnVuY3Rpb24sIGJ1dCB3YXMgJHt0eXBlb2YgdGhpc1xuICAgICAgICAgICAgICAgICAgICAuYXJnc1twb3NdfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoY2FsbFByb3RvLCBcInN0YWNrXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmVycm9yV2l0aENhbGxTdGFjayAmJiB0aGlzLmVycm9yV2l0aENhbGxTdGFjay5zdGFjaykgfHwgXCJcIjtcbiAgICB9LFxufSk7XG5cbmNhbGxQcm90by5pbnZva2VDYWxsYmFjayA9IGNhbGxQcm90by55aWVsZDtcblxuLyoqXG4gKiBAcGFyYW0gcHJveHlcbiAqIEBwYXJhbSB0aGlzVmFsdWVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcGFyYW0gcmV0dXJuVmFsdWVcbiAqIEBwYXJhbSBleGNlcHRpb25cbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIGVycm9yV2l0aENhbGxTdGFja1xuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHByb3h5Q2FsbFxuICovXG5mdW5jdGlvbiBjcmVhdGVQcm94eUNhbGwoXG4gICAgcHJveHksXG4gICAgdGhpc1ZhbHVlLFxuICAgIGFyZ3MsXG4gICAgcmV0dXJuVmFsdWUsXG4gICAgZXhjZXB0aW9uLFxuICAgIGlkLFxuICAgIGVycm9yV2l0aENhbGxTdGFjayxcbikge1xuICAgIGlmICh0eXBlb2YgaWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbGwgaWQgaXMgbm90IGEgbnVtYmVyXCIpO1xuICAgIH1cblxuICAgIGxldCBmaXJzdEFyZywgbGFzdEFyZztcblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgICAgICBsYXN0QXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3h5Q2FsbCA9IE9iamVjdC5jcmVhdGUoY2FsbFByb3RvKTtcbiAgICBjb25zdCBjYWxsYmFjayA9XG4gICAgICAgIGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT09IFwiZnVuY3Rpb25cIiA/IGxhc3RBcmcgOiB1bmRlZmluZWQ7XG5cbiAgICBwcm94eUNhbGwucHJveHkgPSBwcm94eTtcbiAgICBwcm94eUNhbGwudGhpc1ZhbHVlID0gdGhpc1ZhbHVlO1xuICAgIHByb3h5Q2FsbC5hcmdzID0gYXJncztcbiAgICBwcm94eUNhbGwuZmlyc3RBcmcgPSBmaXJzdEFyZztcbiAgICBwcm94eUNhbGwubGFzdEFyZyA9IGxhc3RBcmc7XG4gICAgcHJveHlDYWxsLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcHJveHlDYWxsLnJldHVyblZhbHVlID0gcmV0dXJuVmFsdWU7XG4gICAgcHJveHlDYWxsLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjtcbiAgICBwcm94eUNhbGwuY2FsbElkID0gaWQ7XG4gICAgcHJveHlDYWxsLmVycm9yV2l0aENhbGxTdGFjayA9IGVycm9yV2l0aENhbGxTdGFjaztcblxuICAgIHJldHVybiBwcm94eUNhbGw7XG59XG5jcmVhdGVQcm94eUNhbGwudG9TdHJpbmcgPSBjYWxsUHJvdG8udG9TdHJpbmc7IC8vIHVzZWQgYnkgbW9ja3NcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQcm94eUNhbGw7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBwcm94eUNhbGxVdGlsID0gcmVxdWlyZShcIi4vcHJveHktY2FsbC11dGlsXCIpO1xuXG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IGNvbmNhdCA9IGFycmF5UHJvdG8uY29uY2F0O1xuY29uc3QgRXJyb3JDb25zdHJ1Y3RvciA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcblxubGV0IGNhbGxJZCA9IDA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW52b2tlKGZ1bmMsIHRoaXNWYWx1ZSwgYXJncykge1xuICAgIGNvbnN0IG1hdGNoaW5ncyA9IHRoaXMubWF0Y2hpbmdGYWtlcyhhcmdzKTtcbiAgICBjb25zdCBjdXJyZW50Q2FsbElkID0gY2FsbElkKys7XG4gICAgbGV0IGV4Y2VwdGlvbiwgcmV0dXJuVmFsdWU7XG5cbiAgICBwcm94eUNhbGxVdGlsLmluY3JlbWVudENhbGxDb3VudCh0aGlzKTtcbiAgICBwdXNoKHRoaXMudGhpc1ZhbHVlcywgdGhpc1ZhbHVlKTtcbiAgICBwdXNoKHRoaXMuYXJncywgYXJncyk7XG4gICAgcHVzaCh0aGlzLmNhbGxJZHMsIGN1cnJlbnRDYWxsSWQpO1xuICAgIGZvckVhY2gobWF0Y2hpbmdzLCBmdW5jdGlvbiAobWF0Y2hpbmcpIHtcbiAgICAgICAgcHJveHlDYWxsVXRpbC5pbmNyZW1lbnRDYWxsQ291bnQobWF0Y2hpbmcpO1xuICAgICAgICBwdXNoKG1hdGNoaW5nLnRoaXNWYWx1ZXMsIHRoaXNWYWx1ZSk7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcuYXJncywgYXJncyk7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcuY2FsbElkcywgY3VycmVudENhbGxJZCk7XG4gICAgfSk7XG5cbiAgICAvLyBNYWtlIGNhbGwgcHJvcGVydGllcyBhdmFpbGFibGUgZnJvbSB3aXRoaW4gdGhlIHNwaWVkIGZ1bmN0aW9uOlxuICAgIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXModGhpcyk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXMpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5pbnZva2luZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgdGhpc0NhbGwgPSB0aGlzLmdldENhbGwodGhpcy5jYWxsQ291bnQgLSAxKTtcblxuICAgICAgICBpZiAodGhpc0NhbGwuY2FsbGVkV2l0aE5ldygpKSB7XG4gICAgICAgICAgICAvLyBDYWxsIHRocm91Z2ggd2l0aCBgbmV3YFxuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgKGJpbmQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jIHx8IGZ1bmMsXG4gICAgICAgICAgICAgICAgY29uY2F0KFt0aGlzVmFsdWVdLCBhcmdzKSxcbiAgICAgICAgICAgICkpKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgcmV0dXJuVmFsdWUgIT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcmV0dXJuVmFsdWUgIT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZSA9ICh0aGlzLmZ1bmMgfHwgZnVuYykuYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXhjZXB0aW9uID0gZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBkZWxldGUgdGhpcy5pbnZva2luZztcbiAgICB9XG5cbiAgICBwdXNoKHRoaXMuZXhjZXB0aW9ucywgZXhjZXB0aW9uKTtcbiAgICBwdXNoKHRoaXMucmV0dXJuVmFsdWVzLCByZXR1cm5WYWx1ZSk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIGZ1bmN0aW9uIChtYXRjaGluZykge1xuICAgICAgICBwdXNoKG1hdGNoaW5nLmV4Y2VwdGlvbnMsIGV4Y2VwdGlvbik7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcucmV0dXJuVmFsdWVzLCByZXR1cm5WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3JDb25zdHJ1Y3RvcigpO1xuICAgIC8vIDEuIFBsZWFzZSBkbyBub3QgZ2V0IHN0YWNrIGF0IHRoaXMgcG9pbnQuIEl0IG1heSBiZSBzbyB2ZXJ5IHNsb3csIGFuZCBub3QgYWN0dWFsbHkgdXNlZFxuICAgIC8vIDIuIFBoYW50b21KUyBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIHN0YWNrIHRyYWNlIHVudGlsIHRoZSBlcnJvciBoYXMgYmVlbiB0aHJvd246XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvU3RhY2tcbiAgICB0cnkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgIH1cbiAgICBwdXNoKHRoaXMuZXJyb3JzV2l0aENhbGxTdGFjaywgZXJyKTtcbiAgICBmb3JFYWNoKG1hdGNoaW5ncywgZnVuY3Rpb24gKG1hdGNoaW5nKSB7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcuZXJyb3JzV2l0aENhbGxTdGFjaywgZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgcmV0dXJuIHZhbHVlIGFuZCBleGNlcHRpb24gYXZhaWxhYmxlIGluIHRoZSBjYWxsczpcbiAgICBwcm94eUNhbGxVdGlsLmNyZWF0ZUNhbGxQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIGZvckVhY2gobWF0Y2hpbmdzLCBwcm94eUNhbGxVdGlsLmNyZWF0ZUNhbGxQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChleGNlcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9leHRlbmRcIik7XG5jb25zdCBmdW5jdGlvblRvU3RyaW5nID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2Z1bmN0aW9uLXRvLXN0cmluZ1wiKTtcbmNvbnN0IHByb3h5Q2FsbCA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGxcIik7XG5jb25zdCBwcm94eUNhbGxVdGlsID0gcmVxdWlyZShcIi4vcHJveHktY2FsbC11dGlsXCIpO1xuY29uc3QgcHJveHlJbnZva2UgPSByZXF1aXJlKFwiLi9wcm94eS1pbnZva2VcIik7XG5jb25zdCBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcblxuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbmNvbnN0IGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG5jb25zdCBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbmNvbnN0IGVtcHR5RmFrZXMgPSBPYmplY3QuZnJlZXplKFtdKTtcblxuLy8gUHVibGljIEFQSVxuY29uc3QgcHJveHlBcGkgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uVG9TdHJpbmcsXG5cbiAgICBuYW1lZDogZnVuY3Rpb24gbmFtZWQobmFtZSkge1xuICAgICAgICB0aGlzLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgY29uc3QgbmFtZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFwibmFtZVwiKTtcbiAgICAgICAgaWYgKG5hbWVEZXNjcmlwdG9yICYmIG5hbWVEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgLy8gSUUgMTEgZnVuY3Rpb25zIGRvbid0IGhhdmUgYSBuYW1lLlxuICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIG5hbWVzIHRoYXQgYXJlIG5vdCBjb25maWd1cmFibGUuXG4gICAgICAgICAgICBuYW1lRGVzY3JpcHRvci52YWx1ZSA9IG5hbWU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsIG5hbWVEZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgaW52b2tlOiBwcm94eUludm9rZSxcblxuICAgIC8qXG4gICAgICogSG9vayBmb3IgZGVyaXZlZCBpbXBsZW1lbnRhdGlvbiB0byByZXR1cm4gZmFrZSBpbnN0YW5jZXMgbWF0Y2hpbmcgdGhlXG4gICAgICogZ2l2ZW4gYXJndW1lbnRzLlxuICAgICAqL1xuICAgIG1hdGNoaW5nRmFrZXM6IGZ1bmN0aW9uICgvKmFyZ3MsIHN0cmljdCovKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUZha2VzO1xuICAgIH0sXG5cbiAgICBnZXRDYWxsOiBmdW5jdGlvbiBnZXRDYWxsKGluZGV4KSB7XG4gICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgaW5kaWNlcyBtZWFucyBjb3VudGluZyBiYWNrd2FyZHMgZnJvbSB0aGUgbGFzdCBjYWxsXG4gICAgICAgICAgICBpICs9IHRoaXMuY2FsbENvdW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgMCB8fCBpID49IHRoaXMuY2FsbENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm94eUNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy50aGlzVmFsdWVzW2ldLFxuICAgICAgICAgICAgdGhpcy5hcmdzW2ldLFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNbaV0sXG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbnNbaV0sXG4gICAgICAgICAgICB0aGlzLmNhbGxJZHNbaV0sXG4gICAgICAgICAgICB0aGlzLmVycm9yc1dpdGhDYWxsU3RhY2tbaV0sXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGdldENhbGxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNhbGxzID0gW107XG4gICAgICAgIGxldCBpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNhbGxDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBwdXNoKGNhbGxzLCB0aGlzLmdldENhbGwoaSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxzO1xuICAgIH0sXG5cbiAgICBjYWxsZWRCZWZvcmU6IGZ1bmN0aW9uIGNhbGxlZEJlZm9yZShwcm94eSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb3h5LmNhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWRzWzBdIDwgcHJveHkuY2FsbElkc1twcm94eS5jYWxsSWRzLmxlbmd0aCAtIDFdO1xuICAgIH0sXG5cbiAgICBjYWxsZWRBZnRlcjogZnVuY3Rpb24gY2FsbGVkQWZ0ZXIocHJveHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxlZCB8fCAhcHJveHkuY2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWRzW3RoaXMuY2FsbENvdW50IC0gMV0gPiBwcm94eS5jYWxsSWRzWzBdO1xuICAgIH0sXG5cbiAgICBjYWxsZWRJbW1lZGlhdGVseUJlZm9yZTogZnVuY3Rpb24gY2FsbGVkSW1tZWRpYXRlbHlCZWZvcmUocHJveHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxlZCB8fCAhcHJveHkuY2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5jYWxsSWRzW3RoaXMuY2FsbENvdW50IC0gMV0gPT09XG4gICAgICAgICAgICBwcm94eS5jYWxsSWRzW3Byb3h5LmNhbGxDb3VudCAtIDFdIC0gMVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBjYWxsZWRJbW1lZGlhdGVseUFmdGVyOiBmdW5jdGlvbiBjYWxsZWRJbW1lZGlhdGVseUFmdGVyKHByb3h5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsZWQgfHwgIXByb3h5LmNhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuY2FsbElkc1t0aGlzLmNhbGxDb3VudCAtIDFdID09PVxuICAgICAgICAgICAgcHJveHkuY2FsbElkc1twcm94eS5jYWxsQ291bnQgLSAxXSArIDFcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgZm9ybWF0dGVyczogcmVxdWlyZShcIi4vc3B5LWZvcm1hdHRlcnNcIiksXG4gICAgcHJpbnRmOiBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIGNvbnN0IHNweUluc3RhbmNlID0gdGhpcztcbiAgICAgICAgY29uc3QgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGxldCBmb3JtYXR0ZXI7XG5cbiAgICAgICAgcmV0dXJuIChmb3JtYXQgfHwgXCJcIikucmVwbGFjZSgvJSguKS9nLCBmdW5jdGlvbiAobWF0Y2gsIHNwZWNpZmllcikge1xuICAgICAgICAgICAgZm9ybWF0dGVyID0gcHJveHlBcGkuZm9ybWF0dGVyc1tzcGVjaWZpZXJdO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtYXR0ZXIoc3B5SW5zdGFuY2UsIGFyZ3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KHNwZWNpZmllciwgMTApKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnNwZWN0KGFyZ3Nbc3BlY2lmaWVyIC0gMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYCUke3NwZWNpZmllcn1gO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVzZXRIaXN0b3J5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmludm9raW5nKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVzZXQgU2lub24gZnVuY3Rpb24gd2hpbGUgaW52b2tpbmcgaXQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJNb3ZlIHRoZSBjYWxsIHRvIC5yZXNldEhpc3Rvcnkgb3V0c2lkZSBvZiB0aGUgY2FsbGJhY2suXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSBcIkludmFsaWRSZXNldEV4Y2VwdGlvblwiO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RDYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYWxsZWRUd2ljZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGxlZFRocmljZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuZmlyc3RDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWNvbmRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy50aGlyZENhbGwgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcmdzID0gW107XG4gICAgICAgIHRoaXMuZmlyc3RBcmcgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RBcmcgPSBudWxsO1xuICAgICAgICB0aGlzLnJldHVyblZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLnRoaXNWYWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5leGNlcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY2FsbElkcyA9IFtdO1xuICAgICAgICB0aGlzLmVycm9yc1dpdGhDYWxsU3RhY2sgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5mYWtlcykge1xuICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmZha2VzLCBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICAgICAgICAgIGZha2UucmVzZXRIaXN0b3J5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG59O1xuXG5jb25zdCBkZWxlZ2F0ZVRvQ2FsbHMgPSBwcm94eUNhbGxVdGlsLmRlbGVnYXRlVG9DYWxscztcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJjYWxsZWRPblwiLCB0cnVlKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJhbHdheXNDYWxsZWRPblwiLCBmYWxzZSwgXCJjYWxsZWRPblwiKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJjYWxsZWRXaXRoXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5QXBpLFxuICAgIFwiY2FsbGVkT25jZVdpdGhcIixcbiAgICB0cnVlLFxuICAgIFwiY2FsbGVkV2l0aFwiLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxLFxuKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJjYWxsZWRXaXRoTWF0Y2hcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiYWx3YXlzQ2FsbGVkV2l0aFwiLCBmYWxzZSwgXCJjYWxsZWRXaXRoXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c0NhbGxlZFdpdGhNYXRjaFwiLCBmYWxzZSwgXCJjYWxsZWRXaXRoTWF0Y2hcIik7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiY2FsbGVkV2l0aEV4YWN0bHlcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJjYWxsZWRPbmNlV2l0aEV4YWN0bHlcIixcbiAgICB0cnVlLFxuICAgIFwiY2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICBmYWxzZSxcbiAgICB1bmRlZmluZWQsXG4gICAgMSxcbik7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJjYWxsZWRPbmNlV2l0aE1hdGNoXCIsXG4gICAgdHJ1ZSxcbiAgICBcImNhbGxlZFdpdGhNYXRjaFwiLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxLFxuKTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eUFwaSxcbiAgICBcImFsd2F5c0NhbGxlZFdpdGhFeGFjdGx5XCIsXG4gICAgZmFsc2UsXG4gICAgXCJjYWxsZWRXaXRoRXhhY3RseVwiLFxuKTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eUFwaSxcbiAgICBcIm5ldmVyQ2FsbGVkV2l0aFwiLFxuICAgIGZhbHNlLFxuICAgIFwibm90Q2FsbGVkV2l0aFwiLFxuICAgIGZhbHNlLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbik7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJuZXZlckNhbGxlZFdpdGhNYXRjaFwiLFxuICAgIGZhbHNlLFxuICAgIFwibm90Q2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgZmFsc2UsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJ0aHJld1wiLCB0cnVlKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJhbHdheXNUaHJld1wiLCBmYWxzZSwgXCJ0aHJld1wiKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJyZXR1cm5lZFwiLCB0cnVlKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJhbHdheXNSZXR1cm5lZFwiLCBmYWxzZSwgXCJyZXR1cm5lZFwiKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJjYWxsZWRXaXRoTmV3XCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c0NhbGxlZFdpdGhOZXdcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aE5ld1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlUHJveHkoZnVuYywgb3JpZ2luYWxGdW5jKSB7XG4gICAgY29uc3QgcHJveHkgPSB3cmFwRnVuY3Rpb24oZnVuYywgb3JpZ2luYWxGdW5jKTtcblxuICAgIC8vIEluaGVyaXQgZnVuY3Rpb24gcHJvcGVydGllczpcbiAgICBleHRlbmQocHJveHksIGZ1bmMpO1xuXG4gICAgcHJveHkucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XG5cbiAgICBleHRlbmQubm9uRW51bShwcm94eSwgcHJveHlBcGkpO1xuXG4gICAgcmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiB3cmFwRnVuY3Rpb24oZnVuYywgb3JpZ2luYWxGdW5jKSB7XG4gICAgY29uc3QgYXJpdHkgPSBvcmlnaW5hbEZ1bmMubGVuZ3RoO1xuICAgIGxldCBwO1xuICAgIC8vIERvIG5vdCBjaGFuZ2UgdGhpcyB0byB1c2UgYW4gZXZhbC4gUHJvamVjdHMgdGhhdCBkZXBlbmQgb24gc2lub24gYmxvY2sgdGhlIHVzZSBvZiBldmFsLlxuICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Npbm9uanMvc2lub24vaXNzdWVzLzcxMFxuICAgIHN3aXRjaCAoYXJpdHkpIHtcbiAgICAgICAgLyplc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycywgbWF4LWxlbiovXG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZywgaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvKmVzbGludC1lbmFibGUqL1xuICAgIH1cbiAgICBjb25zdCBuYW1lRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgIG9yaWdpbmFsRnVuYyxcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgKTtcbiAgICBpZiAobmFtZURlc2NyaXB0b3IgJiYgbmFtZURlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIC8vIElFIDExIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGEgbmFtZS5cbiAgICAgICAgLy8gU2FmYXJpIDkgaGFzIG5hbWVzIHRoYXQgYXJlIG5vdCBjb25maWd1cmFibGUuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcIm5hbWVcIiwgbmFtZURlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBleHRlbmQubm9uRW51bShwLCB7XG4gICAgICAgIGlzU2lub25Qcm94eTogdHJ1ZSxcblxuICAgICAgICBjYWxsZWQ6IGZhbHNlLFxuICAgICAgICBub3RDYWxsZWQ6IHRydWUsXG4gICAgICAgIGNhbGxlZE9uY2U6IGZhbHNlLFxuICAgICAgICBjYWxsZWRUd2ljZTogZmFsc2UsXG4gICAgICAgIGNhbGxlZFRocmljZTogZmFsc2UsXG4gICAgICAgIGNhbGxDb3VudDogMCxcbiAgICAgICAgZmlyc3RDYWxsOiBudWxsLFxuICAgICAgICBmaXJzdEFyZzogbnVsbCxcbiAgICAgICAgc2Vjb25kQ2FsbDogbnVsbCxcbiAgICAgICAgdGhpcmRDYWxsOiBudWxsLFxuICAgICAgICBsYXN0Q2FsbDogbnVsbCxcbiAgICAgICAgbGFzdEFyZzogbnVsbCxcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIHJldHVyblZhbHVlczogW10sXG4gICAgICAgIHRoaXNWYWx1ZXM6IFtdLFxuICAgICAgICBleGNlcHRpb25zOiBbXSxcbiAgICAgICAgY2FsbElkczogW10sXG4gICAgICAgIGVycm9yc1dpdGhDYWxsU3RhY2s6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVByb3h5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHdhbGtPYmplY3QgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd2Fsay1vYmplY3RcIik7XG5cbmZ1bmN0aW9uIGZpbHRlcihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eV0ucmVzdG9yZSAmJiBvYmplY3RbcHJvcGVydHldLnJlc3RvcmUuc2lub247XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmUob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIG9iamVjdFtwcm9wZXJ0eV0ucmVzdG9yZSgpO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlT2JqZWN0KG9iamVjdCkge1xuICAgIHJldHVybiB3YWxrT2JqZWN0KHJlc3RvcmUsIG9iamVjdCwgZmlsdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXN0b3JlT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZGVwcmVjYXRlZDtcbmNvbnN0IGNvbGxlY3RPd25NZXRob2RzID0gcmVxdWlyZShcIi4vY29sbGVjdC1vd24tbWV0aG9kc1wiKTtcbmNvbnN0IGdldFByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbmNvbnN0IGlzUHJvcGVydHlDb25maWd1cmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcHJvcGVydHktY29uZmlndXJhYmxlXCIpO1xuY29uc3QgbWF0Y2ggPSByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmNyZWF0ZU1hdGNoZXI7XG5jb25zdCBzaW5vbkFzc2VydCA9IHJlcXVpcmUoXCIuL2Fzc2VydFwiKTtcbmNvbnN0IHNpbm9uQ2xvY2sgPSByZXF1aXJlKFwiLi91dGlsL2Zha2UtdGltZXJzXCIpO1xuY29uc3Qgc2lub25Nb2NrID0gcmVxdWlyZShcIi4vbW9ja1wiKTtcbmNvbnN0IHNpbm9uU3B5ID0gcmVxdWlyZShcIi4vc3B5XCIpO1xuY29uc3Qgc2lub25TdHViID0gcmVxdWlyZShcIi4vc3R1YlwiKTtcbmNvbnN0IHNpbm9uQ3JlYXRlU3R1Ykluc3RhbmNlID0gcmVxdWlyZShcIi4vY3JlYXRlLXN0dWItaW5zdGFuY2VcIik7XG5jb25zdCBzaW5vbkZha2UgPSByZXF1aXJlKFwiLi9mYWtlXCIpO1xuY29uc3QgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5jb25zdCBmYWtlU2VydmVyID0gcmVxdWlyZShcIm5pc2VcIikuZmFrZVNlcnZlcjtcbmNvbnN0IGZha2VYaHIgPSByZXF1aXJlKFwibmlzZVwiKS5mYWtlWGhyO1xuY29uc3QgdXNlUHJvbWlzZUxpYnJhcnkgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvdXNlLXByb21pc2UtbGlicmFyeVwiKTtcblxuY29uc3QgREVGQVVMVF9MRUFLX1RIUkVTSE9MRCA9IDEwMDAwO1xuXG5jb25zdCBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbmNvbnN0IGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG5jb25zdCBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuY29uc3QgcmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTtcblxuZnVuY3Rpb24gYXBwbHlPbkVhY2goZmFrZXMsIG1ldGhvZCkge1xuICAgIGNvbnN0IG1hdGNoaW5nRmFrZXMgPSBmaWx0ZXIoZmFrZXMsIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZmFrZVttZXRob2RdID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKG1hdGNoaW5nRmFrZXMsIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgIGZha2VbbWV0aG9kXSgpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uQWNjZXNzb3JzKGRlc2NyaXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXNlIHNhbmRib3gucmVwbGFjZUdldHRlciBmb3IgcmVwbGFjaW5nIGdldHRlcnNcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnNldCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVzZSBzYW5kYm94LnJlcGxhY2VTZXR0ZXIgZm9yIHJlcGxhY2luZyBzZXR0ZXJzXCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdmVyaWZ5U2FtZVR5cGUob2JqZWN0LCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIG9iamVjdFtwcm9wZXJ0eV0gIT09IHR5cGVvZiByZXBsYWNlbWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlICR7dHlwZW9mIG9iamVjdFtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgXX0gd2l0aCAke3R5cGVvZiByZXBsYWNlbWVudH1gLFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JWYWxpZEFyZ3VtZW50cyhkZXNjcmlwdG9yLCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVwbGFjZSBub24tZXhpc3RlbnQgcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgKX0uIFBlcmhhcHMgeW91IG1lYW50IHNhbmRib3guZGVmaW5lKCk/YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCByZXBsYWNlbWVudCBhcmd1bWVudCB0byBiZSBkZWZpbmVkXCIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHNpbm9uIHNhbmRib3hcbiAqXG4gKiBAcGFyYW0gb3B0c1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmFzc2VydE9wdGlvbnNdIHNlZSB0aGUgQ3JlYXRlQXNzZXJ0T3B0aW9ucyBpbiAuL2Fzc2VydFxuICogQGNsYXNzXG4gKi9cbmZ1bmN0aW9uIFNhbmRib3gob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHRoaXM7XG4gICAgY29uc3QgYXNzZXJ0T3B0aW9ucyA9IG9wdHMuYXNzZXJ0T3B0aW9ucyB8fCB7fTtcbiAgICBsZXQgZmFrZVJlc3RvcmVycyA9IFtdO1xuICAgIGxldCBwcm9taXNlTGliO1xuXG4gICAgbGV0IGNvbGxlY3Rpb24gPSBbXTtcbiAgICBsZXQgbG9nZ2VkTGVha1dhcm5pbmcgPSBmYWxzZTtcbiAgICBzYW5kYm94LmxlYWtUaHJlc2hvbGQgPSBERUZBVUxUX0xFQUtfVEhSRVNIT0xEO1xuXG4gICAgZnVuY3Rpb24gYWRkVG9Db2xsZWN0aW9uKG9iamVjdCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwdXNoKGNvbGxlY3Rpb24sIG9iamVjdCkgPiBzYW5kYm94LmxlYWtUaHJlc2hvbGQgJiZcbiAgICAgICAgICAgICFsb2dnZWRMZWFrV2FybmluZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBsb2dnZXIucHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAgIFwiUG90ZW50aWFsIG1lbW9yeSBsZWFrIGRldGVjdGVkOyBiZSBzdXJlIHRvIGNhbGwgcmVzdG9yZSgpIHRvIGNsZWFuIHVwIHlvdXIgc2FuZGJveC4gVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nLCBtb2RpZnkgdGhlIGxlYWtUaHJlc2hvbGQgcHJvcGVydHkgb2YgeW91ciBzYW5kYm94LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvZ2dlZExlYWtXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhbmRib3guYXNzZXJ0ID0gc2lub25Bc3NlcnQuY3JlYXRlQXNzZXJ0T2JqZWN0KGFzc2VydE9wdGlvbnMpO1xuXG4gICAgc2FuZGJveC5zZXJ2ZXJQcm90b3R5cGUgPSBmYWtlU2VydmVyO1xuXG4gICAgLy8gdGhpcyBpcyBmb3IgdGVzdGluZyBvbmx5XG4gICAgc2FuZGJveC5nZXRGYWtlcyA9IGZ1bmN0aW9uIGdldEZha2VzKCkge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5jcmVhdGVTdHViSW5zdGFuY2UgPSBmdW5jdGlvbiBjcmVhdGVTdHViSW5zdGFuY2UoKSB7XG4gICAgICAgIGNvbnN0IHN0dWJiZWQgPSBzaW5vbkNyZWF0ZVN0dWJJbnN0YW5jZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIGNvbnN0IG93bk1ldGhvZHMgPSBjb2xsZWN0T3duTWV0aG9kcyhzdHViYmVkKTtcblxuICAgICAgICBmb3JFYWNoKG93bk1ldGhvZHMsIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihtZXRob2QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1c2VQcm9taXNlTGlicmFyeShwcm9taXNlTGliLCBvd25NZXRob2RzKTtcblxuICAgICAgICByZXR1cm4gc3R1YmJlZDtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5pbmplY3QgPSBmdW5jdGlvbiBpbmplY3Qob2JqKSB7XG4gICAgICAgIG9iai5zcHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5zcHkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmouc3R1YiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnN0dWIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmoubW9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94Lm1vY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmouY3JlYXRlU3R1Ykluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3guY3JlYXRlU3R1Ykluc3RhbmNlLmFwcGx5KHNhbmRib3gsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqLmZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5mYWtlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqLmRlZmluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LmRlZmluZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5yZXBsYWNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3gucmVwbGFjZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5yZXBsYWNlU2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3gucmVwbGFjZVNldHRlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5yZXBsYWNlR2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3gucmVwbGFjZUdldHRlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzYW5kYm94LmNsb2NrKSB7XG4gICAgICAgICAgICBvYmouY2xvY2sgPSBzYW5kYm94LmNsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNhbmRib3guc2VydmVyKSB7XG4gICAgICAgICAgICBvYmouc2VydmVyID0gc2FuZGJveC5zZXJ2ZXI7XG4gICAgICAgICAgICBvYmoucmVxdWVzdHMgPSBzYW5kYm94LnNlcnZlci5yZXF1ZXN0cztcbiAgICAgICAgfVxuXG4gICAgICAgIG9iai5tYXRjaCA9IG1hdGNoO1xuXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcblxuICAgIHNhbmRib3gubW9jayA9IGZ1bmN0aW9uIG1vY2soKSB7XG4gICAgICAgIGNvbnN0IG0gPSBzaW5vbk1vY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcblxuICAgICAgICBhZGRUb0NvbGxlY3Rpb24obSk7XG4gICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIG0pO1xuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwicmVzZXRcIik7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwicmVzZXRIaXN0b3J5XCIpO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlc2V0QmVoYXZpb3IgPSBmdW5jdGlvbiByZXNldEJlaGF2aW9yKCkge1xuICAgICAgICBhcHBseU9uRWFjaChjb2xsZWN0aW9uLCBcInJlc2V0QmVoYXZpb3JcIik7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzZXRIaXN0b3J5ID0gZnVuY3Rpb24gcmVzZXRIaXN0b3J5KCkge1xuICAgICAgICBmdW5jdGlvbiBwcml2YXRlUmVzZXRIaXN0b3J5KGYpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGYucmVzZXRIaXN0b3J5IHx8IGYucmVzZXQ7XG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwoZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKGNvbGxlY3Rpb24sIHByaXZhdGVSZXNldEhpc3RvcnkpO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwic2FuZGJveC5yZXN0b3JlKCkgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycy4gUGVyaGFwcyB5b3UgbWVhbnQgc3R1Yi5yZXN0b3JlKClcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXZlcnNlKGNvbGxlY3Rpb24pO1xuICAgICAgICBhcHBseU9uRWFjaChjb2xsZWN0aW9uLCBcInJlc3RvcmVcIik7XG4gICAgICAgIGNvbGxlY3Rpb24gPSBbXTtcblxuICAgICAgICBmb3JFYWNoKGZha2VSZXN0b3JlcnMsIGZ1bmN0aW9uIChyZXN0b3Jlcikge1xuICAgICAgICAgICAgcmVzdG9yZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZha2VSZXN0b3JlcnMgPSBbXTtcblxuICAgICAgICBzYW5kYm94LnJlc3RvcmVDb250ZXh0KCk7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzdG9yZUNvbnRleHQgPSBmdW5jdGlvbiByZXN0b3JlQ29udGV4dCgpIHtcbiAgICAgICAgaWYgKCFzYW5kYm94LmluamVjdGVkS2V5cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yRWFjaChzYW5kYm94LmluamVjdGVkS2V5cywgZnVuY3Rpb24gKGluamVjdGVkS2V5KSB7XG4gICAgICAgICAgICBkZWxldGUgc2FuZGJveC5pbmplY3RJbnRvW2luamVjdGVkS2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2FuZGJveC5pbmplY3RlZEtleXMubGVuZ3RoID0gMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlc3RvcmVyIGZ1bmN0aW9uIGZvciB0aGUgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlQXNzaWdubWVudFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gcmVzdG9yZXIgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRGYWtlUmVzdG9yZXIob2JqZWN0LCBwcm9wZXJ0eSwgZm9yY2VBc3NpZ25tZW50ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JjZUFzc2lnbm1lbnQgJiYgb2JqZWN0W3Byb3BlcnR5XTtcblxuICAgICAgICBmdW5jdGlvbiByZXN0b3JlcigpIHtcbiAgICAgICAgICAgIGlmIChmb3JjZUFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3I/LmlzT3duKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3RvcmVyLm9iamVjdCA9IG9iamVjdDtcbiAgICAgICAgcmVzdG9yZXIucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeU5vdFJlcGxhY2VkKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgZm9yRWFjaChmYWtlUmVzdG9yZXJzLCBmdW5jdGlvbiAoZmFrZVJlc3RvcmVyKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmFrZVJlc3RvcmVyLm9iamVjdCA9PT0gb2JqZWN0ICYmXG4gICAgICAgICAgICAgICAgZmFrZVJlc3RvcmVyLnByb3BlcnR5ID09PSBwcm9wZXJ0eVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXBsYWNlICR7cHJvcGVydHl9IHdoaWNoIGlzIGFscmVhZHkgcmVwbGFjZWRgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgYW4gZXhpc3RpbmcgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAgICAgKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50IGEgZmFrZSwgc3R1Yiwgc3B5IG9yIGFueSBvdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqL1xuICAgIHNhbmRib3gucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uob2JqZWN0LCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgY2hlY2tGb3JWYWxpZEFyZ3VtZW50cyhkZXNjcmlwdG9yLCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB0aHJvd09uQWNjZXNzb3JzKGRlc2NyaXB0b3IpO1xuICAgICAgICB2ZXJpZnlTYW1lVHlwZShvYmplY3QsIHByb3BlcnR5LCByZXBsYWNlbWVudCk7XG5cbiAgICAgICAgdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSBmdW5jdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXBsYWNlZCBwcm9wZXJ0eVxuICAgICAgICBwdXNoKGZha2VSZXN0b3JlcnMsIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5KSk7XG5cbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXBsYWNlLnVzaW5nQWNjZXNzb3IgPSBmdW5jdGlvbiByZXBsYWNlVXNpbmdBY2Nlc3NvcihcbiAgICAgICAgb2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgIGNoZWNrRm9yVmFsaWRBcmd1bWVudHMoZGVzY3JpcHRvciwgcHJvcGVydHksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgdmVyaWZ5U2FtZVR5cGUob2JqZWN0LCBwcm9wZXJ0eSwgcmVwbGFjZW1lbnQpO1xuXG4gICAgICAgIHZlcmlmeU5vdFJlcGxhY2VkKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgZnVuY3Rpb24gZm9yIHJlc3RvcmluZyB0aGUgcmVwbGFjZWQgcHJvcGVydHlcbiAgICAgICAgcHVzaChmYWtlUmVzdG9yZXJzLCBnZXRGYWtlUmVzdG9yZXIob2JqZWN0LCBwcm9wZXJ0eSwgdHJ1ZSkpO1xuXG4gICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSByZXBsYWNlbWVudDtcblxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgfTtcblxuICAgIHNhbmRib3guZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iamVjdCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCBkZWZpbmUgdGhlIGFscmVhZHkgZXhpc3RpbmcgcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICApfS4gUGVyaGFwcyB5b3UgbWVhbnQgc2FuZGJveC5yZXBsYWNlKCk/YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgdmFsdWUgYXJndW1lbnQgdG8gYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZlcmlmeU5vdFJlcGxhY2VkKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgZnVuY3Rpb24gZm9yIHJlc3RvcmluZyB0aGUgZGVmaW5lZCBwcm9wZXJ0eVxuICAgICAgICBwdXNoKGZha2VSZXN0b3JlcnMsIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5KSk7XG5cbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXBsYWNlR2V0dGVyID0gZnVuY3Rpb24gcmVwbGFjZUdldHRlcihcbiAgICAgICAgb2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBDYW5ub3QgcmVwbGFjZSBub24tZXhpc3RlbnQgcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVwbGFjZW1lbnQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG9iamVjdC5wcm9wZXJ0eWAgaXMgbm90IGEgZ2V0dGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSBmdW5jdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXBsYWNlZCBwcm9wZXJ0eVxuICAgICAgICBwdXNoKGZha2VSZXN0b3JlcnMsIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5KSk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcbiAgICAgICAgICAgIGdldDogcmVwbGFjZW1lbnQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGlzUHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wZXJ0eSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXBsYWNlU2V0dGVyID0gZnVuY3Rpb24gcmVwbGFjZVNldHRlcihcbiAgICAgICAgb2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBDYW5ub3QgcmVwbGFjZSBub24tZXhpc3RlbnQgcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVwbGFjZW1lbnQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG9iamVjdC5wcm9wZXJ0eWAgaXMgbm90IGEgc2V0dGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSBmdW5jdGlvbiBmb3IgcmVzdG9yaW5nIHRoZSByZXBsYWNlZCBwcm9wZXJ0eVxuICAgICAgICBwdXNoKGZha2VSZXN0b3JlcnMsIGdldEZha2VSZXN0b3JlcihvYmplY3QsIHByb3BlcnR5KSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFjY2Vzc29yLXBhaXJzXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICBzZXQ6IHJlcGxhY2VtZW50LFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBpc1Byb3BlcnR5Q29uZmlndXJhYmxlKG9iamVjdCwgcHJvcGVydHkpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblBvc3RJbml0U2V0dXAoYXJncywgc3B5KSB7XG4gICAgICAgIGNvbnN0IFtvYmplY3QsIHByb3BlcnR5LCB0eXBlc10gPSBhcmdzO1xuXG4gICAgICAgIGNvbnN0IGlzU3B5aW5nT25FbnRpcmVPYmplY3QgPVxuICAgICAgICAgICAgdHlwZW9mIHByb3BlcnR5ID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCI7XG5cbiAgICAgICAgaWYgKGlzU3B5aW5nT25FbnRpcmVPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bk1ldGhvZHMgPSBjb2xsZWN0T3duTWV0aG9kcyhzcHkpO1xuXG4gICAgICAgICAgICBmb3JFYWNoKG93bk1ldGhvZHMsIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICBhZGRUb0NvbGxlY3Rpb24obWV0aG9kKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB1c2VQcm9taXNlTGlicmFyeShwcm9taXNlTGliLCBvd25NZXRob2RzKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhY2Nlc3NvclR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICAgICAgICBhZGRUb0NvbGxlY3Rpb24oc3B5W2FjY2Vzc29yVHlwZV0pO1xuICAgICAgICAgICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIHNweVthY2Nlc3NvclR5cGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihzcHkpO1xuICAgICAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkocHJvbWlzZUxpYiwgc3B5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcHk7XG4gICAgfVxuXG4gICAgc2FuZGJveC5zcHkgPSBmdW5jdGlvbiBzcHkoKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRTcHkgPSBzaW5vblNweS5hcHBseShzaW5vblNweSwgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vblBvc3RJbml0U2V0dXAoYXJndW1lbnRzLCBjcmVhdGVkU3B5KTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5zdHViID0gZnVuY3Rpb24gc3R1YigpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZFN0dWIgPSBzaW5vblN0dWIuYXBwbHkoc2lub25TdHViLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY29tbW9uUG9zdEluaXRTZXR1cChhcmd1bWVudHMsIGNyZWF0ZWRTdHViKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgc2FuZGJveC5mYWtlID0gZnVuY3Rpb24gZmFrZShmKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzaW5vbkZha2UuYXBwbHkoc2lub25GYWtlLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIGFkZFRvQ29sbGVjdGlvbihzKTtcblxuICAgICAgICByZXR1cm4gcztcbiAgICB9O1xuXG4gICAgZm9yRWFjaChPYmplY3Qua2V5cyhzaW5vbkZha2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IGZha2VCZWhhdmlvciA9IHNpbm9uRmFrZVtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIGZha2VCZWhhdmlvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBzYW5kYm94LmZha2Vba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZmFrZUJlaGF2aW9yLmFwcGx5KGZha2VCZWhhdmlvciwgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2FuZGJveC51c2VGYWtlVGltZXJzID0gZnVuY3Rpb24gdXNlRmFrZVRpbWVycyhhcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gc2lub25DbG9jay51c2VGYWtlVGltZXJzLmNhbGwobnVsbCwgYXJncyk7XG5cbiAgICAgICAgc2FuZGJveC5jbG9jayA9IGNsb2NrO1xuICAgICAgICBhZGRUb0NvbGxlY3Rpb24oY2xvY2spO1xuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9O1xuXG4gICAgc2FuZGJveC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkoKSB7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwidmVyaWZ5XCIpO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnZlcmlmeUFuZFJlc3RvcmUgPSBmdW5jdGlvbiB2ZXJpZnlBbmRSZXN0b3JlKCkge1xuICAgICAgICBsZXQgZXhjZXB0aW9uO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzYW5kYm94LnZlcmlmeSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBleGNlcHRpb24gPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG5cbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNhbmRib3gudXNlRmFrZVNlcnZlciA9IGZ1bmN0aW9uIHVzZUZha2VTZXJ2ZXIoKSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gc2FuZGJveC5zZXJ2ZXJQcm90b3R5cGUgfHwgZmFrZVNlcnZlcjtcblxuICAgICAgICBpZiAoIXByb3RvIHx8ICFwcm90by5jcmVhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgc2FuZGJveC5zZXJ2ZXIgPSBwcm90by5jcmVhdGUoKTtcbiAgICAgICAgYWRkVG9Db2xsZWN0aW9uKHNhbmRib3guc2VydmVyKTtcblxuICAgICAgICByZXR1cm4gc2FuZGJveC5zZXJ2ZXI7XG4gICAgfTtcblxuICAgIHNhbmRib3gudXNlRmFrZVhNTEh0dHBSZXF1ZXN0ID0gZnVuY3Rpb24gdXNlRmFrZVhNTEh0dHBSZXF1ZXN0KCkge1xuICAgICAgICBjb25zdCB4aHIgPSBmYWtlWGhyLnVzZUZha2VYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBhZGRUb0NvbGxlY3Rpb24oeGhyKTtcbiAgICAgICAgcmV0dXJuIHhocjtcbiAgICB9O1xuXG4gICAgc2FuZGJveC51c2luZ1Byb21pc2UgPSBmdW5jdGlvbiB1c2luZ1Byb21pc2UocHJvbWlzZUxpYnJhcnkpIHtcbiAgICAgICAgcHJvbWlzZUxpYiA9IHByb21pc2VMaWJyYXJ5O1xuICAgICAgICBjb2xsZWN0aW9uLnByb21pc2VMaWJyYXJ5ID0gcHJvbWlzZUxpYnJhcnk7XG5cbiAgICAgICAgcmV0dXJuIHNhbmRib3g7XG4gICAgfTtcbn1cblxuU2FuZGJveC5wcm90b3R5cGUubWF0Y2ggPSBtYXRjaDtcblxubW9kdWxlLmV4cG9ydHMgPSBTYW5kYm94O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgQ29sb3JpemVyID0gcmVxdWlyZShcIi4vY29sb3JpemVyXCIpO1xuY29uc3QgY29sb3Jvcml6ZXIgPSBuZXcgQ29sb3JpemVyKCk7XG5jb25zdCBtYXRjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbmNvbnN0IHRpbWVzSW5Xb3JkcyA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkc1wiKTtcbmNvbnN0IGluc3BlY3QgPSByZXF1aXJlKFwidXRpbFwiKS5pbnNwZWN0O1xuY29uc3QganNEaWZmID0gcmVxdWlyZShcImRpZmZcIik7XG5cbmNvbnN0IGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG5jb25zdCBtYXAgPSBhcnJheVByb3RvLm1hcDtcbmNvbnN0IHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5jb25zdCBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBtYXRjaGVyXG4gKiBAcGFyYW0gY2FsbGVkQXJnXG4gKiBAcGFyYW0gY2FsbGVkQXJnTWVzc2FnZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBjb2xvcmVkIHRleHRcbiAqL1xuZnVuY3Rpb24gY29sb3JTaW5vbk1hdGNoVGV4dChtYXRjaGVyLCBjYWxsZWRBcmcsIGNhbGxlZEFyZ01lc3NhZ2UpIHtcbiAgICBsZXQgY2FsbGVkQXJndW1lbnRNZXNzYWdlID0gY2FsbGVkQXJnTWVzc2FnZTtcbiAgICBsZXQgbWF0Y2hlck1lc3NhZ2UgPSBtYXRjaGVyLm1lc3NhZ2U7XG4gICAgaWYgKCFtYXRjaGVyLnRlc3QoY2FsbGVkQXJnKSkge1xuICAgICAgICBtYXRjaGVyTWVzc2FnZSA9IGNvbG9yb3JpemVyLnJlZChtYXRjaGVyLm1lc3NhZ2UpO1xuICAgICAgICBpZiAoY2FsbGVkQXJndW1lbnRNZXNzYWdlKSB7XG4gICAgICAgICAgICBjYWxsZWRBcmd1bWVudE1lc3NhZ2UgPSBjb2xvcm9yaXplci5ncmVlbihjYWxsZWRBcmd1bWVudE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtjYWxsZWRBcmd1bWVudE1lc3NhZ2V9ICR7bWF0Y2hlck1lc3NhZ2V9YDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gZGlmZlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBjb2xvcmVkIGRpZmZcbiAqL1xuZnVuY3Rpb24gY29sb3JEaWZmVGV4dChkaWZmKSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IG1hcChkaWZmLCBmdW5jdGlvbiAocGFydCkge1xuICAgICAgICBsZXQgdGV4dCA9IHBhcnQudmFsdWU7XG4gICAgICAgIGlmIChwYXJ0LmFkZGVkKSB7XG4gICAgICAgICAgICB0ZXh0ID0gY29sb3Jvcml6ZXIuZ3JlZW4odGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFydC5yZW1vdmVkKSB7XG4gICAgICAgICAgICB0ZXh0ID0gY29sb3Jvcml6ZXIucmVkKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWZmLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGV4dCArPSBcIiBcIjsgLy8gZm9ybWF0IHNpbXBsZSBkaWZmc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH0pO1xuICAgIHJldHVybiBqb2luKG9iamVjdHMsIFwiXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGEgcXVvdGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBxdW90ZVN0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGM6IGZ1bmN0aW9uIChzcHlJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdGltZXNJbldvcmRzKHNweUluc3RhbmNlLmNhbGxDb3VudCk7XG4gICAgfSxcblxuICAgIG46IGZ1bmN0aW9uIChzcHlJbnN0YW5jZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgcmV0dXJuIHNweUluc3RhbmNlLnRvU3RyaW5nKCk7XG4gICAgfSxcblxuICAgIEQ6IGZ1bmN0aW9uIChzcHlJbnN0YW5jZSwgYXJncykge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IFwiXCI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBzcHlJbnN0YW5jZS5jYWxsQ291bnQ7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGRlc2NyaWJlIG11bHRpcGxlIGNhbGxzXG4gICAgICAgICAgICBpZiAobCA+IDEpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXG5DYWxsICR7aSArIDF9OmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYWxsZWRBcmdzID0gc3B5SW5zdGFuY2UuZ2V0Q2FsbChpKS5hcmdzO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRBcmdzID0gc2xpY2UoYXJncyk7XG5cbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICAgICAgICAgIGogPCBjYWxsZWRBcmdzLmxlbmd0aCB8fCBqIDwgZXhwZWN0ZWRBcmdzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICArK2pcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCBjYWxsZWRBcmcgPSBjYWxsZWRBcmdzW2pdO1xuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZEFyZyA9IGV4cGVjdGVkQXJnc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGVkQXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZEFyZyA9IHF1b3RlU3RyaW5nVmFsdWUoY2FsbGVkQXJnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRBcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBcmcgPSBxdW90ZVN0cmluZ1ZhbHVlKGV4cGVjdGVkQXJnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFwiXFxuXCI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsZWRBcmdNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgaiA8IGNhbGxlZEFyZ3MubGVuZ3RoID8gaW5zcGVjdChjYWxsZWRBcmcpIDogXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guaXNNYXRjaGVyKGV4cGVjdGVkQXJnKSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGNvbG9yU2lub25NYXRjaFRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZEFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZEFyZ01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRBcmdNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGogPCBleHBlY3RlZEFyZ3MubGVuZ3RoID8gaW5zcGVjdChleHBlY3RlZEFyZykgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0ganNEaWZmLmRpZmZKc29uKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJnTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBjb2xvckRpZmZUZXh0KGRpZmYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG5cbiAgICBDOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgY2FsbHMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNweUluc3RhbmNlLmNhbGxDb3VudDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgICAgICBsZXQgc3RyaW5naWZpZWRDYWxsID0gYCAgICAke3NweUluc3RhbmNlLmdldENhbGwoaSkudG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgaWYgKC9cXG4vLnRlc3QoY2FsbHNbaSAtIDFdKSkge1xuICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVkQ2FsbCA9IGBcXG4ke3N0cmluZ2lmaWVkQ2FsbH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHVzaChjYWxscywgc3RyaW5naWZpZWRDYWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxscy5sZW5ndGggPiAwID8gYFxcbiR7am9pbihjYWxscywgXCJcXG5cIil9YCA6IFwiXCI7XG4gICAgfSxcblxuICAgIHQ6IGZ1bmN0aW9uIChzcHlJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBvYmplY3RzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBzcHlJbnN0YW5jZS5jYWxsQ291bnQ7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHB1c2gob2JqZWN0cywgaW5zcGVjdChzcHlJbnN0YW5jZS50aGlzVmFsdWVzW2ldKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gam9pbihvYmplY3RzLCBcIiwgXCIpO1xuICAgIH0sXG5cbiAgICBcIipcIjogZnVuY3Rpb24gKHNweUluc3RhbmNlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBqb2luKFxuICAgICAgICAgICAgbWFwKGFyZ3MsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zcGVjdChhcmcpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICk7XG4gICAgfSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG5jb25zdCBjcmVhdGVQcm94eSA9IHJlcXVpcmUoXCIuL3Byb3h5XCIpO1xuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbmNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbmNvbnN0IGdldFByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbmNvbnN0IGRlZXBFcXVhbCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuZGVlcEVxdWFsO1xuY29uc3QgaXNFc01vZHVsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1lcy1tb2R1bGVcIik7XG5jb25zdCBwcm94eUNhbGxVdGlsID0gcmVxdWlyZShcIi4vcHJveHktY2FsbC11dGlsXCIpO1xuY29uc3Qgd2Fsa09iamVjdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93YWxrLW9iamVjdFwiKTtcbmNvbnN0IHdyYXBNZXRob2QgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd3JhcC1tZXRob2RcIik7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxuLyogY2FjaGUgcmVmZXJlbmNlcyB0byBsaWJyYXJ5IG1ldGhvZHMgc28gdGhhdCB0aGV5IGFsc28gY2FuIGJlIHN0dWJiZWQgd2l0aG91dCBwcm9ibGVtcyAqL1xuY29uc3QgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbmNvbnN0IHBvcCA9IGFycmF5UHJvdG8ucG9wO1xuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbmNvbnN0IGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmxldCB1dWlkID0gMDtcblxuZnVuY3Rpb24gbWF0Y2hlcyhmYWtlLCBhcmdzLCBzdHJpY3QpIHtcbiAgICBjb25zdCBtYXJncyA9IGZha2UubWF0Y2hpbmdBcmd1bWVudHM7XG4gICAgaWYgKFxuICAgICAgICBtYXJncy5sZW5ndGggPD0gYXJncy5sZW5ndGggJiZcbiAgICAgICAgZGVlcEVxdWFsKHNsaWNlKGFyZ3MsIDAsIG1hcmdzLmxlbmd0aCksIG1hcmdzKVxuICAgICkge1xuICAgICAgICByZXR1cm4gIXN0cmljdCB8fCBtYXJncy5sZW5ndGggPT09IGFyZ3MubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFB1YmxpYyBBUElcbmNvbnN0IHNweUFwaSA9IHtcbiAgICB3aXRoQXJnczogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSBwb3AodGhpcy5tYXRjaGluZ0Zha2VzKGFyZ3MsIHRydWUpKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGZha2UgPSB0aGlzLmluc3RhbnRpYXRlRmFrZSgpO1xuICAgICAgICBmYWtlLm1hdGNoaW5nQXJndW1lbnRzID0gYXJncztcbiAgICAgICAgZmFrZS5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBwdXNoKHRoaXMuZmFrZXMsIGZha2UpO1xuXG4gICAgICAgIGZha2Uud2l0aEFyZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwud2l0aEFyZ3MuYXBwbHkob3JpZ2luYWwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yRWFjaChvcmlnaW5hbC5hcmdzLCBmdW5jdGlvbiAoYXJnLCBpKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoZXMoZmFrZSwgYXJnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJveHlDYWxsVXRpbC5pbmNyZW1lbnRDYWxsQ291bnQoZmFrZSk7XG4gICAgICAgICAgICBwdXNoKGZha2UudGhpc1ZhbHVlcywgb3JpZ2luYWwudGhpc1ZhbHVlc1tpXSk7XG4gICAgICAgICAgICBwdXNoKGZha2UuYXJncywgYXJnKTtcbiAgICAgICAgICAgIHB1c2goZmFrZS5yZXR1cm5WYWx1ZXMsIG9yaWdpbmFsLnJldHVyblZhbHVlc1tpXSk7XG4gICAgICAgICAgICBwdXNoKGZha2UuZXhjZXB0aW9ucywgb3JpZ2luYWwuZXhjZXB0aW9uc1tpXSk7XG4gICAgICAgICAgICBwdXNoKGZha2UuY2FsbElkcywgb3JpZ2luYWwuY2FsbElkc1tpXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXMoZmFrZSk7XG5cbiAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgfSxcblxuICAgIC8vIE92ZXJyaWRlIHByb3h5IGRlZmF1bHQgaW1wbGVtZW50YXRpb25cbiAgICBtYXRjaGluZ0Zha2VzOiBmdW5jdGlvbiAoYXJncywgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmZha2VzLCBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoZmFrZSwgYXJncywgc3RyaWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzICovXG5jb25zdCBkZWxlZ2F0ZVRvQ2FsbHMgPSBwcm94eUNhbGxVdGlsLmRlbGVnYXRlVG9DYWxscztcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwiY2FsbEFyZ1wiLCBmYWxzZSwgXCJjYWxsQXJnV2l0aFwiLCB0cnVlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCBjYWxsIGFyZyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmAsXG4gICAgKTtcbn0pO1xuc3B5QXBpLmNhbGxBcmdXaXRoID0gc3B5QXBpLmNhbGxBcmc7XG5kZWxlZ2F0ZVRvQ2FsbHMoc3B5QXBpLCBcImNhbGxBcmdPblwiLCBmYWxzZSwgXCJjYWxsQXJnT25XaXRoXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IGNhbGwgYXJnIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuYCxcbiAgICApO1xufSk7XG5zcHlBcGkuY2FsbEFyZ09uV2l0aCA9IHNweUFwaS5jYWxsQXJnT247XG5kZWxlZ2F0ZVRvQ2FsbHMoc3B5QXBpLCBcInRocm93QXJnXCIsIGZhbHNlLCBcInRocm93QXJnXCIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB0aHJvdyBhcmcgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICk7XG59KTtcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwieWllbGRcIiwgZmFsc2UsIFwieWllbGRcIiwgdHJ1ZSwgZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgeWllbGQgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICk7XG59KTtcbi8vIFwiaW52b2tlQ2FsbGJhY2tcIiBpcyBhbiBhbGlhcyBmb3IgXCJ5aWVsZFwiIHNpbmNlIFwieWllbGRcIiBpcyBpbnZhbGlkIGluIHN0cmljdCBtb2RlLlxuc3B5QXBpLmludm9rZUNhbGxiYWNrID0gc3B5QXBpLnlpZWxkO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJ5aWVsZE9uXCIsIGZhbHNlLCBcInlpZWxkT25cIiwgdHJ1ZSwgZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgeWllbGQgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICk7XG59KTtcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwieWllbGRUb1wiLCBmYWxzZSwgXCJ5aWVsZFRvXCIsIHRydWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgeWllbGQgdG8gJyR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICApfScgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICk7XG59KTtcbmRlbGVnYXRlVG9DYWxscyhcbiAgICBzcHlBcGksXG4gICAgXCJ5aWVsZFRvT25cIixcbiAgICBmYWxzZSxcbiAgICBcInlpZWxkVG9PblwiLFxuICAgIHRydWUsXG4gICAgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IHlpZWxkIHRvICcke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICApfScgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gLFxuICAgICAgICApO1xuICAgIH0sXG4pO1xuXG5mdW5jdGlvbiBjcmVhdGVTcHkoZnVuYykge1xuICAgIGxldCBuYW1lO1xuICAgIGxldCBmdW5rID0gZnVuYztcblxuICAgIGlmICh0eXBlb2YgZnVuayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZ1bmsgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGZ1bmN0aW9uTmFtZShmdW5rKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KGZ1bmssIGZ1bmspO1xuXG4gICAgLy8gSW5oZXJpdCBzcHkgQVBJOlxuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCBzcHlBcGkpO1xuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lIHx8IFwic3B5XCIsXG4gICAgICAgIGZha2VzOiBbXSxcbiAgICAgICAgaW5zdGFudGlhdGVGYWtlOiBjcmVhdGVTcHksXG4gICAgICAgIGlkOiBgc3B5IyR7dXVpZCsrfWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBzcHkob2JqZWN0LCBwcm9wZXJ0eSwgdHlwZXMpIHtcbiAgICBpZiAoaXNFc01vZHVsZShvYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFUyBNb2R1bGVzIGNhbm5vdCBiZSBzcGllZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5ICYmIHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3B5KG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wZXJ0eSAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiB3YWxrT2JqZWN0KHNweSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoIW9iamVjdCAmJiAhcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNweShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBNZXRob2Qob2JqZWN0LCBwcm9wZXJ0eSwgY3JlYXRlU3B5KG9iamVjdFtwcm9wZXJ0eV0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge307XG4gICAgY29uc3QgbWV0aG9kRGVzYyA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGZvckVhY2godHlwZXMsIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGRlc2NyaXB0b3JbdHlwZV0gPSBjcmVhdGVTcHkobWV0aG9kRGVzY1t0eXBlXSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd3JhcE1ldGhvZChvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbn1cblxuZXh0ZW5kKHNweSwgc3B5QXBpKTtcbm1vZHVsZS5leHBvcnRzID0gc3B5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi9iZWhhdmlvclwiKTtcbmNvbnN0IGJlaGF2aW9ycyA9IHJlcXVpcmUoXCIuL2RlZmF1bHQtYmVoYXZpb3JzXCIpO1xuY29uc3QgY3JlYXRlUHJveHkgPSByZXF1aXJlKFwiLi9wcm94eVwiKTtcbmNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbmNvbnN0IGhhc093blByb3BlcnR5ID1cbiAgICByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IGlzTm9uRXhpc3RlbnRQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1ub24tZXhpc3RlbnQtcHJvcGVydHlcIik7XG5jb25zdCBzcHkgPSByZXF1aXJlKFwiLi9zcHlcIik7XG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xuY29uc3QgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xuY29uc3QgaXNFc01vZHVsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1lcy1tb2R1bGVcIik7XG5jb25zdCBzaW5vblR5cGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvc2lub24tdHlwZVwiKTtcbmNvbnN0IHdyYXBNZXRob2QgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd3JhcC1tZXRob2RcIik7XG5jb25zdCB0aHJvd09uRmFsc3lPYmplY3QgPSByZXF1aXJlKFwiLi90aHJvdy1vbi1mYWxzeS1vYmplY3RcIik7XG5jb25zdCB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbmNvbnN0IHdhbGtPYmplY3QgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvd2Fsay1vYmplY3RcIik7XG5cbmNvbnN0IGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG5jb25zdCBwb3AgPSBhcnJheVByb3RvLnBvcDtcbmNvbnN0IHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbmNvbnN0IHNvcnQgPSBhcnJheVByb3RvLnNvcnQ7XG5cbmxldCB1dWlkID0gMDtcblxuZnVuY3Rpb24gY3JlYXRlU3R1YihvcmlnaW5hbEZ1bmMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHByb3h5O1xuXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25TdHViKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdzID0gcHJveHkubWF0Y2hpbmdGYWtlcyhhcmdzKTtcblxuICAgICAgICBjb25zdCBmblN0dWIgPVxuICAgICAgICAgICAgcG9wKFxuICAgICAgICAgICAgICAgIHNvcnQobWF0Y2hpbmdzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5tYXRjaGluZ0FyZ3VtZW50cy5sZW5ndGggLSBiLm1hdGNoaW5nQXJndW1lbnRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSB8fCBwcm94eTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRCZWhhdmlvcihmblN0dWIpLmludm9rZSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHByb3h5ID0gY3JlYXRlUHJveHkoZnVuY3Rpb25TdHViLCBvcmlnaW5hbEZ1bmMgfHwgZnVuY3Rpb25TdHViKTtcbiAgICAvLyBJbmhlcml0IHNweSBBUEk6XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHNweSk7XG4gICAgLy8gSW5oZXJpdCBzdHViIEFQSTpcbiAgICBleHRlbmQubm9uRW51bShwcm94eSwgc3R1Yik7XG5cbiAgICBjb25zdCBuYW1lID0gb3JpZ2luYWxGdW5jID8gZnVuY3Rpb25OYW1lKG9yaWdpbmFsRnVuYykgOiBudWxsO1xuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCB7XG4gICAgICAgIGZha2VzOiBbXSxcbiAgICAgICAgaW5zdGFudGlhdGVGYWtlOiBjcmVhdGVTdHViLFxuICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSB8fCBcInN0dWJcIixcbiAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiBudWxsLFxuICAgICAgICBiZWhhdmlvcnM6IFtdLFxuICAgICAgICBpZDogYHN0dWIjJHt1dWlkKyt9YCxcbiAgICB9KTtcblxuICAgIHNpbm9uVHlwZS5zZXQocHJveHksIFwic3R1YlwiKTtcblxuICAgIHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gc3R1YihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBcInN0dWIob2JqLCAnbWV0aCcsIGZuKSBoYXMgYmVlbiByZW1vdmVkLCBzZWUgZG9jdW1lbnRhdGlvblwiLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc0VzTW9kdWxlKG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkVTIE1vZHVsZXMgY2Fubm90IGJlIHN0dWJiZWRcIik7XG4gICAgfVxuXG4gICAgdGhyb3dPbkZhbHN5T2JqZWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoaXNOb25FeGlzdGVudFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHN0dWIgbm9uLWV4aXN0ZW50IHByb3BlcnR5ICR7dmFsdWVUb1N0cmluZyhwcm9wZXJ0eSl9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxEZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgYXNzZXJ0VmFsaWRQcm9wZXJ0eURlc2NyaXB0b3IoYWN0dWFsRGVzY3JpcHRvciwgcHJvcGVydHkpO1xuXG4gICAgY29uc3QgaXNPYmplY3RPckZ1bmN0aW9uID1cbiAgICAgICAgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgaXNTdHViYmluZ0VudGlyZU9iamVjdCA9XG4gICAgICAgIHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBpc09iamVjdE9yRnVuY3Rpb247XG4gICAgY29uc3QgaXNDcmVhdGluZ05ld1N0dWIgPSAhb2JqZWN0ICYmIHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJ1bmRlZmluZWRcIjtcbiAgICBjb25zdCBpc1N0dWJiaW5nTm9uRnVuY1Byb3BlcnR5ID1cbiAgICAgICAgaXNPYmplY3RPckZ1bmN0aW9uICYmXG4gICAgICAgIHR5cGVvZiBwcm9wZXJ0eSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAodHlwZW9mIGFjdHVhbERlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBhY3R1YWxEZXNjcmlwdG9yLnZhbHVlICE9PSBcImZ1bmN0aW9uXCIpO1xuXG4gICAgaWYgKGlzU3R1YmJpbmdFbnRpcmVPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHdhbGtPYmplY3Qoc3R1Yiwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNDcmVhdGluZ05ld1N0dWIpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0dWIoKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdW5jID1cbiAgICAgICAgdHlwZW9mIGFjdHVhbERlc2NyaXB0b3IudmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBhY3R1YWxEZXNjcmlwdG9yLnZhbHVlXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgcyA9IGNyZWF0ZVN0dWIoZnVuYyk7XG5cbiAgICBleHRlbmQubm9uRW51bShzLCB7XG4gICAgICAgIHJvb3RPYmo6IG9iamVjdCxcbiAgICAgICAgcHJvcE5hbWU6IHByb3BlcnR5LFxuICAgICAgICBzaGFkb3dzUHJvcE9uUHJvdG90eXBlOiAhYWN0dWFsRGVzY3JpcHRvci5pc093bixcbiAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgICAgIGlmIChhY3R1YWxEZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsRGVzY3JpcHRvci5pc093bikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBhY3R1YWxEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzU3R1YmJpbmdOb25GdW5jUHJvcGVydHkgPyBzIDogd3JhcE1ldGhvZChvYmplY3QsIHByb3BlcnR5LCBzKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wZXJ0eURlc2NyaXB0b3IoZGVzY3JpcHRvciwgcHJvcGVydHkpIHtcbiAgICBpZiAoIWRlc2NyaXB0b3IgfHwgIXByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IuaXNPd24gJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRGVzY3JpcHRvciBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX0gaXMgbm9uLWNvbmZpZ3VyYWJsZSBhbmQgbm9uLXdyaXRhYmxlYCxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKChkZXNjcmlwdG9yLmdldCB8fCBkZXNjcmlwdG9yLnNldCkgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRGVzY3JpcHRvciBmb3IgYWNjZXNzb3IgcHJvcGVydHkgJHtwcm9wZXJ0eX0gaXMgbm9uLWNvbmZpZ3VyYWJsZWAsXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRGVzY3JpcHRvciBmb3IgZGF0YSBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBub24td3JpdGFibGVgLFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNEYXRhRGVzY3JpcHRvcihkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgIWRlc2NyaXB0b3IudmFsdWUgJiZcbiAgICAgICAgIWRlc2NyaXB0b3Iud3JpdGFibGUgJiZcbiAgICAgICAgIWRlc2NyaXB0b3Iuc2V0ICYmXG4gICAgICAgICFkZXNjcmlwdG9yLmdldFxuICAgICk7XG59XG5cbi8qZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUqL1xuZnVuY3Rpb24gZ2V0UGFyZW50QmVoYXZpb3VyKHN0dWJJbnN0YW5jZSkge1xuICAgIHJldHVybiBzdHViSW5zdGFuY2UucGFyZW50ICYmIGdldEN1cnJlbnRCZWhhdmlvcihzdHViSW5zdGFuY2UucGFyZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEJlaGF2aW9yKHN0dWJJbnN0YW5jZSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHN0dWJJbnN0YW5jZS5kZWZhdWx0QmVoYXZpb3IgfHxcbiAgICAgICAgZ2V0UGFyZW50QmVoYXZpb3VyKHN0dWJJbnN0YW5jZSkgfHxcbiAgICAgICAgYmVoYXZpb3IuY3JlYXRlKHN0dWJJbnN0YW5jZSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50QmVoYXZpb3Ioc3R1Ykluc3RhbmNlKSB7XG4gICAgY29uc3QgY3VycmVudEJlaGF2aW9yID0gc3R1Ykluc3RhbmNlLmJlaGF2aW9yc1tzdHViSW5zdGFuY2UuY2FsbENvdW50IC0gMV07XG4gICAgcmV0dXJuIGN1cnJlbnRCZWhhdmlvciAmJiBjdXJyZW50QmVoYXZpb3IuaXNQcmVzZW50KClcbiAgICAgICAgPyBjdXJyZW50QmVoYXZpb3JcbiAgICAgICAgOiBnZXREZWZhdWx0QmVoYXZpb3Ioc3R1Ykluc3RhbmNlKTtcbn1cbi8qZXNsaW50LWVuYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbmNvbnN0IHByb3RvID0ge1xuICAgIHJlc2V0QmVoYXZpb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0QmVoYXZpb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLnJldHVyblZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5yZXR1cm5BcmdBdDtcbiAgICAgICAgZGVsZXRlIHRoaXMudGhyb3dBcmdBdDtcbiAgICAgICAgZGVsZXRlIHRoaXMucmVzb2x2ZUFyZ0F0O1xuICAgICAgICBkZWxldGUgdGhpcy5mYWtlRm47XG4gICAgICAgIHRoaXMucmV0dXJuVGhpcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVUaGlzID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaCh0aGlzLmZha2VzLCBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICAgICAgZmFrZS5yZXNldEJlaGF2aW9yKCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlc2V0SGlzdG9yeSgpO1xuICAgICAgICB0aGlzLnJlc2V0QmVoYXZpb3IoKTtcbiAgICB9LFxuXG4gICAgb25DYWxsOiBmdW5jdGlvbiBvbkNhbGwoaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJlaGF2aW9yc1tpbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuYmVoYXZpb3JzW2luZGV4XSA9IGJlaGF2aW9yLmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmJlaGF2aW9yc1tpbmRleF07XG4gICAgfSxcblxuICAgIG9uRmlyc3RDYWxsOiBmdW5jdGlvbiBvbkZpcnN0Q2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25DYWxsKDApO1xuICAgIH0sXG5cbiAgICBvblNlY29uZENhbGw6IGZ1bmN0aW9uIG9uU2Vjb25kQ2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25DYWxsKDEpO1xuICAgIH0sXG5cbiAgICBvblRoaXJkQ2FsbDogZnVuY3Rpb24gb25UaGlyZENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uQ2FsbCgyKTtcbiAgICB9LFxuXG4gICAgd2l0aEFyZ3M6IGZ1bmN0aW9uIHdpdGhBcmdzKCkge1xuICAgICAgICBjb25zdCBmYWtlID0gc3B5LndpdGhBcmdzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRCZWhhdmlvciAmJiB0aGlzLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeSkge1xuICAgICAgICAgICAgZmFrZS5kZWZhdWx0QmVoYXZpb3IgPVxuICAgICAgICAgICAgICAgIGZha2UuZGVmYXVsdEJlaGF2aW9yIHx8IGJlaGF2aW9yLmNyZWF0ZShmYWtlKTtcbiAgICAgICAgICAgIGZha2UuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5ID1cbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFrZTtcbiAgICB9LFxufTtcblxuZm9yRWFjaChPYmplY3Qua2V5cyhiZWhhdmlvciksIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBpZiAoXG4gICAgICAgIGhhc093blByb3BlcnR5KGJlaGF2aW9yLCBtZXRob2QpICYmXG4gICAgICAgICFoYXNPd25Qcm9wZXJ0eShwcm90bywgbWV0aG9kKSAmJlxuICAgICAgICBtZXRob2QgIT09IFwiY3JlYXRlXCIgJiZcbiAgICAgICAgbWV0aG9kICE9PSBcImludm9rZVwiXG4gICAgKSB7XG4gICAgICAgIHByb3RvW21ldGhvZF0gPSBiZWhhdmlvci5jcmVhdGVCZWhhdmlvcihtZXRob2QpO1xuICAgIH1cbn0pO1xuXG5mb3JFYWNoKE9iamVjdC5rZXlzKGJlaGF2aW9ycyksIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYmVoYXZpb3JzLCBtZXRob2QpICYmICFoYXNPd25Qcm9wZXJ0eShwcm90bywgbWV0aG9kKSkge1xuICAgICAgICBiZWhhdmlvci5hZGRCZWhhdmlvcihzdHViLCBtZXRob2QsIGJlaGF2aW9yc1ttZXRob2RdKTtcbiAgICB9XG59KTtcblxuZXh0ZW5kKHN0dWIsIHByb3RvKTtcbm1vZHVsZS5leHBvcnRzID0gc3R1YjtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRocm93T25GYWxzeU9iamVjdChvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgaWYgKHByb3BlcnR5ICYmICFvYmplY3QpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IG9iamVjdCA9PT0gbnVsbCA/IFwibnVsbFwiIDogXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRyeWluZyB0byBzdHViIHByb3BlcnR5ICcke3ZhbHVlVG9TdHJpbmcocHJvcGVydHkpfScgb2YgJHt0eXBlfWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm93T25GYWxzeU9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbmNvbnN0IHJlZHVjZSA9IGFycmF5UHJvdG8ucmVkdWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4cG9ydEFzeW5jQmVoYXZpb3JzKGJlaGF2aW9yTWV0aG9kcykge1xuICAgIHJldHVybiByZWR1Y2UoXG4gICAgICAgIE9iamVjdC5rZXlzKGJlaGF2aW9yTWV0aG9kcyksXG4gICAgICAgIGZ1bmN0aW9uIChhY2MsIG1ldGhvZCkge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBhdm9pZCBjcmVhdGluZyBhbm90aGVyIGFzeW5jIHZlcnNpb25zIG9mIHRoZSBuZXdseSBhZGRlZCBhc3luYyBtZXRob2RzXG4gICAgICAgICAgICBpZiAobWV0aG9kLm1hdGNoKC9eKGNhbGxzQXJnfHlpZWxkcykvKSAmJiAhbWV0aG9kLm1hdGNoKC9Bc3luYy8pKSB7XG4gICAgICAgICAgICAgICAgYWNjW2Ake21ldGhvZH1Bc3luY2BdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBiZWhhdmlvck1ldGhvZHNbbWV0aG9kXS5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHt9LFxuICAgICk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xuY29uc3QgaGFzT3duUHJvcGVydHkgPVxuICAgIHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0Lmhhc093blByb3BlcnR5O1xuXG5jb25zdCBqb2luID0gYXJyYXlQcm90by5qb2luO1xuY29uc3QgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcblxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRUNNQVNjcmlwdF9Eb250RW51bV9hdHRyaWJ1dGUjSlNjcmlwdF9Eb250RW51bV9CdWdcbmNvbnN0IGhhc0RvbnRFbnVtQnVnID0gKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIwXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIxXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdG9Mb2NhbGVTdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjNcIjtcbiAgICAgICAgfSxcbiAgICAgICAgcHJvdG90eXBlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCI0XCI7XG4gICAgICAgIH0sXG4gICAgICAgIGlzUHJvdG90eXBlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjVcIjtcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjZcIjtcbiAgICAgICAgfSxcbiAgICAgICAgaGFzT3duUHJvcGVydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjdcIjtcbiAgICAgICAgfSxcbiAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCI4XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHVuaXF1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiOVwiO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApKSB7XG4gICAgICAgICAgICBwdXNoKHJlc3VsdCwgb2JqW3Byb3BdKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqb2luKHJlc3VsdCwgXCJcIikgIT09IFwiMDEyMzQ1Njc4OVwiO1xufSkoKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIHNvdXJjZXNcbiAqIEBwYXJhbSBkb0NvcHlcbiAqIEByZXR1cm5zIHsqfSB0YXJnZXRcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kQ29tbW9uKHRhcmdldCwgc291cmNlcywgZG9Db3B5KSB7XG4gICAgbGV0IHNvdXJjZSwgaSwgcHJvcDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG5cbiAgICAgICAgZm9yIChwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KHNvdXJjZSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBkb0NvcHkodGFyZ2V0LCBzb3VyY2UsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNvcHkgKG93bikgdG9TdHJpbmcgbWV0aG9kIGV2ZW4gd2hlbiBpbiBKU2NyaXB0IHdpdGggRG9udEVudW0gYnVnXG4gICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0VDTUFTY3JpcHRfRG9udEVudW1fYXR0cmlidXRlI0pTY3JpcHRfRG9udEVudW1fQnVnXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhhc0RvbnRFbnVtQnVnICYmXG4gICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eShzb3VyY2UsIFwidG9TdHJpbmdcIikgJiZcbiAgICAgICAgICAgIHNvdXJjZS50b1N0cmluZyAhPT0gdGFyZ2V0LnRvU3RyaW5nXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0LnRvU3RyaW5nID0gc291cmNlLnRvU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBQdWJsaWM6IEV4dGVuZCB0YXJnZXQgaW4gcGxhY2Ugd2l0aCBhbGwgKG93bikgcHJvcGVydGllcywgZXhjZXB0ICduYW1lJyB3aGVuIFtbd3JpdGFibGVdXSBpcyBmYWxzZSxcbiAqICAgICAgICAgZnJvbSBzb3VyY2VzIGluLW9yZGVyLiBUaHVzLCBsYXN0IHNvdXJjZSB3aWxsIG92ZXJyaWRlIHByb3BlcnRpZXMgaW4gcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIE9iamVjdCB0byBleHRlbmRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNvdXJjZXMgLSBPYmplY3RzIHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMge29iamVjdH0gdGhlIGV4dGVuZGVkIHRhcmdldFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gZXh0ZW5kQ29tbW9uKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIGZ1bmN0aW9uIGNvcHlWYWx1ZShkZXN0LCBzb3VyY2UsIHByb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIGRlc3QsXG4gICAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibmFtZVwiICYmICFkZXN0T3duUHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcnMgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuY29uZmlndXJhYmxlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvci5lbnVtZXJhYmxlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgaWYgdGhlIHNvdXJjZSBoYXMgYW4gQWNjZXNzb3IgcHJvcGVydHkgY29weSBvdmVyIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgKGdldCBhbmQgc2V0KVxuICAgICAgICAgICAgICAgIGRhdGEgcHJvcGVydGllcyBoYXMgd3JpdGFibGUgYXR0cmlidXRlIHdoZXJlIGFzIGFjY2Vzc29yIHByb3BlcnR5IGRvbid0XG4gICAgICAgICAgICAgICAgUkVGOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0RhdGFfc3RydWN0dXJlcyNwcm9wZXJ0aWVzXG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlT3duUHJvcGVydHlEZXNjcmlwdG9yLCBcIndyaXRhYmxlXCIpKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMud3JpdGFibGUgPSBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMudmFsdWUgPSBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IudmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLmdldCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0LmJpbmQoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLnNldCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2V0LmJpbmQoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlc3QsIHByb3AsIGRlc2NyaXB0b3JzKTtcbiAgICAgICAgfSxcbiAgICApO1xufTtcblxuLyoqXG4gKiBQdWJsaWM6IEV4dGVuZCB0YXJnZXQgaW4gcGxhY2Ugd2l0aCBhbGwgKG93bikgcHJvcGVydGllcyBmcm9tIHNvdXJjZXMgaW4tb3JkZXIuIFRodXMsIGxhc3Qgc291cmNlIHdpbGxcbiAqICAgICAgICAgb3ZlcnJpZGUgcHJvcGVydGllcyBpbiBwcmV2aW91cyBzb3VyY2VzLiBEZWZpbmUgdGhlIHByb3BlcnRpZXMgYXMgbm9uIGVudW1lcmFibGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCAtIFRoZSBPYmplY3QgdG8gZXh0ZW5kXG4gKiBAcGFyYW0ge29iamVjdFtdfSBzb3VyY2VzIC0gT2JqZWN0cyB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBleHRlbmRlZCB0YXJnZXRcbiAqL1xubW9kdWxlLmV4cG9ydHMubm9uRW51bSA9IGZ1bmN0aW9uIGV4dGVuZE5vbkVudW0odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIGV4dGVuZENvbW1vbihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBmdW5jdGlvbiBjb3B5UHJvcGVydHkoZGVzdCwgc291cmNlLCBwcm9wKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVzdCwgcHJvcCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2VbcHJvcF0sXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICBsZXQgaSwgcHJvcCwgdGhpc1ZhbHVlO1xuICAgIGlmICh0aGlzLmdldENhbGwgJiYgdGhpcy5jYWxsQ291bnQpIHtcbiAgICAgICAgaSA9IHRoaXMuY2FsbENvdW50O1xuXG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHRoaXNWYWx1ZSA9IHRoaXMuZ2V0Q2FsbChpKS50aGlzVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgICAgIGZvciAocHJvcCBpbiB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc1ZhbHVlW3Byb3BdID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8tb3AgLSBhY2Nlc3NpbmcgcHJvcHMgY2FuIHRocm93IGFuIGVycm9yLCBub3RoaW5nIHRvIGRvIGhlcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZSB8fCBcInNpbm9uIGZha2VcIjtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgOiBub3QgdGVzdGluZyB0aGF0IHNldFRpbWVvdXQgd29ya3MgKi9cbmZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrKSB7XG4gICAgc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TmV4dFRpY2socHJvY2Vzcywgc2V0SW1tZWRpYXRlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VGljaztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcm9wZXJ0eURlc2NyaXB0b3JcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2RlZmluZVByb3BlcnR5I2Rlc2NyaXB0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbmZpZ3VyYWJsZSBkZWZhdWx0cyB0byBmYWxzZVxuICogQHByb3BlcnR5IHtib29sZWFufSBlbnVtZXJhYmxlICAgZGVmYXVsdHMgdG8gZmFsc2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd3JpdGFibGUgICAgIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcHJvcGVydHkgeyp9IHZhbHVlIGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0IGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gc2V0IGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICovXG5cbi8qXG4gKiBUaGUgZm9sbG93aW5nIHR5cGUgZGVmIGlzIHN0cmljdGx5IHNwZWFraW5nIGlsbGVnYWwgaW4gSlNEb2MsIGJ1dCB0aGUgZXhwcmVzc2lvbiBmb3JtcyBhXG4gKiBsZWdhbCBUeXBlc2NyaXB0IHVuaW9uIHR5cGUgYW5kIGlzIHVuZGVyc3Rvb2QgYnkgVmlzdWFsIFN0dWRpbyBhbmQgdGhlIEludGVsbGlKXG4gKiBmYW1pbHkgb2YgZWRpdG9ycy4gVGhlIFwiVFNcIiBmbGF2b3Igb2YgSlNEb2MgaXMgYmVjb21pbmcgdGhlIGRlLWZhY3RvIHN0YW5kYXJkIHRoZXNlXG4gKiBkYXlzIGZvciB0aGF0IHJlYXNvbiAoYW5kIHRoZSBmYWN0IHRoYXQgSlNEb2MgaXMgZXNzZW50aWFsbHkgdW5tYWludGFpbmVkKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3tpc093bjogYm9vbGVhbn0gJiBQcm9wZXJ0eURlc2NyaXB0b3J9IFNpbm9uUHJvcGVydHlEZXNjcmlwdG9yXG4gKiBhIHNsaWdodGx5IGVucmljaGVkIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNPd24gdHJ1ZSBpZiB0aGUgZGVzY3JpcHRvciBpcyBvd25lZCBieSB0aGlzIG9iamVjdCwgZmFsc2UgaWYgaXQgY29tZXMgZnJvbSB0aGUgcHJvdG90eXBlXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2xpZ2h0bHkgbW9kaWZpZWQgcHJvcGVydHkgZGVzY3JpcHRvciB0aGF0IG9uZSBjYW4gdGVsbCBpcyBmcm9tIHRoZSBvYmplY3Qgb3IgdGhlIHByb3RvdHlwZVxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTaW5vblByb3BlcnR5RGVzY3JpcHRvcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBsZXQgcHJvdG8gPSBvYmplY3Q7XG4gICAgbGV0IGRlc2NyaXB0b3I7XG4gICAgY29uc3QgaXNPd24gPSBCb29sZWFuKFxuICAgICAgICBvYmplY3QgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSxcbiAgICApO1xuXG4gICAgd2hpbGUgKFxuICAgICAgICBwcm90byAmJlxuICAgICAgICAhKGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSkpXG4gICAgKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICBkZXNjcmlwdG9yLmlzT3duID0gaXNPd247XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogVmVyaWZ5IGlmIGFuIG9iamVjdCBpcyBhIEVDTUFTY3JpcHQgTW9kdWxlXG4gKlxuICogQXMgdGhlIGV4cG9ydHMgZnJvbSBhIG1vZHVsZSBpcyBpbW11dGFibGUgd2UgY2Fubm90IGFsdGVyIHRoZSBleHBvcnRzXG4gKiB1c2luZyBzcGllcyBvciBzdHVicy4gTGV0IHRoZSBjb25zdW1lciBrbm93IHRoaXMgdG8gYXZvaWQgYnVnIHJlcG9ydHNcbiAqIG9uIHdlaXJkIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgYSBtb2R1bGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgb2JqZWN0ICYmXG4gICAgICAgIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiTW9kdWxlXCIgJiZcbiAgICAgICAgT2JqZWN0LmlzU2VhbGVkKG9iamVjdClcbiAgICApO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIGEgcHJvcCBleGlzdHMgaW4gdGhlIHByb3RvdHlwZSBjaGFpblxuICovXG5mdW5jdGlvbiBpc05vbkV4aXN0ZW50UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgICBvYmplY3QgJiYgdHlwZW9mIHByb3BlcnR5ICE9PSBcInVuZGVmaW5lZFwiICYmICEocHJvcGVydHkgaW4gb2JqZWN0KSxcbiAgICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTm9uRXhpc3RlbnRQcm9wZXJ0eTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcblxuZnVuY3Rpb24gaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmosIHByb3BOYW1lKSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcE5hbWUpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvciA/IHByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvcGVydHlDb25maWd1cmFibGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gaXNSZXN0b3JhYmxlKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2Ygb2JqLnJlc3RvcmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICBvYmoucmVzdG9yZS5zaW5vblxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNSZXN0b3JhYmxlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmdsb2JhbDtcbmNvbnN0IGdldE5leHRUaWNrID0gcmVxdWlyZShcIi4vZ2V0LW5leHQtdGlja1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0VGljayhnbG9iYWxPYmplY3QucHJvY2VzcywgZ2xvYmFsT2JqZWN0LnNldEltbWVkaWF0ZSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3Qgc2lub25UeXBlU3ltYm9sUHJvcGVydHkgPSBTeW1ib2woXCJTaW5vblR5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgdHlwZSBvZiBhIFNpbm9uIG9iamVjdCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGlkZW50aWZ5IGl0IGxhdGVyIGF0IHJ1bnRpbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBvYmplY3QgIG9iamVjdC9mdW5jdGlvbiB0byBzZXQgdGhlIHR5cGUgb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgbmFtZWQgdHlwZSBvZiB0aGUgb2JqZWN0L2Z1bmN0aW9uXG4gICAgICovXG4gICAgc2V0KG9iamVjdCwgdHlwZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBzaW5vblR5cGVTeW1ib2xQcm9wZXJ0eSwge1xuICAgICAgICAgICAgdmFsdWU6IHR5cGUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0KG9iamVjdCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdFtzaW5vblR5cGVTeW1ib2xQcm9wZXJ0eV07XG4gICAgfSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYXJyYXkgPSBbbnVsbCwgXCJvbmNlXCIsIFwidHdpY2VcIiwgXCJ0aHJpY2VcIl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGltZXNJbldvcmRzKGNvdW50KSB7XG4gICAgcmV0dXJuIGFycmF5W2NvdW50XSB8fCBgJHtjb3VudCB8fCAwfSB0aW1lc2A7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuZnVuY3Rpb24gdXNlUHJvbWlzZUxpYnJhcnkobGlicmFyeSwgZmFrZXMpIHtcbiAgICBpZiAodHlwZW9mIGxpYnJhcnkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZha2VzKSkge1xuICAgICAgICBmb3JFYWNoLmNhbGwoZmFrZXMsIHVzZVByb21pc2VMaWJyYXJ5LmJpbmQobnVsbCwgbGlicmFyeSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZha2VzLnVzaW5nUHJvbWlzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZha2VzLnVzaW5nUHJvbWlzZShsaWJyYXJ5KTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlUHJvbWlzZUxpYnJhcnk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xuXG5jb25zdCBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbmNvbnN0IHdhbGsgPSByZXF1aXJlKFwiLi93YWxrXCIpO1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0aGF0IGFsbG93cyB0cmF2ZXJzaW5nIGFuIG9iamVjdCwgYXBwbHlpbmcgbXV0YXRpbmcgZnVuY3Rpb25zIG9uIHRoZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gbXV0YXRvciBjYWxsZWQgb24gZWFjaCBwcm9wZXJ0eVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCB0aGUgb2JqZWN0IHdlIGFyZSB3YWxraW5nIG92ZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlciBhIHByZWRpY2F0ZSAoYm9vbGVhbiBmdW5jdGlvbikgdGhhdCB3aWxsIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBhcHBseSB0aGUgbXV0YXRvciB0byB0aGUgY3VycmVudCBwcm9wZXJ0eVxuICogQHJldHVybnMge3ZvaWR9IG5vdGhpbmdcbiAqL1xuZnVuY3Rpb24gd2Fsa09iamVjdChtdXRhdG9yLCBvYmplY3QsIGZpbHRlcikge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBuYW1lID0gZnVuY3Rpb25OYW1lKG11dGF0b3IpO1xuXG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRyeWluZyB0byAke25hbWV9IG9iamVjdCBidXQgcmVjZWl2ZWQgJHtTdHJpbmcob2JqZWN0KX1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHdhbGsob2JqZWN0LCBmdW5jdGlvbiAocHJvcCwgcHJvcE93bmVyKSB7XG4gICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gc3R1YiB0aGluZ3MgbGlrZSB0b1N0cmluZygpLCB2YWx1ZU9mKCksIGV0Yy4gc28gd2Ugb25seSBzdHViIGlmIHRoZSBvYmplY3RcbiAgICAgICAgLy8gaXMgbm90IE9iamVjdC5wcm90b3R5cGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvcE93bmVyICE9PSBPYmplY3QucHJvdG90eXBlICYmXG4gICAgICAgICAgICBwcm9wICE9PSBcImNvbnN0cnVjdG9yXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBnZXRQcm9wZXJ0eURlc2NyaXB0b3IocHJvcE93bmVyLCBwcm9wKS52YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIob2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBtdXRhdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG11dGF0b3Iob2JqZWN0LCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZvdW5kIG5vIG1ldGhvZHMgb24gb2JqZWN0IHRvIHdoaWNoIHdlIGNvdWxkIGFwcGx5IG11dGF0aW9uc2AsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YWxrT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmZvckVhY2g7XG5cbmZ1bmN0aW9uIHdhbGtJbnRlcm5hbChvYmosIGl0ZXJhdG9yLCBjb250ZXh0LCBvcmlnaW5hbE9iaiwgc2Vlbikge1xuICAgIGxldCBwcm9wO1xuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGVudW1lcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcHJvdG90eXBlJ3MgcHJvcGVydGllc1xuICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIHRoZXJlZm9yZSB3ZSBkZWxpYmVyYXRlbHkgbGVhdmUgb3V0IGFuIG93biBwcm9wZXJ0eSBjaGVjay5cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiAqL1xuICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtwcm9wXSwgcHJvcCwgb2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaiksIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChzZWVuW2tdICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBzZWVuW2tdID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrKS5nZXQgPT09XG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luYWxPYmpcbiAgICAgICAgICAgICAgICAgICAgOiBvYmo7XG4gICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIGssIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm90bykge1xuICAgICAgICB3YWxrSW50ZXJuYWwocHJvdG8sIGl0ZXJhdG9yLCBjb250ZXh0LCBvcmlnaW5hbE9iaiwgc2Vlbik7XG4gICAgfVxufVxuXG4vKiBXYWxrcyB0aGUgcHJvdG90eXBlIGNoYWluIG9mIGFuIG9iamVjdCBhbmQgaXRlcmF0ZXMgb3ZlciBldmVyeSBvd24gcHJvcGVydHlcbiAqIG5hbWUgZW5jb3VudGVyZWQuIFRoZSBpdGVyYXRvciBpcyBjYWxsZWQgaW4gdGhlIHNhbWUgZmFzaGlvbiB0aGF0IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoXG4gKiB3b3Jrcywgd2hlcmUgaXQgaXMgcGFzc2VkIHRoZSB2YWx1ZSwga2V5LCBhbmQgb3duIG9iamVjdCBhcyB0aGUgMXN0LCAybmQsIGFuZCAzcmQgcG9zaXRpb25hbFxuICogYXJndW1lbnQsIHJlc3BlY3RpdmVseS4gSW4gY2FzZXMgd2hlcmUgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgaXMgbm90IGF2YWlsYWJsZSwgd2FsayB3aWxsXG4gKiBkZWZhdWx0IHRvIHVzaW5nIGEgc2ltcGxlIGZvci4uaW4gbG9vcC5cbiAqXG4gKiBvYmogLSBUaGUgb2JqZWN0IHRvIHdhbGsgdGhlIHByb3RvdHlwZSBjaGFpbiBmb3IuXG4gKiBpdGVyYXRvciAtIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCBwYXNzIG9mIHRoZSB3YWxrLlxuICogY29udGV4dCAtIChPcHRpb25hbCkgV2hlbiBnaXZlbiwgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhpcyBvYmplY3QgYXMgdGhlIHJlY2VpdmVyLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdhbGsob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHJldHVybiB3YWxrSW50ZXJuYWwob2JqLCBpdGVyYXRvciwgY29udGV4dCwgb2JqLCB7fSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuY29uc3QgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3JcIik7XG5jb25zdCBleHRlbmQgPSByZXF1aXJlKFwiLi9leHRlbmRcIik7XG5jb25zdCBzaW5vblR5cGUgPSByZXF1aXJlKFwiLi9zaW5vbi10eXBlXCIpO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPVxuICAgIHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0Lmhhc093blByb3BlcnR5O1xuY29uc3QgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5jb25zdCBwdXNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5wdXNoO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICBCb29sZWFuKG9iaiAmJiBvYmouY29uc3RydWN0b3IgJiYgb2JqLmNhbGwgJiYgb2JqLmFwcGx5KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIG1pcnJvclByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkodGFyZ2V0LCBwcm9wKSkge1xuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY2Nlc3NvcihvYmplY3QsIHByb3BlcnR5LCBtZXRob2QpIHtcbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBbXCJnZXRcIiwgXCJzZXRcIl07XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlc2NyaXB0b3JbYWNjZXNzb3JzW2ldXSAmJlxuICAgICAgICAgICAgZGVzY3JpcHRvclthY2Nlc3NvcnNbaV1dLm5hbWUgPT09IG1ldGhvZC5uYW1lXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc29yc1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLy8gQ2hlYXAgd2F5IHRvIGRldGVjdCBpZiB3ZSBoYXZlIEVTNSBzdXBwb3J0LlxuY29uc3QgaGFzRVM1U3VwcG9ydCA9IFwia2V5c1wiIGluIE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIG1ldGhvZCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTaG91bGQgd3JhcCBwcm9wZXJ0eSBvZiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgbWV0aG9kICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBcIk1ldGhvZCB3cmFwcGVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGEgcHJvcGVydHkgZGVzY3JpcHRvclwiLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV3JhcHBlZE1ldGhvZCh3cmFwcGVkTWV0aG9kKSB7XG4gICAgICAgIGxldCBlcnJvcjtcblxuICAgICAgICBpZiAoIWlzRnVuY3Rpb24od3JhcHBlZE1ldGhvZCkpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHt0eXBlb2Ygd3JhcHBlZE1ldGhvZH0gcHJvcGVydHkgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICApfSBhcyBmdW5jdGlvbmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHdyYXBwZWRNZXRob2QucmVzdG9yZSAmJiB3cmFwcGVkTWV0aG9kLnJlc3RvcmUuc2lub24pIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICApfSB3aGljaCBpcyBhbHJlYWR5IHdyYXBwZWRgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3cmFwcGVkTWV0aG9kLmNhbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IHdyYXBwZWRNZXRob2QucmV0dXJucyA/IFwic3R1YmJlZFwiIDogXCJzcGllZCBvblwiO1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gd3JhcCAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICl9IHdoaWNoIGlzIGFscmVhZHkgJHt2ZXJifWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAod3JhcHBlZE1ldGhvZCAmJiB3cmFwcGVkTWV0aG9kLnN0YWNrVHJhY2VFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrICs9IGBcXG4tLS0tLS0tLS0tLS0tLVxcbiR7d3JhcHBlZE1ldGhvZC5zdGFja1RyYWNlRXJyb3Iuc3RhY2t9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGVycm9yLCB3cmFwcGVkTWV0aG9kLCBpLCB3cmFwcGVkTWV0aG9kRGVzYywgdGFyZ2V0LCBhY2Nlc3NvcjtcblxuICAgIGNvbnN0IHdyYXBwZWRNZXRob2RzID0gW107XG5cbiAgICBmdW5jdGlvbiBzaW1wbGVQcm9wZXJ0eUFzc2lnbm1lbnQoKSB7XG4gICAgICAgIHdyYXBwZWRNZXRob2QgPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICBjaGVja1dyYXBwZWRNZXRob2Qod3JhcHBlZE1ldGhvZCk7XG4gICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBtZXRob2Q7XG4gICAgICAgIG1ldGhvZC5kaXNwbGF5TmFtZSA9IHByb3BlcnR5O1xuICAgIH1cblxuICAgIC8vIEZpcmVmb3ggaGFzIGEgcHJvYmxlbSB3aGVuIHVzaW5nIGhhc093bi5jYWxsIG9uIG9iamVjdHMgZnJvbSBvdGhlciBmcmFtZXMuXG4gICAgY29uc3Qgb3duZWQgPSBvYmplY3QuaGFzT3duUHJvcGVydHlcbiAgICAgICAgPyBvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHkpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGlmIChoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZERlc2MgPVxuICAgICAgICAgICAgdHlwZW9mIG1ldGhvZCA9PT0gXCJmdW5jdGlvblwiID8geyB2YWx1ZTogbWV0aG9kIH0gOiBtZXRob2Q7XG4gICAgICAgIHdyYXBwZWRNZXRob2REZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgICAgIGlmICghd3JhcHBlZE1ldGhvZERlc2MpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHt0eXBlb2Ygd3JhcHBlZE1ldGhvZH0gcHJvcGVydHkgJHtwcm9wZXJ0eX0gYXMgZnVuY3Rpb25gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHdyYXBwZWRNZXRob2REZXNjLnJlc3RvcmUgJiZcbiAgICAgICAgICAgIHdyYXBwZWRNZXRob2REZXNjLnJlc3RvcmUuc2lub25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byB3cmFwICR7cHJvcGVydHl9IHdoaWNoIGlzIGFscmVhZHkgd3JhcHBlZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHdyYXBwZWRNZXRob2REZXNjICYmIHdyYXBwZWRNZXRob2REZXNjLnN0YWNrVHJhY2VFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrICs9IGBcXG4tLS0tLS0tLS0tLS0tLVxcbiR7d3JhcHBlZE1ldGhvZERlc2Muc3RhY2tUcmFjZUVycm9yLnN0YWNrfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGVzID0gT2JqZWN0LmtleXMobWV0aG9kRGVzYyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgd3JhcHBlZE1ldGhvZCA9IHdyYXBwZWRNZXRob2REZXNjW3R5cGVzW2ldXTtcbiAgICAgICAgICAgIGNoZWNrV3JhcHBlZE1ldGhvZCh3cmFwcGVkTWV0aG9kKTtcbiAgICAgICAgICAgIHB1c2god3JhcHBlZE1ldGhvZHMsIHdyYXBwZWRNZXRob2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlycm9yUHJvcGVydGllcyhtZXRob2REZXNjLCB3cmFwcGVkTWV0aG9kRGVzYyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWlycm9yUHJvcGVydGllcyhtZXRob2REZXNjW3R5cGVzW2ldXSwgd3JhcHBlZE1ldGhvZERlc2NbdHlwZXNbaV1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZmxpcCB0aGUgY29uZmlndXJhYmxlIHByb3Agb24gYW5cbiAgICAgICAgLy8gZXhpc3RpbmcgZGVzY3JpcHRvciB0byBhbnl0aGluZyBidXQgZmFsc2UgKCMyNTE0KVxuICAgICAgICBpZiAoIW93bmVkKSB7XG4gICAgICAgICAgICBtZXRob2REZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgbWV0aG9kRGVzYyk7XG5cbiAgICAgICAgLy8gY2F0Y2ggZmFpbGluZyBhc3NpZ25tZW50XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIGNvbnZlcnNlIG9mIHRoZSBjaGVjayBpbiBgLnJlc3RvcmVgIGJlbG93XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0W3Byb3BlcnR5XSAhPT0gbWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBjb3JyZWN0IGFueSB3cm9uZ2RvaW5ncyBjYXVzZWQgYnkgdGhlIGRlZmluZVByb3BlcnR5IGNhbGwgYWJvdmUsXG4gICAgICAgICAgICAvLyBzdWNoIGFzIGFkZGluZyBuZXcgaXRlbXMgKGlmIG9iamVjdCB3YXMgYSBTdG9yYWdlIG9iamVjdClcbiAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgc2ltcGxlUHJvcGVydHlBc3NpZ25tZW50KCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzaW1wbGVQcm9wZXJ0eUFzc2lnbm1lbnQoKTtcbiAgICB9XG5cbiAgICBleHRlbmRPYmplY3RXaXRoV3JhcHBlZE1ldGhvZHMoKTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZE9iamVjdFdpdGhXcmFwcGVkTWV0aG9kcygpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdyYXBwZWRNZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhY2Nlc3NvciA9IGdldEFjY2Vzc29yKG9iamVjdCwgcHJvcGVydHksIHdyYXBwZWRNZXRob2RzW2ldKTtcbiAgICAgICAgICAgIHRhcmdldCA9IGFjY2Vzc29yID8gbWV0aG9kW2FjY2Vzc29yXSA6IG1ldGhvZDtcbiAgICAgICAgICAgIGV4dGVuZC5ub25FbnVtKHRhcmdldCwge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICB3cmFwcGVkTWV0aG9kOiB3cmFwcGVkTWV0aG9kc1tpXSxcblxuICAgICAgICAgICAgICAgIC8vIFNldCB1cCBhbiBFcnJvciBvYmplY3QgZm9yIGEgc3RhY2sgdHJhY2Ugd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgdG8gZmluZCB3aGF0IGxpbmUgb2ZcbiAgICAgICAgICAgICAgICAvLyBjb2RlIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2FzIGNyZWF0ZWQgb24uXG4gICAgICAgICAgICAgICAgc3RhY2tUcmFjZUVycm9yOiBuZXcgRXJyb3IoXCJTdGFjayBUcmFjZSBmb3Igb3JpZ2luYWxcIiksXG5cbiAgICAgICAgICAgICAgICByZXN0b3JlOiByZXN0b3JlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRhcmdldC5yZXN0b3JlLnNpbm9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghaGFzRVM1U3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIG1pcnJvclByb3BlcnRpZXModGFyZ2V0LCB3cmFwcGVkTWV0aG9kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICAgIGFjY2Vzc29yID0gZ2V0QWNjZXNzb3Iob2JqZWN0LCBwcm9wZXJ0eSwgdGhpcy53cmFwcGVkTWV0aG9kKTtcbiAgICAgICAgbGV0IGRlc2NyaXB0b3I7XG4gICAgICAgIC8vIEZvciBwcm90b3R5cGUgcHJvcGVydGllcyB0cnkgdG8gcmVzZXQgYnkgZGVsZXRlIGZpcnN0LlxuICAgICAgICAvLyBJZiB0aGlzIGZhaWxzIChleDogbG9jYWxTdG9yYWdlIG9uIG1vYmlsZSBzYWZhcmkpIHRoZW4gZm9yY2UgYSByZXNldFxuICAgICAgICAvLyB2aWEgZGlyZWN0IGFzc2lnbm1lbnQuXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgICAgaWYgKCFvd25lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHNvbWUgY2FzZXMgYGRlbGV0ZWAgbWF5IHRocm93IGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldW2FjY2Vzc29yXTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgICAgICAgICAgLy8gRm9yIG5hdGl2ZSBjb2RlIGZ1bmN0aW9ucyBgZGVsZXRlYCBmYWlscyB3aXRob3V0IHRocm93aW5nIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgLy8gb24gQ2hyb21lIDwgNDMsIFBoYW50b21KUywgZXRjLlxuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yW2FjY2Vzc29yXSA9IHdyYXBwZWRNZXRob2REZXNjW2FjY2Vzc29yXTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVthY2Nlc3Nvcl0gPSB0aGlzLndyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb24gdG8gY2hlY2sgZmFpbHVyZXMgdGhlbiBmb3JjZSBhIHJlc2V0XG4gICAgICAgICAgICAgICAgLy8gdmlhIGRpcmVjdCBhc3NpZ25tZW50LlxuICAgICAgICAgICAgICAgIGlmIChvYmplY3RbcHJvcGVydHldW2FjY2Vzc29yXSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV1bYWNjZXNzb3JdID0gdGhpcy53cmFwcGVkTWV0aG9kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghb3duZWQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgd3JhcHBlZE1ldGhvZERlc2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzRVM1U3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB0aGlzLndyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB0aGlzLndyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaW5vblR5cGUuZ2V0KG9iamVjdCkgPT09IFwic3R1Yi1pbnN0YW5jZVwiKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHNpbXBseSB0byBhdm9pZCBlcnJvcnMgYWZ0ZXIgcmVzdG9yaW5nIGlmIHNvbWV0aGluZyBzaG91bGRcbiAgICAgICAgICAgIC8vIHRyYXZlcnNlIHRoZSBvYmplY3QgaW4gYSBjbGVhbnVwIHBoYXNlLCByZWYgIzI0NzdcbiAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBub29wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZXh0ZW5kID0gcmVxdWlyZShcIi4vY29yZS9leHRlbmRcIik7XG5jb25zdCBGYWtlVGltZXJzID0gcmVxdWlyZShcIkBzaW5vbmpzL2Zha2UtdGltZXJzXCIpO1xuY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gZ2xvYmFsQ3R4XG4gKlxuICogQHJldHVybnMge29iamVjdH0gdGhlIGNsb2NrLCBhZnRlciBpbnN0YWxsaW5nIGl0IG9uIHRoZSBnbG9iYWwgY29udGV4dCwgaWYgZ2l2ZW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xvY2soY29uZmlnLCBnbG9iYWxDdHgpIHtcbiAgICBsZXQgRmFrZVRpbWVyc0N0eCA9IEZha2VUaW1lcnM7XG4gICAgaWYgKGdsb2JhbEN0eCAhPT0gbnVsbCAmJiB0eXBlb2YgZ2xvYmFsQ3R4ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIEZha2VUaW1lcnNDdHggPSBGYWtlVGltZXJzLndpdGhHbG9iYWwoZ2xvYmFsQ3R4KTtcbiAgICB9XG4gICAgY29uc3QgY2xvY2sgPSBGYWtlVGltZXJzQ3R4Lmluc3RhbGwoY29uZmlnKTtcbiAgICBjbG9jay5yZXN0b3JlID0gY2xvY2sudW5pbnN0YWxsO1xuICAgIHJldHVybiBjbG9jaztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGdsb2JhbFByb3BOYW1lXG4gKi9cbmZ1bmN0aW9uIGFkZElmRGVmaW5lZChvYmosIGdsb2JhbFByb3BOYW1lKSB7XG4gICAgY29uc3QgZ2xvYmFsUHJvcCA9IGdsb2JhbE9iamVjdFtnbG9iYWxQcm9wTmFtZV07XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxQcm9wICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9ialtnbG9iYWxQcm9wTmFtZV0gPSBnbG9iYWxQcm9wO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcnxEYXRlfG9iamVjdH0gZGF0ZU9yQ29uZmlnIFRoZSB1bml4IGVwb2NoIHZhbHVlIHRvIGluc3RhbGwgd2l0aCAoZGVmYXVsdCAwKVxuICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBhIGxvbGV4IGNsb2NrIGluc3RhbmNlXG4gKi9cbmV4cG9ydHMudXNlRmFrZVRpbWVycyA9IGZ1bmN0aW9uIChkYXRlT3JDb25maWcpIHtcbiAgICBjb25zdCBoYXNBcmd1bWVudHMgPSB0eXBlb2YgZGF0ZU9yQ29uZmlnICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIGNvbnN0IGFyZ3VtZW50SXNEYXRlTGlrZSA9XG4gICAgICAgICh0eXBlb2YgZGF0ZU9yQ29uZmlnID09PSBcIm51bWJlclwiIHx8IGRhdGVPckNvbmZpZyBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgY29uc3QgYXJndW1lbnRJc09iamVjdCA9XG4gICAgICAgIGRhdGVPckNvbmZpZyAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZGF0ZU9yQ29uZmlnID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG5cbiAgICBpZiAoIWhhc0FyZ3VtZW50cykge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ2xvY2soe1xuICAgICAgICAgICAgbm93OiAwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRJc0RhdGVMaWtlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbG9jayh7XG4gICAgICAgICAgICBub3c6IGRhdGVPckNvbmZpZyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50SXNPYmplY3QpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gZXh0ZW5kLm5vbkVudW0oe30sIGRhdGVPckNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGdsb2JhbEN0eCA9IGNvbmZpZy5nbG9iYWw7XG4gICAgICAgIGRlbGV0ZSBjb25maWcuZ2xvYmFsO1xuICAgICAgICByZXR1cm4gY3JlYXRlQ2xvY2soY29uZmlnLCBnbG9iYWxDdHgpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwidXNlRmFrZVRpbWVycyBleHBlY3RlZCBlcG9jaCBvciBjb25maWcgb2JqZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Npbm9uanMvc2lub25cIixcbiAgICApO1xufTtcblxuZXhwb3J0cy5jbG9jayA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgcmV0dXJuIEZha2VUaW1lcnMuY3JlYXRlQ2xvY2sobm93KTtcbiAgICB9LFxufTtcblxuY29uc3QgdGltZXJzID0ge1xuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQsXG4gICAgY2xlYXJUaW1lb3V0OiBjbGVhclRpbWVvdXQsXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwsXG4gICAgRGF0ZTogRGF0ZSxcbn07XG5hZGRJZkRlZmluZWQodGltZXJzLCBcInNldEltbWVkaWF0ZVwiKTtcbmFkZElmRGVmaW5lZCh0aW1lcnMsIFwiY2xlYXJJbW1lZGlhdGVcIik7XG5cbmV4cG9ydHMudGltZXJzID0gdGltZXJzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVyeSA9IHJlcXVpcmUoXCIuL3Byb3RvdHlwZXMvYXJyYXlcIikuZXZlcnk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkge1xuICAgIGlmIChjYWxsTWFwW3NweS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxsTWFwW3NweS5pZF0gPCBzcHkuY2FsbENvdW50O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWRqYWNlbnRDYWxscyhjYWxsTWFwLCBzcHksIGluZGV4LCBzcGllcykge1xuICAgIHZhciBjYWxsZWRCZWZvcmVOZXh0ID0gdHJ1ZTtcblxuICAgIGlmIChpbmRleCAhPT0gc3BpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjYWxsZWRCZWZvcmVOZXh0ID0gc3B5LmNhbGxlZEJlZm9yZShzcGllc1tpbmRleCArIDFdKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkgJiYgY2FsbGVkQmVmb3JlTmV4dCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTaW5vblByb3h5XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBjYWxsZWRCZWZvcmUgLSBBIG1ldGhvZCB0aGF0IGRldGVybWluZXMgaWYgdGhpcyBwcm94eSB3YXMgY2FsbGVkIGJlZm9yZSBhbm90aGVyIG9uZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gU29tZSBpZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNhbGxDb3VudCAtIE51bWJlciBvZiB0aW1lcyB0aGlzIHByb3h5IGhhcyBiZWVuIGNhbGxlZFxuICovXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHNwaWVzIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBzdXBwbGllZCBpblxuICogQHBhcmFtICB7U2lub25Qcm94eVtdIHwgU2lub25Qcm94eX0gc3BpZXMgQW4gYXJyYXkgb2YgcHJveGllcywgb3Igc2V2ZXJhbCBwcm94aWVzIGFzIGFyZ3VtZW50c1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiBzcGllcyBhcmUgY2FsbGVkIGluIG9yZGVyLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gY2FsbGVkSW5PcmRlcihzcGllcykge1xuICAgIHZhciBjYWxsTWFwID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgdmFyIF9zcGllcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzIDogc3BpZXM7XG5cbiAgICByZXR1cm4gZXZlcnkoX3NwaWVzLCBjaGVja0FkamFjZW50Q2FsbHMuYmluZChudWxsLCBjYWxsTWFwKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FsbGVkSW5PcmRlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBkaXNwbGF5IG5hbWUgZm9yIGEgdmFsdWUgZnJvbSBhIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0gIHtvYmplY3R9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMgeyhzdHJpbmd8bnVsbCl9IEEgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgY29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgcmV0dXJuIG5hbWUgfHwgbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWU7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGludm9rZSB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gYW5kIHByaW50IGFcbiAqIGRlcHJlY2F0aW9uIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1zZ1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnRzLndyYXAgPSBmdW5jdGlvbiAoZnVuYywgbXNnKSB7XG4gICAgdmFyIHdyYXBwZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cG9ydHMucHJpbnRXYXJuaW5nKG1zZyk7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICBpZiAoZnVuYy5wcm90b3R5cGUpIHtcbiAgICAgICAgd3JhcHBlZC5wcm90b3R5cGUgPSBmdW5jLnByb3RvdHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggY2FuIGJlIHN1cHBsaWVkIHRvIGB3cmFwKClgIHRvIG5vdGlmeSB0aGUgdXNlciB0aGF0IGFcbiAqIHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgc2lub24gQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhY2thZ2VOYW1lXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGZ1bmNOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmRlZmF1bHRNc2cgPSBmdW5jdGlvbiAocGFja2FnZU5hbWUsIGZ1bmNOYW1lKSB7XG4gICAgcmV0dXJuIGAke3BhY2thZ2VOYW1lfS4ke2Z1bmNOYW1lfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIEFQSSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mICR7cGFja2FnZU5hbWV9LmA7XG59O1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgb24gdGhlIGNvbnNvbGUsIHdoZW4gaXQgZXhpc3RzXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1zZ1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZXhwb3J0cy5wcmludFdhcm5pbmcgPSBmdW5jdGlvbiAobXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5lbWl0V2FybmluZykge1xuICAgICAgICAvLyBFbWl0IFdhcm5pbmdzIGluIE5vZGVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhtc2cpO1xuICAgIH0gZWxzZSBpZiAoY29uc29sZS5pbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIGZuIHJldHVybnMgdHJ1ZSBmb3IgYWxsIG1lbWJlcnMgb2Ygb2JqLlxuICogVGhpcyBpcyBhbiBldmVyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvcmtzIGZvciBhbGwgaXRlcmFibGVzXG4gKiBAcGFyYW0gIHtvYmplY3R9ICAgb2JqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgZm4pIHtcbiAgICB2YXIgcGFzcyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3dpbmcgYW4gZXJyb3IgaXMgdGhlIG9ubHkgd2F5IHRvIGJyZWFrIGBmb3JFYWNoYFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFzcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGlzcGxheSBuYW1lIGZvciBhIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmdW5jdGlvbk5hbWUoZnVuYykge1xuICAgIGlmICghZnVuYykge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZnVuYy5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgZnVuYy5uYW1lIHx8XG4gICAgICAgICAgICAvLyBVc2UgZnVuY3Rpb24gZGVjb21wb3NpdGlvbiBhcyBhIGxhc3QgcmVzb3J0IHRvIGdldCBmdW5jdGlvblxuICAgICAgICAgICAgLy8gbmFtZS4gRG9lcyBub3QgcmVseSBvbiBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIHRvIHdvcmsgLSBpZiBpdFxuICAgICAgICAgICAgLy8gZG9lc24ndCBkZWJ1Z2dpbmcgd2lsbCBiZSBzbGlnaHRseSBsZXNzIGluZm9ybWF0aXZlXG4gICAgICAgICAgICAvLyAoaS5lLiB0b1N0cmluZyB3aWxsIHNheSAnc3B5JyByYXRoZXIgdGhhbiAnbXlGdW5jJykuXG4gICAgICAgICAgICAoU3RyaW5nKGZ1bmMpLm1hdGNoKC9mdW5jdGlvbiAoW15cXHMoXSspLykgfHwgW10pWzFdXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTdHJpbmdpZnkgbWF5IGZhaWwgYW5kIHdlIG1pZ2h0IGdldCBhbiBleGNlcHRpb24sIGFzIGEgbGFzdC1sYXN0XG4gICAgICAgIC8vIHJlc29ydCBmYWxsIGJhY2sgdG8gZW1wdHkgc3RyaW5nLlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAqIEB0eXBlIHtvYmplY3R9IGdsb2JhbE9iamVjdFxuICovXG52YXIgZ2xvYmFsT2JqZWN0O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAvLyBOb2RlXG4gICAgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gQnJvd3NlclxuICAgIGdsb2JhbE9iamVjdCA9IHdpbmRvdztcbn0gZWxzZSB7XG4gICAgLy8gV2ViV29ya2VyXG4gICAgZ2xvYmFsT2JqZWN0ID0gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxPYmplY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2xvYmFsOiByZXF1aXJlKFwiLi9nbG9iYWxcIiksXG4gICAgY2FsbGVkSW5PcmRlcjogcmVxdWlyZShcIi4vY2FsbGVkLWluLW9yZGVyXCIpLFxuICAgIGNsYXNzTmFtZTogcmVxdWlyZShcIi4vY2xhc3MtbmFtZVwiKSxcbiAgICBkZXByZWNhdGVkOiByZXF1aXJlKFwiLi9kZXByZWNhdGVkXCIpLFxuICAgIGV2ZXJ5OiByZXF1aXJlKFwiLi9ldmVyeVwiKSxcbiAgICBmdW5jdGlvbk5hbWU6IHJlcXVpcmUoXCIuL2Z1bmN0aW9uLW5hbWVcIiksXG4gICAgb3JkZXJCeUZpcnN0Q2FsbDogcmVxdWlyZShcIi4vb3JkZXItYnktZmlyc3QtY2FsbFwiKSxcbiAgICBwcm90b3R5cGVzOiByZXF1aXJlKFwiLi9wcm90b3R5cGVzXCIpLFxuICAgIHR5cGVPZjogcmVxdWlyZShcIi4vdHlwZS1vZlwiKSxcbiAgICB2YWx1ZVRvU3RyaW5nOiByZXF1aXJlKFwiLi92YWx1ZS10by1zdHJpbmdcIiksXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzb3J0ID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zb3J0O1xudmFyIHNsaWNlID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zbGljZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb21wYXJhdG9yKGEsIGIpIHtcbiAgICAvLyB1dWlkLCB3b24ndCBldmVyIGJlIGVxdWFsXG4gICAgdmFyIGFDYWxsID0gYS5nZXRDYWxsKDApO1xuICAgIHZhciBiQ2FsbCA9IGIuZ2V0Q2FsbCgwKTtcbiAgICB2YXIgYUlkID0gKGFDYWxsICYmIGFDYWxsLmNhbGxJZCkgfHwgLTE7XG4gICAgdmFyIGJJZCA9IChiQ2FsbCAmJiBiQ2FsbC5jYWxsSWQpIHx8IC0xO1xuXG4gICAgcmV0dXJuIGFJZCA8IGJJZCA/IC0xIDogMTtcbn1cblxuLyoqXG4gKiBBIFNpbm9uIHByb3h5IG9iamVjdCAoZmFrZSwgc3B5LCBzdHViKVxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Q2FsbCAtIEEgbWV0aG9kIHRoYXQgY2FuIHJldHVybiB0aGUgZmlyc3QgY2FsbFxuICovXG5cbi8qKlxuICogU29ydHMgYW4gYXJyYXkgb2YgU2lub25Qcm94eSBpbnN0YW5jZXMgKGZha2UsIHNweSwgc3R1YikgYnkgdGhlaXIgZmlyc3QgY2FsbFxuICogQHBhcmFtICB7U2lub25Qcm94eVtdIHwgU2lub25Qcm94eX0gc3BpZXNcbiAqIEByZXR1cm5zIHtTaW5vblByb3h5W119XG4gKi9cbmZ1bmN0aW9uIG9yZGVyQnlGaXJzdENhbGwoc3BpZXMpIHtcbiAgICByZXR1cm4gc29ydChzbGljZShzcGllcyksIGNvbXBhcmF0b3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9yZGVyQnlGaXJzdENhbGw7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvcHlQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jb3B5LXByb3RvdHlwZS1tZXRob2RzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoQXJyYXkucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLmNhbGw7XG52YXIgdGhyb3dzT25Qcm90byA9IHJlcXVpcmUoXCIuL3Rocm93cy1vbi1wcm90b1wiKTtcblxudmFyIGRpc2FsbG93ZWRQcm9wZXJ0aWVzID0gW1xuICAgIC8vIGlnbm9yZSBzaXplIGJlY2F1c2UgaXQgdGhyb3dzIGZyb20gTWFwXG4gICAgXCJzaXplXCIsXG4gICAgXCJjYWxsZXJcIixcbiAgICBcImNhbGxlZVwiLFxuICAgIFwiYXJndW1lbnRzXCIsXG5dO1xuXG4vLyBUaGlzIGJyYW5jaCBpcyBjb3ZlcmVkIHdoZW4gdGVzdHMgYXJlIHJ1biB3aXRoIGAtLWRpc2FibGUtcHJvdG89dGhyb3dgLFxuLy8gaG93ZXZlciB3ZSBjYW4gdGVzdCBib3RoIGJyYW5jaGVzIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHRoaXMgaXMgaWdub3JlZFxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmICh0aHJvd3NPblByb3RvKSB7XG4gICAgZGlzYWxsb3dlZFByb3BlcnRpZXMucHVzaChcIl9fcHJvdG9fX1wiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3B5UHJvdG90eXBlTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKS5yZWR1Y2UoZnVuY3Rpb24gKFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIG5hbWVcbiAgICApIHtcbiAgICAgICAgaWYgKGRpc2FsbG93ZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGVbbmFtZV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtuYW1lXSA9IGNhbGwuYmluZChwcm90b3R5cGVbbmFtZV0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvcHlQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jb3B5LXByb3RvdHlwZS1tZXRob2RzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoRnVuY3Rpb24ucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheTogcmVxdWlyZShcIi4vYXJyYXlcIiksXG4gICAgZnVuY3Rpb246IHJlcXVpcmUoXCIuL2Z1bmN0aW9uXCIpLFxuICAgIG1hcDogcmVxdWlyZShcIi4vbWFwXCIpLFxuICAgIG9iamVjdDogcmVxdWlyZShcIi4vb2JqZWN0XCIpLFxuICAgIHNldDogcmVxdWlyZShcIi4vc2V0XCIpLFxuICAgIHN0cmluZzogcmVxdWlyZShcIi4vc3RyaW5nXCIpLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShNYXAucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShPYmplY3QucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShTZXQucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlLW1ldGhvZHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShTdHJpbmcucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIElzIHRydWUgd2hlbiB0aGUgZW52aXJvbm1lbnQgY2F1c2VzIGFuIGVycm9yIHRvIGJlIHRocm93biBmb3IgYWNjZXNzaW5nIHRoZVxuICogX19wcm90b19fIHByb3BlcnR5LlxuICogVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gc3VwcG9ydCBgbm9kZSAtLWRpc2FibGUtcHJvdG89dGhyb3dgLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvcHJvdG9cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5sZXQgdGhyb3dzT25Qcm90bztcbnRyeSB7XG4gICAgY29uc3Qgb2JqZWN0ID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvLCBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICBvYmplY3QuX19wcm90b19fO1xuICAgIHRocm93c09uUHJvdG8gPSBmYWxzZTtcbn0gY2F0Y2ggKF8pIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyBjb3ZlcmVkIHdoZW4gdGVzdHMgYXJlIHJ1biB3aXRoIGAtLWRpc2FibGUtcHJvdG89dGhyb3dgLFxuICAgIC8vIGhvd2V2ZXIgd2UgY2FuIHRlc3QgYm90aCBicmFuY2hlcyBhdCB0aGUgc2FtZSB0aW1lLCBzbyB0aGlzIGlzIGlnbm9yZWRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93c09uUHJvdG8gPSB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm93c09uUHJvdG87XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHR5cGUgPSByZXF1aXJlKFwidHlwZS1kZXRlY3RcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG93ZXItY2FzZSByZXN1bHQgb2YgcnVubmluZyB0eXBlIGZyb20gdHlwZS1kZXRlY3Qgb24gdGhlIHZhbHVlXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0eXBlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZSh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICogQHBhcmFtICB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZVRvU3RyaW5nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmdsb2JhbDtcbmxldCB0aW1lcnNNb2R1bGUsIHRpbWVyc1Byb21pc2VzTW9kdWxlO1xuaWYgKHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHRyeSB7XG4gICAgICAgIHRpbWVyc01vZHVsZSA9IHJlcXVpcmUoXCJ0aW1lcnNcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpZ25vcmVkXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHRpbWVyc1Byb21pc2VzTW9kdWxlID0gcmVxdWlyZShcInRpbWVycy9wcm9taXNlc1wiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZWRcbiAgICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSWRsZURlYWRsaW5lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpZFRpbWVvdXQgLSB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIG9wdGlvbmFsIHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTpudW1iZXJ9IHRpbWVSZW1haW5pbmcgLSBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIHByb3ZpZGluZyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyByZW1haW5pbmcgaW4gdGhlIGN1cnJlbnQgaWRsZSBwZXJpb2RcbiAqL1xuXG4vKipcbiAqIFF1ZXVlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBkdXJpbmcgYSBicm93c2VyJ3MgaWRsZSBwZXJpb2RzXG4gKlxuICogQGNhbGxiYWNrIFJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oSWRsZURlYWRsaW5lKX0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7e3RpbWVvdXQ6IG51bWJlcn19IG9wdGlvbnMgLSBhbiBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGlkXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgTmV4dFRpY2tcbiAqIEBwYXJhbSB7Vm9pZFZhckFyZ3NGdW5jfSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0byBydW5cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyAtIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayB3aXRoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBTZXRJbW1lZGlhdGVcbiAqIEBwYXJhbSB7Vm9pZFZhckFyZ3NGdW5jfSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0byBydW5cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyAtIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayB3aXRoXG4gKiBAcmV0dXJucyB7Tm9kZUltbWVkaWF0ZX1cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWb2lkVmFyQXJnc0Z1bmNcbiAqIEBwYXJhbSB7Li4uKn0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcnVuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHJldHVybnMge251bWJlcn0gLSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbm93XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbG9ja1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vdyAtIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gRGF0ZSAtIHRoZSBEYXRlIGNvbnN0cnVjdG9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9vcExpbWl0IC0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVycyBiZWZvcmUgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcFxuICogQHByb3BlcnR5IHtSZXF1ZXN0SWRsZUNhbGxiYWNrfSByZXF1ZXN0SWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gY2FuY2VsSWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge3NldFRpbWVvdXR9IHNldFRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJUaW1lb3V0fSBjbGVhclRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7TmV4dFRpY2t9IG5leHRUaWNrXG4gKiBAcHJvcGVydHkge3F1ZXVlTWljcm90YXNrfSBxdWV1ZU1pY3JvdGFza1xuICogQHByb3BlcnR5IHtzZXRJbnRlcnZhbH0gc2V0SW50ZXJ2YWxcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJJbnRlcnZhbH0gY2xlYXJJbnRlcnZhbFxuICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGV9IHNldEltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihOb2RlSW1tZWRpYXRlKTp2b2lkfSBjbGVhckltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gY291bnRUaW1lcnNcbiAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lfSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTp2b2lkfSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOnZvaWR9IHJ1bk1pY3JvdGFza3NcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyfSB0aWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8bnVtYmVyPn0gdGlja0FzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbmV4dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IG5leHRBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1bkFsbFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBydW5BbGxBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvTGFzdFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IHJ1blRvTGFzdEFzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHJlc2V0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlciB8IERhdGUpOiB2b2lkfSBzZXRTeXN0ZW1UaW1lXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWR9IGp1bXBcbiAqIEBwcm9wZXJ0eSB7UGVyZm9ybWFuY2V9IHBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcltdKTogbnVtYmVyW119IGhydGltZSAtIHByb2Nlc3MuaHJ0aW1lIChsZWdhY3kpXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHVuaW5zdGFsbCBVbmluc3RhbGwgdGhlIGNsb2NrLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbltdfSBtZXRob2RzIC0gdGhlIG1ldGhvZHMgdGhhdCBhcmUgZmFrZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3VsZENsZWFyTmF0aXZlVGltZXJzXSBpbmhlcml0ZWQgZnJvbSBjb25maWdcbiAqIEBwcm9wZXJ0eSB7e21ldGhvZE5hbWU6c3RyaW5nLCBvcmlnaW5hbDphbnl9W10gfCB1bmRlZmluZWR9IHRpbWVyc01vZHVsZU1ldGhvZHNcbiAqIEBwcm9wZXJ0eSB7e21ldGhvZE5hbWU6c3RyaW5nLCBvcmlnaW5hbDphbnl9W10gfCB1bmRlZmluZWR9IHRpbWVyc1Byb21pc2VzTW9kdWxlTWV0aG9kc1xuICogQHByb3BlcnR5IHtNYXA8ZnVuY3Rpb24oKTogdm9pZCwgQWJvcnRTaWduYWw+fSBhYm9ydExpc3RlbmVyTWFwXG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYGluc3RhbGxgIG1ldGhvZC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25maWdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfERhdGV9IFtub3ddIGEgbnVtYmVyIChpbiBtaWxsaXNlY29uZHMpIG9yIGEgRGF0ZSBvYmplY3QgKGRlZmF1bHQgZXBvY2gpXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdG9GYWtlXSBuYW1lcyBvZiB0aGUgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBmYWtlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbG9vcExpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRBZHZhbmNlVGltZV0gdGVsbHMgRmFrZVRpbWVycyB0byBpbmNyZW1lbnQgbW9ja2VkIHRpbWUgYXV0b21hdGljYWxseSAoZGVmYXVsdCBmYWxzZSlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYWR2YW5jZVRpbWVEZWx0YV0gaW5jcmVtZW50IG1vY2tlZCB0aW1lIGV2ZXJ5IDw8YWR2YW5jZVRpbWVEZWx0YT4+IG1zIChkZWZhdWx0OiAyMG1zKVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNdIGZvcndhcmRzIGNsZWFyIHRpbWVyIGNhbGxzIHRvIG5hdGl2ZSBmdW5jdGlvbnMgaWYgdGhleSBhcmUgbm90IGZha2VzIChkZWZhdWx0OiBmYWxzZSlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lnbm9yZU1pc3NpbmdUaW1lcnNdIGRlZmF1bHQgaXMgZmFsc2UsIG1lYW5pbmcgYXNraW5nIHRvIGZha2UgdGltZXJzIHRoYXQgYXJlIG5vdCBwcmVzZW50IHdpbGwgdGhyb3cgYW4gZXJyb3JcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBzY2hlZHVsZWQgZmFrZSB0aW1lclxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRpbWVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcHJvcGVydHkgeypbXX0gYXJnc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlbGF5XG4gKiBAcHJvcGVydHkge251bWJlcn0gY2FsbEF0XG4gKiBAcHJvcGVydHkge251bWJlcn0gY3JlYXRlZEF0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge0Vycm9yfSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBBIE5vZGUgdGltZXJcbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb2RlSW1tZWRpYXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGJvb2xlYW59IGhhc1JlZlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBOb2RlSW1tZWRpYXRlfSByZWZcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogTm9kZUltbWVkaWF0ZX0gdW5yZWZcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuLyoqXG4gKiBNb2NrcyBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIHNwZWNpZmllZCBnbG9iYWwgbmFtZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7Kn0gX2dsb2JhbCBOYW1lc3BhY2UgdG8gbW9jayAoZS5nLiBgd2luZG93YClcbiAqIEByZXR1cm5zIHtGYWtlVGltZXJzfVxuICovXG5mdW5jdGlvbiB3aXRoR2xvYmFsKF9nbG9iYWwpIHtcbiAgICBjb25zdCBtYXhUaW1lb3V0ID0gTWF0aC5wb3coMiwgMzEpIC0gMTsgLy9zZWUgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG4gICAgY29uc3QgaWRDb3VudGVyU3RhcnQgPSAxZTEyOyAvLyBhcmJpdHJhcmlseSBsYXJnZSBudW1iZXIgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG5hdGl2ZSB0aW1lciBJRHNcbiAgICBjb25zdCBOT09QID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgY29uc3QgTk9PUF9BUlJBWSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG4gICAgY29uc3QgaXNQcmVzZW50ID0ge307XG4gICAgbGV0IHRpbWVvdXRSZXN1bHQsXG4gICAgICAgIGFkZFRpbWVyUmV0dXJuc09iamVjdCA9IGZhbHNlO1xuXG4gICAgaWYgKF9nbG9iYWwuc2V0VGltZW91dCkge1xuICAgICAgICBpc1ByZXNlbnQuc2V0VGltZW91dCA9IHRydWU7XG4gICAgICAgIHRpbWVvdXRSZXN1bHQgPSBfZ2xvYmFsLnNldFRpbWVvdXQoTk9PUCwgMCk7XG4gICAgICAgIGFkZFRpbWVyUmV0dXJuc09iamVjdCA9IHR5cGVvZiB0aW1lb3V0UmVzdWx0ID09PSBcIm9iamVjdFwiO1xuICAgIH1cbiAgICBpc1ByZXNlbnQuY2xlYXJUaW1lb3V0ID0gQm9vbGVhbihfZ2xvYmFsLmNsZWFyVGltZW91dCk7XG4gICAgaXNQcmVzZW50LnNldEludGVydmFsID0gQm9vbGVhbihfZ2xvYmFsLnNldEludGVydmFsKTtcbiAgICBpc1ByZXNlbnQuY2xlYXJJbnRlcnZhbCA9IEJvb2xlYW4oX2dsb2JhbC5jbGVhckludGVydmFsKTtcbiAgICBpc1ByZXNlbnQuaHJ0aW1lID1cbiAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCI7XG4gICAgaXNQcmVzZW50LmhydGltZUJpZ2ludCA9XG4gICAgICAgIGlzUHJlc2VudC5ocnRpbWUgJiYgdHlwZW9mIF9nbG9iYWwucHJvY2Vzcy5ocnRpbWUuYmlnaW50ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgaXNQcmVzZW50Lm5leHRUaWNrID1cbiAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCB1dGlsUHJvbWlzaWZ5ID0gX2dsb2JhbC5wcm9jZXNzICYmIHJlcXVpcmUoXCJ1dGlsXCIpLnByb21pc2lmeTtcbiAgICBpc1ByZXNlbnQucGVyZm9ybWFuY2UgPVxuICAgICAgICBfZ2xvYmFsLnBlcmZvcm1hbmNlICYmIHR5cGVvZiBfZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGhhc1BlcmZvcm1hbmNlUHJvdG90eXBlID1cbiAgICAgICAgX2dsb2JhbC5QZXJmb3JtYW5jZSAmJlxuICAgICAgICAodHlwZW9mIF9nbG9iYWwuUGVyZm9ybWFuY2UpLm1hdGNoKC9eKGZ1bmN0aW9ufG9iamVjdCkkLyk7XG4gICAgY29uc3QgaGFzUGVyZm9ybWFuY2VDb25zdHJ1Y3RvclByb3RvdHlwZSA9XG4gICAgICAgIF9nbG9iYWwucGVyZm9ybWFuY2UgJiZcbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZS5jb25zdHJ1Y3RvciAmJlxuICAgICAgICBfZ2xvYmFsLnBlcmZvcm1hbmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICBpc1ByZXNlbnQucXVldWVNaWNyb3Rhc2sgPSBfZ2xvYmFsLmhhc093blByb3BlcnR5KFwicXVldWVNaWNyb3Rhc2tcIik7XG4gICAgaXNQcmVzZW50LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lICYmXG4gICAgICAgIHR5cGVvZiBfZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGlzUHJlc2VudC5jYW5jZWxBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBpc1ByZXNlbnQucmVxdWVzdElkbGVDYWxsYmFjayA9XG4gICAgICAgIF9nbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjayAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgaXNQcmVzZW50LmNhbmNlbElkbGVDYWxsYmFja1ByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjayAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBpc1ByZXNlbnQuc2V0SW1tZWRpYXRlID1cbiAgICAgICAgX2dsb2JhbC5zZXRJbW1lZGlhdGUgJiYgdHlwZW9mIF9nbG9iYWwuc2V0SW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCI7XG4gICAgaXNQcmVzZW50LmNsZWFySW1tZWRpYXRlID1cbiAgICAgICAgX2dsb2JhbC5jbGVhckltbWVkaWF0ZSAmJiB0eXBlb2YgX2dsb2JhbC5jbGVhckltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGlzUHJlc2VudC5JbnRsID0gX2dsb2JhbC5JbnRsICYmIHR5cGVvZiBfZ2xvYmFsLkludGwgPT09IFwib2JqZWN0XCI7XG5cbiAgICBpZiAoX2dsb2JhbC5jbGVhclRpbWVvdXQpIHtcbiAgICAgICAgX2dsb2JhbC5jbGVhclRpbWVvdXQodGltZW91dFJlc3VsdCk7XG4gICAgfVxuXG4gICAgY29uc3QgTmF0aXZlRGF0ZSA9IF9nbG9iYWwuRGF0ZTtcbiAgICBjb25zdCBOYXRpdmVJbnRsID0gX2dsb2JhbC5JbnRsO1xuICAgIGxldCB1bmlxdWVUaW1lcklkID0gaWRDb3VudGVyU3RhcnQ7XG5cbiAgICBpZiAoTmF0aXZlRGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGdsb2JhbCBzY29wZSBkb2Vzbid0IGhhdmUgYSBgRGF0ZWAgb2JqZWN0XCIgK1xuICAgICAgICAgICAgICAgIFwiIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Npbm9uanMvc2lub24vaXNzdWVzLzE4NTIjaXNzdWVjb21tZW50LTQxOTYyMjc4MClcIixcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaXNQcmVzZW50LkRhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFBlcmZvcm1hbmNlRW50cnkgb2JqZWN0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSBwZXJmb3JtYW5jZSBtZXRyaWNcbiAgICAgKiB0aGF0IGlzIHBhcnQgb2YgdGhlIGJyb3dzZXIncyBwZXJmb3JtYW5jZSB0aW1lbGluZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBgbWFya2AgYW5kIGBtZWFzdXJlYCBtZXRob2RzIG9uIHRoZSBQZXJmb3JtYW5jZSBwcm90b3R5cGVcbiAgICAgKi9cbiAgICBjbGFzcyBGYWtlUGVyZm9ybWFuY2VFbnRyeSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG5hbWUsIGVudHJ5VHlwZSwgc3RhcnRUaW1lLCBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuZW50cnlUeXBlID0gZW50cnlUeXBlO1xuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICB0b0pTT04oKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyAuLi50aGlzIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVtYmVyRmluaXRlKG51bSkge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKTtcbiAgICB9XG5cbiAgICBsZXQgaXNOZWFySW5maW5pdGVMaW1pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSkge1xuICAgICAgICBpZiAoY2xvY2subG9vcExpbWl0ICYmIGkgPT09IGNsb2NrLmxvb3BMaW1pdCAtIDEpIHtcbiAgICAgICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXNldElzTmVhckluZmluaXRlTGltaXQoKSB7XG4gICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBzdHJpbmdzIGxpa2UgXCIwMToxMDowMFwiIChtZWFuaW5nIDEgaG91ciwgMTAgbWludXRlcywgMCBzZWNvbmRzKSBpbnRvXG4gICAgICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyBwYXNzZWRcbiAgICAgKiB0byBjbG9jay50aWNrKClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IHN0ci5zcGxpdChcIjpcIik7XG4gICAgICAgIGNvbnN0IGwgPSBzdHJpbmdzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSBsO1xuICAgICAgICBsZXQgbXMgPSAwO1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcInRpY2sgb25seSB1bmRlcnN0YW5kcyBudW1iZXJzLCAnbTpzJyBhbmQgJ2g6bTpzJy4gRWFjaCBwYXJ0IG11c3QgYmUgdHdvIGRpZ2l0c1wiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZ3NbaV0sIDEwKTtcblxuICAgICAgICAgICAgaWYgKHBhcnNlZCA+PSA2MCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0aW1lICR7c3RyfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtcyArPSBwYXJzZWQgKiBNYXRoLnBvdyg2MCwgbCAtIGkgLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtcyAqIDEwMDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZWNpbWFsIHBhcnQgb2YgdGhlIG1pbGxpc2Vjb25kIHZhbHVlIGFzIG5hbm9zZWNvbmRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbXNGbG9hdCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGFuIGludGVnZXIgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIGluIHRoZSByYW5nZSBbMCwxZTYpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOiBuYW5vUmVtYWluZXIoMTIzLjQ1Njc4OSkgLT4gNDU2Nzg5XG4gICAgICovXG4gICAgZnVuY3Rpb24gbmFub1JlbWFpbmRlcihtc0Zsb2F0KSB7XG4gICAgICAgIGNvbnN0IG1vZHVsbyA9IDFlNjtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gKG1zRmxvYXQgKiAxZTYpICUgbW9kdWxvO1xuICAgICAgICBjb25zdCBwb3NpdGl2ZVJlbWFpbmRlciA9XG4gICAgICAgICAgICByZW1haW5kZXIgPCAwID8gcmVtYWluZGVyICsgbW9kdWxvIDogcmVtYWluZGVyO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHBvc2l0aXZlUmVtYWluZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGdyb2sgdGhlIGBub3dgIHBhcmFtZXRlciB0byBjcmVhdGVDbG9jay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RGF0ZXxudW1iZXJ9IGVwb2NoIHRoZSBzeXN0ZW0gdGltZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RXBvY2goZXBvY2gpIHtcbiAgICAgICAgaWYgKCFlcG9jaCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlcG9jaC5nZXRUaW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBlcG9jaC5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlcG9jaCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVwb2NoO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJub3cgc2hvdWxkIGJlIG1pbGxpc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvXG4gICAgICogQHBhcmFtIHtUaW1lcn0gdGltZXJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpblJhbmdlKGZyb20sIHRvLCB0aW1lcikge1xuICAgICAgICByZXR1cm4gdGltZXIgJiYgdGltZXIuY2FsbEF0ID49IGZyb20gJiYgdGltZXIuY2FsbEF0IDw9IHRvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtUaW1lcn0gam9iXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGpvYikge1xuICAgICAgICBjb25zdCBpbmZpbml0ZUxvb3BFcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBYm9ydGluZyBhZnRlciBydW5uaW5nICR7Y2xvY2subG9vcExpbWl0fSB0aW1lcnMsIGFzc3VtaW5nIGFuIGluZmluaXRlIGxvb3AhYCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWpvYi5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGluZmluaXRlTG9vcEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGF0dGVybiBuZXZlciBtYXRjaGVkIGluIE5vZGVcbiAgICAgICAgY29uc3QgY29tcHV0ZWRUYXJnZXRQYXR0ZXJuID0gL3RhcmdldFxcLipbPHwofFtdLio/Wz58XFxdfCldXFxzKi87XG4gICAgICAgIGxldCBjbG9ja01ldGhvZFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgU3RyaW5nKE9iamVjdC5rZXlzKGNsb2NrKS5qb2luKFwifFwiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gbm9kZS5qcyBlbnZpcm9ubWVudFxuICAgICAgICAgICAgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBgXFxcXHMrYXQgKE9iamVjdFxcXFwuKT8oPzoke09iamVjdC5rZXlzKGNsb2NrKS5qb2luKFwifFwiKX0pXFxcXHMrYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF0Y2hlZExpbmVJbmRleCA9IC0xO1xuICAgICAgICBqb2IuZXJyb3Iuc3RhY2suc3BsaXQoXCJcXG5cIikuc29tZShmdW5jdGlvbiAobGluZSwgaSkge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgbWF0Y2hlZCBhIGNvbXB1dGVkIHRhcmdldCBsaW5lIChlLmcuIHNldFRpbWVvdXQpIHRoZW4gd2VcbiAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8gbG9vayBhbnkgZnVydGhlci4gUmV0dXJuIHRydWUgdG8gc3RvcCBpdGVyYXRpbmcuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkQ29tcHV0ZWRUYXJnZXQgPSBsaW5lLm1hdGNoKGNvbXB1dGVkVGFyZ2V0UGF0dGVybik7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ29tcHV0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkTGluZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UndmUgbWF0Y2hlZCBhIGNsb2NrIG1ldGhvZCBsaW5lLCB0aGVuIHRoZXJlIG1heSBzdGlsbCBiZVxuICAgICAgICAgICAgLy8gb3RoZXJzIGZ1cnRoZXIgZG93biB0aGUgdHJhY2UuIFJldHVybiBmYWxzZSB0byBrZWVwIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDbG9ja01ldGhvZCA9IGxpbmUubWF0Y2goY2xvY2tNZXRob2RQYXR0ZXJuKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ2xvY2tNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkTGluZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgbWF0Y2hlZCBhbnl0aGluZyBvbiB0aGlzIGxpbmUsIGJ1dCB3ZSBtYXRjaGVkXG4gICAgICAgICAgICAvLyBwcmV2aW91c2x5IGFuZCBzZXQgdGhlIG1hdGNoZWQgbGluZSBpbmRleCwgdGhlbiB3ZSBjYW4gc3RvcC5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgbWF0Y2hlZCBwcmV2aW91c2x5LCB0aGVuIHdlIHNob3VsZCBrZWVwIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkTGluZUluZGV4ID49IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gYCR7aW5maW5pdGVMb29wRXJyb3J9XFxuJHtqb2IudHlwZSB8fCBcIk1pY3JvdGFza1wifSAtICR7XG4gICAgICAgICAgICBqb2IuZnVuYy5uYW1lIHx8IFwiYW5vbnltb3VzXCJcbiAgICAgICAgfVxcbiR7am9iLmVycm9yLnN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgIC5zbGljZShtYXRjaGVkTGluZUluZGV4ICsgMSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpfWA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbmZpbml0ZUxvb3BFcnJvciwgXCJzdGFja1wiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YWNrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmZpbml0ZUxvb3BFcnJvcjtcbiAgICB9XG5cbiAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSgpIHtcbiAgICAgICAgY2xhc3MgQ2xvY2tEYXRlIGV4dGVuZHMgTmF0aXZlRGF0ZSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbW9udGhcbiAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaG91clxuICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnV0ZVxuICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNlY29uZFxuICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgY29uc3RydWN0b3IoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcykge1xuICAgICAgICAgICAgICAgIC8vIERlZmVuc2l2ZSBhbmQgdmVyYm9zZSB0byBhdm9pZCBwb3RlbnRpYWwgaGFybSBpbiBwYXNzaW5nXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgdW5kZWZpbmVkIHdoZW4gdXNlciBkb2VzIG5vdCBwYXNzIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoQ2xvY2tEYXRlLmNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIE5hdGl2ZURhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBDbG9ja0RhdGUuaXNGYWtlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoTmF0aXZlRGF0ZS5ub3cpIHtcbiAgICAgICAgICAgIENsb2NrRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENsb2NrRGF0ZS5jbG9jay5ub3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE5hdGl2ZURhdGUudG9Tb3VyY2UpIHtcbiAgICAgICAgICAgIENsb2NrRGF0ZS50b1NvdXJjZSA9IGZ1bmN0aW9uIHRvU291cmNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBOYXRpdmVEYXRlLnRvU291cmNlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgQ2xvY2tEYXRlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS50b1N0cmluZygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIG5vaW5zcGVjdGlvbiBVbm5lY2Vzc2FyeUxvY2FsVmFyaWFibGVKU1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBub3JtYWwgQ2xhc3MgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGBuZXdgLCBidXQgRGF0ZSBjYW4sIHNvIHdlIG5lZWRcbiAgICAgICAgICogdG8gd3JhcCBpdCBpbiBhIFByb3h5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgb2YgRGF0ZSBpcyBrZXB0IGludGFjdFxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7Q2xvY2tEYXRlfVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgQ2xvY2tEYXRlUHJveHkgPSBuZXcgUHJveHkoQ2xvY2tEYXRlLCB7XG4gICAgICAgICAgICAvLyBoYW5kbGVyIGZvciBbW0NhbGxdXSBpbnZvY2F0aW9ucyAoaS5lLiBub3QgdXNpbmcgYG5ld2ApXG4gICAgICAgICAgICBhcHBseSgpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgRGF0ZSBjb25zdHJ1Y3RvciBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgcmVmIEVjbWEtMjYyIEVkaXRpb24gNS4xLCBzZWN0aW9uIDE1LjkuMi5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJlbWFpbnMgc28gaW4gdGhlIDEwdGggZWRpdGlvbiBvZiAyMDE5IGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDbG9ja0RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQSBQcm94eSBzaG91bGQgb25seSBjYXB0dXJlIGBuZXdgIGNhbGxzIHdpdGggdGhlIGBjb25zdHJ1Y3RgIGhhbmRsZXIuIFRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHBvc3NpYmxlLCBzbyBjaGVjayB0aGUgbG9naWMuXCIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKENsb2NrRGF0ZS5jbG9jay5ub3cpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gQ2xvY2tEYXRlUHJveHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWlycm9yIEludGwgYnkgZGVmYXVsdCBvbiBvdXIgZmFrZSBpbXBsZW1lbnRhdGlvblxuICAgICAqXG4gICAgICogTW9zdCBvZiB0aGUgcHJvcGVydGllcyBhcmUgdGhlIG9yaWdpbmFsIG5hdGl2ZSBvbmVzLFxuICAgICAqIGJ1dCB3ZSBuZWVkIHRvIHRha2UgY29udHJvbCBvZiB0aG9zZSB0aGF0IGhhdmUgYVxuICAgICAqIGRlcGVuZGVuY3kgb24gdGhlIGN1cnJlbnQgY2xvY2suXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgcGFydGx5IGZha2UgSW50bCBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludGwoKSB7XG4gICAgICAgIGNvbnN0IENsb2NrSW50bCA9IHt9O1xuICAgICAgICAvKlxuICAgICAgICAgKiBBbGwgcHJvcGVydGllcyBvZiBJbnRsIGFyZSBub24tZW51bWVyYWJsZSwgc28gd2UgbmVlZFxuICAgICAgICAgKiB0byBkbyBhIGJpdCBvZiB3b3JrIHRvIGdldCB0aGVtIG91dC5cbiAgICAgICAgICovXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZUludGwpLmZvckVhY2goXG4gICAgICAgICAgICAocHJvcGVydHkpID0+IChDbG9ja0ludGxbcHJvcGVydHldID0gTmF0aXZlSW50bFtwcm9wZXJ0eV0pLFxuICAgICAgICApO1xuXG4gICAgICAgIENsb2NrSW50bC5EYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCByZWFsRm9ybWF0dGVyID0gbmV3IE5hdGl2ZUludGwuRGF0ZVRpbWVGb3JtYXQoLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB7fTtcblxuICAgICAgICAgICAgW1wiZm9ybWF0UmFuZ2VcIiwgXCJmb3JtYXRSYW5nZVRvUGFydHNcIiwgXCJyZXNvbHZlZE9wdGlvbnNcIl0uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlclttZXRob2RdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxGb3JtYXR0ZXJbbWV0aG9kXS5iaW5kKHJlYWxGb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBbXCJmb3JtYXRcIiwgXCJmb3JtYXRUb1BhcnRzXCJdLmZvckVhY2goKG1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlclttZXRob2RdID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxGb3JtYXR0ZXJbbWV0aG9kXShkYXRlIHx8IENsb2NrSW50bC5jbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBDbG9ja0ludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShcbiAgICAgICAgICAgIE5hdGl2ZUludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLFxuICAgICAgICApO1xuXG4gICAgICAgIENsb2NrSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YgPVxuICAgICAgICAgICAgTmF0aXZlSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Y7XG5cbiAgICAgICAgcmV0dXJuIENsb2NrSW50bDtcbiAgICB9XG5cbiAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZW5xdWV1ZUpvYihjbG9jaywgam9iKSB7XG4gICAgICAgIC8vIGVucXVldWVzIGEgbWljcm90aWNrLWRlZmVycmVkIHRhc2sgLSBlY21hMjYyLyNzZWMtZW5xdWV1ZWpvYlxuICAgICAgICBpZiAoIWNsb2NrLmpvYnMpIHtcbiAgICAgICAgICAgIGNsb2NrLmpvYnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjbG9jay5qb2JzLnB1c2goam9iKTtcbiAgICB9XG5cbiAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gcnVuSm9icyhjbG9jaykge1xuICAgICAgICAvLyBydW5zIGFsbCBtaWNyb3RpY2stZGVmZXJyZWQgdGFza3MgLSBlY21hMjYyLyNzZWMtcnVuam9ic1xuICAgICAgICBpZiAoIWNsb2NrLmpvYnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb2NrLmpvYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYiA9IGNsb2NrLmpvYnNbaV07XG4gICAgICAgICAgICBqb2IuZnVuYy5hcHBseShudWxsLCBqb2IuYXJncyk7XG5cbiAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICBpZiAoY2xvY2subG9vcExpbWl0ICYmIGkgPiBjbG9jay5sb29wTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBnZXRJbmZpbml0ZUxvb3BFcnJvcihjbG9jaywgam9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldElzTmVhckluZmluaXRlTGltaXQoKTtcbiAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtUaW1lcn0gdGltZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBpZCBvZiB0aGUgY3JlYXRlZCB0aW1lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZFRpbWVyKGNsb2NrLCB0aW1lcikge1xuICAgICAgICBpZiAodGltZXIuZnVuYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkIHRvIHRpbWVyIGNhbGxzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gTm9kZS5qcyBlbnZpcm9ubWVudFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5mdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgW0VSUl9JTlZBTElEX0NBTExCQUNLXTogQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLiBSZWNlaXZlZCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIuZnVuY1xuICAgICAgICAgICAgICAgICAgICB9IG9mIHR5cGUgJHt0eXBlb2YgdGltZXIuZnVuY31gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWFySW5maW5pdGVMaW1pdCkge1xuICAgICAgICAgICAgdGltZXIuZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRpbWVyLnR5cGUgPSB0aW1lci5pbW1lZGlhdGUgPyBcIkltbWVkaWF0ZVwiIDogXCJUaW1lb3V0XCI7XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiZGVsYXlcIikpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZXIuZGVsYXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aW1lci5kZWxheSA9IHBhcnNlSW50KHRpbWVyLmRlbGF5LCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNOdW1iZXJGaW5pdGUodGltZXIuZGVsYXkpKSB7XG4gICAgICAgICAgICAgICAgdGltZXIuZGVsYXkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGltZXIuZGVsYXkgPSB0aW1lci5kZWxheSA+IG1heFRpbWVvdXQgPyAxIDogdGltZXIuZGVsYXk7XG4gICAgICAgICAgICB0aW1lci5kZWxheSA9IE1hdGgubWF4KDAsIHRpbWVyLmRlbGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImludGVydmFsXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJJbnRlcnZhbFwiO1xuICAgICAgICAgICAgdGltZXIuaW50ZXJ2YWwgPSB0aW1lci5pbnRlcnZhbCA+IG1heFRpbWVvdXQgPyAxIDogdGltZXIuaW50ZXJ2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXIuaGFzT3duUHJvcGVydHkoXCJhbmltYXRpb25cIikpIHtcbiAgICAgICAgICAgIHRpbWVyLnR5cGUgPSBcIkFuaW1hdGlvbkZyYW1lXCI7XG4gICAgICAgICAgICB0aW1lci5hbmltYXRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiaWRsZUNhbGxiYWNrXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJJZGxlQ2FsbGJhY2tcIjtcbiAgICAgICAgICAgIHRpbWVyLmlkbGVDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lci5pZCA9IHVuaXF1ZVRpbWVySWQrKztcbiAgICAgICAgdGltZXIuY3JlYXRlZEF0ID0gY2xvY2subm93O1xuICAgICAgICB0aW1lci5jYWxsQXQgPVxuICAgICAgICAgICAgY2xvY2subm93ICsgKHBhcnNlSW50KHRpbWVyLmRlbGF5KSB8fCAoY2xvY2suZHVyaW5nVGljayA/IDEgOiAwKSk7XG5cbiAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXSA9IHRpbWVyO1xuXG4gICAgICAgIGlmIChhZGRUaW1lclJldHVybnNPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICByZWZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bnJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYXNSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmZWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLmNhbGxBdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlSW50KHRpbWVyLmRlbGF5KSB8fCAoY2xvY2suZHVyaW5nVGljayA/IDEgOiAwKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgX21pZ2h0XyBoYXZlIGJlZW4gcmVtb3ZlZCwgYnV0IGlmIG5vdCB0aGUgYXNzaWdubWVudCBpcyBwZXJmZWN0bHkgZmluZVxuICAgICAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNbdGltZXIuaWRdID0gdGltZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtTeW1ib2wudG9QcmltaXRpdmVdOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lci5pZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXIuaWQ7XG4gICAgfVxuXG4gICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiBcIm9mZlwiICovXG4gICAgLyoqXG4gICAgICogVGltZXIgY29tcGFyaXRvclxuICAgICAqXG4gICAgICogQHBhcmFtIHtUaW1lcn0gYVxuICAgICAqIEBwYXJhbSB7VGltZXJ9IGJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVUaW1lcnMoYSwgYikge1xuICAgICAgICAvLyBTb3J0IGZpcnN0IGJ5IGFic29sdXRlIHRpbWluZ1xuICAgICAgICBpZiAoYS5jYWxsQXQgPCBiLmNhbGxBdCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmNhbGxBdCA+IGIuY2FsbEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvcnQgbmV4dCBieSBpbW1lZGlhdGUsIGltbWVkaWF0ZSB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmltbWVkaWF0ZSAmJiAhYi5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWEuaW1tZWRpYXRlICYmIGIuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvcnQgbmV4dCBieSBjcmVhdGlvbiB0aW1lLCBlYXJsaWVyLWNyZWF0ZWQgdGltZXJzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICBpZiAoYS5jcmVhdGVkQXQgPCBiLmNyZWF0ZWRBdCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmNyZWF0ZWRBdCA+IGIuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvcnQgbmV4dCBieSBpZCwgbG93ZXItaWQgdGltZXJzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICBpZiAoYS5pZCA8IGIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5pZCA+IGIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXMgdGltZXIgaWRzIGFyZSB1bmlxdWUsIG5vIGZhbGxiYWNrIGAwYCBpcyBuZWNlc3NhcnlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvXG4gICAgICogQHJldHVybnMge1RpbWVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpcnN0VGltZXJJblJhbmdlKGNsb2NrLCBmcm9tLCB0bykge1xuICAgICAgICBjb25zdCB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICAgIGxldCBpZCwgaXNJblJhbmdlO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyc1tpZF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgKCF0aW1lciB8fCBjb21wYXJlVGltZXJzKHRpbWVyLCB0aW1lcnNbaWRdKSA9PT0gMSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaXJzdFRpbWVyKGNsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgbGV0IGlkO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0VGltZXIoY2xvY2spIHtcbiAgICAgICAgY29uc3QgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBsZXQgaWQ7XG5cbiAgICAgICAgZm9yIChpZCBpbiB0aW1lcnMpIHtcbiAgICAgICAgICAgIGlmICh0aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aW1lciB8fCBjb21wYXJlVGltZXJzKHRpbWVyLCB0aW1lcnNbaWRdKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7VGltZXJ9IHRpbWVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FsbFRpbWVyKGNsb2NrLCB0aW1lcikge1xuICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnNbdGltZXIuaWRdLmNhbGxBdCArPSB0aW1lci5pbnRlcnZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9jay50aW1lcnNbdGltZXIuaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5mdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRpbWVyLmZ1bmMuYXBwbHkobnVsbCwgdGltZXIuYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQgbm8tZXZhbDogXCJvZmZcIiAqL1xuICAgICAgICAgICAgY29uc3QgZXZhbDIgPSBldmFsO1xuICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBldmFsMih0aW1lci5mdW5jKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNsZWFyIGhhbmRsZXIgbmFtZSBmb3IgYSBnaXZlbiB0aW1lciB0eXBlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRDbGVhckhhbmRsZXIodHR5cGUpIHtcbiAgICAgICAgaWYgKHR0eXBlID09PSBcIklkbGVDYWxsYmFja1wiIHx8IHR0eXBlID09PSBcIkFuaW1hdGlvbkZyYW1lXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgY2FuY2VsJHt0dHlwZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgY2xlYXIke3R0eXBlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzY2hlZHVsZSBoYW5kbGVyIG5hbWUgZm9yIGEgZ2l2ZW4gdGltZXIgdHlwZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U2NoZWR1bGVIYW5kbGVyKHR0eXBlKSB7XG4gICAgICAgIGlmICh0dHlwZSA9PT0gXCJJZGxlQ2FsbGJhY2tcIiB8fCB0dHlwZSA9PT0gXCJBbmltYXRpb25GcmFtZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYHJlcXVlc3Qke3R0eXBlfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBzZXQke3R0eXBlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8gd2FybiBvbmx5IG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXYXJuT25jZSgpIHtcbiAgICAgICAgbGV0IGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgIWNhbGxzKysgJiYgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHdhcm5PbmNlID0gY3JlYXRlV2Fybk9uY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVySWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCB0dHlwZSkge1xuICAgICAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgICAgIC8vIG51bGwgYXBwZWFycyB0byBiZSBhbGxvd2VkIGluIG1vc3QgYnJvd3NlcnMsIGFuZCBhcHBlYXJzIHRvIGJlXG4gICAgICAgICAgICAvLyByZWxpZWQgdXBvbiBieSBzb21lIGxpYnJhcmllcywgbGlrZSBCb290c3RyYXAgY2Fyb3VzZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIE5vZGUsIHRoZSBJRCBpcyBzdG9yZWQgYXMgdGhlIHByaW1pdGl2ZSB2YWx1ZSBmb3IgYFRpbWVvdXRgIG9iamVjdHNcbiAgICAgICAgLy8gZm9yIGBJbW1lZGlhdGVgIG9iamVjdHMsIG5vIElEIGV4aXN0cywgc28gaXQgZ2V0cyBjb2VyY2VkIHRvIE5hTlxuICAgICAgICBjb25zdCBpZCA9IE51bWJlcih0aW1lcklkKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGlkKSB8fCBpZCA8IGlkQ291bnRlclN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldENsZWFySGFuZGxlcih0dHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChjbG9jay5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUhhbmRsZXIgPSBjbG9ja1tgXyR7aGFuZGxlck5hbWV9YF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYXRpdmVIYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBuYXRpdmVIYW5kbGVyKHRpbWVySWQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgYEZha2VUaW1lcnM6ICR7aGFuZGxlck5hbWV9IHdhcyBpbnZva2VkIHRvIGNsZWFyIGEgbmF0aXZlIHRpbWVyIGluc3RlYWQgb2Ygb25lIGNyZWF0ZWQgYnkgdGhpcyBsaWJyYXJ5LmAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcblRvIGF1dG9tYXRpY2FsbHkgY2xlYW4tdXAgbmF0aXZlIHRpbWVycywgdXNlIGBzaG91bGRDbGVhck5hdGl2ZVRpbWVyc2AuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb2NrLnRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIElEIG1hdGNoZXMgYSB0aW1lciBvZiB0aGUgY29ycmVjdCB0eXBlXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IGNsb2NrLnRpbWVyc1tpZF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGltZXIudHlwZSA9PT0gdHR5cGUgfHxcbiAgICAgICAgICAgICAgICAodGltZXIudHlwZSA9PT0gXCJUaW1lb3V0XCIgJiYgdHR5cGUgPT09IFwiSW50ZXJ2YWxcIikgfHxcbiAgICAgICAgICAgICAgICAodGltZXIudHlwZSA9PT0gXCJJbnRlcnZhbFwiICYmIHR0eXBlID09PSBcIlRpbWVvdXRcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjbG9jay50aW1lcnNbaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhciA9IGdldENsZWFySGFuZGxlcih0dHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZWR1bGUgPSBnZXRTY2hlZHVsZUhhbmRsZXIodGltZXIudHlwZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ2Fubm90IGNsZWFyIHRpbWVyOiB0aW1lciBjcmVhdGVkIHdpdGggJHtzY2hlZHVsZX0oKSBidXQgY2xlYXJlZCB3aXRoICR7Y2xlYXJ9KClgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7Q29uZmlnfSBjb25maWdcbiAgICAgKiBAcmV0dXJucyB7VGltZXJbXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZykge1xuICAgICAgICBsZXQgbWV0aG9kLCBpLCBsO1xuICAgICAgICBjb25zdCBpbnN0YWxsZWRIclRpbWUgPSBcIl9ocnRpbWVcIjtcbiAgICAgICAgY29uc3QgaW5zdGFsbGVkTmV4dFRpY2sgPSBcIl9uZXh0VGlja1wiO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBjbG9jay5tZXRob2RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgbWV0aG9kID0gY2xvY2subWV0aG9kc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwiaHJ0aW1lXCIgJiYgX2dsb2JhbC5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzLmhydGltZSA9IGNsb2NrW2luc3RhbGxlZEhyVGltZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJuZXh0VGlja1wiICYmIF9nbG9iYWwucHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljayA9IGNsb2NrW2luc3RhbGxlZE5leHRUaWNrXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInBlcmZvcm1hbmNlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgY2xvY2ssXG4gICAgICAgICAgICAgICAgICAgIGBfJHttZXRob2R9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAhb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5zZXRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBfZ2xvYmFsW21ldGhvZF0gPSBjbG9ja1tgXyR7bWV0aG9kfWBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF9nbG9iYWxbbWV0aG9kXSAmJiBfZ2xvYmFsW21ldGhvZF0uaGFkT3duUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbFttZXRob2RdID0gY2xvY2tbYF8ke21ldGhvZH1gXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIF9nbG9iYWxbbWV0aG9kXTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQgbm8tZW1wdHk6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNsb2NrLnRpbWVyc01vZHVsZU1ldGhvZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzW2pdO1xuICAgICAgICAgICAgICAgICAgICB0aW1lcnNNb2R1bGVbZW50cnkubWV0aG9kTmFtZV0gPSBlbnRyeS5vcmlnaW5hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzUHJvbWlzZXNNb2R1bGVNZXRob2RzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGogPCBjbG9jay50aW1lcnNQcm9taXNlc01vZHVsZU1ldGhvZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBqKytcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjbG9jay50aW1lcnNQcm9taXNlc01vZHVsZU1ldGhvZHNbal07XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyc1Byb21pc2VzTW9kdWxlW2VudHJ5Lm1ldGhvZE5hbWVdID0gZW50cnkub3JpZ2luYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsKGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBleGVjdXRpb25zIHdoaWNoIHdpbGwgY29tcGxldGVseSByZW1vdmUgdGhlc2UgcHJvcHNcbiAgICAgICAgY2xvY2subWV0aG9kcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2xpc3RlbmVyLCBzaWduYWxdIG9mIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiBwZW5kaW5nIHRpbWVycywgdG8gZW5hYmxlIGNoZWNraW5nIHdoYXQgdGltZXJzIHJlbWFpbmVkIG9uIHVuaW5zdGFsbFxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpLm1hcChmdW5jdGlvbiBtYXBwZXIoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGltZXJzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgdGhlIHRhcmdldCBjb250YWluaW5nIHRoZSBtZXRob2QgdG8gcmVwbGFjZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgdGhlIGtleW5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoaWphY2tNZXRob2QodGFyZ2V0LCBtZXRob2QsIGNsb2NrKSB7XG4gICAgICAgIGNsb2NrW21ldGhvZF0uaGFkT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgICAgIGNsb2NrW2BfJHttZXRob2R9YF0gPSB0YXJnZXRbbWV0aG9kXTtcblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkRhdGVcIikge1xuICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBjbG9ja1ttZXRob2RdO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJJbnRsXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gY2xvY2tbbWV0aG9kXTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicGVyZm9ybWFuY2VcIikge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyBKU0RPTSBoYXMgYSByZWFkIG9ubHkgcGVyZm9ybWFuY2UgZmllbGQgc28gd2UgaGF2ZSB0byBzYXZlL2NvcHkgaXQgZGlmZmVyZW50bHlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yICYmXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgICAgICAgICAhb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5zZXRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgY2xvY2ssXG4gICAgICAgICAgICAgICAgICAgIGBfJHttZXRob2R9YCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvcixcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZkRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kLCBwZXJmRGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gY2xvY2tbbWV0aG9kXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9ja1ttZXRob2RdLmFwcGx5KGNsb2NrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2xvY2tbbWV0aG9kXSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0W21ldGhvZF0uY2xvY2sgPSBjbG9jaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZHZhbmNlVGltZURlbHRhXG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9JbnRlcnZhbFRpY2soY2xvY2ssIGFkdmFuY2VUaW1lRGVsdGEpIHtcbiAgICAgICAgY2xvY2sudGljayhhZHZhbmNlVGltZURlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBUaW1lcnNcbiAgICAgKiBAcHJvcGVydHkge3NldFRpbWVvdXR9IHNldFRpbWVvdXRcbiAgICAgKiBAcHJvcGVydHkge2NsZWFyVGltZW91dH0gY2xlYXJUaW1lb3V0XG4gICAgICogQHByb3BlcnR5IHtzZXRJbnRlcnZhbH0gc2V0SW50ZXJ2YWxcbiAgICAgKiBAcHJvcGVydHkge2NsZWFySW50ZXJ2YWx9IGNsZWFySW50ZXJ2YWxcbiAgICAgKiBAcHJvcGVydHkge0RhdGV9IERhdGVcbiAgICAgKiBAcHJvcGVydHkge0ludGx9IEludGxcbiAgICAgKiBAcHJvcGVydHkge1NldEltbWVkaWF0ZT19IHNldEltbWVkaWF0ZVxuICAgICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oTm9kZUltbWVkaWF0ZSk6IHZvaWQ9fSBjbGVhckltbWVkaWF0ZVxuICAgICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyW10pOm51bWJlcltdPX0gaHJ0aW1lXG4gICAgICogQHByb3BlcnR5IHtOZXh0VGljaz19IG5leHRUaWNrXG4gICAgICogQHByb3BlcnR5IHtQZXJmb3JtYW5jZT19IHBlcmZvcm1hbmNlXG4gICAgICogQHByb3BlcnR5IHtSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9fSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW49fSBxdWV1ZU1pY3JvdGFza1xuICAgICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTogdm9pZD19IGNhbmNlbEFuaW1hdGlvbkZyYW1lXG4gICAgICogQHByb3BlcnR5IHtSZXF1ZXN0SWRsZUNhbGxiYWNrPX0gcmVxdWVzdElkbGVDYWxsYmFja1xuICAgICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTogdm9pZD19IGNhbmNlbElkbGVDYWxsYmFja1xuICAgICAqL1xuXG4gICAgLyoqIEB0eXBlIHtUaW1lcnN9ICovXG4gICAgY29uc3QgdGltZXJzID0ge1xuICAgICAgICBzZXRUaW1lb3V0OiBfZ2xvYmFsLnNldFRpbWVvdXQsXG4gICAgICAgIGNsZWFyVGltZW91dDogX2dsb2JhbC5jbGVhclRpbWVvdXQsXG4gICAgICAgIHNldEludGVydmFsOiBfZ2xvYmFsLnNldEludGVydmFsLFxuICAgICAgICBjbGVhckludGVydmFsOiBfZ2xvYmFsLmNsZWFySW50ZXJ2YWwsXG4gICAgICAgIERhdGU6IF9nbG9iYWwuRGF0ZSxcbiAgICB9O1xuXG4gICAgaWYgKGlzUHJlc2VudC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgdGltZXJzLnNldEltbWVkaWF0ZSA9IF9nbG9iYWwuc2V0SW1tZWRpYXRlO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXNlbnQuY2xlYXJJbW1lZGlhdGUpIHtcbiAgICAgICAgdGltZXJzLmNsZWFySW1tZWRpYXRlID0gX2dsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50LmhydGltZSkge1xuICAgICAgICB0aW1lcnMuaHJ0aW1lID0gX2dsb2JhbC5wcm9jZXNzLmhydGltZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50Lm5leHRUaWNrKSB7XG4gICAgICAgIHRpbWVycy5uZXh0VGljayA9IF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljaztcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50LnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIHRpbWVycy5wZXJmb3JtYW5jZSA9IF9nbG9iYWwucGVyZm9ybWFuY2U7XG4gICAgfVxuXG4gICAgaWYgKGlzUHJlc2VudC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgdGltZXJzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXNlbnQucXVldWVNaWNyb3Rhc2spIHtcbiAgICAgICAgdGltZXJzLnF1ZXVlTWljcm90YXNrID0gX2dsb2JhbC5xdWV1ZU1pY3JvdGFzaztcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgfVxuXG4gICAgaWYgKGlzUHJlc2VudC5yZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVycy5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuICAgIH1cblxuICAgIGlmIChpc1ByZXNlbnQuY2FuY2VsSWRsZUNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjaztcbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50LkludGwpIHtcbiAgICAgICAgdGltZXJzLkludGwgPSBfZ2xvYmFsLkludGw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxTZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRJbW1lZGlhdGUgfHwgX2dsb2JhbC5zZXRUaW1lb3V0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gW3N0YXJ0XSB0aGUgc3lzdGVtIHRpbWUgLSBub24taW50ZWdlciB2YWx1ZXMgYXJlIGZsb29yZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb3BMaW1pdF0gbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsb2NrKHN0YXJ0LCBsb29wTGltaXQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihnZXRFcG9jaChzdGFydCkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgbG9vcExpbWl0ID0gbG9vcExpbWl0IHx8IDEwMDA7XG4gICAgICAgIGxldCBuYW5vcyA9IDA7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkU3lzdGVtVGltZSA9IFswLCAwXTsgLy8gW21pbGxpcywgbmFub3JlbWFpbmRlcl1cblxuICAgICAgICBjb25zdCBjbG9jayA9IHtcbiAgICAgICAgICAgIG5vdzogc3RhcnQsXG4gICAgICAgICAgICBEYXRlOiBjcmVhdGVEYXRlKCksXG4gICAgICAgICAgICBsb29wTGltaXQ6IGxvb3BMaW1pdCxcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5EYXRlLmNsb2NrID0gY2xvY2s7XG5cbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICBmdW5jdGlvbiBnZXRUaW1lVG9OZXh0RnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTYgLSAoKGNsb2NrLm5vdyAtIHN0YXJ0KSAlIDE2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICAgICAgZnVuY3Rpb24gaHJ0aW1lKHByZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc1NpbmNlU3RhcnQgPSBjbG9jay5ub3cgLSBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gLSBzdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHNlY3NTaW5jZVN0YXJ0ID0gTWF0aC5mbG9vcihtaWxsaXNTaW5jZVN0YXJ0IC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXJJbk5hbm9zID1cbiAgICAgICAgICAgICAgICAobWlsbGlzU2luY2VTdGFydCAtIHNlY3NTaW5jZVN0YXJ0ICogMWUzKSAqIDFlNiArXG4gICAgICAgICAgICAgICAgbmFub3MgLVxuICAgICAgICAgICAgICAgIGFkanVzdGVkU3lzdGVtVGltZVsxXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldikpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldlsxXSA+IDFlOSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJOdW1iZXIgb2YgbmFub3NlY29uZHMgY2FuJ3QgZXhjZWVkIGEgYmlsbGlvblwiLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFNlY3MgPSBwcmV2WzBdO1xuICAgICAgICAgICAgICAgIGxldCBuYW5vRGlmZiA9IHJlbWFpbmRlckluTmFub3MgLSBwcmV2WzFdO1xuICAgICAgICAgICAgICAgIGxldCBzZWNEaWZmID0gc2Vjc1NpbmNlU3RhcnQgLSBvbGRTZWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5hbm9EaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuYW5vRGlmZiArPSAxZTk7XG4gICAgICAgICAgICAgICAgICAgIHNlY0RpZmYgLT0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlY0RpZmYsIG5hbm9EaWZmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbc2Vjc1NpbmNlU3RhcnQsIHJlbWFpbmRlckluTmFub3NdO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgaGlnaCByZXNvbHV0aW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlZGVmIHtudW1iZXJ9IERPTUhpZ2hSZXNUaW1lU3RhbXBcbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIHtET01IaWdoUmVzVGltZVN0YW1wfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZmFrZVBlcmZvcm1hbmNlTm93KCkge1xuICAgICAgICAgICAgY29uc3QgaHJ0ID0gaHJ0aW1lKCk7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXMgPSBocnRbMF0gKiAxMDAwICsgaHJ0WzFdIC8gMWU2O1xuICAgICAgICAgICAgcmV0dXJuIG1pbGxpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1ByZXNlbnQuaHJ0aW1lQmlnaW50KSB7XG4gICAgICAgICAgICBocnRpbWUuYmlnaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaHJ0aW1lKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJpZ0ludChwYXJ0c1swXSkgKiBCaWdJbnQoMWU5KSArIEJpZ0ludChwYXJ0c1sxXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQcmVzZW50LkludGwpIHtcbiAgICAgICAgICAgIGNsb2NrLkludGwgPSBjcmVhdGVJbnRsKCk7XG4gICAgICAgICAgICBjbG9jay5JbnRsLmNsb2NrID0gY2xvY2s7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gZnVuY3Rpb24gcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICAgICAgICAgIGZ1bmMsXG4gICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCB0aW1lVG9OZXh0SWRsZVBlcmlvZCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChjbG9jay5jb3VudFRpbWVycygpID4gMCkge1xuICAgICAgICAgICAgICAgIHRpbWVUb05leHRJZGxlUGVyaW9kID0gNTA7IC8vIGNvbnN0IGZvciBub3dcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICAgICAgZGVsYXk6XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aW1lb3V0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRpbWVUb05leHRJZGxlUGVyaW9kXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWluKHRpbWVvdXQsIHRpbWVUb05leHRJZGxlUGVyaW9kKSxcbiAgICAgICAgICAgICAgICBpZGxlQ2FsbGJhY2s6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLmNhbmNlbElkbGVDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbElkbGVDYWxsYmFjayh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJZGxlQ2FsbGJhY2tcIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0VGltZW91dCA9IGZ1bmN0aW9uIHNldFRpbWVvdXQoZnVuYywgdGltZW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHV0aWxQcm9taXNpZnkpIHtcbiAgICAgICAgICAgIGNsb2NrLnNldFRpbWVvdXRbdXRpbFByb21pc2lmeS5jdXN0b21dID1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9taXNpZmllZFNldFRpbWVvdXQodGltZW91dCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldFRpbWVvdXRFeGVjdXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFthcmddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclRpbWVvdXQodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiVGltZW91dFwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5uZXh0VGljayA9IGZ1bmN0aW9uIG5leHRUaWNrKGZ1bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnF1ZXVlSm9iKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBpc05lYXJJbmZpbml0ZUxpbWl0ID8gbmV3IEVycm9yKCkgOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucXVldWVNaWNyb3Rhc2sgPSBmdW5jdGlvbiBxdWV1ZU1pY3JvdGFzayhmdW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2submV4dFRpY2soZnVuYyk7IC8vIGV4cGxpY2l0bHkgZHJvcCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnNldEludGVydmFsID0gZnVuY3Rpb24gc2V0SW50ZXJ2YWwoZnVuYywgdGltZW91dCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgIGludGVydmFsOiB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFySW50ZXJ2YWwodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW50ZXJ2YWxcIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGlzUHJlc2VudC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIGNsb2NrLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmdW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHV0aWxQcm9taXNpZnkpIHtcbiAgICAgICAgICAgICAgICBjbG9jay5zZXRJbW1lZGlhdGVbdXRpbFByb21pc2lmeS5jdXN0b21dID1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRJbW1lZGlhdGUoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGVFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW2FyZ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5jbGVhckltbWVkaWF0ZSA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKHRpbWVySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJbW1lZGlhdGVcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2suY291bnRUaW1lcnMgPSBmdW5jdGlvbiBjb3VudFRpbWVycygpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2xvY2sudGltZXJzIHx8IHt9KS5sZW5ndGggK1xuICAgICAgICAgICAgICAgIChjbG9jay5qb2JzIHx8IFtdKS5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBkZWxheTogZ2V0VGltZVRvTmV4dEZyYW1lKCksXG4gICAgICAgICAgICAgICAgZ2V0IGFyZ3MoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmFrZVBlcmZvcm1hbmNlTm93KCldO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJ1bk1pY3JvdGFza3MgPSBmdW5jdGlvbiBydW5NaWNyb3Rhc2tzKCkge1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdGlja1ZhbHVlIG1pbGxpc2Vjb25kcyBvciBhIHN0cmluZyBwYXJzZWFibGUgYnkgcGFyc2VUaW1lXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3luY1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZSBvciBub3RoaW5nIGZvciBhc3luY1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZG9UaWNrKHRpY2tWYWx1ZSwgaXNBc3luYywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBtc0Zsb2F0ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGlja1ZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gdGlja1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VUaW1lKHRpY2tWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBtcyA9IE1hdGguZmxvb3IobXNGbG9hdCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBuYW5vUmVtYWluZGVyKG1zRmxvYXQpO1xuICAgICAgICAgICAgbGV0IG5hbm9zVG90YWwgPSBuYW5vcyArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIGxldCB0aWNrVG8gPSBjbG9jay5ub3cgKyBtcztcblxuICAgICAgICAgICAgaWYgKG1zRmxvYXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5lZ2F0aXZlIHRpY2tzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGp1c3QgZm9yIHBvc2l0aXZlIG92ZXJmbG93XG4gICAgICAgICAgICBpZiAobmFub3NUb3RhbCA+PSAxZTYpIHtcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gMTtcbiAgICAgICAgICAgICAgICBuYW5vc1RvdGFsIC09IDFlNjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgbGV0IHRpY2tGcm9tID0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gY2xvY2subm93O1xuICAgICAgICAgICAgLy8gRVNMaW50IGZhaWxzIHRvIGRldGVjdCB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgICAgICBsZXQgdGltZXIsXG4gICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgb2xkTm93LFxuICAgICAgICAgICAgICAgIG5leHRQcm9taXNlVGljayxcbiAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjayxcbiAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItY29uc3QgKi9cblxuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHBlcmZvcm0gbWljcm90YXNrc1xuICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIG1pY3JvdGFzayBjYWxsYmFja1xuICAgICAgICAgICAgICAgIHRpY2tGcm9tICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgICAgICBmdW5jdGlvbiBkb1RpY2tJbm5lcigpIHtcbiAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGVhY2ggdGltZXIgaW4gdGhlIHJlcXVlc3RlZCByYW5nZVxuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRpbWVyICYmIHRpY2tGcm9tIDw9IHRpY2tUbykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzW3RpbWVyLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROb3cgPSBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggdXAgYWZ0ZXIgbmF0aXZlIHNldEltbWVkaWF0ZSBjYWxsYmFjayB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBuYXRpdmUgZXM2IHByb21pc2VzIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzIGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB0aW1lciBmaXJlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQobmV4dFByb21pc2VUaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGlvbkNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBwcm9jZXNzLm5leHRUaWNrKClzIGFnYWluXG4gICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIHByb2Nlc3MubmV4dFRpY2soKSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNvcm5lciBjYXNlOiBkdXJpbmcgcnVuSm9icyBuZXcgdGltZXJzIHdlcmUgc2NoZWR1bGVkIHdoaWNoIGNvdWxkIGJlIGluIHRoZSByYW5nZSBbY2xvY2subm93LCB0aWNrVG9dXG4gICAgICAgICAgICAgICAgdGltZXIgPSBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgdGlja0Zyb20sIHRpY2tUbyk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay50aWNrKHRpY2tUbyAtIGNsb2NrLm5vdyk7IC8vIGRvIGl0IGFsbCBhZ2FpbiAtIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24gPSBmaXJzdEV4Y2VwdGlvbiB8fCBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdGltZXJzIHJlbWFpbmluZyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlOiBtb3ZlIHRoZSBjbG9jayBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpY2tUbztcblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbmFub3NcbiAgICAgICAgICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0UHJvbWlzZVRpY2sgPVxuICAgICAgICAgICAgICAgIGlzQXN5bmMgJiZcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyB0aW1lciBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwb3N0VGltZXJDYWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRpY2tWYWx1ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9yIGEgaHVtYW4tcmVhZGFibGUgdmFsdWUgbGlrZSBcIjAxOjExOjE1XCJcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgY2xvY2sudGljayA9IGZ1bmN0aW9uIHRpY2sodGlja1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrKHRpY2tWYWx1ZSwgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGlja1ZhbHVlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb3IgYSBodW1hbi1yZWFkYWJsZSB2YWx1ZSBsaWtlIFwiMDE6MTE6MTVcIlxuICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNsb2NrLnRpY2tBc3luYyA9IGZ1bmN0aW9uIHRpY2tBc3luYyh0aWNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGljayh0aWNrVmFsdWUsIHRydWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2xvY2submV4dEFzeW5jID0gZnVuY3Rpb24gbmV4dEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJ1bkFsbCA9IGZ1bmN0aW9uIHJ1bkFsbCgpIHtcbiAgICAgICAgICAgIGxldCBudW1UaW1lcnMsIGk7XG4gICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjbG9jay5sb29wTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChudW1UaW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRJc05lYXJJbmZpbml0ZUxpbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xvY2submV4dCgpO1xuICAgICAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgdGhyb3cgZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucnVuVG9GcmFtZSA9IGZ1bmN0aW9uIHJ1blRvRnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGljayhnZXRUaW1lVG9OZXh0RnJhbWUoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1bkFsbEFzeW5jID0gZnVuY3Rpb24gcnVuQWxsQXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1UaW1lcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY2xvY2subG9vcExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnRpbWVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVRpbWVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucnVuVG9MYXN0ID0gZnVuY3Rpb24gcnVuVG9MYXN0KCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBsYXN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9jay50aWNrKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1blRvTGFzdEFzeW5jID0gZnVuY3Rpb24gcnVuVG9MYXN0QXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IGxhc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2sudGlja0FzeW5jKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIG5hbm9zID0gMDtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICAgICAgY2xvY2subm93ID0gc3RhcnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0U3lzdGVtVGltZSA9IGZ1bmN0aW9uIHNldFN5c3RlbVRpbWUoc3lzdGVtVGltZSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRpbWUgZGlmZmVyZW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3Tm93ID0gZ2V0RXBvY2goc3lzdGVtVGltZSk7XG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gbmV3Tm93IC0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IGlkLCB0aW1lcjtcblxuICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdID0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdICsgZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIGFkanVzdGVkU3lzdGVtVGltZVsxXSA9IGFkanVzdGVkU3lzdGVtVGltZVsxXSArIG5hbm9zO1xuICAgICAgICAgICAgLy8gdXBkYXRlICdzeXN0ZW0gY2xvY2snXG4gICAgICAgICAgICBjbG9jay5ub3cgPSBuZXdOb3c7XG4gICAgICAgICAgICBuYW5vcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aW1lcnMgYW5kIGludGVydmFscyB0byBrZWVwIHRoZW0gc3RhYmxlXG4gICAgICAgICAgICBmb3IgKGlkIGluIGNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuY3JlYXRlZEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLmNhbGxBdCArPSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0aWNrVmFsdWUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvciBhIGh1bWFuLXJlYWRhYmxlIHZhbHVlIGxpa2UgXCIwMToxMToxNVwiXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHdpbGwgcmV0dXJuIHRoZSBuZXcgYG5vd2AgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGNsb2NrLmp1bXAgPSBmdW5jdGlvbiBqdW1wKHRpY2tWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbXNGbG9hdCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRpY2tWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICA/IHRpY2tWYWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IHBhcnNlVGltZSh0aWNrVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgbXMgPSBNYXRoLmZsb29yKG1zRmxvYXQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbWVyIG9mIE9iamVjdC52YWx1ZXMoY2xvY2sudGltZXJzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjbG9jay5ub3cgKyBtcyA+IHRpbWVyLmNhbGxBdCkge1xuICAgICAgICAgICAgICAgICAgICB0aW1lci5jYWxsQXQgPSBjbG9jay5ub3cgKyBtcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbG9jay50aWNrKG1zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaXNQcmVzZW50LnBlcmZvcm1hbmNlKSB7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5ub3cgPSBmYWtlUGVyZm9ybWFuY2VOb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQcmVzZW50LmhydGltZSkge1xuICAgICAgICAgICAgY2xvY2suaHJ0aW1lID0gaHJ0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29uZmlnPX0gW2NvbmZpZ10gT3B0aW9uYWwgY29uZmlnXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3RhbGwoY29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICBjb25maWcgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzLmluc3RhbGwgY2FsbGVkIHdpdGggJHtTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICApfSBpbnN0YWxsIHJlcXVpcmVzIGFuIG9iamVjdCBwYXJhbWV0ZXJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZ2xvYmFsLkRhdGUuaXNGYWtlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBUaW1lcnMgYXJlIGFscmVhZHkgZmFrZWQ7IHRoaXMgaXMgYSBwcm9ibGVtLlxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgdXNlciByZXNldCB0aW1lcnMgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2FuJ3QgaW5zdGFsbCBmYWtlIHRpbWVycyB0d2ljZSBvbiB0aGUgc2FtZSBnbG9iYWwgb2JqZWN0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBjb25maWcgPSB0eXBlb2YgY29uZmlnICE9PSBcInVuZGVmaW5lZFwiID8gY29uZmlnIDoge307XG4gICAgICAgIGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9IGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSB8fCBmYWxzZTtcbiAgICAgICAgY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEgPSBjb25maWcuYWR2YW5jZVRpbWVEZWx0YSB8fCAyMDtcbiAgICAgICAgY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID1cbiAgICAgICAgICAgIGNvbmZpZy5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoY29uZmlnLnRhcmdldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBcImNvbmZpZy50YXJnZXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIGB3aXRoR2xvYmFsKHRhcmdldClgIGluc3RlYWQuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lci9vYmplY3QgdGhlIG5hbWUgb2YgdGhlIHRoaW5nIHRoYXQgaXMgbm90IHByZXNlbnRcbiAgICAgICAgICogQHBhcmFtIHRpbWVyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVNaXNzaW5nVGltZXIodGltZXIpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuaWdub3JlTWlzc2luZ1RpbWVycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgIGBub24tZXhpc3RlbnQgdGltZXJzIGFuZC9vciBvYmplY3RzIGNhbm5vdCBiZSBmYWtlZDogJyR7dGltZXJ9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gY3JlYXRlQ2xvY2soY29uZmlnLm5vdywgY29uZmlnLmxvb3BMaW1pdCk7XG4gICAgICAgIGNsb2NrLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID0gY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzO1xuXG4gICAgICAgIGNsb2NrLnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suYWJvcnRMaXN0ZW5lck1hcCA9IG5ldyBNYXAoKTtcblxuICAgICAgICBjbG9jay5tZXRob2RzID0gY29uZmlnLnRvRmFrZSB8fCBbXTtcblxuICAgICAgICBpZiAoY2xvY2subWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNsb2NrLm1ldGhvZHMgPSBPYmplY3Qua2V5cyh0aW1lcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxUaWNrID0gZG9JbnRlcnZhbFRpY2suYmluZChcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5hZHZhbmNlVGltZURlbHRhLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBfZ2xvYmFsLnNldEludGVydmFsKFxuICAgICAgICAgICAgICAgIGludGVydmFsVGljayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjbG9jay5hdHRhY2hlZEludGVydmFsID0gaW50ZXJ2YWxJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9jay5tZXRob2RzLmluY2x1ZGVzKFwicGVyZm9ybWFuY2VcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvID0gKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzUGVyZm9ybWFuY2VDb25zdHJ1Y3RvclByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dsb2JhbC5wZXJmb3JtYW5jZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoYXNQZXJmb3JtYW5jZVByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dsb2JhbC5QZXJmb3JtYW5jZS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGlmIChwcm90bykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9PSBcIm5vd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZVtuYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5pbmRleE9mKFwiZ2V0RW50cmllc1wiKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE5PT1BfQVJSQVlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOT09QO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gZW5zdXJlIGBtYXJrYCByZXR1cm5zIGEgdmFsdWUgdGhhdCBpcyB2YWxpZFxuICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlLm1hcmsgPSAobmFtZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IEZha2VQZXJmb3JtYW5jZUVudHJ5KG5hbWUsIFwibWFya1wiLCAwLCAwKTtcbiAgICAgICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5tZWFzdXJlID0gKG5hbWUpID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBGYWtlUGVyZm9ybWFuY2VFbnRyeShuYW1lLCBcIm1lYXN1cmVcIiwgMCwgMTAwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvbmZpZy50b0Zha2UgfHwgW10pLmluY2x1ZGVzKFwicGVyZm9ybWFuY2VcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlTWlzc2luZ1RpbWVyKFwicGVyZm9ybWFuY2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9nbG9iYWwgPT09IGdsb2JhbE9iamVjdCAmJiB0aW1lcnNNb2R1bGUpIHtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVyc01vZHVsZU1ldGhvZHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2dsb2JhbCA9PT0gZ2xvYmFsT2JqZWN0ICYmIHRpbWVyc1Byb21pc2VzTW9kdWxlKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnNQcm9taXNlc01vZHVsZU1ldGhvZHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2xvY2subWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9IGNsb2NrLm1ldGhvZHNbaV07XG5cbiAgICAgICAgICAgIGlmICghaXNQcmVzZW50W25hbWVPZk1ldGhvZFRvUmVwbGFjZV0pIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVNaXNzaW5nVGltZXIobmFtZU9mTWV0aG9kVG9SZXBsYWNlKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaGlqYWNrTWV0aG9kKF9nbG9iYWwucHJvY2VzcywgbmFtZU9mTWV0aG9kVG9SZXBsYWNlLCBjbG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwibmV4dFRpY2tcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QoX2dsb2JhbC5wcm9jZXNzLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZChfZ2xvYmFsLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXTtcbiAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNNb2R1bGVNZXRob2RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lOiBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBvcmlnaW5hbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aW1lcnNNb2R1bGVbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXSA9XG4gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxbbmFtZU9mTWV0aG9kVG9SZXBsYWNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnNQcm9taXNlc01vZHVsZU1ldGhvZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwic2V0VGltZW91dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLnRpbWVyc1Byb21pc2VzTW9kdWxlTWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWU6IFwic2V0VGltZW91dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWw6IHRpbWVyc1Byb21pc2VzTW9kdWxlLnNldFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyc1Byb21pc2VzTW9kdWxlLnNldFRpbWVvdXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9LFxuICAgICAgICAgICAgICAgICAgICApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFib3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suYWJvcnRMaXN0ZW5lck1hcC5kZWxldGUoYWJvcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc2FmZSwgdGhlcmUgaXMgbm8gY29kZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWluZyBpbnZva2VkIGJlZm9yZSBoYW5kbGUgaGFzIGJlZW4gYXNzaWduZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5jbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG9wdGlvbnMuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGNsb2NrLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuZGVsZXRlKGFib3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZU9mTWV0aG9kVG9SZXBsYWNlID09PSBcInNldEltbWVkaWF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLnRpbWVyc1Byb21pc2VzTW9kdWxlTWV0aG9kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWU6IFwic2V0SW1tZWRpYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogdGltZXJzUHJvbWlzZXNNb2R1bGUuc2V0SW1tZWRpYXRlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aW1lcnNQcm9taXNlc01vZHVsZS5zZXRJbW1lZGlhdGUgPSAodmFsdWUsIG9wdGlvbnMgPSB7fSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJvcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5hYm9ydExpc3RlbmVyTWFwLmRlbGV0ZShhYm9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzYWZlLCB0aGVyZSBpcyBubyBjb2RlIHBhdGggdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGludm9rZWQgYmVmb3JlIGhhbmRsZSBoYXMgYmVlbiBhc3NpZ25lZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChvcHRpb25zLnNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBjbG9jay5zZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuZGVsZXRlKGFib3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFib3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suYWJvcnRMaXN0ZW5lck1hcC5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwic2V0SW50ZXJ2YWxcIikge1xuICAgICAgICAgICAgICAgICAgICBjbG9jay50aW1lcnNQcm9taXNlc01vZHVsZU1ldGhvZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lOiBcInNldEludGVydmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogdGltZXJzUHJvbWlzZXNNb2R1bGUuc2V0SW50ZXJ2YWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyc1Byb21pc2VzTW9kdWxlLnNldEludGVydmFsID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVJlc29sdmFibGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNvbHZlLCByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1Rocm93biA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5DYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0QXZhaWxhYmxlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0UXVldWUgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGNsb2NrLnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVldWUuc2hpZnQoKS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBkZWxheSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJvcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5hYm9ydExpc3RlbmVyTWFwLmRlbGV0ZShhYm9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suY2xlYXJJbnRlcnZhbChoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXNvbHZhYmxlIG9mIG5leHRRdWV1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2YWJsZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCAmJiAhaGFzVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBvcHRpb25zLnNpZ25hbC5yZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEF2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXZhaWxhYmxlLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZhYmxlID0gY3JlYXRlUmVzb2x2YWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXVlLnB1c2gocmVzb2x2YWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc29sdmFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5DYWxsICYmIG5leHRRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5DYWxsLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsPy5hYm9ydGVkICYmICFoYXNUaHJvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG9wdGlvbnMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ2FsbCA9IGNyZWF0ZVJlc29sdmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZXR1cm5DYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5jbGVhckludGVydmFsKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmFib3J0TGlzdGVuZXJNYXAuZGVsZXRlKGFib3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvY2s7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lcnM6IHRpbWVycyxcbiAgICAgICAgY3JlYXRlQ2xvY2s6IGNyZWF0ZUNsb2NrLFxuICAgICAgICBpbnN0YWxsOiBpbnN0YWxsLFxuICAgICAgICB3aXRoR2xvYmFsOiB3aXRoR2xvYmFsLFxuICAgIH07XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmFrZVRpbWVyc1xuICogQHByb3BlcnR5IHtUaW1lcnN9IHRpbWVyc1xuICogQHByb3BlcnR5IHtjcmVhdGVDbG9ja30gY3JlYXRlQ2xvY2tcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGluc3RhbGxcbiAqIEBwcm9wZXJ0eSB7d2l0aEdsb2JhbH0gd2l0aEdsb2JhbFxuICovXG5cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKiogQHR5cGUge0Zha2VUaW1lcnN9ICovXG5jb25zdCBkZWZhdWx0SW1wbGVtZW50YXRpb24gPSB3aXRoR2xvYmFsKGdsb2JhbE9iamVjdCk7XG5cbmV4cG9ydHMudGltZXJzID0gZGVmYXVsdEltcGxlbWVudGF0aW9uLnRpbWVycztcbmV4cG9ydHMuY3JlYXRlQ2xvY2sgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24uY3JlYXRlQ2xvY2s7XG5leHBvcnRzLmluc3RhbGwgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24uaW5zdGFsbDtcbmV4cG9ydHMud2l0aEdsb2JhbCA9IHdpdGhHbG9iYWw7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEFSUkFZX1RZUEVTID0gW1xuICAgIEFycmF5LFxuICAgIEludDhBcnJheSxcbiAgICBVaW50OEFycmF5LFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5LFxuICAgIEludDE2QXJyYXksXG4gICAgVWludDE2QXJyYXksXG4gICAgSW50MzJBcnJheSxcbiAgICBVaW50MzJBcnJheSxcbiAgICBGbG9hdDMyQXJyYXksXG4gICAgRmxvYXQ2NEFycmF5LFxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBBUlJBWV9UWVBFUztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVlcC1lcXVhbFwiKS51c2UoY3JlYXRlTWF0Y2hlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbnZhciBldmVyeSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmV2ZXJ5O1xudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbnZhciBnZXQgPSByZXF1aXJlKFwibG9kYXNoLmdldFwiKTtcbnZhciBpdGVyYWJsZVRvU3RyaW5nID0gcmVxdWlyZShcIi4vaXRlcmFibGUtdG8tc3RyaW5nXCIpO1xudmFyIG9iamVjdFByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3Q7XG52YXIgdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudHlwZU9mO1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG52YXIgYXNzZXJ0TWF0Y2hlciA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC1tYXRjaGVyXCIpO1xudmFyIGFzc2VydE1ldGhvZEV4aXN0cyA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC1tZXRob2QtZXhpc3RzXCIpO1xudmFyIGFzc2VydFR5cGUgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9hc3NlcnQtdHlwZVwiKTtcbnZhciBpc0l0ZXJhYmxlID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvaXMtaXRlcmFibGVcIik7XG52YXIgaXNNYXRjaGVyID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvaXMtbWF0Y2hlclwiKTtcblxudmFyIG1hdGNoZXJQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9tYXRjaGVyLXByb3RvdHlwZVwiKTtcblxudmFyIGFycmF5SW5kZXhPZiA9IGFycmF5UHJvdG8uaW5kZXhPZjtcbnZhciBzb21lID0gYXJyYXlQcm90by5zb21lO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG52YXIgVFlQRV9NQVAgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci90eXBlLW1hcFwiKShjcmVhdGVNYXRjaGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXRjaGVyIG9iamVjdCBmb3IgdGhlIHBhc3NlZCBleHBlY3RhdGlvblxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmNyZWF0ZU1hdGNoZXJcbiAqIEBwYXJhbSB7Kn0gZXhwZWN0YXRpb24gQW4gZXhwZWN0dGF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBBIG1lc3NhZ2UgZm9yIHRoZSBleHBlY3RhdGlvblxuICogQHJldHVybnMge29iamVjdH0gQSBtYXRjaGVyIG9iamVjdFxuICovXG5mdW5jdGlvbiBjcmVhdGVNYXRjaGVyKGV4cGVjdGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgdmFyIG0gPSBPYmplY3QuY3JlYXRlKG1hdGNoZXJQcm90b3R5cGUpO1xuICAgIHZhciB0eXBlID0gdHlwZU9mKGV4cGVjdGF0aW9uKTtcblxuICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG1lc3NhZ2UgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1lc3NhZ2Ugc2hvdWxkIGJlIGEgc3RyaW5nXCIpO1xuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEV4cGVjdGVkIDEgb3IgMiBhcmd1bWVudHMsIHJlY2VpdmVkICR7YXJndW1lbnRzLmxlbmd0aH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlIGluIFRZUEVfTUFQKSB7XG4gICAgICAgIFRZUEVfTUFQW3R5cGVdKG0sIGV4cGVjdGF0aW9uLCBtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0YXRpb24pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmICghbS5tZXNzYWdlKSB7XG4gICAgICAgIG0ubWVzc2FnZSA9IGBtYXRjaCgke3ZhbHVlVG9TdHJpbmcoZXhwZWN0YXRpb24pfSlgO1xuICAgIH1cblxuICAgIC8vIGVuc3VyZSB0aGF0IG5vdGhpbmcgbXV0YXRlcyB0aGUgZXhwb3J0ZWQgbWVzc2FnZSB2YWx1ZSwgcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5vbmpzL3Npbm9uL2lzc3Vlcy8yNTAyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIFwibWVzc2FnZVwiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG0ubWVzc2FnZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtO1xufVxuXG5jcmVhdGVNYXRjaGVyLmlzTWF0Y2hlciA9IGlzTWF0Y2hlcjtcblxuY3JlYXRlTWF0Y2hlci5hbnkgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn0sIFwiYW55XCIpO1xuXG5jcmVhdGVNYXRjaGVyLmRlZmluZWQgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICByZXR1cm4gYWN0dWFsICE9PSBudWxsICYmIGFjdHVhbCAhPT0gdW5kZWZpbmVkO1xufSwgXCJkZWZpbmVkXCIpO1xuXG5jcmVhdGVNYXRjaGVyLnRydXRoeSA9IGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgIHJldHVybiBCb29sZWFuKGFjdHVhbCk7XG59LCBcInRydXRoeVwiKTtcblxuY3JlYXRlTWF0Y2hlci5mYWxzeSA9IGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgIHJldHVybiAhYWN0dWFsO1xufSwgXCJmYWxzeVwiKTtcblxuY3JlYXRlTWF0Y2hlci5zYW1lID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoXG4gICAgICAgIGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbiA9PT0gYWN0dWFsO1xuICAgICAgICB9LFxuICAgICAgICBgc2FtZSgke3ZhbHVlVG9TdHJpbmcoZXhwZWN0YXRpb24pfSlgLFxuICAgICk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmluID0gZnVuY3Rpb24gKGFycmF5T2ZFeHBlY3RhdGlvbnMpIHtcbiAgICBpZiAodHlwZU9mKGFycmF5T2ZFeHBlY3RhdGlvbnMpICE9PSBcImFycmF5XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFycmF5IGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKFxuICAgICAgICBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gc29tZShhcnJheU9mRXhwZWN0YXRpb25zLCBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24gPT09IGFjdHVhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBgaW4oJHt2YWx1ZVRvU3RyaW5nKGFycmF5T2ZFeHBlY3RhdGlvbnMpfSlgLFxuICAgICk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLnR5cGVPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgYXNzZXJ0VHlwZSh0eXBlLCBcInN0cmluZ1wiLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gdHlwZU9mKGFjdHVhbCkgPT09IHR5cGU7XG4gICAgfSwgYHR5cGVPZihcIiR7dHlwZX1cIilgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgICB0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBTeW1ib2wuaGFzSW5zdGFuY2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICApIHtcbiAgICAgICAgYXNzZXJ0VHlwZSh0eXBlLCBcImZ1bmN0aW9uXCIsIFwidHlwZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnRNZXRob2RFeGlzdHMoXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgU3ltYm9sLmhhc0luc3RhbmNlLFxuICAgICAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgICAgICBcIltTeW1ib2wuaGFzSW5zdGFuY2VdXCIsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKFxuICAgICAgICBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgYGluc3RhbmNlT2YoJHtmdW5jdGlvbk5hbWUodHlwZSkgfHwgb2JqZWN0VG9TdHJpbmcodHlwZSl9KWAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb3BlcnR5IG1hdGNoZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcGVydHlUZXN0IEEgZnVuY3Rpb24gdG8gdGVzdCB0aGUgcHJvcGVydHkgYWdhaW5zdCBhIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVByZWZpeCBBIHByZWZpeCB0byB1c2UgZm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCBieSB0aGUgbWF0Y2hlclxuICogQHJldHVybnMge29iamVjdH0gQSBtYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5TWF0Y2hlcihwcm9wZXJ0eVRlc3QsIG1lc3NhZ2VQcmVmaXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgICAgICBhc3NlcnRUeXBlKHByb3BlcnR5LCBcInN0cmluZ1wiLCBcInByb3BlcnR5XCIpO1xuICAgICAgICB2YXIgb25seVByb3BlcnR5ID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBgJHttZXNzYWdlUHJlZml4fShcIiR7cHJvcGVydHl9XCJgO1xuICAgICAgICBpZiAoIW9ubHlQcm9wZXJ0eSkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSBgLCAke3ZhbHVlVG9TdHJpbmcodmFsdWUpfWA7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSBcIilcIjtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgIXByb3BlcnR5VGVzdChhY3R1YWwsIHByb3BlcnR5KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9ubHlQcm9wZXJ0eSB8fCBkZWVwRXF1YWwoYWN0dWFsW3Byb3BlcnR5XSwgdmFsdWUpO1xuICAgICAgICB9LCBtZXNzYWdlKTtcbiAgICB9O1xufVxuXG5jcmVhdGVNYXRjaGVyLmhhcyA9IGNyZWF0ZVByb3BlcnR5TWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsLCBwcm9wZXJ0eSkge1xuICAgIGlmICh0eXBlb2YgYWN0dWFsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiBhY3R1YWw7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxbcHJvcGVydHldICE9PSB1bmRlZmluZWQ7XG59LCBcImhhc1wiKTtcblxuY3JlYXRlTWF0Y2hlci5oYXNPd24gPSBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCwgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkoYWN0dWFsLCBwcm9wZXJ0eSk7XG59LCBcImhhc093blwiKTtcblxuY3JlYXRlTWF0Y2hlci5oYXNOZXN0ZWQgPSBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKSB7XG4gICAgYXNzZXJ0VHlwZShwcm9wZXJ0eSwgXCJzdHJpbmdcIiwgXCJwcm9wZXJ0eVwiKTtcbiAgICB2YXIgb25seVByb3BlcnR5ID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICB2YXIgbWVzc2FnZSA9IGBoYXNOZXN0ZWQoXCIke3Byb3BlcnR5fVwiYDtcbiAgICBpZiAoIW9ubHlQcm9wZXJ0eSkge1xuICAgICAgICBtZXNzYWdlICs9IGAsICR7dmFsdWVUb1N0cmluZyh2YWx1ZSl9YDtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIilcIjtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBhY3R1YWwgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGdldChhY3R1YWwsIHByb3BlcnR5KSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbmx5UHJvcGVydHkgfHwgZGVlcEVxdWFsKGdldChhY3R1YWwsIHByb3BlcnR5KSwgdmFsdWUpO1xuICAgIH0sIG1lc3NhZ2UpO1xufTtcblxudmFyIGpzb25QYXJzZVJlc3VsdFR5cGVzID0ge1xuICAgIG51bGw6IHRydWUsXG4gICAgYm9vbGVhbjogdHJ1ZSxcbiAgICBudW1iZXI6IHRydWUsXG4gICAgc3RyaW5nOiB0cnVlLFxuICAgIG9iamVjdDogdHJ1ZSxcbiAgICBhcnJheTogdHJ1ZSxcbn07XG5jcmVhdGVNYXRjaGVyLmpzb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoIWpzb25QYXJzZVJlc3VsdFR5cGVzW3R5cGVPZih2YWx1ZSldKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJWYWx1ZSBjYW5ub3QgYmUgdGhlIHJlc3VsdCBvZiBKU09OLnBhcnNlXCIpO1xuICAgIH1cbiAgICB2YXIgbWVzc2FnZSA9IGBqc29uKCR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIFwiICBcIil9KWA7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShhY3R1YWwpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZXBFcXVhbChwYXJzZWQsIHZhbHVlKTtcbiAgICB9LCBtZXNzYWdlKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuZXZlcnkgPSBmdW5jdGlvbiAocHJlZGljYXRlKSB7XG4gICAgYXNzZXJ0TWF0Y2hlcihwcmVkaWNhdGUpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICBpZiAodHlwZU9mKGFjdHVhbCkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVyeShPYmplY3Qua2V5cyhhY3R1YWwpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZS50ZXN0KGFjdHVhbFtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzSXRlcmFibGUoYWN0dWFsKSAmJlxuICAgICAgICAgICAgZXZlcnkoYWN0dWFsLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUudGVzdChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGV2ZXJ5KCR7cHJlZGljYXRlLm1lc3NhZ2V9KWApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5zb21lID0gZnVuY3Rpb24gKHByZWRpY2F0ZSkge1xuICAgIGFzc2VydE1hdGNoZXIocHJlZGljYXRlKTtcblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgaWYgKHR5cGVPZihhY3R1YWwpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gIWV2ZXJ5KE9iamVjdC5rZXlzKGFjdHVhbCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZWRpY2F0ZS50ZXN0KGFjdHVhbFtrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzSXRlcmFibGUoYWN0dWFsKSAmJlxuICAgICAgICAgICAgIWV2ZXJ5KGFjdHVhbCwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZWRpY2F0ZS50ZXN0KGVsZW1lbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgc29tZSgke3ByZWRpY2F0ZS5tZXNzYWdlfSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcImFycmF5XCIpO1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5LmRlZXBFcXVhbHMgPSBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihcbiAgICAgICAgZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgLy8gQ29tcGFyaW5nIGxlbmd0aHMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIHNwb3QgYSBkaWZmZXJlbmNlIGJlZm9yZSBpdGVyYXRpbmcgdGhyb3VnaCBldmVyeSBpdGVtXG4gICAgICAgICAgICB2YXIgc2FtZUxlbmd0aCA9IGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGF0aW9uLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZU9mKGFjdHVhbCkgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgICAgICAgICAgIHNhbWVMZW5ndGggJiZcbiAgICAgICAgICAgICAgICBldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBleHBlY3RhdGlvbltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlT2YoZXhwZWN0ZWQpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihlbGVtZW50KSA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZU1hdGNoZXIuYXJyYXkuZGVlcEVxdWFscyhleHBlY3RlZCkudGVzdChlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWVwRXF1YWwoZXhwZWN0ZWQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBgZGVlcEVxdWFscyhbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWAsXG4gICAgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKFxuICAgICAgICBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbFtpbmRleF0gPT09IGV4cGVjdGVkRWxlbWVudDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgYHN0YXJ0c1dpdGgoWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgLFxuICAgICk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5LmVuZHNXaXRoID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoXG4gICAgICAgIGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoZSBpbmRleCBpbiB3aGljaCB3ZSBzaG91bGQgc3RhcnQgbWF0Y2hpbmdcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBhY3R1YWwubGVuZ3RoIC0gZXhwZWN0YXRpb24ubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbFtvZmZzZXQgKyBpbmRleF0gPT09IGV4cGVjdGVkRWxlbWVudDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgYGVuZHNXaXRoKFske2l0ZXJhYmxlVG9TdHJpbmcoZXhwZWN0YXRpb24pfV0pYCxcbiAgICApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5hcnJheS5jb250YWlucyA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKFxuICAgICAgICBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlJbmRleE9mKGFjdHVhbCwgZXhwZWN0ZWRFbGVtZW50KSAhPT0gLTE7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGBjb250YWlucyhbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWAsXG4gICAgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIubWFwID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJtYXBcIik7XG5cbmNyZWF0ZU1hdGNoZXIubWFwLmRlZXBFcXVhbHMgPSBmdW5jdGlvbiBtYXBEZWVwRXF1YWxzKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoXG4gICAgICAgIGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIC8vIENvbXBhcmluZyBsZW5ndGhzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byBzcG90IGEgZGlmZmVyZW5jZSBiZWZvcmUgaXRlcmF0aW5nIHRocm91Z2ggZXZlcnkgaXRlbVxuICAgICAgICAgICAgdmFyIHNhbWVMZW5ndGggPSBhY3R1YWwuc2l6ZSA9PT0gZXhwZWN0YXRpb24uc2l6ZTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZU9mKGFjdHVhbCkgPT09IFwibWFwXCIgJiZcbiAgICAgICAgICAgICAgICBzYW1lTGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgZXZlcnkoYWN0dWFsLCBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5oYXMoa2V5KSAmJiBleHBlY3RhdGlvbi5nZXQoa2V5KSA9PT0gZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBgZGVlcEVxdWFscyhNYXBbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWAsXG4gICAgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIubWFwLmNvbnRhaW5zID0gZnVuY3Rpb24gbWFwQ29udGFpbnMoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihcbiAgICAgICAgZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJtYXBcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZXJ5KGV4cGVjdGF0aW9uLCBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWwuaGFzKGtleSkgJiYgYWN0dWFsLmdldChrZXkpID09PSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBgY29udGFpbnMoTWFwWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgLFxuICAgICk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLnNldCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwic2V0XCIpO1xuXG5jcmVhdGVNYXRjaGVyLnNldC5kZWVwRXF1YWxzID0gZnVuY3Rpb24gc2V0RGVlcEVxdWFscyhleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKFxuICAgICAgICBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAvLyBDb21wYXJpbmcgbGVuZ3RocyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gc3BvdCBhIGRpZmZlcmVuY2UgYmVmb3JlIGl0ZXJhdGluZyB0aHJvdWdoIGV2ZXJ5IGl0ZW1cbiAgICAgICAgICAgIHZhciBzYW1lTGVuZ3RoID0gYWN0dWFsLnNpemUgPT09IGV4cGVjdGF0aW9uLnNpemU7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgc2FtZUxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGV2ZXJ5KGFjdHVhbCwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmhhcyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgYGRlZXBFcXVhbHMoU2V0WyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgLFxuICAgICk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLnNldC5jb250YWlucyA9IGZ1bmN0aW9uIHNldENvbnRhaW5zKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoXG4gICAgICAgIGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZU9mKGFjdHVhbCkgPT09IFwic2V0XCIgJiZcbiAgICAgICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbC5oYXMoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGBjb250YWlucyhTZXRbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWAsXG4gICAgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYm9vbCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwiYm9vbGVhblwiKTtcbmNyZWF0ZU1hdGNoZXIubnVtYmVyID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJudW1iZXJcIik7XG5jcmVhdGVNYXRjaGVyLnN0cmluZyA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwic3RyaW5nXCIpO1xuY3JlYXRlTWF0Y2hlci5vYmplY3QgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcIm9iamVjdFwiKTtcbmNyZWF0ZU1hdGNoZXIuZnVuYyA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwiZnVuY3Rpb25cIik7XG5jcmVhdGVNYXRjaGVyLnJlZ2V4cCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwicmVnZXhwXCIpO1xuY3JlYXRlTWF0Y2hlci5kYXRlID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJkYXRlXCIpO1xuY3JlYXRlTWF0Y2hlci5zeW1ib2wgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcInN5bWJvbFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVNYXRjaGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc01hdGNoZXIgPSByZXF1aXJlKFwiLi9pcy1tYXRjaGVyXCIpO1xuXG4vKipcbiAqIFRocm93cyBhIFR5cGVFcnJvciB3aGVuIGB2YWx1ZWAgaXMgbm90IGEgbWF0Y2hlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBleGFtaW5lXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1hdGNoZXIodmFsdWUpIHtcbiAgICBpZiAoIWlzTWF0Y2hlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hdGNoZXIgZXhwZWN0ZWRcIik7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2VydE1hdGNoZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBUeXBlRXJyb3Igd2hlbiBleHBlY3RlZCBtZXRob2QgZG9lc24ndCBleGlzdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvIGxvb2sgZm9yXG4gKiBAcGFyYW0ge25hbWV9IG5hbWUgQSBuYW1lIHRvIHVzZSBmb3IgdGhlIGVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RQYXRoIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gdXNlIGZvciBlcnJvciBtZXNzYWdlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSBXaGVuIHRoZSBtZXRob2QgZG9lc24ndCBleGlzdFxuICovXG5mdW5jdGlvbiBhc3NlcnRNZXRob2RFeGlzdHModmFsdWUsIG1ldGhvZCwgbmFtZSwgbWV0aG9kUGF0aCkge1xuICAgIGlmICh2YWx1ZVttZXRob2RdID09PSBudWxsIHx8IHZhbHVlW21ldGhvZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAke25hbWV9IHRvIGhhdmUgbWV0aG9kICR7bWV0aG9kUGF0aH1gKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0TWV0aG9kRXhpc3RzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHZhbHVlIGlzIG9mIHR5cGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEEgYmFzaWMgSmF2YVNjcmlwdCB0eXBlIHRvIGNvbXBhcmUgdG8sIGUuZy4gXCJvYmplY3RcIiwgXCJzdHJpbmdcIlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQSBzdHJpbmcgdG8gdXNlIGZvciB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiB2YWx1ZSBpcyBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5cGVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUsIG5hbWUpIHtcbiAgICB2YXIgYWN0dWFsID0gdHlwZU9mKHZhbHVlKTtcbiAgICBpZiAoYWN0dWFsICE9PSB0eXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgdHlwZSBvZiAke25hbWV9IHRvIGJlICR7dHlwZX0sIGJ1dCB3YXMgJHthY3R1YWx9YCxcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0VHlwZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudHlwZU9mO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGZvciBpdGVyYWJsZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgbG9va3MgbGlrZSBhbiBpdGVyYWJsZVxuICovXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpICYmIHR5cGVPZih2YWx1ZS5mb3JFYWNoKSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmFibGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC5pc1Byb3RvdHlwZU9mO1xuXG52YXIgbWF0Y2hlclByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL21hdGNoZXItcHJvdG90eXBlXCIpO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYSBtYXRjaGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYSBtYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGlzTWF0Y2hlcihvYmplY3QpIHtcbiAgICByZXR1cm4gaXNQcm90b3R5cGVPZihtYXRjaGVyUHJvdG90eXBlLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWF0Y2hlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZXZlcnkgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmV2ZXJ5O1xudmFyIGNvbmNhdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuY29uY2F0O1xudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcblxudmFyIGRlZXBFcXVhbEZhY3RvcnkgPSByZXF1aXJlKFwiLi4vZGVlcC1lcXVhbFwiKS51c2U7XG5cbnZhciBpZGVudGljYWwgPSByZXF1aXJlKFwiLi4vaWRlbnRpY2FsXCIpO1xudmFyIGlzTWF0Y2hlciA9IHJlcXVpcmUoXCIuL2lzLW1hdGNoZXJcIik7XG5cbnZhciBrZXlzID0gT2JqZWN0LmtleXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBNYXRjaGVzIGBhY3R1YWxgIHdpdGggYGV4cGVjdGF0aW9uYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFjdHVhbCBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBleHBlY3RhdGlvbiBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHRvIG1hdGNoIG9uXG4gKiBAcGFyYW0ge29iamVjdH0gbWF0Y2hlciBBIG1hdGNoZXIgdG8gdXNlIGZvciBjb21wYXJpc29uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYGFjdHVhbGAgbWF0Y2hlcyBhbGwgcHJvcGVydGllcyBpbiBgZXhwZWN0YXRpb25gXG4gKi9cbmZ1bmN0aW9uIG1hdGNoT2JqZWN0KGFjdHVhbCwgZXhwZWN0YXRpb24sIG1hdGNoZXIpIHtcbiAgICB2YXIgZGVlcEVxdWFsID0gZGVlcEVxdWFsRmFjdG9yeShtYXRjaGVyKTtcbiAgICBpZiAoYWN0dWFsID09PSBudWxsIHx8IGFjdHVhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZXhwZWN0ZWRLZXlzID0ga2V5cyhleHBlY3RhdGlvbik7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGNhbm5vdCBjb2xsZWN0IGNvdmVyYWdlIGZvciBlbmdpbmUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgU3ltYm9sICovXG4gICAgaWYgKHR5cGVPZihnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZXhwZWN0ZWRLZXlzID0gY29uY2F0KGV4cGVjdGVkS2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV4cGVjdGF0aW9uKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZXJ5KGV4cGVjdGVkS2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgZXhwID0gZXhwZWN0YXRpb25ba2V5XTtcbiAgICAgICAgdmFyIGFjdCA9IGFjdHVhbFtrZXldO1xuXG4gICAgICAgIGlmIChpc01hdGNoZXIoZXhwKSkge1xuICAgICAgICAgICAgaWYgKCFleHAudGVzdChhY3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPZihleHApID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoaWRlbnRpY2FsKGV4cCwgYWN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXRjaE9iamVjdChhY3QsIGV4cCwgbWF0Y2hlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWRlZXBFcXVhbChhY3QsIGV4cCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtYXRjaGVyUHJvdG90eXBlID0ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfSxcbn07XG5cbm1hdGNoZXJQcm90b3R5cGUub3IgPSBmdW5jdGlvbiAodmFsdWVPck1hdGNoZXIpIHtcbiAgICB2YXIgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtbWF0Y2hlclwiKTtcbiAgICB2YXIgaXNNYXRjaGVyID0gY3JlYXRlTWF0Y2hlci5pc01hdGNoZXI7XG5cbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hdGNoZXIgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIG0yID0gaXNNYXRjaGVyKHZhbHVlT3JNYXRjaGVyKVxuICAgICAgICA/IHZhbHVlT3JNYXRjaGVyXG4gICAgICAgIDogY3JlYXRlTWF0Y2hlcih2YWx1ZU9yTWF0Y2hlcik7XG4gICAgdmFyIG0xID0gdGhpcztcbiAgICB2YXIgb3IgPSBPYmplY3QuY3JlYXRlKG1hdGNoZXJQcm90b3R5cGUpO1xuICAgIG9yLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiBtMS50ZXN0KGFjdHVhbCkgfHwgbTIudGVzdChhY3R1YWwpO1xuICAgIH07XG4gICAgb3IubWVzc2FnZSA9IGAke20xLm1lc3NhZ2V9Lm9yKCR7bTIubWVzc2FnZX0pYDtcbiAgICByZXR1cm4gb3I7XG59O1xuXG5tYXRjaGVyUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh2YWx1ZU9yTWF0Y2hlcikge1xuICAgIHZhciBjcmVhdGVNYXRjaGVyID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1tYXRjaGVyXCIpO1xuICAgIHZhciBpc01hdGNoZXIgPSBjcmVhdGVNYXRjaGVyLmlzTWF0Y2hlcjtcblxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWF0Y2hlciBleHBlY3RlZFwiKTtcbiAgICB9XG5cbiAgICB2YXIgbTIgPSBpc01hdGNoZXIodmFsdWVPck1hdGNoZXIpXG4gICAgICAgID8gdmFsdWVPck1hdGNoZXJcbiAgICAgICAgOiBjcmVhdGVNYXRjaGVyKHZhbHVlT3JNYXRjaGVyKTtcbiAgICB2YXIgbTEgPSB0aGlzO1xuICAgIHZhciBhbmQgPSBPYmplY3QuY3JlYXRlKG1hdGNoZXJQcm90b3R5cGUpO1xuICAgIGFuZC50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gbTEudGVzdChhY3R1YWwpICYmIG0yLnRlc3QoYWN0dWFsKTtcbiAgICB9O1xuICAgIGFuZC5tZXNzYWdlID0gYCR7bTEubWVzc2FnZX0uYW5kKCR7bTIubWVzc2FnZX0pYDtcbiAgICByZXR1cm4gYW5kO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVyUHJvdG90eXBlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG52YXIgam9pbiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuam9pbjtcbnZhciBtYXAgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5Lm1hcDtcbnZhciBzdHJpbmdJbmRleE9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuaW5kZXhPZjtcbnZhciB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxudmFyIG1hdGNoT2JqZWN0ID0gcmVxdWlyZShcIi4vbWF0Y2gtb2JqZWN0XCIpO1xuXG52YXIgY3JlYXRlVHlwZU1hcCA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGV4cGVjdGF0aW9uO1xuICAgICAgICAgICAgbS5tZXNzYWdlID0gbWVzc2FnZSB8fCBgbWF0Y2goJHtmdW5jdGlvbk5hbWUoZXhwZWN0YXRpb24pfSlgO1xuICAgICAgICB9LFxuICAgICAgICBudW1iZXI6IGZ1bmN0aW9uIChtLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdHlwZSBjb2VyY2lvbiBoZXJlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uID09IGFjdHVhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG9iamVjdDogZnVuY3Rpb24gKG0sIGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBlY3RhdGlvbi50ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi50ZXN0KGFjdHVhbCkgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goJHtmdW5jdGlvbk5hbWUoZXhwZWN0YXRpb24udGVzdCl9KWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFycmF5ID0gbWFwKE9iamVjdC5rZXlzKGV4cGVjdGF0aW9uKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke3ZhbHVlVG9TdHJpbmcoZXhwZWN0YXRpb25ba2V5XSl9YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoT2JqZWN0KGFjdHVhbCwgZXhwZWN0YXRpb24sIG1hdGNoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goJHtqb2luKGFycmF5LCBcIiwgXCIpfSlgO1xuXG4gICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnZXhwOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gXCJzdHJpbmdcIiAmJiBleHBlY3RhdGlvbi50ZXN0KGFjdHVhbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBzdHJpbmc6IGZ1bmN0aW9uIChtLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhY3R1YWwgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nSW5kZXhPZihhY3R1YWwsIGV4cGVjdGF0aW9uKSAhPT0gLTFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG0ubWVzc2FnZSA9IGBtYXRjaChcIiR7ZXhwZWN0YXRpb259XCIpYDtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVUeXBlTWFwO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbnZhciBjbGFzc05hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5jbGFzc05hbWU7XG52YXIgdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudHlwZU9mO1xudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIG9iamVjdFByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3Q7XG52YXIgbWFwRm9yRWFjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMubWFwLmZvckVhY2g7XG5cbnZhciBnZXRDbGFzcyA9IHJlcXVpcmUoXCIuL2dldC1jbGFzc1wiKTtcbnZhciBpZGVudGljYWwgPSByZXF1aXJlKFwiLi9pZGVudGljYWxcIik7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKFwiLi9pcy1hcmd1bWVudHNcIik7XG52YXIgaXNBcnJheVR5cGUgPSByZXF1aXJlKFwiLi9pcy1hcnJheS10eXBlXCIpO1xudmFyIGlzRGF0ZSA9IHJlcXVpcmUoXCIuL2lzLWRhdGVcIik7XG52YXIgaXNFbGVtZW50ID0gcmVxdWlyZShcIi4vaXMtZWxlbWVudFwiKTtcbnZhciBpc0l0ZXJhYmxlID0gcmVxdWlyZShcIi4vaXMtaXRlcmFibGVcIik7XG52YXIgaXNNYXAgPSByZXF1aXJlKFwiLi9pcy1tYXBcIik7XG52YXIgaXNOYU4gPSByZXF1aXJlKFwiLi9pcy1uYW5cIik7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKFwiLi9pcy1vYmplY3RcIik7XG52YXIgaXNTZXQgPSByZXF1aXJlKFwiLi9pcy1zZXRcIik7XG52YXIgaXNTdWJzZXQgPSByZXF1aXJlKFwiLi9pcy1zdWJzZXRcIik7XG5cbnZhciBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbnZhciBldmVyeSA9IGFycmF5UHJvdG8uZXZlcnk7XG52YXIgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcblxudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG52YXIgaW5kZXhPZiA9IGFycmF5UHJvdG8uaW5kZXhPZjtcbnZhciBrZXlzID0gT2JqZWN0LmtleXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBEZWVwIGVxdWFsIGNvbXBhcmlzb24uIFR3byB2YWx1ZXMgYXJlIFwiZGVlcCBlcXVhbFwiIHdoZW46XG4gKlxuICogICAtIFRoZXkgYXJlIGVxdWFsLCBhY2NvcmRpbmcgdG8gc2Ftc2FtLmlkZW50aWNhbFxuICogICAtIFRoZXkgYXJlIGJvdGggZGF0ZSBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgc2FtZSB0aW1lXG4gKiAgIC0gVGhleSBhcmUgYm90aCBhcnJheXMgY29udGFpbmluZyBlbGVtZW50cyB0aGF0IGFyZSBhbGwgZGVlcEVxdWFsXG4gKiAgIC0gVGhleSBhcmUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLCBhbmQgZWFjaCBwcm9wZXJ0eVxuICogICAgIGluIGBgYWN0dWFsYGAgaXMgZGVlcEVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGluIGBgZXhwZWN0YXRpb25gYFxuICpcbiAqIFN1cHBvcnRzIGN5Y2xpYyBvYmplY3RzLlxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmRlZXBFcXVhbFxuICogQHBhcmFtIHsqfSBhY3R1YWwgVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcGFyYW0geyp9IGV4cGVjdGF0aW9uIFRoZSBvYmplY3QgYWN0dWFsIGlzIGV4cGVjdGVkIHRvIGJlIGVxdWFsIHRvXG4gKiBAcGFyYW0ge29iamVjdH0gbWF0Y2ggQSB2YWx1ZSB0byBtYXRjaCBvblxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGFjdHVhbCBhbmQgZXhwZWN0YXRpb24gYXJlIGNvbnNpZGVyZWQgZXF1YWxcbiAqL1xuZnVuY3Rpb24gZGVlcEVxdWFsQ3ljbGljKGFjdHVhbCwgZXhwZWN0YXRpb24sIG1hdGNoKSB7XG4gICAgLy8gdXNlZCBmb3IgY3ljbGljIGNvbXBhcmlzb25cbiAgICAvLyBjb250YWluIGFscmVhZHkgdmlzaXRlZCBvYmplY3RzXG4gICAgdmFyIGFjdHVhbE9iamVjdHMgPSBbXTtcbiAgICB2YXIgZXhwZWN0YXRpb25PYmplY3RzID0gW107XG4gICAgLy8gY29udGFpbiBwYXRoZXMgKHBvc2l0aW9uIGluIHRoZSBvYmplY3Qgc3RydWN0dXJlKVxuICAgIC8vIG9mIHRoZSBhbHJlYWR5IHZpc2l0ZWQgb2JqZWN0c1xuICAgIC8vIGluZGV4ZXMgc2FtZSBhcyBpbiBvYmplY3RzIGFycmF5c1xuICAgIHZhciBhY3R1YWxQYXRocyA9IFtdO1xuICAgIHZhciBleHBlY3RhdGlvblBhdGhzID0gW107XG4gICAgLy8gY29udGFpbnMgY29tYmluYXRpb25zIG9mIGFscmVhZHkgY29tcGFyZWQgb2JqZWN0c1xuICAgIC8vIGluIHRoZSBtYW5uZXI6IHsgXCIkMVsncmVmJ10kMlsncmVmJ11cIjogdHJ1ZSB9XG4gICAgdmFyIGNvbXBhcmVkID0ge307XG5cbiAgICAvLyBkb2VzIHRoZSByZWN1cnNpb24gZm9yIHRoZSBkZWVwIGVxdWFsIGNoZWNrXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICByZXR1cm4gKGZ1bmN0aW9uIGRlZXBFcXVhbChcbiAgICAgICAgYWN0dWFsT2JqLFxuICAgICAgICBleHBlY3RhdGlvbk9iaixcbiAgICAgICAgYWN0dWFsUGF0aCxcbiAgICAgICAgZXhwZWN0YXRpb25QYXRoLFxuICAgICkge1xuICAgICAgICAvLyBJZiBib3RoIGFyZSBtYXRjaGVycyB0aGV5IG11c3QgYmUgdGhlIHNhbWUgaW5zdGFuY2UgaW4gb3JkZXIgdG8gYmVcbiAgICAgICAgLy8gY29uc2lkZXJlZCBlcXVhbCBJZiB3ZSBkaWRuJ3QgZG8gdGhhdCB3ZSB3b3VsZCBlbmQgdXAgcnVubmluZyBvbmVcbiAgICAgICAgLy8gbWF0Y2hlciBhZ2FpbnN0IHRoZSBvdGhlclxuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaXNNYXRjaGVyKGV4cGVjdGF0aW9uT2JqKSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmlzTWF0Y2hlcihhY3R1YWxPYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25PYmoudGVzdChhY3R1YWxPYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbFR5cGUgPSB0eXBlb2YgYWN0dWFsT2JqO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25UeXBlID0gdHlwZW9mIGV4cGVjdGF0aW9uT2JqO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmogfHxcbiAgICAgICAgICAgIGlzTmFOKGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgIGlzTmFOKGV4cGVjdGF0aW9uT2JqKSB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSBudWxsIHx8XG4gICAgICAgICAgICBleHBlY3RhdGlvbk9iaiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFjdHVhbFR5cGUgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uVHlwZSAhPT0gXCJvYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpZGVudGljYWwoYWN0dWFsT2JqLCBleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbGVtZW50cyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwoZXhwZWN0ZWQsIGFjdHVhbClcbiAgICAgICAgaWYgKGlzRWxlbWVudChhY3R1YWxPYmopIHx8IGlzRWxlbWVudChleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc0FjdHVhbERhdGUgPSBpc0RhdGUoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGlzRXhwZWN0YXRpb25EYXRlID0gaXNEYXRlKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgaWYgKGlzQWN0dWFsRGF0ZSB8fCBpc0V4cGVjdGF0aW9uRGF0ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpc0FjdHVhbERhdGUgfHxcbiAgICAgICAgICAgICAgICAhaXNFeHBlY3RhdGlvbkRhdGUgfHxcbiAgICAgICAgICAgICAgICBnZXRUaW1lLmNhbGwoYWN0dWFsT2JqKSAhPT0gZ2V0VGltZS5jYWxsKGV4cGVjdGF0aW9uT2JqKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlVG9TdHJpbmcoYWN0dWFsT2JqKSAhPT0gdmFsdWVUb1N0cmluZyhleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0dWFsT2JqIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIEVycm9yICYmIGV4cGVjdGF0aW9uT2JqIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbENsYXNzID0gZ2V0Q2xhc3MoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGV4cGVjdGF0aW9uQ2xhc3MgPSBnZXRDbGFzcyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxLZXlzID0ga2V5cyhhY3R1YWxPYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25LZXlzID0ga2V5cyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxOYW1lID0gY2xhc3NOYW1lKGFjdHVhbE9iaik7XG4gICAgICAgIHZhciBleHBlY3RhdGlvbk5hbWUgPSBjbGFzc05hbWUoZXhwZWN0YXRpb25PYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25TeW1ib2xzID1cbiAgICAgICAgICAgIHR5cGVPZihnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGdldE93blByb3BlcnR5U3ltYm9scyhleHBlY3RhdGlvbk9iailcbiAgICAgICAgICAgICAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBjYW5ub3QgY29sbGVjdCBjb3ZlcmFnZSBmb3IgZW5naW5lIHRoYXQgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCAqL1xuICAgICAgICAgICAgICAgICAgW107XG4gICAgICAgIHZhciBleHBlY3RhdGlvbktleXNBbmRTeW1ib2xzID0gY29uY2F0KFxuICAgICAgICAgICAgZXhwZWN0YXRpb25LZXlzLFxuICAgICAgICAgICAgZXhwZWN0YXRpb25TeW1ib2xzLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc0FyZ3VtZW50cyhhY3R1YWxPYmopIHx8IGlzQXJndW1lbnRzKGV4cGVjdGF0aW9uT2JqKSkge1xuICAgICAgICAgICAgaWYgKGFjdHVhbE9iai5sZW5ndGggIT09IGV4cGVjdGF0aW9uT2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhY3R1YWxUeXBlICE9PSBleHBlY3RhdGlvblR5cGUgfHxcbiAgICAgICAgICAgICAgICBhY3R1YWxDbGFzcyAhPT0gZXhwZWN0YXRpb25DbGFzcyB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbEtleXMubGVuZ3RoICE9PSBleHBlY3RhdGlvbktleXMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgKGFjdHVhbE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25OYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbE5hbWUgIT09IGV4cGVjdGF0aW9uTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NldChhY3R1YWxPYmopIHx8IGlzU2V0KGV4cGVjdGF0aW9uT2JqKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpc1NldChhY3R1YWxPYmopIHx8XG4gICAgICAgICAgICAgICAgIWlzU2V0KGV4cGVjdGF0aW9uT2JqKSB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbE9iai5zaXplICE9PSBleHBlY3RhdGlvbk9iai5zaXplXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpc1N1YnNldChhY3R1YWxPYmosIGV4cGVjdGF0aW9uT2JqLCBkZWVwRXF1YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWFwKGFjdHVhbE9iaikgfHwgaXNNYXAoZXhwZWN0YXRpb25PYmopKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWlzTWFwKGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgICAgICAhaXNNYXAoZXhwZWN0YXRpb25PYmopIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsT2JqLnNpemUgIT09IGV4cGVjdGF0aW9uT2JqLnNpemVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1hcHNEZWVwbHlFcXVhbCA9IHRydWU7XG4gICAgICAgICAgICBtYXBGb3JFYWNoKGFjdHVhbE9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBtYXBzRGVlcGx5RXF1YWwgPVxuICAgICAgICAgICAgICAgICAgICBtYXBzRGVlcGx5RXF1YWwgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVlcEVxdWFsQ3ljbGljKHZhbHVlLCBleHBlY3RhdGlvbk9iai5nZXQoa2V5KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcHNEZWVwbHlFcXVhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGpRdWVyeSBvYmplY3RzIGhhdmUgaXRlcmF0aW9uIHByb3RvY29sc1xuICAgICAgICAvLyBzZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHNcbiAgICAgICAgLy8gQnV0LCB0aGV5IGRvbid0IHdvcmsgd2VsbCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBjb25jZXJuaW5nIGl0ZXJhYmxlcyBiZWxvdyxcbiAgICAgICAgLy8gc28gd2Ugd2lsbCBkZXRlY3QgdGhlbSBhbmQgdXNlIGpRdWVyeSdzIG93biBlcXVhbGl0eSBmdW5jdGlvblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0aGlzIGNhbiBvbmx5IGJlIHRlc3RlZCBpbiB0aGUgYHRlc3QtaGVhZGxlc3NgIHNjcmlwdCAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhY3R1YWxPYmouY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFjdHVhbE9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSBcImpRdWVyeVwiICYmXG4gICAgICAgICAgICB0eXBlb2YgYWN0dWFsT2JqLmlzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsT2JqLmlzKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc0FjdHVhbE5vbkFycmF5SXRlcmFibGUgPVxuICAgICAgICAgICAgaXNJdGVyYWJsZShhY3R1YWxPYmopICYmXG4gICAgICAgICAgICAhaXNBcnJheVR5cGUoYWN0dWFsT2JqKSAmJlxuICAgICAgICAgICAgIWlzQXJndW1lbnRzKGFjdHVhbE9iaik7XG4gICAgICAgIHZhciBpc0V4cGVjdGF0aW9uTm9uQXJyYXlJdGVyYWJsZSA9XG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGV4cGVjdGF0aW9uT2JqKSAmJlxuICAgICAgICAgICAgIWlzQXJyYXlUeXBlKGV4cGVjdGF0aW9uT2JqKSAmJlxuICAgICAgICAgICAgIWlzQXJndW1lbnRzKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgaWYgKGlzQWN0dWFsTm9uQXJyYXlJdGVyYWJsZSB8fCBpc0V4cGVjdGF0aW9uTm9uQXJyYXlJdGVyYWJsZSkge1xuICAgICAgICAgICAgdmFyIGFjdHVhbEFycmF5ID0gQXJyYXkuZnJvbShhY3R1YWxPYmopO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9uQXJyYXkgPSBBcnJheS5mcm9tKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgICAgIGlmIChhY3R1YWxBcnJheS5sZW5ndGggIT09IGV4cGVjdGF0aW9uQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYXJyYXlEZWVwbHlFcXVhbHMgPSB0cnVlO1xuICAgICAgICAgICAgZXZlcnkoYWN0dWFsQXJyYXksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheURlZXBseUVxdWFscyA9XG4gICAgICAgICAgICAgICAgICAgIGFycmF5RGVlcGx5RXF1YWxzICYmXG4gICAgICAgICAgICAgICAgICAgIGRlZXBFcXVhbEN5Y2xpYyhhY3R1YWxBcnJheVtrZXldLCBleHBlY3RhdGlvbkFycmF5W2tleV0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheURlZXBseUVxdWFscztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVyeShleHBlY3RhdGlvbktleXNBbmRTeW1ib2xzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5KGFjdHVhbE9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGFjdHVhbFZhbHVlID0gYWN0dWFsT2JqW2tleV07XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25WYWx1ZSA9IGV4cGVjdGF0aW9uT2JqW2tleV07XG4gICAgICAgICAgICB2YXIgYWN0dWFsT2JqZWN0ID0gaXNPYmplY3QoYWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9uT2JqZWN0ID0gaXNPYmplY3QoZXhwZWN0YXRpb25WYWx1ZSk7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmVzLCBpZiB0aGUgb2JqZWN0cyB3ZXJlIGFscmVhZHkgdmlzaXRlZFxuICAgICAgICAgICAgLy8gKGl0J3MgZmFzdGVyIHRvIGNoZWNrIGZvciBpc09iamVjdCBmaXJzdCwgdGhhbiB0b1xuICAgICAgICAgICAgLy8gZ2V0IC0xIGZyb20gZ2V0SW5kZXggZm9yIG5vbiBvYmplY3RzKVxuICAgICAgICAgICAgdmFyIGFjdHVhbEluZGV4ID0gYWN0dWFsT2JqZWN0XG4gICAgICAgICAgICAgICAgPyBpbmRleE9mKGFjdHVhbE9iamVjdHMsIGFjdHVhbFZhbHVlKVxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25JbmRleCA9IGV4cGVjdGF0aW9uT2JqZWN0XG4gICAgICAgICAgICAgICAgPyBpbmRleE9mKGV4cGVjdGF0aW9uT2JqZWN0cywgZXhwZWN0YXRpb25WYWx1ZSlcbiAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lcyB0aGUgbmV3IHBhdGhzIG9mIHRoZSBvYmplY3RzXG4gICAgICAgICAgICAvLyAtIGZvciBub24gY3ljbGljIG9iamVjdHMgdGhlIGN1cnJlbnQgcGF0aCB3aWxsIGJlIGV4dGVuZGVkXG4gICAgICAgICAgICAvLyAgIGJ5IGN1cnJlbnQgcHJvcGVydHkgbmFtZVxuICAgICAgICAgICAgLy8gLSBmb3IgY3ljbGljIG9iamVjdHMgdGhlIHN0b3JlZCBwYXRoIGlzIHRha2VuXG4gICAgICAgICAgICB2YXIgbmV3QWN0dWFsUGF0aCA9XG4gICAgICAgICAgICAgICAgYWN0dWFsSW5kZXggIT09IC0xXG4gICAgICAgICAgICAgICAgICAgID8gYWN0dWFsUGF0aHNbYWN0dWFsSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgIDogYCR7YWN0dWFsUGF0aH1bJHtKU09OLnN0cmluZ2lmeShrZXkpfV1gO1xuICAgICAgICAgICAgdmFyIG5ld0V4cGVjdGF0aW9uUGF0aCA9XG4gICAgICAgICAgICAgICAgZXhwZWN0YXRpb25JbmRleCAhPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgPyBleHBlY3RhdGlvblBhdGhzW2V4cGVjdGF0aW9uSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZXhwZWN0YXRpb25QYXRofVske0pTT04uc3RyaW5naWZ5KGtleSl9XWA7XG4gICAgICAgICAgICB2YXIgY29tYmluZWRQYXRoID0gbmV3QWN0dWFsUGF0aCArIG5ld0V4cGVjdGF0aW9uUGF0aDtcblxuICAgICAgICAgICAgLy8gc3RvcCByZWN1cnNpb24gaWYgY3VycmVudCBvYmplY3RzIGFyZSBhbHJlYWR5IGNvbXBhcmVkXG4gICAgICAgICAgICBpZiAoY29tcGFyZWRbY29tYmluZWRQYXRoXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1lbWJlciB0aGUgY3VycmVudCBvYmplY3RzIGFuZCB0aGVpciBwYXRoc1xuICAgICAgICAgICAgaWYgKGFjdHVhbEluZGV4ID09PSAtMSAmJiBhY3R1YWxPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBwdXNoKGFjdHVhbE9iamVjdHMsIGFjdHVhbFZhbHVlKTtcbiAgICAgICAgICAgICAgICBwdXNoKGFjdHVhbFBhdGhzLCBuZXdBY3R1YWxQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHBlY3RhdGlvbkluZGV4ID09PSAtMSAmJiBleHBlY3RhdGlvbk9iamVjdCkge1xuICAgICAgICAgICAgICAgIHB1c2goZXhwZWN0YXRpb25PYmplY3RzLCBleHBlY3RhdGlvblZhbHVlKTtcbiAgICAgICAgICAgICAgICBwdXNoKGV4cGVjdGF0aW9uUGF0aHMsIG5ld0V4cGVjdGF0aW9uUGF0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgb2JqZWN0cyBhcmUgYWxyZWFkeSBjb21wYXJlZFxuICAgICAgICAgICAgaWYgKGFjdHVhbE9iamVjdCAmJiBleHBlY3RhdGlvbk9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbXBhcmVkW2NvbWJpbmVkUGF0aF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbmQgb2YgY3ljbGljIGxvZ2ljXG5cbiAgICAgICAgICAgIC8vIG5laXRoZXIgYWN0dWFsVmFsdWUgbm9yIGV4cGVjdGF0aW9uVmFsdWUgaXMgYSBjeWNsZVxuICAgICAgICAgICAgLy8gY29udGludWUgd2l0aCBuZXh0IGxldmVsXG4gICAgICAgICAgICByZXR1cm4gZGVlcEVxdWFsKFxuICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uVmFsdWUsXG4gICAgICAgICAgICAgICAgbmV3QWN0dWFsUGF0aCxcbiAgICAgICAgICAgICAgICBuZXdFeHBlY3RhdGlvblBhdGgsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KShhY3R1YWwsIGV4cGVjdGF0aW9uLCBcIiQxXCIsIFwiJDJcIik7XG59XG5cbmRlZXBFcXVhbEN5Y2xpYy51c2UgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBFcXVhbEN5Y2xpYyhhLCBiLCBtYXRjaCk7XG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcEVxdWFsQ3ljbGljO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0LnRvU3RyaW5nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGludGVybmFsIGBDbGFzc2AgYnkgY2FsbGluZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2BcbiAqIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlIGFzIGB0aGlzYC4gUmV0dXJuIHZhbHVlIGlzIGEgYFN0cmluZ2AsIG5hbWluZyB0aGVcbiAqIGludGVybmFsIGNsYXNzLCBlLmcuIFwiQXJyYXlcIlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZSAtIEFueSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ30gLSBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYENsYXNzYCBvZiBgdmFsdWVgXG4gKi9cbmZ1bmN0aW9uIGdldENsYXNzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS5zcGxpdCgvWyBcXF1dLylbMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0Q2xhc3M7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzTmFOID0gcmVxdWlyZShcIi4vaXMtbmFuXCIpO1xudmFyIGlzTmVnWmVybyA9IHJlcXVpcmUoXCIuL2lzLW5lZy16ZXJvXCIpO1xuXG4vKipcbiAqIFN0cmljdCBlcXVhbGl0eSBjaGVjayBhY2NvcmRpbmcgdG8gRWNtYVNjcmlwdCBIYXJtb255J3MgYGVnYWxgLlxuICpcbiAqICoqRnJvbSB0aGUgSGFybW9ueSB3aWtpOioqXG4gKiA+IEFuIGBlZ2FsYCBmdW5jdGlvbiBzaW1wbHkgbWFrZXMgYXZhaWxhYmxlIHRoZSBpbnRlcm5hbCBgU2FtZVZhbHVlYCBmdW5jdGlvblxuICogPiBmcm9tIHNlY3Rpb24gOS4xMiBvZiB0aGUgRVM1IHNwZWMuIElmIHR3byB2YWx1ZXMgYXJlIGVnYWwsIHRoZW4gdGhleSBhcmUgbm90XG4gKiA+IG9ic2VydmFibHkgZGlzdGluZ3Vpc2hhYmxlLlxuICpcbiAqIGBpZGVudGljYWxgIHJldHVybnMgYHRydWVgIHdoZW4gYD09PWAgaXMgYHRydWVgLCBleGNlcHQgZm9yIGAtMGAgYW5kXG4gKiBgKzBgLCB3aGVyZSBpdCByZXR1cm5zIGBmYWxzZWAuIEFkZGl0aW9uYWxseSwgaXQgcmV0dXJucyBgdHJ1ZWAgd2hlblxuICogYE5hTmAgaXMgY29tcGFyZWQgdG8gaXRzZWxmLlxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlkZW50aWNhbFxuICogQHBhcmFtIHsqfSBvYmoxIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0geyp9IG9iajIgVGhlIHNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgb2JqZWN0cyBhcmUgKmVnYWwqLCBgZmFsc2VgIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBpZGVudGljYWwob2JqMSwgb2JqMikge1xuICAgIGlmIChvYmoxID09PSBvYmoyIHx8IChpc05hTihvYmoxKSAmJiBpc05hTihvYmoyKSkpIHtcbiAgICAgICAgcmV0dXJuIG9iajEgIT09IDAgfHwgaXNOZWdaZXJvKG9iajEpID09PSBpc05lZ1plcm8ob2JqMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aWNhbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2V0Q2xhc3MgPSByZXF1aXJlKFwiLi9nZXQtY2xhc3NcIik7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNBcmd1bWVudHNcbiAqIEBwYXJhbSAgeyp9ICBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gICAgcmV0dXJuIGdldENsYXNzKG9iamVjdCkgPT09IFwiQXJndW1lbnRzXCI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbnZhciBpbmRleE9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5pbmRleE9mO1xudmFyIG1hcCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkubWFwO1xudmFyIEFSUkFZX1RZUEVTID0gcmVxdWlyZShcIi4vYXJyYXktdHlwZXNcIik7XG52YXIgdHlwZSA9IHJlcXVpcmUoXCJ0eXBlLWRldGVjdFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGFuIGFycmF5IHR5cGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQHBhcmFtICB7Kn0gIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGFuIGFycmF5IHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiBpbmRleE9mKG1hcChBUlJBWV9UWVBFUywgZnVuY3Rpb25OYW1lKSwgdHlwZShvYmplY3QpKSAhPT0gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheVR5cGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtEYXRlfSAgdmFsdWUgVGhlIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSAgICAgYHRydWVgIHdoZW4gYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNEYXRlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkaXYgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGEgRE9NIGVsZW1lbnQgbm9kZS5cbiAqXG4gKiBVbmxpa2UgVW5kZXJzY29yZS5qcy9sb2Rhc2gsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYGZhbHNlYCBpZiBgb2JqZWN0YFxuICogaXMgYW4gKmVsZW1lbnQtbGlrZSogb2JqZWN0LCBpLmUuIGEgcmVndWxhciBvYmplY3Qgd2l0aCBhIGBub2RlVHlwZWBcbiAqIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIHZhbHVlIGAxYC5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pc0VsZW1lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgZm9yIERPTSBlbGVtZW50IG5vZGVzXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCB8fCBvYmplY3Qubm9kZVR5cGUgIT09IDEgfHwgIWRpdikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIG9iamVjdC5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICBvYmplY3QucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbGVtZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgYXJndW1lbnQgaXMgYW4gaXRlcmFibGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNJdGVyYWJsZVxuICogQHBhcmFtICB7Kn0gIHZhbCAtIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGl0ZXJhYmxlLCBgZmFsc2VgIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbCkge1xuICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkXG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHZhbFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYWJsZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYHZhbHVlYCBpcyBhIE1hcFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIHdoZW4gYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBgTWFwYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBNYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBDb21wYXJlcyBhIGB2YWx1ZWAgdG8gYE5hTmBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYE5hTmBcbiAqL1xuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICAvLyBVbmxpa2UgZ2xvYmFsIGBpc05hTmAsIHRoaXMgZnVuY3Rpb24gYXZvaWRzIHR5cGUgY29lcmNpb25cbiAgICAvLyBgdHlwZW9mYCBjaGVjayBhdm9pZHMgSUUgaG9zdCBvYmplY3QgaXNzdWVzLCBoYXQgdGlwIHRvXG4gICAgLy8gbG9kYXNoXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOYU47XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYC0wYFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlzTmVnWmVyb1xuICogQHBhcmFtIHsqfSB2YWx1ZSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYC0wYFxuICovXG5mdW5jdGlvbiBpc05lZ1plcm8odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlID09PSAtSW5maW5pdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOZWdaZXJvO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgdmFsdWUgaXMgYSByZWd1bGFyIE9iamVjdCBhbmQgbm90IGEgc3BlY2lhbGl6ZWQgT2JqZWN0XG4gKlxuICogVGhpcyBoZWxwcyBzcGVlZCB1cCBkZWVwRXF1YWwgY3ljbGljIGNoZWNrc1xuICpcbiAqIFRoZSBwcmVtaXNlIGlzIHRoYXQgb25seSBPYmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIHZpc2l0ZWQgYXJyYXkuXG4gKiBTbyBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhlXG4gKiBleHBlbnNpdmUgb3BlcmF0aW9uIG9mIHNlYXJjaGluZyBmb3IgdGhlIHZhbHVlIGluIHRoZSB0aGUgYXJyYXkgb2YgYWxyZWFkeVxuICogdmlzaXRlZCBvYmplY3RzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge29iamVjdH0gICB2YWx1ZSBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSAgICAgICBgdHJ1ZWAgd2hlbiB0aGUgb2JqZWN0IGlzIGEgbm9uLXNwZWNpYWxpc2VkIG9iamVjdFxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAvLyBub25lIG9mIHRoZXNlIGFyZSBjb2xsZWN0aW9uIG9iamVjdHMsIHNvIHdlIGNhbiByZXR1cm4gZmFsc2VcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pICYmXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpICYmXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpICYmXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApICYmXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIFNldCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pc1NldFxuICogQHBhcmFtICB7Kn0gIHZhbCAtIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIFNldCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaXNTZXQodmFsKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbCBpbnN0YW5jZW9mIFNldCkgfHwgZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLnNldC5mb3JFYWNoO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYHMxYCBpcyBhIHN1YnNldCBvZiBgczJgLCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtBcnJheXxTZXR9ICBzMSAgICAgIFRoZSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSAge0FycmF5fFNldH0gIHMyICAgICAgVGhlIGNvbnRhaW5pbmcgdmFsdWVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgY29tcGFyZSBBIGNvbXBhcmlzb24gZnVuY3Rpb24sIHNob3VsZCByZXR1cm4gYHRydWVgIHdoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1YWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGBzMWAgaXMgYSBzdWJzZXQgb2YgYHMyYCwgYGZhbHNlYGAgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGlzU3Vic2V0KHMxLCBzMiwgY29tcGFyZSkge1xuICAgIHZhciBhbGxDb250YWluZWQgPSB0cnVlO1xuICAgIGZvckVhY2goczEsIGZ1bmN0aW9uICh2MSkge1xuICAgICAgICB2YXIgaW5jbHVkZXMgPSBmYWxzZTtcbiAgICAgICAgZm9yRWFjaChzMiwgZnVuY3Rpb24gKHYyKSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyZSh2MiwgdjEpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYWxsQ29udGFpbmVkID0gYWxsQ29udGFpbmVkICYmIGluY2x1ZGVzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbENvbnRhaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N1YnNldDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc2xpY2UgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLnN0cmluZy5zbGljZTtcbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGFuIGl0ZXJhYmxlIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7b2JqZWN0fSBvYmogVGhlIGl0ZXJhYmxlIG9iamVjdCB0byBzdHJpbmdpZnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICBBIHN0cmluZyByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBpdGVyYWJsZVRvU3RyaW5nKG9iaikge1xuICAgIGlmICh0eXBlT2Yob2JqKSA9PT0gXCJtYXBcIikge1xuICAgICAgICByZXR1cm4gbWFwVG9TdHJpbmcob2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2VuZXJpY0l0ZXJhYmxlVG9TdHJpbmcob2JqKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgTWFwXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtNYXB9IG1hcCAgICBUaGUgbWFwIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMge3N0cmluZ30gICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIG1hcFRvU3RyaW5nKG1hcCkge1xuICAgIHZhciByZXByZXNlbnRhdGlvbiA9IFwiXCI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICByZXByZXNlbnRhdGlvbiArPSBgWyR7c3RyaW5naWZ5KGtleSl9LCR7c3RyaW5naWZ5KHZhbHVlKX1dLGA7XG4gICAgfSk7XG5cbiAgICByZXByZXNlbnRhdGlvbiA9IHNsaWNlKHJlcHJlc2VudGF0aW9uLCAwLCAtMSk7XG4gICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbmF0aW9uIGZvciBhbiBpdGVyYWJsZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7b2JqZWN0fSBpdGVyYWJsZSBUaGUgaXRlcmFibGUgdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICBBIHN0cmluZyByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBnZW5lcmljSXRlcmFibGVUb1N0cmluZyhpdGVyYWJsZSkge1xuICAgIHZhciByZXByZXNlbnRhdGlvbiA9IFwiXCI7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICBpdGVyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXByZXNlbnRhdGlvbiArPSBgJHtzdHJpbmdpZnkodmFsdWUpfSxgO1xuICAgIH0pO1xuXG4gICAgcmVwcmVzZW50YXRpb24gPSBzbGljZShyZXByZXNlbnRhdGlvbiwgMCwgLTEpO1xuICAgIHJldHVybiByZXByZXNlbnRhdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXNzZWQgYGl0ZW1gXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge29iamVjdH0gaXRlbSBUaGUgaXRlbSB0byBzdHJpbmdpZnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGl0ZW1gXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeShpdGVtKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gYCcke2l0ZW19J2AgOiB2YWx1ZVRvU3RyaW5nKGl0ZW0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhYmxlVG9TdHJpbmc7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLnN0cmluZy5pbmRleE9mO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmZvckVhY2g7XG52YXIgdHlwZSA9IHJlcXVpcmUoXCJ0eXBlLWRldGVjdFwiKTtcblxudmFyIGVuZ2luZUNhbkNvbXBhcmVNYXBzID0gdHlwZW9mIEFycmF5LmZyb20gPT09IFwiZnVuY3Rpb25cIjtcbnZhciBkZWVwRXF1YWwgPSByZXF1aXJlKFwiLi9kZWVwLWVxdWFsXCIpLnVzZShtYXRjaCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbnZhciBpc0FycmF5VHlwZSA9IHJlcXVpcmUoXCIuL2lzLWFycmF5LXR5cGVcIik7XG52YXIgaXNTdWJzZXQgPSByZXF1aXJlKFwiLi9pcy1zdWJzZXRcIik7XG52YXIgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyXCIpO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIGBhcnJheWAgY29udGFpbnMgYWxsIG9mIGBzdWJzZXRgIGFzIGRlZmluZWQgYnkgdGhlIGBjb21wYXJlYFxuICogYXJndW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyYXkgICBBbiBhcnJheSB0byBzZWFyY2ggZm9yIGEgc3Vic2V0XG4gKiBAcGFyYW0gIHtBcnJheX0gc3Vic2V0ICBUaGUgc3Vic2V0IHRvIGZpbmQgaW4gdGhlIGFycmF5XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGFyZSBBIGNvbXBhcmlzb24gZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyYXksIHN1YnNldCwgY29tcGFyZSkge1xuICAgIGlmIChzdWJzZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgaSwgbCwgaiwgaztcbiAgICBmb3IgKGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgIGlmIChjb21wYXJlKGFycmF5W2ldLCBzdWJzZXRbMF0pKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwLCBrID0gc3Vic2V0Lmxlbmd0aDsgaiA8IGs7ICsraikge1xuICAgICAgICAgICAgICAgIGlmIChpICsgaiA+PSBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGFycmF5W2kgKyBqXSwgc3Vic2V0W2pdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKipcbiAqIE1hdGNoZXMgYW4gb2JqZWN0IHdpdGggYSBtYXRjaGVyIChvciB2YWx1ZSlcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5tYXRjaFxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IGNhbmRpZGF0ZSB0byBtYXRjaFxuICogQHBhcmFtIHtvYmplY3R9IG1hdGNoZXJPclZhbHVlIEEgbWF0Y2hlciBvciB2YWx1ZSB0byBtYXRjaCBhZ2FpbnN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIGBvYmplY3RgIG1hdGNoZXMgYG1hdGNoZXJPclZhbHVlYFxuICovXG5mdW5jdGlvbiBtYXRjaChvYmplY3QsIG1hdGNoZXJPclZhbHVlKSB7XG4gICAgaWYgKG1hdGNoZXJPclZhbHVlICYmIHR5cGVvZiBtYXRjaGVyT3JWYWx1ZS50ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXJPclZhbHVlLnRlc3Qob2JqZWN0KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUobWF0Y2hlck9yVmFsdWUpKSB7XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlck9yVmFsdWUgPT09IG9iamVjdDtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlck9yVmFsdWUob2JqZWN0KSA9PT0gdHJ1ZTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgdmFyIG5vdE51bGwgPSB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiIHx8IEJvb2xlYW4ob2JqZWN0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbm90TnVsbCAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmcob2JqZWN0KS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3JWYWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICkgPj0gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlKG9iamVjdCkgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRUaW1lKCkgPT09IG1hdGNoZXJPclZhbHVlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGJhc2ljYWxseSB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGlzIGNvdmVyZWQgKi9cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDE2QXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJVaW50MzJBcnJheVwiOlxuICAgICAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJGbG9hdDY0QXJyYXlcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaXNBcnJheVR5cGUobWF0Y2hlck9yVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgYXJyYXlDb250YWlucyhvYmplY3QsIG1hdGNoZXJPclZhbHVlLCBtYXRjaClcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGNvdmVyZWQgYnkgYSB0ZXN0LCB0aGF0IGlzIG9ubHkgcnVuIGluIElFLCBidXQgd2UgY29sbGVjdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBpbiBub2RlKi9cbiAgICAgICAgICAgIGlmICghZW5naW5lQ2FuQ29tcGFyZU1hcHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhlIEphdmFTY3JpcHQgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSBhbmQgY2Fubm90IHJlbGlhYmx5IGRvIHZhbHVlIGNvbXBhcmlzb24gb2YgTWFwIGluc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZShvYmplY3QpID09PSBcIk1hcFwiICYmXG4gICAgICAgICAgICAgICAgYXJyYXlDb250YWlucyhcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShvYmplY3QpLFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKG1hdGNoZXJPclZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZShvYmplY3QpKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgIHJldHVybiBpc1N1YnNldChtYXRjaGVyT3JWYWx1ZSwgb2JqZWN0LCBtYXRjaCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChtYXRjaGVyT3JWYWx1ZSAmJiB0eXBlb2YgbWF0Y2hlck9yVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG1hdGNoZXJPclZhbHVlID09PSBvYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3A7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgZm9yIChwcm9wIGluIG1hdGNoZXJPclZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3RbcHJvcF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG9iamVjdC5nZXRBdHRyaWJ1dGUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBvYmplY3QuZ2V0QXR0cmlidXRlKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1hdGNoZXJPclZhbHVlW3Byb3BdID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hdGNoZXJPclZhbHVlW3Byb3BdID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG1hdGNoZXJPclZhbHVlW3Byb3BdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICAgICAgICAgICFkZWVwRXF1YWwodmFsdWUsIG1hdGNoZXJPclZhbHVlW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWF0Y2hlciB3YXMgYW4gdW5rbm93biBvciB1bnN1cHBvcnRlZCB0eXBlXCIpO1xufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbmZvckVhY2goT2JqZWN0LmtleXMoY3JlYXRlTWF0Y2hlciksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBtYXRjaFtrZXldID0gY3JlYXRlTWF0Y2hlcltrZXldO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2g7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBAbW9kdWxlIHNhbXNhbVxuICovXG52YXIgaWRlbnRpY2FsID0gcmVxdWlyZShcIi4vaWRlbnRpY2FsXCIpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZShcIi4vaXMtYXJndW1lbnRzXCIpO1xudmFyIGlzRWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzLWVsZW1lbnRcIik7XG52YXIgaXNOZWdaZXJvID0gcmVxdWlyZShcIi4vaXMtbmVnLXplcm9cIik7XG52YXIgaXNTZXQgPSByZXF1aXJlKFwiLi9pcy1zZXRcIik7XG52YXIgaXNNYXAgPSByZXF1aXJlKFwiLi9pcy1tYXBcIik7XG52YXIgbWF0Y2ggPSByZXF1aXJlKFwiLi9tYXRjaFwiKTtcbnZhciBkZWVwRXF1YWxDeWNsaWMgPSByZXF1aXJlKFwiLi9kZWVwLWVxdWFsXCIpLnVzZShtYXRjaCk7XG52YXIgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjcmVhdGVNYXRjaGVyOiBjcmVhdGVNYXRjaGVyLFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsQ3ljbGljLFxuICAgIGlkZW50aWNhbDogaWRlbnRpY2FsLFxuICAgIGlzQXJndW1lbnRzOiBpc0FyZ3VtZW50cyxcbiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICBpc01hcDogaXNNYXAsXG4gICAgaXNOZWdaZXJvOiBpc05lZ1plcm8sXG4gICAgaXNTZXQ6IGlzU2V0LFxuICAgIG1hdGNoOiBtYXRjaCxcbn07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC50eXBlRGV0ZWN0ID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7XG4gICAgdmFyIGdsb2JhbE9iamVjdCA9IChmdW5jdGlvbiAoT2JqKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmosICd0eXBlRGV0ZWN0R2xvYmFsT2JqZWN0Jywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGdsb2JhbCA9IHR5cGVEZXRlY3RHbG9iYWxPYmplY3Q7XG4gICAgICAgIGRlbGV0ZSBPYmoudHlwZURldGVjdEdsb2JhbE9iamVjdDtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9KShPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgc3ltYm9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBzZXRFeGlzdHMgPSB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgd2Vha01hcEV4aXN0cyA9IHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgd2Vha1NldEV4aXN0cyA9IHR5cGVvZiBXZWFrU2V0ICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgZGF0YVZpZXdFeGlzdHMgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBzeW1ib2xJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEV4aXN0cyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIHNldEVudHJpZXNFeGlzdHMgPSBzZXRFeGlzdHMgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgbWFwRW50cmllc0V4aXN0cyA9IG1hcEV4aXN0cyAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xuICAgIHZhciBzZXRJdGVyYXRvclByb3RvdHlwZSA9IHNldEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBTZXQoKS5lbnRyaWVzKCkpO1xuICAgIHZhciBtYXBJdGVyYXRvclByb3RvdHlwZSA9IG1hcEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBNYXAoKS5lbnRyaWVzKCkpO1xuICAgIHZhciBhcnJheUl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sSXRlcmF0b3JFeGlzdHMgJiYgdHlwZW9mIEFycmF5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuICAgIHZhciBhcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICB2YXIgc3RyaW5nSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xuICAgIHZhciBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSA9IHN0cmluZ0l0ZXJhdG9yRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZignJ1tTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIHZhciB0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCA9IDg7XG4gICAgdmFyIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCA9IC0xO1xuICAgIGZ1bmN0aW9uIHR5cGVEZXRlY3Qob2JqKSB7XG4gICAgICAgIHZhciB0eXBlb2ZPYmogPSB0eXBlb2Ygb2JqO1xuICAgICAgICBpZiAodHlwZW9mT2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZk9iajtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogPT09IGdsb2JhbE9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuICdnbG9iYWwnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAgICAgICAgIChzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyA9PT0gZmFsc2UgfHwgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gb2JqKSkpIHtcbiAgICAgICAgICAgIHJldHVybiAnQXJyYXknO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmxvY2F0aW9uID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09ICdvYmplY3QnICYmIG9iaiA9PT0gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ01pbWVUeXBlQXJyYXknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqID09PSB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdQbHVnaW5BcnJheSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgICAgb2JqIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnQkxPQ0tRVU9URScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIVE1MUXVvdGVFbGVtZW50JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnVEgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nVGFnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICAgICAgaWYgKG9ialByb3RvdHlwZSA9PT0gUmVnRXhwLnByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdSZWdFeHAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0RhdGUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnUHJvbWlzZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnU2V0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gTWFwLnByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdNYXAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnV2Vha1NldCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdXZWFrTWFwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVZpZXdFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBEYXRhVmlldy5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBtYXBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdNYXAgSXRlcmF0b3InO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdTZXQgSXRlcmF0b3InO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheUl0ZXJhdG9yRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gYXJyYXlJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuICdBcnJheSBJdGVyYXRvcic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmluZ0l0ZXJhdG9yRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqUHJvdG90eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJ09iamVjdCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdFxuICAgICAgICAgICAgLnByb3RvdHlwZVxuICAgICAgICAgICAgLnRvU3RyaW5nXG4gICAgICAgICAgICAuY2FsbChvYmopXG4gICAgICAgICAgICAuc2xpY2UodG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGgsIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVEZXRlY3Q7XG5cbn0pKTtcbiIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxudmFyIGVuY29kaW5nID0gcmVxdWlyZShcIi4vbGliL2VuY29kaW5nLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVGV4dEVuY29kZXI6IGVuY29kaW5nLlRleHRFbmNvZGVyLFxuICBUZXh0RGVjb2RlcjogZW5jb2RpbmcuVGV4dERlY29kZXIsXG59O1xuIiwiKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiAgfVxuXG4gIGdsb2JhbFtcImVuY29kaW5nLWluZGV4ZXNcIl0gPVxue1xuICBcImJpZzVcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxNzAwMDAsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0MDAwLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMjAwMCwyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEsMjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQyMjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwxMzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEzODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEzNzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywzNTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMzMDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcsMTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAxLDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4NiwxNTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgyMDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQyODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDksMjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQsMTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAzOTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEyMDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAsMTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcsMTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwxNjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQsMTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQsMTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIsMTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwxOTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2NzkzLDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIxNTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAsMjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUyNywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYzNTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyMDAwLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMTAwMCwyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzMDAwMCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyMzAwMCwyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMjAwMCwzMjAwOSwzMjAwNywzMjAwNCwzMjAwNiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwzMzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwzMzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwzMzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMzMSwzNTk5OCwzNjAwMCwzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNjAwMCwyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzNzAwMCwzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwzODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwzOTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwzOTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwyODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0NiwyOTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4NiwzMDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3NiwzNTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwzNTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwzNjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgzMiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOTAwMCwzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzODAwMCwzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyODAwMCwyODA1NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywyODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwyODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwyODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQzNCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwyOTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwzMDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwzMDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2NiwzMTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2NywzMTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5NiwzMTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAxNCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAxNSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYwMywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwzMzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwzMzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwzMzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwzNDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwzNDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwzNDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIxNCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwzNzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5MiwzODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5MiwyMDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUwMSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwyMTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwyMTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywyMTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUwOSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwyMzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwyMzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywyMzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEyMSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwyNDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3NiwyNDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2NiwyNDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUxNSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywyNTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1NiwyNTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwyNjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0MywyNzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwyNzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3NiwyODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEyNSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwyODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0NywyODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwyOTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcwMywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwzMDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwzMDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5MywzMDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIyNiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUyNCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5NiwzMTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwzMjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2MiwzMjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcxMSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgzOSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwzMzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwzMzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwzMzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwzNDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4NiwzNDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwzNDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAwNSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5NywzNzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywzNzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwzNzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUxMywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYzNSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwyMDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwyMTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwyMTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkwMiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2MiwyMzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwyMzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwyMzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUwNSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2MiwyMzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4NiwyNDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4MiwyNDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUzOSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwyNTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0NywyNTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2MiwyNTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIyNSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgzNSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwyNjg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwyNjg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwyNjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIzMSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwyODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwyODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1NiwyODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwyOTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwyOTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwyOTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUzNCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwzMDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwzMDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwzMTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkwNSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEwNiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwzMjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0NywzMjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywzMzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgxMCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzczNiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywzMzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwzMzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwzMzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUzMSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkwMSwzNTAwMiwzNTAzMSwzNTAwMSwzNTAwMCwzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyNzAwMCwyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNDAwMCwzMzk0OSwzMzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5NiwzMzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwzMzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYwNiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYwNCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYwNSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2MywzNTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwzNTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwzNTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwzNzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwzNzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwzNzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUyNSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUxMCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUzMywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwzODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwzOTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2MywzOTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4NiwyMjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwyMjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwyMjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMxMSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwyNDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwyNTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwyNDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwyNzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwyNzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwyNzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwyODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwyODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwyODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEwNiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwyOTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwyOTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwyOTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkwNywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkxNSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwzMTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3MywzMTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0NywzMjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2MywzNDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwzNDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1NiwzNDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAzOCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwzNDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwzNDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1MywzNDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIzNSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwzNTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwzNTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3MiwzNjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwzNzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwzNzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwzNzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYwOCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwzODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2MywzODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwzODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwyMDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEyNSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcyOCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcyNiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwyMzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4MiwyMzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2NywyNDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNTAwMCwyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNDAwMCwyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0MDAwMCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sXG4gIFwiZXVjLWtyXCI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2MDAwLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4MDAwLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAwLDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQyLDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEyLDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIxLDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4MzgzLDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4MzkyLDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAxLDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQyLDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUwLDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAwLDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcyLDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4NjkwLDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAzLDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4NzcwLDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQwLDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAzLDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUyLDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5MDAwLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDUwMDAwLDUwMDAxLDUwMDAyLDUwMDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUwMDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUwMDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUwMDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUwMDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkxLDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUwMTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUwMTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUwMTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYyLDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcyLDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUwMTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUwMTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUwMTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEzLDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIxLDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUwMjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUwMjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUwMjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUwMzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUwMzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUwMzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMzLDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUwMzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUwMzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkxLDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUwNDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUwNDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUwNDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUzLDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYxLDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUwNDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUwNDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUwNDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUwNTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUwNTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUwNTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUwNjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUwNjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgzLDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUwNzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUwNzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUwNzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzkyLDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUwODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUwODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUwODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUwODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUwOTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIzLDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMzLDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUwOTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUwOTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUwOTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkwLDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxMDAwLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDUwMDAsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDcwMDAsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcwNDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcxMDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcxMTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAsNDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYsNDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcsNDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDczMjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDczNDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDczOTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIsNTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgsNTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYsNTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUsNTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUsNTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAsNDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEsNDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYsNDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3MjksNDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEsNDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQsNDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4MzgsNTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQsNTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEsNTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMsNTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAsNDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAsNDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgwNDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAsNDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMsNDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUsNDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgxOTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgyMDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgyNjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMsNTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEsNTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5MjksNTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMsNTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEsNTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAsNTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQwMDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgyOTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgzMDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQsNDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMsNDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcsNDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgsNDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUsNDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAsNTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQwMzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQwNDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcsNTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgsNTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcsNTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQwOTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQxMDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQxMTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIsNDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQsNDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQsNDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAsNDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcsNDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQsNDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkzNTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkzNzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQxMjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIsNTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAsNTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIsNTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQxNzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQxODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUsNTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEsNTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIsNTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQsNDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgsNDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1MjgsNDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYsNDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMsNTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAsNTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQyNjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQyNzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgsNTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYsNTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQzMTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQzMTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQzMjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIsNDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEsNDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEsNDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgsNTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUsNTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAsNTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQzMjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQzMzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQzNDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgsNTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYsNTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQzODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQzOTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcsNTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQsNTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYsNTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDksNTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAsNTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYsNTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQsNTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAsNTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgsNTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODksNTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgsNTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODksNTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQsNTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3MjgsNTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQsNTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAsNTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAsNTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMsNTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1NjksNTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYsNTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUsNTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYsNTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQsNTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEwMDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEwMjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEwMzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzksNTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODksNTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUsNTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTExNDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTExNzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEyMTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDksNTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYsNTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIsNTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgsNTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUsNTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEyMTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEyMzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEyNjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMsNTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgsNTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYsNTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMsNTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgsNTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQsNTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcsNTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUsNTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAsNTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUsNTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAsNTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTIwMDAsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTUwMDAsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTMwMDAsNTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQsNTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgsNTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMxMzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMyMTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMyNDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcsNTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUsNTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYsNTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUwOTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUxMDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUxMTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIsNTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEsNTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUxNzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUxNzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMzMzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0MjksNTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgsNTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0NjgsNTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAsNTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3NjcsNTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAsNTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUxOTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUyMDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYsNTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUsNTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMsNTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTQwMDAsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMjAwMCwzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzNzAwMCwxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwyODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywzOTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwzNTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywyMDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5NiwzMjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4MiwyMTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwyNjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwyOTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMwMiw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwyNzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwzMzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwyMjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwyMTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwyNjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwzMjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQyMCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3NiwyMTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1NiwyNjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0MiwzMDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwzNjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwyMDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwyNTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwyNDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwyNDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwzNDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcyMSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwyMTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3NiwzNjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0MywyNDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwzNTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODkyNSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIzOCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNjAwMCwzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNjAwMCwyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMTAwMCwyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMzMCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQyNywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODkyOCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwyNzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcxMSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5MywyOTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwzOTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwzNDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwyMzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywyNTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5MiwzOTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwzNjc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwyMzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwzNDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywzODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwyOTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywzNDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywyMTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwyMzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2MCw2Mzk0MiwzODQ5OCwzOTAwMCw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzMDAwMCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQzOSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAxOSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQzNCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwxOTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3NiwyMjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3MywyNTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywyNTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwyNjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwyOTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwyOTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYxOCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwyNjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwyODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwzMjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkwOSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgwMywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4NywyNzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywyODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwyMDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwyODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwzMjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMzNywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwzODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwyNDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4NywzNDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwyMDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0NiwyNzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwzNjk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAxMywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwyMzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwyNjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwzMTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwyNDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1NywyNTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAyOSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMwNywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQzMywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwyODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwzNTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwzMDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NDAwMCwyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyNzAwMCwyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJnYjE4MDMwXCI6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDIwMDAwLDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIwMDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIwMDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkzLDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAxLDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIwMTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIwMTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIwMTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIwMjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIwMjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMxLDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIwMzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIwMzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIwNDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUwLDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIwNDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIwNDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMwLDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIwNTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkzLDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAxLDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIwNjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIwNjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcyLDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIwNjk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIwNzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMyLDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIwNzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIwNzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIwODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIwODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIwODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAyLDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEwLDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIwOTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIwOTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIzLDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIxMDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIxMDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTkyLDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAxLDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjExLDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIxMjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIxMjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIxMjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIxMzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIxMzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIxMzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzkyLDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAxLDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIxNDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIxNDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDczLDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAzLDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIxNTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIxNTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIxNjg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIxNjk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIxNzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUxLDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcyLDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIxNzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIxODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIxODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQyLDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUwLDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIxODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIxOTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIxOTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIxOTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIyMDAwLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0MDAwLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5MDAwLDI5MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkzLDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEwLDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYwLDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQyLDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMxLDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjExLDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzExLDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIzMCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAxLDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcyMyw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcyOSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODczNiw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEyLDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgzLDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkwLDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMyLDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYxLDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5MDAwLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0MywzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzEwMDAsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjUwMDAsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYwOTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcwODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgsMzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgsNDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgsMjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTksMzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYsMzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAsMzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTksMzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQzODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUsMjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYsMzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgsMjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUzODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEyMjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMsMjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2NjksMzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIsMzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODksMzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzIwMDAsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsMzAwMDAsMjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcsMzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUsMzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIsMzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYsMzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYsMzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAsMzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAxNzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEzNjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEsMzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIsMjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUsMjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgyODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcsMzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTksMzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgsMzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2NjgsMzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2NzcsMzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODksMzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUsMjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTksMzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTksMjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUxMDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgwNTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAsMzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQsMjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIsMjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIsMzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4MzksMzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYsMzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMsMzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgxMTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAzODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAsMzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQsMzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMsMjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcyMzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEwNjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgsMzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQsMzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIsMzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5MzcsMzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAsMzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAsMzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAsMjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQsMjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIsMjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcyNjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQsMzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcsMzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMsMjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzUwMDAsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzYwMDAsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjEwMDAsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYsMjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjksMjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEsMjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYwMTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYwMjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYwMjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMsMzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDksMzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYsMzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYwNzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYwNzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYwODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgsMzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQsMzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEsMjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgsMjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQsMjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcsMjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEyNDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMwNDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQsMzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAsMzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgsMzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYyMTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYyMjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYyMzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMsMzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEsMzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgsMzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYyOTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYzMDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYsMzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgsMzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAsMzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMsMzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYsMzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEsMzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYzMjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYzMzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYzNTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAsMzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcsMzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODksMzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMsMzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUsMzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAsMzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcxNjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEyMDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEsMjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMsMjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQsMjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAsMzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODksMzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgsMzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgsMzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQsMzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIsMzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgsMzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEsMzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIsMzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUsMzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMsMzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcsMzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAsMzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYsMzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMsMzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUsMzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIsMzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYsMzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQsMzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5MjgsMzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAsMzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzQwMDAsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjgwMDAsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzcwMDAsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcsMzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMsMzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMsMzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDksMzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYsMzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjMwMDAsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDAsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjcwMDAsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEsMjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMsMjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTksMjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcyNjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3MjcsMzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3MzgsMzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgzNzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUsMzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEsMzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIsMzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIsMjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAsMjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYxNjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYyMDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAsMzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgsMzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQsMzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkzMjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1NjksMzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUsMzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYsMzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMsMzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2NjcsMzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2NzksMzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgsMzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEsMzI5OTksMzMwMDAsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjYwMDAsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzkwMDAsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAsMzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYsMzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIsMzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAwMzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAwODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEsMzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMsMzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAsMzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgwODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgwOTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgxMDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYsMzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEsMzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQsMzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkwOTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkxMDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkxMTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYsMzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIsMzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEsMzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkxNjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkxNzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgxMjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQsMzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQsMzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUsMzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgyMTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgyMjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgyMzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDksMzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgsMzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMsMzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkxODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkxOTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEsMzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzkyNDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzkyNTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMsMzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTksMzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQsMzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAsNDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYsNDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIsMzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAxODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAxOTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAyMzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgsMzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUsMzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkzNTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkzNjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkzNzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUsMzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEsMzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgsMzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAyNjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAyNjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMsMzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIsMzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAsMzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUwNjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUwOTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUxNzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYsMzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEsMzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMsMzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYsMzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIsMzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0NjksMzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEsMzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUsMzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQsMzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAsMzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAsMzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYsMzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1MjcsMzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUsMzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAsMzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAsMzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2NjksMzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMsMzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYsMzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgsMzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIsMzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYsMzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODksMzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAsMzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIsMzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIsMzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUsMzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMzODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUxNjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQsMzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMsMzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAsMzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYxOTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcxOTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIsMzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4MjgsMzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUsMzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4NzcsMzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMsMzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAsMzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcyNDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcyNTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcyOTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcsMzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQsMzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMsMzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIsMzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIsMzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYsMzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgsMzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQsMzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMsMzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAsMzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4MzcsNDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAwNjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQsNDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEsNDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAsNDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAxMzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5OTgsMzk5OTksNDAwMDAsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNTgwMDAsNTgwMDEsNDAyNTksNDAyNjAsNDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYsNDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMsNDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAyODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAyOTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAzMDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUsNDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEsNDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgsNDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAzNDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgwMDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcsNTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMsNTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAsNTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgwNDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgwNTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgwNTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIsNTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgsNTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUsNTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAzNTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAzNjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAzNzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYsNDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIsNDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTksNDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEsNDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcsNDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTksNTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgxMTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgxMjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgxMjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEsNTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcsNTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQsNTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgxNjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgxNzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgxODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcsNDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAsNDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMsNDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIsNDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIsNDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgxOTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAsNTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYsNTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMsNTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgyMzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgyNDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgyNTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUsNTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEsNTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgsNTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMsNDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIsNDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcsNDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUsNTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIsNTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgzMDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgzMTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgzMjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQsNTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAsNTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcsNTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgzNjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgzNjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgzNzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAsNDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3NzcsNDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYsNDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4MjgsNDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYsNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMsNDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgzODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgzODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMsNTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDksNTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYsNTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgsNTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQsNTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEsNjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQwNDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAsMTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAsMTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEsMTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIsNTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0NzgsNTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUsNTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1MjcsNTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMsNTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAsNTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLFxuICBcImdiMTgwMzAtcmFuZ2VzXCI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEwMCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNdLFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxbMTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcxXSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQxLDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0sWzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0sWzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQsODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgzODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQsODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYsODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10sWzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkwNDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYyMl0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0sWzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10sWzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsxMTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRdLFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJdLFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsxMTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjddLFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMsMTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMsMTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUxODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUsMTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxbMTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxbMTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxbMzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4OTAwMCw2NTUzNl1dLFxuICBcImppczAyMDhcIjpbMTIyODgsMTIyODksMTIyOTAsNjUyOTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAsNjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwxODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3NiwxMzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwxMzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwxMzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEyOTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEyODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywyNDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5NywyNjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwyMjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIzOSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwyNDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwzODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwzMjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywzNTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwyNDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwyMjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUwMywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgzMCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwyMzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwzMzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwyODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIzMywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4NiwzNDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwzMzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwyMDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkxMywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAyOCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwzOTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywzNDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywyNTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEwNiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwzODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwzNzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwyMTAwMCwzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOTAwMCwyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMjAwMCwyNDUwOSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEzOCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0NywzMjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwzODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwzMDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAyNiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywzNzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwyMDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwyMDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAxNiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwyMjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1MywyOTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwzNDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUxMCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUzMywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwyNjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwzNDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1MiwzMTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkzNSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMzMSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywyNTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwyNzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2MywyNjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIxMSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwyODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwzNTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwyMjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2MiwzOTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwyMDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwyMTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIxOCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMwNCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwzMjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwzMzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwzNjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwyMDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwyNTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwzMjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQwOCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwzMzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwyNjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4NiwyNzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgzMCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0MiwyMzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwyOTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwzNzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAzMSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwzMzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwzNTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywyMDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkxMywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYwMCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwzNDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwzNDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwyNjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQxNywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5MywzMjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0NywyMzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwzMTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIyOCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMxMywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwyMDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwzOTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0NywyODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYwNCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwyMzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5NiwyNDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwyNTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwzODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwyMDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwyNDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwyODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwzMjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywzNjc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgwNSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIxOCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUxMiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwyMzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwyNjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwyNTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5NiwyNTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwzMTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0NywzMDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywzMzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwzNjk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5MiwyODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQwMSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDczNiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwyNTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwyNjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwzMDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwzNDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2MiwyNTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwzNTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkwNywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwyODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3NiwyNTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwyODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUwNCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0MywyMjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3MywzMDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3NywyNjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAxMywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwyMDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5MywyNDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwyNjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwzNDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwyMjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3MiwyMDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcxNiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQyMCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwyODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwzNzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwzMjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzMDAwMCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNjAwMCwyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwyNjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2MywyNjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwzMzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQyNiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwyOTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0MiwyMzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwyNjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNjAwMCwzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3MDAwLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0MDAwLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAyLDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTczLDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcwLDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgxLDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDczLDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMzLDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcwLDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEwLDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIzLDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUwLDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcxLDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEzLDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAzLDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAxLDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3NDE3LDM4MDAwLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImppczAyMTJcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMxLDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVsbCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVsbCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDExMTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGwsMzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMyOSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAsMTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIwMywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgsMzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEsMjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3MiwyMjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTksNDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgwLDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIwMDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIwMTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIwMTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIwMzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIwMzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgzLDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIwNDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIwNTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIwNjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAzLDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQzLDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIwNzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIwODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkzLDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIxMDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIxMDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIyLDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIxMTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIxMjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIxMjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIxNDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIxNDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUxLDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIxNjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIxNjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIxODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIxODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIxODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIyMDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIyMDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAwLDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIyMjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIyMjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUzLDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgyLDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIyMzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIyMzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIyMzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIwLDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIyNTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIyNTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIyNTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMxLDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIyNjk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIyNzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIyNzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEzLDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMyLDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIyOTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIyOTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIyOTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIyLDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIzMTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIzMTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYwLDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIzMzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIzMzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIzNDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAxLDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIzNTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIzNTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIzNjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzExLDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMyLDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIzODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIzODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIzODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYzLDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0MzgxLDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIwLDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcxLDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5LDI0OTkxLDI0OTkyLDI0OTk3LDI1MDAwLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3MDAwLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwiaWJtODY2XCI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSxcbiAgXCJpc28tODg1OS0yXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLFxuICBcImlzby04ODU5LTNcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLFxuICBcImlzby04ODU5LTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sXG4gIFwiaXNvLTg4NTktNVwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSxcbiAgXCJpc28tODg1OS02XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImlzby04ODU5LTdcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJpc28tODg1OS04XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcImlzby04ODU5LTEwXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSxcbiAgXCJpc28tODg1OS0xM1wiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sXG4gIFwiaXNvLTg4NTktMTRcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLFxuICBcImlzby04ODU5LTE1XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSxcbiAgXCJpc28tODg1OS0xNlwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSxcbiAgXCJrb2k4LXJcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJrb2k4LXVcIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxcbiAgXCJtYWNpbnRvc2hcIjpbMTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIyOCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwyMDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3MzMsNzMxLDcxMV0sXG4gIFwid2luZG93cy04NzRcIjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAxLDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgsMzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEsMzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTBcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUzLDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQsMjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUxLDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSxcbiAgXCJ3aW5kb3dzLTEyNTFcIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEwMzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwxNjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDNdLFxuICBcIndpbmRvd3MtMTI1MlwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLFxuICBcIndpbmRvd3MtMTI1M1wiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSxcbiAgXCJ3aW5kb3dzLTEyNTRcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwzNTEsMjU1XSxcbiAgXCJ3aW5kb3dzLTEyNTVcIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0NjIsMTQ2MywxNDY0LDE0NjUsMTQ2NiwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIzLDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLFxuICBcIndpbmRvd3MtMTI1NlwiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgyMDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIsMTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYwOCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSxcbiAgXCJ3aW5kb3dzLTEyNTdcIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3MjldLFxuICBcIndpbmRvd3MtMTI1OFwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjExLDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgwMywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsNDMyLDgzNjMsMjU1XSxcbiAgXCJ4LW1hYy1jeXJpbGxpY1wiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTExMCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywxMTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEwOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDExMDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XVxufTtcblxuLy8gRm9yIHN0cmljdCBlbnZpcm9ubWVudHMgd2hlcmUgYHRoaXNgIGluc2lkZSB0aGUgZ2xvYmFsIHNjb3BlXG4vLyBpcyBgdW5kZWZpbmVkYCwgdGFrZSBhIHB1cmUgb2JqZWN0IGluc3RlYWRcbn0odGhpcyB8fCB7fSkpOyIsIi8vIFRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG4vLyBTZWUgTElDRU5TRS5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEdsb2JhbCB8dGhpc3wgcmVxdWlyZWQgZm9yIHJlc29sdmluZyBpbmRleGVzIGluIG5vZGUuXG4gKiBAc3VwcHJlc3Mge2dsb2JhbFRoaXN9XG4gKi9cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIElmIHdlJ3JlIGluIG5vZGUgcmVxdWlyZSBlbmNvZGluZy1pbmRleGVzIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGdsb2JhbC5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAhZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXSkge1xuICAgIGdsb2JhbFtcImVuY29kaW5nLWluZGV4ZXNcIl0gPVxuICAgICAgcmVxdWlyZShcIi4vZW5jb2RpbmctaW5kZXhlcy5qc1wiKVtcImVuY29kaW5nLWluZGV4ZXNcIl07XG4gIH1cblxuICAvL1xuICAvLyBVdGlsaXRpZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGEgVGhlIG51bWJlciB0byB0ZXN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluIFRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSwgaW5jbHVzaXZlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgPj0gbWluIGFuZCBhIDw9IG1heC5cbiAgICovXG4gIGZ1bmN0aW9uIGluUmFuZ2UoYSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluIDw9IGEgJiYgYSA8PSBtYXg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHshQXJyYXkuPCo+fSBhcnJheSBUaGUgYXJyYXkgdG8gY2hlY2suXG4gICAqIEBwYXJhbSB7Kn0gaXRlbSBUaGUgaXRlbSB0byBsb29rIGZvciBpbiB0aGUgYXJyYXkuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGl0ZW0gYXBwZWFycyBpbiB0aGUgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbiAgfVxuXG4gIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBmdW5jdGlvbiBUb0RpY3Rpb25hcnkobykge1xuICAgIGlmIChvID09PSB1bmRlZmluZWQpIHJldHVybiB7fTtcbiAgICBpZiAobyA9PT0gT2JqZWN0KG8pKSByZXR1cm4gbztcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGRpY3Rpb25hcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIElucHV0IHN0cmluZyBvZiBVVEYtMTYgY29kZSB1bml0cy5cbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBDb2RlIHBvaW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQ29kZVBvaW50cyhzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGVcblxuICAgIC8vIDEuIExldCBTIGJlIHRoZSBET01TdHJpbmcgdmFsdWUuXG4gICAgdmFyIHMgPSBTdHJpbmcoc3RyaW5nKTtcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBsZW5ndGggb2YgUy5cbiAgICB2YXIgbiA9IHMubGVuZ3RoO1xuXG4gICAgLy8gMy4gSW5pdGlhbGl6ZSBpIHRvIDAuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgLy8gNC4gSW5pdGlhbGl6ZSBVIHRvIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIFVuaWNvZGUgY2hhcmFjdGVycy5cbiAgICB2YXIgdSA9IFtdO1xuXG4gICAgLy8gNS4gV2hpbGUgaSA8IG46XG4gICAgd2hpbGUgKGkgPCBuKSB7XG5cbiAgICAgIC8vIDEuIExldCBjIGJlIHRoZSBjb2RlIHVuaXQgaW4gUyBhdCBpbmRleCBpLlxuICAgICAgdmFyIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIC8vIDIuIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYzpcblxuICAgICAgLy8gYyA8IDB4RDgwMCBvciBjID4gMHhERkZGXG4gICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgIC8vIEFwcGVuZCB0byBVIHRoZSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQgYy5cbiAgICAgICAgdS5wdXNoKGMpO1xuICAgICAgfVxuXG4gICAgICAvLyAweERDMDAg4omkIGMg4omkIDB4REZGRlxuICAgICAgZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgLy8gQXBwZW5kIHRvIFUgYSBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICB1LnB1c2goMHhGRkZEKTtcbiAgICAgIH1cblxuICAgICAgLy8gMHhEODAwIOKJpCBjIOKJpCAweERCRkZcbiAgICAgIGVsc2UgaWYgKDB4RDgwMCA8PSBjICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIC8vIDEuIElmIGkgPSBu4oiSMSwgdGhlbiBhcHBlbmQgdG8gVSBhIFUrRkZGRCBSRVBMQUNFTUVOVFxuICAgICAgICAvLyBDSEFSQUNURVIuXG4gICAgICAgIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaSA8IG7iiJIxOlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyAxLiBMZXQgZCBiZSB0aGUgY29kZSB1bml0IGluIFMgYXQgaW5kZXggaSsxLlxuICAgICAgICAgIHZhciBkID0gcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICAgIC8vIDIuIElmIDB4REMwMCDiiaQgZCDiiaQgMHhERkZGLCB0aGVuOlxuICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgLy8gMS4gTGV0IGEgYmUgYyAmIDB4M0ZGLlxuICAgICAgICAgICAgdmFyIGEgPSBjICYgMHgzRkY7XG5cbiAgICAgICAgICAgIC8vIDIuIExldCBiIGJlIGQgJiAweDNGRi5cbiAgICAgICAgICAgIHZhciBiID0gZCAmIDB4M0ZGO1xuXG4gICAgICAgICAgICAvLyAzLiBBcHBlbmQgdG8gVSB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCBjb2RlIHBvaW50XG4gICAgICAgICAgICAvLyAyXjE2KzJeMTAqYStiLlxuICAgICAgICAgICAgdS5wdXNoKDB4MTAwMDAgKyAoYSA8PCAxMCkgKyBiKTtcblxuICAgICAgICAgICAgLy8gNC4gU2V0IGkgdG8gaSsxLlxuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDMuIE90aGVyd2lzZSwgZCA8IDB4REMwMCBvciBkID4gMHhERkZGLiBBcHBlbmQgdG8gVSBhXG4gICAgICAgICAgLy8gVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi5cbiAgICAgICAgICBlbHNlICB7XG4gICAgICAgICAgICB1LnB1c2goMHhGRkZEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gMy4gU2V0IGkgdG8gaSsxLlxuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIC8vIDYuIFJldHVybiBVLlxuICAgIHJldHVybiB1O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2RlX3BvaW50cyBBcnJheSBvZiBjb2RlIHBvaW50cy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIG9mIFVURi0xNiBjb2RlIHVuaXRzLlxuICAgKi9cbiAgZnVuY3Rpb24gY29kZVBvaW50c1RvU3RyaW5nKGNvZGVfcG9pbnRzKSB7XG4gICAgdmFyIHMgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVfcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY3AgPSBjb2RlX3BvaW50c1tpXTtcbiAgICAgIGlmIChjcCA8PSAweEZGRkYpIHtcbiAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNwIC09IDB4MTAwMDA7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY3AgPj4gMTApICsgMHhEODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuXG4gIC8vXG4gIC8vIEltcGxlbWVudGF0aW9uIG9mIEVuY29kaW5nIHNwZWNpZmljYXRpb25cbiAgLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvXG4gIC8vXG5cbiAgLy9cbiAgLy8gNC4gVGVybWlub2xvZ3lcbiAgLy9cblxuICAvKipcbiAgICogQW4gQVNDSUkgYnl0ZSBpcyBhIGJ5dGUgaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHg3RiwgaW5jbHVzaXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgbnVtYmVyIHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBpcyBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCBpbmNsdXNpdmUuXG4gICAqL1xuICBmdW5jdGlvbiBpc0FTQ0lJQnl0ZShhKSB7XG4gICAgcmV0dXJuIDB4MDAgPD0gYSAmJiBhIDw9IDB4N0Y7XG4gIH1cblxuICAvKipcbiAgICogQW4gQVNDSUkgY29kZSBwb2ludCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFUrMDAwMCB0b1xuICAgKiBVKzAwN0YsIGluY2x1c2l2ZS5cbiAgICovXG4gIHZhciBpc0FTQ0lJQ29kZVBvaW50ID0gaXNBU0NJSUJ5dGU7XG5cblxuICAvKipcbiAgICogRW5kLW9mLXN0cmVhbSBpcyBhIHNwZWNpYWwgdG9rZW4gdGhhdCBzaWduaWZpZXMgbm8gbW9yZSB0b2tlbnNcbiAgICogYXJlIGluIHRoZSBzdHJlYW0uXG4gICAqIEBjb25zdFxuICAgKi8gdmFyIGVuZF9vZl9zdHJlYW0gPSAtMTtcblxuICAvKipcbiAgICogQSBzdHJlYW0gcmVwcmVzZW50cyBhbiBvcmRlcmVkIHNlcXVlbmNlIG9mIHRva2Vucy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gdG9rZW5zIEFycmF5IG9mIHRva2VucyB0aGF0IHByb3ZpZGVcbiAgICogdGhlIHN0cmVhbS5cbiAgICovXG4gIGZ1bmN0aW9uIFN0cmVhbSh0b2tlbnMpIHtcbiAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICB0aGlzLnRva2VucyA9IFtdLnNsaWNlLmNhbGwodG9rZW5zKTtcbiAgICAvLyBSZXZlcnNlZCBhcyBwdXNoL3BvcCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHNoaWZ0L3Vuc2hpZnQuXG4gICAgdGhpcy50b2tlbnMucmV2ZXJzZSgpO1xuICB9XG5cbiAgU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGVuZC1vZi1zdHJlYW0gaGFzIGJlZW4gaGl0LlxuICAgICAqL1xuICAgIGVuZE9mU3RyZWFtOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy50b2tlbnMubGVuZ3RoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgdG9rZW4gaXMgcmVhZCBmcm9tIGEgc3RyZWFtLCB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgYW5kIHN1YnNlcXVlbnRseSByZW1vdmVkLCBhbmRcbiAgICAgKiBlbmQtb2Ytc3RyZWFtIG11c3QgYmUgcmV0dXJuZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBHZXQgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgc3RyZWFtLCBvclxuICAgICAqIGVuZF9vZl9zdHJlYW0uXG4gICAgICovXG4gICAgIHJlYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLnRva2Vucy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBlbmRfb2Zfc3RyZWFtO1xuICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5wb3AoKTtcbiAgICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25lIG9yIG1vcmUgdG9rZW5zIGFyZSBwcmVwZW5kZWQgdG8gYSBzdHJlYW0sIHRob3NlIHRva2Vuc1xuICAgICAqIG11c3QgYmUgaW5zZXJ0ZWQsIGluIGdpdmVuIG9yZGVyLCBiZWZvcmUgdGhlIGZpcnN0IHRva2VuIGluIHRoZVxuICAgICAqIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSB0b2tlbiBUaGUgdG9rZW4ocykgdG8gcHJlcGVuZCB0byB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICovXG4gICAgcHJlcGVuZDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW5zLnBvcCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG9uZSBvciBtb3JlIHRva2VucyBhcmUgcHVzaGVkIHRvIGEgc3RyZWFtLCB0aG9zZSB0b2tlbnNcbiAgICAgKiBtdXN0IGJlIGluc2VydGVkLCBpbiBnaXZlbiBvcmRlciwgYWZ0ZXIgdGhlIGxhc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IHRva2VuIFRoZSB0b2tlbnMocykgdG8gcHVzaCB0byB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICovXG4gICAgcHVzaDogZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuICAgICAgICB2YXIgdG9rZW5zID0gLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyh0b2tlbik7XG4gICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMudG9rZW5zLnVuc2hpZnQodG9rZW5zLnNoaWZ0KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMudW5zaGlmdCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vXG4gIC8vIDUuIEVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDUuMSBFbmNvZGVycyBhbmQgZGVjb2RlcnNcblxuICAvKiogQGNvbnN0ICovXG4gIHZhciBmaW5pc2hlZCA9IC0xO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhdGFsIElmIHRydWUsIGRlY29kaW5nIGVycm9ycyByYWlzZSBhbiBleGNlcHRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0X2NvZGVfcG9pbnQgT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGZhbGxiYWNrIGNvZGUgcG9pbnQuXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvZGUgcG9pbnQgdG8gaW5zZXJ0IG9uIGEgZGVjb2RpbmcgZXJyb3IuXG4gICAqL1xuICBmdW5jdGlvbiBkZWNvZGVyRXJyb3IoZmF0YWwsIG9wdF9jb2RlX3BvaW50KSB7XG4gICAgaWYgKGZhdGFsKVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdEZWNvZGVyIGVycm9yJyk7XG4gICAgcmV0dXJuIG9wdF9jb2RlX3BvaW50IHx8IDB4RkZGRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgY29kZSBwb2ludCB0aGF0IGNvdWxkIG5vdCBiZSBlbmNvZGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IEFsd2F5cyB0aHJvd3MsIG5vIHZhbHVlIGlzIGFjdHVhbGx5IHJldHVybmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1RoZSBjb2RlIHBvaW50ICcgKyBjb2RlX3BvaW50ICsgJyBjb3VsZCBub3QgYmUgZW5jb2RlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJmYWNlICovXG4gIGZ1bmN0aW9uIERlY29kZXIoKSB7fVxuICBEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHt9XG4gIH07XG5cbiAgLyoqIEBpbnRlcmZhY2UgKi9cbiAgZnVuY3Rpb24gRW5jb2RlcigpIHt9XG4gIEVuY29kZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBjb2RlIHBvaW50cyBiZWluZyBlbmNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdCwgb3IgfGZpbmlzaGVkfC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHt9XG4gIH07XG5cbiAgLy8gNS4yIE5hbWVzIGFuZCBsYWJlbHNcblxuICAvLyBUT0RPOiBEZWZpbmUgQHR5cGVkZWYgZm9yIEVuY29kaW5nOiB7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzI0N1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgVGhlIGVuY29kaW5nIGxhYmVsLlxuICAgKiBAcmV0dXJuIHs/e25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn19XG4gICAqL1xuICBmdW5jdGlvbiBnZXRFbmNvZGluZyhsYWJlbCkge1xuICAgIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAgIGxhYmVsID0gU3RyaW5nKGxhYmVsKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgICAvLyBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgLy8gZW5jb2RpbmcsIGFuZCBmYWlsdXJlIG90aGVyd2lzZS5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxhYmVsX3RvX2VuY29kaW5nLCBsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbF90b19lbmNvZGluZ1tsYWJlbF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kaW5ncyB0YWJsZTogaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvZW5jb2RpbmdzLmpzb25cbiAgICogQGNvbnN0XG4gICAqIEB0eXBlIHshQXJyYXkuPHtcbiAgICogICAgICAgICAgaGVhZGluZzogc3RyaW5nLFxuICAgKiAgICAgICAgICBlbmNvZGluZ3M6IEFycmF5Ljx7bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fT5cbiAgICogICAgICAgIH0+fVxuICAgKi9cbiAgdmFyIGVuY29kaW5ncyA9IFtcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcInVuaWNvZGUtMS0xLXV0Zi04XCIsXG4gICAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgICBcInV0ZjhcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiVVRGLThcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiVGhlIEVuY29kaW5nXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiODY2XCIsXG4gICAgICAgICAgICBcImNwODY2XCIsXG4gICAgICAgICAgICBcImNzaWJtODY2XCIsXG4gICAgICAgICAgICBcImlibTg2NlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJQk04NjZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluMlwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS0yXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMDFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0yXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkyXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTJcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMjoxOTg3XCIsXG4gICAgICAgICAgICBcImwyXCIsXG4gICAgICAgICAgICBcImxhdGluMlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0yXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjNcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktM1wiLFxuICAgICAgICAgICAgXCJpc28taXItMTA5XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktM1wiLFxuICAgICAgICAgICAgXCJpc284ODU5M1wiLFxuICAgICAgICAgICAgXCJpc29fODg1OS0zXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTM6MTk4OFwiLFxuICAgICAgICAgICAgXCJsM1wiLFxuICAgICAgICAgICAgXCJsYXRpbjNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktM1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW40XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTRcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTExMFwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTRcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTRcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNFwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS00OjE5ODhcIixcbiAgICAgICAgICAgIFwibDRcIixcbiAgICAgICAgICAgIFwibGF0aW40XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwiY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ0XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktNVwiLFxuICAgICAgICAgICAgXCJpc284ODU5NVwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS01XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTU6MTk4OFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS01XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiYXJhYmljXCIsXG4gICAgICAgICAgICBcImFzbW8tNzA4XCIsXG4gICAgICAgICAgICBcImNzaXNvODg1OTZlXCIsXG4gICAgICAgICAgICBcImNzaXNvODg1OTZpXCIsXG4gICAgICAgICAgICBcImNzaXNvbGF0aW5hcmFiaWNcIixcbiAgICAgICAgICAgIFwiZWNtYS0xMTRcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNlwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS02LWVcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNi1pXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMjdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS02XCIsXG4gICAgICAgICAgICBcImlzbzg4NTk2XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTZcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNjoxOTg3XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluZ3JlZWtcIixcbiAgICAgICAgICAgIFwiZWNtYS0xMThcIixcbiAgICAgICAgICAgIFwiZWxvdF85MjhcIixcbiAgICAgICAgICAgIFwiZ3JlZWtcIixcbiAgICAgICAgICAgIFwiZ3JlZWs4XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTdcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTEyNlwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTdcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktN1wiLFxuICAgICAgICAgICAgXCJpc29fODg1OS03OjE5ODdcIixcbiAgICAgICAgICAgIFwic3VuX2V1X2dyZWVrXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTdcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzbzg4NTk4ZVwiLFxuICAgICAgICAgICAgXCJjc2lzb2xhdGluaGVicmV3XCIsXG4gICAgICAgICAgICBcImhlYnJld1wiLFxuICAgICAgICAgICAgXCJpc28tODg1OS04XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTgtZVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTM4XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktOFwiLFxuICAgICAgICAgICAgXCJpc284ODU5OFwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS04XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTg6MTk4OFwiLFxuICAgICAgICAgICAgXCJ2aXN1YWxcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktOFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvODg1OThpXCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTgtaVwiLFxuICAgICAgICAgICAgXCJsb2dpY2FsXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTgtSVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW42XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTEwXCIsXG4gICAgICAgICAgICBcImlzby1pci0xNTdcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xMFwiLFxuICAgICAgICAgICAgXCJpc284ODU5MTBcIixcbiAgICAgICAgICAgIFwibDZcIixcbiAgICAgICAgICAgIFwibGF0aW42XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTEwXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTNcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xM1wiLFxuICAgICAgICAgICAgXCJpc284ODU5MTNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTNcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJpc28tODg1OS0xNFwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTE0XCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxNFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0xNFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW45XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTE1XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktMTVcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTE1XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTE1XCIsXG4gICAgICAgICAgICBcImw5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTE1XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTZcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2tvaThyXCIsXG4gICAgICAgICAgICBcImtvaVwiLFxuICAgICAgICAgICAgXCJrb2k4XCIsXG4gICAgICAgICAgICBcImtvaTgtclwiLFxuICAgICAgICAgICAgXCJrb2k4X3JcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiS09JOC1SXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwia29pOC1ydVwiLFxuICAgICAgICAgICAgXCJrb2k4LXVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiS09JOC1VXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3NtYWNpbnRvc2hcIixcbiAgICAgICAgICAgIFwibWFjXCIsXG4gICAgICAgICAgICBcIm1hY2ludG9zaFwiLFxuICAgICAgICAgICAgXCJ4LW1hYy1yb21hblwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJtYWNpbnRvc2hcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJkb3MtODc0XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTExXCIsXG4gICAgICAgICAgICBcImlzbzg4NTktMTFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTExXCIsXG4gICAgICAgICAgICBcInRpcy02MjBcIixcbiAgICAgICAgICAgIFwid2luZG93cy04NzRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy04NzRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTBcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjUwXCIsXG4gICAgICAgICAgICBcIngtY3AxMjUwXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1MFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1MVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTFcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTFcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUxXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiYW5zaV94My40LTE5NjhcIixcbiAgICAgICAgICAgIFwiYXNjaWlcIixcbiAgICAgICAgICAgIFwiY3AxMjUyXCIsXG4gICAgICAgICAgICBcImNwODE5XCIsXG4gICAgICAgICAgICBcImNzaXNvbGF0aW4xXCIsXG4gICAgICAgICAgICBcImlibTgxOVwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS0xXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMDBcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTFcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMToxOTg3XCIsXG4gICAgICAgICAgICBcImwxXCIsXG4gICAgICAgICAgICBcImxhdGluMVwiLFxuICAgICAgICAgICAgXCJ1cy1hc2NpaVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTJcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUyXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjUzXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1M1wiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1M1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTNcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTRcIixcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjVcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktOVwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ4XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktOVwiLFxuICAgICAgICAgICAgXCJpc284ODU5OVwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS05XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTk6MTk4OVwiLFxuICAgICAgICAgICAgXCJsNVwiLFxuICAgICAgICAgICAgXCJsYXRpbjVcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjU0XCIsXG4gICAgICAgICAgICBcIngtY3AxMjU0XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1NFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1NVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTVcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU1XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjU2XCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1NlwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1NlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTZcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTdcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjU3XCIsXG4gICAgICAgICAgICBcIngtY3AxMjU3XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1N1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1OFwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNThcIixcbiAgICAgICAgICAgIFwieC1jcDEyNThcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU4XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwieC1tYWMtY3lyaWxsaWNcIixcbiAgICAgICAgICAgIFwieC1tYWMtdWtyYWluaWFuXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIngtbWFjLWN5cmlsbGljXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjaGluZXNlXCIsXG4gICAgICAgICAgICBcImNzZ2IyMzEyXCIsXG4gICAgICAgICAgICBcImNzaXNvNThnYjIzMTI4MFwiLFxuICAgICAgICAgICAgXCJnYjIzMTJcIixcbiAgICAgICAgICAgIFwiZ2JfMjMxMlwiLFxuICAgICAgICAgICAgXCJnYl8yMzEyLTgwXCIsXG4gICAgICAgICAgICBcImdia1wiLFxuICAgICAgICAgICAgXCJpc28taXItNThcIixcbiAgICAgICAgICAgIFwieC1nYmtcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiR0JLXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiZ2IxODAzMFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJnYjE4MDMwXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5nc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImJpZzVcIixcbiAgICAgICAgICAgIFwiYmlnNS1oa3Njc1wiLFxuICAgICAgICAgICAgXCJjbi1iaWc1XCIsXG4gICAgICAgICAgICBcImNzYmlnNVwiLFxuICAgICAgICAgICAgXCJ4LXgtYmlnNVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJCaWc1XCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2V1Y3BrZGZtdGphcGFuZXNlXCIsXG4gICAgICAgICAgICBcImV1Yy1qcFwiLFxuICAgICAgICAgICAgXCJ4LWV1Yy1qcFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJFVUMtSlBcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzbzIwMjJqcFwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1qcFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tMjAyMi1KUFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzc2hpZnRqaXNcIixcbiAgICAgICAgICAgIFwibXM5MzJcIixcbiAgICAgICAgICAgIFwibXNfa2FuamlcIixcbiAgICAgICAgICAgIFwic2hpZnQtamlzXCIsXG4gICAgICAgICAgICBcInNoaWZ0X2ppc1wiLFxuICAgICAgICAgICAgXCJzamlzXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMzFqXCIsXG4gICAgICAgICAgICBcIngtc2ppc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJTaGlmdF9KSVNcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3NldWNrclwiLFxuICAgICAgICAgICAgXCJjc2tzYzU2MDExOTg3XCIsXG4gICAgICAgICAgICBcImV1Yy1rclwiLFxuICAgICAgICAgICAgXCJpc28taXItMTQ5XCIsXG4gICAgICAgICAgICBcImtvcmVhblwiLFxuICAgICAgICAgICAgXCJrc19jXzU2MDEtMTk4N1wiLFxuICAgICAgICAgICAgXCJrc19jXzU2MDEtMTk4OVwiLFxuICAgICAgICAgICAgXCJrc2M1NjAxXCIsXG4gICAgICAgICAgICBcImtzY181NjAxXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtOTQ5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIkVVQy1LUlwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImhlYWRpbmdcIjogXCJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc28yMDIya3JcIixcbiAgICAgICAgICAgIFwiaHotZ2ItMjMxMlwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1jblwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1jbi1leHRcIixcbiAgICAgICAgICAgIFwiaXNvLTIwMjIta3JcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVwbGFjZW1lbnRcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJ1dGYtMTZiZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJVVEYtMTZCRVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcInV0Zi0xNlwiLFxuICAgICAgICAgICAgXCJ1dGYtMTZsZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJVVEYtMTZMRVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIngtdXNlci1kZWZpbmVkXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtaXNjZWxsYW5lb3VzIGVuY29kaW5nc1wiXG4gICAgfVxuICBdO1xuXG4gIC8vIExhYmVsIHRvIGVuY29kaW5nIHJlZ2lzdHJ5LlxuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLHtuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59Pn0gKi9cbiAgdmFyIGxhYmVsX3RvX2VuY29kaW5nID0ge307XG4gIGVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgY2F0ZWdvcnkuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgIGVuY29kaW5nLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIGxhYmVsX3RvX2VuY29kaW5nW2xhYmVsXSA9IGVuY29kaW5nO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJlZ2lzdHJ5IG9mIG9mIGVuY29kZXIvZGVjb2RlciBmYWN0b3JpZXMsIGJ5IGVuY29kaW5nIG5hbWUuXG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKHtmYXRhbDpib29sZWFufSk6IEVuY29kZXI+fSAqL1xuICB2YXIgZW5jb2RlcnMgPSB7fTtcbiAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oe2ZhdGFsOmJvb2xlYW59KTogRGVjb2Rlcj59ICovXG4gIHZhciBkZWNvZGVycyA9IHt9O1xuXG4gIC8vXG4gIC8vIDYuIEluZGV4ZXNcbiAgLy9cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvaW50ZXIgVGhlIHxwb2ludGVyfCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyghQXJyYXkuPD9udW1iZXI+fHVuZGVmaW5lZCl9IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KSB7XG4gICAgaWYgKCFpbmRleCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGluZGV4W3BvaW50ZXJdIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0geyFBcnJheS48P251bWJlcj59IGluZGV4IFRoZSB8aW5kZXh8IHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBmaXJzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gfGNvZGUgcG9pbnR8IGluXG4gICAqICAgICB8aW5kZXh8LCBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gfGluZGV4fC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCkge1xuICAgIHZhciBwb2ludGVyID0gaW5kZXguaW5kZXhPZihjb2RlX3BvaW50KTtcbiAgICByZXR1cm4gcG9pbnRlciA9PT0gLTEgPyBudWxsIDogcG9pbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBpbmRleC5cbiAgICogQHJldHVybiB7KCFBcnJheS48bnVtYmVyPnwhQXJyYXkuPEFycmF5LjxudW1iZXI+Pil9XG4gICAqICAqL1xuICBmdW5jdGlvbiBpbmRleChuYW1lKSB7XG4gICAgaWYgKCEoJ2VuY29kaW5nLWluZGV4ZXMnIGluIGdsb2JhbCkpIHtcbiAgICAgIHRocm93IEVycm9yKFwiSW5kZXhlcyBtaXNzaW5nLlwiICtcbiAgICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD9cIik7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxbJ2VuY29kaW5nLWluZGV4ZXMnXVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9pbnRlciBUaGUgfHBvaW50ZXJ8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEdCMTgwMzBSYW5nZXNDb2RlUG9pbnRGb3IocG9pbnRlcikge1xuICAgIC8vIDEuIElmIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDM5NDE5IGFuZCBsZXNzIHRoYW4gMTg5MDAwLCBvclxuICAgIC8vIHBvaW50ZXIgaXMgZ3JlYXRlciB0aGFuIDEyMzc1NzUsIHJldHVybiBudWxsLlxuICAgIGlmICgocG9pbnRlciA+IDM5NDE5ICYmIHBvaW50ZXIgPCAxODkwMDApIHx8IChwb2ludGVyID4gMTIzNzU3NSkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIDIuIElmIHBvaW50ZXIgaXMgNzQ1NywgcmV0dXJuIGNvZGUgcG9pbnQgVStFN0M3LlxuICAgIGlmIChwb2ludGVyID09PSA3NDU3KSByZXR1cm4gMHhFN0M3O1xuXG4gICAgLy8gMy4gTGV0IG9mZnNldCBiZSB0aGUgbGFzdCBwb2ludGVyIGluIGluZGV4IGdiMTgwMzAgcmFuZ2VzIHRoYXRcbiAgICAvLyBpcyBlcXVhbCB0byBvciBsZXNzIHRoYW4gcG9pbnRlciBhbmQgbGV0IGNvZGUgcG9pbnQgb2Zmc2V0IGJlXG4gICAgLy8gaXRzIGNvcnJlc3BvbmRpbmcgY29kZSBwb2ludC5cbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgY29kZV9wb2ludF9vZmZzZXQgPSAwO1xuICAgIHZhciBpZHggPSBpbmRleCgnZ2IxODAzMC1yYW5nZXMnKTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWR4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gKi9cbiAgICAgIHZhciBlbnRyeSA9IGlkeFtpXTtcbiAgICAgIGlmIChlbnRyeVswXSA8PSBwb2ludGVyKSB7XG4gICAgICAgIG9mZnNldCA9IGVudHJ5WzBdO1xuICAgICAgICBjb2RlX3BvaW50X29mZnNldCA9IGVudHJ5WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IG9mZnNldCArXG4gICAgLy8gcG9pbnRlciDiiJIgb2Zmc2V0LlxuICAgIHJldHVybiBjb2RlX3BvaW50X29mZnNldCArIHBvaW50ZXIgLSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlIHBvaW50fCB0byBsb2NhdGUgaW4gdGhlIGdiMTgwMzAgaW5kZXguXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGZpcnN0IHBvaW50ZXIgY29ycmVzcG9uZGluZyB0byB8Y29kZSBwb2ludHwgaW4gdGhlXG4gICAqICAgICBnYjE4MDMwIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhHQjE4MDMwUmFuZ2VzUG9pbnRlckZvcihjb2RlX3BvaW50KSB7XG4gICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBVK0U3QzcsIHJldHVybiBwb2ludGVyIDc0NTcuXG4gICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4RTdDNykgcmV0dXJuIDc0NTc7XG5cbiAgICAvLyAyLiBMZXQgb2Zmc2V0IGJlIHRoZSBsYXN0IGNvZGUgcG9pbnQgaW4gaW5kZXggZ2IxODAzMCByYW5nZXNcbiAgICAvLyB0aGF0IGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBjb2RlIHBvaW50IGFuZCBsZXQgcG9pbnRlciBvZmZzZXRcbiAgICAvLyBiZSBpdHMgY29ycmVzcG9uZGluZyBwb2ludGVyLlxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBwb2ludGVyX29mZnNldCA9IDA7XG4gICAgdmFyIGlkeCA9IGluZGV4KCdnYjE4MDMwLXJhbmdlcycpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpZHgubGVuZ3RoOyArK2kpIHtcbiAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgICAgdmFyIGVudHJ5ID0gaWR4W2ldO1xuICAgICAgaWYgKGVudHJ5WzFdIDw9IGNvZGVfcG9pbnQpIHtcbiAgICAgICAgb2Zmc2V0ID0gZW50cnlbMV07XG4gICAgICAgIHBvaW50ZXJfb2Zmc2V0ID0gZW50cnlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4gYSBwb2ludGVyIHdob3NlIHZhbHVlIGlzIHBvaW50ZXIgb2Zmc2V0ICsgY29kZSBwb2ludFxuICAgIC8vIOKIkiBvZmZzZXQuXG4gICAgcmV0dXJuIHBvaW50ZXJfb2Zmc2V0ICsgY29kZV9wb2ludCAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGVfcG9pbnR8IHRvIHNlYXJjaCBmb3IgaW4gdGhlIFNoaWZ0X0pJU1xuICAgKiAgICAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIFNoaWZ0X0pJUyBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggamlzMDIwOCBleGNsdWRpbmcgYWxsIGVudHJpZXMgd2hvc2VcbiAgICAvLyBwb2ludGVyIGlzIGluIHRoZSByYW5nZSA4MjcyIHRvIDg4MzUsIGluY2x1c2l2ZS5cbiAgICBzaGlmdF9qaXNfaW5kZXggPSBzaGlmdF9qaXNfaW5kZXggfHxcbiAgICAgIGluZGV4KCdqaXMwMjA4JykubWFwKGZ1bmN0aW9uKGNvZGVfcG9pbnQsIHBvaW50ZXIpIHtcbiAgICAgICAgcmV0dXJuIGluUmFuZ2UocG9pbnRlciwgODI3MiwgODgzNSkgPyBudWxsIDogY29kZV9wb2ludDtcbiAgICAgIH0pO1xuICAgIHZhciBpbmRleF8gPSBzaGlmdF9qaXNfaW5kZXg7XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXguXG4gICAgcmV0dXJuIGluZGV4Xy5pbmRleE9mKGNvZGVfcG9pbnQpO1xuICB9XG4gIHZhciBzaGlmdF9qaXNfaW5kZXg7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSB8Y29kZV9wb2ludHwgdG8gc2VhcmNoIGZvciBpbiB0aGUgYmlnNVxuICAgKiAgICAgaW5kZXguXG4gICAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBjb2RlIHBvaW50IGNvcnJlc3BvbmRpbmcgdG8gfHBvaW50ZXJ8IGluIHxpbmRleHwsXG4gICAqICAgICBvciBudWxsIGlmIHxjb2RlIHBvaW50fCBpcyBub3QgaW4gdGhlIGJpZzUgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEJpZzVQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBMZXQgaW5kZXggYmUgaW5kZXggQmlnNSBleGNsdWRpbmcgYWxsIGVudHJpZXMgd2hvc2UgcG9pbnRlclxuICAgIGJpZzVfaW5kZXhfbm9faGtzY3MgPSBiaWc1X2luZGV4X25vX2hrc2NzIHx8XG4gICAgICBpbmRleCgnYmlnNScpLm1hcChmdW5jdGlvbihjb2RlX3BvaW50LCBwb2ludGVyKSB7XG4gICAgICAgIHJldHVybiAocG9pbnRlciA8ICgweEExIC0gMHg4MSkgKiAxNTcpID8gbnVsbCA6IGNvZGVfcG9pbnQ7XG4gICAgICB9KTtcbiAgICB2YXIgaW5kZXhfID0gYmlnNV9pbmRleF9ub19oa3NjcztcblxuICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgVSsyNTUwLCBVKzI1NUUsIFUrMjU2MSwgVSsyNTZBLCBVKzUzNDEsIG9yXG4gICAgLy8gVSs1MzQ1LCByZXR1cm4gdGhlIGxhc3QgcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIGNvZGUgcG9pbnQgaW5cbiAgICAvLyBpbmRleC5cbiAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyNTUwIHx8IGNvZGVfcG9pbnQgPT09IDB4MjU1RSB8fFxuICAgICAgICBjb2RlX3BvaW50ID09PSAweDI1NjEgfHwgY29kZV9wb2ludCA9PT0gMHgyNTZBIHx8XG4gICAgICAgIGNvZGVfcG9pbnQgPT09IDB4NTM0MSB8fCBjb2RlX3BvaW50ID09PSAweDUzNDUpIHtcbiAgICAgIHJldHVybiBpbmRleF8ubGFzdEluZGV4T2YoY29kZV9wb2ludCk7XG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4LlxuICAgIHJldHVybiBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXhfKTtcbiAgfVxuICB2YXIgYmlnNV9pbmRleF9ub19oa3NjcztcblxuICAvL1xuICAvLyA4LiBBUElcbiAgLy9cblxuICAvKiogQGNvbnN0ICovIHZhciBERUZBVUxUX0VOQ09ESU5HID0gJ3V0Zi04JztcblxuICAvLyA4LjEgSW50ZXJmYWNlIFRleHREZWNvZGVyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgZW5jb2Rpbmc7XG4gICAqICAgICBkZWZhdWx0cyB0byAndXRmLTgnLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFRleHREZWNvZGVyKGxhYmVsLCBvcHRpb25zKSB7XG4gICAgLy8gV2ViIElETCBjb252ZW50aW9uc1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUZXh0RGVjb2RlcikpXG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0NhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCBcXCduZXdcXCc/Jyk7XG4gICAgbGFiZWwgPSBsYWJlbCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKGxhYmVsKSA6IERFRkFVTFRfRU5DT0RJTkc7XG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIEEgVGV4dERlY29kZXIgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIGVuY29kaW5nLCBkZWNvZGVyLFxuICAgIC8vIHN0cmVhbSwgaWdub3JlIEJPTSBmbGFnIChpbml0aWFsbHkgdW5zZXQpLCBCT00gc2VlbiBmbGFnXG4gICAgLy8gKGluaXRpYWxseSB1bnNldCksIGVycm9yIG1vZGUgKGluaXRpYWxseSByZXBsYWNlbWVudCksIGFuZCBkb1xuICAgIC8vIG5vdCBmbHVzaCBmbGFnIChpbml0aWFsbHkgdW5zZXQpLlxuXG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBudWxsO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7P0RlY29kZXJ9ICovXG4gICAgdGhpcy5fZGVjb2RlciA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2lnbm9yZUJPTSA9IGZhbHNlO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9CT01zZWVuID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5fZXJyb3JfbW9kZSA9ICdyZXBsYWNlbWVudCc7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2RvX25vdF9mbHVzaCA9IGZhbHNlO1xuXG5cbiAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb21cbiAgICAvLyBsYWJlbC5cbiAgICB2YXIgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhsYWJlbCk7XG5cbiAgICAvLyAyLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlIG9yIHJlcGxhY2VtZW50LCB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKGVuY29kaW5nID09PSBudWxsIHx8IGVuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICB0aHJvdyBSYW5nZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgbGFiZWwpO1xuICAgIGlmICghZGVjb2RlcnNbZW5jb2RpbmcubmFtZV0pIHtcbiAgICAgIHRocm93IEVycm9yKCdEZWNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgJyBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Jyk7XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlYyBiZSBhIG5ldyBUZXh0RGVjb2RlciBvYmplY3QuXG4gICAgdmFyIGRlYyA9IHRoaXM7XG5cbiAgICAvLyA0LiBTZXQgZGVjJ3MgZW5jb2RpbmcgdG8gZW5jb2RpbmcuXG4gICAgZGVjLl9lbmNvZGluZyA9IGVuY29kaW5nO1xuXG4gICAgLy8gNS4gSWYgb3B0aW9ucydzIGZhdGFsIG1lbWJlciBpcyB0cnVlLCBzZXQgZGVjJ3MgZXJyb3IgbW9kZSB0b1xuICAgIC8vIGZhdGFsLlxuICAgIGlmIChCb29sZWFuKG9wdGlvbnNbJ2ZhdGFsJ10pKVxuICAgICAgZGVjLl9lcnJvcl9tb2RlID0gJ2ZhdGFsJztcblxuICAgIC8vIDYuIElmIG9wdGlvbnMncyBpZ25vcmVCT00gbWVtYmVyIGlzIHRydWUsIHNldCBkZWMncyBpZ25vcmUgQk9NXG4gICAgLy8gZmxhZy5cbiAgICBpZiAoQm9vbGVhbihvcHRpb25zWydpZ25vcmVCT00nXSkpXG4gICAgICBkZWMuX2lnbm9yZUJPTSA9IHRydWU7XG5cbiAgICAvLyBGb3IgcHJlLUVTNSBydW50aW1lczpcbiAgICBpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5lbmNvZGluZyA9IGRlYy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5mYXRhbCA9IGRlYy5fZXJyb3JfbW9kZSA9PT0gJ2ZhdGFsJztcbiAgICAgIHRoaXMuaWdub3JlQk9NID0gZGVjLl9pZ25vcmVCT007XG4gICAgfVxuXG4gICAgLy8gNy4gUmV0dXJuIGRlYy5cbiAgICByZXR1cm4gZGVjO1xuICB9XG5cbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgIC8vIFRoZSBlbmNvZGluZyBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gZW5jb2RpbmcncyBuYW1lLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0RGVjb2Rlci5wcm90b3R5cGUsICdlbmNvZGluZycsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZmF0YWwgYXR0cmlidXRlJ3MgZ2V0dGVyIG11c3QgcmV0dXJuIHRydWUgaWYgZXJyb3IgbW9kZVxuICAgIC8vIGlzIGZhdGFsLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0RGVjb2Rlci5wcm90b3R5cGUsICdmYXRhbCcsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZXJyb3JfbW9kZSA9PT0gJ2ZhdGFsJzsgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhlIGlnbm9yZUJPTSBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gdHJ1ZSBpZiBpZ25vcmVcbiAgICAvLyBCT00gZmxhZyBpcyBzZXQsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHREZWNvZGVyLnByb3RvdHlwZSwgJ2lnbm9yZUJPTScsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dERlY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5faWdub3JlQk9NOyB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJTb3VyY2U9fSBpbnB1dCBUaGUgYnVmZmVyIG9mIGJ5dGVzIHRvIGRlY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nLlxuICAgKi9cbiAgVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShpbnB1dCwgb3B0aW9ucykge1xuICAgIHZhciBieXRlcztcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgJ2J1ZmZlcicgaW4gaW5wdXQgJiZcbiAgICAgICAgICAgICAgIGlucHV0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGlucHV0LmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuYnl0ZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIDEuIElmIHRoZSBkbyBub3QgZmx1c2ggZmxhZyBpcyB1bnNldCwgc2V0IGRlY29kZXIgdG8gYSBuZXdcbiAgICAvLyBlbmNvZGluZydzIGRlY29kZXIsIHNldCBzdHJlYW0gdG8gYSBuZXcgc3RyZWFtLCBhbmQgdW5zZXQgdGhlXG4gICAgLy8gQk9NIHNlZW4gZmxhZy5cbiAgICBpZiAoIXRoaXMuX2RvX25vdF9mbHVzaCkge1xuICAgICAgdGhpcy5fZGVjb2RlciA9IGRlY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtcbiAgICAgICAgZmF0YWw6IHRoaXMuX2Vycm9yX21vZGUgPT09ICdmYXRhbCd9KTtcbiAgICAgIHRoaXMuX0JPTXNlZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBvcHRpb25zJ3Mgc3RyZWFtIGlzIHRydWUsIHNldCB0aGUgZG8gbm90IGZsdXNoIGZsYWcsIGFuZFxuICAgIC8vIHVuc2V0IHRoZSBkbyBub3QgZmx1c2ggZmxhZyBvdGhlcndpc2UuXG4gICAgdGhpcy5fZG9fbm90X2ZsdXNoID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAvLyAzLiBJZiBpbnB1dCBpcyBnaXZlbiwgcHVzaCBhIGNvcHkgb2YgaW5wdXQgdG8gc3RyZWFtLlxuICAgIC8vIFRPRE86IEFsaWduIHdpdGggc3BlYyBhbGdvcml0aG0gLSBtYWludGFpbiBzdHJlYW0gb24gaW5zdGFuY2UuXG4gICAgdmFyIGlucHV0X3N0cmVhbSA9IG5ldyBTdHJlYW0oYnl0ZXMpO1xuXG4gICAgLy8gNC4gTGV0IG91dHB1dCBiZSBhIG5ldyBzdHJlYW0uXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICAvLyA1LiBXaGlsZSB0cnVlOlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gc3RyZWFtLlxuICAgICAgdmFyIHRva2VuID0gaW5wdXRfc3RyZWFtLnJlYWQoKTtcblxuICAgICAgLy8gMi4gSWYgdG9rZW4gaXMgZW5kLW9mLXN0cmVhbSBhbmQgdGhlIGRvIG5vdCBmbHVzaCBmbGFnIGlzXG4gICAgICAvLyBzZXQsIHJldHVybiBvdXRwdXQsIHNlcmlhbGl6ZWQuXG4gICAgICAvLyBUT0RPOiBBbGlnbiB3aXRoIHNwZWMgYWxnb3JpdGhtLlxuICAgICAgaWYgKHRva2VuID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICBicmVhaztcblxuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBydW4gdGhlc2Ugc3Vic3Vic3RlcHM6XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIHRva2VuIGZvciBkZWNvZGVyLFxuICAgICAgLy8gc3RyZWFtLCBvdXRwdXQsIGFuZCBlcnJvciBtb2RlLlxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2Rlci5oYW5kbGVyKGlucHV0X3N0cmVhbSwgdG9rZW4pO1xuXG4gICAgICAvLyAyLiBJZiByZXN1bHQgaXMgZmluaXNoZWQsIHJldHVybiBvdXRwdXQsIHNlcmlhbGl6ZWQuXG4gICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXRwdXQucHVzaChyZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHJlc3VsdCBpcyBlcnJvciwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAvLyAoVGhyb3duIGluIGhhbmRsZXIpXG5cbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgZG8gbm90aGluZy5cbiAgICB9XG4gICAgLy8gVE9ETzogQWxpZ24gd2l0aCBzcGVjIGFsZ29yaXRobS5cbiAgICBpZiAoIXRoaXMuX2RvX25vdF9mbHVzaCkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCBpbnB1dF9zdHJlYW0ucmVhZCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH0gd2hpbGUgKCFpbnB1dF9zdHJlYW0uZW5kT2ZTdHJlYW0oKSk7XG4gICAgICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBIFRleHREZWNvZGVyIG9iamVjdCBhbHNvIGhhcyBhbiBhc3NvY2lhdGVkIHNlcmlhbGl6ZSBzdHJlYW1cbiAgICAvLyBhbGdvcml0aG0uLi5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gc3RyZWFtXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqIEB0aGlzIHtUZXh0RGVjb2Rlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVTdHJlYW0oc3RyZWFtKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gc3RyZWFtLlxuICAgICAgLy8gKERvbmUgaW4tcGxhY2Ugb24gYXJyYXksIHJhdGhlciB0aGFuIGFzIGEgc3RyZWFtKVxuXG4gICAgICAvLyAyLiBJZiBlbmNvZGluZyBpcyBVVEYtOCwgVVRGLTE2QkUsIG9yIFVURi0xNkxFLCBhbmQgaWdub3JlXG4gICAgICAvLyBCT00gZmxhZyBhbmQgQk9NIHNlZW4gZmxhZyBhcmUgdW5zZXQsIHJ1biB0aGVzZSBzdWJzdWJzdGVwczpcbiAgICAgIGlmIChpbmNsdWRlcyhbJ1VURi04JywgJ1VURi0xNkxFJywgJ1VURi0xNkJFJ10sIHRoaXMuX2VuY29kaW5nLm5hbWUpICYmXG4gICAgICAgICAgIXRoaXMuX2lnbm9yZUJPTSAmJiAhdGhpcy5fQk9Nc2Vlbikge1xuICAgICAgICBpZiAoc3RyZWFtLmxlbmd0aCA+IDAgJiYgc3RyZWFtWzBdID09PSAweEZFRkYpIHtcbiAgICAgICAgICAvLyAxLiBJZiB0b2tlbiBpcyBVK0ZFRkYsIHNldCBCT00gc2VlbiBmbGFnLlxuICAgICAgICAgIHRoaXMuX0JPTXNlZW4gPSB0cnVlO1xuICAgICAgICAgIHN0cmVhbS5zaGlmdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0b2tlbiBpcyBub3QgZW5kLW9mLXN0cmVhbSwgc2V0IEJPTSBzZWVuXG4gICAgICAgICAgLy8gZmxhZyBhbmQgYXBwZW5kIHRva2VuIHRvIHN0cmVhbS5cbiAgICAgICAgICB0aGlzLl9CT01zZWVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRva2VuIGlzIG5vdCBlbmQtb2Ytc3RyZWFtLCBhcHBlbmQgdG9rZW5cbiAgICAgICAgICAvLyB0byBvdXRwdXQuXG4gICAgICAgICAgLy8gKG5vLW9wKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBvdXRwdXQuXG4gICAgICByZXR1cm4gY29kZVBvaW50c1RvU3RyaW5nKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZVN0cmVhbS5jYWxsKHRoaXMsIG91dHB1dCk7XG4gIH07XG5cbiAgLy8gOC4yIEludGVyZmFjZSBUZXh0RW5jb2RlclxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGVuY29kaW5nLiBOT05TVEFOREFSRC5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIE5PTlNUQU5EQVJELlxuICAgKi9cbiAgZnVuY3Rpb24gVGV4dEVuY29kZXIobGFiZWwsIG9wdGlvbnMpIHtcbiAgICAvLyBXZWIgSURMIGNvbnZlbnRpb25zXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRleHRFbmNvZGVyKSlcbiAgICAgIHRocm93IFR5cGVFcnJvcignQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0IFxcJ25ld1xcJz8nKTtcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgLy8gQSBUZXh0RW5jb2RlciBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgZW5jb2RpbmcgYW5kIGVuY29kZXIuXG5cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICB0aGlzLl9lbmNvZGluZyA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHs/RW5jb2Rlcn0gKi9cbiAgICB0aGlzLl9lbmNvZGVyID0gbnVsbDtcblxuICAgIC8vIE5vbi1zdGFuZGFyZFxuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9kb19ub3RfZmx1c2ggPSBmYWxzZTtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLl9mYXRhbCA9IEJvb2xlYW4ob3B0aW9uc1snZmF0YWwnXSkgPyAnZmF0YWwnIDogJ3JlcGxhY2VtZW50JztcblxuICAgIC8vIDEuIExldCBlbmMgYmUgYSBuZXcgVGV4dEVuY29kZXIgb2JqZWN0LlxuICAgIHZhciBlbmMgPSB0aGlzO1xuXG4gICAgLy8gMi4gU2V0IGVuYydzIGVuY29kaW5nIHRvIFVURi04J3MgZW5jb2Rlci5cbiAgICBpZiAoQm9vbGVhbihvcHRpb25zWydOT05TVEFOREFSRF9hbGxvd0xlZ2FjeUVuY29kaW5nJ10pKSB7XG4gICAgICAvLyBOT05TVEFOREFSRCBiZWhhdmlvci5cbiAgICAgIGxhYmVsID0gbGFiZWwgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhsYWJlbCkgOiBERUZBVUxUX0VOQ09ESU5HO1xuICAgICAgdmFyIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcobGFiZWwpO1xuICAgICAgaWYgKGVuY29kaW5nID09PSBudWxsIHx8IGVuY29kaW5nLm5hbWUgPT09ICdyZXBsYWNlbWVudCcpXG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBsYWJlbCk7XG4gICAgICBpZiAoIWVuY29kZXJzW2VuY29kaW5nLm5hbWVdKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFbmNvZGVyIG5vdCBwcmVzZW50LicgK1xuICAgICAgICAgICAgICAgICAgICAnIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8nKTtcbiAgICAgIH1cbiAgICAgIGVuYy5fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IuXG4gICAgICBlbmMuX2VuY29kaW5nID0gZ2V0RW5jb2RpbmcoJ3V0Zi04Jyk7XG5cbiAgICAgIGlmIChsYWJlbCAhPT0gdW5kZWZpbmVkICYmICdjb25zb2xlJyBpbiBnbG9iYWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUZXh0RW5jb2RlciBjb25zdHJ1Y3RvciBjYWxsZWQgd2l0aCBlbmNvZGluZyBsYWJlbCwgJ1xuICAgICAgICAgICAgICAgICAgICAgKyAnd2hpY2ggaXMgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgcHJlLUVTNSBydW50aW1lczpcbiAgICBpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcbiAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIDMuIFJldHVybiBlbmMuXG4gICAgcmV0dXJuIGVuYztcbiAgfVxuXG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAvLyBUaGUgZW5jb2RpbmcgYXR0cmlidXRlJ3MgZ2V0dGVyIG11c3QgcmV0dXJuIGVuY29kaW5nJ3MgbmFtZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dEVuY29kZXIucHJvdG90eXBlLCAnZW5jb2RpbmcnLCB7XG4gICAgICAvKiogQHRoaXMge1RleHRFbmNvZGVyfSAqL1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKTsgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0cmluZyBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zXG4gICAqIEByZXR1cm4geyFVaW50OEFycmF5fSBFbmNvZGVkIGJ5dGVzLCBhcyBhIFVpbnQ4QXJyYXkuXG4gICAqL1xuICBUZXh0RW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG9wdF9zdHJpbmcsIG9wdGlvbnMpIHtcbiAgICBvcHRfc3RyaW5nID0gb3B0X3N0cmluZyA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcob3B0X3N0cmluZyk7XG4gICAgb3B0aW9ucyA9IFRvRGljdGlvbmFyeShvcHRpb25zKTtcblxuICAgIC8vIE5PVEU6IFRoaXMgb3B0aW9uIGlzIG5vbnN0YW5kYXJkLiBOb25lIG9mIHRoZSBlbmNvZGluZ3NcbiAgICAvLyBwZXJtaXR0ZWQgZm9yIGVuY29kaW5nIChpLmUuIFVURi04LCBVVEYtMTYpIGFyZSBzdGF0ZWZ1bCB3aGVuXG4gICAgLy8gdGhlIGlucHV0IGlzIGEgVVNWU3RyaW5nIHNvIHN0cmVhbWluZyBpcyBub3QgbmVjZXNzYXJ5LlxuICAgIGlmICghdGhpcy5fZG9fbm90X2ZsdXNoKVxuICAgICAgdGhpcy5fZW5jb2RlciA9IGVuY29kZXJzW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtcbiAgICAgICAgZmF0YWw6IHRoaXMuX2ZhdGFsID09PSAnZmF0YWwnfSk7XG4gICAgdGhpcy5fZG9fbm90X2ZsdXNoID0gQm9vbGVhbihvcHRpb25zWydzdHJlYW0nXSk7XG5cbiAgICAvLyAxLiBDb252ZXJ0IGlucHV0IHRvIGEgc3RyZWFtLlxuICAgIHZhciBpbnB1dCA9IG5ldyBTdHJlYW0oc3RyaW5nVG9Db2RlUG9pbnRzKG9wdF9zdHJpbmcpKTtcblxuICAgIC8vIDIuIExldCBvdXRwdXQgYmUgYSBuZXcgc3RyZWFtXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgLyoqIEB0eXBlIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSAqL1xuICAgIHZhciByZXN1bHQ7XG4gICAgLy8gMy4gV2hpbGUgdHJ1ZSwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLiBMZXQgdG9rZW4gYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGZyb20gaW5wdXQuXG4gICAgICB2YXIgdG9rZW4gPSBpbnB1dC5yZWFkKCk7XG4gICAgICBpZiAodG9rZW4gPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgdG9rZW4gZm9yIGVuY29kZXIsXG4gICAgICAvLyBpbnB1dCwgb3V0cHV0LlxuICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2Rlci5oYW5kbGVyKGlucHV0LCB0b2tlbik7XG4gICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgYnJlYWs7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICBlbHNlXG4gICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIC8vIFRPRE86IEFsaWduIHdpdGggc3BlYyBhbGdvcml0aG0uXG4gICAgaWYgKCF0aGlzLl9kb19ub3RfZmx1c2gpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZXIuaGFuZGxlcihpbnB1dCwgaW5wdXQucmVhZCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmluaXNoZWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHJlc3VsdCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VuY29kZXIgPSBudWxsO1xuICAgIH1cbiAgICAvLyAzLiBJZiByZXN1bHQgaXMgZmluaXNoZWQsIGNvbnZlcnQgb3V0cHV0IGludG8gYSBieXRlIHNlcXVlbmNlLFxuICAgIC8vIGFuZCB0aGVuIHJldHVybiBhIFVpbnQ4QXJyYXkgb2JqZWN0IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyXG4gICAgLy8gY29udGFpbmluZyBvdXRwdXQuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG91dHB1dCk7XG4gIH07XG5cblxuICAvL1xuICAvLyA5LiBUaGUgZW5jb2RpbmdcbiAgLy9cblxuICAvLyA5LjEgdXRmLThcblxuICAvLyA5LjEuMSB1dGYtOCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVVRGOERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG5cbiAgICAvLyB1dGYtOCdzIGRlY29kZXIncyBoYXMgYW4gYXNzb2NpYXRlZCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOFxuICAgIC8vIGJ5dGVzIHNlZW4sIGFuZCB1dGYtOCBieXRlcyBuZWVkZWQgKGFsbCBpbml0aWFsbHkgMCksIGEgdXRmLThcbiAgICAvLyBsb3dlciBib3VuZGFyeSAoaW5pdGlhbGx5IDB4ODApLCBhbmQgYSB1dGYtOCB1cHBlciBib3VuZGFyeVxuICAgIC8vIChpbml0aWFsbHkgMHhCRikuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2NvZGVfcG9pbnQgPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9ieXRlc19zZWVuID0gMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4QkY7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgdXRmLTggYnl0ZXMgbmVlZGVkIGlzIG5vdCAwLFxuICAgICAgLy8gc2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiB1dGY4X2J5dGVzX25lZWRlZCAhPT0gMCkge1xuICAgICAgICB1dGY4X2J5dGVzX25lZWRlZCA9IDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIHV0Zi04IGJ5dGVzIG5lZWRlZCBpcyAwLCBiYXNlZCBvbiBieXRlOlxuICAgICAgaWYgKHV0ZjhfYnl0ZXNfbmVlZGVkID09PSAwKSB7XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgICAgIHJldHVybiBiaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHhDMiB0byAweERGXG4gICAgICAgIGVsc2UgaWYgKGluUmFuZ2UoYml0ZSwgMHhDMiwgMHhERikpIHtcbiAgICAgICAgICAvLyAxLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDEuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAxO1xuXG4gICAgICAgICAgLy8gMi4gU2V0IFVURi04IGNvZGUgcG9pbnQgdG8gYnl0ZSAmIDB4MUYuXG4gICAgICAgICAgdXRmOF9jb2RlX3BvaW50ID0gYml0ZSAmIDB4MUY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEUwIHRvIDB4RUZcbiAgICAgICAgZWxzZSBpZiAoaW5SYW5nZShiaXRlLCAweEUwLCAweEVGKSkge1xuICAgICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgMHhFMCwgc2V0IHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIDB4QTAuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RTApXG4gICAgICAgICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHhBMDtcbiAgICAgICAgICAvLyAyLiBJZiBieXRlIGlzIDB4RUQsIHNldCB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweDlGLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEVEKVxuICAgICAgICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4OUY7XG4gICAgICAgICAgLy8gMy4gU2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAyLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMjtcbiAgICAgICAgICAvLyA0LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byBieXRlICYgMHhGLlxuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgJiAweEY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEYwIHRvIDB4RjRcbiAgICAgICAgZWxzZSBpZiAoaW5SYW5nZShiaXRlLCAweEYwLCAweEY0KSkge1xuICAgICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgMHhGMCwgc2V0IHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIDB4OTAuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RjApXG4gICAgICAgICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg5MDtcbiAgICAgICAgICAvLyAyLiBJZiBieXRlIGlzIDB4RjQsIHNldCB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweDhGLlxuICAgICAgICAgIGlmIChiaXRlID09PSAweEY0KVxuICAgICAgICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4OEY7XG4gICAgICAgICAgLy8gMy4gU2V0IHV0Zi04IGJ5dGVzIG5lZWRlZCB0byAzLlxuICAgICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMztcbiAgICAgICAgICAvLyA0LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byBieXRlICYgMHg3LlxuICAgICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IGJpdGUgJiAweDc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGVycm9yLlxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBub3QgaW4gdGhlIHJhbmdlIHV0Zi04IGxvd2VyIGJvdW5kYXJ5IHRvIHV0Zi04XG4gICAgICAvLyB1cHBlciBib3VuZGFyeSwgaW5jbHVzaXZlLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoIWluUmFuZ2UoYml0ZSwgdXRmOF9sb3dlcl9ib3VuZGFyeSwgdXRmOF91cHBlcl9ib3VuZGFyeSkpIHtcblxuICAgICAgICAvLyAxLiBTZXQgdXRmLTggY29kZSBwb2ludCwgdXRmLTggYnl0ZXMgbmVlZGVkLCBhbmQgdXRmLThcbiAgICAgICAgLy8gYnl0ZXMgc2VlbiB0byAwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCwgYW5kIHNldFxuICAgICAgICAvLyB1dGYtOCB1cHBlciBib3VuZGFyeSB0byAweEJGLlxuICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2J5dGVzX25lZWRlZCA9IHV0ZjhfYnl0ZXNfc2VlbiA9IDA7XG4gICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwO1xuICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHhCRjtcblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChiaXRlKTtcblxuICAgICAgICAvLyAzLiBSZXR1cm4gZXJyb3IuXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBTZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg4MCBhbmQgdXRmLTggdXBwZXIgYm91bmRhcnlcbiAgICAgIC8vIHRvIDB4QkYuXG4gICAgICB1dGY4X2xvd2VyX2JvdW5kYXJ5ID0gMHg4MDtcbiAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgICAvLyA2LiBTZXQgVVRGLTggY29kZSBwb2ludCB0byAoVVRGLTggY29kZSBwb2ludCA8PCA2KSB8IChieXRlICZcbiAgICAgIC8vIDB4M0YpXG4gICAgICB1dGY4X2NvZGVfcG9pbnQgPSAodXRmOF9jb2RlX3BvaW50IDw8IDYpIHwgKGJpdGUgJiAweDNGKTtcblxuICAgICAgLy8gNy4gSW5jcmVhc2UgdXRmLTggYnl0ZXMgc2VlbiBieSBvbmUuXG4gICAgICB1dGY4X2J5dGVzX3NlZW4gKz0gMTtcblxuICAgICAgLy8gOC4gSWYgdXRmLTggYnl0ZXMgc2VlbiBpcyBub3QgZXF1YWwgdG8gdXRmLTggYnl0ZXMgbmVlZGVkLFxuICAgICAgLy8gY29udGludWUuXG4gICAgICBpZiAodXRmOF9ieXRlc19zZWVuICE9PSB1dGY4X2J5dGVzX25lZWRlZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIDkuIExldCBjb2RlIHBvaW50IGJlIHV0Zi04IGNvZGUgcG9pbnQuXG4gICAgICB2YXIgY29kZV9wb2ludCA9IHV0ZjhfY29kZV9wb2ludDtcblxuICAgICAgLy8gMTAuIFNldCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOCBieXRlcyBuZWVkZWQsIGFuZCB1dGYtOCBieXRlc1xuICAgICAgLy8gc2VlbiB0byAwLlxuICAgICAgdXRmOF9jb2RlX3BvaW50ID0gdXRmOF9ieXRlc19uZWVkZWQgPSB1dGY4X2J5dGVzX3NlZW4gPSAwO1xuXG4gICAgICAvLyAxMS4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDkuMS4yIHV0Zi04IGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEY4RW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gU2V0IGNvdW50IGFuZCBvZmZzZXQgYmFzZWQgb24gdGhlIHJhbmdlIGNvZGUgcG9pbnQgaXMgaW46XG4gICAgICB2YXIgY291bnQsIG9mZnNldDtcbiAgICAgIC8vIFUrMDA4MCB0byBVKzA3RkYsIGluY2x1c2l2ZTpcbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDA4MCwgMHgwN0ZGKSkge1xuICAgICAgICAvLyAxIGFuZCAweEMwXG4gICAgICAgIGNvdW50ID0gMTtcbiAgICAgICAgb2Zmc2V0ID0gMHhDMDtcbiAgICAgIH1cbiAgICAgIC8vIFUrMDgwMCB0byBVK0ZGRkYsIGluY2x1c2l2ZTpcbiAgICAgIGVsc2UgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwODAwLCAweEZGRkYpKSB7XG4gICAgICAgIC8vIDIgYW5kIDB4RTBcbiAgICAgICAgY291bnQgPSAyO1xuICAgICAgICBvZmZzZXQgPSAweEUwO1xuICAgICAgfVxuICAgICAgLy8gVSsxMDAwMCB0byBVKzEwRkZGRiwgaW5jbHVzaXZlOlxuICAgICAgZWxzZSBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDEwMDAwLCAweDEwRkZGRikpIHtcbiAgICAgICAgLy8gMyBhbmQgMHhGMFxuICAgICAgICBjb3VudCA9IDM7XG4gICAgICAgIG9mZnNldCA9IDB4RjA7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIExldCBieXRlcyBiZSBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgZmlyc3QgYnl0ZSBpcyAoY29kZVxuICAgICAgLy8gcG9pbnQgPj4gKDYgw5cgY291bnQpKSArIG9mZnNldC5cbiAgICAgIHZhciBieXRlcyA9IFsoY29kZV9wb2ludCA+PiAoNiAqIGNvdW50KSkgKyBvZmZzZXRdO1xuXG4gICAgICAvLyA1LiBSdW4gdGhlc2Ugc3Vic3RlcHMgd2hpbGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIDA6XG4gICAgICB3aGlsZSAoY291bnQgPiAwKSB7XG5cbiAgICAgICAgLy8gMS4gU2V0IHRlbXAgdG8gY29kZSBwb2ludCA+PiAoNiDDlyAoY291bnQg4oiSIDEpKS5cbiAgICAgICAgdmFyIHRlbXAgPSBjb2RlX3BvaW50ID4+ICg2ICogKGNvdW50IC0gMSkpO1xuXG4gICAgICAgIC8vIDIuIEFwcGVuZCB0byBieXRlcyAweDgwIHwgKHRlbXAgJiAweDNGKS5cbiAgICAgICAgYnl0ZXMucHVzaCgweDgwIHwgKHRlbXAgJiAweDNGKSk7XG5cbiAgICAgICAgLy8gMy4gRGVjcmVhc2UgY291bnQgYnkgb25lLlxuICAgICAgICBjb3VudCAtPSAxO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBSZXR1cm4gYnl0ZXMgYnl0ZXMsIGluIG9yZGVyLlxuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydVVEYtOCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGOEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ1VURi04J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEY4RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvL1xuICAvLyAxMC4gTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDEwLjEgc2luZ2xlLWJ5dGUgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gaW5kZXggVGhlIGVuY29kaW5nIGluZGV4LlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNpbmdsZUJ5dGVEZWNvZGVyKGluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBhbiBBU0NJSSBieXRlLCByZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlXG4gICAgICAvLyBpcyBieXRlLlxuICAgICAgaWYgKGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gMy4gTGV0IGNvZGUgcG9pbnQgYmUgdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIGJ5dGUg4oiSIDB4ODAgaW5cbiAgICAgIC8vIGluZGV4IHNpbmdsZS1ieXRlLlxuICAgICAgdmFyIGNvZGVfcG9pbnQgPSBpbmRleFtiaXRlIC0gMHg4MF07XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTAuMiBzaW5nbGUtYnl0ZSBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7IUFycmF5Ljw/bnVtYmVyPn0gaW5kZXggVGhlIGVuY29kaW5nIGluZGV4LlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNpbmdsZUJ5dGVFbmNvZGVyKGluZGV4LCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIHNpbmdsZS1ieXRlLlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBieXRlIHdob3NlIHZhbHVlIGlzIHBvaW50ZXIgKyAweDgwLlxuICAgICAgcmV0dXJuIHBvaW50ZXIgKyAweDgwO1xuICAgIH07XG4gIH1cblxuICAoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEoJ2VuY29kaW5nLWluZGV4ZXMnIGluIGdsb2JhbCkpXG4gICAgICByZXR1cm47XG4gICAgZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgIGlmIChjYXRlZ29yeS5oZWFkaW5nICE9PSAnTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncycpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhdGVnb3J5LmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgIHZhciBuYW1lID0gZW5jb2RpbmcubmFtZTtcbiAgICAgICAgdmFyIGlkeCA9IGluZGV4KG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgICAgICAgZGVjb2RlcnNbbmFtZV0gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVCeXRlRGVjb2RlcihpZHgsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gICAgICAgIGVuY29kZXJzW25hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlQnl0ZUVuY29kZXIoaWR4LCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KCkpO1xuXG4gIC8vXG4gIC8vIDExLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMS4xIGdia1xuXG4gIC8vIDExLjEuMSBnYmsgZGVjb2RlclxuICAvLyBnYmsncyBkZWNvZGVyIGlzIGdiMTgwMzAncyBkZWNvZGVyLlxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydHQksnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDExLjEuMiBnYmsgZW5jb2RlclxuICAvLyBnYmsncyBlbmNvZGVyIGlzIGdiMTgwMzAncyBlbmNvZGVyIHdpdGggaXRzIGdiayBmbGFnIHNldC5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snR0JLJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCB0cnVlKTtcbiAgfTtcblxuICAvLyAxMS4yIGdiMTgwMzBcblxuICAvLyAxMS4yLjEgZ2IxODAzMCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gR0IxODAzMERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2IxODAzMCBmaXJzdCwgZ2IxODAzMFxuICAgIC8vIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgKGFsbCBpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBnYjE4MDMwX2ZpcnN0ID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfc2Vjb25kID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIGFyZSAweDAwLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBnYjE4MDMwX2ZpcnN0ID09PSAweDAwICYmXG4gICAgICAgICAgZ2IxODAzMF9zZWNvbmQgPT09IDB4MDAgJiYgZ2IxODAzMF90aGlyZCA9PT0gMHgwMCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0sIGFuZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgICAvLyBzZWNvbmQsIG9yIGdiMTgwMzAgdGhpcmQgaXMgbm90IDB4MDAsIHNldCBnYjE4MDMwIGZpcnN0LFxuICAgICAgLy8gZ2IxODAzMCBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJlxuICAgICAgICAgIChnYjE4MDMwX2ZpcnN0ICE9PSAweDAwIHx8IGdiMTgwMzBfc2Vjb25kICE9PSAweDAwIHx8XG4gICAgICAgICAgIGdiMTgwMzBfdGhpcmQgIT09IDB4MDApKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuICAgICAgICBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuICAgICAgdmFyIGNvZGVfcG9pbnQ7XG4gICAgICAvLyAzLiBJZiBnYjE4MDMwIHRoaXJkIGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF90aGlyZCAhPT0gMHgwMCkge1xuICAgICAgICAvLyAxLiBMZXQgY29kZSBwb2ludCBiZSBudWxsLlxuICAgICAgICBjb2RlX3BvaW50ID0gbnVsbDtcbiAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDM5LCBpbmNsdXNpdmUsIHNldFxuICAgICAgICAvLyBjb2RlIHBvaW50IHRvIHRoZSBpbmRleCBnYjE4MDMwIHJhbmdlcyBjb2RlIHBvaW50IGZvclxuICAgICAgICAvLyAoKChnYjE4MDMwIGZpcnN0IOKIkiAweDgxKSDDlyAxMCArIGdiMTgwMzAgc2Vjb25kIOKIkiAweDMwKSDDl1xuICAgICAgICAvLyAxMjYgKyBnYjE4MDMwIHRoaXJkIOKIkiAweDgxKSDDlyAxMCArIGJ5dGUg4oiSIDB4MzAuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MzAsIDB4MzkpKSB7XG4gICAgICAgICAgY29kZV9wb2ludCA9IGluZGV4R0IxODAzMFJhbmdlc0NvZGVQb2ludEZvcihcbiAgICAgICAgICAgICAgKCgoZ2IxODAzMF9maXJzdCAtIDB4ODEpICogMTAgKyBnYjE4MDMwX3NlY29uZCAtIDB4MzApICogMTI2ICtcbiAgICAgICAgICAgICAgIGdiMTgwMzBfdGhpcmQgLSAweDgxKSAqIDEwICsgYml0ZSAtIDB4MzApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gTGV0IGJ1ZmZlciBiZSBhIGJ5dGUgc2VxdWVuY2UgY29uc2lzdGluZyBvZiBnYjE4MDMwXG4gICAgICAgIC8vIHNlY29uZCwgZ2IxODAzMCB0aGlyZCwgYW5kIGJ5dGUsIGluIG9yZGVyLlxuICAgICAgICB2YXIgYnVmZmVyID0gW2diMTgwMzBfc2Vjb25kLCBnYjE4MDMwX3RoaXJkLCBiaXRlXTtcblxuICAgICAgICAvLyA0LiBTZXQgZ2IxODAzMCBmaXJzdCwgZ2IxODAzMCBzZWNvbmQsIGFuZCBnYjE4MDMwIHRoaXJkIHRvXG4gICAgICAgIC8vIDB4MDAuXG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfdGhpcmQgPSAweDAwO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcHJlcGVuZCBidWZmZXIgdG8gc3RyZWFtIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKSB7XG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYnVmZmVyKTtcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGdiMTgwMzAgc2Vjb25kIGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF9zZWNvbmQgIT09IDB4MDApIHtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgdGhpcmQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICAgIGdiMTgwMzBfdGhpcmQgPSBiaXRlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCBnYjE4MDMwIHNlY29uZCBmb2xsb3dlZCBieSBieXRlIHRvIHN0cmVhbSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgYW5kIGdiMTgwMzAgc2Vjb25kIHRvIDB4MDAsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKFtnYjE4MDMwX3NlY29uZCwgYml0ZV0pO1xuICAgICAgICBnYjE4MDMwX2ZpcnN0ID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF9zZWNvbmQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgZ2IxODAzMCBmaXJzdCBpcyBub3QgMHgwMCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKGdiMTgwMzBfZmlyc3QgIT09IDB4MDApIHtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDMwIHRvIDB4MzksIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgc2Vjb25kIHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgzMCwgMHgzOSkpIHtcbiAgICAgICAgICBnYjE4MDMwX3NlY29uZCA9IGJpdGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBMZXQgbGVhZCBiZSBnYjE4MDMwIGZpcnN0LCBsZXQgcG9pbnRlciBiZSBudWxsLCBhbmQgc2V0XG4gICAgICAgIC8vIGdiMTgwMzAgZmlyc3QgdG8gMHgwMC5cbiAgICAgICAgdmFyIGxlYWQgPSBnYjE4MDMwX2ZpcnN0O1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuXG4gICAgICAgIC8vIDMuIExldCBvZmZzZXQgYmUgMHg0MCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGIGFuZCAweDQxXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IGJpdGUgPCAweDdGID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFLCBpbmNsdXNpdmUsIG9yIDB4ODBcbiAgICAgICAgLy8gdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgMHg4MSkgw5cgMTkwICtcbiAgICAgICAgLy8gKGJ5dGUg4oiSIG9mZnNldCkuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHg4MCwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyAoYml0ZSAtIG9mZnNldCk7XG5cbiAgICAgICAgLy8gNS4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCBpZiBwb2ludGVyIGlzIG51bGwgYW5kIHRoZSBpbmRleFxuICAgICAgICAvLyBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGdiMTgwMzAgb3RoZXJ3aXNlLlxuICAgICAgICBjb2RlX3BvaW50ID0gcG9pbnRlciA9PT0gbnVsbCA/IG51bGwgOlxuICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2diMTgwMzAnKSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4ODAsIHJldHVybiBjb2RlIHBvaW50IFUrMjBBQy5cbiAgICAgIGlmIChiaXRlID09PSAweDgwKVxuICAgICAgICByZXR1cm4gMHgyMEFDO1xuXG4gICAgICAvLyA4LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAvLyBnYjE4MDMwIGZpcnN0IHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gOS4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDExLjIuMiBnYjE4MDMwIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGdia19mbGFnXG4gICAqL1xuICBmdW5jdGlvbiBHQjE4MDMwRW5jb2RlcihvcHRpb25zLCBnYmtfZmxhZykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gZ2IxODAzMCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZ2JrIGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVStFNUU1LCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4RTVFNSlcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNC4gSWYgdGhlIGdiayBmbGFnIGlzIHNldCBhbmQgY29kZSBwb2ludCBpcyBVKzIwQUMsIHJldHVyblxuICAgICAgLy8gYnl0ZSAweDgwLlxuICAgICAgaWYgKGdia19mbGFnICYmIGNvZGVfcG9pbnQgPT09IDB4MjBBQylcbiAgICAgICAgcmV0dXJuIDB4ODA7XG5cbiAgICAgIC8vIDUuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBnYjE4MDMwLlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2diMTgwMzAnKSk7XG5cbiAgICAgIC8vIDYuIElmIHBvaW50ZXIgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChwb2ludGVyICE9PSBudWxsKSB7XG5cbiAgICAgICAgLy8gMS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE5MCkgKyAweDgxLlxuICAgICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxOTApICsgMHg4MTtcblxuICAgICAgICAvLyAyLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE5MC5cbiAgICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDE5MDtcblxuICAgICAgICAvLyAzLiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YgYW5kIDB4NDEgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgb2Zmc2V0ID0gdHJhaWwgPCAweDNGID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gNC4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsICsgb2Zmc2V0LlxuICAgICAgICByZXR1cm4gW2xlYWQsIHRyYWlsICsgb2Zmc2V0XTtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gSWYgZ2JrIGZsYWcgaXMgc2V0LCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKGdia19mbGFnKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBTZXQgcG9pbnRlciB0byB0aGUgaW5kZXggZ2IxODAzMCByYW5nZXMgcG9pbnRlciBmb3IgY29kZVxuICAgICAgLy8gcG9pbnQuXG4gICAgICBwb2ludGVyID0gaW5kZXhHQjE4MDMwUmFuZ2VzUG9pbnRlckZvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGJ5dGUxIGJlIGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNiAvIDEwKS5cbiAgICAgIHZhciBieXRlMSA9IGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNiAvIDEwKTtcblxuICAgICAgLy8gMTAuIFNldCBwb2ludGVyIHRvIHBvaW50ZXIg4oiSIGJ5dGUxIMOXIDEwIMOXIDEyNiDDlyAxMC5cbiAgICAgIHBvaW50ZXIgPSBwb2ludGVyIC0gYnl0ZTEgKiAxMCAqIDEyNiAqIDEwO1xuXG4gICAgICAvLyAxMS4gTGV0IGJ5dGUyIGJlIGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNikuXG4gICAgICB2YXIgYnl0ZTIgPSBmbG9vcihwb2ludGVyIC8gMTAgLyAxMjYpO1xuXG4gICAgICAvLyAxMi4gU2V0IHBvaW50ZXIgdG8gcG9pbnRlciDiiJIgYnl0ZTIgw5cgMTAgw5cgMTI2LlxuICAgICAgcG9pbnRlciA9IHBvaW50ZXIgLSBieXRlMiAqIDEwICogMTI2O1xuXG4gICAgICAvLyAxMy4gTGV0IGJ5dGUzIGJlIGZsb29yKHBvaW50ZXIgLyAxMCkuXG4gICAgICB2YXIgYnl0ZTMgPSBmbG9vcihwb2ludGVyIC8gMTApO1xuXG4gICAgICAvLyAxNC4gTGV0IGJ5dGU0IGJlIHBvaW50ZXIg4oiSIGJ5dGUzIMOXIDEwLlxuICAgICAgdmFyIGJ5dGU0ID0gcG9pbnRlciAtIGJ5dGUzICogMTA7XG5cbiAgICAgIC8vIDE1LiBSZXR1cm4gZm91ciBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGJ5dGUxICsgMHg4MSwgYnl0ZTIgK1xuICAgICAgLy8gMHgzMCwgYnl0ZTMgKyAweDgxLCBieXRlNCArIDB4MzAuXG4gICAgICByZXR1cm4gW2J5dGUxICsgMHg4MSxcbiAgICAgICAgICAgICAgYnl0ZTIgKyAweDMwLFxuICAgICAgICAgICAgICBieXRlMyArIDB4ODEsXG4gICAgICAgICAgICAgIGJ5dGU0ICsgMHgzMF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ2diMTgwMzAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydnYjE4MDMwJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHQjE4MDMwRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDEyLiBMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTIuMSBCaWc1XG5cbiAgLy8gMTIuMS4xIEJpZzUgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEJpZzVEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIEJpZzUncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIEJpZzUgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gQmlnNV9sZWFkID0gMHgwMDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBCaWc1IGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gQmlnNSBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIEJpZzVfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBCaWc1X2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBCaWc1IGxlYWQgaXMgMHgwMCwgcmV0dXJuXG4gICAgICAvLyBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIEJpZzVfbGVhZCA9PT0gMHgwMClcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBCaWc1IGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIEJpZzUgbGVhZCwgbGV0XG4gICAgICAvLyBwb2ludGVyIGJlIG51bGwsIHNldCBCaWc1IGxlYWQgdG8gMHgwMCwgYW5kIHRoZW4gcnVuIHRoZXNlXG4gICAgICAvLyBzdWJzdGVwczpcbiAgICAgIGlmIChCaWc1X2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBCaWc1X2xlYWQ7XG4gICAgICAgIHZhciBwb2ludGVyID0gbnVsbDtcbiAgICAgICAgQmlnNV9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgYnl0ZSBpcyBsZXNzIHRoYW4gMHg3RiBhbmQgMHg2MlxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSBiaXRlIDwgMHg3RiA/IDB4NDAgOiAweDYyO1xuXG4gICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSwgaW5jbHVzaXZlLCBvciAweEExXG4gICAgICAgIC8vIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE1NyArXG4gICAgICAgIC8vIChieXRlIOKIkiBvZmZzZXQpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQwLCAweDdFKSB8fCBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHBvaW50ZXIgPSAobGVhZCAtIDB4ODEpICogMTU3ICsgKGJpdGUgLSBvZmZzZXQpO1xuXG4gICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGEgcm93IGluIHRoZSB0YWJsZSBiZWxvdyB3aG9zZSBmaXJzdCBjb2x1bW5cbiAgICAgICAgLy8gaXMgcG9pbnRlciwgcmV0dXJuIHRoZSB0d28gY29kZSBwb2ludHMgbGlzdGVkIGluIGl0cyBzZWNvbmRcbiAgICAgICAgLy8gY29sdW1uXG4gICAgICAgIC8vIFBvaW50ZXIgfCBDb2RlIHBvaW50c1xuICAgICAgICAvLyAtLS0tLS0tLSstLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyAxMTMzICAgIHwgVSswMENBIFUrMDMwNFxuICAgICAgICAvLyAxMTM1ICAgIHwgVSswMENBIFUrMDMwQ1xuICAgICAgICAvLyAxMTY0ICAgIHwgVSswMEVBIFUrMDMwNFxuICAgICAgICAvLyAxMTY2ICAgIHwgVSswMEVBIFUrMDMwQ1xuICAgICAgICBzd2l0Y2ggKHBvaW50ZXIpIHtcbiAgICAgICAgICBjYXNlIDExMzM6IHJldHVybiBbMHgwMENBLCAweDAzMDRdO1xuICAgICAgICAgIGNhc2UgMTEzNTogcmV0dXJuIFsweDAwQ0EsIDB4MDMwQ107XG4gICAgICAgICAgY2FzZSAxMTY0OiByZXR1cm4gWzB4MDBFQSwgMHgwMzA0XTtcbiAgICAgICAgICBjYXNlIDExNjY6IHJldHVybiBbMHgwMEVBLCAweDAzMENdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCBpZiBwb2ludGVyIGlzIG51bGwgYW5kIHRoZSBpbmRleFxuICAgICAgICAvLyBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IEJpZzUgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IChwb2ludGVyID09PSBudWxsKSA/IG51bGwgOlxuICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2JpZzUnKSk7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA3LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0IEJpZzVcbiAgICAgIC8vIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHhGRSkpIHtcbiAgICAgICAgQmlnNV9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxMi4xLjIgQmlnNSBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gQmlnNUVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBCaWc1IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4QmlnNVBvaW50ZXJGb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gMTU3KSArIDB4ODEuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxNTcpICsgMHg4MTtcblxuICAgICAgLy8gNi4gSWYgbGVhZCBpcyBsZXNzIHRoYW4gMHhBMSwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChsZWFkIDwgMHhBMSlcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNy4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxNTcuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgMTU3O1xuXG4gICAgICAvLyA4LiBMZXQgb2Zmc2V0IGJlIDB4NDAgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YgYW5kIDB4NjJcbiAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgIHZhciBvZmZzZXQgPSB0cmFpbCA8IDB4M0YgPyAweDQwIDogMHg2MjtcblxuICAgICAgLy8gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsICsgb2Zmc2V0LlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbCArIG9mZnNldF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ0JpZzUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJpZzVFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydCaWc1J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBCaWc1RGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDEzLiBMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMy4xIGV1Yy1qcFxuXG4gIC8vIDEzLjEuMSBldWMtanAgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0pQRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIGV1Yy1qcCdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZXVjLWpwIGppczAyMTIgZmxhZ1xuICAgIC8vIChpbml0aWFsbHkgdW5zZXQpIGFuZCBldWMtanAgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge2Jvb2xlYW59ICovIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZXVjanBfbGVhZCA9IDB4MDA7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWpwIGxlYWQgaXMgbm90IDB4MDAsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2pwX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1qcCBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNqcF9sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEUgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4REYsIGluY2x1c2l2ZSwgc2V0IGV1Yy1qcCBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBhIGNvZGVcbiAgICAgIC8vIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4RkY2MSDiiJIgMHhBMSArIGJ5dGUuXG4gICAgICBpZiAoZXVjanBfbGVhZCA9PT0gMHg4RSAmJiBpblJhbmdlKGJpdGUsIDB4QTEsIDB4REYpKSB7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gMHhGRjYxIC0gMHhBMSArIGJpdGU7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGV1Yy1qcCBsZWFkIGlzIDB4OEYgYW5kIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4QTEgdG9cbiAgICAgIC8vIDB4RkUsIGluY2x1c2l2ZSwgc2V0IHRoZSBldWMtanAgamlzMDIxMiBmbGFnLCBzZXQgZXVjLWpwIGxlYWRcbiAgICAgIC8vIHRvIGJ5dGUsIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoZXVjanBfbGVhZCA9PT0gMHg4RiAmJiBpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKSB7XG4gICAgICAgIGV1Y2pwX2ppczAyMTJfZmxhZyA9IHRydWU7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgZXVjLWpwIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIGV1Yy1qcCBsZWFkLCBzZXRcbiAgICAgIC8vIGV1Yy1qcCBsZWFkIHRvIDB4MDAsIGFuZCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZXVjanBfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IGV1Y2pwX2xlYWQ7XG4gICAgICAgIGV1Y2pwX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIExldCBjb2RlIHBvaW50IGJlIG51bGwuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gbnVsbDtcblxuICAgICAgICAvLyAyLiBJZiBsZWFkIGFuZCBieXRlIGFyZSBib3RoIGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsXG4gICAgICAgIC8vIGluY2x1c2l2ZSwgc2V0IGNvZGUgcG9pbnQgdG8gdGhlIGluZGV4IGNvZGUgcG9pbnQgZm9yIChsZWFkXG4gICAgICAgIC8vIOKIkiAweEExKSDDlyA5NCArIGJ5dGUg4oiSIDB4QTEgaW4gaW5kZXggamlzMDIwOCBpZiB0aGUgZXVjLWpwXG4gICAgICAgIC8vIGppczAyMTIgZmxhZyBpcyB1bnNldCBhbmQgaW4gaW5kZXggamlzMDIxMiBvdGhlcndpc2UuXG4gICAgICAgIGlmIChpblJhbmdlKGxlYWQsIDB4QTEsIDB4RkUpICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgICBjb2RlX3BvaW50ID0gaW5kZXhDb2RlUG9pbnRGb3IoXG4gICAgICAgICAgICAobGVhZCAtIDB4QTEpICogOTQgKyAoYml0ZSAtIDB4QTEpLFxuICAgICAgICAgICAgaW5kZXgoIWV1Y2pwX2ppczAyMTJfZmxhZyA/ICdqaXMwMjA4JyA6ICdqaXMwMjEyJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gVW5zZXQgdGhlIGV1Yy1qcCBqaXMwMjEyIGZsYWcuXG4gICAgICAgIGV1Y2pwX2ppczAyMTJfZmxhZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIDQuIElmIGJ5dGUgaXMgbm90IGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsIGluY2x1c2l2ZSxcbiAgICAgICAgLy8gcHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKCFpblJhbmdlKGJpdGUsIDB4QTEsIDB4RkUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA2LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA3LiBJZiBieXRlIGlzIDB4OEUsIDB4OEYsIG9yIGluIHRoZSByYW5nZSAweEExIHRvIDB4RkUsXG4gICAgICAvLyBpbmNsdXNpdmUsIHNldCBldWMtanAgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoYml0ZSA9PT0gMHg4RSB8fCBiaXRlID09PSAweDhGIHx8IGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA4LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTMuMS4yIGV1Yy1qcCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDSlBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlIHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDAwQTUpXG4gICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwM0UpXG4gICAgICAgIHJldHVybiAweDdFO1xuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0ZGNjEgdG8gVStGRjlGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgMHg4RSBhbmQgY29kZSBwb2ludCDiiJJcbiAgICAgIC8vIDB4RkY2MSArIDB4QTEuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEZGNjEsIDB4RkY5RikpXG4gICAgICAgIHJldHVybiBbMHg4RSwgY29kZV9wb2ludCAtIDB4RkY2MSArIDB4QTFdO1xuXG4gICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIFUrMjIxMiwgc2V0IGl0IHRvIFUrRkYwRC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIyMTIpXG4gICAgICAgIGNvZGVfcG9pbnQgPSAweEZGMEQ7XG5cbiAgICAgIC8vIDcuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBqaXMwMjA4LlxuICAgICAgdmFyIHBvaW50ZXIgPSBpbmRleFBvaW50ZXJGb3IoY29kZV9wb2ludCwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgIC8vIDguIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA5LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gOTQpICsgMHhBMS5cbiAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDk0KSArIDB4QTE7XG5cbiAgICAgIC8vIDEwLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDk0ICsgMHhBMS5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSA5NCArIDB4QTE7XG5cbiAgICAgIC8vIDExLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snRVVDLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNKUEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ0VVQy1KUCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDSlBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEzLjIgaXNvLTIwMjItanBcblxuICAvLyAxMy4yLjEgaXNvLTIwMjItanAgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIElTTzIwMjJKUERlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqIEBlbnVtICovXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgIEFTQ0lJOiAwLFxuICAgICAgUm9tYW46IDEsXG4gICAgICBLYXRha2FuYTogMixcbiAgICAgIExlYWRCeXRlOiAzLFxuICAgICAgVHJhaWxCeXRlOiA0LFxuICAgICAgRXNjYXBlU3RhcnQ6IDUsXG4gICAgICBFc2NhcGU6IDZcbiAgICB9O1xuICAgIC8vIGlzby0yMDIyLWpwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBpc28tMjAyMi1qcCBkZWNvZGVyXG4gICAgLy8gc3RhdGUgKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlXG4gICAgLy8gKGluaXRpYWxseSBBU0NJSSksIGlzby0yMDIyLWpwIGxlYWQgKGluaXRpYWxseSAweDAwKSwgYW5kXG4gICAgLy8gaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZSA9IHN0YXRlcy5BU0NJSSxcbiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9sZWFkID0gMHgwMCxcbiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLyBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIHN3aXRjaGluZyBvbiBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlOlxuICAgICAgc3dpdGNoIChpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2Ugc3RhdGVzLkFTQ0lJOlxuICAgICAgICAvLyBBU0NJSVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgwMCB0byAweDdGLCBleGNsdWRpbmcgMHgwRSwgMHgwRiwgYW5kIDB4MUJcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikgJiYgYml0ZSAhPT0gMHgwRVxuICAgICAgICAgICAgJiYgYml0ZSAhPT0gMHgwRiAmJiBiaXRlICE9PSAweDFCKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlJvbWFuOlxuICAgICAgICAvLyBSb21hblxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHg1Q1xuICAgICAgICBpZiAoYml0ZSA9PT0gMHg1Qykge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyBVKzAwQTUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIDB4MDBBNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4N0VcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4N0UpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gVSsyMDNFLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAweDIwM0U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDAwIHRvIDB4N0YsIGV4Y2x1ZGluZyAweDBFLCAweDBGLCAweDFCLCAweDVDLCBhbmQgMHg3RVxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSAmJiBiaXRlICE9PSAweDBFICYmIGJpdGUgIT09IDB4MEZcbiAgICAgICAgICAgICYmIGJpdGUgIT09IDB4MUIgJiYgYml0ZSAhPT0gMHg1QyAmJiBiaXRlICE9PSAweDdFKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkthdGFrYW5hOlxuICAgICAgICAvLyBLYXRha2FuYVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDVGXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4NUYpKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgMHhGRjYxIOKIkiAweDIxICsgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gMHhGRjYxIC0gMHgyMSArIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIGZpbmlzaGVkLlxuICAgICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICBjYXNlIHN0YXRlcy5MZWFkQnl0ZTpcbiAgICAgICAgLy8gTGVhZCBieXRlXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDIxIHRvIDB4N0VcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgyMSwgMHg3RSkpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcCBsZWFkXG4gICAgICAgICAgLy8gdG8gYnl0ZSwgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byB0cmFpbCBieXRlLCBhbmRcbiAgICAgICAgICAvLyByZXR1cm4gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSBiaXRlO1xuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLlRyYWlsQnl0ZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLlRyYWlsQnl0ZTpcbiAgICAgICAgLy8gVHJhaWwgYnl0ZVxuICAgICAgICAvLyBCYXNlZCBvbiBieXRlOlxuXG4gICAgICAgIC8vIDB4MUJcbiAgICAgICAgaWYgKGJpdGUgPT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUgc3RhcnQgYW5kIHJldHVyblxuICAgICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZVN0YXJ0O1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHgyMSB0byAweDdFXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MjEsIDB4N0UpKSB7XG4gICAgICAgICAgLy8gMS4gU2V0IHRoZSBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcblxuICAgICAgICAgIC8vIDIuIExldCBwb2ludGVyIGJlIChpc28tMjAyMi1qcCBsZWFkIOKIkiAweDIxKSDDlyA5NCArIGJ5dGUg4oiSIDB4MjEuXG4gICAgICAgICAgdmFyIHBvaW50ZXIgPSAoaXNvMjAyMmpwX2xlYWQgLSAweDIxKSAqIDk0ICsgYml0ZSAtIDB4MjE7XG5cbiAgICAgICAgICAvLyAzLiBMZXQgY29kZSBwb2ludCBiZSB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgcG9pbnRlciBpblxuICAgICAgICAgIC8vIGluZGV4IGppczAyMDguXG4gICAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtXG4gICAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAgIC8vIGJ5dGUgdG8gc3RyZWFtLCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGxlYWQgYnl0ZSBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkVzY2FwZVN0YXJ0OlxuICAgICAgICAvLyBFc2NhcGUgc3RhcnRcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGVpdGhlciAweDI0IG9yIDB4MjgsIHNldCBpc28tMjAyMi1qcCBsZWFkIHRvXG4gICAgICAgIC8vIGJ5dGUsIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlLCBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgyNCB8fCBiaXRlID09PSAweDI4KSB7XG4gICAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSBiaXRlO1xuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkVzY2FwZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDMuIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZywgc2V0IGlzby0yMDIyLWpwXG4gICAgICAgIC8vIGRlY29kZXIgc3RhdGUgdG8gaXNvLTIwMjItanAgZGVjb2RlciBvdXRwdXQgc3RhdGUsIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkVzY2FwZTpcbiAgICAgICAgLy8gRXNjYXBlXG5cbiAgICAgICAgLy8gMS4gTGV0IGxlYWQgYmUgaXNvLTIwMjItanAgbGVhZCBhbmQgc2V0IGlzby0yMDIyLWpwIGxlYWQgdG9cbiAgICAgICAgLy8gMHgwMC5cbiAgICAgICAgdmFyIGxlYWQgPSBpc28yMDIyanBfbGVhZDtcbiAgICAgICAgaXNvMjAyMmpwX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDIuIExldCBzdGF0ZSBiZSBudWxsLlxuICAgICAgICB2YXIgc3RhdGUgPSBudWxsO1xuXG4gICAgICAgIC8vIDMuIElmIGxlYWQgaXMgMHgyOCBhbmQgYnl0ZSBpcyAweDQyLCBzZXQgc3RhdGUgdG8gQVNDSUkuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI4ICYmIGJpdGUgPT09IDB4NDIpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuQVNDSUk7XG5cbiAgICAgICAgLy8gNC4gSWYgbGVhZCBpcyAweDI4IGFuZCBieXRlIGlzIDB4NEEsIHNldCBzdGF0ZSB0byBSb21hbi5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjggJiYgYml0ZSA9PT0gMHg0QSlcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5Sb21hbjtcblxuICAgICAgICAvLyA1LiBJZiBsZWFkIGlzIDB4MjggYW5kIGJ5dGUgaXMgMHg0OSwgc2V0IHN0YXRlIHRvIEthdGFrYW5hLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyOCAmJiBiaXRlID09PSAweDQ5KVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLkthdGFrYW5hO1xuXG4gICAgICAgIC8vIDYuIElmIGxlYWQgaXMgMHgyNCBhbmQgYnl0ZSBpcyBlaXRoZXIgMHg0MCBvciAweDQyLCBzZXRcbiAgICAgICAgLy8gc3RhdGUgdG8gbGVhZCBieXRlLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyNCAmJiAoYml0ZSA9PT0gMHg0MCB8fCBiaXRlID09PSAweDQyKSlcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5MZWFkQnl0ZTtcblxuICAgICAgICAvLyA3LiBJZiBzdGF0ZSBpcyBub24tbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAxLiBTZXQgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSBhbmQgaXNvLTIwMjItanAgZGVjb2RlclxuICAgICAgICAgIC8vIG91dHB1dCBzdGF0ZSB0byBzdGF0ZXMuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgICAgLy8gMi4gTGV0IG91dHB1dCBmbGFnIGJlIHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZy5cbiAgICAgICAgICB2YXIgb3V0cHV0X2ZsYWcgPSBpc28yMDIyanBfb3V0cHV0X2ZsYWc7XG5cbiAgICAgICAgICAvLyAzLiBTZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IHRydWU7XG5cbiAgICAgICAgICAvLyA0LiBSZXR1cm4gY29udGludWUsIGlmIG91dHB1dCBmbGFnIGlzIHVuc2V0LCBhbmQgZXJyb3JcbiAgICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgICAgcmV0dXJuICFvdXRwdXRfZmxhZyA/IG51bGwgOiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gOC4gUHJlcGVuZCBsZWFkIGFuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoW2xlYWQsIGJpdGVdKTtcblxuICAgICAgICAvLyA5LiBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcsIHNldCBpc28tMjAyMi1qcFxuICAgICAgICAvLyBkZWNvZGVyIHN0YXRlIHRvIGlzby0yMDIyLWpwIGRlY29kZXIgb3V0cHV0IHN0YXRlIGFuZFxuICAgICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX291dHB1dF9zdGF0ZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEzLjIuMiBpc28tMjAyMi1qcCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gSVNPMjAyMkpQRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBpc28tMjAyMi1qcCdzIGVuY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgaXNvLTIwMjItanAgZW5jb2RlclxuICAgIC8vIHN0YXRlIHdoaWNoIGlzIG9uZSBvZiBBU0NJSSwgUm9tYW4sIGFuZCBqaXMwMjA4IChpbml0aWFsbHlcbiAgICAvLyBBU0NJSSkuXG4gICAgLyoqIEBlbnVtICovXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgIEFTQ0lJOiAwLFxuICAgICAgUm9tYW46IDEsXG4gICAgICBqaXMwMjA4OiAyXG4gICAgfTtcbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5BU0NJSTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0gYW5kIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgICAgIC8vIHN0YXRlIGlzIG5vdCBBU0NJSSwgcHJlcGVuZCBjb2RlIHBvaW50IHRvIHN0cmVhbSwgc2V0XG4gICAgICAvLyBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIEFTQ0lJLCBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzXG4gICAgICAvLyAweDFCIDB4MjggMHg0Mi5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtICYmXG4gICAgICAgICAgaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuQVNDSUkpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5BU0NJSTtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDQyXTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgICAvLyBzdGF0ZSBpcyBBU0NJSSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0gJiYgaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkpXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgSVNPLTIwMjItSlAgZW5jb2RlciBzdGF0ZSBpcyBBU0NJSSBvciBSb21hbiwgYW5kIGNvZGVcbiAgICAgIC8vIHBvaW50IGlzIFUrMDAwRSwgVSswMDBGLCBvciBVKzAwMUIsIHJldHVybiBlcnJvciB3aXRoIFUrRkZGRC5cbiAgICAgIGlmICgoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuQVNDSUkgfHxcbiAgICAgICAgICAgaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuUm9tYW4pICYmXG4gICAgICAgICAgKGNvZGVfcG9pbnQgPT09IDB4MDAwRSB8fCBjb2RlX3BvaW50ID09PSAweDAwMEYgfHxcbiAgICAgICAgICAgY29kZV9wb2ludCA9PT0gMHgwMDFCKSkge1xuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKDB4RkZGRCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgQVNDSUkgYW5kIGNvZGUgcG9pbnQgaXMgYW5cbiAgICAgIC8vIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSAmJlxuICAgICAgICAgIGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyA1LiBJZiBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIGlzIFJvbWFuIGFuZCBjb2RlIHBvaW50IGlzIGFuXG4gICAgICAvLyBBU0NJSSBjb2RlIHBvaW50LCBleGNsdWRpbmcgVSswMDVDIGFuZCBVKzAwN0UsIG9yIGlzIFUrMDBBNVxuICAgICAgLy8gb3IgVSsyMDNFLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoaXNvMjAyMmpwX3N0YXRlID09PSBzdGF0ZXMuUm9tYW4gJiZcbiAgICAgICAgICAoKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkgJiZcbiAgICAgICAgICAgY29kZV9wb2ludCAhPT0gMHgwMDVDICYmIGNvZGVfcG9pbnQgIT09IDB4MDA3RSkgfHxcbiAgICAgICAgICAoY29kZV9wb2ludCA9PSAweDAwQTUgfHwgY29kZV9wb2ludCA9PSAweDIwM0UpKSkge1xuXG4gICAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZVxuICAgICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgICByZXR1cm4gMHg1QztcblxuICAgICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgICByZXR1cm4gMHg3RTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCBhbmQgaXNvLTIwMjItanBcbiAgICAgIC8vIGVuY29kZXIgc3RhdGUgaXMgbm90IEFTQ0lJLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gQVNDSUksIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDQyLlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkgJiZcbiAgICAgICAgICBpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5BU0NJSSkge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLkFTQ0lJO1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjgsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBJZiBjb2RlIHBvaW50IGlzIGVpdGhlciBVKzAwQTUgb3IgVSsyMDNFLCBhbmQgaXNvLTIwMjItanBcbiAgICAgIC8vIGVuY29kZXIgc3RhdGUgaXMgbm90IFJvbWFuLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gUm9tYW4sIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDRBLlxuICAgICAgaWYgKChjb2RlX3BvaW50ID09PSAweDAwQTUgfHwgY29kZV9wb2ludCA9PT0gMHgyMDNFKSAmJlxuICAgICAgICAgIGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLlJvbWFuKSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuUm9tYW47XG4gICAgICAgIHJldHVybiBbMHgxQiwgMHgyOCwgMHg0QV07XG4gICAgICB9XG5cbiAgICAgIC8vIDguIElmIGNvZGUgcG9pbnQgaXMgVSsyMjEyLCBzZXQgaXQgdG8gVStGRjBELlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjIxMilcbiAgICAgICAgY29kZV9wb2ludCA9IDB4RkYwRDtcblxuICAgICAgLy8gOS4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGppczAyMDguXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgLy8gMTAuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyAxMS4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBub3QgamlzMDIwOCwgcHJlcGVuZCBjb2RlXG4gICAgICAvLyBwb2ludCB0byBzdHJlYW0sIHNldCBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIHRvIGppczAyMDgsXG4gICAgICAvLyBhbmQgcmV0dXJuIHRocmVlIGJ5dGVzIDB4MUIgMHgyNCAweDQyLlxuICAgICAgaWYgKGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLmppczAyMDgpIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5qaXMwMjA4O1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjQsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyAxMi4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDk0KSArIDB4MjEuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyA5NCkgKyAweDIxO1xuXG4gICAgICAvLyAxMy4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSA5NCArIDB4MjEuXG4gICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgOTQgKyAweDIxO1xuXG4gICAgICAvLyAxNC4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ0lTTy0yMDIyLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBJU08yMDIySlBFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydJU08tMjAyMi1KUCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgSVNPMjAyMkpQRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxMy4zIFNoaWZ0X0pJU1xuXG4gIC8vIDEzLjMuMSBTaGlmdF9KSVMgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNoaWZ0SklTRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBTaGlmdF9KSVMncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIFNoaWZ0X0pJUyBsZWFkIChpbml0aWFsbHlcbiAgICAvLyAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIFNoaWZ0X0pJU19sZWFkID0gMHgwMDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgU2hpZnRfSklTIGxlYWQgaXMgbm90IDB4MDAsXG4gICAgICAvLyBzZXQgU2hpZnRfSklTIGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgU2hpZnRfSklTX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgU2hpZnRfSklTX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBTaGlmdF9KSVMgbGVhZCBpcyAweDAwLFxuICAgICAgLy8gcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgU2hpZnRfSklTX2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgU2hpZnRfSklTIGxlYWQgaXMgbm90IDB4MDAsIGxldCBsZWFkIGJlIFNoaWZ0X0pJUyBsZWFkLFxuICAgICAgLy8gbGV0IHBvaW50ZXIgYmUgbnVsbCwgc2V0IFNoaWZ0X0pJUyBsZWFkIHRvIDB4MDAsIGFuZCB0aGVuIHJ1blxuICAgICAgLy8gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoU2hpZnRfSklTX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBTaGlmdF9KSVNfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBTaGlmdF9KSVNfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IG9mZnNldCBiZSAweDQwLCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGLCBhbmQgMHg0MVxuICAgICAgICAvLyBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSAoYml0ZSA8IDB4N0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgICAgLy8gMi4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4QTAsIGFuZFxuICAgICAgICAvLyAweEMxIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGxlYWRfb2Zmc2V0ID0gKGxlYWQgPCAweEEwKSA/IDB4ODEgOiAweEMxO1xuXG4gICAgICAgIC8vIDMuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDAgdG8gMHg3RSwgaW5jbHVzaXZlLCBvciAweDgwXG4gICAgICAgIC8vIHRvIDB4RkMsIGluY2x1c2l2ZSwgc2V0IHBvaW50ZXIgdG8gKGxlYWQg4oiSIGxlYWQgb2Zmc2V0KSDDl1xuICAgICAgICAvLyAxODggKyBieXRlIOKIkiBvZmZzZXQuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHg4MCwgMHhGQykpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gbGVhZF9vZmZzZXQpICogMTg4ICsgYml0ZSAtIG9mZnNldDtcblxuICAgICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIGluIHRoZSByYW5nZSA4ODM2IHRvIDEwNzE1LCBpbmNsdXNpdmUsXG4gICAgICAgIC8vIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhFMDAwIOKIkiA4ODM2ICsgcG9pbnRlci5cbiAgICAgICAgaWYgKGluUmFuZ2UocG9pbnRlciwgODgzNiwgMTA3MTUpKVxuICAgICAgICAgIHJldHVybiAweEUwMDAgLSA4ODM2ICsgcG9pbnRlcjtcblxuICAgICAgICAvLyA1LiBMZXQgY29kZSBwb2ludCBiZSBudWxsLCBpZiBwb2ludGVyIGlzIG51bGwsIGFuZCB0aGVcbiAgICAgICAgLy8gaW5kZXggY29kZSBwb2ludCBmb3IgcG9pbnRlciBpbiBpbmRleCBqaXMwMjA4IG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSAocG9pbnRlciA9PT0gbnVsbCkgPyBudWxsIDpcbiAgICAgICAgICAgICAgaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2ppczAyMDgnKSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA4LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUgb3IgMHg4MCwgcmV0dXJuIGEgY29kZSBwb2ludFxuICAgICAgLy8gd2hvc2UgdmFsdWUgaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSB8fCBiaXRlID09PSAweDgwKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gNS4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0byAweERGLCBpbmNsdXNpdmUsIHJldHVybiBhXG4gICAgICAvLyBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4RkY2MSDiiJIgMHhBMSArIGJ5dGUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweEExLCAweERGKSlcbiAgICAgICAgcmV0dXJuIDB4RkY2MSAtIDB4QTEgKyBiaXRlO1xuXG4gICAgICAvLyA2LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4OUYsIGluY2x1c2l2ZSwgb3IgMHhFMFxuICAgICAgLy8gdG8gMHhGQywgaW5jbHVzaXZlLCBzZXQgU2hpZnRfSklTIGxlYWQgdG8gYnl0ZSBhbmQgcmV0dXJuXG4gICAgICAvLyBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4OUYpIHx8IGluUmFuZ2UoYml0ZSwgMHhFMCwgMHhGQykpIHtcbiAgICAgICAgU2hpZnRfSklTX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEzLjMuMiBTaGlmdF9KSVMgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCBvciBVKzAwODAsIHJldHVybiBhXG4gICAgICAvLyBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSB8fCBjb2RlX3BvaW50ID09PSAweDAwODApXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIFUrMDBBNSwgcmV0dXJuIGJ5dGUgMHg1Qy5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDAwQTUpXG4gICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAvLyA0LiBJZiBjb2RlIHBvaW50IGlzIFUrMjAzRSwgcmV0dXJuIGJ5dGUgMHg3RS5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIwM0UpXG4gICAgICAgIHJldHVybiAweDdFO1xuXG4gICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0ZGNjEgdG8gVStGRjlGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gYSBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQg4oiSIDB4RkY2MSArIDB4QTEuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEZGNjEsIDB4RkY5RikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50IC0gMHhGRjYxICsgMHhBMTtcblxuICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBVKzIyMTIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMjEyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA3LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggU2hpZnRfSklTIHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4U2hpZnRKSVNQb2ludGVyRm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA4LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gOS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE4OCkuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxODgpO1xuXG4gICAgICAvLyAxMC4gTGV0IGxlYWQgb2Zmc2V0IGJlIDB4ODEsIGlmIGxlYWQgaXMgbGVzcyB0aGFuIDB4MUYsIGFuZFxuICAgICAgLy8gMHhDMSBvdGhlcndpc2UuXG4gICAgICB2YXIgbGVhZF9vZmZzZXQgPSAobGVhZCA8IDB4MUYpID8gMHg4MSA6IDB4QzE7XG5cbiAgICAgIC8vIDExLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE4OC5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSAxODg7XG5cbiAgICAgIC8vIDEyLiBMZXQgb2Zmc2V0IGJlIDB4NDAsIGlmIHRyYWlsIGlzIGxlc3MgdGhhbiAweDNGLCBhbmQgMHg0MVxuICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgdmFyIG9mZnNldCA9ICh0cmFpbCA8IDB4M0YpID8gMHg0MCA6IDB4NDE7XG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCArIGxlYWQgb2Zmc2V0IGFuZFxuICAgICAgLy8gdHJhaWwgKyBvZmZzZXQuXG4gICAgICByZXR1cm4gW2xlYWQgKyBsZWFkX29mZnNldCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydTaGlmdF9KSVMnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNoaWZ0SklTRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snU2hpZnRfSklTJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBTaGlmdEpJU0RlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy9cbiAgLy8gMTQuIExlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxNC4xIGV1Yy1rclxuXG4gIC8vIDE0LjEuMSBldWMta3IgZGVjb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtEZWNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0tSRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIGV1Yy1rcidzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgZXVjLWtyIGxlYWQgKGluaXRpYWxseSAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGV1Y2tyX2xlYWQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMta3IgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBldWMta3IgbGVhZCB0byAweDAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNrcl9sZWFkICE9PSAwKSB7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSAweDAwO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMta3IgbGVhZCBpcyAweDAwLCByZXR1cm5cbiAgICAgIC8vIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgZXVja3JfbGVhZCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBldWMta3IgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgZXVjLWtyIGxlYWQsIGxldFxuICAgICAgLy8gcG9pbnRlciBiZSBudWxsLCBzZXQgZXVjLWtyIGxlYWQgdG8gMHgwMCwgYW5kIHRoZW4gcnVuIHRoZXNlXG4gICAgICAvLyBzdWJzdGVwczpcbiAgICAgIGlmIChldWNrcl9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIHZhciBsZWFkID0gZXVja3JfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBldWNrcl9sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDQxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIHBvaW50ZXIgdG8gKGxlYWQg4oiSIDB4ODEpIMOXIDE5MCArIChieXRlIOKIkiAweDQxKS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MSwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxOTAgKyAoYml0ZSAtIDB4NDEpO1xuXG4gICAgICAgIC8vIDIuIExldCBjb2RlIHBvaW50IGJlIG51bGwsIGlmIHBvaW50ZXIgaXMgbnVsbCwgYW5kIHRoZVxuICAgICAgICAvLyBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGV1Yy1rciBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgICAgICAgID8gbnVsbCA6IGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdldWMta3InKSk7XG5cbiAgICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBudWxsIGFuZCBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHByZXBlbmRcbiAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIGlmIChwb2ludGVyID09PSBudWxsICYmIGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgbnVsbCwgcmV0dXJuIGVycm9yLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAvLyA1LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDgxIHRvIDB4RkUsIGluY2x1c2l2ZSwgc2V0XG4gICAgICAvLyBldWMta3IgbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICBldWNrcl9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxNC4xLjIgZXVjLWtyIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNLUkVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBwb2ludGVyIGZvciBjb2RlIHBvaW50IGluIGluZGV4XG4gICAgICAvLyBldWMta3IuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnZXVjLWtyJykpO1xuXG4gICAgICAvLyA0LiBJZiBwb2ludGVyIGlzIG51bGwsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGVuY29kZXJFcnJvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNS4gTGV0IGxlYWQgYmUgZmxvb3IocG9pbnRlciAvIDE5MCkgKyAweDgxLlxuICAgICAgdmFyIGxlYWQgPSBmbG9vcihwb2ludGVyIC8gMTkwKSArIDB4ODE7XG5cbiAgICAgIC8vIDYuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTkwICsgMHg0MS5cbiAgICAgIHZhciB0cmFpbCA9IChwb2ludGVyICUgMTkwKSArIDB4NDE7XG5cbiAgICAgIC8vIDcuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkIGFuZCB0cmFpbC5cbiAgICAgIHJldHVybiBbbGVhZCwgdHJhaWxdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydFVUMtS1InXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0tSRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snRVVDLUtSJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNLUkRlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cblxuICAvL1xuICAvLyAxNS4gTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTUuMSByZXBsYWNlbWVudFxuXG4gIC8vIE5vdCBuZWVkZWQgLSBBUEkgdGhyb3dzIFJhbmdlRXJyb3JcblxuICAvLyAxNS4yIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IgdXRmLTE2YmUgYW5kIHV0Zi0xNmxlXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3VuaXRcbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNmJlXG4gICAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gYnl0ZXNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV91bml0LCB1dGYxNmJlKSB7XG4gICAgLy8gMS4gTGV0IGJ5dGUxIGJlIGNvZGUgdW5pdCA+PiA4LlxuICAgIHZhciBieXRlMSA9IGNvZGVfdW5pdCA+PiA4O1xuXG4gICAgLy8gMi4gTGV0IGJ5dGUyIGJlIGNvZGUgdW5pdCAmIDB4MDBGRi5cbiAgICB2YXIgYnl0ZTIgPSBjb2RlX3VuaXQgJiAweDAwRkY7XG5cbiAgICAvLyAzLiBUaGVuIHJldHVybiB0aGUgYnl0ZXMgaW4gb3JkZXI6XG4gICAgICAgIC8vIHV0Zi0xNmJlIGZsYWcgaXMgc2V0OiBieXRlMSwgdGhlbiBieXRlMi5cbiAgICBpZiAodXRmMTZiZSlcbiAgICAgIHJldHVybiBbYnl0ZTEsIGJ5dGUyXTtcbiAgICAvLyB1dGYtMTZiZSBmbGFnIGlzIHVuc2V0OiBieXRlMiwgdGhlbiBieXRlMS5cbiAgICByZXR1cm4gW2J5dGUyLCBieXRlMV07XG4gIH1cblxuICAvLyAxNS4yLjEgc2hhcmVkIHV0Zi0xNiBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXRmMTZfYmUgVHJ1ZSBpZiBiaWctZW5kaWFuLCBmYWxzZSBpZiBsaXR0bGUtZW5kaWFuLlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjE2RGVjb2Rlcih1dGYxNl9iZSwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgdmFyIC8qKiBAdHlwZSB7P251bWJlcn0gKi8gdXRmMTZfbGVhZF9ieXRlID0gbnVsbCxcbiAgICAgICAgLyoqIEB0eXBlIHs/bnVtYmVyfSAqLyB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGVpdGhlciB1dGYtMTYgbGVhZCBieXRlIG9yXG4gICAgICAvLyB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgaXMgbm90IG51bGwsIHNldCB1dGYtMTYgbGVhZCBieXRlIGFuZFxuICAgICAgLy8gdXRmLTE2IGxlYWQgc3Vycm9nYXRlIHRvIG51bGwsIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiAodXRmMTZfbGVhZF9ieXRlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB1dGYtMTYgbGVhZCBieXRlIGFuZCB1dGYtMTZcbiAgICAgIC8vIGxlYWQgc3Vycm9nYXRlIGFyZSBudWxsLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiB1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwgJiZcbiAgICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHV0Zi0xNiBsZWFkIGJ5dGUgaXMgbnVsbCwgc2V0IHV0Zi0xNiBsZWFkIGJ5dGUgdG8gYnl0ZVxuICAgICAgLy8gYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmICh1dGYxNl9sZWFkX2J5dGUgPT09IG51bGwpIHtcbiAgICAgICAgdXRmMTZfbGVhZF9ieXRlID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIExldCBjb2RlIHVuaXQgYmUgdGhlIHJlc3VsdCBvZjpcbiAgICAgIHZhciBjb2RlX3VuaXQ7XG4gICAgICBpZiAodXRmMTZfYmUpIHtcbiAgICAgICAgLy8gdXRmLTE2YmUgZGVjb2RlciBmbGFnIGlzIHNldFxuICAgICAgICAvLyAgICh1dGYtMTYgbGVhZCBieXRlIDw8IDgpICsgYnl0ZS5cbiAgICAgICAgY29kZV91bml0ID0gKHV0ZjE2X2xlYWRfYnl0ZSA8PCA4KSArIGJpdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1dGYtMTZiZSBkZWNvZGVyIGZsYWcgaXMgdW5zZXRcbiAgICAgICAgLy8gICAoYnl0ZSA8PCA4KSArIHV0Zi0xNiBsZWFkIGJ5dGUuXG4gICAgICAgIGNvZGVfdW5pdCA9IChiaXRlIDw8IDgpICsgdXRmMTZfbGVhZF9ieXRlO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiBzZXQgdXRmLTE2IGxlYWQgYnl0ZSB0byBudWxsLlxuICAgICAgdXRmMTZfbGVhZF9ieXRlID0gbnVsbDtcblxuICAgICAgLy8gNS4gSWYgdXRmLTE2IGxlYWQgc3Vycm9nYXRlIGlzIG5vdCBudWxsLCBsZXQgbGVhZCBzdXJyb2dhdGVcbiAgICAgIC8vIGJlIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSwgc2V0IHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSB0byBudWxsLFxuICAgICAgLy8gYW5kIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHV0ZjE2X2xlYWRfc3Vycm9nYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsZWFkX3N1cnJvZ2F0ZSA9IHV0ZjE2X2xlYWRfc3Vycm9nYXRlO1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gMS4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0RDMDAgdG8gVStERkZGLFxuICAgICAgICAvLyBpbmNsdXNpdmUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHgxMDAwMCArXG4gICAgICAgIC8vICgobGVhZCBzdXJyb2dhdGUg4oiSIDB4RDgwMCkgPDwgMTApICsgKGNvZGUgdW5pdCDiiJIgMHhEQzAwKS5cbiAgICAgICAgaWYgKGluUmFuZ2UoY29kZV91bml0LCAweERDMDAsIDB4REZGRikpIHtcbiAgICAgICAgICByZXR1cm4gMHgxMDAwMCArIChsZWFkX3N1cnJvZ2F0ZSAtIDB4RDgwMCkgKiAweDQwMCArXG4gICAgICAgICAgICAgIChjb2RlX3VuaXQgLSAweERDMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCB0aGUgc2VxdWVuY2UgcmVzdWx0aW5nIG9mIGNvbnZlcnRpbmcgY29kZSB1bml0XG4gICAgICAgIC8vIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGRlY29kZXIgZmxhZyB0byBzdHJlYW0gYW5kIHJldHVyblxuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3VuaXQsIHV0ZjE2X2JlKSk7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBjb2RlIHVuaXQgaXMgaW4gdGhlIHJhbmdlIFUrRDgwMCB0byBVK0RCRkYsIGluY2x1c2l2ZSxcbiAgICAgIC8vIHNldCB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgdG8gY29kZSB1bml0IGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4RDgwMCwgMHhEQkZGKSkge1xuICAgICAgICB1dGYxNl9sZWFkX3N1cnJvZ2F0ZSA9IGNvZGVfdW5pdDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDcuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEQzAwIHRvIFUrREZGRiwgaW5jbHVzaXZlLFxuICAgICAgLy8gcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV91bml0LCAweERDMDAsIDB4REZGRikpXG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAvLyA4LiBSZXR1cm4gY29kZSBwb2ludCBjb2RlIHVuaXQuXG4gICAgICByZXR1cm4gY29kZV91bml0O1xuICAgIH07XG4gIH1cblxuICAvLyAxNS4yLjIgc2hhcmVkIHV0Zi0xNiBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXRmMTZfYmUgVHJ1ZSBpZiBiaWctZW5kaWFuLCBmYWxzZSBpZiBsaXR0bGUtZW5kaWFuLlxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjE2RW5jb2Rlcih1dGYxNl9iZSwgb3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVKzAwMDAgdG8gVStGRkZGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gdGhlIHNlcXVlbmNlIHJlc3VsdGluZyBvZiBjb252ZXJ0aW5nIGNvZGUgcG9pbnQgdG9cbiAgICAgIC8vIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MDAwMCwgMHhGRkZGKSlcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoY29kZV9wb2ludCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyAzLiBMZXQgbGVhZCBiZSAoKGNvZGUgcG9pbnQg4oiSIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgbGVhZCA9IGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoXG4gICAgICAgICgoY29kZV9wb2ludCAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA0LiBMZXQgdHJhaWwgYmUgKChjb2RlIHBvaW50IOKIkiAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCxcbiAgICAgIC8vIGNvbnZlcnRlZCB0byBieXRlcyB1c2luZyB1dGYtMTZiZSBlbmNvZGVyIGZsYWcuXG4gICAgICB2YXIgdHJhaWwgPSBjb252ZXJ0Q29kZVVuaXRUb0J5dGVzKFxuICAgICAgICAoKGNvZGVfcG9pbnQgLSAweDEwMDAwKSAmIDB4M0ZGKSArIDB4REMwMCwgdXRmMTZfYmUpO1xuXG4gICAgICAvLyA1LiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIG9mIGxlYWQgZm9sbG93ZWQgYnkgdHJhaWwuXG4gICAgICByZXR1cm4gbGVhZC5jb25jYXQodHJhaWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxNS4zIHV0Zi0xNmJlXG4gIC8vIDE1LjMuMSB1dGYtMTZiZSBkZWNvZGVyXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ1VURi0xNkJFJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkVuY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG4gIC8vIDE1LjMuMiB1dGYtMTZiZSBlbmNvZGVyXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ1VURi0xNkJFJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkRlY29kZXIodHJ1ZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTUuNCB1dGYtMTZsZVxuICAvLyAxNS40LjEgdXRmLTE2bGUgZGVjb2RlclxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydVVEYtMTZMRSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGMTZFbmNvZGVyKGZhbHNlLCBvcHRpb25zKTtcbiAgfTtcbiAgLy8gMTUuNC4yIHV0Zi0xNmxlIGVuY29kZXJcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snVVRGLTE2TEUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RGVjb2RlcihmYWxzZSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTUuNSB4LXVzZXItZGVmaW5lZFxuXG4gIC8vIDE1LjUuMSB4LXVzZXItZGVmaW5lZCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gWFVzZXJEZWZpbmVkRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBhbiBBU0NJSSBieXRlLCByZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlXG4gICAgICAvLyBpcyBieXRlLlxuICAgICAgaWYgKGlzQVNDSUlCeXRlKGJpdGUpKVxuICAgICAgICByZXR1cm4gYml0ZTtcblxuICAgICAgLy8gMy4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweEY3ODAgKyBieXRlIOKIkiAweDgwLlxuICAgICAgcmV0dXJuIDB4Rjc4MCArIGJpdGUgLSAweDgwO1xuICAgIH07XG4gIH1cblxuICAvLyAxNS41LjIgeC11c2VyLWRlZmluZWQgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFhVc2VyRGVmaW5lZEVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS5JZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBpbiB0aGUgcmFuZ2UgVStGNzgwIHRvIFUrRjdGRiwgaW5jbHVzaXZlLFxuICAgICAgLy8gcmV0dXJuIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50IOKIkiAweEY3ODAgKyAweDgwLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHhGNzgwLCAweEY3RkYpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludCAtIDB4Rjc4MCArIDB4ODA7XG5cbiAgICAgIC8vIDQuIFJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWyd4LXVzZXItZGVmaW5lZCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWFVzZXJEZWZpbmVkRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1sneC11c2VyLWRlZmluZWQnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFhVc2VyRGVmaW5lZERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxbJ1RleHRFbmNvZGVyJ10pXG4gICAgZ2xvYmFsWydUZXh0RW5jb2RlciddID0gVGV4dEVuY29kZXI7XG4gIGlmICghZ2xvYmFsWydUZXh0RGVjb2RlciddKVxuICAgIGdsb2JhbFsnVGV4dERlY29kZXInXSA9IFRleHREZWNvZGVyO1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICBUZXh0RW5jb2RlcjogZ2xvYmFsWydUZXh0RW5jb2RlciddLFxuICAgICAgVGV4dERlY29kZXI6IGdsb2JhbFsnVGV4dERlY29kZXInXSxcbiAgICAgIEVuY29kaW5nSW5kZXhlczogZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXVxuICAgIH07XG4gIH1cblxuLy8gRm9yIHN0cmljdCBlbnZpcm9ubWVudHMgd2hlcmUgYHRoaXNgIGluc2lkZSB0aGUgZ2xvYmFsIHNjb3BlXG4vLyBpcyBgdW5kZWZpbmVkYCwgdGFrZSBhIHB1cmUgb2JqZWN0IGluc3RlYWRcbn0odGhpcyB8fCB7fSkpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9iamVjdEFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC5hc3NpZ24vcG9seWZpbGwnKSgpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgc2V0RnVuY3Rpb25MZW5ndGggPSByZXF1aXJlKCdzZXQtZnVuY3Rpb24tbGVuZ3RoJyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkbWF4ID0gR2V0SW50cmluc2ljKCclTWF0aC5tYXglJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHRpZiAodHlwZW9mIG9yaWdpbmFsRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYSBmdW5jdGlvbiBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0cmV0dXJuIHNldEZ1bmN0aW9uTGVuZ3RoKFxuXHRcdGZ1bmMsXG5cdFx0MSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSxcblx0XHR0cnVlXG5cdCk7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyICRTeW50YXhFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9zeW50YXgnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcblxudmFyIGdvcGQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZURhdGFQcm9wZXJ0eShcblx0b2JqLFxuXHRwcm9wZXJ0eSxcblx0dmFsdWVcbikge1xuXHRpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAnKTtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcHJvcGVydHkgIT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1szXSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIHR5cGVvZiBhcmd1bWVudHNbNF0gIT09ICdib29sZWFuJyAmJiBhcmd1bWVudHNbNF0gIT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgdHlwZW9mIGFyZ3VtZW50c1s1XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s1XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDYgJiYgdHlwZW9mIGFyZ3VtZW50c1s2XSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIG5vbkVudW1lcmFibGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG5cdHZhciBub25Xcml0YWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ID8gYXJndW1lbnRzWzRdIDogbnVsbDtcblx0dmFyIG5vbkNvbmZpZ3VyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogbnVsbDtcblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgPyBhcmd1bWVudHNbNl0gOiBmYWxzZTtcblxuXHQvKiBAdHlwZSB7ZmFsc2UgfCBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPn0gKi9cblx0dmFyIGRlc2MgPSAhIWdvcGQgJiYgZ29wZChvYmosIHByb3BlcnR5KTtcblxuXHRpZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KG9iaiwgcHJvcGVydHksIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogbm9uQ29uZmlndXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmNvbmZpZ3VyYWJsZSA6ICFub25Db25maWd1cmFibGUsXG5cdFx0XHRlbnVtZXJhYmxlOiBub25FbnVtZXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmVudW1lcmFibGUgOiAhbm9uRW51bWVyYWJsZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdHdyaXRhYmxlOiBub25Xcml0YWJsZSA9PT0gbnVsbCAmJiBkZXNjID8gZGVzYy53cml0YWJsZSA6ICFub25Xcml0YWJsZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGxvb3NlIHx8ICghbm9uRW51bWVyYWJsZSAmJiAhbm9uV3JpdGFibGUgJiYgIW5vbkNvbmZpZ3VyYWJsZSkpIHtcblx0XHQvLyBtdXN0IGZhbGwgYmFjayB0byBbW1NldF1dLCBhbmQgd2FzIG5vdCBleHBsaWNpdGx5IGFza2VkIHRvIG1ha2Ugbm9uLWVudW1lcmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWNvbmZpZ3VyYWJsZVxuXHRcdG9ialtwcm9wZXJ0eV0gPSB2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ1RoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuJyk7XG5cdH1cbn07XG4iLCIvKiFcblxuIGRpZmYgdjcuMC4wXG5cbkJTRCAzLUNsYXVzZSBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAwOS0yMDE1LCBLZXZpbiBEZWNrZXIgPGtwZGVja2VyQGdtYWlsLmNvbT5cbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbkFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRVxuRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG5TRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUlxuQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSxcbk9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5AbGljZW5zZVxuKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuRGlmZiA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIERpZmYoKSB7fVxuICBEaWZmLnByb3RvdHlwZSA9IHtcbiAgICBkaWZmOiBmdW5jdGlvbiBkaWZmKG9sZFN0cmluZywgbmV3U3RyaW5nKSB7XG4gICAgICB2YXIgX29wdGlvbnMkdGltZW91dDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gc2VsZi5wb3N0UHJvY2Vzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG1hc3NhZ2UgdGhlIGlucHV0IHByaW9yIHRvIHJ1bm5pbmdcbiAgICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZywgb3B0aW9ucyk7XG4gICAgICBuZXdTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChuZXdTdHJpbmcsIG9wdGlvbnMpO1xuICAgICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZywgb3B0aW9ucykpO1xuICAgICAgbmV3U3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG5ld1N0cmluZywgb3B0aW9ucykpO1xuICAgICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGg7XG4gICAgICB2YXIgZWRpdExlbmd0aCA9IDE7XG4gICAgICB2YXIgbWF4RWRpdExlbmd0aCA9IG5ld0xlbiArIG9sZExlbjtcbiAgICAgIGlmIChvcHRpb25zLm1heEVkaXRMZW5ndGggIT0gbnVsbCkge1xuICAgICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXhFeGVjdXRpb25UaW1lID0gKF9vcHRpb25zJHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9vcHRpb25zJHRpbWVvdXQgIT09IHZvaWQgMCA/IF9vcHRpb25zJHRpbWVvdXQgOiBJbmZpbml0eTtcbiAgICAgIHZhciBhYm9ydEFmdGVyVGltZXN0YW1wID0gRGF0ZS5ub3coKSArIG1heEV4ZWN1dGlvblRpbWU7XG4gICAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgICBvbGRQb3M6IC0xLFxuICAgICAgICBsYXN0Q29tcG9uZW50OiB1bmRlZmluZWRcbiAgICAgIH1dO1xuXG4gICAgICAvLyBTZWVkIGVkaXRMZW5ndGggPSAwLCBpLmUuIHRoZSBjb250ZW50IHN0YXJ0cyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuICAgICAgdmFyIG5ld1BvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDAsIG9wdGlvbnMpO1xuICAgICAgaWYgKGJlc3RQYXRoWzBdLm9sZFBvcyArIDEgPj0gb2xkTGVuICYmIG5ld1BvcyArIDEgPj0gbmV3TGVuKSB7XG4gICAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuICAgICAgICByZXR1cm4gZG9uZShidWlsZFZhbHVlcyhzZWxmLCBiZXN0UGF0aFswXS5sYXN0Q29tcG9uZW50LCBuZXdTdHJpbmcsIG9sZFN0cmluZywgc2VsZi51c2VMb25nZXN0VG9rZW4pKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25jZSB3ZSBoaXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGVkaXQgZ3JhcGggb24gc29tZSBkaWFnb25hbCBrLCB3ZSBjYW5cbiAgICAgIC8vIGRlZmluaXRlbHkgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZWRpdCBncmFwaCBpbiBubyBtb3JlIHRoYW4gayBlZGl0cywgc29cbiAgICAgIC8vIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29uc2lkZXJpbmcgYW55IG1vdmVzIHRvIGRpYWdvbmFsIGsrMSBhbnkgbW9yZSAoZnJvbVxuICAgICAgLy8gd2hpY2ggd2UncmUgZ3VhcmFudGVlZCB0byBuZWVkIGF0IGxlYXN0IGsrMSBtb3JlIGVkaXRzKS5cbiAgICAgIC8vIFNpbWlsYXJseSwgb25jZSB3ZSd2ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIGVkaXQgZ3JhcGgsIHRoZXJlJ3Mgbm9cbiAgICAgIC8vIHBvaW50IGNvbnNpZGVyaW5nIG1vdmVzIHRvIGxvd2VyIGRpYWdvbmFscy5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGZhY3QgYnkgc2V0dGluZyBtaW5EaWFnb25hbFRvQ29uc2lkZXIgYW5kXG4gICAgICAvLyBtYXhEaWFnb25hbFRvQ29uc2lkZXIgdG8gc29tZSBmaW5pdGUgdmFsdWUgb25jZSB3ZSd2ZSBoaXQgdGhlIGVkZ2Ugb2ZcbiAgICAgIC8vIHRoZSBlZGl0IGdyYXBoLlxuICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IGZhaXRoZnVsIHRvIHRoZSBvcmlnaW5hbCBhbGdvcml0aG0gcHJlc2VudGVkIGluXG4gICAgICAvLyBNeWVycydzIHBhcGVyLCB3aGljaCBpbnN0ZWFkIHBvaW50bGVzc2x5IGV4dGVuZHMgRC1wYXRocyBvZmYgdGhlIGVuZCBvZlxuICAgICAgLy8gdGhlIGVkaXQgZ3JhcGggLSBzZWUgcGFnZSA3IG9mIE15ZXJzJ3MgcGFwZXIgd2hpY2ggbm90ZXMgdGhpcyBwb2ludFxuICAgICAgLy8gZXhwbGljaXRseSBhbmQgaWxsdXN0cmF0ZXMgaXQgd2l0aCBhIGRpYWdyYW0uIFRoaXMgaGFzIG1ham9yIHBlcmZvcm1hbmNlXG4gICAgICAvLyBpbXBsaWNhdGlvbnMgZm9yIHNvbWUgY29tbW9uIHNjZW5hcmlvcy4gRm9yIGluc3RhbmNlLCB0byBjb21wdXRlIGEgZGlmZlxuICAgICAgLy8gd2hlcmUgdGhlIG5ldyB0ZXh0IHNpbXBseSBhcHBlbmRzIGQgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIHRoZVxuICAgICAgLy8gb3JpZ2luYWwgdGV4dCBvZiBsZW5ndGggbiwgdGhlIHRydWUgTXllcnMgYWxnb3JpdGhtIHdpbGwgdGFrZSBPKG4rZF4yKVxuICAgICAgLy8gdGltZSB3aGlsZSB0aGlzIG9wdGltaXphdGlvbiBuZWVkcyBvbmx5IE8obitkKSB0aW1lLlxuICAgICAgdmFyIG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4RGlhZ29uYWxUb0NvbnNpZGVyID0gSW5maW5pdHk7XG5cbiAgICAgIC8vIE1haW4gd29ya2VyIG1ldGhvZC4gY2hlY2tzIGFsbCBwZXJtdXRhdGlvbnMgb2YgYSBnaXZlbiBlZGl0IGxlbmd0aCBmb3IgYWNjZXB0YW5jZS5cbiAgICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgICBmb3IgKHZhciBkaWFnb25hbFBhdGggPSBNYXRoLm1heChtaW5EaWFnb25hbFRvQ29uc2lkZXIsIC1lZGl0TGVuZ3RoKTsgZGlhZ29uYWxQYXRoIDw9IE1hdGgubWluKG1heERpYWdvbmFsVG9Db25zaWRlciwgZWRpdExlbmd0aCk7IGRpYWdvbmFsUGF0aCArPSAyKSB7XG4gICAgICAgICAgdmFyIGJhc2VQYXRoID0gdm9pZCAwO1xuICAgICAgICAgIHZhciByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG4gICAgICAgICAgICBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV07XG4gICAgICAgICAgaWYgKHJlbW92ZVBhdGgpIHtcbiAgICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGNhbkFkZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChhZGRQYXRoKSB7XG4gICAgICAgICAgICAvLyB3aGF0IG5ld1BvcyB3aWxsIGJlIGFmdGVyIHdlIGRvIGFuIGluc2VydGlvbjpcbiAgICAgICAgICAgIHZhciBhZGRQYXRoTmV3UG9zID0gYWRkUGF0aC5vbGRQb3MgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgICAgICBjYW5BZGQgPSBhZGRQYXRoICYmIDAgPD0gYWRkUGF0aE5ld1BvcyAmJiBhZGRQYXRoTmV3UG9zIDwgbmV3TGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY2FuUmVtb3ZlID0gcmVtb3ZlUGF0aCAmJiByZW1vdmVQYXRoLm9sZFBvcyArIDEgPCBvbGRMZW47XG4gICAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuICAgICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNlbGVjdCB0aGUgZGlhZ29uYWwgdGhhdCB3ZSB3YW50IHRvIGJyYW5jaCBmcm9tLiBXZSBzZWxlY3QgdGhlIHByaW9yXG4gICAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgb2xkIHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICAgIGlmICghY2FuUmVtb3ZlIHx8IGNhbkFkZCAmJiByZW1vdmVQYXRoLm9sZFBvcyA8IGFkZFBhdGgub2xkUG9zKSB7XG4gICAgICAgICAgICBiYXNlUGF0aCA9IHNlbGYuYWRkVG9QYXRoKGFkZFBhdGgsIHRydWUsIGZhbHNlLCAwLCBvcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVBhdGggPSBzZWxmLmFkZFRvUGF0aChyZW1vdmVQYXRoLCBmYWxzZSwgdHJ1ZSwgMSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1BvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCwgb3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGJhc2VQYXRoLm9sZFBvcyArIDEgPj0gb2xkTGVuICYmIG5ld1BvcyArIDEgPj0gbmV3TGVuKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGgubGFzdENvbXBvbmVudCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgICAgIGlmIChiYXNlUGF0aC5vbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgICAgICBtYXhEaWFnb25hbFRvQ29uc2lkZXIgPSBNYXRoLm1pbihtYXhEaWFnb25hbFRvQ29uc2lkZXIsIGRpYWdvbmFsUGF0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1BvcyArIDEgPj0gbmV3TGVuKSB7XG4gICAgICAgICAgICAgIG1pbkRpYWdvbmFsVG9Db25zaWRlciA9IE1hdGgubWF4KG1pbkRpYWdvbmFsVG9Db25zaWRlciwgZGlhZ29uYWxQYXRoICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRMZW5ndGgrKztcbiAgICAgIH1cblxuICAgICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAgIC8vIHN5bmMgYW5kIGFzeW5jIG1vZGUgd2hpY2ggaXMgbmV2ZXIgZnVuLiBMb29wcyBvdmVyIGV4ZWNFZGl0TGVuZ3RoIHVudGlsIGEgdmFsdWVcbiAgICAgIC8vIGlzIHByb2R1Y2VkLCBvciB1bnRpbCB0aGUgZWRpdCBsZW5ndGggZXhjZWVkcyBvcHRpb25zLm1heEVkaXRMZW5ndGggKGlmIGdpdmVuKSxcbiAgICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIChmdW5jdGlvbiBleGVjKCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoIHx8IERhdGUubm93KCkgPiBhYm9ydEFmdGVyVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG4gICAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGggJiYgRGF0ZS5ub3coKSA8PSBhYm9ydEFmdGVyVGltZXN0YW1wKSB7XG4gICAgICAgICAgdmFyIHJldCA9IGV4ZWNFZGl0TGVuZ3RoKCk7XG4gICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZFRvUGF0aDogZnVuY3Rpb24gYWRkVG9QYXRoKHBhdGgsIGFkZGVkLCByZW1vdmVkLCBvbGRQb3NJbmMsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsYXN0ID0gcGF0aC5sYXN0Q29tcG9uZW50O1xuICAgICAgaWYgKGxhc3QgJiYgIW9wdGlvbnMub25lQ2hhbmdlUGVyVG9rZW4gJiYgbGFzdC5hZGRlZCA9PT0gYWRkZWQgJiYgbGFzdC5yZW1vdmVkID09PSByZW1vdmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2xkUG9zOiBwYXRoLm9sZFBvcyArIG9sZFBvc0luYyxcbiAgICAgICAgICBsYXN0Q29tcG9uZW50OiB7XG4gICAgICAgICAgICBjb3VudDogbGFzdC5jb3VudCArIDEsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkOiByZW1vdmVkLFxuICAgICAgICAgICAgcHJldmlvdXNDb21wb25lbnQ6IGxhc3QucHJldmlvdXNDb21wb25lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9sZFBvczogcGF0aC5vbGRQb3MgKyBvbGRQb3NJbmMsXG4gICAgICAgICAgbGFzdENvbXBvbmVudDoge1xuICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkOiByZW1vdmVkLFxuICAgICAgICAgICAgcHJldmlvdXNDb21wb25lbnQ6IGxhc3RcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBleHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkUG9zID0gYmFzZVBhdGgub2xkUG9zLFxuICAgICAgICBuZXdQb3MgPSBvbGRQb3MgLSBkaWFnb25hbFBhdGgsXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICAgIHdoaWxlIChuZXdQb3MgKyAxIDwgbmV3TGVuICYmIG9sZFBvcyArIDEgPCBvbGRMZW4gJiYgdGhpcy5lcXVhbHMob2xkU3RyaW5nW29sZFBvcyArIDFdLCBuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9wdGlvbnMpKSB7XG4gICAgICAgIG5ld1BvcysrO1xuICAgICAgICBvbGRQb3MrKztcbiAgICAgICAgY29tbW9uQ291bnQrKztcbiAgICAgICAgaWYgKG9wdGlvbnMub25lQ2hhbmdlUGVyVG9rZW4pIHtcbiAgICAgICAgICBiYXNlUGF0aC5sYXN0Q29tcG9uZW50ID0ge1xuICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICBwcmV2aW91c0NvbXBvbmVudDogYmFzZVBhdGgubGFzdENvbXBvbmVudCxcbiAgICAgICAgICAgIGFkZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1vbkNvdW50ICYmICFvcHRpb25zLm9uZUNoYW5nZVBlclRva2VuKSB7XG4gICAgICAgIGJhc2VQYXRoLmxhc3RDb21wb25lbnQgPSB7XG4gICAgICAgICAgY291bnQ6IGNvbW1vbkNvdW50LFxuICAgICAgICAgIHByZXZpb3VzQ29tcG9uZW50OiBiYXNlUGF0aC5sYXN0Q29tcG9uZW50LFxuICAgICAgICAgIGFkZGVkOiBmYWxzZSxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYmFzZVBhdGgub2xkUG9zID0gb2xkUG9zO1xuICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICB9LFxuICAgIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKGxlZnQsIHJpZ2h0LCBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBhcmF0b3IobGVmdCwgcmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IG9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVFbXB0eTogZnVuY3Rpb24gcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgICAgcmV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgY2FzdElucHV0OiBmdW5jdGlvbiBjYXN0SW5wdXQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIHRva2VuaXplOiBmdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsdWUpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihjaGFycykge1xuICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH0sXG4gICAgcG9zdFByb2Nlc3M6IGZ1bmN0aW9uIHBvc3RQcm9jZXNzKGNoYW5nZU9iamVjdHMpIHtcbiAgICAgIHJldHVybiBjaGFuZ2VPYmplY3RzO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gYnVpbGRWYWx1ZXMoZGlmZiwgbGFzdENvbXBvbmVudCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHVzZUxvbmdlc3RUb2tlbikge1xuICAgIC8vIEZpcnN0IHdlIGNvbnZlcnQgb3VyIGxpbmtlZCBsaXN0IG9mIGNvbXBvbmVudHMgaW4gcmV2ZXJzZSBvcmRlciB0byBhblxuICAgIC8vIGFycmF5IGluIHRoZSByaWdodCBvcmRlcjpcbiAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgIHZhciBuZXh0Q29tcG9uZW50O1xuICAgIHdoaWxlIChsYXN0Q29tcG9uZW50KSB7XG4gICAgICBjb21wb25lbnRzLnB1c2gobGFzdENvbXBvbmVudCk7XG4gICAgICBuZXh0Q29tcG9uZW50ID0gbGFzdENvbXBvbmVudC5wcmV2aW91c0NvbXBvbmVudDtcbiAgICAgIGRlbGV0ZSBsYXN0Q29tcG9uZW50LnByZXZpb3VzQ29tcG9uZW50O1xuICAgICAgbGFzdENvbXBvbmVudCA9IG5leHRDb21wb25lbnQ7XG4gICAgfVxuICAgIGNvbXBvbmVudHMucmV2ZXJzZSgpO1xuICAgIHZhciBjb21wb25lbnRQb3MgPSAwLFxuICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG4gICAgICBuZXdQb3MgPSAwLFxuICAgICAgb2xkUG9zID0gMDtcbiAgICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcbiAgICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1BvcyArPSBjb21wb25lbnQuY291bnQ7XG5cbiAgICAgICAgLy8gQ29tbW9uIGNhc2VcbiAgICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzO1xuICB9XG5cbiAgdmFyIGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuICBmdW5jdGlvbiBkaWZmQ2hhcnMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvbmdlc3RDb21tb25QcmVmaXgoc3RyMSwgc3RyMikge1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdHIxLmxlbmd0aCAmJiBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0cjFbaV0gIT0gc3RyMltpXSkge1xuICAgICAgICByZXR1cm4gc3RyMS5zbGljZSgwLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjEuc2xpY2UoMCwgaSk7XG4gIH1cbiAgZnVuY3Rpb24gbG9uZ2VzdENvbW1vblN1ZmZpeChzdHIxLCBzdHIyKSB7XG4gICAgdmFyIGk7XG5cbiAgICAvLyBVbmxpa2UgbG9uZ2VzdENvbW1vblByZWZpeCwgd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSB0byBoYW5kbGUgYWxsIHNjZW5hcmlvc1xuICAgIC8vIHdoZXJlIHdlIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nIHNpbmNlIHN0cjEuc2xpY2UoLTApIHdpbGwgcmV0dXJuIHRoZVxuICAgIC8vIGVudGlyZSBzdHJpbmcuXG4gICAgaWYgKCFzdHIxIHx8ICFzdHIyIHx8IHN0cjFbc3RyMS5sZW5ndGggLSAxXSAhPSBzdHIyW3N0cjIubGVuZ3RoIC0gMV0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IHN0cjEubGVuZ3RoICYmIGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RyMVtzdHIxLmxlbmd0aCAtIChpICsgMSldICE9IHN0cjJbc3RyMi5sZW5ndGggLSAoaSArIDEpXSkge1xuICAgICAgICByZXR1cm4gc3RyMS5zbGljZSgtaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHIxLnNsaWNlKC1pKTtcbiAgfVxuICBmdW5jdGlvbiByZXBsYWNlUHJlZml4KHN0cmluZywgb2xkUHJlZml4LCBuZXdQcmVmaXgpIHtcbiAgICBpZiAoc3RyaW5nLnNsaWNlKDAsIG9sZFByZWZpeC5sZW5ndGgpICE9IG9sZFByZWZpeCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJzdHJpbmcgXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHN0cmluZyksIFwiIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXggXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShvbGRQcmVmaXgpLCBcIjsgdGhpcyBpcyBhIGJ1Z1wiKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQcmVmaXggKyBzdHJpbmcuc2xpY2Uob2xkUHJlZml4Lmxlbmd0aCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVwbGFjZVN1ZmZpeChzdHJpbmcsIG9sZFN1ZmZpeCwgbmV3U3VmZml4KSB7XG4gICAgaWYgKCFvbGRTdWZmaXgpIHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBuZXdTdWZmaXg7XG4gICAgfVxuICAgIGlmIChzdHJpbmcuc2xpY2UoLW9sZFN1ZmZpeC5sZW5ndGgpICE9IG9sZFN1ZmZpeCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJzdHJpbmcgXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHN0cmluZyksIFwiIGRvZXNuJ3QgZW5kIHdpdGggc3VmZml4IFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkob2xkU3VmZml4KSwgXCI7IHRoaXMgaXMgYSBidWdcIikpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIC1vbGRTdWZmaXgubGVuZ3RoKSArIG5ld1N1ZmZpeDtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQcmVmaXgoc3RyaW5nLCBvbGRQcmVmaXgpIHtcbiAgICByZXR1cm4gcmVwbGFjZVByZWZpeChzdHJpbmcsIG9sZFByZWZpeCwgJycpO1xuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZVN1ZmZpeChzdHJpbmcsIG9sZFN1ZmZpeCkge1xuICAgIHJldHVybiByZXBsYWNlU3VmZml4KHN0cmluZywgb2xkU3VmZml4LCAnJyk7XG4gIH1cbiAgZnVuY3Rpb24gbWF4aW11bU92ZXJsYXAoc3RyaW5nMSwgc3RyaW5nMikge1xuICAgIHJldHVybiBzdHJpbmcyLnNsaWNlKDAsIG92ZXJsYXBDb3VudChzdHJpbmcxLCBzdHJpbmcyKSk7XG4gIH1cblxuICAvLyBOaWNrZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjA0MjI4NTMvMTcwOTU4N1xuICBmdW5jdGlvbiBvdmVybGFwQ291bnQoYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCBjYXNlcyB3aGVyZSB0aGUgc3RyaW5ncyBkaWZmZXIgaW4gbGVuZ3RoXG4gICAgdmFyIHN0YXJ0QSA9IDA7XG4gICAgaWYgKGEubGVuZ3RoID4gYi5sZW5ndGgpIHtcbiAgICAgIHN0YXJ0QSA9IGEubGVuZ3RoIC0gYi5sZW5ndGg7XG4gICAgfVxuICAgIHZhciBlbmRCID0gYi5sZW5ndGg7XG4gICAgaWYgKGEubGVuZ3RoIDwgYi5sZW5ndGgpIHtcbiAgICAgIGVuZEIgPSBhLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgYmFjay1yZWZlcmVuY2UgZm9yIGVhY2ggaW5kZXhcbiAgICAvLyAgIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIGluIGNhc2Ugb2YgYSBtaXNtYXRjaC5cbiAgICAvLyAgIFdlIG9ubHkgbmVlZCBCIHRvIG1ha2UgdGhlc2UgcmVmZXJlbmNlczpcbiAgICB2YXIgbWFwID0gQXJyYXkoZW5kQik7XG4gICAgdmFyIGsgPSAwOyAvLyBJbmRleCB0aGF0IGxhZ3MgYmVoaW5kIGpcbiAgICBtYXBbMF0gPSAwO1xuICAgIGZvciAodmFyIGogPSAxOyBqIDwgZW5kQjsgaisrKSB7XG4gICAgICBpZiAoYltqXSA9PSBiW2tdKSB7XG4gICAgICAgIG1hcFtqXSA9IG1hcFtrXTsgLy8gc2tpcCBvdmVyIHRoZSBzYW1lIGNoYXJhY3RlciAob3B0aW9uYWwgb3B0aW1pc2F0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwW2pdID0gaztcbiAgICAgIH1cbiAgICAgIHdoaWxlIChrID4gMCAmJiBiW2pdICE9IGJba10pIHtcbiAgICAgICAgayA9IG1hcFtrXTtcbiAgICAgIH1cbiAgICAgIGlmIChiW2pdID09IGJba10pIHtcbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQaGFzZSAyOiB1c2UgdGhlc2UgcmVmZXJlbmNlcyB3aGlsZSBpdGVyYXRpbmcgb3ZlciBBXG4gICAgayA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0QTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHdoaWxlIChrID4gMCAmJiBhW2ldICE9IGJba10pIHtcbiAgICAgICAgayA9IG1hcFtrXTtcbiAgICAgIH1cbiAgICAgIGlmIChhW2ldID09IGJba10pIHtcbiAgICAgICAgaysrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBjb25zaXN0ZW50bHkgdXNlcyBXaW5kb3dzIGxpbmUgZW5kaW5ncy5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc09ubHlXaW5MaW5lRW5kaW5ncyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmluY2x1ZGVzKCdcXHJcXG4nKSAmJiAhc3RyaW5nLnN0YXJ0c1dpdGgoJ1xcbicpICYmICFzdHJpbmcubWF0Y2goL1teXFxyXVxcbi8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGNvbnNpc3RlbnRseSB1c2VzIFVuaXggbGluZSBlbmRpbmdzLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFzT25seVVuaXhMaW5lRW5kaW5ncyhzdHJpbmcpIHtcbiAgICByZXR1cm4gIXN0cmluZy5pbmNsdWRlcygnXFxyXFxuJykgJiYgc3RyaW5nLmluY2x1ZGVzKCdcXG4nKTtcbiAgfVxuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG4gIC8vXG4gIC8vIFJhbmdlcyBhbmQgZXhjZXB0aW9uczpcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuICAvLyAgLSBVKzAwRDcgIMOXIE11bHRpcGxpY2F0aW9uIHNpZ25cbiAgLy8gIC0gVSswMEY3ICDDtyBEaXZpc2lvbiBzaWduXG4gIC8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4gIC8vIExhdGluIEV4dGVuZGVkLUIsIDAxODDigJMwMjRGXG4gIC8vIElQQSBFeHRlbnNpb25zLCAwMjUw4oCTMDJBRlxuICAvLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4gIC8vICAtIFUrMDJDNyAgy4cgJiM3MTE7ICBDYXJvblxuICAvLyAgLSBVKzAyRDggIMuYICYjNzI4OyAgQnJldmVcbiAgLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuICAvLyAgLSBVKzAyREEgIMuaICYjNzMwOyAgUmluZyBBYm92ZVxuICAvLyAgLSBVKzAyREIgIMubICYjNzMxOyAgT2dvbmVrXG4gIC8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuICAvLyAgLSBVKzAyREQgIMudICYjNzMzOyAgRG91YmxlIEFjdXRlIEFjY2VudFxuICAvLyBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsLCAxRTAw4oCTMUVGRlxuICB2YXIgZXh0ZW5kZWRXb3JkQ2hhcnMgPSBcImEtekEtWjAtOV9cXFxcdXtDMH0tXFxcXHV7RkZ9XFxcXHV7RDh9LVxcXFx1e0Y2fVxcXFx1e0Y4fS1cXFxcdXsyQzZ9XFxcXHV7MkM4fS1cXFxcdXsyRDd9XFxcXHV7MkRFfS1cXFxcdXsyRkZ9XFxcXHV7MUUwMH0tXFxcXHV7MUVGRn1cIjtcblxuICAvLyBFYWNoIHRva2VuIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIEEgcHVuY3R1YXRpb24gbWFyayBwbHVzIHRoZSBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlXG4gIC8vIC0gQSB3b3JkIHBsdXMgdGhlIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2VcbiAgLy8gLSBQdXJlIHdoaXRlc3BhY2UgKGJ1dCBvbmx5IGluIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyB0aGUgZW50aXJlIHRleHRcbiAgLy8gICBpcyBqdXN0IHdoaXRlc3BhY2UpXG4gIC8vXG4gIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIGluIHRoZSB0b2tlbnMgYmVjYXVzZSB0aGUgdHdvXG4gIC8vIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMgcHJvZHVjZSBob3JyaWJseSBicm9rZW4gcmVzdWx0czpcbiAgLy8gKiBJZiB3ZSBqdXN0IGRpc2NhcmQgdGhlIHdoaXRlc3BhY2UsIHdlIGNhbid0IGZ1bGx5IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWxcbiAgLy8gICB0ZXh0IGZyb20gdGhlIHNlcXVlbmNlIG9mIHRva2VucyBhbmQgYW55IGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBkaWZmIHdpbGxcbiAgLy8gICBnZXQgdGhlIHdoaXRlc3BhY2Ugd3JvbmcuXG4gIC8vICogSWYgd2UgaGF2ZSBzZXBhcmF0ZSB0b2tlbnMgZm9yIHdoaXRlc3BhY2UsIHRoZW4gaW4gYSB0eXBpY2FsIHRleHQgZXZlcnlcbiAgLy8gICBzZWNvbmQgdG9rZW4gd2lsbCBiZSBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIuIEJ1dCB0aGlzIG9mdGVuIHJlc3VsdHMgaW5cbiAgLy8gICB0aGUgb3B0aW1hbCBkaWZmIGJldHdlZW4gdHdvIHRleHRzIGJlaW5nIGEgcGVydmVyc2Ugb25lIHRoYXQgcHJlc2VydmVzXG4gIC8vICAgdGhlIHNwYWNlcyBiZXR3ZWVuIHdvcmRzIGJ1dCBkZWxldGVzIGFuZCByZWluc2VydHMgYWN0dWFsIGNvbW1vbiB3b3Jkcy5cbiAgLy8gICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2twZGVja2VyL2pzZGlmZi9pc3N1ZXMvMTYwI2lzc3VlY29tbWVudC0xODY2MDk5NjQwXG4gIC8vICAgZm9yIGFuIGV4YW1wbGUuXG4gIC8vXG4gIC8vIEtlZXBpbmcgdGhlIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2Ugb2YgY291cnNlIGhhcyBpbXBsaWNhdGlvbnMgZm9yIC5lcXVhbHNcbiAgLy8gYW5kIC5qb2luLCBub3QganVzdCAudG9rZW5pemUuXG5cbiAgLy8gVGhpcyByZWdleCBkb2VzIE5PVCBmdWxseSBpbXBsZW1lbnQgdGhlIHRva2VuaXphdGlvbiBydWxlcyBkZXNjcmliZWQgYWJvdmUuXG4gIC8vIEluc3RlYWQsIGl0IGdpdmVzIHJ1bnMgb2Ygd2hpdGVzcGFjZSB0aGVpciBvd24gXCJ0b2tlblwiLiBUaGUgdG9rZW5pemUgbWV0aG9kXG4gIC8vIHRoZW4gaGFuZGxlcyBzdGl0Y2hpbmcgd2hpdGVzcGFjZSB0b2tlbnMgb250byBhZGphY2VudCB3b3JkIG9yIHB1bmN0dWF0aW9uXG4gIC8vIHRva2Vucy5cbiAgdmFyIHRva2VuaXplSW5jbHVkaW5nV2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoXCJbXCIuY29uY2F0KGV4dGVuZGVkV29yZENoYXJzLCBcIl0rfFxcXFxzK3xbXlwiKS5jb25jYXQoZXh0ZW5kZWRXb3JkQ2hhcnMsIFwiXVwiKSwgJ3VnJyk7XG4gIHZhciB3b3JkRGlmZiA9IG5ldyBEaWZmKCk7XG4gIHdvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmlnbm9yZUNhc2UpIHtcbiAgICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICByaWdodCA9IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0LnRyaW0oKSA9PT0gcmlnaHQudHJpbSgpO1xuICB9O1xuICB3b3JkRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgcGFydHM7XG4gICAgaWYgKG9wdGlvbnMuaW50bFNlZ21lbnRlcikge1xuICAgICAgaWYgKG9wdGlvbnMuaW50bFNlZ21lbnRlci5yZXNvbHZlZE9wdGlvbnMoKS5ncmFudWxhcml0eSAhPSAnd29yZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VnbWVudGVyIHBhc3NlZCBtdXN0IGhhdmUgYSBncmFudWxhcml0eSBvZiBcIndvcmRcIicpO1xuICAgICAgfVxuICAgICAgcGFydHMgPSBBcnJheS5mcm9tKG9wdGlvbnMuaW50bFNlZ21lbnRlci5zZWdtZW50KHZhbHVlKSwgZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cyA9IHZhbHVlLm1hdGNoKHRva2VuaXplSW5jbHVkaW5nV2hpdGVzcGFjZSkgfHwgW107XG4gICAgfVxuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICB2YXIgcHJldlBhcnQgPSBudWxsO1xuICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgIGlmICgvXFxzLy50ZXN0KHBhcnQpKSB7XG4gICAgICAgIGlmIChwcmV2UGFydCA9PSBudWxsKSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2gocGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW5zLnBvcCgpICsgcGFydCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoL1xccy8udGVzdChwcmV2UGFydCkpIHtcbiAgICAgICAgaWYgKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPT0gcHJldlBhcnQpIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbnMucG9wKCkgKyBwYXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaChwcmV2UGFydCArIHBhcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbnMucHVzaChwYXJ0KTtcbiAgICAgIH1cbiAgICAgIHByZXZQYXJ0ID0gcGFydDtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9O1xuICB3b3JkRGlmZi5qb2luID0gZnVuY3Rpb24gKHRva2Vucykge1xuICAgIC8vIFRva2VucyBiZWluZyBqb2luZWQgaGVyZSB3aWxsIGFsd2F5cyBoYXZlIGFwcGVhcmVkIGNvbnNlY3V0aXZlbHkgaW4gdGhlXG4gICAgLy8gc2FtZSB0ZXh0LCBzbyB3ZSBjYW4gc2ltcGx5IHN0cmlwIG9mZiB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHRoZVxuICAgIC8vIHRva2VucyBleGNlcHQgdGhlIGZpcnN0IChhbmQgZXhjZXB0IGFueSB3aGl0ZXNwYWNlLW9ubHkgdG9rZW5zIC0gYnV0IHN1Y2hcbiAgICAvLyBhIHRva2VuIHdpbGwgYWx3YXlzIGJlIHRoZSBmaXJzdCBhbmQgb25seSB0b2tlbiBhbnl3YXkpIGFuZCB0aGVuIGpvaW4gdGhlbVxuICAgIC8vIGFuZCB0aGUgd2hpdGVzcGFjZSBhcm91bmQgd29yZHMgYW5kIHB1bmN0dWF0aW9uIHdpbGwgZW5kIHVwIGNvcnJlY3QuXG4gICAgcmV0dXJuIHRva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpKSB7XG4gICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0b2tlbi5yZXBsYWNlKC9eXFxzKy8sICcnKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKCcnKTtcbiAgfTtcbiAgd29yZERpZmYucG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoY2hhbmdlcywgb3B0aW9ucykge1xuICAgIGlmICghY2hhbmdlcyB8fCBvcHRpb25zLm9uZUNoYW5nZVBlclRva2VuKSB7XG4gICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG4gICAgdmFyIGxhc3RLZWVwID0gbnVsbDtcbiAgICAvLyBDaGFuZ2Ugb2JqZWN0cyByZXByZXNlbnRpbmcgYW55IGluc2VydGlvbiBvciBkZWxldGlvbiBzaW5jZSB0aGUgbGFzdFxuICAgIC8vIFwia2VlcFwiIGNoYW5nZSBvYmplY3QuIFRoZXJlIGNhbiBiZSBhdCBtb3N0IG9uZSBvZiBlYWNoLlxuICAgIHZhciBpbnNlcnRpb24gPSBudWxsO1xuICAgIHZhciBkZWxldGlvbiA9IG51bGw7XG4gICAgY2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGFuZ2UpIHtcbiAgICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgICAgaW5zZXJ0aW9uID0gY2hhbmdlO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgICBkZWxldGlvbiA9IGNoYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbnNlcnRpb24gfHwgZGVsZXRpb24pIHtcbiAgICAgICAgICAvLyBNYXkgYmUgZmFsc2UgYXQgc3RhcnQgb2YgdGV4dFxuICAgICAgICAgIGRlZHVwZVdoaXRlc3BhY2VJbkNoYW5nZU9iamVjdHMobGFzdEtlZXAsIGRlbGV0aW9uLCBpbnNlcnRpb24sIGNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEtlZXAgPSBjaGFuZ2U7XG4gICAgICAgIGluc2VydGlvbiA9IG51bGw7XG4gICAgICAgIGRlbGV0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoaW5zZXJ0aW9uIHx8IGRlbGV0aW9uKSB7XG4gICAgICBkZWR1cGVXaGl0ZXNwYWNlSW5DaGFuZ2VPYmplY3RzKGxhc3RLZWVwLCBkZWxldGlvbiwgaW5zZXJ0aW9uLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH07XG4gIGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICAgIC8vIFRoaXMgb3B0aW9uIGhhcyBuZXZlciBiZWVuIGRvY3VtZW50ZWQgYW5kIG5ldmVyIHdpbGwgYmUgKGl0J3MgY2xlYXJlciB0b1xuICAgIC8vIGp1c3QgY2FsbCBgZGlmZldvcmRzV2l0aFNwYWNlYCBkaXJlY3RseSBpZiB5b3UgbmVlZCB0aGF0IGJlaGF2aW9yKSwgYnV0XG4gICAgLy8gaGFzIGV4aXN0ZWQgaW4ganNkaWZmIGZvciBhIGxvbmcgdGltZSwgc28gd2UgcmV0YWluIHN1cHBvcnQgZm9yIGl0IGhlcmVcbiAgICAvLyBmb3IgdGhlIHNha2Ugb2YgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkgIT0gbnVsbCAmJiAhb3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlKSB7XG4gICAgICByZXR1cm4gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICB9XG4gIGZ1bmN0aW9uIGRlZHVwZVdoaXRlc3BhY2VJbkNoYW5nZU9iamVjdHMoc3RhcnRLZWVwLCBkZWxldGlvbiwgaW5zZXJ0aW9uLCBlbmRLZWVwKSB7XG4gICAgLy8gQmVmb3JlIHJldHVybmluZywgd2UgdGlkeSB1cCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvZiB0aGVcbiAgICAvLyBjaGFuZ2Ugb2JqZWN0cyB0byBlbGltaW5hdGUgY2FzZXMgd2hlcmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBvbmUgb2JqZWN0XG4gICAgLy8gaXMgcmVwZWF0ZWQgYXMgbGVhZGluZyB3aGl0ZXNwYWNlIGluIHRoZSBuZXh0LlxuICAgIC8vIEJlbG93IGFyZSBleGFtcGxlcyBvZiB0aGUgb3V0Y29tZXMgd2Ugd2FudCBoZXJlIHRvIGV4cGxhaW4gdGhlIGNvZGUuXG4gICAgLy8gST1pbnNlcnQsIEs9a2VlcCwgRD1kZWxldGVcbiAgICAvLyAxLiBkaWZmaW5nICdmb28gYmFyIGJheicgdnMgJ2ZvbyBiYXonXG4gICAgLy8gICAgUHJpb3IgdG8gY2xlYW51cCwgd2UgaGF2ZSBLOidmb28gJyBEOicgYmFyICcgSzonIGJheidcbiAgICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSB3YW50OiAgIEs6J2ZvbyAnIEQ6J2JhciAnIEs6J2JheidcbiAgICAvL1xuICAgIC8vIDIuIERpZmZpbmcgJ2ZvbyBiYXIgYmF6JyB2cyAnZm9vIHF1eCBiYXonXG4gICAgLy8gICAgUHJpb3IgdG8gY2xlYW51cCwgd2UgaGF2ZSBLOidmb28gJyBEOicgYmFyICcgSTonIHF1eCAnIEs6JyBiYXonXG4gICAgLy8gICAgQWZ0ZXIgY2xlYW51cCwgd2Ugd2FudCBLOidmb28gJyBEOidiYXInIEk6J3F1eCcgSzonIGJheidcbiAgICAvL1xuICAgIC8vIDMuIERpZmZpbmcgJ2Zvb1xcbmJhciBiYXonIHZzICdmb28gYmF6J1xuICAgIC8vICAgIFByaW9yIHRvIGNsZWFudXAsIHdlIGhhdmUgSzonZm9vICcgRDonXFxuYmFyICcgSzonIGJheidcbiAgICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSB3YW50IEsnZm9vJyBEOidcXG5iYXInIEs6JyBiYXonXG4gICAgLy9cbiAgICAvLyA0LiBEaWZmaW5nICdmb28gYmF6JyB2cyAnZm9vXFxuYmFyIGJheidcbiAgICAvLyAgICBQcmlvciB0byBjbGVhbnVwLCB3ZSBoYXZlIEs6J2Zvb1xcbicgSTonXFxuYmFyICcgSzonIGJheidcbiAgICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSBpZGVhbGx5IHdhbnQgSydmb28nIEk6J1xcbmJhcicgSzonIGJheidcbiAgICAvLyAgICBidXQgZG9uJ3QgYWN0dWFsbHkgbWFuYWdlIHRoaXMgY3VycmVudGx5ICh0aGUgcHJlLWNsZWFudXAgY2hhbmdlXG4gICAgLy8gICAgb2JqZWN0cyBkb24ndCBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0byBtYWtlIGl0IHBvc3NpYmxlKS5cbiAgICAvL1xuICAgIC8vIDUuIERpZmZpbmcgJ2ZvbyAgIGJhciBiYXonIHZzICdmb28gIGJheidcbiAgICAvLyAgICBQcmlvciB0byBjbGVhbnVwLCB3ZSBoYXZlIEs6J2ZvbyAgJyBEOicgICBiYXIgJyBLOicgIGJheidcbiAgICAvLyAgICBBZnRlciBjbGVhbnVwLCB3ZSB3YW50IEs6J2ZvbyAgJyBEOicgYmFyICcgSzonYmF6J1xuICAgIC8vXG4gICAgLy8gT3VyIGhhbmRsaW5nIGlzIHVuYXZvaWRhYmx5IGltcGVyZmVjdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIGEgc2luZ2xlXG4gICAgLy8gaW5kZWwgYmV0d2VlbiBrZWVwcyBhbmQgdGhlIHdoaXRlc3BhY2UgaGFzIGNoYW5nZWQuIEZvciBpbnN0YW5jZSwgY29uc2lkZXJcbiAgICAvLyBkaWZmaW5nICdmb29cXHRiYXJcXG5iYXonIHZzICdmb28gYmF6Jy4gVW5sZXNzIHdlIGNyZWF0ZSBhbiBleHRyYSBjaGFuZ2VcbiAgICAvLyBvYmplY3QgdG8gcmVwcmVzZW50IHRoZSBpbnNlcnRpb24gb2YgdGhlIHNwYWNlIGNoYXJhY3RlciAod2hpY2ggaXNuJ3QgZXZlblxuICAgIC8vIGEgdG9rZW4pLCB3ZSBoYXZlIG5vIHdheSB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRleHRzJ1xuICAgIC8vIG9yaWdpbmFsIHdoaXRlc3BhY2UgaW4gdGhlIHJlc3VsdCB3ZSByZXR1cm4uIFN0aWxsLCB3ZSBkbyBvdXIgYmVzdCB0b1xuICAgIC8vIG91dHB1dCBzb21ldGhpbmcgdGhhdCB3aWxsIGxvb2sgc2Vuc2libGUgaWYgd2UgZS5nLiBwcmludCBpdCB3aXRoXG4gICAgLy8gaW5zZXJ0aW9ucyBpbiBncmVlbiBhbmQgZGVsZXRpb25zIGluIHJlZC5cblxuICAgIC8vIEJldHdlZW4gdHdvIFwia2VlcFwiIGNoYW5nZSBvYmplY3RzIChvciBiZWZvcmUgdGhlIGZpcnN0IG9yIGFmdGVyIHRoZSBsYXN0XG4gICAgLy8gY2hhbmdlIG9iamVjdCksIHdlIGNhbiBoYXZlIGVpdGhlcjpcbiAgICAvLyAqIEEgXCJkZWxldGVcIiBmb2xsb3dlZCBieSBhbiBcImluc2VydFwiXG4gICAgLy8gKiBKdXN0IGFuIFwiaW5zZXJ0XCJcbiAgICAvLyAqIEp1c3QgYSBcImRlbGV0ZVwiXG4gICAgLy8gV2UgaGFuZGxlIHRoZSB0aHJlZSBjYXNlcyBzZXBhcmF0ZWx5LlxuICAgIGlmIChkZWxldGlvbiAmJiBpbnNlcnRpb24pIHtcbiAgICAgIHZhciBvbGRXc1ByZWZpeCA9IGRlbGV0aW9uLnZhbHVlLm1hdGNoKC9eXFxzKi8pWzBdO1xuICAgICAgdmFyIG9sZFdzU3VmZml4ID0gZGVsZXRpb24udmFsdWUubWF0Y2goL1xccyokLylbMF07XG4gICAgICB2YXIgbmV3V3NQcmVmaXggPSBpbnNlcnRpb24udmFsdWUubWF0Y2goL15cXHMqLylbMF07XG4gICAgICB2YXIgbmV3V3NTdWZmaXggPSBpbnNlcnRpb24udmFsdWUubWF0Y2goL1xccyokLylbMF07XG4gICAgICBpZiAoc3RhcnRLZWVwKSB7XG4gICAgICAgIHZhciBjb21tb25Xc1ByZWZpeCA9IGxvbmdlc3RDb21tb25QcmVmaXgob2xkV3NQcmVmaXgsIG5ld1dzUHJlZml4KTtcbiAgICAgICAgc3RhcnRLZWVwLnZhbHVlID0gcmVwbGFjZVN1ZmZpeChzdGFydEtlZXAudmFsdWUsIG5ld1dzUHJlZml4LCBjb21tb25Xc1ByZWZpeCk7XG4gICAgICAgIGRlbGV0aW9uLnZhbHVlID0gcmVtb3ZlUHJlZml4KGRlbGV0aW9uLnZhbHVlLCBjb21tb25Xc1ByZWZpeCk7XG4gICAgICAgIGluc2VydGlvbi52YWx1ZSA9IHJlbW92ZVByZWZpeChpbnNlcnRpb24udmFsdWUsIGNvbW1vbldzUHJlZml4KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmRLZWVwKSB7XG4gICAgICAgIHZhciBjb21tb25Xc1N1ZmZpeCA9IGxvbmdlc3RDb21tb25TdWZmaXgob2xkV3NTdWZmaXgsIG5ld1dzU3VmZml4KTtcbiAgICAgICAgZW5kS2VlcC52YWx1ZSA9IHJlcGxhY2VQcmVmaXgoZW5kS2VlcC52YWx1ZSwgbmV3V3NTdWZmaXgsIGNvbW1vbldzU3VmZml4KTtcbiAgICAgICAgZGVsZXRpb24udmFsdWUgPSByZW1vdmVTdWZmaXgoZGVsZXRpb24udmFsdWUsIGNvbW1vbldzU3VmZml4KTtcbiAgICAgICAgaW5zZXJ0aW9uLnZhbHVlID0gcmVtb3ZlU3VmZml4KGluc2VydGlvbi52YWx1ZSwgY29tbW9uV3NTdWZmaXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5zZXJ0aW9uKSB7XG4gICAgICAvLyBUaGUgd2hpdGVzcGFjZXMgYWxsIHJlZmxlY3Qgd2hhdCB3YXMgaW4gdGhlIG5ldyB0ZXh0IHJhdGhlciB0aGFuXG4gICAgICAvLyB0aGUgb2xkLCBzbyB3ZSBlc3NlbnRpYWxseSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHdoaXRlc3BhY2VcbiAgICAgIC8vIGluc2VydGlvbiBvciBkZWxldGlvbi4gV2UganVzdCB3YW50IHRvIGRlZHVwZSB0aGUgd2hpdGVzcGFjZS5cbiAgICAgIC8vIFdlIGRvIHRoYXQgYnkgaGF2aW5nIGVhY2ggY2hhbmdlIG9iamVjdCBrZWVwIGl0cyB0cmFpbGluZ1xuICAgICAgLy8gd2hpdGVzcGFjZSBhbmQgZGVsZXRpbmcgZHVwbGljYXRlIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVyZVxuICAgICAgLy8gcHJlc2VudC5cbiAgICAgIGlmIChzdGFydEtlZXApIHtcbiAgICAgICAgaW5zZXJ0aW9uLnZhbHVlID0gaW5zZXJ0aW9uLnZhbHVlLnJlcGxhY2UoL15cXHMqLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZEtlZXApIHtcbiAgICAgICAgZW5kS2VlcC52YWx1ZSA9IGVuZEtlZXAudmFsdWUucmVwbGFjZSgvXlxccyovLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2Ugd2UndmUgZ290IGEgZGVsZXRpb24gYW5kIG5vIGluc2VydGlvblxuICAgIH0gZWxzZSBpZiAoc3RhcnRLZWVwICYmIGVuZEtlZXApIHtcbiAgICAgIHZhciBuZXdXc0Z1bGwgPSBlbmRLZWVwLnZhbHVlLm1hdGNoKC9eXFxzKi8pWzBdLFxuICAgICAgICBkZWxXc1N0YXJ0ID0gZGVsZXRpb24udmFsdWUubWF0Y2goL15cXHMqLylbMF0sXG4gICAgICAgIGRlbFdzRW5kID0gZGVsZXRpb24udmFsdWUubWF0Y2goL1xccyokLylbMF07XG5cbiAgICAgIC8vIEFueSB3aGl0ZXNwYWNlIHRoYXQgY29tZXMgc3RyYWlnaHQgYWZ0ZXIgc3RhcnRLZWVwIGluIGJvdGggdGhlIG9sZCBhbmRcbiAgICAgIC8vIG5ldyB0ZXh0cywgYXNzaWduIHRvIHN0YXJ0S2VlcCBhbmQgcmVtb3ZlIGZyb20gdGhlIGRlbGV0aW9uLlxuICAgICAgdmFyIG5ld1dzU3RhcnQgPSBsb25nZXN0Q29tbW9uUHJlZml4KG5ld1dzRnVsbCwgZGVsV3NTdGFydCk7XG4gICAgICBkZWxldGlvbi52YWx1ZSA9IHJlbW92ZVByZWZpeChkZWxldGlvbi52YWx1ZSwgbmV3V3NTdGFydCk7XG5cbiAgICAgIC8vIEFueSB3aGl0ZXNwYWNlIHRoYXQgY29tZXMgc3RyYWlnaHQgYmVmb3JlIGVuZEtlZXAgaW4gYm90aCB0aGUgb2xkIGFuZFxuICAgICAgLy8gbmV3IHRleHRzLCBhbmQgaGFzbid0IGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byBzdGFydEtlZXAsIGFzc2lnbiB0b1xuICAgICAgLy8gZW5kS2VlcCBhbmQgcmVtb3ZlIGZyb20gdGhlIGRlbGV0aW9uLlxuICAgICAgdmFyIG5ld1dzRW5kID0gbG9uZ2VzdENvbW1vblN1ZmZpeChyZW1vdmVQcmVmaXgobmV3V3NGdWxsLCBuZXdXc1N0YXJ0KSwgZGVsV3NFbmQpO1xuICAgICAgZGVsZXRpb24udmFsdWUgPSByZW1vdmVTdWZmaXgoZGVsZXRpb24udmFsdWUsIG5ld1dzRW5kKTtcbiAgICAgIGVuZEtlZXAudmFsdWUgPSByZXBsYWNlUHJlZml4KGVuZEtlZXAudmFsdWUsIG5ld1dzRnVsbCwgbmV3V3NFbmQpO1xuXG4gICAgICAvLyBJZiB0aGVyZSdzIGFueSB3aGl0ZXNwYWNlIGZyb20gdGhlIG5ldyB0ZXh0IHRoYXQgSEFTTidUIGFscmVhZHkgYmVlblxuICAgICAgLy8gYXNzaWduZWQsIGFzc2lnbiBpdCB0byB0aGUgc3RhcnQ6XG4gICAgICBzdGFydEtlZXAudmFsdWUgPSByZXBsYWNlU3VmZml4KHN0YXJ0S2VlcC52YWx1ZSwgbmV3V3NGdWxsLCBuZXdXc0Z1bGwuc2xpY2UoMCwgbmV3V3NGdWxsLmxlbmd0aCAtIG5ld1dzRW5kLmxlbmd0aCkpO1xuICAgIH0gZWxzZSBpZiAoZW5kS2VlcCkge1xuICAgICAgLy8gV2UgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgdGV4dC4gUHJlc2VydmUgYWxsIHRoZSB3aGl0ZXNwYWNlIG9uXG4gICAgICAvLyBlbmRLZWVwLCBhbmQganVzdCByZW1vdmUgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQgb2YgZGVsZXRpb24gdG8gdGhlXG4gICAgICAvLyBleHRlbnQgdGhhdCBpdCBvdmVybGFwcyB3aXRoIHRoZSBzdGFydCBvZiBlbmRLZWVwLlxuICAgICAgdmFyIGVuZEtlZXBXc1ByZWZpeCA9IGVuZEtlZXAudmFsdWUubWF0Y2goL15cXHMqLylbMF07XG4gICAgICB2YXIgZGVsZXRpb25Xc1N1ZmZpeCA9IGRlbGV0aW9uLnZhbHVlLm1hdGNoKC9cXHMqJC8pWzBdO1xuICAgICAgdmFyIG92ZXJsYXAgPSBtYXhpbXVtT3ZlcmxhcChkZWxldGlvbldzU3VmZml4LCBlbmRLZWVwV3NQcmVmaXgpO1xuICAgICAgZGVsZXRpb24udmFsdWUgPSByZW1vdmVTdWZmaXgoZGVsZXRpb24udmFsdWUsIG92ZXJsYXApO1xuICAgIH0gZWxzZSBpZiAoc3RhcnRLZWVwKSB7XG4gICAgICAvLyBXZSBhcmUgYXQgdGhlIEVORCBvZiB0aGUgdGV4dC4gUHJlc2VydmUgYWxsIHRoZSB3aGl0ZXNwYWNlIG9uXG4gICAgICAvLyBzdGFydEtlZXAsIGFuZCBqdXN0IHJlbW92ZSB3aGl0ZXNwYWNlIGZyb20gdGhlIHN0YXJ0IG9mIGRlbGV0aW9uIHRvXG4gICAgICAvLyB0aGUgZXh0ZW50IHRoYXQgaXQgb3ZlcmxhcHMgd2l0aCB0aGUgZW5kIG9mIHN0YXJ0S2VlcC5cbiAgICAgIHZhciBzdGFydEtlZXBXc1N1ZmZpeCA9IHN0YXJ0S2VlcC52YWx1ZS5tYXRjaCgvXFxzKiQvKVswXTtcbiAgICAgIHZhciBkZWxldGlvbldzUHJlZml4ID0gZGVsZXRpb24udmFsdWUubWF0Y2goL15cXHMqLylbMF07XG4gICAgICB2YXIgX292ZXJsYXAgPSBtYXhpbXVtT3ZlcmxhcChzdGFydEtlZXBXc1N1ZmZpeCwgZGVsZXRpb25Xc1ByZWZpeCk7XG4gICAgICBkZWxldGlvbi52YWx1ZSA9IHJlbW92ZVByZWZpeChkZWxldGlvbi52YWx1ZSwgX292ZXJsYXApO1xuICAgIH1cbiAgfVxuICB2YXIgd29yZFdpdGhTcGFjZURpZmYgPSBuZXcgRGlmZigpO1xuICB3b3JkV2l0aFNwYWNlRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIFNsaWdodGx5IGRpZmZlcmVudCB0byB0aGUgdG9rZW5pemVJbmNsdWRpbmdXaGl0ZXNwYWNlIHJlZ2V4IHVzZWQgYWJvdmUgaW5cbiAgICAvLyB0aGF0IHRoaXMgb25lIHRyZWF0cyBlYWNoIGluZGl2aWR1YWwgbmV3bGluZSBhcyBhIGRpc3RpbmN0IHRva2VucywgcmF0aGVyXG4gICAgLy8gdGhhbiBtZXJnaW5nIHRoZW0gaW50byBvdGhlciBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlLiBUaGlzIHdhcyByZXF1ZXN0ZWRcbiAgICAvLyBpbiBodHRwczovL2dpdGh1Yi5jb20va3BkZWNrZXIvanNkaWZmL2lzc3Vlcy8xODAgJlxuICAgIC8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9rcGRlY2tlci9qc2RpZmYvaXNzdWVzLzIxMVxuICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoXCIoXFxcXHI/XFxcXG4pfFtcIi5jb25jYXQoZXh0ZW5kZWRXb3JkQ2hhcnMsIFwiXSt8W15cXFxcU1xcXFxuXFxcXHJdK3xbXlwiKS5jb25jYXQoZXh0ZW5kZWRXb3JkQ2hhcnMsIFwiXVwiKSwgJ3VnJyk7XG4gICAgcmV0dXJuIHZhbHVlLm1hdGNoKHJlZ2V4KSB8fCBbXTtcbiAgfTtcbiAgZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHdvcmRXaXRoU3BhY2VEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZWZhdWx0cy5jYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9XG5cbiAgdmFyIGxpbmVEaWZmID0gbmV3IERpZmYoKTtcbiAgbGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpcFRyYWlsaW5nQ3IpIHtcbiAgICAgIC8vIHJlbW92ZSBvbmUgXFxyIGJlZm9yZSBcXG4gdG8gbWF0Y2ggR05VIGRpZmYncyAtLXN0cmlwLXRyYWlsaW5nLWNyIGJlaGF2aW9yXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gICAgfVxuICAgIHZhciByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAgIC8vIElnbm9yZSB0aGUgZmluYWwgZW1wdHkgdG9rZW4gdGhhdCBvY2N1cnMgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggYSBuZXcgbGluZVxuICAgIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZSA9IGxpbmVzQW5kTmV3bGluZXNbaV07XG4gICAgICBpZiAoaSAlIDIgJiYgIW9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgICAgcmV0TGluZXNbcmV0TGluZXMubGVuZ3RoIC0gMV0gKz0gbGluZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldExpbmVzLnB1c2gobGluZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRMaW5lcztcbiAgfTtcbiAgbGluZURpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBvcHRpb25zKSB7XG4gICAgLy8gSWYgd2UncmUgaWdub3Jpbmcgd2hpdGVzcGFjZSwgd2UgbmVlZCB0byBub3JtYWxpc2UgbGluZXMgYnkgc3RyaXBwaW5nXG4gICAgLy8gd2hpdGVzcGFjZSBiZWZvcmUgY2hlY2tpbmcgZXF1YWxpdHkuIChUaGlzIGhhcyBhbiBhbm5veWluZyBpbnRlcmFjdGlvblxuICAgIC8vIHdpdGggbmV3bGluZUlzVG9rZW4gdGhhdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nOiBpZiBuZXdsaW5lcyBnZXQgdGhlaXJcbiAgICAvLyBvd24gdG9rZW4sIHRoZW4gd2UgRE9OJ1Qgd2FudCB0byB0cmltIHRoZSAqbmV3bGluZSogdG9rZW5zIGRvd24gdG8gZW1wdHlcbiAgICAvLyBzdHJpbmdzLCBzaW5jZSB0aGlzIHdvdWxkIGNhdXNlIHVzIHRvIHRyZWF0IHdoaXRlc3BhY2Utb25seSBsaW5lIGNvbnRlbnRcbiAgICAvLyBhcyBlcXVhbCB0byBhIHNlcGFyYXRvciBiZXR3ZWVuIGxpbmVzLCB3aGljaCB3b3VsZCBiZSB3ZWlyZCBhbmRcbiAgICAvLyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvciBvZiB0aGUgb3B0aW9ucy4pXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgaWYgKCFvcHRpb25zLm5ld2xpbmVJc1Rva2VuIHx8ICFsZWZ0LmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICBsZWZ0ID0gbGVmdC50cmltKCk7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMubmV3bGluZUlzVG9rZW4gfHwgIXJpZ2h0LmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgICByaWdodCA9IHJpZ2h0LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaWdub3JlTmV3bGluZUF0RW9mICYmICFvcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICBpZiAobGVmdC5lbmRzV2l0aCgnXFxuJykpIHtcbiAgICAgICAgbGVmdCA9IGxlZnQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgICAgaWYgKHJpZ2h0LmVuZHNXaXRoKCdcXG4nKSkge1xuICAgICAgICByaWdodCA9IHJpZ2h0LnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscy5jYWxsKHRoaXMsIGxlZnQsIHJpZ2h0LCBvcHRpb25zKTtcbiAgfTtcbiAgZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBLZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhpcyBpcyBhIHJhdGhlciBhcmJpdHJhcnkgd3JhcHBlciBtZXRob2RcbiAgLy8gdGhhdCBqdXN0IGNhbGxzIGBkaWZmTGluZXNgIHdpdGggYGlnbm9yZVdoaXRlc3BhY2U6IHRydWVgLiBJdCdzIGNvbmZ1c2luZyB0b1xuICAvLyBoYXZlIHR3byB3YXlzIHRvIGRvIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgaW4gdGhlIEFQSSwgc28gd2Ugbm8gbG9uZ2VyXG4gIC8vIGRvY3VtZW50IHRoaXMgb25lIChsaWJyYXJ5IHVzZXJzIHNob3VsZCBleHBsaWNpdGx5IHVzZSBgZGlmZkxpbmVzYCB3aXRoXG4gIC8vIGBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlYCBpbnN0ZWFkKSBidXQgd2Uga2VlcCBpdCBhcm91bmQgdG8gbWFpbnRhaW5cbiAgLy8gY29tcGF0aWJpbGl0eSB3aXRoIGNvZGUgdGhhdCB1c2VkIG9sZCB2ZXJzaW9ucy5cbiAgZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgICB2YXIgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge1xuICAgICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBzZW50ZW5jZURpZmYgPSBuZXcgRGlmZigpO1xuICBzZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG4gIH07XG4gIGZ1bmN0aW9uIGRpZmZTZW50ZW5jZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG4gIH1cblxuICB2YXIgY3NzRGlmZiA9IG5ldyBEaWZmKCk7XG4gIGNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoLyhbe306OyxdfFxccyspLyk7XG4gIH07XG4gIGZ1bmN0aW9uIGRpZmZDc3Mob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gICAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7XG4gICAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICAgIGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7XG4gICAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9XG4gIGZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0O1xuICAgIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICAgIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgICAgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpO1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xuICB9XG4gIGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHtcbiAgICB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgICByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjtcbiAgfVxuICBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG87XG4gICAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgICB9LCBfdHlwZW9mKG8pO1xuICB9XG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpO1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbiAgfVxuICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG4gIH1cbiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG4gIH1cbiAgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB9XG4gIGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gICAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xuICB9XG4gIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBqc29uRGlmZiA9IG5ldyBEaWZmKCk7XG4gIC8vIERpc2NyaW1pbmF0ZSBiZXR3ZWVuIHR3byBsaW5lcyBvZiBwcmV0dHktcHJpbnRlZCwgc2VyaWFsaXplZCBKU09OIHdoZXJlIG9uZSBvZiB0aGVtIGhhcyBhXG4gIC8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuICBqc29uRGlmZi51c2VMb25nZXN0VG9rZW4gPSB0cnVlO1xuICBqc29uRGlmZi50b2tlbml6ZSA9IGxpbmVEaWZmLnRva2VuaXplO1xuICBqc29uRGlmZi5jYXN0SW5wdXQgPSBmdW5jdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgICB2YXIgdW5kZWZpbmVkUmVwbGFjZW1lbnQgPSBvcHRpb25zLnVuZGVmaW5lZFJlcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyaW5naWZ5UmVwID0gb3B0aW9ucy5zdHJpbmdpZnlSZXBsYWNlcixcbiAgICAgIHN0cmluZ2lmeVJlcGxhY2VyID0gX29wdGlvbnMkc3RyaW5naWZ5UmVwID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoaywgdikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2O1xuICAgICAgfSA6IF9vcHRpb25zJHN0cmluZ2lmeVJlcDtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbiAgfTtcbiAganNvbkRpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscy5jYWxsKGpzb25EaWZmLCBsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSwgb3B0aW9ucyk7XG4gIH07XG4gIGZ1bmN0aW9uIGRpZmZKc29uKG9sZE9iaiwgbmV3T2JqLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGpzb25EaWZmLmRpZmYob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4gIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgb24gdGhlIFwic3RhY2tcIiBvZiBpdGVtcyBiZWluZyBwcm9jZXNzZWQuIEFjY2VwdHMgYW4gb3B0aW9uYWwgcmVwbGFjZXJcbiAgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuICAgIHJlcGxhY2VtZW50U3RhY2sgPSByZXBsYWNlbWVudFN0YWNrIHx8IFtdO1xuICAgIGlmIChyZXBsYWNlcikge1xuICAgICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzdGFja1tpXSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2Fub25pY2FsaXplZE9iajtcbiAgICBpZiAoJ1tvYmplY3QgQXJyYXldJyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBuZXcgQXJyYXkob2JqLmxlbmd0aCk7XG4gICAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSk7XG4gICAgICB9XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gICAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgICB9XG4gICAgaWYgKG9iaiAmJiBvYmoudG9KU09OKSB7XG4gICAgICBvYmogPSBvYmoudG9KU09OKCk7XG4gICAgfVxuICAgIGlmIChfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgc3RhY2sucHVzaChvYmopO1xuICAgICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuICAgICAgdmFyIHNvcnRlZEtleXMgPSBbXSxcbiAgICAgICAgX2tleTtcbiAgICAgIGZvciAoX2tleSBpbiBvYmopIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIF9rZXkpKSB7XG4gICAgICAgICAgc29ydGVkS2V5cy5wdXNoKF9rZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIF9rZXkgPSBzb3J0ZWRLZXlzW2ldO1xuICAgICAgICBjYW5vbmljYWxpemVkT2JqW19rZXldID0gY2Fub25pY2FsaXplKG9ialtfa2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBfa2V5KTtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2Fub25pY2FsaXplZE9iaiA9IG9iajtcbiAgICB9XG4gICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG4gIH1cblxuICB2YXIgYXJyYXlEaWZmID0gbmV3IERpZmYoKTtcbiAgYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG4gIH07XG4gIGFycmF5RGlmZi5qb2luID0gYXJyYXlEaWZmLnJlbW92ZUVtcHR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuICBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBhcnJheURpZmYuZGlmZihvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5peFRvV2luKHBhdGNoKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgICByZXR1cm4gcGF0Y2gubWFwKHVuaXhUb1dpbik7XG4gICAgfVxuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGF0Y2gpLCB7fSwge1xuICAgICAgaHVua3M6IHBhdGNoLmh1bmtzLm1hcChmdW5jdGlvbiAoaHVuaykge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGh1bmspLCB7fSwge1xuICAgICAgICAgIGxpbmVzOiBodW5rLmxpbmVzLm1hcChmdW5jdGlvbiAobGluZSwgaSkge1xuICAgICAgICAgICAgdmFyIF9odW5rJGxpbmVzO1xuICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IGxpbmUuZW5kc1dpdGgoJ1xccicpIHx8IChfaHVuayRsaW5lcyA9IGh1bmsubGluZXNbaSArIDFdKSAhPT0gbnVsbCAmJiBfaHVuayRsaW5lcyAhPT0gdm9pZCAwICYmIF9odW5rJGxpbmVzLnN0YXJ0c1dpdGgoJ1xcXFwnKSA/IGxpbmUgOiBsaW5lICsgJ1xccic7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHdpblRvVW5peChwYXRjaCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgICAgcmV0dXJuIHBhdGNoLm1hcCh3aW5Ub1VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhdGNoKSwge30sIHtcbiAgICAgIGh1bmtzOiBwYXRjaC5odW5rcy5tYXAoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBodW5rKSwge30sIHtcbiAgICAgICAgICBsaW5lczogaHVuay5saW5lcy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLmVuZHNXaXRoKCdcXHInKSA/IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSkgOiBsaW5lO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGNoIGNvbnNpc3RlbnRseSB1c2VzIFVuaXggbGluZSBlbmRpbmdzIChvciBvbmx5IGludm9sdmVzIG9uZSBsaW5lIGFuZCBoYXNcbiAgICogbm8gbGluZSBlbmRpbmdzKS5cbiAgICovXG4gIGZ1bmN0aW9uIGlzVW5peChwYXRjaCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICAgIHBhdGNoID0gW3BhdGNoXTtcbiAgICB9XG4gICAgcmV0dXJuICFwYXRjaC5zb21lKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4Lmh1bmtzLnNvbWUoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgICAgcmV0dXJuIGh1bmsubGluZXMuc29tZShmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgIHJldHVybiAhbGluZS5zdGFydHNXaXRoKCdcXFxcJykgJiYgbGluZS5lbmRzV2l0aCgnXFxyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRjaCB1c2VzIFdpbmRvd3MgbGluZSBlbmRpbmdzIGFuZCBvbmx5IFdpbmRvd3MgbGluZSBlbmRpbmdzLlxuICAgKi9cbiAgZnVuY3Rpb24gaXNXaW4ocGF0Y2gpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgICBwYXRjaCA9IFtwYXRjaF07XG4gICAgfVxuICAgIHJldHVybiBwYXRjaC5zb21lKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4Lmh1bmtzLnNvbWUoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgICAgcmV0dXJuIGh1bmsubGluZXMuc29tZShmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgIHJldHVybiBsaW5lLmVuZHNXaXRoKCdcXHInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSAmJiBwYXRjaC5ldmVyeShmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleC5odW5rcy5ldmVyeShmdW5jdGlvbiAoaHVuaykge1xuICAgICAgICByZXR1cm4gaHVuay5saW5lcy5ldmVyeShmdW5jdGlvbiAobGluZSwgaSkge1xuICAgICAgICAgIHZhciBfaHVuayRsaW5lczI7XG4gICAgICAgICAgcmV0dXJuIGxpbmUuc3RhcnRzV2l0aCgnXFxcXCcpIHx8IGxpbmUuZW5kc1dpdGgoJ1xccicpIHx8ICgoX2h1bmskbGluZXMyID0gaHVuay5saW5lc1tpICsgMV0pID09PSBudWxsIHx8IF9odW5rJGxpbmVzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2h1bmskbGluZXMyLnN0YXJ0c1dpdGgoJ1xcXFwnKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBhdGNoKHVuaURpZmYpIHtcbiAgICB2YXIgZGlmZnN0ciA9IHVuaURpZmYuc3BsaXQoL1xcbi8pLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG4gICAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICAgIHZhciBpbmRleCA9IHt9O1xuICAgICAgbGlzdC5wdXNoKGluZGV4KTtcblxuICAgICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgbGluZSA9IGRpZmZzdHJbaV07XG5cbiAgICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgICAgaWYgKC9eKFxcLVxcLVxcLXxcXCtcXCtcXCt8QEApXFxzLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaWZmIGluZGV4XG4gICAgICAgIHZhciBoZWFkZXIgPSAvXig/OkluZGV4OnxkaWZmKD86IC1yIFxcdyspKylcXHMrKC4rPylcXHMqJC8uZXhlYyhsaW5lKTtcbiAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgZmlsZSBoZWFkZXJzIGlmIHRoZXkgYXJlIGRlZmluZWQuIFVuaWZpZWQgZGlmZiByZXF1aXJlcyB0aGVtLCBidXRcbiAgICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcbiAgICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG5cbiAgICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgICBpbmRleC5odW5rcyA9IFtdO1xuICAgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgX2xpbmUgPSBkaWZmc3RyW2ldO1xuICAgICAgICBpZiAoL14oSW5kZXg6XFxzfGRpZmZcXHN8XFwtXFwtXFwtXFxzfFxcK1xcK1xcK1xcc3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KS8udGVzdChfbGluZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KF9saW5lKSkge1xuICAgICAgICAgIGluZGV4Lmh1bmtzLnB1c2gocGFyc2VIdW5rKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKF9saW5lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG4gICAgLy8gYXJlIGNvbnN1bWVkLlxuICAgIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgICAgdmFyIGZpbGVIZWFkZXIgPSAvXigtLS18XFwrXFwrXFwrKVxccysoLiopXFxyPyQvLmV4ZWMoZGlmZnN0cltpXSk7XG4gICAgICBpZiAoZmlsZUhlYWRlcikge1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgICB2YXIgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgICB2YXIgZmlsZU5hbWUgPSBkYXRhWzBdLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJyk7XG4gICAgICAgIGlmICgvXlwiLipcIiQvLnRlc3QoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcbiAgICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gKGRhdGFbMV0gfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhcnNlcyBhIGh1bmtcbiAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaHVuay5cbiAgICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgICB2YXIgY2h1bmtIZWFkZXJJbmRleCA9IGksXG4gICAgICAgIGNodW5rSGVhZGVyTGluZSA9IGRpZmZzdHJbaSsrXSxcbiAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG4gICAgICB2YXIgaHVuayA9IHtcbiAgICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgICAgb2xkTGluZXM6IHR5cGVvZiBjaHVua0hlYWRlclsyXSA9PT0gJ3VuZGVmaW5lZCcgPyAxIDogK2NodW5rSGVhZGVyWzJdLFxuICAgICAgICBuZXdTdGFydDogK2NodW5rSGVhZGVyWzNdLFxuICAgICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICAgIGxpbmVzOiBbXVxuICAgICAgfTtcblxuICAgICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAgIC8vIHRoZSBmaXJzdCBudW1iZXIgaXMgb25lIGxvd2VyIHRoYW4gb25lIHdvdWxkIGV4cGVjdC5cbiAgICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgICAgaHVuay5vbGRTdGFydCArPSAxO1xuICAgICAgfVxuICAgICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgICAgaHVuay5uZXdTdGFydCArPSAxO1xuICAgICAgfVxuICAgICAgdmFyIGFkZENvdW50ID0gMCxcbiAgICAgICAgcmVtb3ZlQ291bnQgPSAwO1xuICAgICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aCAmJiAocmVtb3ZlQ291bnQgPCBodW5rLm9sZExpbmVzIHx8IGFkZENvdW50IDwgaHVuay5uZXdMaW5lcyB8fCAoX2RpZmZzdHIkaSA9IGRpZmZzdHJbaV0pICE9PSBudWxsICYmIF9kaWZmc3RyJGkgIT09IHZvaWQgMCAmJiBfZGlmZnN0ciRpLnN0YXJ0c1dpdGgoJ1xcXFwnKSk7IGkrKykge1xuICAgICAgICB2YXIgX2RpZmZzdHIkaTtcbiAgICAgICAgdmFyIG9wZXJhdGlvbiA9IGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSBkaWZmc3RyLmxlbmd0aCAtIDEgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgICBodW5rLmxpbmVzLnB1c2goZGlmZnN0cltpXSk7XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkh1bmsgYXQgbGluZSBcIi5jb25jYXQoY2h1bmtIZWFkZXJJbmRleCArIDEsIFwiIGNvbnRhaW5lZCBpbnZhbGlkIGxpbmUgXCIpLmNvbmNhdChkaWZmc3RyW2ldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG4gICAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcbiAgICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgICB9XG4gICAgICBpZiAoIXJlbW92ZUNvdW50ICYmIGh1bmsub2xkTGluZXMgPT09IDEpIHtcbiAgICAgICAgaHVuay5vbGRMaW5lcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFBlcmZvcm0gc2FuaXR5IGNoZWNraW5nXG4gICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBodW5rO1xuICAgIH1cbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICBwYXJzZUluZGV4KCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4gIC8vIGJ5IGRpc3RhbmNlIGZyb20gYSBnaXZlbiBzdGFydCBwb3NpdGlvbi4gSS5lLiBmb3IgWzAsIDRdLCB3aXRoXG4gIC8vIHN0YXJ0IG9mIDIsIHRoaXMgd2lsbCBpdGVyYXRlIDIsIDMsIDEsIDQsIDAuXG4gIGZ1bmN0aW9uIGRpc3RhbmNlSXRlcmF0b3IgKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gICAgdmFyIHdhbnRGb3J3YXJkID0gdHJ1ZSxcbiAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG4gICAgICBmb3J3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG4gICAgICBsb2NhbE9mZnNldCA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGl0ZXJhdG9yKCkge1xuICAgICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICAgIGxvY2FsT2Zmc2V0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG4gICAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnQgKyBsb2NhbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghYmFja3dhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgICAgd2FudEZvcndhcmQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuICAgICAgICBpZiAobWluTGluZSA8PSBzdGFydCAtIGxvY2FsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0IC0gbG9jYWxPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBpdGVyYXRvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgICAgLy8gaHVuayBjYW4ndCBmaXQgb24gdGhlIHRleHQuIFJldHVybiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlQYXRjaChzb3VyY2UsIHVuaURpZmYpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgICAgdW5pRGlmZiA9IHBhcnNlUGF0Y2godW5pRGlmZik7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHVuaURpZmYpKSB7XG4gICAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYXBwbHlQYXRjaCBvbmx5IHdvcmtzIHdpdGggYSBzaW5nbGUgaW5wdXQuJyk7XG4gICAgICB9XG4gICAgICB1bmlEaWZmID0gdW5pRGlmZlswXTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYXV0b0NvbnZlcnRMaW5lRW5kaW5ncyB8fCBvcHRpb25zLmF1dG9Db252ZXJ0TGluZUVuZGluZ3MgPT0gbnVsbCkge1xuICAgICAgaWYgKGhhc09ubHlXaW5MaW5lRW5kaW5ncyhzb3VyY2UpICYmIGlzVW5peCh1bmlEaWZmKSkge1xuICAgICAgICB1bmlEaWZmID0gdW5peFRvV2luKHVuaURpZmYpO1xuICAgICAgfSBlbHNlIGlmIChoYXNPbmx5VW5peExpbmVFbmRpbmdzKHNvdXJjZSkgJiYgaXNXaW4odW5pRGlmZikpIHtcbiAgICAgICAgdW5pRGlmZiA9IHdpblRvVW5peCh1bmlEaWZmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgaW5wdXRcbiAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuICAgICAgY29tcGFyZUxpbmUgPSBvcHRpb25zLmNvbXBhcmVMaW5lIHx8IGZ1bmN0aW9uIChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkge1xuICAgICAgICByZXR1cm4gbGluZSA9PT0gcGF0Y2hDb250ZW50O1xuICAgICAgfSxcbiAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcbiAgICAgIG1pbkxpbmUgPSAwO1xuICAgIGlmIChmdXp6RmFjdG9yIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihmdXp6RmFjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmdXp6RmFjdG9yIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgcGF0Y2guXG4gICAgaWYgKCFodW5rcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIGFueXRoaW5nIGVsc2UsIGhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbC4gSWYgdGhlIHBhdGNoIHRlbGxzIHVzIHRvIG1ha2UgYSBjaGFuZ2VcbiAgICAvLyB0byB0aGUgRU9GTkwgdGhhdCBpcyByZWR1bmRhbnQvaW1wb3NzaWJsZSAtIGkuZS4gdG8gcmVtb3ZlIGEgbmV3bGluZSB0aGF0J3Mgbm90IHRoZXJlLCBvciBhZGQgYVxuICAgIC8vIG5ld2xpbmUgdGhhdCBhbHJlYWR5IGV4aXN0cyAtIHRoZW4gd2UgZWl0aGVyIHJldHVybiBmYWxzZSBhbmQgZmFpbCB0byBhcHBseSB0aGUgcGF0Y2ggKGlmXG4gICAgLy8gZnV6ekZhY3RvciBpcyAwKSBvciBzaW1wbHkgaWdub3JlIHRoZSBwcm9ibGVtIGFuZCBkbyBub3RoaW5nIChpZiBmdXp6RmFjdG9yIGlzID4wKS5cbiAgICAvLyBJZiB3ZSBkbyBuZWVkIHRvIHJlbW92ZS9hZGQgYSBuZXdsaW5lIGF0IEVPRiwgdGhpcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgZmluYWwgaHVuazpcbiAgICB2YXIgcHJldkxpbmUgPSAnJyxcbiAgICAgIHJlbW92ZUVPRk5MID0gZmFsc2UsXG4gICAgICBhZGRFT0ZOTCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHVua3NbaHVua3MubGVuZ3RoIC0gMV0ubGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gaHVua3NbaHVua3MubGVuZ3RoIC0gMV0ubGluZXNbaV07XG4gICAgICBpZiAobGluZVswXSA9PSAnXFxcXCcpIHtcbiAgICAgICAgaWYgKHByZXZMaW5lWzBdID09ICcrJykge1xuICAgICAgICAgIHJlbW92ZUVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2TGluZVswXSA9PSAnLScpIHtcbiAgICAgICAgICBhZGRFT0ZOTCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByZXZMaW5lID0gbGluZTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZUVPRk5MKSB7XG4gICAgICBpZiAoYWRkRU9GTkwpIHtcbiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgZmluYWwgbGluZSBnZXRzIGNoYW5nZWQgYnV0IGRvZXNuJ3QgaGF2ZSBhIHRyYWlsaW5nIG5ld2xpbmUgaW4gZWl0aGVyIHRoZVxuICAgICAgICAvLyBvcmlnaW5hbCBvciBwYXRjaGVkIHZlcnNpb24uIEluIHRoYXQgY2FzZSwgd2UgZG8gbm90aGluZyBpZiBmdXp6RmFjdG9yID4gMCwgYW5kIGlmXG4gICAgICAgIC8vIGZ1enpGYWN0b3IgaXMgMCwgd2Ugc2ltcGx5IHZhbGlkYXRlIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGhhcyBubyB0cmFpbGluZyBuZXdsaW5lLlxuICAgICAgICBpZiAoIWZ1enpGYWN0b3IgJiYgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPT0gJycpIHtcbiAgICAgICAgbGluZXMucG9wKCk7XG4gICAgICB9IGVsc2UgaWYgKCFmdXp6RmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgICBpZiAobGluZXNbbGluZXMubGVuZ3RoIC0gMV0gIT0gJycpIHtcbiAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICB9IGVsc2UgaWYgKCFmdXp6RmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgY2FuIGJlIG1hZGUgdG8gZml0IGF0IHRoZSBwcm92aWRlZCBsb2NhdGlvbiB3aXRoIGF0IG1vc3QgYG1heEVycm9yc2BcbiAgICAgKiBpbnNlcnRpb25zLCBzdWJzdGl0dXRpb25zLCBvciBkZWxldGlvbnMsIHdoaWxlIGVuc3VyaW5nIGFsc28gdGhhdDpcbiAgICAgKiAtIGxpbmVzIGRlbGV0ZWQgaW4gdGhlIGh1bmsgbWF0Y2ggZXhhY3RseSwgYW5kXG4gICAgICogLSB3aGVyZXZlciBhbiBpbnNlcnRpb24gb3BlcmF0aW9uIG9yIGJsb2NrIG9mIGluc2VydGlvbiBvcGVyYXRpb25zIGFwcGVhcnMgaW4gdGhlIGh1bmssIHRoZVxuICAgICAqICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgbGluZXMgb2YgY29udGV4dCBtYXRjaCBleGFjdGx5XG4gICAgICpcbiAgICAgKiBgdG9Qb3NgIHNob3VsZCBiZSBzZXQgc3VjaCB0aGF0IGxpbmVzW3RvUG9zXSBpcyBtZWFudCB0byBtYXRjaCBodW5rTGluZXNbMF0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgaHVuayBjYW4gYmUgYXBwbGllZCwgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGBvbGRMaW5lTGFzdElgIGFuZFxuICAgICAqIGByZXBsYWNlbWVudExpbmVzYC4gT3RoZXJ3aXNlLCByZXR1cm5zIG51bGwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXBwbHlIdW5rKGh1bmtMaW5lcywgdG9Qb3MsIG1heEVycm9ycykge1xuICAgICAgdmFyIGh1bmtMaW5lc0kgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG4gICAgICB2YXIgbGFzdENvbnRleHRMaW5lTWF0Y2hlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgICAgIHZhciBwYXRjaGVkTGluZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IFtdO1xuICAgICAgdmFyIHBhdGNoZWRMaW5lc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIGFyZ3VtZW50c1s2XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzZdIDogMDtcbiAgICAgIHZhciBuQ29uc2VjdXRpdmVPbGRDb250ZXh0TGluZXMgPSAwO1xuICAgICAgdmFyIG5leHRDb250ZXh0TGluZU11c3RNYXRjaCA9IGZhbHNlO1xuICAgICAgZm9yICg7IGh1bmtMaW5lc0kgPCBodW5rTGluZXMubGVuZ3RoOyBodW5rTGluZXNJKyspIHtcbiAgICAgICAgdmFyIGh1bmtMaW5lID0gaHVua0xpbmVzW2h1bmtMaW5lc0ldLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IGh1bmtMaW5lLmxlbmd0aCA+IDAgPyBodW5rTGluZVswXSA6ICcgJyxcbiAgICAgICAgICBjb250ZW50ID0gaHVua0xpbmUubGVuZ3RoID4gMCA/IGh1bmtMaW5lLnN1YnN0cigxKSA6IGh1bmtMaW5lO1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZUxpbmUodG9Qb3MgKyAxLCBsaW5lc1t0b1Bvc10sIG9wZXJhdGlvbiwgY29udGVudCkpIHtcbiAgICAgICAgICAgIHRvUG9zKys7XG4gICAgICAgICAgICBuQ29uc2VjdXRpdmVPbGRDb250ZXh0TGluZXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW1heEVycm9ycyB8fCBsaW5lc1t0b1Bvc10gPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGNoZWRMaW5lc1twYXRjaGVkTGluZXNMZW5ndGhdID0gbGluZXNbdG9Qb3NdO1xuICAgICAgICAgICAgcmV0dXJuIGFwcGx5SHVuayhodW5rTGluZXMsIHRvUG9zICsgMSwgbWF4RXJyb3JzIC0gMSwgaHVua0xpbmVzSSwgZmFsc2UsIHBhdGNoZWRMaW5lcywgcGF0Y2hlZExpbmVzTGVuZ3RoICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgIGlmICghbGFzdENvbnRleHRMaW5lTWF0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGNoZWRMaW5lc1twYXRjaGVkTGluZXNMZW5ndGhdID0gY29udGVudDtcbiAgICAgICAgICBwYXRjaGVkTGluZXNMZW5ndGgrKztcbiAgICAgICAgICBuQ29uc2VjdXRpdmVPbGRDb250ZXh0TGluZXMgPSAwO1xuICAgICAgICAgIG5leHRDb250ZXh0TGluZU11c3RNYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgbkNvbnNlY3V0aXZlT2xkQ29udGV4dExpbmVzKys7XG4gICAgICAgICAgcGF0Y2hlZExpbmVzW3BhdGNoZWRMaW5lc0xlbmd0aF0gPSBsaW5lc1t0b1Bvc107XG4gICAgICAgICAgaWYgKGNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG4gICAgICAgICAgICBwYXRjaGVkTGluZXNMZW5ndGgrKztcbiAgICAgICAgICAgIGxhc3RDb250ZXh0TGluZU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dENvbnRleHRMaW5lTXVzdE1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0b1BvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV4dENvbnRleHRMaW5lTXVzdE1hdGNoIHx8ICFtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENvbnNpZGVyIDMgcG9zc2liaWxpdGllcyBpbiBzZXF1ZW5jZTpcbiAgICAgICAgICAgIC8vIDEuIGxpbmVzIGNvbnRhaW5zIGEgKnN1YnN0aXR1dGlvbiogbm90IGluY2x1ZGVkIGluIHRoZSBwYXRjaCBjb250ZXh0LCBvclxuICAgICAgICAgICAgLy8gMi4gbGluZXMgY29udGFpbnMgYW4gKmluc2VydGlvbiogbm90IGluY2x1ZGVkIGluIHRoZSBwYXRjaCBjb250ZXh0LCBvclxuICAgICAgICAgICAgLy8gMy4gbGluZXMgY29udGFpbnMgYSAqZGVsZXRpb24qIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGF0Y2ggY29udGV4dFxuICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHR3byBvcHRpb25zIGFyZSBvZiBjb3Vyc2Ugb25seSBwb3NzaWJsZSBpZiB0aGUgbGluZSBmcm9tIGxpbmVzIGlzIG5vbi1udWxsIC1cbiAgICAgICAgICAgIC8vIGkuZS4gb25seSBvcHRpb24gMyBpcyBwb3NzaWJsZSBpZiB3ZSd2ZSBvdmVycnVuIHRoZSBlbmQgb2YgdGhlIG9sZCBmaWxlLlxuICAgICAgICAgICAgcmV0dXJuIGxpbmVzW3RvUG9zXSAmJiAoYXBwbHlIdW5rKGh1bmtMaW5lcywgdG9Qb3MgKyAxLCBtYXhFcnJvcnMgLSAxLCBodW5rTGluZXNJICsgMSwgZmFsc2UsIHBhdGNoZWRMaW5lcywgcGF0Y2hlZExpbmVzTGVuZ3RoICsgMSkgfHwgYXBwbHlIdW5rKGh1bmtMaW5lcywgdG9Qb3MgKyAxLCBtYXhFcnJvcnMgLSAxLCBodW5rTGluZXNJLCBmYWxzZSwgcGF0Y2hlZExpbmVzLCBwYXRjaGVkTGluZXNMZW5ndGggKyAxKSkgfHwgYXBwbHlIdW5rKGh1bmtMaW5lcywgdG9Qb3MsIG1heEVycm9ycyAtIDEsIGh1bmtMaW5lc0kgKyAxLCBmYWxzZSwgcGF0Y2hlZExpbmVzLCBwYXRjaGVkTGluZXNMZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCZWZvcmUgcmV0dXJuaW5nLCB0cmltIGFueSB1bm1vZGlmaWVkIGNvbnRleHQgbGluZXMgb2ZmIHRoZSBlbmQgb2YgcGF0Y2hlZExpbmVzIGFuZCByZWR1Y2VcbiAgICAgIC8vIHRvUG9zIChhbmQgdGh1cyBvbGRMaW5lTGFzdEkpIGFjY29yZGluZ2x5LiBUaGlzIGFsbG93cyBsYXRlciBodW5rcyB0byBiZSBhcHBsaWVkIHRvIGEgcmVnaW9uXG4gICAgICAvLyB0aGF0IHN0YXJ0cyBpbiB0aGlzIGh1bmsncyB0cmFpbGluZyBjb250ZXh0LlxuICAgICAgcGF0Y2hlZExpbmVzTGVuZ3RoIC09IG5Db25zZWN1dGl2ZU9sZENvbnRleHRMaW5lcztcbiAgICAgIHRvUG9zIC09IG5Db25zZWN1dGl2ZU9sZENvbnRleHRMaW5lcztcbiAgICAgIHBhdGNoZWRMaW5lcy5sZW5ndGggPSBwYXRjaGVkTGluZXNMZW5ndGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRjaGVkTGluZXM6IHBhdGNoZWRMaW5lcyxcbiAgICAgICAgb2xkTGluZUxhc3RJOiB0b1BvcyAtIDFcbiAgICAgIH07XG4gICAgfVxuICAgIHZhciByZXN1bHRMaW5lcyA9IFtdO1xuXG4gICAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICAgIHZhciBwcmV2SHVua09mZnNldCA9IDA7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGh1bmtzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGh1bmsgPSBodW5rc1tfaV07XG4gICAgICB2YXIgaHVua1Jlc3VsdCA9IHZvaWQgMDtcbiAgICAgIHZhciBtYXhMaW5lID0gbGluZXMubGVuZ3RoIC0gaHVuay5vbGRMaW5lcyArIGZ1enpGYWN0b3I7XG4gICAgICB2YXIgdG9Qb3MgPSB2b2lkIDA7XG4gICAgICBmb3IgKHZhciBtYXhFcnJvcnMgPSAwOyBtYXhFcnJvcnMgPD0gZnV6ekZhY3RvcjsgbWF4RXJyb3JzKyspIHtcbiAgICAgICAgdG9Qb3MgPSBodW5rLm9sZFN0YXJ0ICsgcHJldkh1bmtPZmZzZXQgLSAxO1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBkaXN0YW5jZUl0ZXJhdG9yKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcbiAgICAgICAgZm9yICg7IHRvUG9zICE9PSB1bmRlZmluZWQ7IHRvUG9zID0gaXRlcmF0b3IoKSkge1xuICAgICAgICAgIGh1bmtSZXN1bHQgPSBhcHBseUh1bmsoaHVuay5saW5lcywgdG9Qb3MsIG1heEVycm9ycyk7XG4gICAgICAgICAgaWYgKGh1bmtSZXN1bHQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaHVua1Jlc3VsdCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWh1bmtSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZW5kIG9mIHdoZXJlIHdlIGFwcGxpZWQgdGhlIGxhc3QgaHVuayB0byB0aGUgc3RhcnQgb2YgdGhpcyBodW5rXG4gICAgICBmb3IgKHZhciBfaTIgPSBtaW5MaW5lOyBfaTIgPCB0b1BvczsgX2kyKyspIHtcbiAgICAgICAgcmVzdWx0TGluZXMucHVzaChsaW5lc1tfaTJdKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHRoZSBsaW5lcyBwcm9kdWNlZCBieSBhcHBseWluZyB0aGUgaHVuazpcbiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGh1bmtSZXN1bHQucGF0Y2hlZExpbmVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgICAgdmFyIF9saW5lID0gaHVua1Jlc3VsdC5wYXRjaGVkTGluZXNbX2kzXTtcbiAgICAgICAgcmVzdWx0TGluZXMucHVzaChfbGluZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgICAvLyB0byBmaXQgb3ZlciBhbHJlYWR5IHBhdGNoZWQgdGV4dFxuICAgICAgbWluTGluZSA9IGh1bmtSZXN1bHQub2xkTGluZUxhc3RJICsgMTtcblxuICAgICAgLy8gTm90ZSB0aGUgb2Zmc2V0IGJldHdlZW4gd2hlcmUgdGhlIHBhdGNoIHNhaWQgdGhlIGh1bmsgc2hvdWxkJ3ZlIGFwcGxpZWQgYW5kIHdoZXJlIHdlXG4gICAgICAvLyBhcHBsaWVkIGl0LCBzbyB3ZSBjYW4gYWRqdXN0IGZ1dHVyZSBodW5rcyBhY2NvcmRpbmdseTpcbiAgICAgIHByZXZIdW5rT2Zmc2V0ID0gdG9Qb3MgKyAxIC0gaHVuay5vbGRTdGFydDtcbiAgICB9XG5cbiAgICAvLyBDb3B5IG92ZXIgdGhlIHJlc3Qgb2YgdGhlIGxpbmVzIGZyb20gdGhlIG9sZCB0ZXh0XG4gICAgZm9yICh2YXIgX2k0ID0gbWluTGluZTsgX2k0IDwgbGluZXMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgcmVzdWx0TGluZXMucHVzaChsaW5lc1tfaTRdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdExpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuICBmdW5jdGlvbiBhcHBseVBhdGNoZXModW5pRGlmZiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICAgIH1cbiAgICB2YXIgY3VycmVudEluZGV4ID0gMDtcbiAgICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgICB2YXIgaW5kZXggPSB1bmlEaWZmW2N1cnJlbnRJbmRleCsrXTtcbiAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMubG9hZEZpbGUoaW5kZXgsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMucGF0Y2hlZChpbmRleCwgdXBkYXRlZENvbnRlbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJvY2Vzc0luZGV4KCk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBjYWxsYmFjazogb3B0aW9uc1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5uZXdsaW5lSXNUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdsaW5lSXNUb2tlbiBtYXkgbm90IGJlIHVzZWQgd2l0aCBwYXRjaC1nZW5lcmF0aW9uIGZ1bmN0aW9ucywgb25seSB3aXRoIGRpZmZpbmcgZnVuY3Rpb25zJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5jYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGRpZmZMaW5lc1Jlc3VsdFRvUGF0Y2goZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICAgIF9jYWxsYmFjayA9IF9vcHRpb25zLmNhbGxiYWNrO1xuICAgICAgZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhkaWZmKSB7XG4gICAgICAgICAgdmFyIHBhdGNoID0gZGlmZkxpbmVzUmVzdWx0VG9QYXRjaChkaWZmKTtcbiAgICAgICAgICBfY2FsbGJhY2socGF0Y2gpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZMaW5lc1Jlc3VsdFRvUGF0Y2goZGlmZikge1xuICAgICAgLy8gU1RFUCAxOiBCdWlsZCB1cCB0aGUgcGF0Y2ggd2l0aCBubyBcIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcIiBsaW5lcyBhbmQgd2l0aCB0aGUgYXJyYXlzXG4gICAgICAvLyAgICAgICAgIG9mIGxpbmVzIGNvbnRhaW5pbmcgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJzLiBXZSdsbCB0aWR5IHVwIGxhdGVyLi4uXG5cbiAgICAgIGlmICghZGlmZikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWZmLnB1c2goe1xuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxpbmVzOiBbXVxuICAgICAgfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgICAgIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgICAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgIHJldHVybiAnICcgKyBlbnRyeTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgaHVua3MgPSBbXTtcbiAgICAgIHZhciBvbGRSYW5nZVN0YXJ0ID0gMCxcbiAgICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG4gICAgICAgIGN1clJhbmdlID0gW10sXG4gICAgICAgIG9sZExpbmUgPSAxLFxuICAgICAgICBuZXdMaW5lID0gMTtcbiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGRpZmZbaV0sXG4gICAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IHNwbGl0TGluZXMoY3VycmVudC52YWx1ZSk7XG4gICAgICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcbiAgICAgICAgaWYgKGN1cnJlbnQuYWRkZWQgfHwgY3VycmVudC5yZW1vdmVkKSB7XG4gICAgICAgICAgdmFyIF9jdXJSYW5nZTtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuICAgICAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgdmFyIHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICAgICAgbmV3UmFuZ2VTdGFydCA9IG5ld0xpbmU7XG4gICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICBjdXJSYW5nZSA9IG9wdGlvbnMuY29udGV4dCA+IDAgPyBjb250ZXh0TGluZXMocHJldi5saW5lcy5zbGljZSgtb3B0aW9ucy5jb250ZXh0KSkgOiBbXTtcbiAgICAgICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgICAgIChfY3VyUmFuZ2UgPSBjdXJSYW5nZSkucHVzaC5hcHBseShfY3VyUmFuZ2UsIF90b0NvbnN1bWFibGVBcnJheShsaW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnQuYWRkZWQgPyAnKycgOiAnLScpICsgZW50cnk7XG4gICAgICAgICAgfSkpKTtcblxuICAgICAgICAgIC8vIFRyYWNrIHRoZSB1cGRhdGVkIGZpbGUgcG9zaXRpb25cbiAgICAgICAgICBpZiAoY3VycmVudC5hZGRlZCkge1xuICAgICAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZGVudGljYWwgY29udGV4dCBsaW5lcy4gVHJhY2sgbGluZSBjaGFuZ2VzXG4gICAgICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCAqIDIgJiYgaSA8IGRpZmYubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgICB2YXIgX2N1clJhbmdlMjtcbiAgICAgICAgICAgICAgLy8gT3ZlcmxhcHBpbmdcbiAgICAgICAgICAgICAgKF9jdXJSYW5nZTIgPSBjdXJSYW5nZSkucHVzaC5hcHBseShfY3VyUmFuZ2UyLCBfdG9Db25zdW1hYmxlQXJyYXkoY29udGV4dExpbmVzKGxpbmVzKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9jdXJSYW5nZTM7XG4gICAgICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgICAgICB2YXIgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG4gICAgICAgICAgICAgIChfY3VyUmFuZ2UzID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG4gICAgICAgICAgICAgIHZhciBfaHVuayA9IHtcbiAgICAgICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICBvbGRMaW5lczogb2xkTGluZSAtIG9sZFJhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcbiAgICAgICAgICAgICAgICBuZXdTdGFydDogbmV3UmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICBuZXdMaW5lczogbmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcbiAgICAgICAgICAgICAgICBsaW5lczogY3VyUmFuZ2VcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaHVua3MucHVzaChfaHVuayk7XG4gICAgICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgX2xvb3AoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAyOiBlbGltaW5hdGUgdGhlIHRyYWlsaW5nIGBcXG5gIGZyb20gZWFjaCBsaW5lIG9mIGVhY2ggaHVuaywgYW5kLCB3aGVyZSBuZWVkZWQsIGFkZFxuICAgICAgLy8gICAgICAgICBcIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcIi5cbiAgICAgIGZvciAodmFyIF9pID0gMCwgX2h1bmtzID0gaHVua3M7IF9pIDwgX2h1bmtzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgaHVuayA9IF9odW5rc1tfaV07XG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGh1bmsubGluZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgIGlmIChodW5rLmxpbmVzW19pMl0uZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICAgICAgICBodW5rLmxpbmVzW19pMl0gPSBodW5rLmxpbmVzW19pMl0uc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodW5rLmxpbmVzLnNwbGljZShfaTIgKyAxLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICBfaTIrKzsgLy8gU2tpcCB0aGUgbGluZSB3ZSBqdXN0IGFkZGVkLCB0aGVuIGNvbnRpbnVlIGl0ZXJhdGluZ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2xkRmlsZU5hbWU6IG9sZEZpbGVOYW1lLFxuICAgICAgICBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG4gICAgICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLFxuICAgICAgICBuZXdIZWFkZXI6IG5ld0hlYWRlcixcbiAgICAgICAgaHVua3M6IGh1bmtzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZikpIHtcbiAgICAgIHJldHVybiBkaWZmLm1hcChmb3JtYXRQYXRjaCkuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHZhciByZXQgPSBbXTtcbiAgICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgICByZXQucHVzaCgnSW5kZXg6ICcgKyBkaWZmLm9sZEZpbGVOYW1lKTtcbiAgICB9XG4gICAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYuaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBodW5rID0gZGlmZi5odW5rc1tpXTtcbiAgICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgICAvLyBodHRwczovL3d3dy5hcnRpbWEuY29tL3dlYmxvZ3Mvdmlld3Bvc3QuanNwP3RocmVhZD0xNjQyOTNcbiAgICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsub2xkU3RhcnQgLT0gMTtcbiAgICAgIH1cbiAgICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsubmV3U3RhcnQgLT0gMTtcbiAgICAgIH1cbiAgICAgIHJldC5wdXNoKCdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzICsgJyBAQCcpO1xuICAgICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX29wdGlvbnMyO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgY2FsbGJhY2s6IG9wdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghKChfb3B0aW9uczIgPSBvcHRpb25zKSAhPT0gbnVsbCAmJiBfb3B0aW9uczIgIT09IHZvaWQgMCAmJiBfb3B0aW9uczIuY2FsbGJhY2spKSB7XG4gICAgICB2YXIgcGF0Y2hPYmogPSBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xuICAgICAgaWYgKCFwYXRjaE9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0UGF0Y2gocGF0Y2hPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX29wdGlvbnMzID0gb3B0aW9ucyxcbiAgICAgICAgX2NhbGxiYWNrMiA9IF9vcHRpb25zMy5jYWxsYmFjaztcbiAgICAgIHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2socGF0Y2hPYmopIHtcbiAgICAgICAgICBpZiAoIXBhdGNoT2JqKSB7XG4gICAgICAgICAgICBfY2FsbGJhY2syKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9jYWxsYmFjazIoZm9ybWF0UGF0Y2gocGF0Y2hPYmopKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBgdGV4dGAgaW50byBhbiBhcnJheSBvZiBsaW5lcywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBuZXdsaW5lIGNoYXJhY3RlciAod2hlcmUgcHJlc2VudClcbiAgICovXG4gIGZ1bmN0aW9uIHNwbGl0TGluZXModGV4dCkge1xuICAgIHZhciBoYXNUcmFpbGluZ05sID0gdGV4dC5lbmRzV2l0aCgnXFxuJyk7XG4gICAgdmFyIHJlc3VsdCA9IHRleHQuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgcmV0dXJuIGxpbmUgKyAnXFxuJztcbiAgICB9KTtcbiAgICBpZiAoaGFzVHJhaWxpbmdObCkge1xuICAgICAgcmVzdWx0LnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChyZXN1bHQucG9wKCkuc2xpY2UoMCwgLTEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhcnJheVN0YXJ0c1dpdGgoYXJyYXksIHN0YXJ0KSB7XG4gICAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjTGluZUNvdW50KGh1bmspIHtcbiAgICB2YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuICAgICAgb2xkTGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5vbGRMaW5lcyxcbiAgICAgIG5ld0xpbmVzID0gX2NhbGNPbGROZXdMaW5lQ291bnQubmV3TGluZXM7XG4gICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gICAgfVxuICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodW5rLm5ld0xpbmVzID0gbmV3TGluZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBodW5rLm5ld0xpbmVzO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZShtaW5lLCB0aGVpcnMsIGJhc2UpIHtcbiAgICBtaW5lID0gbG9hZFBhdGNoKG1pbmUsIGJhc2UpO1xuICAgIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuICAgIHZhciByZXQgPSB7fTtcblxuICAgIC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cbiAgICAvLyBMZWF2aW5nIHNhbml0eSBjaGVja3Mgb24gdGhpcyB0byB0aGUgQVBJIGNvbnN1bWVyIHRoYXQgbWF5IGtub3cgbW9yZSBhYm91dCB0aGVcbiAgICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuICAgIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuICAgICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gICAgfVxuICAgIGlmIChtaW5lLm5ld0ZpbGVOYW1lIHx8IHRoZWlycy5uZXdGaWxlTmFtZSkge1xuICAgICAgaWYgKCFmaWxlTmFtZUNoYW5nZWQobWluZSkpIHtcbiAgICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiBvdXJzLCB1c2UgdGhlaXJzIChhbmQgb3VycyBpZiB0aGVpcnMgZG9lcyBub3QgZXhpc3QpXG4gICAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHRoZWlycy5vbGRGaWxlTmFtZSB8fCBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgICByZXQubmV3RmlsZU5hbWUgPSB0aGVpcnMubmV3RmlsZU5hbWUgfHwgbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgICAgcmV0Lm9sZEhlYWRlciA9IHRoZWlycy5vbGRIZWFkZXIgfHwgbWluZS5vbGRIZWFkZXI7XG4gICAgICAgIHJldC5uZXdIZWFkZXIgPSB0aGVpcnMubmV3SGVhZGVyIHx8IG1pbmUubmV3SGVhZGVyO1xuICAgICAgfSBlbHNlIGlmICghZmlsZU5hbWVDaGFuZ2VkKHRoZWlycykpIHtcbiAgICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiB0aGVpcnMsIHVzZSBvdXJzXG4gICAgICAgIHJldC5vbGRGaWxlTmFtZSA9IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICAgIHJldC5uZXdGaWxlTmFtZSA9IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICAgIHJldC5vbGRIZWFkZXIgPSBtaW5lLm9sZEhlYWRlcjtcbiAgICAgICAgcmV0Lm5ld0hlYWRlciA9IG1pbmUubmV3SGVhZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQm90aCBjaGFuZ2VkLi4uIGZpZ3VyZSBpdCBvdXRcbiAgICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEZpbGVOYW1lLCB0aGVpcnMub2xkRmlsZU5hbWUpO1xuICAgICAgICByZXQubmV3RmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3RmlsZU5hbWUsIHRoZWlycy5uZXdGaWxlTmFtZSk7XG4gICAgICAgIHJldC5vbGRIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkSGVhZGVyLCB0aGVpcnMub2xkSGVhZGVyKTtcbiAgICAgICAgcmV0Lm5ld0hlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdIZWFkZXIsIHRoZWlycy5uZXdIZWFkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXQuaHVua3MgPSBbXTtcbiAgICB2YXIgbWluZUluZGV4ID0gMCxcbiAgICAgIHRoZWlyc0luZGV4ID0gMCxcbiAgICAgIG1pbmVPZmZzZXQgPSAwLFxuICAgICAgdGhlaXJzT2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAobWluZUluZGV4IDwgbWluZS5odW5rcy5sZW5ndGggfHwgdGhlaXJzSW5kZXggPCB0aGVpcnMuaHVua3MubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge1xuICAgICAgICAgIG9sZFN0YXJ0OiBJbmZpbml0eVxuICAgICAgICB9LFxuICAgICAgICB0aGVpcnNDdXJyZW50ID0gdGhlaXJzLmh1bmtzW3RoZWlyc0luZGV4XSB8fCB7XG4gICAgICAgICAgb2xkU3RhcnQ6IEluZmluaXR5XG4gICAgICAgIH07XG4gICAgICBpZiAoaHVua0JlZm9yZShtaW5lQ3VycmVudCwgdGhlaXJzQ3VycmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cbiAgICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgICB0aGVpcnNPZmZzZXQgKz0gbWluZUN1cnJlbnQubmV3TGluZXMgLSBtaW5lQ3VycmVudC5vbGRMaW5lcztcbiAgICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cbiAgICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKHRoZWlyc0N1cnJlbnQsIHRoZWlyc09mZnNldCkpO1xuICAgICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgICBtaW5lT2Zmc2V0ICs9IHRoZWlyc0N1cnJlbnQubmV3TGluZXMgLSB0aGVpcnNDdXJyZW50Lm9sZExpbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgICAgdmFyIG1lcmdlZEh1bmsgPSB7XG4gICAgICAgICAgb2xkU3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0KSxcbiAgICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgICBuZXdTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQubmV3U3RhcnQgKyBtaW5lT2Zmc2V0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0ICsgdGhlaXJzT2Zmc2V0KSxcbiAgICAgICAgICBuZXdMaW5lczogMCxcbiAgICAgICAgICBsaW5lczogW11cbiAgICAgICAgfTtcbiAgICAgICAgbWVyZ2VMaW5lcyhtZXJnZWRIdW5rLCBtaW5lQ3VycmVudC5vbGRTdGFydCwgbWluZUN1cnJlbnQubGluZXMsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQubGluZXMpO1xuICAgICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgICBtaW5lSW5kZXgrKztcbiAgICAgICAgcmV0Lmh1bmtzLnB1c2gobWVyZ2VkSHVuayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbiAgZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICgvXkBAL20udGVzdChwYXJhbSkgfHwgL15JbmRleDovbS50ZXN0KHBhcmFtKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VQYXRjaChwYXJhbSlbMF07XG4gICAgICB9XG4gICAgICBpZiAoIWJhc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBiYXNlIHJlZmVyZW5jZSBvciBwYXNzIGluIGEgcGF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2godW5kZWZpbmVkLCB1bmRlZmluZWQsIGJhc2UsIHBhcmFtKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG4gIGZ1bmN0aW9uIGZpbGVOYW1lQ2hhbmdlZChwYXRjaCkge1xuICAgIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG4gIH1cbiAgZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICAgIGlmIChtaW5lID09PSB0aGVpcnMpIHtcbiAgICAgIHJldHVybiBtaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleC5jb25mbGljdCA9IHRydWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW5lOiBtaW5lLFxuICAgICAgICB0aGVpcnM6IHRoZWlyc1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuICAgIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnQgJiYgdGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMgPCBjaGVjay5vbGRTdGFydDtcbiAgfVxuICBmdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9sZFN0YXJ0OiBodW5rLm9sZFN0YXJ0LFxuICAgICAgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgICBuZXdTdGFydDogaHVuay5uZXdTdGFydCArIG9mZnNldCxcbiAgICAgIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgICAgbGluZXM6IGh1bmsubGluZXNcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1lcmdlTGluZXMoaHVuaywgbWluZU9mZnNldCwgbWluZUxpbmVzLCB0aGVpck9mZnNldCwgdGhlaXJMaW5lcykge1xuICAgIC8vIFRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgY29uZmxpY3RlZCBodW5rLCBidXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBjb250ZXh0XG4gICAgLy8gaXMgdGhlIG9ubHkgb3ZlcmxhcCB3aGVyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG1lcmdlIHRoZSBjb250ZW50IGhlcmUuXG4gICAgdmFyIG1pbmUgPSB7XG4gICAgICAgIG9mZnNldDogbWluZU9mZnNldCxcbiAgICAgICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICAgICAgaW5kZXg6IDBcbiAgICAgIH0sXG4gICAgICB0aGVpciA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGVpck9mZnNldCxcbiAgICAgICAgbGluZXM6IHRoZWlyTGluZXMsXG4gICAgICAgIGluZGV4OiAwXG4gICAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGFueSBsZWFkaW5nIGNvbnRlbnRcbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTtcblxuICAgIC8vIE5vdyBpbiB0aGUgb3ZlcmxhcCBjb250ZW50LiBTY2FuIHRocm91Z2ggYW5kIHNlbGVjdCB0aGUgYmVzdCBjaGFuZ2VzIGZyb20gZWFjaC5cbiAgICB3aGlsZSAobWluZS5pbmRleCA8IG1pbmUubGluZXMubGVuZ3RoICYmIHRoZWlyLmluZGV4IDwgdGhlaXIubGluZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG4gICAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgICAvLyBCb3RoIG1vZGlmaWVkIC4uLlxuICAgICAgICBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAgIHZhciBfaHVuayRsaW5lcztcbiAgICAgICAgLy8gTWluZSBpbnNlcnRlZFxuICAgICAgICAoX2h1bmskbGluZXMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzLCBfdG9Db25zdW1hYmxlQXJyYXkoY29sbGVjdENoYW5nZShtaW5lKSkpO1xuICAgICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICcrJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAgIHZhciBfaHVuayRsaW5lczI7XG4gICAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgICAoX2h1bmskbGluZXMyID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczIsIF90b0NvbnN1bWFibGVBcnJheShjb2xsZWN0Q2hhbmdlKHRoZWlyKSkpO1xuICAgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCB0aGVpciwgbWluZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgICBodW5rLmxpbmVzLnB1c2gobWluZUN1cnJlbnQpO1xuICAgICAgICBtaW5lLmluZGV4Kys7XG4gICAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCBtaW5lKTtcbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG4gICAgY2FsY0xpbmVDb3VudChodW5rKTtcbiAgfVxuICBmdW5jdGlvbiBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UodGhlaXIpO1xuICAgIGlmIChhbGxSZW1vdmVzKG15Q2hhbmdlcykgJiYgYWxsUmVtb3Zlcyh0aGVpckNoYW5nZXMpKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgICB2YXIgX2h1bmskbGluZXMzO1xuICAgICAgICAoX2h1bmskbGluZXMzID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczMsIF90b0NvbnN1bWFibGVBcnJheShteUNoYW5nZXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChhcnJheVN0YXJ0c1dpdGgodGhlaXJDaGFuZ2VzLCBteUNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldChtaW5lLCB0aGVpckNoYW5nZXMsIHRoZWlyQ2hhbmdlcy5sZW5ndGggLSBteUNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgICB2YXIgX2h1bmskbGluZXM0O1xuICAgICAgICAoX2h1bmskbGluZXM0ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczQsIF90b0NvbnN1bWFibGVBcnJheSh0aGVpckNoYW5nZXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczU7XG4gICAgICAoX2h1bmskbGluZXM1ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczUsIF90b0NvbnN1bWFibGVBcnJheShteUNoYW5nZXMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xuICB9XG4gIGZ1bmN0aW9uIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIsIHN3YXApIHtcbiAgICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuICAgIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXM2O1xuICAgICAgKF9odW5rJGxpbmVzNiA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM2LCBfdG9Db25zdW1hYmxlQXJyYXkodGhlaXJDaGFuZ2VzLm1lcmdlZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgICBodW5rLmxpbmVzLnB1c2goe1xuICAgICAgY29uZmxpY3Q6IHRydWUsXG4gICAgICBtaW5lOiBtaW5lLFxuICAgICAgdGhlaXJzOiB0aGVpclxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuICAgIHdoaWxlIChpbnNlcnQub2Zmc2V0IDwgdGhlaXIub2Zmc2V0ICYmIGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgICAgIGluc2VydC5vZmZzZXQrKztcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaW5zZXJ0VHJhaWxpbmcoaHVuaywgaW5zZXJ0KSB7XG4gICAgd2hpbGUgKGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICAgIHZhciByZXQgPSBbXSxcbiAgICAgIG9wZXJhdGlvbiA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XVswXTtcbiAgICB3aGlsZSAoc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBsaW5lID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdO1xuXG4gICAgICAvLyBHcm91cCBhZGRpdGlvbnMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYWZ0ZXIgc3VidHJhY3Rpb25zIGFuZCB0cmVhdCB0aGVtIGFzIG9uZSBcImF0b21pY1wiIG1vZGlmeSBjaGFuZ2UuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICAgIH1cbiAgICAgIGlmIChvcGVyYXRpb24gPT09IGxpbmVbMF0pIHtcbiAgICAgICAgcmV0LnB1c2gobGluZSk7XG4gICAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBmdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gICAgdmFyIGNoYW5nZXMgPSBbXSxcbiAgICAgIG1lcmdlZCA9IFtdLFxuICAgICAgbWF0Y2hJbmRleCA9IDAsXG4gICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuICAgICAgY29uZmxpY3RlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgICAgdmFyIGNoYW5nZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XSxcbiAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cbiAgICAgIC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgIGlmIChtYXRjaFswXSA9PT0gJysnKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGV4dENoYW5nZXMgPSBjb250ZXh0Q2hhbmdlcyB8fCBjaGFuZ2VbMF0gIT09ICcgJztcbiAgICAgIG1lcmdlZC5wdXNoKG1hdGNoKTtcbiAgICAgIG1hdGNoSW5kZXgrKztcblxuICAgICAgLy8gQ29uc3VtZSBhbnkgYWRkaXRpb25zIGluIHRoZSBvdGhlciBibG9jayBhcyBhIGNvbmZsaWN0IHRvIGF0dGVtcHRcbiAgICAgIC8vIHRvIHB1bGwgaW4gdGhlIHJlbWFpbmluZyBjb250ZXh0IGFmdGVyIHRoaXNcbiAgICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtYXRjaC5zdWJzdHIoMSkgPT09IGNoYW5nZS5zdWJzdHIoMSkpIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF0gfHwgJycpWzBdID09PSAnKycgJiYgY29udGV4dENoYW5nZXMpIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmxpY3RlZCkge1xuICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuICAgIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgbWVyZ2VkLnB1c2gobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXgrK10pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBhbGxSZW1vdmVzKGNoYW5nZXMpIHtcbiAgICByZXR1cm4gY2hhbmdlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGNoYW5nZSkge1xuICAgICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuICAgICAgdmFyIGNoYW5nZUNvbnRlbnQgPSByZW1vdmVDaGFuZ2VzW3JlbW92ZUNoYW5nZXMubGVuZ3RoIC0gZGVsdGEgKyBpXS5zdWJzdHIoMSk7XG4gICAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIGNhbGNPbGROZXdMaW5lQ291bnQobGluZXMpIHtcbiAgICB2YXIgb2xkTGluZXMgPSAwO1xuICAgIHZhciBuZXdMaW5lcyA9IDA7XG4gICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgbXlDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS5taW5lKTtcbiAgICAgICAgdmFyIHRoZWlyQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUudGhlaXJzKTtcbiAgICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgICAgb2xkTGluZXMgKz0gbXlDb3VudC5vbGRMaW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICAgIG5ld0xpbmVzICs9IG15Q291bnQubmV3TGluZXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICcrJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgICAgbmV3TGluZXMrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJy0nIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgICBvbGRMaW5lcysrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9sZExpbmVzOiBvbGRMaW5lcyxcbiAgICAgIG5ld0xpbmVzOiBuZXdMaW5lc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnNlUGF0Y2goc3RydWN0dXJlZFBhdGNoKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RydWN0dXJlZFBhdGNoKSkge1xuICAgICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaC5tYXAocmV2ZXJzZVBhdGNoKS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3RydWN0dXJlZFBhdGNoKSwge30sIHtcbiAgICAgIG9sZEZpbGVOYW1lOiBzdHJ1Y3R1cmVkUGF0Y2gubmV3RmlsZU5hbWUsXG4gICAgICBvbGRIZWFkZXI6IHN0cnVjdHVyZWRQYXRjaC5uZXdIZWFkZXIsXG4gICAgICBuZXdGaWxlTmFtZTogc3RydWN0dXJlZFBhdGNoLm9sZEZpbGVOYW1lLFxuICAgICAgbmV3SGVhZGVyOiBzdHJ1Y3R1cmVkUGF0Y2gub2xkSGVhZGVyLFxuICAgICAgaHVua3M6IHN0cnVjdHVyZWRQYXRjaC5odW5rcy5tYXAoZnVuY3Rpb24gKGh1bmspIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvbGRMaW5lczogaHVuay5uZXdMaW5lcyxcbiAgICAgICAgICBvbGRTdGFydDogaHVuay5uZXdTdGFydCxcbiAgICAgICAgICBuZXdMaW5lczogaHVuay5vbGRMaW5lcyxcbiAgICAgICAgICBuZXdTdGFydDogaHVuay5vbGRTdGFydCxcbiAgICAgICAgICBsaW5lczogaHVuay5saW5lcy5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmIChsLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICAgICAgICByZXR1cm4gXCIrXCIuY29uY2F0KGwuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGwuc3RhcnRzV2l0aCgnKycpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcIi1cIi5jb25jYXQobC5zbGljZSgxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1kaWZmLW1hdGNoLXBhdGNoL3dpa2kvQVBJXG4gIGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICAgIHZhciByZXQgPSBbXSxcbiAgICAgIGNoYW5nZSxcbiAgICAgIG9wZXJhdGlvbjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BlcmF0aW9uID0gMDtcbiAgICAgIH1cbiAgICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb1hNTChjaGFuZ2VzKSB7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8aW5zPicpO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgICByZXQucHVzaCgnPGRlbD4nKTtcbiAgICAgIH1cbiAgICAgIHJldC5wdXNoKGVzY2FwZUhUTUwoY2hhbmdlLnZhbHVlKSk7XG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgICAgcmV0LnB1c2goJzwvZGVsPicpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICB9XG4gIGZ1bmN0aW9uIGVzY2FwZUhUTUwocykge1xuICAgIHZhciBuID0gcztcbiAgICBuID0gbi5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuICAgIG4gPSBuLnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcbiAgICBuID0gbi5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gICAgbiA9IG4ucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuICAgIHJldHVybiBuO1xuICB9XG5cbiAgZXhwb3J0cy5EaWZmID0gRGlmZjtcbiAgZXhwb3J0cy5hcHBseVBhdGNoID0gYXBwbHlQYXRjaDtcbiAgZXhwb3J0cy5hcHBseVBhdGNoZXMgPSBhcHBseVBhdGNoZXM7XG4gIGV4cG9ydHMuY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuICBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9ETVAgPSBjb252ZXJ0Q2hhbmdlc1RvRE1QO1xuICBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9YTUwgPSBjb252ZXJ0Q2hhbmdlc1RvWE1MO1xuICBleHBvcnRzLmNyZWF0ZVBhdGNoID0gY3JlYXRlUGF0Y2g7XG4gIGV4cG9ydHMuY3JlYXRlVHdvRmlsZXNQYXRjaCA9IGNyZWF0ZVR3b0ZpbGVzUGF0Y2g7XG4gIGV4cG9ydHMuZGlmZkFycmF5cyA9IGRpZmZBcnJheXM7XG4gIGV4cG9ydHMuZGlmZkNoYXJzID0gZGlmZkNoYXJzO1xuICBleHBvcnRzLmRpZmZDc3MgPSBkaWZmQ3NzO1xuICBleHBvcnRzLmRpZmZKc29uID0gZGlmZkpzb247XG4gIGV4cG9ydHMuZGlmZkxpbmVzID0gZGlmZkxpbmVzO1xuICBleHBvcnRzLmRpZmZTZW50ZW5jZXMgPSBkaWZmU2VudGVuY2VzO1xuICBleHBvcnRzLmRpZmZUcmltbWVkTGluZXMgPSBkaWZmVHJpbW1lZExpbmVzO1xuICBleHBvcnRzLmRpZmZXb3JkcyA9IGRpZmZXb3JkcztcbiAgZXhwb3J0cy5kaWZmV29yZHNXaXRoU3BhY2UgPSBkaWZmV29yZHNXaXRoU3BhY2U7XG4gIGV4cG9ydHMuZm9ybWF0UGF0Y2ggPSBmb3JtYXRQYXRjaDtcbiAgZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuICBleHBvcnRzLnBhcnNlUGF0Y2ggPSBwYXJzZVBhdGNoO1xuICBleHBvcnRzLnJldmVyc2VQYXRjaCA9IHJldmVyc2VQYXRjaDtcbiAgZXhwb3J0cy5zdHJ1Y3R1cmVkUGF0Y2ggPSBzdHJ1Y3R1cmVkUGF0Y2g7XG5cbn0pKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSkgfHwgZmFsc2U7XG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGRlZmluZVByb3BlcnR5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9ldmFsJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IEV2YWxFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JhbmdlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmdlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JlZicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSZWZlcmVuY2VFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vc3ludGF4Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRheEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi90eXBlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGVFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXJpJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFVSSUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG52YXIgY29uY2F0dHkgPSBmdW5jdGlvbiBjb25jYXR0eShhLCBiKSB7XG4gICAgdmFyIGFyciA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFycltpXSA9IGFbaV07XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYi5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBhcnJbaiArIGEubGVuZ3RoXSA9IGJbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBzbGljeSA9IGZ1bmN0aW9uIHNsaWN5KGFyckxpa2UsIG9mZnNldCkge1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0IHx8IDAsIGogPSAwOyBpIDwgYXJyTGlrZS5sZW5ndGg7IGkgKz0gMSwgaiArPSAxKSB7XG4gICAgICAgIGFycltqXSA9IGFyckxpa2VbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgam9pbnkgPSBmdW5jdGlvbiAoYXJyLCBqb2luZXIpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgc3RyICs9IGFycltpXTtcbiAgICAgICAgaWYgKGkgKyAxIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgc3RyICs9IGpvaW5lcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5hcHBseSh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWN5KGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGNvbmNhdHR5KGFyZ3MsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgIGNvbmNhdHR5KGFyZ3MsIGFyZ3VtZW50cylcbiAgICAgICAgKTtcblxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBtYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJnc1tpXSA9ICckJyArIGk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGpvaW55KGJvdW5kQXJncywgJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMnKTtcbnZhciAkRXZhbEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL2V2YWwnKTtcbnZhciAkUmFuZ2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yYW5nZScpO1xudmFyICRSZWZlcmVuY2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yZWYnKTtcbnZhciAkU3ludGF4RXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvc3ludGF4Jyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFVSSUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3VyaScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG52YXIgaGFzUHJvdG8gPSByZXF1aXJlKCdoYXMtcHJvdG8nKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgKFxuXHRoYXNQcm90b1xuXHRcdD8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0XHQ6IG51bGxcbik7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6ICRFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiAkRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6ICRSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6ICRSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogJFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG5pZiAoZ2V0UHJvdG8pIHtcblx0dHJ5IHtcblx0XHRudWxsLmVycm9yOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vcHVsbC8zODQjaXNzdWVjb21tZW50LTEzNjQyNjQyMjlcblx0XHR2YXIgZXJyb3JQcm90byA9IGdldFByb3RvKGdldFByb3RvKGUpKTtcblx0XHRJTlRSSU5TSUNTWyclRXJyb3IucHJvdG90eXBlJSddID0gZXJyb3JQcm90bztcblx0fVxufVxuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuICYmIGdldFByb3RvKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXNvd24nKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG5cbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0JGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGdPUEQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzKCkge1xuXHRyZXR1cm4gISEkZGVmaW5lUHJvcGVydHk7XG59O1xuXG5oYXNQcm9wZXJ0eURlc2NyaXB0b3JzLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnID0gZnVuY3Rpb24gaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcoKSB7XG5cdC8vIG5vZGUgdjAuNiBoYXMgYSBidWcgd2hlcmUgYXJyYXkgbGVuZ3RocyBjYW4gYmUgU2V0IGJ1dCBub3QgRGVmaW5lZFxuXHRpZiAoISRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRkZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDEgfSkubGVuZ3RoICE9PSAxO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSW4gRmlyZWZveCA0LTIyLCBkZWZpbmluZyBsZW5ndGggb24gYW4gYXJyYXkgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdGVzdCA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRmb286IHt9XG59O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzUHJvdG8oKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGVycm9ycyBvbiBhbiBpbmhlcml0ZWQgcHJvcGVydHkgZm9yIHNvbWUgcmVhc29uXG5cdHJldHVybiB7IF9fcHJvdG9fXzogdGVzdCB9LmZvbyA9PT0gdGVzdC5mb29cblx0XHQmJiAhKHRlc3QgaW5zdGFuY2VvZiAkT2JqZWN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZDtcblxuLypcbiAgdmFyIG9iaiA9IHthOiAzLCBiOiA1fTtcbiAgZXh0ZW5kKG9iaiwge2E6IDQsIGM6IDh9KTsgLy8ge2E6IDQsIGI6IDUsIGM6IDh9XG4gIG9iajsgLy8ge2E6IDQsIGI6IDUsIGM6IDh9XG5cbiAgdmFyIG9iaiA9IHthOiAzLCBiOiA1fTtcbiAgZXh0ZW5kKHt9LCBvYmosIHthOiA0LCBjOiA4fSk7IC8vIHthOiA0LCBiOiA1LCBjOiA4fVxuICBvYmo7IC8vIHthOiAzLCBiOiA1fVxuXG4gIHZhciBhcnIgPSBbMSwgMiwgM107XG4gIHZhciBvYmogPSB7YTogMywgYjogNX07XG4gIGV4dGVuZChvYmosIHtjOiBhcnJ9KTsgLy8ge2E6IDMsIGI6IDUsIGM6IFsxLCAyLCAzXX1cbiAgYXJyLnB1c2goNCk7XG4gIG9iajsgLy8ge2E6IDMsIGI6IDUsIGM6IFsxLCAyLCAzLCA0XX1cblxuICB2YXIgYXJyID0gWzEsIDIsIDNdO1xuICB2YXIgb2JqID0ge2E6IDMsIGI6IDV9O1xuICBleHRlbmQodHJ1ZSwgb2JqLCB7YzogYXJyfSk7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgM119XG4gIGFyci5wdXNoKDQpO1xuICBvYmo7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgM119XG5cbiAgZXh0ZW5kKHthOiA0LCBiOiA1fSk7IC8vIHthOiA0LCBiOiA1fVxuICBleHRlbmQoe2E6IDQsIGI6IDV9LCAzKTsge2E6IDQsIGI6IDV9XG4gIGV4dGVuZCh7YTogNCwgYjogNX0sIHRydWUpOyB7YTogNCwgYjogNX1cbiAgZXh0ZW5kKCdoZWxsbycsIHthOiA0LCBiOiA1fSk7IC8vIHRocm93c1xuICBleHRlbmQoMywge2E6IDQsIGI6IDV9KTsgLy8gdGhyb3dzXG4qL1xuXG5mdW5jdGlvbiBleHRlbmQoLyogW2RlZXBdLCBvYmoxLCBvYmoyLCBbb2Jqbl0gKi8pIHtcbiAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gIHZhciBkZWVwID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgYXJnc1swXSA9PSAnYm9vbGVhbicpIHtcbiAgICBkZWVwID0gYXJncy5zaGlmdCgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBhcmdzWzBdO1xuICBpZiAoaXNVbmV4dGVuZGFibGUocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXh0ZW5kZWUgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuICB2YXIgZXh0ZW5kZXJzID0gYXJncy5zbGljZSgxKTtcbiAgdmFyIGxlbiA9IGV4dGVuZGVycy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgZXh0ZW5kZXIgPSBleHRlbmRlcnNbaV07XG4gICAgZm9yICh2YXIga2V5IGluIGV4dGVuZGVyKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4dGVuZGVyLCBrZXkpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV4dGVuZGVyW2tleV07XG4gICAgICAgIGlmIChkZWVwICYmIGlzQ2xvbmVhYmxlKHZhbHVlKSkge1xuICAgICAgICAgIHZhciBiYXNlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gZXh0ZW5kKFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkgJiYgIWlzVW5leHRlbmRhYmxlKHJlc3VsdFtrZXldKVxuICAgICAgICAgICAgICA/IHJlc3VsdFtrZXldXG4gICAgICAgICAgICAgIDogYmFzZSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzQ2xvbmVhYmxlKG9iaikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopIHx8IHt9LnRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNVbmV4dGVuZGFibGUodmFsKSB7XG4gIHJldHVybiAhdmFsIHx8ICh0eXBlb2YgdmFsICE9ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgIT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCIvKipcbiAqIGxvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanF1ZXJ5Lm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cblxuLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLyxcbiAgICByZUxlYWRpbmdEb3QgPSAvXlxcLi8sXG4gICAgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QgaW4gSUUgPCA5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgaG9zdCBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlKSB7XG4gIC8vIE1hbnkgaG9zdCBvYmplY3RzIGFyZSBgT2JqZWN0YCBvYmplY3RzIHRoYXQgY2FuIGNvZXJjZSB0byBzdHJpbmdzXG4gIC8vIGRlc3BpdGUgaGF2aW5nIGltcHJvcGVybHkgZGVmaW5lZCBgdG9TdHJpbmdgIG1ldGhvZHMuXG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gISEodmFsdWUgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbCxcbiAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXG4gICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHJldHVybiB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXldICE9PSB1bmRlZmluZWQgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICBnZXRNYXBEYXRhKHRoaXMsIGtleSkuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gaXNLZXkocGF0aCwgb2JqZWN0KSA/IFtwYXRoXSA6IGNhc3RQYXRoKHBhdGgpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gKGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzSG9zdE9iamVjdCh2YWx1ZSkpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBzdHJpbmdUb1BhdGgodmFsdWUpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemUoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAocmVMZWFkaW5nRG90LnRlc3Qoc3RyaW5nKSkge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEFzc2lnbiBjYWNoZSB0byBgXy5tZW1vaXplYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDgtOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gaXNPYmplY3QodmFsdWUpID8gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gY2FjaGUgYSByZWZlcmVuY2UgdG8gc2V0VGltZW91dCwgc28gdGhhdCBvdXIgcmVmZXJlbmNlIHdvbid0IGJlIHN0dWJiZWQgb3V0XG4vLyB3aGVuIHVzaW5nIGZha2UgdGltZXJzIGFuZCBlcnJvcnMgd2lsbCBzdGlsbCBnZXQgbG9nZ2VkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2pvaGFuc2VuL1Npbm9uLkpTL2lzc3Vlcy8zODFcbnZhciByZWFsU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGNvbmZpZ3VyZUxvZ2dlcihjb25maWcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgLy8gRnVuY3Rpb24gd2hpY2ggcHJpbnRzIGVycm9ycy5cbiAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcImxvZ2dlclwiKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgY29uZmlnLmxvZ2dlciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIH1cbiAgICAvLyBXaGVuIHNldCB0byB0cnVlLCBhbnkgZXJyb3JzIGxvZ2dlZCB3aWxsIGJlIHRocm93biBpbW1lZGlhdGVseTtcbiAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIHRoZSBlcnJvcnMgd2lsbCBiZSB0aHJvd24gaW4gc2VwYXJhdGUgZXhlY3V0aW9uIGZyYW1lLlxuICAgIGlmICghY29uZmlnLmhhc093blByb3BlcnR5KFwidXNlSW1tZWRpYXRlRXhjZXB0aW9uc1wiKSkge1xuICAgICAgICBjb25maWcudXNlSW1tZWRpYXRlRXhjZXB0aW9ucyA9IHRydWU7XG4gICAgfVxuICAgIC8vIHdyYXAgcmVhbFNldFRpbWVvdXQgd2l0aCBzb21ldGhpbmcgd2UgY2FuIHN0dWIgaW4gdGVzdHNcbiAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcInNldFRpbWVvdXRcIikpIHtcbiAgICAgICAgY29uZmlnLnNldFRpbWVvdXQgPSByZWFsU2V0VGltZW91dDtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gbG9nRXJyb3IobGFiZWwsIGUpIHtcbiAgICAgICAgdmFyIG1zZyA9IGAke2xhYmVsfSB0aHJldyBleGNlcHRpb246IGA7XG4gICAgICAgIHZhciBlcnIgPSB7XG4gICAgICAgICAgICBuYW1lOiBlLm5hbWUgfHwgbGFiZWwsXG4gICAgICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UgfHwgZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3RhY2s6IGUuc3RhY2ssXG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdGhyb3dMb2dnZWRFcnJvcigpIHtcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID0gbXNnICsgZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcubG9nZ2VyKGAke21zZ31bJHtlcnIubmFtZX1dICR7ZXJyLm1lc3NhZ2V9YCk7XG5cbiAgICAgICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgICAgICAgY29uZmlnLmxvZ2dlcihlcnIuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy51c2VJbW1lZGlhdGVFeGNlcHRpb25zKSB7XG4gICAgICAgICAgICB0aHJvd0xvZ2dlZEVycm9yKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuc2V0VGltZW91dCh0aHJvd0xvZ2dlZEVycm9yLCAwKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uZmlndXJlTG9nZ2VyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFdmVudCA9IHJlcXVpcmUoXCIuL2V2ZW50XCIpO1xuXG5mdW5jdGlvbiBDdXN0b21FdmVudCh0eXBlLCBjdXN0b21EYXRhLCB0YXJnZXQpIHtcbiAgICB0aGlzLmluaXRFdmVudCh0eXBlLCBmYWxzZSwgZmFsc2UsIHRhcmdldCk7XG4gICAgdGhpcy5kZXRhaWwgPSBjdXN0b21EYXRhLmRldGFpbCB8fCBudWxsO1xufVxuXG5DdXN0b21FdmVudC5wcm90b3R5cGUgPSBuZXcgRXZlbnQoKTtcblxuQ3VzdG9tRXZlbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3VzdG9tRXZlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gQ3VzdG9tRXZlbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZmxhdHRlbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSBPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhcHR1cmU6IEJvb2xlYW4ob3B0aW9ucyksXG4gICAgICAgICAgICBvbmNlOiBmYWxzZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjYXB0dXJlOiBCb29sZWFuKG9wdGlvbnMuY2FwdHVyZSksXG4gICAgICAgIG9uY2U6IEJvb2xlYW4ob3B0aW9ucy5vbmNlKSxcbiAgICAgICAgcGFzc2l2ZTogQm9vbGVhbihvcHRpb25zLnBhc3NpdmUpLFxuICAgIH07XG59XG5mdW5jdGlvbiBub3QoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIWZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhc0xpc3RlbmVyRmlsdGVyKGxpc3RlbmVyLCBjYXB0dXJlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChsaXN0ZW5lclNwZWMpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGxpc3RlbmVyU3BlYy5jYXB0dXJlID09PSBjYXB0dXJlICYmXG4gICAgICAgICAgICBsaXN0ZW5lclNwZWMubGlzdGVuZXIgPT09IGxpc3RlbmVyXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxudmFyIEV2ZW50VGFyZ2V0ID0ge1xuICAgIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWV2ZW50dGFyZ2V0LWFkZGV2ZW50bGlzdGVuZXJcbiAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBldmVudCxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgIHByb3ZpZGVkT3B0aW9ucyxcbiAgICApIHtcbiAgICAgICAgLy8gMy4gTGV0IGNhcHR1cmUsIHBhc3NpdmUsIGFuZCBvbmNlIGJlIHRoZSByZXN1bHQgb2YgZmxhdHRlbmluZyBtb3JlIG9wdGlvbnMuXG4gICAgICAgIC8vIEZsYXR0ZW4gcHJvcGVydHkgYmVmb3JlIGV4ZWN1dGluZyBzdGVwIDIsXG4gICAgICAgIC8vIGZldHVyZSBkZXRlY3Rpb24gaXMgdXN1YWxseSBiYXNlZCBvbiByZWdpc3RlcmluZyBoYW5kbGVyIHdpdGggb3B0aW9ucyBvYmplY3QsXG4gICAgICAgIC8vIHRoYXQgaGFzIGdldHRlciBkZWZpbmVkXG4gICAgICAgIC8vIGFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHt9LCB7XG4gICAgICAgIC8vICAgIGdldCBvbmNlKCkgeyBzdXBwb3J0c09uY2UgPSB0cnVlOyB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25zKHByb3ZpZGVkT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gMi4gSWYgY2FsbGJhY2sgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gbnVsbCB8fCBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0gPSB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSB8fCBbXTtcblxuICAgICAgICAvLyA0LiBJZiBjb250ZXh0IG9iamVjdOKAmXMgYXNzb2NpYXRlZCBsaXN0IG9mIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIC8vICAgIGRvZXMgbm90IGNvbnRhaW4gYW4gZXZlbnQgbGlzdGVuZXIgd2hvc2UgdHlwZSBpcyB0eXBlLFxuICAgICAgICAvLyAgICBjYWxsYmFjayBpcyBjYWxsYmFjaywgYW5kIGNhcHR1cmUgaXMgY2FwdHVyZSwgdGhlbiBhcHBlbmRcbiAgICAgICAgLy8gICAgYSBuZXcgZXZlbnQgbGlzdGVuZXIgdG8gaXQsIHdob3NlIHR5cGUgaXMgdHlwZSwgY2FsbGJhY2sgaXNcbiAgICAgICAgLy8gICAgY2FsbGJhY2ssIGNhcHR1cmUgaXMgY2FwdHVyZSwgcGFzc2l2ZSBpcyBwYXNzaXZlLCBhbmQgb25jZSBpcyBvbmNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0uc29tZShcbiAgICAgICAgICAgICAgICBoYXNMaXN0ZW5lckZpbHRlcihsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgICAgICAgY2FwdHVyZTogb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgICAgICAgICAgIG9uY2U6IG9wdGlvbnMub25jZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWV2ZW50dGFyZ2V0LXJlbW92ZWV2ZW50bGlzdGVuZXJcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICBldmVudCxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgIHByb3ZpZGVkT3B0aW9ucyxcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzIHx8ICF0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gTGV0IGNhcHR1cmUgYmUgdGhlIHJlc3VsdCBvZiBmbGF0dGVuaW5nIG9wdGlvbnMuXG4gICAgICAgIHZhciBvcHRpb25zID0gZmxhdHRlbk9wdGlvbnMocHJvdmlkZWRPcHRpb25zKTtcblxuICAgICAgICAvLyAzLiBJZiB0aGVyZSBpcyBhbiBldmVudCBsaXN0ZW5lciBpbiB0aGUgYXNzb2NpYXRlZCBsaXN0IG9mXG4gICAgICAgIC8vICAgIGV2ZW50IGxpc3RlbmVycyB3aG9zZSB0eXBlIGlzIHR5cGUsIGNhbGxiYWNrIGlzIGNhbGxiYWNrLFxuICAgICAgICAvLyAgICBhbmQgY2FwdHVyZSBpcyBjYXB0dXJlLCB0aGVuIHNldCB0aGF0IGV2ZW50IGxpc3RlbmVy4oCZc1xuICAgICAgICAvLyAgICByZW1vdmVkIHRvIHRydWUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBhc3NvY2lhdGVkIGxpc3Qgb2YgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSA9IHRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgICAgICAgIG5vdChoYXNMaXN0ZW5lckZpbHRlcihsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKSksXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzIHx8ICF0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50LnR5cGVdKSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihldmVudC5kZWZhdWx0UHJldmVudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBldmVudC50eXBlO1xuICAgICAgICB2YXIgbGlzdGVuZXJzID0gc2VsZi5ldmVudExpc3RlbmVyc1t0eXBlXTtcblxuICAgICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzLCB0aGF0IHNob3VsZCBiZSBkaXNwYXRjaGVkIG9uY2VcbiAgICAgICAgLy8gYmVmb3JlIHJ1bm5pbmcgZGlzcGF0Y2ggbG9vcCB0byBhdm9pZCBuZXN0ZWQgZGlzcGF0Y2ggaXNzdWVzXG4gICAgICAgIHNlbGYuZXZlbnRMaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsaXN0ZW5lclNwZWMpIHtcbiAgICAgICAgICAgIHJldHVybiAhbGlzdGVuZXJTcGVjLm9uY2U7XG4gICAgICAgIH0pO1xuICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXJTcGVjKSB7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lclNwZWMubGlzdGVuZXI7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHNlbGYsIGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gQm9vbGVhbihldmVudC5kZWZhdWx0UHJldmVudGVkKTtcbiAgICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFRhcmdldDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB0YXJnZXQpIHtcbiAgICB0aGlzLmluaXRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB0YXJnZXQpO1xufVxuXG5FdmVudC5wcm90b3R5cGUgPSB7XG4gICAgaW5pdEV2ZW50OiBmdW5jdGlvbiAodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYnViYmxlcyA9IGJ1YmJsZXM7XG4gICAgICAgIHRoaXMuY2FuY2VsYWJsZSA9IGNhbmNlbGFibGU7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSB0YXJnZXQ7XG4gICAgfSxcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge30sXG5cbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIEV2ZW50OiByZXF1aXJlKFwiLi9ldmVudFwiKSxcbiAgICBQcm9ncmVzc0V2ZW50OiByZXF1aXJlKFwiLi9wcm9ncmVzcy1ldmVudFwiKSxcbiAgICBDdXN0b21FdmVudDogcmVxdWlyZShcIi4vY3VzdG9tLWV2ZW50XCIpLFxuICAgIEV2ZW50VGFyZ2V0OiByZXF1aXJlKFwiLi9ldmVudC10YXJnZXRcIiksXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFdmVudCA9IHJlcXVpcmUoXCIuL2V2ZW50XCIpO1xuXG5mdW5jdGlvbiBQcm9ncmVzc0V2ZW50KHR5cGUsIHByb2dyZXNzRXZlbnRSYXcsIHRhcmdldCkge1xuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdGFyZ2V0KTtcbiAgICB0aGlzLmxvYWRlZCA9XG4gICAgICAgIHR5cGVvZiBwcm9ncmVzc0V2ZW50UmF3LmxvYWRlZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyBwcm9ncmVzc0V2ZW50UmF3LmxvYWRlZFxuICAgICAgICAgICAgOiBudWxsO1xuICAgIHRoaXMudG90YWwgPVxuICAgICAgICB0eXBlb2YgcHJvZ3Jlc3NFdmVudFJhdy50b3RhbCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyBwcm9ncmVzc0V2ZW50UmF3LnRvdGFsXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5sZW5ndGhDb21wdXRhYmxlID0gQm9vbGVhbihwcm9ncmVzc0V2ZW50UmF3LnRvdGFsKTtcbn1cblxuUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUgPSBuZXcgRXZlbnQoKTtcblxuUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9ncmVzc0V2ZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb2dyZXNzRXZlbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZha2VUaW1lcnMgPSByZXF1aXJlKFwiQHNpbm9uanMvZmFrZS10aW1lcnNcIik7XG52YXIgZmFrZVNlcnZlciA9IHJlcXVpcmUoXCIuL2luZGV4XCIpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmZ1bmN0aW9uIFNlcnZlcigpIHt9XG5TZXJ2ZXIucHJvdG90eXBlID0gZmFrZVNlcnZlcjtcblxudmFyIGZha2VTZXJ2ZXJXaXRoQ2xvY2sgPSBuZXcgU2VydmVyKCk7XG5cbmZha2VTZXJ2ZXJXaXRoQ2xvY2suYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QoeGhyKSB7XG4gICAgaWYgKHhoci5hc3luYykge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQuY2xvY2sgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvY2sgPSBzZXRUaW1lb3V0LmNsb2NrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9jayA9IEZha2VUaW1lcnMuaW5zdGFsbCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNldENsb2NrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5sb25nZXN0VGltZW91dCkge1xuICAgICAgICAgICAgdmFyIGNsb2NrU2V0VGltZW91dCA9IHRoaXMuY2xvY2suc2V0VGltZW91dDtcbiAgICAgICAgICAgIHZhciBjbG9ja1NldEludGVydmFsID0gdGhpcy5jbG9jay5zZXRJbnRlcnZhbDtcbiAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSB0aGlzO1xuXG4gICAgICAgICAgICB0aGlzLmNsb2NrLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIubG9uZ2VzdFRpbWVvdXQgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLmxvbmdlc3RUaW1lb3V0IHx8IDAsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjbG9ja1NldFRpbWVvdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY2xvY2suc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIubG9uZ2VzdFRpbWVvdXQgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLmxvbmdlc3RUaW1lb3V0IHx8IDAsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjbG9ja1NldEludGVydmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZha2VTZXJ2ZXIuYWRkUmVxdWVzdC5jYWxsKHRoaXMsIHhocik7XG59O1xuXG5mYWtlU2VydmVyV2l0aENsb2NrLnJlc3BvbmQgPSBmdW5jdGlvbiByZXNwb25kKCkge1xuICAgIHZhciByZXR1cm5WYWwgPSBmYWtlU2VydmVyLnJlc3BvbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLmNsb2NrKSB7XG4gICAgICAgIHRoaXMuY2xvY2sudGljayh0aGlzLmxvbmdlc3RUaW1lb3V0IHx8IDApO1xuICAgICAgICB0aGlzLmxvbmdlc3RUaW1lb3V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5yZXNldENsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLmNsb2NrLnVuaW5zdGFsbCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNldENsb2NrID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xufTtcblxuZmFrZVNlcnZlcldpdGhDbG9jay5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5jbG9jaykge1xuICAgICAgICB0aGlzLmNsb2NrLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWtlU2VydmVyLnJlc3RvcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmFrZVNlcnZlcldpdGhDbG9jaztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZmFrZVhociA9IHJlcXVpcmUoXCIuLi9mYWtlLXhoclwiKTtcbnZhciBwdXNoID0gW10ucHVzaDtcbnZhciBsb2cgPSByZXF1aXJlKFwiLi9sb2dcIik7XG52YXIgY29uZmlndXJlTG9nRXJyb3IgPSByZXF1aXJlKFwiLi4vY29uZmlndXJlLWxvZ2dlclwiKTtcbnZhciBwYXRoVG9SZWdleHAgPSByZXF1aXJlKFwicGF0aC10by1yZWdleHBcIikucGF0aFRvUmVnZXhwO1xuXG52YXIgc3VwcG9ydHNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZnVuY3Rpb24gcmVzcG9uc2VBcnJheShoYW5kbGVyKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gaGFuZGxlcjtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaGFuZGxlcikgIT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgICByZXNwb25zZSA9IFsyMDAsIHt9LCBoYW5kbGVyXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlWzJdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICghc3VwcG9ydHNBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRmFrZSBzZXJ2ZXIgcmVzcG9uc2UgYm9keSBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCB3YXMgJHt0eXBlb2YgcmVzcG9uc2VbMl19YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIShyZXNwb25zZVsyXSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRmFrZSBzZXJ2ZXIgcmVzcG9uc2UgYm9keSBzaG91bGQgYmUgYSBzdHJpbmcgb3IgQXJyYXlCdWZmZXIsIGJ1dCB3YXMgJHt0eXBlb2YgcmVzcG9uc2VbMl19YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRXaW5kb3dMb2NhdGlvbigpIHtcbiAgICB2YXIgd2lubG9jID0ge1xuICAgICAgICBob3N0bmFtZTogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgcG9ydDogcHJvY2Vzcy5lbnYuUE9SVCB8fCA4MCxcbiAgICAgICAgcHJvdG9jb2w6IFwiaHR0cDpcIixcbiAgICB9O1xuICAgIHdpbmxvYy5ob3N0ID1cbiAgICAgICAgd2lubG9jLmhvc3RuYW1lICtcbiAgICAgICAgKFN0cmluZyh3aW5sb2MucG9ydCkgPT09IFwiODBcIiA/IFwiXCIgOiBgOiR7d2lubG9jLnBvcnR9YCk7XG4gICAgcmV0dXJuIHdpbmxvYztcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93TG9jYXRpb24oKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRXaW5kb3dMb2NhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93LmxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIEJyb3dzZXJzIHBsYWNlIGxvY2F0aW9uIG9uIHdpbmRvd1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdy53aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy53aW5kb3cubG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgICApIHtcbiAgICAgICAgLy8gUmVhY3QgTmF0aXZlIG9uIEFuZHJvaWQgcGxhY2VzIGxvY2F0aW9uIG9uIHdpbmRvdy53aW5kb3dcbiAgICAgICAgcmV0dXJuIHdpbmRvdy53aW5kb3cubG9jYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldERlZmF1bHRXaW5kb3dMb2NhdGlvbigpO1xufVxuXG5mdW5jdGlvbiBtYXRjaE9uZShyZXNwb25zZSwgcmVxTWV0aG9kLCByZXFVcmwpIHtcbiAgICB2YXIgcm1ldGggPSByZXNwb25zZS5tZXRob2Q7XG4gICAgdmFyIG1hdGNoTWV0aG9kID0gIXJtZXRoIHx8IHJtZXRoLnRvTG93ZXJDYXNlKCkgPT09IHJlcU1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciB1cmwgPSByZXNwb25zZS51cmw7XG4gICAgdmFyIG1hdGNoVXJsID1cbiAgICAgICAgIXVybCB8fFxuICAgICAgICB1cmwgPT09IHJlcVVybCB8fFxuICAgICAgICAodHlwZW9mIHVybC50ZXN0ID09PSBcImZ1bmN0aW9uXCIgJiYgdXJsLnRlc3QocmVxVXJsKSkgfHxcbiAgICAgICAgKHR5cGVvZiB1cmwgPT09IFwiZnVuY3Rpb25cIiAmJiB1cmwocmVxVXJsKSA9PT0gdHJ1ZSk7XG5cbiAgICByZXR1cm4gbWF0Y2hNZXRob2QgJiYgbWF0Y2hVcmw7XG59XG5cbmZ1bmN0aW9uIG1hdGNoKHJlc3BvbnNlLCByZXF1ZXN0KSB7XG4gICAgdmFyIHdsb2MgPSBnZXRXaW5kb3dMb2NhdGlvbigpO1xuXG4gICAgdmFyIHJDdXJyTG9jID0gbmV3IFJlZ0V4cChgXiR7d2xvYy5wcm90b2NvbH0vLyR7d2xvYy5ob3N0fS9gKTtcblxuICAgIHZhciByZXF1ZXN0VXJsID0gcmVxdWVzdC51cmw7XG5cbiAgICBpZiAoIS9eaHR0cHM/OlxcL1xcLy8udGVzdChyZXF1ZXN0VXJsKSB8fCByQ3VyckxvYy50ZXN0KHJlcXVlc3RVcmwpKSB7XG4gICAgICAgIHJlcXVlc3RVcmwgPSByZXF1ZXN0VXJsLnJlcGxhY2UockN1cnJMb2MsIFwiL1wiKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hPbmUocmVzcG9uc2UsIHRoaXMuZ2V0SFRUUE1ldGhvZChyZXF1ZXN0KSwgcmVxdWVzdFVybCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5yZXNwb25zZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB2YXIgcnUgPSByZXNwb25zZS51cmw7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtyZXF1ZXN0XS5jb25jYXQoXG4gICAgICAgICAgICAgICAgcnUgJiYgdHlwZW9mIHJ1LmV4ZWMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHJ1LmV4ZWMocmVxdWVzdFVybCkuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuYXBwbHkocmVzcG9uc2UsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSB7XG4gICAgdmFyIGNvdW50ID0gKyt0aGlzLnJlcXVlc3RDb3VudDtcblxuICAgIHRoaXMucmVxdWVzdGVkID0gdHJ1ZTtcblxuICAgIHRoaXMucmVxdWVzdGVkT25jZSA9IGNvdW50ID09PSAxO1xuICAgIHRoaXMucmVxdWVzdGVkVHdpY2UgPSBjb3VudCA9PT0gMjtcbiAgICB0aGlzLnJlcXVlc3RlZFRocmljZSA9IGNvdW50ID09PSAzO1xuXG4gICAgdGhpcy5maXJzdFJlcXVlc3QgPSB0aGlzLmdldFJlcXVlc3QoMCk7XG4gICAgdGhpcy5zZWNvbmRSZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KDEpO1xuICAgIHRoaXMudGhpcmRSZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KDIpO1xuXG4gICAgdGhpcy5sYXN0UmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdChjb3VudCAtIDEpO1xufVxuXG52YXIgZmFrZVNlcnZlciA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgdmFyIHNlcnZlciA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgIHNlcnZlci5jb25maWd1cmUoY29uZmlnKTtcbiAgICAgICAgdGhpcy54aHIgPSBmYWtlWGhyLnVzZUZha2VYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBzZXJ2ZXIucmVxdWVzdHMgPSBbXTtcbiAgICAgICAgc2VydmVyLnJlcXVlc3RDb3VudCA9IDA7XG4gICAgICAgIHNlcnZlci5xdWV1ZSA9IFtdO1xuICAgICAgICBzZXJ2ZXIucmVzcG9uc2VzID0gW107XG5cbiAgICAgICAgdGhpcy54aHIub25DcmVhdGUgPSBmdW5jdGlvbiAoeGhyT2JqKSB7XG4gICAgICAgICAgICB4aHJPYmoudW5zYWZlSGVhZGVyc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoc2VydmVyLnVuc2FmZUhlYWRlcnNFbmFibGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VydmVyLmFkZFJlcXVlc3QoeGhyT2JqKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VydmVyO1xuICAgIH0sXG5cbiAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgYWxsb3dsaXN0ID0ge1xuICAgICAgICAgICAgYXV0b1Jlc3BvbmQ6IHRydWUsXG4gICAgICAgICAgICBhdXRvUmVzcG9uZEFmdGVyOiB0cnVlLFxuICAgICAgICAgICAgcmVzcG9uZEltbWVkaWF0ZWx5OiB0cnVlLFxuICAgICAgICAgICAgZmFrZUhUVFBNZXRob2RzOiB0cnVlLFxuICAgICAgICAgICAgbG9nZ2VyOiB0cnVlLFxuICAgICAgICAgICAgdW5zYWZlSGVhZGVyc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nIGluIGFsbG93bGlzdCkge1xuICAgICAgICAgICAgICAgIHNlbGZbc2V0dGluZ10gPSBjb25maWdbc2V0dGluZ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlbGYubG9nRXJyb3IgPSBjb25maWd1cmVMb2dFcnJvcihjb25maWcpO1xuICAgIH0sXG5cbiAgICBhZGRSZXF1ZXN0OiBmdW5jdGlvbiBhZGRSZXF1ZXN0KHhock9iaikge1xuICAgICAgICB2YXIgc2VydmVyID0gdGhpcztcbiAgICAgICAgcHVzaC5jYWxsKHRoaXMucmVxdWVzdHMsIHhock9iaik7XG5cbiAgICAgICAgaW5jcmVtZW50UmVxdWVzdENvdW50LmNhbGwodGhpcyk7XG5cbiAgICAgICAgeGhyT2JqLm9uU2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlcnZlci5oYW5kbGVSZXF1ZXN0KHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAoc2VydmVyLnJlc3BvbmRJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgICAgIHNlcnZlci5yZXNwb25kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZlci5hdXRvUmVzcG9uZCAmJiAhc2VydmVyLnJlc3BvbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbmQoKTtcbiAgICAgICAgICAgICAgICB9LCBzZXJ2ZXIuYXV0b1Jlc3BvbmRBZnRlciB8fCAxMCk7XG5cbiAgICAgICAgICAgICAgICBzZXJ2ZXIucmVzcG9uZGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGdldEhUVFBNZXRob2Q6IGZ1bmN0aW9uIGdldEhUVFBNZXRob2QocmVxdWVzdCkge1xuICAgICAgICBpZiAodGhpcy5mYWtlSFRUUE1ldGhvZHMgJiYgL3Bvc3QvaS50ZXN0KHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSAocmVxdWVzdC5yZXF1ZXN0Qm9keSB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgICAgICAvX21ldGhvZD0oW15cXGI7XSspLyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiByZXF1ZXN0Lm1ldGhvZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lm1ldGhvZDtcbiAgICB9LFxuXG4gICAgaGFuZGxlUmVxdWVzdDogZnVuY3Rpb24gaGFuZGxlUmVxdWVzdCh4aHIpIHtcbiAgICAgICAgaWYgKHhoci5hc3luYykge1xuICAgICAgICAgICAgcHVzaC5jYWxsKHRoaXMucXVldWUsIHhocik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NSZXF1ZXN0KHhocik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9nZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIG5vLW9wOyBvdmVycmlkZSB2aWEgY29uZmlndXJlKClcbiAgICB9LFxuXG4gICAgbG9nRXJyb3I6IGNvbmZpZ3VyZUxvZ0Vycm9yKHt9KSxcblxuICAgIGxvZzogbG9nLFxuXG4gICAgcmVzcG9uZFdpdGg6IGZ1bmN0aW9uIHJlc3BvbmRXaXRoKG1ldGhvZCwgdXJsLCBib2R5KSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlQXJyYXkobWV0aG9kKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGJvZHkgPSBtZXRob2Q7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHVybCA9IG1ldGhvZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBib2R5ID0gdXJsO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB1cmwgPSBtZXRob2Q7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIG1ldGhvZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFc2NhcGUgcG9ydCBudW1iZXIgdG8gcHJldmVudCBcIm5hbWVkXCIgcGFyYW1ldGVycyBpbiAncGF0aC10by1yZWdleHAnIG1vZHVsZVxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIiAmJiB1cmwgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmICgvOlswLTldK1xcLy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSB1cmwubWF0Y2goL14oaHR0cHM/OlxcL1xcLy4qPyk6KFswLTldK1xcLy4qKSQvKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICB1cmwgPSBgJHttWzFdfVxcXFw6JHttWzJdfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoLzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFwiOi8vXCIsIFwiXFxcXDovL1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvXFwqLy50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2VzIHRoZSBuZXcgc3ludGF4IGZvciByZXBlYXRpbmcgcGFyYW1ldGVycyBpbiBwYXRoLXRvLXJlZ2V4cCxcbiAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BpbGxhcmpzL3BhdGgtdG8tcmVnZXhwI3VuZXhwZWN0ZWQtLW9yLVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXC9cXCovZywgXCIvKnBhdGhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHVzaC5jYWxsKHRoaXMucmVzcG9uc2VzLCB7XG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHVybDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiICYmIHVybCAhPT0gXCJcIlxuICAgICAgICAgICAgICAgICAgICA/IHBhdGhUb1JlZ2V4cCh1cmwpLnJlZ2V4cFxuICAgICAgICAgICAgICAgICAgICA6IHVybCxcbiAgICAgICAgICAgIHJlc3BvbnNlOiB0eXBlb2YgYm9keSA9PT0gXCJmdW5jdGlvblwiID8gYm9keSA6IHJlc3BvbnNlQXJyYXkoYm9keSksXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNwb25kOiBmdW5jdGlvbiByZXNwb25kKCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uZFdpdGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWUgfHwgW107XG4gICAgICAgIHZhciByZXF1ZXN0cyA9IHF1ZXVlLnNwbGljZSgwLCBxdWV1ZS5sZW5ndGgpO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgICAgICAgICAgc2VsZi5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlc3BvbmRBbGw6IGZ1bmN0aW9uIHJlc3BvbmRBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3BvbmRJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucmVxdWVzdHMuc2xpY2UoMCk7XG5cbiAgICAgICAgdmFyIHJlcXVlc3Q7XG4gICAgICAgIHdoaWxlICgocmVxdWVzdCA9IHRoaXMucXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JlcXVlc3Q6IGZ1bmN0aW9uIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHRoaXMucmVzcG9uc2UgfHwgWzQwNCwge30sIFwiXCJdO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gdGhpcy5yZXNwb25zZXMubGVuZ3RoLCBpID0gbCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5jYWxsKHRoaXMsIHRoaXMucmVzcG9uc2VzW2ldLCByZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlc3BvbnNlc1tpXS5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2cocmVzcG9uc2UsIHJlcXVlc3QpO1xuXG4gICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25kKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSwgcmVzcG9uc2VbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ0Vycm9yKFwiRmFrZSBzZXJ2ZXIgcmVxdWVzdCBwcm9jZXNzaW5nXCIsIGUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlc3RvcmU6IGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhoci5yZXN0b3JlICYmIHRoaXMueGhyLnJlc3RvcmUuYXBwbHkodGhpcy54aHIsIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIGdldFJlcXVlc3Q6IGZ1bmN0aW9uIGdldFJlcXVlc3QoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdHNbaW5kZXhdIHx8IG51bGw7XG4gICAgfSxcblxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXNldEJlaGF2aW9yKCk7XG4gICAgICAgIHRoaXMucmVzZXRIaXN0b3J5KCk7XG4gICAgfSxcblxuICAgIHJlc2V0QmVoYXZpb3I6IGZ1bmN0aW9uIHJlc2V0QmVoYXZpb3IoKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2VzLmxlbmd0aCA9IHRoaXMucXVldWUubGVuZ3RoID0gMDtcbiAgICB9LFxuXG4gICAgcmVzZXRIaXN0b3J5OiBmdW5jdGlvbiByZXNldEhpc3RvcnkoKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdHMubGVuZ3RoID0gdGhpcy5yZXF1ZXN0Q291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdGVkT25jZSA9XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RlZFR3aWNlID1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdGVkVGhyaWNlID1cbiAgICAgICAgICAgIHRoaXMucmVxdWVzdGVkID1cbiAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9XG4gICAgICAgICAgICB0aGlzLnNlY29uZFJlcXVlc3QgPVxuICAgICAgICAgICAgdGhpcy50aGlyZFJlcXVlc3QgPVxuICAgICAgICAgICAgdGhpcy5sYXN0UmVxdWVzdCA9XG4gICAgICAgICAgICAgICAgbnVsbDtcbiAgICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWtlU2VydmVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5cbmZ1bmN0aW9uIGxvZyhyZXNwb25zZSwgcmVxdWVzdCkge1xuICAgIHZhciBzdHI7XG5cbiAgICBzdHIgPSBgUmVxdWVzdDpcXG4ke2luc3BlY3QocmVxdWVzdCl9XFxuXFxuYDtcbiAgICBzdHIgKz0gYFJlc3BvbnNlOlxcbiR7aW5zcGVjdChyZXNwb25zZSl9XFxuXFxuYDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiB3aGVuIHRoaXMubG9nZ2VyIGlzIG5vdCBhIGZ1bmN0aW9uLCBpdCBjYW4ndCBiZSBjYWxsZWQgKi9cbiAgICBpZiAodHlwZW9mIHRoaXMubG9nZ2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIoc3RyKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbG9nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaXNTdXBwb3J0ZWQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKG5ldyBCbG9iKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0pKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEdsb2JhbFRleHRFbmNvZGVyID1cbiAgICB0eXBlb2YgVGV4dEVuY29kZXIgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBUZXh0RW5jb2RlclxuICAgICAgICA6IHJlcXVpcmUoXCJAc2lub25qcy90ZXh0LWVuY29kaW5nXCIpLlRleHRFbmNvZGVyO1xudmFyIGdsb2JhbE9iamVjdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmdsb2JhbDtcbnZhciBjb25maWd1cmVMb2dFcnJvciA9IHJlcXVpcmUoXCIuLi9jb25maWd1cmUtbG9nZ2VyXCIpO1xudmFyIHNpbm9uRXZlbnQgPSByZXF1aXJlKFwiLi4vZXZlbnRcIik7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcImp1c3QtZXh0ZW5kXCIpO1xuXG52YXIgc3VwcG9ydHNQcm9ncmVzcyA9IHR5cGVvZiBQcm9ncmVzc0V2ZW50ICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIHN1cHBvcnRzQ3VzdG9tRXZlbnQgPSB0eXBlb2YgQ3VzdG9tRXZlbnQgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgc3VwcG9ydHNGb3JtRGF0YSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIHN1cHBvcnRzQmxvYiA9IHJlcXVpcmUoXCIuL2Jsb2JcIikuaXNTdXBwb3J0ZWQ7XG5cbmZ1bmN0aW9uIGdldFdvcmtpbmdYSFIoZ2xvYmFsU2NvcGUpIHtcbiAgICB2YXIgc3VwcG9ydHNYSFIgPSB0eXBlb2YgZ2xvYmFsU2NvcGUuWE1MSHR0cFJlcXVlc3QgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgaWYgKHN1cHBvcnRzWEhSKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdDtcbiAgICB9XG5cbiAgICB2YXIgc3VwcG9ydHNBY3RpdmVYID0gdHlwZW9mIGdsb2JhbFNjb3BlLkFjdGl2ZVhPYmplY3QgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgaWYgKHN1cHBvcnRzQWN0aXZlWCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZS5BY3RpdmVYT2JqZWN0KFwiTVNYTUwyLlhNTEhUVFAuMy4wXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUmVmOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZm9yYmlkZGVuLWhlYWRlci1uYW1lXG52YXIgdW5zYWZlSGVhZGVycyA9IHtcbiAgICBcIkFjY2VwdC1DaGFyc2V0XCI6IHRydWUsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIjogdHJ1ZSxcbiAgICBcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kXCI6IHRydWUsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIjogdHJ1ZSxcbiAgICBDb25uZWN0aW9uOiB0cnVlLFxuICAgIFwiQ29udGVudC1MZW5ndGhcIjogdHJ1ZSxcbiAgICBDb29raWU6IHRydWUsXG4gICAgQ29va2llMjogdHJ1ZSxcbiAgICBcIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdcIjogdHJ1ZSxcbiAgICBEYXRlOiB0cnVlLFxuICAgIEROVDogdHJ1ZSxcbiAgICBFeHBlY3Q6IHRydWUsXG4gICAgSG9zdDogdHJ1ZSxcbiAgICBcIktlZXAtQWxpdmVcIjogdHJ1ZSxcbiAgICBPcmlnaW46IHRydWUsXG4gICAgUmVmZXJlcjogdHJ1ZSxcbiAgICBURTogdHJ1ZSxcbiAgICBUcmFpbGVyOiB0cnVlLFxuICAgIFwiVHJhbnNmZXItRW5jb2RpbmdcIjogdHJ1ZSxcbiAgICBVcGdyYWRlOiB0cnVlLFxuICAgIFwiVXNlci1BZ2VudFwiOiB0cnVlLFxuICAgIFZpYTogdHJ1ZSxcbn07XG5cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0SGFuZGxlcigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGV2ZW50cyA9IFtcbiAgICAgICAgXCJsb2Fkc3RhcnRcIixcbiAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICBcImFib3J0XCIsXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXCJsb2FkXCIsXG4gICAgICAgIFwidGltZW91dFwiLFxuICAgICAgICBcImxvYWRlbmRcIixcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUpIHtcbiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBzZWxmW2BvbiR7ZXZlbnROYW1lfWBdO1xuXG4gICAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgdHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXZlbnRzLmZvckVhY2goYWRkRXZlbnRMaXN0ZW5lcik7XG59XG5cbkV2ZW50VGFyZ2V0SGFuZGxlci5wcm90b3R5cGUgPSBzaW5vbkV2ZW50LkV2ZW50VGFyZ2V0O1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXJWYWx1ZSh2YWx1ZSkge1xuICAgIC8vIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZS1ieXRlc1xuICAgIC8qZXNsaW50IG5vLWNvbnRyb2wtcmVnZXg6IFwib2ZmXCIqL1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9eW1xceDA5XFx4MEFcXHgwRFxceDIwXSt8W1xceDA5XFx4MEFcXHgwRFxceDIwXSskL2csIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXIoaGVhZGVycywgaGVhZGVyKSB7XG4gICAgdmFyIGZvdW5kSGVhZGVyID0gT2JqZWN0LmtleXMoaGVhZGVycykuZmlsdGVyKGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHJldHVybiBoLnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvdW5kSGVhZGVyWzBdIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGV4Y2x1ZGVTZXRDb29raWUySGVhZGVyKGhlYWRlcikge1xuICAgIHJldHVybiAhL15TZXQtQ29va2llMj8kL2kudGVzdChoZWFkZXIpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlSZXNwb25zZUJvZHlUeXBlKGJvZHksIHJlc3BvbnNlVHlwZSkge1xuICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgdmFyIGlzU3RyaW5nID0gdHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCI7XG5cbiAgICBpZiAocmVzcG9uc2VUeXBlID09PSBcImFycmF5YnVmZmVyXCIpIHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyAmJiAhKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzcG9uZCB0byBmYWtlIFhNTEh0dHBSZXF1ZXN0IHdpdGggJHtib2R5fSwgd2hpY2ggaXMgbm90IGEgc3RyaW5nIG9yIEFycmF5QnVmZmVyLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyb3IubmFtZSA9IFwiSW52YWxpZEJvZHlFeGNlcHRpb25cIjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSBcImJsb2JcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTdHJpbmcgJiZcbiAgICAgICAgICAgICEoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSAmJlxuICAgICAgICAgICAgc3VwcG9ydHNCbG9iICYmXG4gICAgICAgICAgICAhKGJvZHkgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzcG9uZCB0byBmYWtlIFhNTEh0dHBSZXF1ZXN0IHdpdGggJHtib2R5fSwgd2hpY2ggaXMgbm90IGEgc3RyaW5nLCBBcnJheUJ1ZmZlciwgb3IgQmxvYi5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVycm9yLm5hbWUgPSBcIkludmFsaWRCb2R5RXhjZXB0aW9uXCI7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzcG9uZCB0byBmYWtlIFhNTEh0dHBSZXF1ZXN0IHdpdGggJHtib2R5fSwgd2hpY2ggaXMgbm90IGEgc3RyaW5nLmAsXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yLm5hbWUgPSBcIkludmFsaWRCb2R5RXhjZXB0aW9uXCI7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydFRvQXJyYXlCdWZmZXIoYm9keSwgZW5jb2RpbmcpIHtcbiAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgR2xvYmFsVGV4dEVuY29kZXIoZW5jb2RpbmcgfHwgXCJ1dGYtOFwiKS5lbmNvZGUoYm9keSkuYnVmZmVyO1xufVxuXG5mdW5jdGlvbiBpc1htbENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgIWNvbnRlbnRUeXBlIHx8XG4gICAgICAgIC8odGV4dFxcL3htbCl8KGFwcGxpY2F0aW9uXFwveG1sKXwoXFwreG1sKS8udGVzdChjb250ZW50VHlwZSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBjbGVhclJlc3BvbnNlKHhocikge1xuICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHhoci5yZXNwb25zZVR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHhoci5yZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHhoci5yZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQgPSBudWxsO1xuICAgIH1cbiAgICB4aHIucmVzcG9uc2VYTUwgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBmYWtlWE1MSHR0cFJlcXVlc3RGb3IoZ2xvYmFsU2NvcGUpIHtcbiAgICB2YXIgaXNSZWFjdE5hdGl2ZSA9XG4gICAgICAgIGdsb2JhbFNjb3BlLm5hdmlnYXRvciAmJlxuICAgICAgICBnbG9iYWxTY29wZS5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gXCJSZWFjdE5hdGl2ZVwiO1xuICAgIHZhciBzaW5vblhociA9IHsgWE1MSHR0cFJlcXVlc3Q6IGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0IH07XG4gICAgc2lub25YaHIuR2xvYmFsWE1MSHR0cFJlcXVlc3QgPSBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdDtcbiAgICBzaW5vblhoci5HbG9iYWxBY3RpdmVYT2JqZWN0ID0gZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdDtcbiAgICBzaW5vblhoci5zdXBwb3J0c0FjdGl2ZVggPVxuICAgICAgICB0eXBlb2Ygc2lub25YaHIuR2xvYmFsQWN0aXZlWE9iamVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBzaW5vblhoci5zdXBwb3J0c1hIUiA9IHR5cGVvZiBzaW5vblhoci5HbG9iYWxYTUxIdHRwUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBzaW5vblhoci53b3JraW5nWEhSID0gZ2V0V29ya2luZ1hIUihnbG9iYWxTY29wZSk7XG4gICAgc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0ID1cbiAgICAgICAgc2lub25YaHIuc3VwcG9ydHNYSFIgJiZcbiAgICAgICAgXCJ0aW1lb3V0XCIgaW4gbmV3IHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgc2lub25YaHIuc3VwcG9ydHNDT1JTID1cbiAgICAgICAgaXNSZWFjdE5hdGl2ZSB8fFxuICAgICAgICAoc2lub25YaHIuc3VwcG9ydHNYSFIgJiZcbiAgICAgICAgICAgIFwid2l0aENyZWRlbnRpYWxzXCIgaW4gbmV3IHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0KCkpO1xuXG4gICAgLy8gTm90ZSB0aGF0IGZvciBGYWtlWE1MSHR0cFJlcXVlc3QgdG8gd29yayBwcmUgRVM1XG4gICAgLy8gd2UgbG9zZSBzb21lIG9mIHRoZSBhbGlnbm1lbnQgd2l0aCB0aGUgc3BlYy5cbiAgICAvLyBUbyBlbnN1cmUgYXMgY2xvc2UgYSBtYXRjaCBhcyBwb3NzaWJsZSxcbiAgICAvLyBzZXQgcmVzcG9uc2VUeXBlIGJlZm9yZSBjYWxsaW5nIG9wZW4sIHNlbmQgb3IgcmVzcG9uZDtcbiAgICBmdW5jdGlvbiBGYWtlWE1MSHR0cFJlcXVlc3QoY29uZmlnKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0SGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICAgIHRoaXMucmVxdWVzdEJvZHkgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IDA7XG4gICAgICAgIHRoaXMuc3RhdHVzVGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMudXBsb2FkID0gbmV3IEV2ZW50VGFyZ2V0SGFuZGxlcigpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IFwiXCI7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICB0aGlzLmxvZ0Vycm9yID0gY29uZmlndXJlTG9nRXJyb3IoY29uZmlnKTtcblxuICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzQ09SUykge1xuICAgICAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgRmFrZVhNTEh0dHBSZXF1ZXN0Lm9uQ3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIEZha2VYTUxIdHRwUmVxdWVzdC5vbkNyZWF0ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeVN0YXRlKHhocikge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5PUEVORUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURfU1RBVEVfRVJSXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHhoci5zZW5kRmxhZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsYXJnZXN0IGFyaXR5IGluIFhIUiBpcyA1IC0gWEhSI29wZW5cbiAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbiAob2JqLCBtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXSgpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZF0oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZF0oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBjYXNlXCIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIEZha2VYTUxIdHRwUmVxdWVzdC5maWx0ZXJzID0gW107XG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LmFkZEZpbHRlciA9IGZ1bmN0aW9uIGFkZEZpbHRlcihmbikge1xuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChmbik7XG4gICAgfTtcbiAgICBGYWtlWE1MSHR0cFJlcXVlc3QuZGVmYWtlID0gZnVuY3Rpb24gZGVmYWtlKGZha2VYaHIsIHhockFyZ3MpIHtcbiAgICAgICAgdmFyIHhociA9IG5ldyBzaW5vblhoci53b3JraW5nWEhSKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgICAgXCJzZXRSZXF1ZXN0SGVhZGVyXCIsXG4gICAgICAgICAgICBcImFib3J0XCIsXG4gICAgICAgICAgICBcImdldFJlc3BvbnNlSGVhZGVyXCIsXG4gICAgICAgICAgICBcImdldEFsbFJlc3BvbnNlSGVhZGVyc1wiLFxuICAgICAgICAgICAgXCJhZGRFdmVudExpc3RlbmVyXCIsXG4gICAgICAgICAgICBcIm92ZXJyaWRlTWltZVR5cGVcIixcbiAgICAgICAgICAgIFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgICAgZmFrZVhoclttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseSh4aHIsIG1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZha2VYaHIuc2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZjogaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyN0aGUtcmVzcG9uc2V0eXBlLWF0dHJpYnV0ZVxuICAgICAgICAgICAgaWYgKHhoci5yZXNwb25zZVR5cGUgIT09IGZha2VYaHIucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IGZha2VYaHIucmVzcG9uc2VUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHhociwgXCJzZW5kXCIsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGNvcHlBdHRycyA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBmYWtlWGhyW2F0dHJdID0geGhyW2F0dHJdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0YXRlQ2hhbmdlU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmYWtlWGhyLnJlYWR5U3RhdGUgPSB4aHIucmVhZHlTdGF0ZTtcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCkge1xuICAgICAgICAgICAgICAgIGNvcHlBdHRycyhbXCJzdGF0dXNcIiwgXCJzdGF0dXNUZXh0XCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSBGYWtlWE1MSHR0cFJlcXVlc3QuTE9BRElORykge1xuICAgICAgICAgICAgICAgIGNvcHlBdHRycyhbXCJyZXNwb25zZVwiXSk7XG4gICAgICAgICAgICAgICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiXCIgfHwgeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29weUF0dHJzKFtcInJlc3BvbnNlVGV4dFwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSAmJlxuICAgICAgICAgICAgICAgICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHhoci5yZXNwb25zZVR5cGUgPT09IFwiZG9jdW1lbnRcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvcHlBdHRycyhbXCJyZXNwb25zZVhNTFwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0YXRlQ2hhbmdlRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGZha2VYaHIub25yZWFkeXN0YXRlY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgICAgICAgICAgICAgIGZha2VYaHIub25yZWFkeXN0YXRlY2hhbmdlLmNhbGwoZmFrZVhociwge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGZha2VYaHIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGZha2VYaHIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0YXRlQ2hhbmdlID0gZnVuY3Rpb24gc3RhdGVDaGFuZ2UoKSB7XG4gICAgICAgICAgICBzdGF0ZUNoYW5nZVN0YXJ0KCk7XG4gICAgICAgICAgICBzdGF0ZUNoYW5nZUVuZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh4aHIuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHN0YXRlQ2hhbmdlU3RhcnQpO1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmYWtlWGhyLmV2ZW50TGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIC8qZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jKi9cbiAgICAgICAgICAgICAgICBmYWtlWGhyLmV2ZW50TGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLmxpc3RlbmVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlOiBoYW5kbGVyLmNhcHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNlOiBoYW5kbGVyLm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8qZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMqL1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLCBzdGF0ZUNoYW5nZUVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gc3RhdGVDaGFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHkoeGhyLCBcIm9wZW5cIiwgeGhyQXJncyk7XG4gICAgfTtcbiAgICBGYWtlWE1MSHR0cFJlcXVlc3QudXNlRmlsdGVycyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gdmVyaWZ5UmVxdWVzdE9wZW5lZCh4aHIpIHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSBGYWtlWE1MSHR0cFJlcXVlc3QuT1BFTkVEKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UXG4gICAgICAgICAgICAgICAgICAgID8gXCJJTlZBTElEX1NUQVRFX0VSUiAtIHlvdSBtaWdodCBiZSB0cnlpbmcgdG8gc2V0IHRoZSByZXF1ZXN0IHN0YXRlIGZvciBhIHJlcXVlc3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNoZWNrICdyZWFkeVN0YXRlJyBmaXJzdC4uLlwiXG4gICAgICAgICAgICAgICAgICAgIDogYElOVkFMSURfU1RBVEVfRVJSIC0gJHt4aHIucmVhZHlTdGF0ZX1gO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlSZXF1ZXN0U2VudCh4aHIpIHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWVzdCBkb25lXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5SGVhZGVyc1JlY2VpdmVkKHhocikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB4aHIuYXN5bmMgJiZcbiAgICAgICAgICAgIHhoci5yZWFkeVN0YXRlICE9PSBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGhlYWRlcnMgcmVjZWl2ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0UmVzcG9uc2VCb2R5KHJlc3BvbnNlVHlwZSwgY29udGVudFR5cGUsIGJvZHkpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gXCJcIiB8fCByZXNwb25zZVR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0c0FycmF5QnVmZmVyICYmIHJlc3BvbnNlVHlwZSA9PT0gXCJhcnJheWJ1ZmZlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFRvQXJyYXlCdWZmZXIoYm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSBcImpzb25cIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gcGFyc2luZyBmYWlsdXJlIGFzIG51bGxcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0c0Jsb2IgJiYgcmVzcG9uc2VUeXBlID09PSBcImJsb2JcIikge1xuICAgICAgICAgICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBibG9iT3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgYmxvYk9wdGlvbnMudHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtjb252ZXJ0VG9BcnJheUJ1ZmZlcihib2R5KV0sIGJsb2JPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09IFwiZG9jdW1lbnRcIikge1xuICAgICAgICAgICAgaWYgKGlzWG1sQ29udGVudFR5cGUoY29udGVudFR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZha2VYTUxIdHRwUmVxdWVzdC5wYXJzZVhNTChib2R5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZXNwb25zZVR5cGUgJHtyZXNwb25zZVR5cGV9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RlcHMgdG8gZm9sbG93IHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IsIGFjY29yZGluZyB0bzpcbiAgICAgKiBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtZXJyb3Itc3RlcHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXF1ZXN0RXJyb3JTdGVwcyh4aHIpIHtcbiAgICAgICAgY2xlYXJSZXNwb25zZSh4aHIpO1xuICAgICAgICB4aHIuZXJyb3JGbGFnID0gdHJ1ZTtcbiAgICAgICAgeGhyLnJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICAgIHhoci5yZXNwb25zZUhlYWRlcnMgPSB7fTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB4aHIucmVhZHlTdGF0ZSAhPT0gRmFrZVhNTEh0dHBSZXF1ZXN0LlVOU0VOVCAmJlxuICAgICAgICAgICAgeGhyLnNlbmRGbGFnICYmXG4gICAgICAgICAgICB4aHIucmVhZHlTdGF0ZSAhPT0gRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB4aHIucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgICAgICB4aHIuc2VuZEZsYWcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEZha2VYTUxIdHRwUmVxdWVzdC5wYXJzZVhNTCA9IGZ1bmN0aW9uIHBhcnNlWE1MKHRleHQpIHtcbiAgICAgICAgLy8gVHJlYXQgZW1wdHkgc3RyaW5nIGFzIHBhcnNpbmcgZmFpbHVyZVxuICAgICAgICBpZiAodGV4dCAhPT0gXCJcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIERPTVBhcnNlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VyZXJyb3JOUyA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXJlcnJvcnMgPSBwYXJzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGFyc2VGcm9tU3RyaW5nKFwiSU5WQUxJRFwiLCBcInRleHQveG1sXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicGFyc2VyZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VyZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcmVycm9yTlMgPSBwYXJzZXJlcnJvcnNbMF0ubmFtZXNwYWNlVVJJO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIGludmFsaWQgWE1MIG1ha2VzIElFMTEgdGhyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIG5vIG5hbWVzcGFjZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZXh0LCBcInRleHQveG1sXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyZXJyb3JOUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyc2VyZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB4bWxEb2MgPSBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MRE9NXCIpO1xuICAgICAgICAgICAgICAgIHhtbERvYy5hc3luYyA9IFwiZmFsc2VcIjtcbiAgICAgICAgICAgICAgICB4bWxEb2MubG9hZFhNTCh0ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geG1sRG9jLnBhcnNlRXJyb3IuZXJyb3JDb2RlICE9PSAwID8gbnVsbCA6IHhtbERvYztcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBVbmFibGUgdG8gcGFyc2UgWE1MIC0gbm8gYmlnZ2llXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LnN0YXR1c0NvZGVzID0ge1xuICAgICAgICAxMDA6IFwiQ29udGludWVcIixcbiAgICAgICAgMTAxOiBcIlN3aXRjaGluZyBQcm90b2NvbHNcIixcbiAgICAgICAgMjAwOiBcIk9LXCIsXG4gICAgICAgIDIwMTogXCJDcmVhdGVkXCIsXG4gICAgICAgIDIwMjogXCJBY2NlcHRlZFwiLFxuICAgICAgICAyMDM6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcbiAgICAgICAgMjA0OiBcIk5vIENvbnRlbnRcIixcbiAgICAgICAgMjA1OiBcIlJlc2V0IENvbnRlbnRcIixcbiAgICAgICAgMjA2OiBcIlBhcnRpYWwgQ29udGVudFwiLFxuICAgICAgICAyMDc6IFwiTXVsdGktU3RhdHVzXCIsXG4gICAgICAgIDMwMDogXCJNdWx0aXBsZSBDaG9pY2VcIixcbiAgICAgICAgMzAxOiBcIk1vdmVkIFBlcm1hbmVudGx5XCIsXG4gICAgICAgIDMwMjogXCJGb3VuZFwiLFxuICAgICAgICAzMDM6IFwiU2VlIE90aGVyXCIsXG4gICAgICAgIDMwNDogXCJOb3QgTW9kaWZpZWRcIixcbiAgICAgICAgMzA1OiBcIlVzZSBQcm94eVwiLFxuICAgICAgICAzMDc6IFwiVGVtcG9yYXJ5IFJlZGlyZWN0XCIsXG4gICAgICAgIDQwMDogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgICA0MDE6IFwiVW5hdXRob3JpemVkXCIsXG4gICAgICAgIDQwMjogXCJQYXltZW50IFJlcXVpcmVkXCIsXG4gICAgICAgIDQwMzogXCJGb3JiaWRkZW5cIixcbiAgICAgICAgNDA0OiBcIk5vdCBGb3VuZFwiLFxuICAgICAgICA0MDU6IFwiTWV0aG9kIE5vdCBBbGxvd2VkXCIsXG4gICAgICAgIDQwNjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuICAgICAgICA0MDc6IFwiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIixcbiAgICAgICAgNDA4OiBcIlJlcXVlc3QgVGltZW91dFwiLFxuICAgICAgICA0MDk6IFwiQ29uZmxpY3RcIixcbiAgICAgICAgNDEwOiBcIkdvbmVcIixcbiAgICAgICAgNDExOiBcIkxlbmd0aCBSZXF1aXJlZFwiLFxuICAgICAgICA0MTI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuICAgICAgICA0MTM6IFwiUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlXCIsXG4gICAgICAgIDQxNDogXCJSZXF1ZXN0LVVSSSBUb28gTG9uZ1wiLFxuICAgICAgICA0MTU6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICAgICAgICA0MTY6IFwiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZVwiLFxuICAgICAgICA0MTc6IFwiRXhwZWN0YXRpb24gRmFpbGVkXCIsXG4gICAgICAgIDQyMjogXCJVbnByb2Nlc3NhYmxlIEVudGl0eVwiLFxuICAgICAgICA1MDA6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gICAgICAgIDUwMTogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgICAgICAgNTAyOiBcIkJhZCBHYXRld2F5XCIsXG4gICAgICAgIDUwMzogXCJTZXJ2aWNlIFVuYXZhaWxhYmxlXCIsXG4gICAgICAgIDUwNDogXCJHYXRld2F5IFRpbWVvdXRcIixcbiAgICAgICAgNTA1OiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCIsXG4gICAgfTtcblxuICAgIGV4dGVuZChGYWtlWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCBzaW5vbkV2ZW50LkV2ZW50VGFyZ2V0LCB7XG4gICAgICAgIGFzeW5jOiB0cnVlLFxuXG4gICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VybmFtZSwgcGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgICAgICB0aGlzLmFzeW5jID0gdHlwZW9mIGFzeW5jID09PSBcImJvb2xlYW5cIiA/IGFzeW5jIDogdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICAgICAgICAgIGNsZWFyUmVzcG9uc2UodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICAgICAgICB0aGlzLnNlbmRGbGFnID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChGYWtlWE1MSHR0cFJlcXVlc3QudXNlRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB4aHJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIHZhciBkZWZha2UgPSBGYWtlWE1MSHR0cFJlcXVlc3QuZmlsdGVycy5zb21lKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5hcHBseSh0aGlzLCB4aHJBcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYWtlKSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2VYTUxIdHRwUmVxdWVzdC5kZWZha2UodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuT1BFTkVEKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkeVN0YXRlQ2hhbmdlOiBmdW5jdGlvbiByZWFkeVN0YXRlQ2hhbmdlKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBzdGF0ZTtcblxuICAgICAgICAgICAgdmFyIHJlYWR5U3RhdGVDaGFuZ2VFdmVudCA9IG5ldyBzaW5vbkV2ZW50LkV2ZW50KFxuICAgICAgICAgICAgICAgIFwicmVhZHlzdGF0ZWNoYW5nZVwiLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UocmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nRXJyb3IoXCJGYWtlIFhIUiBvbnJlYWR5c3RhdGVjaGFuZ2UgaGFuZGxlclwiLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHJlYWR5U3RhdGVDaGFuZ2VFdmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCwgcHJvZ3Jlc3M7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lZE91dCB8fCB0aGlzLmFib3J0ZWQgfHwgdGhpcy5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSB7IGxvYWRlZDogMCwgdG90YWw6IDAgfTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudGltZWRPdXQgJiYgXCJ0aW1lb3V0XCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hYm9ydGVkICYmIFwiYWJvcnRcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHsgbG9hZGVkOiAxMDAsIHRvdGFsOiAxMDAgfTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBcImxvYWRcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KGV2ZW50LCBwcm9ncmVzcywgdGhpcyksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiLCBwcm9ncmVzcywgdGhpcyksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwgcHJvZ3Jlc3MsIHRoaXMpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KGV2ZW50LCBwcm9ncmVzcywgdGhpcyksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQocmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzLCB0aGlzKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFJlZiBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1zZXRyZXF1ZXN0aGVhZGVyKCktbWV0aG9kXG4gICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBCeSBSRkM3MjMwLCBzZWN0aW9uIDMuMi40LCBoZWFkZXIgdmFsdWVzIHNob3VsZCBiZSBzdHJpbmdzLiBHb3QgJHt0eXBlb2YgdmFsdWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmVyaWZ5U3RhdGUodGhpcyk7XG5cbiAgICAgICAgICAgIHZhciBjaGVja1Vuc2FmZUhlYWRlcnMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVuc2FmZUhlYWRlcnNFbmFibGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjaGVja1Vuc2FmZUhlYWRlcnMgPSB0aGlzLnVuc2FmZUhlYWRlcnNFbmFibGVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjaGVja1Vuc2FmZUhlYWRlcnMgJiZcbiAgICAgICAgICAgICAgICAoZ2V0SGVhZGVyKHVuc2FmZUhlYWRlcnMsIGhlYWRlcikgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgL14oU2VjLXxQcm94eS0pL2kudGVzdChoZWFkZXIpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcXVvdGVzXG4gICAgICAgICAgICAgICAgICAgIGBSZWZ1c2VkIHRvIHNldCB1bnNhZmUgaGVhZGVyIFwiJHtoZWFkZXJ9XCJgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVIZWFkZXJWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IGdldEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXJzLCBoZWFkZXIpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyc1tleGlzdGluZ0hlYWRlcl0gKz0gYCwgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzW2hlYWRlcl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBzZXRTdGF0dXM6IGZ1bmN0aW9uIHNldFN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgICAgIHZhciBzYW5pdGl6ZWRTdGF0dXMgPSB0eXBlb2Ygc3RhdHVzID09PSBcIm51bWJlclwiID8gc3RhdHVzIDogMjAwO1xuXG4gICAgICAgICAgICB2ZXJpZnlSZXF1ZXN0T3BlbmVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzYW5pdGl6ZWRTdGF0dXM7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c1RleHQgPSBGYWtlWE1MSHR0cFJlcXVlc3Quc3RhdHVzQ29kZXNbc2FuaXRpemVkU3RhdHVzXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBIZWxwcyB0ZXN0aW5nXG4gICAgICAgIHNldFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24gc2V0UmVzcG9uc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIHZlcmlmeVJlcXVlc3RPcGVuZWQodGhpcyk7XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAodGhpcy5yZXNwb25zZUhlYWRlcnMgPSB7fSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1toZWFkZXJdID0gaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQ3VycmVudGx5IHRyZWF0cyBBTEwgZGF0YSBhcyBhIERPTVN0cmluZyAoaS5lLiBubyBEb2N1bWVudClcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChkYXRhKSB7XG4gICAgICAgICAgICB2ZXJpZnlTdGF0ZSh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKCEvXihoZWFkKSQvaS50ZXN0KHRoaXMubWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IGdldEhlYWRlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3RIZWFkZXJzW2NvbnRlbnRUeXBlXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnJlcXVlc3RIZWFkZXJzW2NvbnRlbnRUeXBlXS5zcGxpdChcIjtcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnNbY29udGVudFR5cGVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3ZhbHVlWzBdfTtjaGFyc2V0PXV0Zi04YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnRzRm9ybURhdGEgJiYgIShkYXRhIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RCb2R5ID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lcnJvckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZsYWcgPSB0aGlzLmFzeW5jO1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbmQodGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgbGlzdGVuIGlmIHNldEludGVydmFsIGFuZCBEYXRlIGFyZSBhIHN0dWJiZWQuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0ICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNldEludGVydmFsLmNsb2NrID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIERhdGUuY2xvY2sgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBpbml0aWF0ZWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gYW55IHBvc3NpYmxlIHRpY2sgYnkgZmFrZSB0aW1lcnMgYW5kIGNoZWNrIHRvIHNlZSBpZiB0aW1lb3V0IGhhc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gZXhjZWVkZWQuIEl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIHdoaWxlIGEgcmVxdWVzdFxuICAgICAgICAgICAgICAgIC8vIGlzIGluIGZsaWdodCwgc28gd2UgbXVzdCBjaGVjayBhbnl0aW1lIHRoZSBlbmQgdXNlciBmb3JjZXMgYSBjbG9jayB0aWNrIHRvIG1ha2VcbiAgICAgICAgICAgICAgICAvLyBzdXJlIHRpbWVvdXQgaGFzbid0IGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNkZm5SZXR1cm5MaW5rLTJcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVhZHlTdGF0ZSBoYXMgYmVlbiByZXNldCBvciBpcyBkb25lLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVyZVxuICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgbm8gdGltZW91dC4gVGhpcyB3aWxsIGFsc28gcHJldmVudCBhYm9ydGVkIHJlcXVlc3RzIGFuZFxuICAgICAgICAgICAgICAgICAgICAvLyBmYWtlU2VydmVyV2l0aENsb2NrIGZyb20gdHJpZ2dlcmluZyB1bm5lY2Vzc2FyeSByZXNwb25zZXMuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHlTdGF0ZSA9PT0gRmFrZVhNTEh0dHBSZXF1ZXN0LlVOU0VOVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2xlYXJJbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxmLnRpbWVvdXQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCA+IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+PSBpbml0aWF0ZWRUaW1lICsgc2VsZi50aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyVGltZW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2xlYXJJbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuRXZlbnQoXCJsb2Fkc3RhcnRcIiwgZmFsc2UsIGZhbHNlLCB0aGlzKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uIGFib3J0KCkge1xuICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcXVlc3RFcnJvclN0ZXBzKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gRmFrZVhNTEh0dHBSZXF1ZXN0LlVOU0VOVDtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0ge307XG5cbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJpZ2dlclRpbWVvdXQ6IGZ1bmN0aW9uIHRyaWdnZXJUaW1lb3V0KCkge1xuICAgICAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RFcnJvclN0ZXBzKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcihoZWFkZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPCBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoL15TZXQtQ29va2llMj8kL2kudGVzdChoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaGVhZGVyID0gZ2V0SGVhZGVyKHRoaXMucmVzcG9uc2VIZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlcnNbaGVhZGVyXSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24gZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA8IEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycztcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0gT2JqZWN0LmtleXMocmVzcG9uc2VIZWFkZXJzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZXhjbHVkZVNldENvb2tpZTJIZWFkZXIpXG4gICAgICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAocHJldiwgaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3BvbnNlSGVhZGVyc1toZWFkZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtwcmV2fSR7aGVhZGVyfTogJHt2YWx1ZX1cXHJcXG5gO1xuICAgICAgICAgICAgICAgIH0sIFwiXCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRSZXNwb25zZUJvZHk6IGZ1bmN0aW9uIHNldFJlc3BvbnNlQm9keShib2R5KSB7XG4gICAgICAgICAgICB2ZXJpZnlSZXF1ZXN0U2VudCh0aGlzKTtcbiAgICAgICAgICAgIHZlcmlmeUhlYWRlcnNSZWNlaXZlZCh0aGlzKTtcbiAgICAgICAgICAgIHZlcmlmeVJlc3BvbnNlQm9keVR5cGUoYm9keSwgdGhpcy5yZXNwb25zZVR5cGUpO1xuICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID1cbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJyaWRkZW5NaW1lVHlwZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XG5cbiAgICAgICAgICAgIHZhciBpc1RleHRSZXNwb25zZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUgPT09IFwiXCIgfHwgdGhpcy5yZXNwb25zZVR5cGUgPT09IFwidGV4dFwiO1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplIHx8IDEwO1xuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuTE9BRElORyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVGV4dCA9IHRoaXMucmVzcG9uc2UgKz0gYm9keS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKyBjaHVua1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChpbmRleCA8IGJvZHkubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXNwb25zZSA9IGNvbnZlcnRSZXNwb25zZUJvZHkoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNUZXh0UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVGV4dCA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVhNTCA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlID09PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgaXNYbWxDb250ZW50VHlwZShjb250ZW50VHlwZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VYTUwgPSBGYWtlWE1MSHR0cFJlcXVlc3QucGFyc2VYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGVDaGFuZ2UoRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlc3BvbmQ6IGZ1bmN0aW9uIHJlc3BvbmQoc3RhdHVzLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlVVJMID0gdGhpcy51cmw7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKHN0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3BvbnNlSGVhZGVycyhoZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzcG9uc2VCb2R5KGJvZHkgfHwgXCJcIik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBsb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uIHVwbG9hZFByb2dyZXNzKHByb2dyZXNzRXZlbnRSYXcpIHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0c1Byb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZCxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRvd25sb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uIGRvd25sb2FkUHJvZ3Jlc3MocHJvZ3Jlc3NFdmVudFJhdykge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmF3LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVwbG9hZEVycm9yOiBmdW5jdGlvbiB1cGxvYWRFcnJvcihlcnJvcikge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzQ3VzdG9tRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5DdXN0b21FdmVudChcImVycm9yXCIsIHsgZGV0YWlsOiBlcnJvciB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uIG92ZXJyaWRlTWltZVR5cGUodHlwZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA+PSBGYWtlWE1MSHR0cFJlcXVlc3QuTE9BRElORykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURfU1RBVEVfRVJSXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZGVuTWltZVR5cGUgPSB0eXBlO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgdmFyIHN0YXRlcyA9IHtcbiAgICAgICAgVU5TRU5UOiAwLFxuICAgICAgICBPUEVORUQ6IDEsXG4gICAgICAgIEhFQURFUlNfUkVDRUlWRUQ6IDIsXG4gICAgICAgIExPQURJTkc6IDMsXG4gICAgICAgIERPTkU6IDQsXG4gICAgfTtcblxuICAgIGV4dGVuZChGYWtlWE1MSHR0cFJlcXVlc3QsIHN0YXRlcyk7XG4gICAgZXh0ZW5kKEZha2VYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIHN0YXRlcyk7XG5cbiAgICBmdW5jdGlvbiB1c2VGYWtlWE1MSHR0cFJlcXVlc3QoKSB7XG4gICAgICAgIEZha2VYTUxIdHRwUmVxdWVzdC5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZShrZWVwT25DcmVhdGUpIHtcbiAgICAgICAgICAgIGlmIChzaW5vblhoci5zdXBwb3J0c1hIUikge1xuICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0ID0gc2lub25YaHIuR2xvYmFsWE1MSHR0cFJlcXVlc3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaW5vblhoci5zdXBwb3J0c0FjdGl2ZVgpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5BY3RpdmVYT2JqZWN0ID0gc2lub25YaHIuR2xvYmFsQWN0aXZlWE9iamVjdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIEZha2VYTUxIdHRwUmVxdWVzdC5yZXN0b3JlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcE9uQ3JlYXRlICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZha2VYTUxIdHRwUmVxdWVzdC5vbkNyZWF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzWEhSKSB7XG4gICAgICAgICAgICBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdCA9IEZha2VYTUxIdHRwUmVxdWVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW5vblhoci5zdXBwb3J0c0FjdGl2ZVgpIHtcbiAgICAgICAgICAgIGdsb2JhbFNjb3BlLkFjdGl2ZVhPYmplY3QgPSBmdW5jdGlvbiBBY3RpdmVYT2JqZWN0KG9iaklkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBvYmpJZCA9PT0gXCJNaWNyb3NvZnQuWE1MSFRUUFwiIHx8XG4gICAgICAgICAgICAgICAgICAgIC9eTXN4bWwyXFwuWE1MSFRUUC9pLnRlc3Qob2JqSWQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmFrZVhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBzaW5vblhoci5HbG9iYWxBY3RpdmVYT2JqZWN0KG9iaklkKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRmFrZVhNTEh0dHBSZXF1ZXN0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHhocjogc2lub25YaHIsXG4gICAgICAgIEZha2VYTUxIdHRwUmVxdWVzdDogRmFrZVhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICB1c2VGYWtlWE1MSHR0cFJlcXVlc3Q6IHVzZUZha2VYTUxIdHRwUmVxdWVzdCxcbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZChmYWtlWE1MSHR0cFJlcXVlc3RGb3IoZ2xvYmFsT2JqZWN0KSwge1xuICAgIGZha2VYTUxIdHRwUmVxdWVzdEZvcjogZmFrZVhNTEh0dHBSZXF1ZXN0Rm9yLFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZmFrZVNlcnZlcjogcmVxdWlyZShcIi4vZmFrZS1zZXJ2ZXJcIiksXG4gICAgZmFrZVNlcnZlcldpdGhDbG9jazogcmVxdWlyZShcIi4vZmFrZS1zZXJ2ZXIvZmFrZS1zZXJ2ZXItd2l0aC1jbG9ja1wiKSxcbiAgICBmYWtlWGhyOiByZXF1aXJlKFwiLi9mYWtlLXhoclwiKSxcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczYtc2hpbVxudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scy9zaGFtcycpKCk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIHRvT2JqZWN0ID0gT2JqZWN0O1xudmFyICRwdXNoID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUucHVzaCcpO1xudmFyICRwcm9wSXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgb3JpZ2luYWxHZXRTeW1ib2xzID0gaGFzU3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgOiBudWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlMSkge1xuXHRpZiAodGFyZ2V0ID09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7IH1cblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTsgLy8gc3RlcCAxXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIHRvOyAvLyBzdGVwIDJcblx0fVxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7ICsrcykge1xuXHRcdHZhciBmcm9tID0gdG9PYmplY3QoYXJndW1lbnRzW3NdKTsgLy8gc3RlcCAzLmEuaVxuXG5cdFx0Ly8gc3RlcCAzLmEuaWk6XG5cdFx0dmFyIGtleXMgPSBvYmplY3RLZXlzKGZyb20pO1xuXHRcdHZhciBnZXRTeW1ib2xzID0gaGFzU3ltYm9scyAmJiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyB8fCBvcmlnaW5hbEdldFN5bWJvbHMpO1xuXHRcdGlmIChnZXRTeW1ib2xzKSB7XG5cdFx0XHR2YXIgc3ltcyA9IGdldFN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyArK2opIHtcblx0XHRcdFx0dmFyIGtleSA9IHN5bXNbal07XG5cdFx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdFx0JHB1c2goa2V5cywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHN0ZXAgMy5hLmlpaTpcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcblx0XHRcdHZhciBuZXh0S2V5ID0ga2V5c1tpXTtcblx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShmcm9tLCBuZXh0S2V5KSkgeyAvLyBzdGVwIDMuYS5paWkuMlxuXHRcdFx0XHR2YXIgcHJvcFZhbHVlID0gZnJvbVtuZXh0S2V5XTsgLy8gc3RlcCAzLmEuaWlpLjIuYVxuXHRcdFx0XHR0b1tuZXh0S2V5XSA9IHByb3BWYWx1ZTsgLy8gc3RlcCAzLmEuaWlpLjIuYlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bzsgLy8gc3RlcCA0XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBsYWNrc1Byb3BlckVudW1lcmF0aW9uT3JkZXIgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvKlxuXHQgKiB2OCwgc3BlY2lmaWNhbGx5IGluIG5vZGUgNC54LCBoYXMgYSBidWcgd2l0aCBpbmNvcnJlY3QgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXJcblx0ICogbm90ZTogdGhpcyBkb2VzIG5vdCBkZXRlY3QgdGhlIGJ1ZyB1bmxlc3MgdGhlcmUncyAyMCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHR2YXIgc3RyID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0Jztcblx0dmFyIGxldHRlcnMgPSBzdHIuc3BsaXQoJycpO1xuXHR2YXIgbWFwID0ge307XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7ICsraSkge1xuXHRcdG1hcFtsZXR0ZXJzW2ldXSA9IGxldHRlcnNbaV07XG5cdH1cblx0dmFyIG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIG1hcCk7XG5cdHZhciBhY3R1YWwgPSAnJztcblx0Zm9yICh2YXIgayBpbiBvYmopIHtcblx0XHRhY3R1YWwgKz0gaztcblx0fVxuXHRyZXR1cm4gc3RyICE9PSBhY3R1YWw7XG59O1xuXG52YXIgYXNzaWduSGFzUGVuZGluZ0V4Y2VwdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbiB8fCAhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIEZpcmVmb3ggMzcgc3RpbGwgaGFzIFwicGVuZGluZyBleGNlcHRpb25cIiBsb2dpYyBpbiBpdHMgT2JqZWN0LmFzc2lnbiBpbXBsZW1lbnRhdGlvbixcblx0ICogd2hpY2ggaXMgNzIlIHNsb3dlciB0aGFuIG91ciBzaGltLCBhbmQgRmlyZWZveCA0MCdzIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cblx0ICovXG5cdHZhciB0aHJvd2VyID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHsgMTogMiB9KTtcblx0dHJ5IHtcblx0XHRPYmplY3QuYXNzaWduKHRocm93ZXIsICd4eScpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHRocm93ZXJbMV0gPT09ICd5Jztcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlcigpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdGlmIChhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucygpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdHJldHVybiBPYmplY3QuYXNzaWduO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9JdGVyX3BlZWs7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRva2VuRGF0YSA9IHZvaWQgMDtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG5leHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5leHBvcnRzLnBhdGhUb1JlZ2V4cCA9IHBhdGhUb1JlZ2V4cDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuY29uc3QgREVGQVVMVF9ERUxJTUlURVIgPSBcIi9cIjtcbmNvbnN0IE5PT1BfVkFMVUUgPSAodmFsdWUpID0+IHZhbHVlO1xuY29uc3QgSURfU1RBUlQgPSAvXlskX1xccHtJRF9TdGFydH1dJC91O1xuY29uc3QgSURfQ09OVElOVUUgPSAvXlskXFx1MjAwY1xcdTIwMGRcXHB7SURfQ29udGludWV9XSQvdTtcbmNvbnN0IERFQlVHX1VSTCA9IFwiaHR0cHM6Ly9naXQubmV3L3BhdGhUb1JlZ2V4cEVycm9yXCI7XG5jb25zdCBTSU1QTEVfVE9LRU5TID0ge1xuICAgIC8vIEdyb3Vwcy5cbiAgICBcIntcIjogXCJ7XCIsXG4gICAgXCJ9XCI6IFwifVwiLFxuICAgIC8vIFJlc2VydmVkLlxuICAgIFwiKFwiOiBcIihcIixcbiAgICBcIilcIjogXCIpXCIsXG4gICAgXCJbXCI6IFwiW1wiLFxuICAgIFwiXVwiOiBcIl1cIixcbiAgICBcIitcIjogXCIrXCIsXG4gICAgXCI/XCI6IFwiP1wiLFxuICAgIFwiIVwiOiBcIiFcIixcbn07XG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciBzdHJpbmdpZnkgdG8gcGF0aC5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1t7fSgpXFxbXFxdKz8hOipdL2csIFwiXFxcXCQmXCIpO1xufVxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLisqP14ke30oKVtcXF18L1xcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuLyoqXG4gKiBUb2tlbml6ZSBpbnB1dCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uKiBsZXhlcihzdHIpIHtcbiAgICBjb25zdCBjaGFycyA9IFsuLi5zdHJdO1xuICAgIGxldCBpID0gMDtcbiAgICBmdW5jdGlvbiBuYW1lKCkge1xuICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgICBpZiAoSURfU1RBUlQudGVzdChjaGFyc1srK2ldKSkge1xuICAgICAgICAgICAgdmFsdWUgKz0gY2hhcnNbaV07XG4gICAgICAgICAgICB3aGlsZSAoSURfQ09OVElOVUUudGVzdChjaGFyc1srK2ldKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IGNoYXJzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoYXJzW2ldID09PSAnXCInKSB7XG4gICAgICAgICAgICBsZXQgcG9zID0gaTtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgY2hhcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJzWysraV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBjaGFyc1srK2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gY2hhcnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVudGVybWluYXRlZCBxdW90ZSBhdCAke3Bvc306ICR7REVCVUdfVVJMfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyIG5hbWUgYXQgJHtpfTogJHtERUJVR19VUkx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB3aGlsZSAoaSA8IGNoYXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNoYXJzW2ldO1xuICAgICAgICBjb25zdCB0eXBlID0gU0lNUExFX1RPS0VOU1t2YWx1ZV07XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGUsIGluZGV4OiBpKyssIHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiRVNDQVBFRFwiLCBpbmRleDogaSsrLCB2YWx1ZTogY2hhcnNbaSsrXSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBcIjpcIikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuYW1lKCk7XG4gICAgICAgICAgICB5aWVsZCB7IHR5cGU6IFwiUEFSQU1cIiwgaW5kZXg6IGksIHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5hbWUoKTtcbiAgICAgICAgICAgIHlpZWxkIHsgdHlwZTogXCJXSUxEQ0FSRFwiLCBpbmRleDogaSwgdmFsdWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlpZWxkIHsgdHlwZTogXCJDSEFSXCIsIGluZGV4OiBpLCB2YWx1ZTogY2hhcnNbaSsrXSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFwiRU5EXCIsIGluZGV4OiBpLCB2YWx1ZTogXCJcIiB9O1xufVxuY2xhc3MgSXRlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW5zKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgICAgICBfSXRlcl9wZWVrLnNldCh0aGlzLCB2b2lkIDApO1xuICAgIH1cbiAgICBwZWVrKCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0l0ZXJfcGVlaywgXCJmXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy50b2tlbnMubmV4dCgpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSXRlcl9wZWVrLCBuZXh0LnZhbHVlLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0l0ZXJfcGVlaywgXCJmXCIpO1xuICAgIH1cbiAgICB0cnlDb25zdW1lKHR5cGUpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHR5cGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0l0ZXJfcGVlaywgdW5kZWZpbmVkLCBcImZcIik7IC8vIFJlc2V0IGFmdGVyIGNvbnN1bWVkLlxuICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7XG4gICAgfVxuICAgIGNvbnN1bWUodHlwZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJ5Q29uc3VtZSh0eXBlKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogbmV4dFR5cGUsIGluZGV4IH0gPSB0aGlzLnBlZWsoKTtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCAke25leHRUeXBlfSBhdCAke2luZGV4fSwgZXhwZWN0ZWQgJHt0eXBlfTogJHtERUJVR19VUkx9YCk7XG4gICAgfVxuICAgIHRleHQoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIHdoaWxlICgodmFsdWUgPSB0aGlzLnRyeUNvbnN1bWUoXCJDSEFSXCIpIHx8IHRoaXMudHJ5Q29uc3VtZShcIkVTQ0FQRURcIikpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5fSXRlcl9wZWVrID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogVG9rZW5pemVkIHBhdGggaW5zdGFuY2UuXG4gKi9cbmNsYXNzIFRva2VuRGF0YSB7XG4gICAgY29uc3RydWN0b3IodG9rZW5zKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIH1cbn1cbmV4cG9ydHMuVG9rZW5EYXRhID0gVG9rZW5EYXRhO1xuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0ciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBlbmNvZGVQYXRoID0gTk9PUF9WQUxVRSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBpdCA9IG5ldyBJdGVyKGxleGVyKHN0cikpO1xuICAgIGZ1bmN0aW9uIGNvbnN1bWUoZW5kVHlwZSkge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpdC50ZXh0KCk7XG4gICAgICAgICAgICBpZiAocGF0aClcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwidGV4dFwiLCB2YWx1ZTogZW5jb2RlUGF0aChwYXRoKSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gaXQudHJ5Q29uc3VtZShcIlBBUkFNXCIpO1xuICAgICAgICAgICAgaWYgKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInBhcmFtXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2lsZGNhcmQgPSBpdC50cnlDb25zdW1lKFwiV0lMRENBUkRcIik7XG4gICAgICAgICAgICBpZiAod2lsZGNhcmQpIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwid2lsZGNhcmRcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogd2lsZGNhcmQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcGVuID0gaXQudHJ5Q29uc3VtZShcIntcIik7XG4gICAgICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IGNvbnN1bWUoXCJ9XCIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXQuY29uc3VtZShlbmRUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gY29uc3VtZShcIkVORFwiKTtcbiAgICByZXR1cm4gbmV3IFRva2VuRGF0YSh0b2tlbnMpO1xufVxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICovXG5mdW5jdGlvbiBjb21waWxlKHBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgZW5jb2RlID0gZW5jb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBkYXRhID0gcGF0aCBpbnN0YW5jZW9mIFRva2VuRGF0YSA/IHBhdGggOiBwYXJzZShwYXRoLCBvcHRpb25zKTtcbiAgICBjb25zdCBmbiA9IHRva2Vuc1RvRnVuY3Rpb24oZGF0YS50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gcGF0aChkYXRhID0ge30pIHtcbiAgICAgICAgY29uc3QgW3BhdGgsIC4uLm1pc3NpbmddID0gZm4oZGF0YSk7XG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZyBwYXJhbWV0ZXJzOiAke21pc3Npbmcuam9pbihcIiwgXCIpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG59XG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUpIHtcbiAgICBjb25zdCBlbmNvZGVycyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlblRvRnVuY3Rpb24odG9rZW4sIGRlbGltaXRlciwgZW5jb2RlKSk7XG4gICAgcmV0dXJuIChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtcIlwiXTtcbiAgICAgICAgZm9yIChjb25zdCBlbmNvZGVyIG9mIGVuY29kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBbdmFsdWUsIC4uLmV4dHJhc10gPSBlbmNvZGVyKGRhdGEpO1xuICAgICAgICAgICAgcmVzdWx0WzBdICs9IHZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZXh0cmFzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4vKipcbiAqIENvbnZlcnQgYSBzaW5nbGUgdG9rZW4gaW50byBhIHBhdGggYnVpbGRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUpIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJ0ZXh0XCIpXG4gICAgICAgIHJldHVybiAoKSA9PiBbdG9rZW4udmFsdWVdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICAgICAgY29uc3QgZm4gPSB0b2tlbnNUb0Z1bmN0aW9uKHRva2VuLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUpO1xuICAgICAgICByZXR1cm4gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgLi4ubWlzc2luZ10gPSBmbihkYXRhKTtcbiAgICAgICAgICAgIGlmICghbWlzc2luZy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgICAgICAgICByZXR1cm4gW1wiXCJdO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBlbmNvZGVWYWx1ZSA9IGVuY29kZSB8fCBOT09QX1ZBTFVFO1xuICAgIGlmICh0b2tlbi50eXBlID09PSBcIndpbGRjYXJkXCIgJiYgZW5jb2RlICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXCJcIiwgdG9rZW4ubmFtZV07XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFwiJHt0b2tlbi5uYW1lfVwiIHRvIGJlIGEgbm9uLWVtcHR5IGFycmF5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcIiR7dG9rZW4ubmFtZX0vJHtpbmRleH1cIiB0byBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oZGVsaW1pdGVyKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIFtcIlwiLCB0b2tlbi5uYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXCIke3Rva2VuLm5hbWV9XCIgdG8gYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2VuY29kZVZhbHVlKHZhbHVlKV07XG4gICAgfTtcbn1cbi8qKlxuICogVHJhbnNmb3JtIGEgcGF0aCBpbnRvIGEgbWF0Y2ggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoKHBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHJlZ2V4cCwga2V5cyB9ID0gcGF0aFRvUmVnZXhwKHBhdGgsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGRlY29kZXJzID0ga2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoZGVjb2RlID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBOT09QX1ZBTFVFO1xuICAgICAgICBpZiAoa2V5LnR5cGUgPT09IFwicGFyYW1cIilcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGU7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHZhbHVlLnNwbGl0KGRlbGltaXRlcikubWFwKGRlY29kZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IG0gPSByZWdleHAuZXhlYyhpbnB1dCk7XG4gICAgICAgIGlmICghbSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGF0aCA9IG1bMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1baV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaSAtIDFdO1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlciA9IGRlY29kZXJzW2kgLSAxXTtcbiAgICAgICAgICAgIHBhcmFtc1trZXkubmFtZV0gPSBkZWNvZGVyKG1baV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHBhdGgsIHBhcmFtcyB9O1xuICAgIH07XG59XG5mdW5jdGlvbiBwYXRoVG9SZWdleHAocGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiwgZW5kID0gdHJ1ZSwgc2Vuc2l0aXZlID0gZmFsc2UsIHRyYWlsaW5nID0gdHJ1ZSwgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcbiAgICBjb25zdCBmbGFncyA9IHNlbnNpdGl2ZSA/IFwic1wiIDogXCJpc1wiO1xuICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG4gICAgY29uc3QgaXRlbXMgPSBwYXRocy5tYXAoKHBhdGgpID0+IHBhdGggaW5zdGFuY2VvZiBUb2tlbkRhdGEgPyBwYXRoIDogcGFyc2UocGF0aCwgb3B0aW9ucykpO1xuICAgIGZvciAoY29uc3QgeyB0b2tlbnMgfSBvZiBpdGVtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNlcSBvZiBmbGF0dGVuKHRva2VucywgMCwgW10pKSB7XG4gICAgICAgICAgICBjb25zdCByZWdleHAgPSBzZXF1ZW5jZVRvUmVnRXhwKHNlcSwgZGVsaW1pdGVyLCBrZXlzKTtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChyZWdleHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBwYXR0ZXJuID0gYF4oPzoke3NvdXJjZXMuam9pbihcInxcIil9KWA7XG4gICAgaWYgKHRyYWlsaW5nKVxuICAgICAgICBwYXR0ZXJuICs9IGAoPzoke2VzY2FwZShkZWxpbWl0ZXIpfSQpP2A7XG4gICAgcGF0dGVybiArPSBlbmQgPyBcIiRcIiA6IGAoPz0ke2VzY2FwZShkZWxpbWl0ZXIpfXwkKWA7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgcmV0dXJuIHsgcmVnZXhwLCBrZXlzIH07XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgZmxhdCBsaXN0IG9mIHNlcXVlbmNlIHRva2VucyBmcm9tIHRoZSBnaXZlbiB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uKiBmbGF0dGVuKHRva2VucywgaW5kZXgsIGluaXQpIHtcbiAgICBpZiAoaW5kZXggPT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGluaXQ7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IGZvcmsgPSBpbml0LnNsaWNlKCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIGZsYXR0ZW4odG9rZW4udG9rZW5zLCAwLCBmb3JrKSkge1xuICAgICAgICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleCArIDEsIHNlcSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluaXQucHVzaCh0b2tlbik7XG4gICAgfVxuICAgIHlpZWxkKiBmbGF0dGVuKHRva2VucywgaW5kZXggKyAxLCBpbml0KTtcbn1cbi8qKlxuICogVHJhbnNmb3JtIGEgZmxhdCBzZXF1ZW5jZSBvZiB0b2tlbnMgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gc2VxdWVuY2VUb1JlZ0V4cCh0b2tlbnMsIGRlbGltaXRlciwga2V5cykge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGxldCBiYWNrdHJhY2sgPSBcIlwiO1xuICAgIGxldCBpc1NhZmVTZWdtZW50UGFyYW0gPSB0cnVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGUodG9rZW4udmFsdWUpO1xuICAgICAgICAgICAgYmFja3RyYWNrID0gdG9rZW4udmFsdWU7XG4gICAgICAgICAgICBpc1NhZmVTZWdtZW50UGFyYW0gfHwgKGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRva2VuLnZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwicGFyYW1cIiB8fCB0b2tlbi50eXBlID09PSBcIndpbGRjYXJkXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNTYWZlU2VnbWVudFBhcmFtICYmICFiYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHRleHQgYWZ0ZXIgXCIke3Rva2VuLm5hbWV9XCI6ICR7REVCVUdfVVJMfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwicGFyYW1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgKCR7bmVnYXRlKGRlbGltaXRlciwgaXNTYWZlU2VnbWVudFBhcmFtID8gXCJcIiA6IGJhY2t0cmFjayl9KylgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAoLispYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleXMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICBiYWNrdHJhY2sgPSBcIlwiO1xuICAgICAgICAgICAgaXNTYWZlU2VnbWVudFBhcmFtID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbmVnYXRlKGRlbGltaXRlciwgYmFja3RyYWNrKSB7XG4gICAgY29uc3QgdmFsdWVzID0gW2RlbGltaXRlciwgYmFja3RyYWNrXS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgaXNTaW1wbGUgPSB2YWx1ZXMuZXZlcnkoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPT09IDEpO1xuICAgIGlmIChpc1NpbXBsZSlcbiAgICAgICAgcmV0dXJuIGBbXiR7ZXNjYXBlKHZhbHVlcy5qb2luKFwiXCIpKX1dYDtcbiAgICByZXR1cm4gYCg/Oig/ISR7dmFsdWVzLm1hcChlc2NhcGUpLmpvaW4oXCJ8XCIpfSkuKWA7XG59XG4vKipcbiAqIFN0cmluZ2lmeSB0b2tlbiBkYXRhIGludG8gYSBwYXRoIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS50b2tlbnNcbiAgICAgICAgLm1hcChmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbih0b2tlbiwgaW5kZXgsIHRva2Vucykge1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJ0ZXh0XCIpXG4gICAgICAgICAgICByZXR1cm4gZXNjYXBlVGV4dCh0b2tlbi52YWx1ZSk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgeyR7dG9rZW4udG9rZW5zLm1hcChzdHJpbmdpZnlUb2tlbikuam9pbihcIlwiKX19YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1NhZmUgPSBpc05hbWVTYWZlKHRva2VuLm5hbWUpICYmIGlzTmV4dE5hbWVTYWZlKHRva2Vuc1tpbmRleCArIDFdKTtcbiAgICAgICAgY29uc3Qga2V5ID0gaXNTYWZlID8gdG9rZW4ubmFtZSA6IEpTT04uc3RyaW5naWZ5KHRva2VuLm5hbWUpO1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJwYXJhbVwiKVxuICAgICAgICAgICAgcmV0dXJuIGA6JHtrZXl9YDtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwid2lsZGNhcmRcIilcbiAgICAgICAgICAgIHJldHVybiBgKiR7a2V5fWA7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW46ICR7dG9rZW59YCk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBpc05hbWVTYWZlKG5hbWUpIHtcbiAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gbmFtZTtcbiAgICBpZiAoIUlEX1NUQVJULnRlc3QoZmlyc3QpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHJlc3QuZXZlcnkoKGNoYXIpID0+IElEX0NPTlRJTlVFLnRlc3QoY2hhcikpO1xufVxuZnVuY3Rpb24gaXNOZXh0TmFtZVNhZmUodG9rZW4pIHtcbiAgICBpZiAodG9rZW4/LnR5cGUgIT09IFwidGV4dFwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gIUlEX0NPTlRJTlVFLnRlc3QodG9rZW4udmFsdWVbMF0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1kYXRhLXByb3BlcnR5Jyk7XG52YXIgaGFzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdoYXMtcHJvcGVydHktZGVzY3JpcHRvcnMnKSgpO1xudmFyIGdPUEQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkZmxvb3IgPSBHZXRJbnRyaW5zaWMoJyVNYXRoLmZsb29yJScpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXRGdW5jdGlvbkxlbmd0aChmbiwgbGVuZ3RoKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZuYCBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHR9XG5cdGlmICh0eXBlb2YgbGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBsZW5ndGggPCAwIHx8IGxlbmd0aCA+IDB4RkZGRkZGRkYgfHwgJGZsb29yKGxlbmd0aCkgIT09IGxlbmd0aCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXInKTtcblx0fVxuXG5cdHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmICEhYXJndW1lbnRzWzJdO1xuXG5cdHZhciBmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlID0gdHJ1ZTtcblx0dmFyIGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSA9IHRydWU7XG5cdGlmICgnbGVuZ3RoJyBpbiBmbiAmJiBnT1BEKSB7XG5cdFx0dmFyIGRlc2MgPSBnT1BEKGZuLCAnbGVuZ3RoJyk7XG5cdFx0aWYgKGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0XHRmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkZXNjICYmICFkZXNjLndyaXRhYmxlKSB7XG5cdFx0XHRmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSB8fCBmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgfHwgIWxvb3NlKSB7XG5cdFx0aWYgKGhhc0Rlc2NyaXB0b3JzKSB7XG5cdFx0XHRkZWZpbmUoLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPGRlZmluZT5bMF19ICovIChmbiksICdsZW5ndGgnLCBsZW5ndGgsIHRydWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWZpbmUoLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPGRlZmluZT5bMF19ICovIChmbiksICdsZW5ndGgnLCBsZW5ndGgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm47XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0ZG91dDogZmFsc2UsXG5cdHN0ZGVycjogZmFsc2Vcbn07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwudHlwZURldGVjdCA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuLyogIVxuICogdHlwZS1kZXRlY3RcbiAqIENvcHlyaWdodChjKSAyMDEzIGpha2UgbHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbnZhciBwcm9taXNlRXhpc3RzID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbic7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG52YXIgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnID8gc2VsZiA6IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpZC1ibGFja2xpc3RcblxudmFyIHN5bWJvbEV4aXN0cyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnO1xudmFyIG1hcEV4aXN0cyA9IHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEV4aXN0cyA9IHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtNYXBFeGlzdHMgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgd2Vha1NldEV4aXN0cyA9IHR5cGVvZiBXZWFrU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciBkYXRhVmlld0V4aXN0cyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPSBzeW1ib2xFeGlzdHMgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc2V0RW50cmllc0V4aXN0cyA9IHNldEV4aXN0cyAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xudmFyIG1hcEVudHJpZXNFeGlzdHMgPSBtYXBFeGlzdHMgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzZXRJdGVyYXRvclByb3RvdHlwZSA9IHNldEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBTZXQoKS5lbnRyaWVzKCkpO1xudmFyIG1hcEl0ZXJhdG9yUHJvdG90eXBlID0gbWFwRW50cmllc0V4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IE1hcCgpLmVudHJpZXMoKSk7XG52YXIgYXJyYXlJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbnZhciBhcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciBzdHJpbmdJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEl0ZXJhdG9yRXhpc3RzICYmIHR5cGVvZiBTdHJpbmcucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgc3RyaW5nSXRlcmF0b3JQcm90b3R5cGUgPSBzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoJydbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbnZhciB0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCA9IDg7XG52YXIgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoID0gLTE7XG4vKipcbiAqICMjIyB0eXBlT2YgKG9iailcbiAqXG4gKiBVc2VzIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LFxuICogbm9ybWFsaXNpbmcgYmVoYXZpb3VyIGFjcm9zcyBlbmdpbmUgdmVyc2lvbnMgJiB3ZWxsIG9wdGltaXNlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAqIEByZXR1cm4ge1N0cmluZ30gb2JqZWN0IHR5cGVcbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHR5cGVEZXRlY3Qob2JqKSB7XG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzLDAzOSwwMzUgb3BzL3NlYyDCsTEuNjIlICg3OCBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMSw0MjQsMTM4IG9wcy9zZWMgwrE0LjU0JSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIG51bWJlciBsaXRlcmFsICAgICB4IDEsNjUzLDE1MyBvcHMvc2VjIMKxMS45MSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCA5LDk3OCw2NjAgb3BzL3NlYyDCsTEuOTIlICg3NSBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMiw1NTYsNzY5IG9wcy9zZWMgwrExLjczJSAoNzcgcnVucyBzYW1wbGVkKVxuICAgKiBQb3N0OlxuICAgKiAgIHN0cmluZyBsaXRlcmFsICAgICB4IDM4LDU2NCw3OTYgb3BzL3NlYyDCsTEuMTUlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMzEsMTQ4LDk0MCBvcHMvc2VjIMKxMS4xMCUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAzMiw2NzksMzMwIG9wcy9zZWMgwrExLjkwJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIHVuZGVmaW5lZCAgICAgICAgICB4IDMyLDM2MywzNjggb3BzL3NlYyDCsTEuMDclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMzEsMjk2LDg3MCBvcHMvc2VjIMKxMC45NiUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIHZhciB0eXBlb2ZPYmogPSB0eXBlb2Ygb2JqO1xuICBpZiAodHlwZW9mT2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2ZPYmo7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMjgsNjQ1LDc2NSBvcHMvc2VjIMKxMS4xNyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBudWxsICAgICAgICAgICAgICAgeCAzNiw0MjgsOTYyIG9wcy9zZWMgwrExLjM3JSAoODQgcnVucyBzYW1wbGVkKVxuICAgKi9cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cpYGBcbiAgICogIC0gTm9kZSA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBQaGFudG9tSlMgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIDExID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIElFIEVkZ2UgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKWBgXG4gICAqICAtIENocm9tZSBXb3JrZXIgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gRmlyZWZveCBXb3JrZXIgPT09IFwiW29iamVjdCBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBTYWZhcmkgV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgMTEgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gSUUgRWRnZSBXb3JrZXIgPT09IFwiW29iamVjdCBXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKi9cbiAgaWYgKG9iaiA9PT0gZ2xvYmFsT2JqZWN0KSB7XG4gICAgcmV0dXJuICdnbG9iYWwnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIGFycmF5IGxpdGVyYWwgICAgICB4IDIsODg4LDM1MiBvcHMvc2VjIMKxMC42NyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyMiw0NzksNjUwIG9wcy9zZWMgwrEwLjk2JSAoODEgcnVucyBzYW1wbGVkKVxuICAgKi9cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkob2JqKSAmJlxuICAgIChzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyA9PT0gZmFsc2UgfHwgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gb2JqKSlcbiAgKSB7XG4gICAgcmV0dXJuICdBcnJheSc7XG4gIH1cblxuICAvLyBOb3QgY2FjaGluZyBleGlzdGVuY2Ugb2YgYHdpbmRvd2AgYW5kIHJlbGF0ZWQgcHJvcGVydGllcyBkdWUgdG8gcG90ZW50aWFsXG4gIC8vIGZvciBgd2luZG93YCB0byBiZSB1bnNldCBiZWZvcmUgdGVzdHMgaW4gcXVhc2ktYnJvd3NlciBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cgIT09IG51bGwpIHtcbiAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNsb2NhdGlvbilcbiAgICAgKiBXaGF0V0cgSFRNTCQ3LjcuMyAtIFRoZSBgTG9jYXRpb25gIGludGVyZmFjZVxuICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LmxvY2F0aW9uKWBgXG4gICAgICogIC0gSUUgPD0xMSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmxvY2F0aW9uID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5sb2NhdGlvbikge1xuICAgICAgcmV0dXJuICdMb2NhdGlvbic7XG4gICAgfVxuXG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvY3VtZW50KVxuICAgICAqIFdoYXRXRyBIVE1MJDMuMS4xIC0gVGhlIGBEb2N1bWVudGAgb2JqZWN0XG4gICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC0yNjgwOTI2OClcbiAgICAgKiAgICAgICB3aGljaCBzdWdnZXN0cyB0aGF0IGJyb3dzZXJzIHNob3VsZCB1c2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgZm9yXG4gICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICogICAgICAgV2hhdFdHIEhUTUwgc3RhdGVzOlxuICAgICAqICAgICAgICAgPiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBXaW5kb3cgb2JqZWN0cyBtdXN0IGFsc28gaGF2ZSBhXG4gICAgICogICAgICAgICA+IHdyaXRhYmxlLCBjb25maWd1cmFibGUsIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVkXG4gICAgICogICAgICAgICA+IEhUTUxEb2N1bWVudCB3aG9zZSB2YWx1ZSBpcyB0aGUgRG9jdW1lbnQgaW50ZXJmYWNlIG9iamVjdC5cbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50KWBgXG4gICAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBEb2N1bWVudF1cIlxuICAgICAqICAtIElFIDExID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICogIC0gSUUgRWRnZSA8PTEzID09PSBcIltvYmplY3QgSFRNTERvY3VtZW50XVwiXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09ICdvYmplY3QnICYmIG9iaiA9PT0gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gJ0RvY3VtZW50JztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjbWltZXR5cGVhcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIE1pbWVUeXBlQXJyYXlcbiAgICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmF2aWdhdG9yLm1pbWVUeXBlcylgYFxuICAgICAgICogIC0gSUUgPD0xMCA9PT0gXCJbb2JqZWN0IE1TTWltZVR5cGVzQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIG9iaiA9PT0gd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMpIHtcbiAgICAgICAgcmV0dXJuICdNaW1lVHlwZUFycmF5JztcbiAgICAgIH1cblxuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3BsdWdpbmFycmF5KVxuICAgICAgICogV2hhdFdHIEhUTUwkOC42LjEuNSAtIFBsdWdpbnMgLSBJbnRlcmZhY2UgUGx1Z2luQXJyYXlcbiAgICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmF2aWdhdG9yLnBsdWdpbnMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU1BsdWdpbnNDb2xsZWN0aW9uXVwiXG4gICAgICAgKi9cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5wbHVnaW5zID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIG9iaiA9PT0gd2luZG93Lm5hdmlnYXRvci5wbHVnaW5zKSB7XG4gICAgICAgIHJldHVybiAnUGx1Z2luQXJyYXknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgodHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ID09PSAnb2JqZWN0JykgJiZcbiAgICAgICAgb2JqIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7XG4gICAgICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICogV2hhdFdHIEhUTUwkNC40LjQgLSBUaGUgYGJsb2NrcXVvdGVgIGVsZW1lbnQgLSBJbnRlcmZhY2UgYEhUTUxRdW90ZUVsZW1lbnRgXG4gICAgICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYmxvY2txdW90ZScpKWBgXG4gICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBIVE1MQmxvY2tFbGVtZW50XVwiXG4gICAgICAqL1xuICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnQkxPQ0tRVU9URScpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MUXVvdGVFbGVtZW50JztcbiAgICAgIH1cblxuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jaHRtbHRhYmxlZGF0YWNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnRgXG4gICAgICAgKiBOb3RlOiBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBhZGhlciB0byB0aGUgVzNDIERPTSBMZXZlbCAyIHNwZWNcbiAgICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtODI5MTUwNzUpXG4gICAgICAgKiAgICAgICB3aGljaCBzdWdnZXN0cyB0aGF0IGJyb3dzZXJzIHNob3VsZCB1c2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgZm9yXG4gICAgICAgKiAgICAgICBib3RoIFREIGFuZCBUSCBlbGVtZW50cy4gV2hhdFdHIHNlcGFyYXRlcyB0aGVzZS5cbiAgICAgICAqIFRlc3Q6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKVxuICAgICAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gU2FmYXJpID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqL1xuICAgICAgaWYgKG9iai50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50JztcbiAgICAgIH1cblxuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jaHRtbHRhYmxlaGVhZGVyY2VsbGVsZW1lbnQpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ0LjkuOSAtIFRoZSBgdGRgIGVsZW1lbnQgLSBJbnRlcmZhY2UgYEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1RIJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50JztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIEZsb2F0NjRBcnJheSAgICAgICB4IDYyNSw2NDQgb3BzL3NlYyDCsTEuNTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCAxLDI3OSw4NTIgb3BzL3NlYyDCsTIuOTElICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCAxLDE3OCwxODUgb3BzL3NlYyDCsTEuOTUlICg4MyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MTZBcnJheSAgICAgICAgeCAxLDAwOCwzODAgb3BzL3NlYyDCsTIuMjUlICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCAxLDEyOCwwNDAgb3BzL3NlYyDCsTIuMTElICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCAxLDE3MCwxMTkgb3BzL3NlYyDCsTIuODglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBJbnQxNkFycmF5ICAgICAgICAgeCAxLDE3NiwzNDggb3BzL3NlYyDCsTUuNzklICg4NiBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCAxLDA1OCw3MDcgb3BzL3NlYyDCsTQuOTQlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCAxLDExMCw2MzMgb3BzL3NlYyDCsTQuMjAlICg4MCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIEZsb2F0NjRBcnJheSAgICAgICB4IDcsMTA1LDY3MSBvcHMvc2VjIMKxMTMuNDclICg2NCBydW5zIHNhbXBsZWQpXG4gICogICBGbG9hdDMyQXJyYXkgICAgICAgeCA1LDg4Nyw5MTIgb3BzL3NlYyDCsTEuNDYlICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCA2LDQ5MSw2NjEgb3BzL3NlYyDCsTEuNzYlICg3OSBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MTZBcnJheSAgICAgICAgeCA2LDU1OSw3OTUgb3BzL3NlYyDCsTEuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OEFycmF5ICAgICAgICAgeCA2LDQ2Myw5NjYgb3BzL3NlYyDCsTEuNDMlICg4NSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCA1LDY0MSw4NDEgb3BzL3NlYyDCsTMuNDklICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQxNkFycmF5ICAgICAgICAgeCA2LDU4Myw1MTEgb3BzL3NlYyDCsTEuOTglICg4MCBydW5zIHNhbXBsZWQpXG4gICogICBJbnQ4QXJyYXkgICAgICAgICAgeCA2LDYwNiwwNzggb3BzL3NlYyDCsTEuNzQlICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCA2LDYwMiwyMjQgb3BzL3NlYyDCsTEuNzclICg4MyBydW5zIHNhbXBsZWQpXG4gICovXG4gIHZhciBzdHJpbmdUYWcgPSAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgJiYgb2JqW1N5bWJvbC50b1N0cmluZ1RhZ10pO1xuICBpZiAodHlwZW9mIHN0cmluZ1RhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG5cbiAgdmFyIG9ialByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDEsNzcyLDM4NSBvcHMvc2VjIMKxMS44NSUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDIsMTQzLDYzNCBvcHMvc2VjIMKxMi40NiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgcmVnZXggbGl0ZXJhbCAgICAgIHggMyw5MjgsMDA5IG9wcy9zZWMgwrEwLjY1JSAoNzggcnVucyBzYW1wbGVkKVxuICAqICAgcmVnZXggY29uc3RydWN0b3IgIHggMyw5MzEsMTA4IG9wcy9zZWMgwrEwLjU4JSAoODQgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBSZWdFeHAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdSZWdFeHAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAyLDEzMCwwNzQgb3BzL3NlYyDCsTQuNDIlICg2OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIGRhdGUgICAgICAgICAgICAgICB4IDMsOTUzLDc3OSBvcHMvc2VjIMKxMS4zNSUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gRGF0ZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0RhdGUnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLXByb21pc2UucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNS40LjUuNCAtIFByb21pc2UucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIlByb21pc2VcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQcm9taXNlLnJlc29sdmUoKSlgYFxuICAgKiAgLSBDaHJvbWUgPD00NyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKiAgLSBFZGdlIDw9MjAgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRmlyZWZveCAyOS1MYXRlc3QgPT09IFwiW29iamVjdCBQcm9taXNlXVwiXG4gICAqICAtIFNhZmFyaSA3LjEtTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKi9cbiAgaWYgKHByb21pc2VFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBQcm9taXNlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnUHJvbWlzZSc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIHNldCAgICAgICAgICAgICAgICB4IDIsMjIyLDE4NiBvcHMvc2VjIMKxMS4zMSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgc2V0ICAgICAgICAgICAgICAgIHggNCw1NDUsODc5IG9wcy9zZWMgwrExLjEzJSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAoc2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gU2V0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0JztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggMiwzOTYsODQyIG9wcy9zZWMgwrExLjU5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBtYXAgICAgICAgICAgICAgICAgeCA0LDE4Myw5NDUgb3BzL3NlYyDCsTYuNTklICg4MiBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdNYXAnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCAxLDMyMywyMjAgb3BzL3NlYyDCsTIuMTclICg3NiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWtzZXQgICAgICAgICAgICB4IDQsMjM3LDUxMCBvcHMvc2VjIMKxMi4wMSUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtTZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrU2V0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIHdlYWttYXAgICAgICAgICAgICB4IDEsNTAwLDI2MCBvcHMvc2VjIMKxMi4wMiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgd2Vha21hcCAgICAgICAgICAgIHggMyw4ODEsMzg0IG9wcy9zZWMgwrExLjQ1JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAod2Vha01hcEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFdlYWtNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdXZWFrTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1kYXRhdmlldy5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDI0LjIuNC4yMSAtIERhdGFWaWV3LnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJEYXRhVmlld1wiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKGRhdGFWaWV3RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gRGF0YVZpZXcucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRhVmlldyc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJW1hcGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMS41LjIuMiAtICVNYXBJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiTWFwIEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IE1hcCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBtYXBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc2V0aXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMy4yLjUuMi4yIC0gJVNldEl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTZXQgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgU2V0KCkuZW50cmllcygpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHNldEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTZXQgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjIuMS41LjIuMiAtICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJBcnJheSBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChhcnJheUl0ZXJhdG9yRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gYXJyYXlJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnQXJyYXkgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIxLjEuNS4yLjIgLSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIlN0cmluZyBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTdHJpbmcgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCAyLDQyNCwzMjAgb3BzL3NlYyDCsTEuNjclICg3NiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIG9iamVjdCBmcm9tIG51bGwgICB4IDUsODM4LDAwMCBvcHMvc2VjIMKxMC45OSUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIHJldHVybiBPYmplY3RcbiAgICAucHJvdG90eXBlXG4gICAgLnRvU3RyaW5nXG4gICAgLmNhbGwob2JqKVxuICAgIC5zbGljZSh0b1N0cmluZ0xlZnRTbGljZUxlbmd0aCwgdG9TdHJpbmdSaWdodFNsaWNlTGVuZ3RoKTtcbn1cblxucmV0dXJuIHR5cGVEZXRlY3Q7XG5cbn0pKSk7XG4iXX0= diff --git a/node_modules/string.prototype.trim/CHANGELOG.md b/node_modules/string.prototype.trim/CHANGELOG.md index 16418a538f..92a375f665 100644 --- a/node_modules/string.prototype.trim/CHANGELOG.md +++ b/node_modules/string.prototype.trim/CHANGELOG.md @@ -5,7 +5,22 @@ 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.2.8](https://github.com/es-shims/String.prototype.trim/compare/v1.2.7...v1.2.8) - 2022-11-07 +## [v1.2.9](https://github.com/es-shims/String.prototype.trim/compare/v1.2.8...v1.2.9) - 2024-03-16 + +### Commits + +- [Refactor] use `es-object-atoms`; update `call-bind`, `define-properties`, `es-abstract` [`f6fe1af`](https://github.com/es-shims/String.prototype.trim/commit/f6fe1af4cb9381757971b294afc845e3b2e7c1e9) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`d4e2b81`](https://github.com/es-shims/String.prototype.trim/commit/d4e2b81878478d7090826b73d52bc42f117a2189) + +## [v1.2.8](https://github.com/es-shims/String.prototype.trim/compare/v1.2.7...v1.2.8) - 2023-09-07 + +### Commits + +- [Tests] add passing test cases [`2ab172c`](https://github.com/es-shims/String.prototype.trim/commit/2ab172c3ddeec62fb4f6ead3c7e10d24e340ecad) +- [Deps] update `es-abstract` [`8c16598`](https://github.com/es-shims/String.prototype.trim/commit/8c16598aba57e30c5e8446f91fb998a5790c1f81) +- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `tape` [`2b99fad`](https://github.com/es-shims/String.prototype.trim/commit/2b99fad6f32386b5bf1b304acb0fdd2a73c77a95) +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/eslint-config`, `aud`, `tape` [`97be2b5`](https://github.com/es-shims/String.prototype.trim/commit/97be2b55a3902753f50fadc2e9df6b7ff0f0f669) +- [Deps] update `define-properties`, `es-abstract` [`1fdc65f`](https://github.com/es-shims/String.prototype.trim/commit/1fdc65ff4b9c73cc9d132832943a89a57f1f93a5) ## [v1.2.7](https://github.com/es-shims/String.prototype.trim/compare/v1.2.6...v1.2.7) - 2022-11-07 diff --git a/node_modules/string.prototype.trim/implementation.js b/node_modules/string.prototype.trim/implementation.js index 3fbc731de9..9f66fa8df5 100644 --- a/node_modules/string.prototype.trim/implementation.js +++ b/node_modules/string.prototype.trim/implementation.js @@ -1,7 +1,7 @@ 'use strict'; -var RequireObjectCoercible = require('es-abstract/2022/RequireObjectCoercible'); -var ToString = require('es-abstract/2022/ToString'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); +var ToString = require('es-abstract/2024/ToString'); var callBound = require('call-bind/callBound'); var $replace = callBound('String.prototype.replace'); diff --git a/node_modules/string.prototype.trim/index.js b/node_modules/string.prototype.trim/index.js index 6aba38207e..ce41c888ce 100644 --- a/node_modules/string.prototype.trim/index.js +++ b/node_modules/string.prototype.trim/index.js @@ -2,7 +2,7 @@ var callBind = require('call-bind'); var define = require('define-properties'); -var RequireObjectCoercible = require('es-abstract/2022/RequireObjectCoercible'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); var implementation = require('./implementation'); var getPolyfill = require('./polyfill'); diff --git a/node_modules/string.prototype.trim/package.json b/node_modules/string.prototype.trim/package.json index 467d4ae253..1763dff348 100644 --- a/node_modules/string.prototype.trim/package.json +++ b/node_modules/string.prototype.trim/package.json @@ -1,6 +1,6 @@ { "name": "string.prototype.trim", - "version": "1.2.7", + "version": "1.2.9", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", @@ -46,23 +46,24 @@ "es-shim API" ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "devDependencies": { - "@es-shims/api": "^2.2.3", - "@ljharb/eslint-config": "^21.0.0", - "aud": "^2.0.1", + "@es-shims/api": "^2.4.2", + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "functions-have-names": "^1.2.3", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.1" + "tape": "^5.7.5" }, "testling": { "files": "test/index.js", diff --git a/node_modules/string.prototype.trim/test/tests.js b/node_modules/string.prototype.trim/test/tests.js index 5a2f10fcaf..fcc0651466 100644 --- a/node_modules/string.prototype.trim/test/tests.js +++ b/node_modules/string.prototype.trim/test/tests.js @@ -1,5 +1,7 @@ 'use strict'; +var forEach = require('for-each'); + module.exports = function (trim, t) { t.test('normal cases', function (st) { st.equal(trim(' \t\na \t\n'), 'a', 'strips whitespace off left and right sides'); @@ -42,4 +44,19 @@ module.exports = function (trim, t) { st.equal(trim(zeroWidth), zeroWidth, 'zero width space does not trim'); st.end(); }); + + t.test('non-whitespace characters', function (st) { + // 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 (nonWhitespace, name) { + st.equal(trim(nonWhitespace), nonWhitespace, name + ' does not trim'); + }); + + st.end(); + }); }; diff --git a/node_modules/string.prototype.trimend/CHANGELOG.md b/node_modules/string.prototype.trimend/CHANGELOG.md index a53453b4ce..56118c38ca 100644 --- a/node_modules/string.prototype.trimend/CHANGELOG.md +++ b/node_modules/string.prototype.trimend/CHANGELOG.md @@ -5,6 +5,20 @@ 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.8](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.7...v1.0.8) - 2024-03-16 + +### Commits + +- [Refactor] replace `es-abstract` with `es-object-atoms` [`0df2b01`](https://github.com/es-shims/String.prototype.trimEnd/commit/0df2b018d3ba214e2435b9841a7a03fc06c24fd0) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`190e9c5`](https://github.com/es-shims/String.prototype.trimEnd/commit/190e9c5d74f84d8f90f61c9e9ad4b05f657df830) + +## [v1.0.7](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.6...v1.0.7) - 2023-09-07 + +### Commits + +- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `tape` [`1a10293`](https://github.com/es-shims/String.prototype.trimEnd/commit/1a102935636b564cd346d83666f62a9398864081) +- [Deps] update `define-properties`, `es-abstract` [`6ba2e19`](https://github.com/es-shims/String.prototype.trimEnd/commit/6ba2e19a78f9c63bad2daf0627ce7f2e33f1aeb9) + ## [v1.0.6](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.5...v1.0.6) - 2022-11-07 ### Commits diff --git a/node_modules/string.prototype.trimend/index.js b/node_modules/string.prototype.trimend/index.js index 6aba38207e..ce41c888ce 100644 --- a/node_modules/string.prototype.trimend/index.js +++ b/node_modules/string.prototype.trimend/index.js @@ -2,7 +2,7 @@ var callBind = require('call-bind'); var define = require('define-properties'); -var RequireObjectCoercible = require('es-abstract/2022/RequireObjectCoercible'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); var implementation = require('./implementation'); var getPolyfill = require('./polyfill'); diff --git a/node_modules/string.prototype.trimend/package.json b/node_modules/string.prototype.trimend/package.json index e0ebc21834..001333187a 100644 --- a/node_modules/string.prototype.trimend/package.json +++ b/node_modules/string.prototype.trimend/package.json @@ -1,6 +1,6 @@ { "name": "string.prototype.trimend", - "version": "1.0.6", + "version": "1.0.8", "author": "Jordan Harband ", "contributors": [ "Jordan Harband ", @@ -45,18 +45,18 @@ "tc39" ], "devDependencies": { - "@es-shims/api": "^2.2.3", - "@ljharb/eslint-config": "^21.0.0", - "aud": "^2.0.1", + "@es-shims/api": "^2.4.2", + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "functions-have-names": "^1.2.3", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.1" + "tape": "^5.7.5" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -67,9 +67,9 @@ "hideCredit": true }, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "publishConfig": { "ignore": [ diff --git a/node_modules/string.prototype.trimstart/CHANGELOG.md b/node_modules/string.prototype.trimstart/CHANGELOG.md index f9ec035a06..e7701e1be7 100644 --- a/node_modules/string.prototype.trimstart/CHANGELOG.md +++ b/node_modules/string.prototype.trimstart/CHANGELOG.md @@ -5,6 +5,23 @@ 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.8](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.7...v1.0.8) - 2024-03-21 + +### Commits + +- [actions] use reusable workflows [`d139c11`](https://github.com/es-shims/String.prototype.trimStart/commit/d139c119ba5003936649741fae52b28080794dd3) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`16ff815`](https://github.com/es-shims/String.prototype.trimStart/commit/16ff81546c62ac3159fdf223cd1b035729fd55f0) +- [Deps] update `call-bind`, `define-properties` [`8dd308d`](https://github.com/es-shims/String.prototype.trimStart/commit/8dd308dd225ea3cb6a4d2c9662e435101367a5ef) +- [Refactor] use `es-object-atoms` instead of `es-abstract` [`4868f56`](https://github.com/es-shims/String.prototype.trimStart/commit/4868f566f8052ab7e28ce733ecc62b56f743f7fc) +- [meta] add missing `engines.node` [`8c1cce6`](https://github.com/es-shims/String.prototype.trimStart/commit/8c1cce612e4e1fdd1e5172c9e508a88abd3e6a5c) + +## [v1.0.7](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.6...v1.0.7) - 2023-09-04 + +### Commits + +- [Dev Deps] update `@es-shims/api`, `@ljharb/eslint-config`, `aud`, `tape` [`58e7aa6`](https://github.com/es-shims/String.prototype.trimStart/commit/58e7aa63b702f4494b89b8723b585bab5899a304) +- [Deps] update `define-properties`, `es-abstract` [`8d9a7bf`](https://github.com/es-shims/String.prototype.trimStart/commit/8d9a7bf123f320799211dd57aa0c832aaafb8a19) + ## [v1.0.6](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.5...v1.0.6) - 2022-11-07 ### Commits diff --git a/node_modules/string.prototype.trimstart/index.js b/node_modules/string.prototype.trimstart/index.js index 6aba38207e..ce41c888ce 100644 --- a/node_modules/string.prototype.trimstart/index.js +++ b/node_modules/string.prototype.trimstart/index.js @@ -2,7 +2,7 @@ var callBind = require('call-bind'); var define = require('define-properties'); -var RequireObjectCoercible = require('es-abstract/2022/RequireObjectCoercible'); +var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); var implementation = require('./implementation'); var getPolyfill = require('./polyfill'); diff --git a/node_modules/string.prototype.trimstart/package.json b/node_modules/string.prototype.trimstart/package.json index 5261260019..1ee04f793b 100644 --- a/node_modules/string.prototype.trimstart/package.json +++ b/node_modules/string.prototype.trimstart/package.json @@ -1,6 +1,6 @@ { "name": "string.prototype.trimstart", - "version": "1.0.6", + "version": "1.0.8", "author": "Jordan Harband ", "contributors": [ "Jordan Harband ", @@ -45,18 +45,18 @@ "tc39" ], "devDependencies": { - "@es-shims/api": "^2.2.3", - "@ljharb/eslint-config": "^21.0.0", - "aud": "^2.0.1", + "@es-shims/api": "^2.4.2", + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "functions-have-names": "^1.2.3", "has-strict-mode": "^1.0.1", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.1" + "tape": "^5.7.5" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -67,13 +67,16 @@ "hideCredit": true }, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "publishConfig": { "ignore": [ ".github/workflows" ] + }, + "engines": { + "node": ">= 0.4" } } diff --git a/node_modules/typed-array-buffer/CHANGELOG.md b/node_modules/typed-array-buffer/CHANGELOG.md index b4f34e40b3..5a71f712eb 100644 --- a/node_modules/typed-array-buffer/CHANGELOG.md +++ b/node_modules/typed-array-buffer/CHANGELOG.md @@ -5,6 +5,24 @@ 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.2](https://github.com/ljharb/typed-array-buffer/compare/v1.0.1...v1.0.2) - 2024-02-19 + +### Commits + +- add types [`23c6fba`](https://github.com/ljharb/typed-array-buffer/commit/23c6fba167dbc8c1e9291eed3f68e64a5651075a) +- [Deps] update `available-typed-arrays` [`5f68ba1`](https://github.com/ljharb/typed-array-buffer/commit/5f68ba1fdcd004af46d529fbb08220de2254cf43) +- [Deps] update `call-bind` [`54a92ce`](https://github.com/ljharb/typed-array-buffer/commit/54a92ce4caf023c8680ffe64534ba881b78cdc17) +- [Dev Deps] update `tape` [`b0b3342`](https://github.com/ljharb/typed-array-buffer/commit/b0b3342bcbefae5f3dff01b0e3734b08ca927f58) + +## [v1.0.1](https://github.com/ljharb/typed-array-buffer/compare/v1.0.0...v1.0.1) - 2024-02-06 + +### Commits + +- [Dev Deps] update `aud`, `available-typed-arrays`, `npmignore`, `object-inspect`, `tape` [`5334477`](https://github.com/ljharb/typed-array-buffer/commit/53344773866f35820dc4deef1aa47ec7890f2b02) +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`e2511e0`](https://github.com/ljharb/typed-array-buffer/commit/e2511e011a2331bd4a36ad6003a98b1cf766bc26) +- [Deps] update `call-bind`, `get-intrinsic`, `is-typed-array` [`36c3b11`](https://github.com/ljharb/typed-array-buffer/commit/36c3b11efc9bce98de8bee5f81dcae4305876893) +- [meta] add `sideEffects` flag [`46cc1f4`](https://github.com/ljharb/typed-array-buffer/commit/46cc1f4a8b8875fc6e84b33182602ec37655bbbd) + ## v1.0.0 - 2023-06-05 ### Commits diff --git a/node_modules/typed-array-buffer/index.d.ts b/node_modules/typed-array-buffer/index.d.ts new file mode 100644 index 0000000000..a116df5773 --- /dev/null +++ b/node_modules/typed-array-buffer/index.d.ts @@ -0,0 +1,16 @@ +type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + +declare function typedArrayBuffer(x: TypedArray): ArrayBuffer; + +export = typedArrayBuffer; diff --git a/node_modules/typed-array-buffer/index.js b/node_modules/typed-array-buffer/index.js index 34939d519b..20651d3022 100644 --- a/node_modules/typed-array-buffer/index.js +++ b/node_modules/typed-array-buffer/index.js @@ -1,8 +1,6 @@ 'use strict'; -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); +var $TypeError = require('es-errors/type'); var callBound = require('call-bind/callBound'); @@ -10,6 +8,7 @@ var $typedArrayBuffer = callBound('TypedArray.prototype.buffer', true); var isTypedArray = require('is-typed-array'); +/** @type {import('.')} */ // node <= 0.10, < 0.11.4 has a nonconfigurable own property instead of a prototype getter module.exports = $typedArrayBuffer || function typedArrayBuffer(x) { if (!isTypedArray(x)) { diff --git a/node_modules/typed-array-buffer/package.json b/node_modules/typed-array-buffer/package.json index 4fcd276700..2a2214457c 100644 --- a/node_modules/typed-array-buffer/package.json +++ b/node_modules/typed-array-buffer/package.json @@ -1,12 +1,13 @@ { "name": "typed-array-buffer", - "version": "1.0.0", + "version": "1.0.2", "description": "Get the ArrayBuffer out of a TypedArray, robustly.", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "prepublishOnly": "safe-publish-latest", @@ -35,24 +36,30 @@ }, "homepage": "https://github.com/ljharb/typed-array-buffer#readme", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "devDependencies": { "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.2", + "@types/call-bind": "^1.0.5", + "@types/es-value-fixtures": "^1.4.4", + "@types/for-each": "^0.3.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", - "available-typed-arrays": "^1.0.5", + "available-typed-arrays": "^1.0.7", "es-value-fixtures": "^1.4.2", "eslint": "=8.8.0", "for-each": "^0.3.3", "in-publish": "^2.0.1", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" + "tape": "^5.7.5", + "typescript": "next" }, "engines": { "node": ">= 0.4" diff --git a/node_modules/typed-array-buffer/test/index.js b/node_modules/typed-array-buffer/test/index.js index 57247be00f..9596317edf 100644 --- a/node_modules/typed-array-buffer/test/index.js +++ b/node_modules/typed-array-buffer/test/index.js @@ -9,7 +9,8 @@ var inspect = require('object-inspect'); var typedArrayBuffer = require('../'); test('typedArrayBuffer', function (t) { - forEach(v.primitives.concat(v.objects), function (nonTA) { + // @ts-expect-error TS sucks at concat + forEach([].concat(v.primitives, v.objects), function (nonTA) { t['throws'](function () { typedArrayBuffer(nonTA); }, TypeError, inspect(nonTA) + ' is not a Typed Array'); }); diff --git a/node_modules/typed-array-buffer/tsconfig.json b/node_modules/typed-array-buffer/tsconfig.json new file mode 100644 index 0000000000..210a0000c0 --- /dev/null +++ b/node_modules/typed-array-buffer/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": ["types"], /* Specify multiple folders that act like `./node_modules/@types`. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow `import x from y` when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/typed-array-byte-length/CHANGELOG.md b/node_modules/typed-array-byte-length/CHANGELOG.md index 67c5ee42a9..1122f83e82 100644 --- a/node_modules/typed-array-byte-length/CHANGELOG.md +++ b/node_modules/typed-array-byte-length/CHANGELOG.md @@ -5,6 +5,17 @@ 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/typed-array-byte-length/compare/v1.0.0...v1.0.1) - 2024-02-20 + +### Commits + +- add types [`3144671`](https://github.com/inspect-js/typed-array-byte-length/commit/3144671ca4035136c558a107ce61af255ae3e858) +- [actions] skip ls check on node < 10; remove redundant finisher [`0f83947`](https://github.com/inspect-js/typed-array-byte-length/commit/0f83947bfe641fd87253330a6a83e8b7571e5c6a) +- [Refactor] use `gopd` [`507b948`](https://github.com/inspect-js/typed-array-byte-length/commit/507b948f9e754ad5b0888a15558448ec879c04c4) +- [Dev Deps] update `aud`, `available-typed-arrays`, `npmignore`, `object-inspect`, `tape` [`aba282d`](https://github.com/inspect-js/typed-array-byte-length/commit/aba282da3a3e16f648ceb4bc4f174cf4942a94e9) +- [Deps] update `call-bind`, `has-proto`, `is-typed-array` [`acfe4a9`](https://github.com/inspect-js/typed-array-byte-length/commit/acfe4a9081f35cea3b450b07a4736e1ab037a708) +- [meta] add `sideEffects` flag [`063a8a7`](https://github.com/inspect-js/typed-array-byte-length/commit/063a8a7ec8c134a012903531beccfc4418f701d0) + ## v1.0.0 - 2023-07-14 ### Commits diff --git a/node_modules/typed-array-byte-length/index.d.ts b/node_modules/typed-array-byte-length/index.d.ts new file mode 100644 index 0000000000..ed2524abf8 --- /dev/null +++ b/node_modules/typed-array-byte-length/index.d.ts @@ -0,0 +1,17 @@ +type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + +declare function typedArrayByteLength(value: TypedArray): number; +declare function typedArrayByteLength(value: unknown): false; + +export = typedArrayByteLength; \ No newline at end of file diff --git a/node_modules/typed-array-byte-length/index.js b/node_modules/typed-array-byte-length/index.js index 7b23cf2c30..a1d4e52cdf 100644 --- a/node_modules/typed-array-byte-length/index.js +++ b/node_modules/typed-array-byte-length/index.js @@ -1,16 +1,23 @@ 'use strict'; -var forEach = require('for-each'); var callBind = require('call-bind'); +var forEach = require('for-each'); +var gOPD = require('gopd'); +var hasProto = require('has-proto')(); +var isTypedArray = require('is-typed-array'); var typedArrays = require('available-typed-arrays')(); +/** @typedef {Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array} TypedArray */ +/** @typedef {import('possible-typed-array-names')[number]} TypedArrayNames */ +/** @typedef {(value: TypedArray) => number} Getter */ + +/** @type {Object.} */ var getters = {}; -var hasProto = require('has-proto')(); -var gOPD = Object.getOwnPropertyDescriptor; var oDP = Object.defineProperty; if (gOPD) { + /** @type {Getter} */ var getByteLength = function (x) { return x.byteLength; }; @@ -18,9 +25,12 @@ if (gOPD) { // In Safari 7, Typed Array constructors are typeof object if (typeof global[typedArray] === 'function' || typeof global[typedArray] === 'object') { var Proto = global[typedArray].prototype; + // @ts-expect-error TS doesn't narrow properly inside callbacks var descriptor = gOPD(Proto, 'byteLength'); if (!descriptor && hasProto) { + // @ts-expect-error hush, TS, every object has a dunder proto var superProto = Proto.__proto__; // eslint-disable-line no-proto + // @ts-expect-error TS doesn't narrow properly inside callbacks descriptor = gOPD(superProto, 'byteLength'); } // Opera 12.16 has a magic byteLength data property on instances AND on Proto @@ -29,6 +39,7 @@ if (gOPD) { } else if (oDP) { // this is likely an engine where instances have a magic byteLength data property var arr = new global[typedArray](2); + // @ts-expect-error TS doesn't narrow properly inside callbacks descriptor = gOPD(arr, 'byteLength'); if (descriptor && descriptor.configurable) { oDP(arr, 'length', { value: 3 }); @@ -41,9 +52,10 @@ if (gOPD) { }); } +/** @type {Getter} */ var tryTypedArrays = function tryAllTypedArrays(value) { - var foundByteLength; - forEach(getters, function (getter) { + /** @type {number} */ var foundByteLength; + forEach(getters, /** @type {(getter: Getter) => void} */ function (getter) { if (typeof foundByteLength !== 'number') { try { var byteLength = getter(value); @@ -53,11 +65,11 @@ var tryTypedArrays = function tryAllTypedArrays(value) { } catch (e) {} } }); + // @ts-expect-error TS can't guarantee the callback is invoked sync return foundByteLength; }; -var isTypedArray = require('is-typed-array'); - +/** @type {import('.')} */ module.exports = function typedArrayByteLength(value) { if (!isTypedArray(value)) { return false; diff --git a/node_modules/typed-array-byte-length/package.json b/node_modules/typed-array-byte-length/package.json index 175912aba1..d6452bf6c1 100644 --- a/node_modules/typed-array-byte-length/package.json +++ b/node_modules/typed-array-byte-length/package.json @@ -1,12 +1,14 @@ { "name": "typed-array-byte-length", - "version": "1.0.0", + "version": "1.0.1", "description": "Robustly get the byte length of a Typed Array", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "types": "./index.d.ts", + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "prepublishOnly": "safe-publish-latest", @@ -14,6 +16,7 @@ "pretest": "npm run lint", "prelint": "evalmd README.md", "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", "tests-only": "nyc tape 'test/**/*.js'", "test": "npm run tests-only", "posttest": "aud --production", @@ -54,27 +57,37 @@ }, "homepage": "https://github.com/inspect-js/typed-array-byte-length#readme", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "devDependencies": { "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.2", + "@types/call-bind": "^1.0.5", + "@types/for-each": "^0.3.3", + "@types/gopd": "^1.0.3", + "@types/is-callable": "^1.1.2", + "@types/make-arrow-function": "^1.2.2", + "@types/make-generator-function": "^2.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", - "available-typed-arrays": "^1.0.5", + "available-typed-arrays": "^1.0.7", "eslint": "=8.8.0", "evalmd": "^0.0.19", "in-publish": "^2.0.1", "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" + "tape": "^5.7.5", + "typescript": "next" }, "engines": { "node": ">= 0.4" diff --git a/node_modules/typed-array-byte-length/test/index.js b/node_modules/typed-array-byte-length/test/index.js index b9a2f3e1fb..5763075c93 100644 --- a/node_modules/typed-array-byte-length/test/index.js +++ b/node_modules/typed-array-byte-length/test/index.js @@ -11,6 +11,7 @@ var availableTypedArrays = require('available-typed-arrays')(); test('not arrays', function (t) { t.test('non-number/string primitives', function (st) { + // @ts-expect-error st.equal(false, typedArrayByteLength(), 'undefined is not typed array'); st.equal(false, typedArrayByteLength(null), 'null is not typed array'); st.equal(false, typedArrayByteLength(false), 'false is not typed array'); diff --git a/node_modules/typed-array-byte-length/tsconfig.json b/node_modules/typed-array-byte-length/tsconfig.json new file mode 100644 index 0000000000..2002ce5a53 --- /dev/null +++ b/node_modules/typed-array-byte-length/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/typed-array-byte-offset/CHANGELOG.md b/node_modules/typed-array-byte-offset/CHANGELOG.md index b209037d5d..0e01d0e8a6 100644 --- a/node_modules/typed-array-byte-offset/CHANGELOG.md +++ b/node_modules/typed-array-byte-offset/CHANGELOG.md @@ -5,6 +5,24 @@ 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.2](https://github.com/inspect-js/typed-array-byte-offset/compare/v1.0.1...v1.0.2) - 2024-02-20 + +### Commits + +- add types [`9eecdd2`](https://github.com/inspect-js/typed-array-byte-offset/commit/9eecdd245b089610d6ad49ef63c9df2b58c3e8a6) +- [actions] skip ls check on node < 10; remove redundant finisher [`4fb4c91`](https://github.com/inspect-js/typed-array-byte-offset/commit/4fb4c912f5eb8034f4e3705b30f3f7dcc7080039) +- [Deps] update `available-typed-arrays`, `has-proto` [`805cee2`](https://github.com/inspect-js/typed-array-byte-offset/commit/805cee207d73e12d526ff23d2c161f38283a1ed9) + +## [v1.0.1](https://github.com/inspect-js/typed-array-byte-offset/compare/v1.0.0...v1.0.1) - 2024-02-17 + +### Commits + +- [Dev Deps] update `aud`, `npmignore`, `object-inspect`, `tape` [`ffe7494`](https://github.com/inspect-js/typed-array-byte-offset/commit/ffe7494826fbb6d6bd11c40e03619b12a4ec2266) +- [Deps] update `available-typed-arrays`, `call-bind`, `is-typed-array` [`3006bd7`](https://github.com/inspect-js/typed-array-byte-offset/commit/3006bd7e343d191093802473277801d12bfdc7b2) +- [Refactor] use `gopd` [`45827ea`](https://github.com/inspect-js/typed-array-byte-offset/commit/45827ea7d9709cb1b3a9f2313eed76b71052b9c5) +- [Dev Deps] update `tape` [`e33d080`](https://github.com/inspect-js/typed-array-byte-offset/commit/e33d080ef6488b5f15afe1078a9e5711d9656538) +- [meta] add `sideEffects` flag [`f1dc0db`](https://github.com/inspect-js/typed-array-byte-offset/commit/f1dc0db73c1c4b93c15076602a3e30353878312c) + ## v1.0.0 - 2023-06-06 ### Commits diff --git a/node_modules/typed-array-byte-offset/index.d.ts b/node_modules/typed-array-byte-offset/index.d.ts new file mode 100644 index 0000000000..87647ef0c8 --- /dev/null +++ b/node_modules/typed-array-byte-offset/index.d.ts @@ -0,0 +1,17 @@ +type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + +declare function typedArrayByteOffset(value: TypedArray): number; +declare function typedArrayByteOffset(value: unknown): false; + +export = typedArrayByteOffset; diff --git a/node_modules/typed-array-byte-offset/index.js b/node_modules/typed-array-byte-offset/index.js index 5e5068872b..cdf94c3504 100644 --- a/node_modules/typed-array-byte-offset/index.js +++ b/node_modules/typed-array-byte-offset/index.js @@ -5,12 +5,17 @@ var callBind = require('call-bind'); var typedArrays = require('available-typed-arrays')(); +/** @typedef {Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array} TypedArray */ +/** @typedef {(x: TypedArray) => number} ByteOffsetGetter */ + +/** @type {Object.} */ var getters = {}; var hasProto = require('has-proto')(); -var gOPD = Object.getOwnPropertyDescriptor; +var gOPD = require('gopd'); var oDP = Object.defineProperty; if (gOPD) { + /** @type {ByteOffsetGetter} */ var getByteOffset = function (x) { return x.byteOffset; }; @@ -18,9 +23,12 @@ if (gOPD) { // In Safari 7, Typed Array constructors are typeof object if (typeof global[typedArray] === 'function' || typeof global[typedArray] === 'object') { var Proto = global[typedArray].prototype; + // @ts-expect-error TS can't guarantee the callback is invoked sync var descriptor = gOPD(Proto, 'byteOffset'); if (!descriptor && hasProto) { + // @ts-expect-error hush, TS, every object has a dunder proto var superProto = Proto.__proto__; // eslint-disable-line no-proto + // @ts-expect-error TS can't guarantee the callback is invoked sync descriptor = gOPD(superProto, 'byteOffset'); } // Opera 12.16 has a magic byteOffset data property on instances AND on Proto @@ -29,6 +37,7 @@ if (gOPD) { } else if (oDP) { // this is likely an engine where instances have a magic byteOffset data property var arr = new global[typedArray](2); + // @ts-expect-error TS can't guarantee the callback is invoked sync descriptor = gOPD(arr, 'byteOffset'); if (descriptor && descriptor.configurable) { oDP(arr, 'length', { value: 3 }); @@ -41,9 +50,10 @@ if (gOPD) { }); } +/** @type {ByteOffsetGetter} */ var tryTypedArrays = function tryAllTypedArrays(value) { - var foundOffset; - forEach(getters, function (getter) { + /** @type {number} */ var foundOffset; + forEach(getters, /** @type {(getter: ByteOffsetGetter) => void} */ function (getter) { if (typeof foundOffset !== 'number') { try { var offset = getter(value); @@ -53,11 +63,13 @@ var tryTypedArrays = function tryAllTypedArrays(value) { } catch (e) {} } }); + // @ts-expect-error TS can't guarantee the callback is invoked sync return foundOffset; }; var isTypedArray = require('is-typed-array'); +/** @type {import('.')} */ module.exports = function typedArrayByteOffset(value) { if (!isTypedArray(value)) { return false; diff --git a/node_modules/typed-array-byte-offset/package.json b/node_modules/typed-array-byte-offset/package.json index 9ea2b2e2c2..6c113ead4c 100644 --- a/node_modules/typed-array-byte-offset/package.json +++ b/node_modules/typed-array-byte-offset/package.json @@ -1,12 +1,14 @@ { "name": "typed-array-byte-offset", - "version": "1.0.0", + "version": "1.0.2", "description": "Robustly get the byte offset of a Typed Array", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "types": "./index.d.ts", + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "prepublishOnly": "safe-publish-latest", @@ -54,15 +56,24 @@ }, "homepage": "https://github.com/inspect-js/typed-array-byte-offset#readme", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "devDependencies": { "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.2", + "@types/call-bind": "^1.0.5", + "@types/for-each": "^0.3.3", + "@types/gopd": "^1.0.3", + "@types/is-callable": "^1.1.2", + "@types/make-arrow-function": "^1.2.2", + "@types/make-generator-function": "^2.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", @@ -70,11 +81,13 @@ "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", + "possible-typed-array-names": "^1.0.0", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" + "tape": "^5.7.5", + "typescript": "^5.4.0-dev.20240219" }, "engines": { "node": ">= 0.4" diff --git a/node_modules/typed-array-byte-offset/test/index.js b/node_modules/typed-array-byte-offset/test/index.js index d366a7c620..70c61a8458 100644 --- a/node_modules/typed-array-byte-offset/test/index.js +++ b/node_modules/typed-array-byte-offset/test/index.js @@ -8,22 +8,11 @@ var arrowFn = require('make-arrow-function')(); var forEach = require('for-each'); var inspect = require('object-inspect'); -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'BigInt64Array', - 'BigUint64Array' -]; +var typedArrayNames = require('possible-typed-array-names'); test('not arrays', function (t) { t.test('non-number/string primitives', function (st) { + // @ts-expect-error st.equal(false, typedArrayByteOffset(), 'undefined is not typed array'); st.equal(false, typedArrayByteOffset(null), 'null is not typed array'); st.equal(false, typedArrayByteOffset(false), 'false is not typed array'); diff --git a/node_modules/typed-array-byte-offset/tsconfig.json b/node_modules/typed-array-byte-offset/tsconfig.json new file mode 100644 index 0000000000..2002ce5a53 --- /dev/null +++ b/node_modules/typed-array-byte-offset/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/typed-array-length/.eslintrc b/node_modules/typed-array-length/.eslintrc index c66fbb2918..bc84181cc3 100644 --- a/node_modules/typed-array-length/.eslintrc +++ b/node_modules/typed-array-length/.eslintrc @@ -5,7 +5,7 @@ "rules": { "complexity": [2, 11], - "max-statements": [2, 14], + "max-statements": [2, 15], "new-cap": [2, { "capIsNewExceptions": ["IsCallable"] }], }, } diff --git a/node_modules/typed-array-length/CHANGELOG.md b/node_modules/typed-array-length/CHANGELOG.md index a5b969fa1a..78cf55f71a 100644 --- a/node_modules/typed-array-length/CHANGELOG.md +++ b/node_modules/typed-array-length/CHANGELOG.md @@ -5,6 +5,30 @@ 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.6](https://github.com/inspect-js/typed-array-length/compare/v1.0.5...v1.0.6) - 2024-03-21 + +### Commits + +- [types] vastly improve types [`9f68d36`](https://github.com/inspect-js/typed-array-length/commit/9f68d36cdc1abeb412f47e91de289b5fb903a696) +- [types] use shared config [`b6b3cbc`](https://github.com/inspect-js/typed-array-length/commit/b6b3cbcaf8f4a46f5bcb77226d4cea2b3f62ffe2) +- [actions] remove redundant finisher [`c69896e`](https://github.com/inspect-js/typed-array-length/commit/c69896e0d71e9f6da562b9ae0eaba415e4cbff26) +- [Tests] actually check types in tests, and add attw [`e2c3f94`](https://github.com/inspect-js/typed-array-length/commit/e2c3f948bd0b898c38e1d9f63cd9702e728a7109) + +## [v1.0.5](https://github.com/inspect-js/typed-array-length/compare/v1.0.4...v1.0.5) - 2024-02-20 + +### Commits + +- add types [`df51e65`](https://github.com/inspect-js/typed-array-length/commit/df51e65a85fa6d1a98571ab30398b36ac2c981bb) +- [Refactor] use `possible-typed-array-names` for a single source of truth [`84503a3`](https://github.com/inspect-js/typed-array-length/commit/84503a3d406e8ae1cc84cf6e893cacc556be664a) +- [actions] update rebase action to use reusable workflow [`f163023`](https://github.com/inspect-js/typed-array-length/commit/f16302365bbb353b0504a41d997fa18196757c80) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `npmignore`, `object-inspect`, `tape` [`57ca930`](https://github.com/inspect-js/typed-array-length/commit/57ca93013d607c0ac46b749d8258bb341b903567) +- [Dev Deps] update `aud`, `is-callable`, `object-inspect`, `tape` [`99343f4`](https://github.com/inspect-js/typed-array-length/commit/99343f477d68f2d53597bc0cadf93e532a498138) +- [Refactor] use `gopd` and `has-proto` [`b134a5c`](https://github.com/inspect-js/typed-array-length/commit/b134a5cc4bea1666f4195d6b6c6e97617305420f) +- [Deps] update `call-bind`, `is-typed-array` [`3b62f55`](https://github.com/inspect-js/typed-array-length/commit/3b62f55cc52da8b4c9548fb8839f0e4db222ac1b) +- [meta] add missing `engines.node` [`ff3e9f7`](https://github.com/inspect-js/typed-array-length/commit/ff3e9f7b8d72c0c2d1e9c2122a701ac454e6552c) +- [Deps] update `is-typed-array` [`877f507`](https://github.com/inspect-js/typed-array-length/commit/877f507048ece8b1db6402b56d512c7eb3337ce9) +- [meta] add `sideEffects` flag [`6e91309`](https://github.com/inspect-js/typed-array-length/commit/6e913098eaca5132a3595b0653d211ffec93f2c6) + ## [v1.0.4](https://github.com/inspect-js/typed-array-length/compare/v1.0.3...v1.0.4) - 2022-05-23 ### Commits diff --git a/node_modules/typed-array-length/index.d.ts b/node_modules/typed-array-length/index.d.ts new file mode 100644 index 0000000000..13cf2d2023 --- /dev/null +++ b/node_modules/typed-array-length/index.d.ts @@ -0,0 +1,23 @@ +import type names from 'possible-typed-array-names'; + +declare function typedArrayLength(value: typedArrayLength.TypedArray): number; +declare function typedArrayLength(value: unknown): false; + +declare namespace typedArrayLength { + type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + + type TypedArrayName = typeof names[number]; +} + +export = typedArrayLength; diff --git a/node_modules/typed-array-length/index.js b/node_modules/typed-array-length/index.js index f78eb66f17..4351dc4fd6 100644 --- a/node_modules/typed-array-length/index.js +++ b/node_modules/typed-array-length/index.js @@ -1,60 +1,63 @@ 'use strict'; -var forEach = require('for-each'); +// / + var callBind = require('call-bind'); +var forEach = require('for-each'); +var gOPD = require('gopd'); +var hasProto = require('has-proto')(); +var isTypedArray = require('is-typed-array'); +var typedArrays = require('possible-typed-array-names'); -var typedArrays = [ - 'Float32Array', - 'Float64Array', - 'Int8Array', - 'Int16Array', - 'Int32Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Uint16Array', - 'Uint32Array', - 'BigInt64Array', - 'BigUint64Array' -]; +/** @typedef {(value: import('.').TypedArray) => number} TypedArrayLengthGetter */ +/** @typedef {{ [k in `$${import('.').TypedArrayName}` | '__proto__']: k extends '__proto__' ? null : TypedArrayLengthGetter }} Cache */ -var getters = {}; -var hasProto = [].__proto__ === Array.prototype; // eslint-disable-line no-proto -var gOPD = Object.getOwnPropertyDescriptor; +/** @type {Cache} */ +// @ts-expect-error TS doesn't seem to have a "will eventually satisfy" type +var getters = { __proto__: null }; var oDP = Object.defineProperty; if (gOPD) { - var getLength = function (x) { + var getLength = /** @type {TypedArrayLengthGetter} */ function (x) { return x.length; }; - forEach(typedArrays, function (typedArray) { + forEach(typedArrays, /** @type {(typedArray: import('.').TypedArrayName) => void} */ function (typedArray) { + var TA = global[typedArray]; // In Safari 7, Typed Array constructors are typeof object - if (typeof global[typedArray] === 'function' || typeof global[typedArray] === 'object') { - var Proto = global[typedArray].prototype; + if (typeof TA === 'function' || typeof TA === 'object') { + var Proto = TA.prototype; + // @ts-expect-error TS doesn't narrow types inside callbacks, which is weird var descriptor = gOPD(Proto, 'length'); if (!descriptor && hasProto) { var superProto = Proto.__proto__; // eslint-disable-line no-proto + // @ts-expect-error TS doesn't narrow types inside callbacks, which is weird descriptor = gOPD(superProto, 'length'); } // Opera 12.16 has a magic length data property on instances AND on Proto if (descriptor && descriptor.get) { - getters[typedArray] = callBind(descriptor.get); + // eslint-disable-next-line no-extra-parens + getters[/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)] = callBind(descriptor.get); } else if (oDP) { // this is likely an engine where instances have a magic length data property var arr = new global[typedArray](2); + // @ts-expect-error TS doesn't narrow types inside callbacks, which is weird descriptor = gOPD(arr, 'length'); if (descriptor && descriptor.configurable) { oDP(arr, 'length', { value: 3 }); } if (arr.length === 2) { - getters[typedArray] = getLength; + // eslint-disable-next-line no-extra-parens + getters[/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)] = getLength; } } } }); } +/** @type {TypedArrayLengthGetter} */ var tryTypedArrays = function tryAllTypedArrays(value) { - var foundLength; - forEach(getters, function (getter) { + /** @type {number} */ var foundLength; + // @ts-expect-error not sure why this won't work + forEach(getters, /** @type {(getter: TypedArrayLengthGetter) => void} */ function (getter) { if (typeof foundLength !== 'number') { try { var length = getter(value); @@ -64,11 +67,11 @@ var tryTypedArrays = function tryAllTypedArrays(value) { } catch (e) {} } }); + // @ts-expect-error TS can't guarantee the above callback is invoked sync return foundLength; }; -var isTypedArray = require('is-typed-array'); - +/** @type {import('.')} */ module.exports = function typedArrayLength(value) { if (!isTypedArray(value)) { return false; diff --git a/node_modules/typed-array-length/package.json b/node_modules/typed-array-length/package.json index a6c7a57ffa..2f99559298 100644 --- a/node_modules/typed-array-length/package.json +++ b/node_modules/typed-array-length/package.json @@ -1,12 +1,14 @@ { "name": "typed-array-length", - "version": "1.0.4", + "version": "1.0.6", "description": "Robustly get the length of a Typed Array", "main": "index.js", "exports": { ".": "./index.js", "./package.json": "./package.json" }, + "types": "./index.d.ts", + "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "prepublishOnly": "safe-publish-latest", @@ -14,6 +16,7 @@ "pretest": "npm run lint", "prelint": "evalmd README.md", "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", "tests-only": "nyc tape 'test/**/*.js'", "test:harmony": "nyc node --harmony --es-staging test", "test": "npm run tests-only && npm run test:harmony", @@ -51,19 +54,31 @@ }, "homepage": "https://github.com/inspect-js/typed-array-length#readme", "devDependencies": { - "@ljharb/eslint-config": "^21.0.0", - "aud": "^2.0.0", + "@arethetypeswrong/cli": "^0.15.2", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.2.0", + "@types/call-bind": "^1.0.5", + "@types/for-each": "^0.3.3", + "@types/gopd": "^1.0.3", + "@types/is-callable": "^1.1.2", + "@types/make-arrow-function": "^1.2.2", + "@types/make-generator-function": "^2.0.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "evalmd": "^0.0.19", - "is-callable": "^1.2.4", + "in-publish": "^2.0.1", + "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", - "object-inspect": "^1.12.1", + "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.5.3" + "tape": "^5.7.5", + "typescript": "next" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -74,9 +89,12 @@ "hideCredit": true }, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "testling": { "files": "test/index.js" @@ -85,5 +103,8 @@ "ignore": [ ".github/workflows" ] + }, + "engines": { + "node": ">= 0.4" } } diff --git a/node_modules/typed-array-length/test/index.js b/node_modules/typed-array-length/test/index.js index 8852fee809..da02957527 100644 --- a/node_modules/typed-array-length/test/index.js +++ b/node_modules/typed-array-length/test/index.js @@ -7,23 +7,11 @@ var generators = require('make-generator-function')(); var arrowFn = require('make-arrow-function')(); var forEach = require('for-each'); var inspect = require('object-inspect'); - -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'BigInt64Array', - 'BigUint64Array' -]; +var typedArrayNames = require('possible-typed-array-names'); test('not arrays', function (t) { t.test('non-number/string primitives', function (st) { + // @ts-expect-error st.equal(false, typedArrayLength(), 'undefined is not typed array'); st.equal(false, typedArrayLength(null), 'null is not typed array'); st.equal(false, typedArrayLength(false), 'false is not typed array'); @@ -72,6 +60,7 @@ test('Arrow functions', { skip: !arrowFn }, function (t) { test('Typed Arrays', function (t) { forEach(typedArrayNames, function (typedArray) { + /** @type {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor | BigInt64ArrayConstructor | BigUint64ArrayConstructor} */ var TypedArray = global[typedArray]; if (isCallable(TypedArray)) { var length = 10; diff --git a/node_modules/typed-array-length/tsconfig.json b/node_modules/typed-array-length/tsconfig.json new file mode 100644 index 0000000000..b9fbbf12f8 --- /dev/null +++ b/node_modules/typed-array-length/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ES2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/typescript/lib/cs/diagnosticMessages.generated.json b/node_modules/typescript/lib/cs/diagnosticMessages.generated.json index 1df80098b9..f9a9d190b5 100644 --- a/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/cs/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "VŠECHNY MOŽNOSTI KOMPILÁTORU", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modifikátor {0} nejde použít s deklarací import.", "A_0_parameter_must_be_the_first_parameter_2680": "Parametr {0} musí být prvním parametrem.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Značka „@template“ jazyka JSDoc nemůže následovat po značce „@typedef“, „@callback“ nebo „@overload“.", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentář JSDoc @typedef nemůže obsahovat více než jednu značku @type.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literál „bigint“ nelze použít jako název vlastnosti.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Literál typu bigint nemůže používat exponenciální notaci.", "A_bigint_literal_must_be_an_integer_1353": "Literál typu bigint musí být celé číslo.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr vzoru vazby nemůže být u podpisu implementace nepovinný.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Příkaz break se dá použít jenom uvnitř nadřazené iterace nebo příkazu switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Příkaz break může skočit jenom na popisek nadřazeného příkazu.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Třída znaků nesmí obsahovat vyhrazené dvojité interpunkční znaménko. Nechtěli jste ho uvést zpětným lomítkem?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Rozsah třídy znaků nesmí být ohraničen jinou třídou znaků.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Třída může implementovat jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Třída může implementovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Třída nemůže rozšiřovat primitivní typ, jako je například „{0}“. Třídy můžou rozšiřovat pouze konstruovatelné hodnoty.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Třída nemůže implementovat primitivní typ, jako je například „{0}“. Může implementovat pouze jiné typy pojmenovaných objektů.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklarace třídy bez modifikátoru default musí mít název.", "A_class_member_cannot_have_the_0_keyword_1248": "Člen třídy nemůže mít klíčové slovo {0}.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Výraz s čárkou není v názvu počítané vlastnosti povolený.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nemůže mít parametr this.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Příkaz continue se dá použít jenom uvnitř příkazu nadřazené iterace.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Příkaz continue může přejít jenom na popisek příkazu nadřazené iterace.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Soubor deklarace nelze importovat bez hodnoty „import type“. Nechtěli jste místo toho importovat soubor implementace „{0}“?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Modifikátor declare se nedá použít v kontextu, který už je ambientní.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorátor může dekorovat jenom implementaci metody, ne přetížení.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzule default nemůže být v příkazu switch víc než jednou.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Výchozí export musí být na nejvyšší úrovni deklarace souboru nebo modulu.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Určitý kontrolní výraz přiřazení '!' není v tomto kontextu povolený.", "A_destructuring_declaration_must_have_an_initializer_1182": "Destrukturační deklarace musí obsahovat inicializátor.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Volání dynamického importu v ES5/ES3 vyžaduje konstruktor ‚Promise‘. Ujistěte se, že máte deklaraci konstruktoru ‚Promise‘, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Volání dynamického importu v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Volání dynamického importu vrací hodnotu ‚Promise‘. Ujistěte se, že pro ni máte deklaraci, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.", "A_file_cannot_have_a_reference_to_itself_1006": "Soubor nemůže odkazovat sám na sebe.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkce, která vrací hodnotu never, nemůže mít dosažitelný koncový bod.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkce volaná klíčovým slovem new nemůže mít typ this, který je void.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Funkce, jejíž deklarovaný typ není void ani any, musí vracet hodnotu.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkce, jejíž deklarovaný typ není „undefined“, „void“ ani „any“, musí vracet hodnotu.", "A_generator_cannot_have_a_void_type_annotation_2505": "Generátor nemůže mít anotaci typu void.", "A_get_accessor_cannot_have_parameters_1054": "Přístupový objekt get nemůže obsahovat parametry.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Přístupový objekt get musí být alespoň tak přístupný jako metoda setter.", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklarace oboru názvů nemůže být v jiném souboru než třída nebo funkce, se kterou se slučuje.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklarace oboru názvů nemůže být umístěná před třídou nebo funkcí, se kterou se slučuje.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklarace oboru názvů je povolená pouze na nejvyšší úrovni oboru názvů nebo v modulu.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklarace namespace by se neměla deklarovat pomocí klíčového slova module. Místo toho prosím použijte klíčové slovo namespace.", "A_non_dry_build_would_build_project_0_6357": "Build bez příznaku -dry by vytvořil projekt {0}.", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Build bez příznaku -dry by odstranil následující soubory: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Build bez příznaku -dry by aktualizoval výstup projektu {0}.", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Build bez příznaku -dry by aktualizoval časová razítka pro výstup projektu {0}.", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicializátor parametru je povolený jenom v implementaci funkce nebo konstruktoru.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Vlastnost parametru se nedá deklarovat pomocí parametru rest.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Volání super musí být prvním příkazem v konstruktoru, který odkazuje na super nebo toto, když odvozená třída obsahuje inicializované vlastnosti, vlastnosti parametrů nebo soukromé identifikátory.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrana typu this není kompatibilní s ochranou typu založeného na parametru.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ this je k dispozici jenom v nestatických členech třídy nebo rozhraní.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modifikátor „export“ nejvyšší úrovně nelze použít pro deklarace hodnot v modulu CommonJS, když je povolený modifikátor „verbatimModuleSyntax“.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Soubor tsconfig.json je už v {0} definovaný.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Člen řazené kolekce členů nemůže být volitelný a zbytek.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Typ řazené kolekce členů není možné indexovat zápornou hodnotou.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Výraz yield je povolený jenom v těle generátoru.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "K abstraktní metodě {0} ve třídě {1} nejde získat přístup prostřednictvím výrazu super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstraktní metody se můžou vyskytovat jenom v abstraktní třídě.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstraktní vlastnosti se můžou vyskytovat jenom v abstraktní třídě.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "K abstraktní vlastnosti {0} ve třídě {1} nelze získat přístup v konstruktoru.", "Accessibility_modifier_already_seen_1028": "Modifikátor dostupnosti se už jednou vyskytl.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Přístupové objekty jsou dostupné, jenom když je cílem ECMAScript 5 a vyšší verze.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Přistupující objekty musí být abstraktní nebo neabstraktní.", "Add_0_to_unresolved_variable_90008": "Přidat {0}. k nerozpoznané proměnné", "Add_a_return_statement_95111": "Přidat příkaz return", + "Add_a_return_type_to_the_function_declaration_9031": "Přidejte návratový typ do deklarace funkce.", + "Add_a_return_type_to_the_function_expression_9030": "Přidejte návratový typ do výrazu funkce.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Přidejte návratový typ do deklarace přistupujícího objektu get.", + "Add_a_return_type_to_the_method_9034": "Přidejte do metody návratový typ.", + "Add_a_type_annotation_to_the_parameter_0_9028": "Přidejte anotaci typu k parametru „{0}“.", + "Add_a_type_annotation_to_the_property_0_9029": "Přidejte anotaci typu k vlastnosti „{0}“.", + "Add_a_type_annotation_to_the_variable_0_9027": "Přidejte anotaci typu k proměnné „{0}“.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Přidejte typ k parametru deklarace přistupujícího objektu set.", "Add_all_missing_async_modifiers_95041": "Přidat všechny chybějící modifikátory async", "Add_all_missing_attributes_95168": "Přidat všechny chybějící atributy", "Add_all_missing_call_parentheses_95068": "Přidat všechny chybějící závorky volání", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Přidat všechny chybějící importy", "Add_all_missing_members_95022": "Přidat všechny chybějící členy", "Add_all_missing_override_modifiers_95162": "Přidat všechny chybějící modifikátory override", + "Add_all_missing_parameters_95190": "Přidejte všechny chybějící parametry.", "Add_all_missing_properties_95166": "Přidat všechny chybějící importy", "Add_all_missing_return_statement_95114": "Přidat všechny chybějící příkazy return", "Add_all_missing_super_calls_95039": "Přidat všechna chybějící volání pomocí super", + "Add_all_missing_type_annotations_90067": "Přidejte všechny chybějící anotace typů.", + "Add_all_optional_parameters_95193": "Přidejte všechny volitelné parametry.", + "Add_annotation_of_type_0_90062": "Přidejte anotaci typu „{0}“.", "Add_async_modifier_to_containing_function_90029": "Přidat modifikátor async do obsahující funkce", "Add_await_95083": "Přidat await", "Add_await_to_initializer_for_0_95084": "Přidat await do inicializátoru pro {0}", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Přidat inicializátory do všech neinicializovaných vlastností", "Add_missing_attributes_95167": "Přidat chybějící atributy", "Add_missing_call_parentheses_95067": "Přidat chybějící závorky volání", + "Add_missing_comma_for_object_member_completion_0_95187": "Přidejte chybějící čárku pro dokončování členů objektu „{0}“.", "Add_missing_enum_member_0_95063": "Přidat chybějící člen výčtu {0}", "Add_missing_function_declaration_0_95156": "Přidat chybějící deklaraci funkce {0}", "Add_missing_new_operator_to_all_calls_95072": "Přidat chybějící operátor new ke všem voláním", "Add_missing_new_operator_to_call_95071": "Přidat chybějící operátor new k volání", + "Add_missing_parameter_to_0_95188": "Přidejte chybějící parametr do „{0}“.", + "Add_missing_parameters_to_0_95189": "Přidejte chybějící parametry do „{0}“.", "Add_missing_properties_95165": "Přidat chybějící vlastnosti", "Add_missing_super_call_90001": "Přidat chybějící volání metody super()", "Add_missing_typeof_95052": "Přidat chybějící typeof", "Add_names_to_all_parameters_without_names_95073": "Přidat názvy do všech parametrů bez názvů", + "Add_optional_parameter_to_0_95191": "Přidejte volitelný parametr do „{0}“", + "Add_optional_parameters_to_0_95192": "Přidat volitelné parametry do {0}", "Add_or_remove_braces_in_an_arrow_function_95058": "Přidat nebo odebrat složené závorky ve funkci šipky", "Add_override_modifier_95160": "Přidat modifikátor override", "Add_parameter_name_90034": "Přidat název parametru", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Přidat kvalifikátor do všech nerozpoznaných proměnných odpovídajících názvu členu", + "Add_return_type_0_90063": "Přidejte návratový typ „{0}“", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Chcete-li typ nastavit jako explicitní, přidejte do tohoto výrazu operátor „satisfies“ a kontrolní výraz typu („satisfies T as T“).", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Přidejte operátor „satisfies“ a kontrolní výraz vloženého typu s „{0}“.", "Add_to_all_uncalled_decorators_95044": "Přidat () do všech nevolaných dekorátorů", "Add_ts_ignore_to_all_error_messages_95042": "Přidat @ts-ignore do všech chybových zpráv", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Pokud k přístupu používáte index, přidejte k typu řetězec undefined.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Povolte výchozí importy z modulů bez výchozího exportu. Nebude to mít vliv na generování kódu, jenom na kontrolu typů.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Pokud modul nemá výchozí export, povolte import X z Y.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Povolte import pomocných funkcí z knihovny tslib jednou za celý projekt místo jejich zahrnutí do každého souboru.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Povolte, aby importy zahrnovaly přípony souborů TypeScriptu. Vyžaduje nastavení možnosti „--moduleResolution bundler“ a buď „--noEmit“, nebo „--emitDeclarationOnly“.", "Allow_javascript_files_to_be_compiled_6102": "Povolí kompilaci souborů javascript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Při řešení modulů povolit, aby se s více složkami zacházelo jako s jednou.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Název souboru {0}, který se už zahrnul, se od názvu souboru {1} liší jen ve velkých a malých písmenech.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Neposkytl se argument, který by odpovídal tomuto vzoru vazby.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetický operand musí být typu any, number, bigint nebo typu výčtu.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkce šipky nemůže mít parametr this.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchronní funkce nebo metoda v ES5/ES3 vyžaduje konstruktor ‚Promise‘. Ujistěte se, že máte deklaraci konstruktoru ‚Promise‘, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchronní funkce nebo metoda v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchronní funkce nebo metoda musí vracet hodnotu ‚Promise‘. Přesvědčte se, že pro ni máte deklaraci, nebo zahrňte ‚ES2015‘ do možnosti ‚--lib‘.", "An_async_iterator_must_have_a_next_method_2519": "Asynchronní iterátor musí mít metodu next().", "An_element_access_expression_should_take_an_argument_1011": "Výraz přístupu k elementu by měl přijímat argument.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklarace exportu se dá použít pouze na nejvyšší úrovni modulu.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklarace exportu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", "An_export_declaration_cannot_have_modifiers_1193": "Deklarace exportu nemůže mít modifikátory.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Když je povolená možnost verbatimModuleSyntax, musí deklarace „export =“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklarace „export =“ musí odkazovat na hodnotu, když je povolená možnost „verbatimModuleSyntax“, ale „{0}“ odkazuje jenom na typ.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Když je povolená možnost verbatimModuleSyntax, musí „export default“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Pokud je povolená možnost „verbatimModuleSyntax“, musí „export default“ odkazovat na hodnotu, ale „{0}“ odkazuje jenom na typ.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Není možné testovat pravdivost výrazu typu void.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozšířená řídicí hodnota Unicode musí být mezi 0x0 a 0x10FFFF (včetně).", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identifikátor nebo klíčové slovo nemůže následovat hned po číselném literálu.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementace se nedá deklarovat v ambientních kontextech.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu se nemůže odkazovat na deklaraci, která se exportovala pomocí export type.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu se nemůže odkazovat na deklaraci, která se importovala pomocí import type.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Pokud je povolená možnost „verbatimModuleSyntax“, alias importu nelze přeložit na deklaraci typu nebo deklaraci „pouze typ“.", "An_import_alias_cannot_use_import_type_1392": "Alias importu nemůže používat import type.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklarace importu se dá použít pouze na nejvyšší úrovni modulu.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklarace importu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", "An_import_declaration_cannot_have_modifiers_1191": "Deklarace importu nemůže mít modifikátory.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Cesta pro import nemůže končit příponou {0}. Zvažte možnost importovat místo toho {1}.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Když je povolená možnost „allowImportingTsExtensions“, může cesta importu končit pouze příponou „{0}“.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Signatura indexu indexu nemůže obsahovat parametr rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Signatura indexu nemůže mít na konci čárku.", "An_index_signature_must_have_a_type_annotation_1021": "Signatura indexu musí mít anotaci typu.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po výrazu vytvoření instance nemůže následovat přístup k vlastnosti.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Rozhraní může rozšířit jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Rozhraní může rozšiřovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Rozhraní nemůže rozšířit primitivní typ, jako je {0}; rozhraní může rozšířit jenom pojmenované typy a třídy.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Rozhraní nemůže rozšiřovat primitivní typ, jako je například „{0}“. Může rozšiřovat pouze jiné typy pojmenovaných objektů.", "An_interface_property_cannot_have_an_initializer_1246": "Vlastnost rozhraní nemůže mít inicializátor.", "An_iterator_must_have_a_next_method_2489": "Iterátor musí mít metodu next().", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Při použití direktivy pragma @jsx s fragmenty JSX se vyžaduje direktiva pragma @jsxFrag.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literál objektu nemůže mít víc vlastností se stejným názvem.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literál objektu nemůže obsahovat vlastnost a přístupový objekt se stejným názvem.", "An_object_member_cannot_be_declared_optional_1162": "Člen objektu nemůže být deklarovaný jako nepovinný.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]“ objektu musí vracet logickou hodnotu, aby ji bylo možné použít na pravé straně výrazu „instanceof“.", "An_optional_chain_cannot_contain_private_identifiers_18030": "Nepovinný řetěz nemůže obsahovat privátní identifikátory.", "An_optional_element_cannot_follow_a_rest_element_1266": "Element optional nemůže následovat za elementem rest.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Tento kontejner zakrývá vnější hodnotu this.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Signatura přetížení nemůže být deklarovaný jako generátor.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unární výraz s operátorem {0} se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.", "Annotate_everything_with_types_from_JSDoc_95043": "Vše s typy z JSDoc opatřit poznámkami", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Přidejte anotace typů funkce expando ve vlastnostech v oboru názvů.", "Annotate_with_type_from_JSDoc_95009": "Přidat poznámku s typem z JSDoc", "Another_export_default_is_here_2753": "Další výchozí hodnota exportu je tady.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jakákoli vlastnost Unicode, která by mohla odpovídat více než jednomu znaku, je k dispozici pouze v případě, že je nastaven příznak Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Cokoli, co by mohlo odpovídat více než jednomu znaku, je v negované třídě znaků neplatné.", "Are_you_missing_a_semicolon_2734": "Nechybí středník?", "Argument_expression_expected_1135": "Očekává se výraz argumentu.", "Argument_for_0_option_must_be_Colon_1_6046": "Argument možnosti {0} musí být {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argument typu {0} se nedá přiřadit k parametru typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nezadaly se argumenty pro parametr rest {0}.", "Array_element_destructuring_pattern_expected_1181": "Očekával se destrukturační vzor elementu pole.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Pole s elementy spread nelze odvodit pomocí možnosti --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Kontrolní výrazy vyžadují, aby se všechny názvy v cíli volání deklarovaly s explicitní anotací typu.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Kontrolní výrazy vyžadují, aby cíl volání byl identifikátor, nebo kvalifikovaný název.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Přiřazování vlastností funkcím bez jejich deklarování není u s možností --isolatedDeclarations podporováno. Přidejte explicitní deklaraci pro vlastnosti přiřazené k této funkci.", "Asterisk_Slash_expected_1010": "Očekával se znak */.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Alespoň jeden přistupující objekt musí mít explicitní anotaci návratového typu s možností --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozšíření pro globální rozsah může být jenom přímo vnořené v externích modulech nebo deklaracích ambientního modulu.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozšíření pro globální rozsah by měla mít modifikátor declare, pokud se neobjeví v kontextu, který je už ambientní.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatické zjišťování pro psaní je povolené v projektu {0}. Spouští se speciální průchod řešení pro modul {1} prostřednictvím umístění mezipaměti {2}.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Výraz Await nejde použít uvnitř statického bloku třídy.", "BUILD_OPTIONS_6919": "MOŽNOSTI SESTAVENÍ", "Backwards_Compatibility_6253": "Zpětná kompatibilita", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Výrazy základní třídy nemůžou odkazovat na parametry typu třídy.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Když je cíl nastavený níže než ES2020, literály typu BigInt nejsou k dispozici.", "Binary_digit_expected_1177": "Očekává se binární číslice.", "Binding_element_0_implicitly_has_an_1_type_7031": "Element vazby {0} má implicitně typ {1}.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Elementy vazeb nelze exportovat přímo s možností --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Proměnná bloku {0} se používá před vlastní deklarací.", "Build_a_composite_project_in_the_working_directory_6925": "Sestavte složený projekt v pracovním adresáři.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Sestavujte všechny projekty včetně těch, které se zdají aktuální.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Sestavit jeden nebo více projektů a jejich závislosti, pokud jsou zastaralé", "Build_option_0_requires_a_value_of_type_1_5073": "Možnost buildu {0} vyžaduje hodnotu typu {1}.", "Building_project_0_6358": "Sestavuje se projekt {0}...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Instance integrovaných iterátorů jsou vytvářeny s typem „TReturn“ s hodnotou „undefined“ místo hodnoty „any“.", "COMMAND_LINE_FLAGS_6921": "PŘÍZNAKY PŘÍKAZOVÉHO ŘÁDKU", "COMMON_COMMANDS_6916": "BĚŽNÉ PŘÍKAZY", "COMMON_COMPILER_OPTIONS_6920": "BĚŽNÉ PARAMETRY KOMPILÁTORU", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Návratové typy signatury volání {0} a {1} nejsou kompatibilní.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Signatura volání s chybějící anotací návratového typu má implicitně návratový typ any.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Signatury volání bez argumentů mají nekompatibilní návratové typy {0} a {1}.", - "Call_target_does_not_contain_any_signatures_2346": "Cíl volání neobsahuje žádné signatury.", "Can_only_convert_logical_AND_access_chains_95142": "Převést se dají jen logické řetězy přístupu AND.", "Can_only_convert_named_export_95164": "Lze převést pouze pojmenovaný export ", "Can_only_convert_property_with_modifier_95137": "Převést se dá jenom vlastnost s modifikátorem.", - "Can_only_convert_string_concatenation_95154": "Lze převést pouze zřetězení řetězců.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Převést lze pouze zřetězení řetězců a řetězcové literály.", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "K {0}.{1} nelze získat přístup, protože {0} je typ, nikoli názvový prostor. Chtěli jste načíst typ vlastnosti {1} v {0} pomocí {0}[{1}]?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Když se zadá příznak --isolatedModules, nedá se získat přístup k ambientnímu konstantnímu výčtu.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Když je povolena možnost „{0}“, nelze získat přístup k „{1}“ z jiného souboru bez kvalifikace. Místo toho použijte možnost „{2}“.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Když je povolená možnost „{0}“, nelze přistupovat k výčtům prostředí „const enum“.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Typ konstruktoru {0} se nedá přiřadit k typu konstruktoru {1}.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Abstraktní typ konstruktoru nejde přiřadit neabstraktnímu typu konstruktoru.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Do {0} se nedá přiřazovat, protože je to třída.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Nepovedlo se najít definici knihovny pro {0}.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nepovedlo se najít definici knihovny pro {0}. Neměli jste na mysli spíš {1}?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nepovedlo se najít modul {0}. Zvažte možnost importovat modul s příponou .json pomocí --resolveJsonModule.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Nepovedlo se najít modul {0}. Nechtěli jste nastavit možnost moduleResolution na node nebo přidat do možnosti paths aliasy?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nepovedlo se najít modul „{0}“. Nechtěli jste nastavit možnost „moduleResolution“ na „nodenext“ nebo přidat do možnosti „paths“ aliasy?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nepovedlo se najít modul {0} nebo jeho odpovídající deklarace typů.", "Cannot_find_name_0_2304": "Název {0} se nenašel.", "Cannot_find_name_0_Did_you_mean_1_2552": "Nepovedlo se najít název {0}. Měli jste na mysli {1}?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nelze najít název {0}. Nechtěli jste to napsat v asynchronní funkci?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{1}‘ nebo novější.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ tak, aby obsahovala ‚dom‘.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“ a pak do pole typů v tsconfig přidejte „bun“.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste npm i --save-dev @types/jest nebo npm i --save-dev @types/mocha.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste ‚npm i --save-dev@ types/jest‘ nebo ‚npm i --save-dev @types/mocha‘ a pak do polí typů v tsconfig přidejte ‚jest‘ nebo ‚mocha‘.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro jQuery? Zkuste npm i --save-dev @types/jquery.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale při destrukci pole se vždy pošle {0}.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale rozsah pole bude vždy posílat {0}.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale for-of bude vždy posílat {0}.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Projekt {0} se nedá předřadit, protože nemá nastavenou hodnotu outFile.", + "Cannot_move_statements_to_the_selected_file_95183": "Příkazy nelze přesunout do vybraného souboru.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Nelze přesunout do souboru, vybraný soubor je neplatný.", "Cannot_read_file_0_5083": "Nejde přečíst soubor {0}.", "Cannot_read_file_0_Colon_1_5012": "Nejde číst soubor {0}: {1}", "Cannot_redeclare_block_scoped_variable_0_2451": "Nejde předeklarovat proměnnou bloku {0}.", "Cannot_redeclare_exported_variable_0_2323": "Exportovanou proměnnou {0} není možné znovu deklarovat.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nejde předeklarovat identifikátor {0} v klauzuli catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nejde spustit volání funkce v poznámce typu.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Výstup projektu {0} se nedá aktualizovat, protože při čtení souboru {1} došlo k chybě.", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Pokud se nezadá příznak -jsx, nepůjde JSX použít.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Když se zadá příznak --isolatedModules, nejde pro obor názvů typu nebo obor názvů jen pro typ použít export import.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Když se povolená možnost „{0}“, nelze pro obor názvů typů nebo obor názvů „pouze typ“ použít „export import“.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nejde používat importy, exporty nebo rozšíření modulu, pokud má příznak --module hodnotu none.", "Cannot_use_namespace_0_as_a_type_2709": "Obor názvů {0} nejde použít jako typ.", "Cannot_use_namespace_0_as_a_value_2708": "Obor názvů {0} nejde použít jako hodnotu.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Změnit extends na implements", "Change_spelling_to_0_90022": "Změnit pravopis na {0}", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Zkontrolujte vlastnosti třídy, které sice jsou deklarované, ale nejsou nastavené v konstruktoru.", + "Check_side_effect_imports_6806": "Zkontrolujte importy typu „side effect“.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Zkontrolujte, jestli argumenty metod bind, call a apply odpovídají původní funkci.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Kontroluje se, jestli je {0} nejdelší odpovídající předpona pro {1}–{2}.", "Circular_definition_of_import_alias_0_2303": "Cyklická definice aliasu importu {0}", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklarace třídy nemůže implementovat seznam přetížení pro {0}.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku ‚@augments‘ nebo ‚@extends‘.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekorátory tříd se nedají použít se statickým privátním identifikátorem. Zvažte možnost odebrat experimentální dekorátor.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole třídy „{0}“ definované nadřazenou třídou není v podřízené třídě přístupné přes třídu typu super.", "Class_name_cannot_be_0_2414": "Třída nemůže mít název {0}.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Když se cílí na ES5 s modulem {0}, název třídy nemůže být Object.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Statická strana třídy {0} nesprávně rozšiřuje statickou stranu základní třídy {1}.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Možnosti příkazového řádku", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Zkompilujte projekt podle cesty k jeho konfiguračnímu souboru nebo do složky se souborem tsconfig.json.", "Compiler_Diagnostics_6251": "Diagnostika kompilátoru", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Možnost kompilátoru „{0}“ nemůže mít prázdný řetězec.", "Compiler_option_0_expects_an_argument_6044": "Parametr kompilátoru {0} očekává argument.", "Compiler_option_0_may_not_be_used_with_build_5094": "Možnost kompilátoru „--{0}“ se nesmí používat s „--build“.", "Compiler_option_0_may_only_be_used_with_build_5093": "Možnost kompilátoru „--{0}“ se smí používat jenom s „--build“.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Složené projekty nemůžou zakázat generování deklarací.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Složené projekty nemůžou zakázat přírůstkovou kompilaci.", "Computed_from_the_list_of_input_files_6911": "Vypočítáno ze seznamu vstupních souborů", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Počítané vlastnosti musí být číselné nebo řetězcové literály, proměnné nebo výrazy s tečkami s možností --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "Názvy počítaných vlastností se ve výčtech nepovolují.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Názvy počítaných vlastností v literálech třídy nebo objektu nelze odvodit pomocí možnosti --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Ve výčtu, jehož členy mají hodnoty typu string, se nepovolují vypočítané hodnoty.", "Concatenate_and_emit_output_to_single_file_6001": "Zřetězit a generovat výstup do jednoho souboru", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Našly se konfliktní definice pro: {0} v {1} a {2}. Zvažte možnost nainstalovat specifickou verzi této knihovny, aby se konflikt vyřešil.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Podmínky, které se mají nastavit kromě výchozích hodnot specifických pro překladač při překladu importů.", "Conflicts_are_in_this_file_6201": "V tomto souboru se nacházejí konflikty.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Zvažte přidání modifikátoru „declare“ do této třídy.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Návratové typy signatury konstruktu {0} a {1} nejsou kompatibilní.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Převést {0} na typ mapovaného objektu", "Convert_all_const_to_let_95102": "Převést všechny const na let", "Convert_all_constructor_functions_to_classes_95045": "Převést všechny funkce konstruktoru na třídy", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Převést všechny importy, které se nepoužívají jako hodnota, na importy, při kterých se importují jen typy.", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Převést všechny neplatné znaky na kód entity HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Převést všechny opětovně exportované typy na exporty, při kterých se exportují jen typy", "Convert_all_require_to_import_95048": "Převést všechna volání require na import", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Převést vše na číselné literály bigint", "Convert_all_to_default_imports_95035": "Převést vše na výchozí importy", "Convert_all_type_literals_to_mapped_type_95021": "Převést všechny literály typů na namapovaný typ", + "Convert_all_typedef_to_TypeScript_types_95177": "Převeďte všechny typy typedef na typy TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Převést funkci šipky nebo výraz funkce", "Convert_const_to_let_95093": "Převést const na let", "Convert_default_export_to_named_export_95061": "Převést výchozí export na pojmenovaný export", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Převést na nepovinný výraz řetězu.", "Convert_to_template_string_95096": "Převést na řetězec šablony", "Convert_to_type_only_export_1364": "Převést na export, při kterém se exportují jen typy", - "Convert_to_type_only_import_1373": "Převést na import, při kterém se importují jen typy", + "Convert_typedef_to_TypeScript_type_95176": "Převeďte typedef na typ TypeScript.", "Corrupted_locale_file_0_6051": "Soubor národního prostředí {0} je poškozený.", "Could_not_convert_to_anonymous_function_95153": "Nepovedlo se převést na anonymní funkci.", "Could_not_convert_to_arrow_function_95151": "Nepovedlo se převést na funkci šipky.", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Nepodařilo se najít název {0}. Měli jste na mysli {1}?", "Could_not_find_namespace_import_or_named_imports_95132": "Nepovedlo se najít import oboru názvů nebo pojmenované importy.", "Could_not_find_property_for_which_to_generate_accessor_95135": "Nepovedlo se najít vlastnost, pro kterou se má vygenerovat přístupový objekt.", + "Could_not_find_variable_to_inline_95185": "Nepodařilo se najít proměnnou, která se má vložit.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nepovedlo se přeložit cestu {0} s příponami {1}.", "Could_not_write_file_0_Colon_1_5033": "Nedá se zapisovat do souboru {0}: {1}", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Vytvořte pro generované soubory JavaScriptu soubory sourcemap.", "Create_sourcemaps_for_d_ts_files_6614": "Pro soubory d.ts vytvořte soubory sourcemap.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Vytvoří tsconfig.json doporučenými nastaveními v pracovním adresáři.", "DIRECTORY_6038": "ADRESÁŘ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Desítkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Desetinná čísla s úvodními nulami nejsou povolena.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklarace rozšiřuje deklaraci v jiném souboru. Toto není možné serializovat.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Generování deklarace pro tento soubor vyžaduje zachování tohoto importu pro rozšíření. Toto není podporováno s možností --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0}. Explicitní anotace typu může generování deklarací odblokovat.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0} z modulu {1}. Explicitní anotace typu může generování deklarací odblokovat.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "Generování deklarace pro tento parametr vyžaduje implicitně přidání možnosti „undefined“ do jeho typu. Toto není podporováno s možností --isolatedDeclarations.", "Declaration_expected_1146": "Očekává se deklarace.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Název deklarace je v konfliktu s integrovaným globálním identifikátorem {0}.", "Declaration_or_statement_expected_1128": "Očekává se deklarace nebo příkaz.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Očekávala se deklarace nebo příkaz. Tento znak = následuje blok příkazů, takže pokud jste chtěli napsat destrukturující přiřazení, možná bude nutné uzavřít celé přiřazení do závorek.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Očekávala se deklarace nebo příkaz. Tento znak = následuje blok příkazů, takže pokud jste chtěli napsat destrukturační přiřazení, možná bude nutné uzavřít celé přiřazení do závorek.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarace s kontrolními výrazy jednoznačného přiřazení musí mít také anotace typu.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarace s inicializátory nemůžou mít také kontrolní výrazy jednoznačného přiřazení.", "Declare_a_private_field_named_0_90053": "Deklarovat privátní pole s názvem {0}", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Deklarovat statickou vlastnost {0}", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Návratový typ funkce dekoratéru {0} se nedá přiřadit k typu {1}.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Návratový typ funkce dekoratéru je {0}, ale očekává se, že bude void nebo any.", + "Decorator_used_before_export_here_1486": "Dekoratér je tu použit před možností „export“.", "Decorators_are_not_valid_here_1206": "Dekorátory tady nejsou platné.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekorátory nejde použít na víc přístupových objektů get/set se stejným názvem.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Pro „tyto“ parametry asi nejdou použít dekoratéry.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratéry se nemůžou vyskytovat po „export“ nebo „export default“, pokud se taky vyskytují před možností „export“.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratéry musí předcházet název a všechna klíčová slova deklarace vlastností.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Výchozí proměnné klauzule catch jako unknown namísto any.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Výchozí export modulu má nebo používá privátní název {0}.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Výchozí exporty nelze odvodit pomocí --isolatedDeclarations.", "Default_library_1424": "Výchozí knihovna", "Default_library_for_target_0_1425": "Výchozí knihovna pro cíl {0}", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definice následujících identifikátorů je v konfliktu s definicemi v jiném souboru: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Zakažte v generovaném kódu mazání deklarací const enum.", "Disable_error_reporting_for_unreachable_code_6603": "Zakažte hlášení chyb, pokud je kód nedosažitelný.", "Disable_error_reporting_for_unused_labels_6604": "Zakažte hlášení chyb u nepoužitých popisků.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Zakažte úplnou kontrolu typů (budou hlášeny pouze kritické chyby analýzy a generování).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Zakázat v kompilovaném výstupu generování vlastních pomocných funkcí, jako je __extends.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Zakažte zahrnutí všech souborů knihoven, včetně výchozí lib.d.ts.", "Disable_loading_referenced_projects_6235": "Zakažte načítání odkazovaných projektů.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Neoznamují se chyby v nedosažitelném kódu.", "Do_not_report_errors_on_unused_labels_6074": "Neoznamují se chyby v nepoužívaných popiscích.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Nepřekládat skutečnou cestu symbolických odkazů", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Netransformujte ani nevynechávejte žádné importy nebo exporty, které nejsou označeny jako „pouze typ“, a zajistěte, aby byly zapsány ve formátu výstupního souboru podle nastavení „module“.", "Do_not_truncate_error_messages_6165": "Nezkracovat chybové zprávy", "Duplicate_function_implementation_2393": "Duplicitní implementace funkce", "Duplicate_identifier_0_2300": "Duplicitní identifikátor {0}", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Duplicitní signatura indexu pro typ {0}.", "Duplicate_label_0_1114": "Duplicitní popisek {0}", "Duplicate_property_0_2718": "Duplicitní vlastnost {0}.", + "Duplicate_regular_expression_flag_1500": "Duplikovaný příznak regulárního výrazu", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specifikátor dynamického importu musí být typu string, ale tady má typ {0}.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamické importy se podporují jen v případě, že příznak --module je nastavený na es2020, es2022, esnext, commonjs, amd, system, umd, node16 nebo nodenext.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Dynamické importy můžou jako argumenty přijímat jenom specifikátor modulu a volitelný kontrolní výraz.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Dynamické importy podporují druhý argument pouze, pokud je možnost --module nastavena na hodnotu esnext, node16 nebo nodenext.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamické importy můžou jako argumenty přijímat jenom specifikátor modulu a volitelnou sadu atributů.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Dynamické importy podporují druhý argument pouze, pokud je možnost „--module“ nastavena na „esnext“, „node16“, „nodenext“ nebo „preserve“.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Když je možnost „module“ nastavená na „preserve“, v modulu CommonJS se nepovoluje syntaxe ESM.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Když je povolená syntaxe „verbatimModuleSyntax“, není v modulu CommonJS povolená syntaxe ESM.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Každá deklarace „{0}.{1}“ se liší ve své hodnotě. Bylo očekáváno „{2}“, ale zadáno bylo „{3}“.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Každý člen typu sjednocení {0} má signatury konstruktu, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Každý člen typu sjednocení {0} má signatury, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", "Editor_Support_6249": "Podpora editoru", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Povolit hlášení chyb v javascriptových souborech se zkontrolovanými typy.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Povolte hlášení chyb, když se místní proměnná nepřečte.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Povolte hlášení chyb, když má „this“ určený typ „any“.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Povolte zkušební podporu pracovních verzí dekoratérů TC39 fáze 2.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Povolte experimentální podporu pro starší experimentální dekoratéry.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Povolte import souborů s libovolnou příponou za předpokladu, že je k dispozici soubor deklarace.", "Enable_importing_json_files_6689": "Povolte importování souborů .json.", "Enable_project_compilation_6302": "Povolit kompilování projektu", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Povolte ve funkcích metody bind, call a apply.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Při importu ověřovat správnost používání malých a velkých písmen.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Zajistit bezpečnou transpilaci všech souborů bez spoléhání na jiné importy.", "Ensure_use_strict_is_always_emitted_6605": "Vždy zajistěte generování direktivy „use strict“.", + "Entering_conditional_exports_6413": "Vstup do podmíněných exportů", "Entry_point_for_implicit_type_library_0_1420": "Vstupní bod pro knihovnu implicitních typů {0}", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Vstupní bod pro knihovnu implicitních typů {0} s packageId {1}", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklarace výčtu jdou sloučit jenom s oborem názvů nebo jinými deklaracemi výčtu.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Všechny deklarace výčtu musí být konstantní nebo nekonstantní.", "Enum_member_expected_1132": "Očekává se člen výčtu.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Když je povolená možnost „isolatedModules“, musí mít člen výčtu následující po neliterálovém číselném členu inicializátor.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicializátory členů výčtu musí být počítatelné bez odkazů na externí symboly s možností „--isolatedDeclarations“.", "Enum_member_must_have_initializer_1061": "Člen výčtu musí mít inicializátor.", "Enum_name_cannot_be_0_2431": "Název výčtu nemůže být {0}.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Typ výčtu {0} má členy s inicializátory, které nejsou literály.", "Errors_Files_6041": "Soubory chyb", + "Escape_sequence_0_is_not_allowed_1488": "Řídicí sekvence „{0}“ není povolená.", "Examples_Colon_0_6026": "Příklady: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Nadměrná složitost při porovnávání typů „{0}“ a „{1}“.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadměrná hloubka zásobníku při porovnávání typů {0} a {1}", + "Exiting_conditional_exports_6416": "Opuštění podmíněných exportů.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Očekávané argumenty typu {0}–{1}; zadejte je se značkou @extends.", "Expected_0_arguments_but_got_1_2554": "Očekával se tento počet argumentů: {0}. Počet předaných argumentů: {1}", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Očekával se tento počet argumentů: {0}, ale byl přijat tento počet: {1}. Nezapomněli jste zahrnout void do argumentu typu pro objekt Promise?", "Expected_0_type_arguments_but_got_1_2558": "Očekávaly se argumenty typu {0}, ale předaly se argumenty typu {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Očekávané argumenty typu {0}; zadejte je se značkou @extends.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Očekával se 1 argument, ale bylo jich 0. New Promise() potřebuje pomocný parametr JSDoc k vytvoření resolve, který se dá volat bez argumentů.", + "Expected_a_Unicode_property_name_1523": "Byl očekáván název vlastnosti Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Byl očekáván název nebo hodnota vlastnosti Unicode.", + "Expected_a_Unicode_property_value_1525": "Byla očekávána hodnota vlastnosti Unicode.", + "Expected_a_capturing_group_name_1514": "Byl očekáván název zachycující skupiny.", + "Expected_a_class_set_operand_1520": "Byl očekáván operand nastavení třídy.", "Expected_at_least_0_arguments_but_got_1_2555": "Očekával se aspoň tento počet argumentů: {0}. Počet předaných argumentů: {1}", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Očekávala se odpovídající ukončující značka JSX pro {0}.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Pro fragment JSX se očekávala odpovídající uzavírací značka.", "Expected_for_property_initializer_1442": "Pro inicializátor vlastnosti se očekával znak =.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Očekávaný typ pole {0} v souboru package.json byl {1}, získal se typ {2}.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Experimentální podpora dekorátorů je funkce, která se v budoucí verzi může změnit. Toto upozornění odstraníte nastavením možnosti experimentalDecorators v tsconfig nebo jsconfig.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explicitně zadaný druh překladu modulu: {0}.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Pokud není možnost target nastavená na es2016 nebo novější, nedají se hodnoty bigint umocnit.", "Export_0_from_module_1_90059": "Exportovat {0} z modulu {1}", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "Exportovaná proměnná {0} má nebo používá privátní název {1}.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporty a přiřazení exportů nejsou povolené v rozšířeních modulů.", "Expression_expected_1109": "Očekával se výraz.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Výraz musí být uzavřen v závorkách, aby se mohl používat jako dekoratér.", "Expression_or_comma_expected_1137": "Očekával se výraz nebo čárka.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Výraz vytvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Výraz vytvoří typ sjednocení, který se nedá reprezentovat, protože je příliš složitý.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Výraz se přeloží na identifikátor _super, pomocí kterého kompilátor zaznamenává odkaz na základní třídu.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Výraz se vyhodnocuje na deklaraci proměnné _newTarget, kterou kompilátor používá k zachycení odkazu na metavlastnost new.target.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Výraz se přeloží na deklaraci proměnné _this, pomocí které kompilátor zaznamenává odkazy na příkaz this.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Typ výrazu nejde odvodit pomocí --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzule Extends nemůže obsahovat výraz s možností „--isolatedDeclarations“.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzule extends pro odvozený typ „{0}“ má nebo používá privátní název „{1}“.", + "Extract_base_class_to_variable_90064": "Extrahovat základní třídu do proměnné", + "Extract_binding_expressions_to_variable_90066": "Extrahujte výrazy s vazbami do proměnné", "Extract_constant_95006": "Extrahovat konstantu", + "Extract_default_export_to_variable_90065": "Extrahovat výchozí export do proměnné", "Extract_function_95005": "Extrahovat funkci", "Extract_to_0_in_1_95004": "Extrahovat do {0} v {1}", "Extract_to_0_in_1_scope_95008": "Extrahovat do {0} v oboru {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Extrahovat do rozhraní", "Extract_to_type_alias_95078": "Extrahovat do aliasu typu", "Extract_to_typedef_95079": "Extrahovat do typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrahovat do proměnné a nahradit pomocí „{0} as typeof {0}“", "Extract_type_95077": "Typ extrahování", "FILE_6035": "SOUBOR", "FILE_OR_DIRECTORY_6040": "SOUBOR NEBO ADRESÁŘ", - "Failed_to_parse_file_0_Colon_1_5014": "Nepovedlo se parsovat soubor {0}: {1}.", + "Failed_to_find_peerDependency_0_6283": "Nepodařilo se najít peerDependency „{0}“.", + "Failed_to_resolve_under_condition_0_6415": "Nepodařilo se přeložit za podmínky „{0}“.", "Fallthrough_case_in_switch_7029": "Případ Fallthrough v příkazu switch", "File_0_does_not_exist_6096": "Soubor {0} neexistuje.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Podle dřívějších vyhledávání v mezipaměti soubor {0} neexistuje.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Soubor {0} existuje – použijte ho jako výsledek překladu IP adres.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Podle dřívějších vyhledávání v mezipaměti soubor {0} existuje.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Soubor „{0}“ existuje – použijte ho jako výsledek překladu IP adres.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Soubor {0} má nepodporovanou příponu. Jediné podporované přípony jsou {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Soubor {0} má nepodporovanou příponu, a proto se přeskočí.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Soubor {0} je javascriptový soubor. Nechtěli jste povolit možnost allowJs?", "File_0_is_not_a_module_2306": "Soubor {0} není modul.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Soubor {0} není uvedený na seznamu souborů projektu {1}. Projekty musí uvádět všechny soubory nebo používat vzor include.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Soubor {0} není pod kořenovým adresářem rootDir {1}. Očekává se, že rootDir bude obsahovat všechny zdrojové soubory.", "File_0_not_found_6053": "Soubor {0} se nenašel.", "File_Management_6245": "Správa souborů", + "File_appears_to_be_binary_1490": "Zdá se, že soubor je binární.", "File_change_detected_Starting_incremental_compilation_6032": "Zjistila se změna souboru. Spouští se přírůstková kompilace...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Soubor je modul CommonJS, protože {0} nemá pole type", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Soubor je modul CommonJS, protože {0} má pole type, jehož hodnota není module", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Soubor je výstup zdroje odkazů na projekt {0}.", "File_is_source_from_referenced_project_specified_here_1416": "Soubor je zdroj z odkazovaného projektu zadaného na tomto místě.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Název souboru {0} se od už zahrnutého názvu souboru {1} liší jenom velikostí písmen.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Název souboru „{0}“ má příponu „{1}“ – místo toho se hledá: „{2}“.", "File_name_0_has_a_1_extension_stripping_it_6132": "Název souboru {0} má příponu {1} – odstraňuje se", "File_redirects_to_file_0_1429": "Soubor se přesměrovává na soubor {0}.", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specifikace souboru nemůže obsahovat nadřazený adresář (..), který se vyskytuje za rekurzivním zástupným znakem adresáře (**): {0}.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Opravit všechny výrazy, kde je možné, že chybí await", "Fix_all_implicit_this_errors_95107": "Opravit všechny chyby implicit-'this'", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Opravit všechny nesprávné návratové typy asynchronních funkcí", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Smyčky „For await“ nejde použít uvnitř statického bloku třídy.", + "Fix_all_with_type_only_imports_95182": "Opravit vše s importy „type-only“", "Found_0_errors_6217": "Našel se tento počet chyb: {0}.", "Found_0_errors_Watching_for_file_changes_6194": "Byl nalezen tento počet chyb: {0}. Sledují se změny souborů.", "Found_0_errors_in_1_files_6261": "V {1} souborech byly nalezeny chyby ({0}).", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Ve stejném souboru byly nalezeny chyby ({0}). Začínají na: {1}", "Found_1_error_6216": "Našla se 1 chyba.", "Found_1_error_Watching_for_file_changes_6193": "Byla nalezena 1 chyba. Sledují se změny souborů.", - "Found_1_error_in_1_6259": "Našla se 1 chyba v {1}.", + "Found_1_error_in_0_6259": "Našla se 1 chyba v {0}.", "Found_package_json_at_0_6099": "Soubor package.json se našel v {0}.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl ES3 nebo ES5.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl ES3 nebo ES5. Definice tříd jsou automaticky ve striktním režimu.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl ES3 nebo ES5. Moduly jsou automaticky ve striktním režimu.", + "Found_peerDependency_0_with_1_version_6282": "Nalezeno: peerDependency – „{0}“ s verzí „{1}“", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Definice tříd jsou automaticky ve striktním režimu.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Moduly jsou automaticky ve striktním režimu.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Výraz funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Implementace funkce chybí nebo nenásleduje hned po deklaraci.", "Function_implementation_name_must_be_0_2389": "Název implementace funkce musí být {0}.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Funkce implicitně obsahuje návratový typ any, protože neobsahuje anotaci návratového typu a odkazuje se na ni přímo nebo nepřímo v jednom z jejích návratových výrazů.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Ve funkci chybí koncový příkaz return a návratový typ neobsahuje undefined.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkce musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", "Function_not_implemented_95159": "Funkce není implementovaná.", "Function_overload_must_be_static_2387": "Přetížení funkce musí být statické.", "Function_overload_must_not_be_static_2388": "Přetížení funkce nesmí být statické.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Očekával se identifikátor.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Očekává se identifikátor. __esModule je při transformaci modulů ECMAScript rezervované jako označení exportu.", "Identifier_or_string_literal_expected_1478": "Očekává se identifikátor nebo řetězcový literál.", + "Identifier_string_literal_or_number_literal_expected_1496": "Očekával se identifikátor, řetězcový literál nebo číselný literál.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Pokud balíček ‚{0}‘ ve skutečnosti zveřejňuje tento modul, zvažte možnost poslat žádost o přijetí změn, aby se připojila adresa ‚https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}‘", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Pokud balíček {0} skutečně zpřístupňuje tento modul, zkuste přidat nový soubor deklarace (.d.ts), který obsahuje declare module {1};", "Ignore_this_error_message_90019": "Ignorovat tuto chybovou zprávu", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implementovat rozhraní {0}", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzule implements exportované třídy {0} má nebo používá privátní název {1}.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Implicitní převod symbol na string za běhu neproběhne úspěšně. Zvažte možnost zabalit tento výraz do String(...).", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}“ je v konfliktu s globální hodnotou použitou v tomto souboru, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}“ je v konfliktu s lokální hodnotou, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", "Import_0_from_1_90013": "Importovat {0} z: {1}", "Import_assertion_values_must_be_string_literal_expressions_2837": "Hodnoty kontrolních výrazů importu musí být výrazy formou řetězcových literálů.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "V příkazech, které se překládají na volání require commonjs, se kontrolní výrazy importu nepovolují.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Kontrolní výrazy importu jsou podporovány pouze v případě, že je možnost --module nastavena na hodnotu esnext nebo nodenext.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují kontrolní výrazy importu.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Kontrolní výrazy importu jsou podporovány pouze v případě, že je možnost „--module“ nastavena na „esnext“, „nodenext“ nebo „preserve“.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Kontrolní výrazy importu se nedají použít s importy nebo exporty, které jsou jenom typ.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Přiřazení importu nelze použít, pokud jsou cílem moduly ECMAScript. Zkuste místo toho použít import * as ns from \"mod\", import {a} from \"mod\", import d from \"mod\" nebo jiný formát modulu.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Hodnoty atributů importu musí být výrazy formou řetězcových literálů.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují atributy importu.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Atributy importu jsou podporovány pouze v případě, že je možnost „--module“ nastavena na „esnext“, „nodenext“ nebo „preserve“.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atributy importu se nedají použít s importy nebo exporty „type-only“.", "Import_declaration_0_is_using_private_name_1_4000": "Deklarace importu {0} používá privátní název {1}.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklarace importu je v konfliktu s místní deklarací {0}.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklarace importu v oboru názvů nemůžou odkazovat na modul.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Zahrňte do generovaného JavaScriptu soubory sourcemap.", "Includes_imports_of_types_referenced_by_0_90054": "Zahrnuje importy typů, na které odkazuje {0}", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Včetně --watch, -w začne sledovat aktuální projekt ohledně změn souboru. Po nastavení můžete konfigurovat režim sledování pomocí:", + "Incomplete_quantifier_Digit_expected_1505": "Neúplný kvantifikátor Očekává se číslice.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "Signatura indexu pro typ {0} chybí v typu {1}.", "Index_signature_in_type_0_only_permits_reading_2542": "Signatura indexu v typu {0} povoluje jen čtení.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Jednotlivé deklarace ve sloučené deklaraci {0} musí být všechny exportované nebo všechny místní.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Odvodit typy parametrů z využití", "Infer_this_type_of_0_from_usage_95080": "Vyvodit typ this pro {0} z použití", "Infer_type_of_0_from_usage_95011": "Odvodit typ {0} z využití", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Odvozování z výrazů tříd není podporováno s možností „--isolatedDeclarations“.", "Initialize_property_0_in_the_constructor_90020": "Inicializovat vlastnost {0} v konstruktoru", "Initialize_static_property_0_90021": "Inicializovat statickou vlastnost {0}", "Initializer_for_property_0_2811": "Inicializátor vlastnosti „{0}“", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicializátor instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Inicializátor tomuto elementu vazby neposkytuje žádnou hodnotu. Element vazby nemá žádnou výchozí hodnotu.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializátory nejsou povolené v ambientních kontextech.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializuje projekt TypeScript a vytvoří soubor tsconfig.json.", + "Inline_variable_95184": "Vložená proměnná", "Insert_command_line_options_and_files_from_a_file_6030": "Vložte parametry příkazového řádku a soubory ze souboru.", "Install_0_95014": "Nainstalovat {0}", "Install_all_missing_types_packages_95033": "Nainstalovat všechny chybějící balíčky typů", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "V rozšíření je neplatný název modulu, modul {0} se nedá najít.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Neplatný volitelný řetěz z nového výrazu. Chtěli jste volat {0}()?", "Invalid_reference_directive_syntax_1084": "Neplatná syntaxe direktivy reference", + "Invalid_syntax_in_decorator_1498": "Neplatná syntaxe v dekoratéru", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Neplatné použití „{0}“. Nelze jej použít uvnitř statického bloku třídy.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Neplatné použití {0}. Moduly jsou automaticky ve striktním režimu.", "Invalid_use_of_0_in_strict_mode_1100": "Neplatné použití {0} ve striktním režimu", + "Invalid_value_for_ignoreDeprecations_5103": "Neplatná hodnota pro možnost „--ignoreDeprecations“", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Neplatná hodnota pro jsxFactory. {0} není platný identifikátor nebo kvalifikovaný název.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Neplatná hodnota pro jsxFragmentFactory. {0} není platný identifikátor nebo kvalifikovaný název.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Neplatná hodnota --reactNamespace. {0} není platný identifikátor.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Typ prvku {0} není platný prvek JSX.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Typ instance {0} není platný prvek JSX.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Návratový typ {0} není platný prvek JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Typ „{0}“ není platný typ elementu JSX.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Značka JSDoc @{0} {1} neodpovídá klauzuli extends {2}.", "JSDoc_0_is_not_attached_to_a_class_8022": "Značka JSDoc @{0} není připojená k třídě.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc ... se může nacházet jen v posledním parametru signatury.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Značka JSDoc @param má název {0}, ale neexistuje žádný parametr s tímto názvem.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Značka JSDoc @param má název {0}, ale žádný parametr s tímto názvem neexistuje. Musí odpovídat hodnotě arguments, pokud má typ pole.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef se dá převést na typ TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Značka JSDoc @typedef by měla mít poznámku k typu nebo by za ní měly následovat značky @property nebo @member.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef lze převádět na typy TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc se můžou používat jenom v dokumentačních komentářích.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc se můžou přesunout na typy TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atributy JSX musí mít přiřazený neprázdný výraz.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Seznam složek, ze kterých se zahrnou definice typů", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Seznam kořenových složek, jejichž kombinovaný obsah představuje strukturu projektu za běhu", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Načítá se {0} z kořenového adresáře {1}, umístění kandidáta {2}.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Načítá se modul {0} ze složky node_modules. Cílový typ souboru je {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Načítá se modul jako soubor/složka, umístění kandidátského modulu: {0}, cílový typ souboru: {1}.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Načítá se modul „{0}“ ze složky node_modules. Cílové typy souborů: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Načítá se modul jako soubor/složka, umístění kandidátského modulu: „{0}“, cílové typy souborů: {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Národní prostředí musí mít tvar nebo . Třeba {0} nebo {1}.", "Log_paths_used_during_the_moduleResolution_process_6706": "Cesty protokolu používané v procesu moduleResolution.", "Longest_matching_prefix_for_0_is_1_6108": "Nejdelší odpovídající předpona pro {0} je {1}.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Vytvořte klíč jenom ze zpětných řetězců místo z řetězců, čísel nebo symbolů (možnost ze starší verze).", "Make_super_call_the_first_statement_in_the_constructor_90002": "Nastavit volání metody super() jako první příkaz v konstruktoru", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Typu mapovaného objektu má implicitně typ šablony any.", + "Mark_array_literal_as_const_90070": "Označit literál pole jako const", "Matched_0_condition_1_6403": "Odpovídá {0} podmínce {1}", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Porovnává se ve výchozím nastavení se vzorem zahrnutí **/*.", "Matched_by_include_pattern_0_in_1_1407": "Porovnáváno podle vzoru zahrnutí {0} v {1}", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda {0} nemůže mít implementaci, protože je označená jako abstraktní.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda {0} z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda {0} z exportovaného rozhraní má nebo používá privátní název {1}.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", "Method_not_implemented_95158": "Metoda není implementovaná.", "Modifiers_cannot_appear_here_1184": "Tady nejde použít modifikátory.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Modul {0} se dá importovat podle výchozího nastavení jen pomocí příznaku {1}.", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Modul {0} nemá žádný exportovaný člen {1}. Nechtěli jste místo toho použít import { {1} } from {0}?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Modul {0} je skrytý místní deklarací se stejným názvem.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Modul {0} používá export = a nedá se použít s možností export *.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Modul {0} se převedl jako ambientní modul deklarovaný v {1}, protože tento soubor nebyl upraven.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Modul {0} se převedl jako lokálně deklarovaný ambientní modul v souboru {1}.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Modul „{0}“ byl přeložen na „{1}“, ale není nastavena možnost „--allowArbitraryExtensions“.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Modul {0} se přeložil na {1}, není ale nastavená možnost --jsx.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Modul {0} se přeložil na {1}, ale nepoužívá se --resolveJsonModule.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Názvy deklarací modulů můžou používat jenom řetězce v jednoduchých nebo dvojitých uvozovkách.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Překlad modulu pomocí rootDirs se nepovedl.", "Modules_6244": "Moduly", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Přesunout modifikátory elementu popsané řazené kolekce členů na popisky", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Přesuňte výraz ve výchozím exportu do proměnné a přidejte k němu anotaci typu.", "Move_to_a_new_file_95049": "Přesunout do nového souboru", + "Move_to_file_95178": "Přesunout do souboru", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Více po sobě jdoucích číselných oddělovačů se nepovoluje.", "Multiple_constructor_implementations_are_not_allowed_2392": "Víc implementací konstruktoru se nepovoluje.", "NEWLINE_6061": "NOVÝ ŘÁDEK", "Name_is_not_valid_95136": "Název není platný.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Pojmenované zachytávací skupiny jsou k dispozici jen při cílení na „ES2018“ nebo novější.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Pojmenované zachytávací skupiny se stejným názvem se musí navzájem vylučovat.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Pojmenovaná vlastnost {0} není u typu {1} stejná jako u typu {2}.", "Namespace_0_has_no_exported_member_1_2694": "Obor názvů {0} nemá žádný exportovaný člen {1}.", "Namespace_must_be_given_a_name_1437": "Obor názvů musí mít název.", "Namespace_name_cannot_be_0_2819": "Název oboru názvů nemůže být „{0}“.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Pokud je povolena možnost „{0}“, nejsou v souborech globálních skriptů povoleny obory názvů. Pokud tento soubor nemá být globálním skriptem, nastavte možnost „moduleDetection“ na hodnotu „force“ nebo přidejte prázdný příkaz „export {}“.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "U parametrů „this“ nelze použít dekoratéry ani modifikátory.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Žádný základní konstruktor nemá zadaný počet argumentů typu.", "No_constituent_of_type_0_is_callable_2755": "Žádný konstituent typu {0} se nedá zavolat.", "No_constituent_of_type_0_is_constructable_2759": "Žádný konstituent typu {0} se nedá vytvořit.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Žádné přetížení neodpovídá tomuto volání.", "No_type_could_be_extracted_from_this_type_node_95134": "Z tohoto uzlu typů nešlo extrahovat žádný typ.", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "V oboru pro sdruženou vlastnost {0} neexistuje žádná hodnota. Buď nějakou deklarujte, nebo poskytněte inicializátor.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Neabstraktní třída {0} neimplementuje zděděného abstraktního člena {1} ze třídy {2}.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Neabstraktní třída „{0}“ neimplementuje zděděného abstraktního člena {1} ze třídy „{2}“.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "V neabstraktní třídě „{0}“ chybí implementace pro následující členy „{1}“: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "V neabstraktní třídě {0} chybí implementace pro následující členy „{1}“: {2} a {3} další(ch).", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Výraz neabstraktní třídy neimplementuje zděděný abstraktní člen {0} z třídy {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1} a {2} další(ch).", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Kontrolní výrazy jiné než null se dají používat jen v typescriptových souborech.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Nerelativní cesty nejsou povolené, pokud není nastavená hodnota baseUrl. Nezapomněli jste na úvodní znak „./“?", "Non_simple_parameter_declared_here_1348": "Deklaroval se tady parametr, který není jednoduchý.", "Not_all_code_paths_return_a_value_7030": "Ne všechny cesty kódu vracejí hodnotu.", "Not_all_constituents_of_type_0_are_callable_2756": "Ne všichni konstituenti typu {0} se dají zavolat.", "Not_all_constituents_of_type_0_are_constructable_2760": "Ne všichni konstituenti typu {0} se dají vytvořit.", + "Numbers_out_of_order_in_quantifier_1506": "Čísla ve kvantifikátoru jsou mimo pořadí.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Číselné literály s absolutními hodnotami, které se rovnají hodnotě 2^53 nebo větší, se nedají reprezentovat přesně jako celá čísla, protože jsou příliš velké.", "Numeric_separators_are_not_allowed_here_6188": "Číselné oddělovače tady nejsou povolené.", "Object_is_of_type_unknown_2571": "Objekt je typu Neznámý.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Literál objektu může specifikovat jenom známé vlastnosti a {0} v typu {1} neexistuje.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literál objektu může určovat jenom známé vlastnosti, ale {0} v typu {1} neexistuje. Chtěli jste zapsat {2}?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Vlastnost {0} literálu objektu má implicitně typ {1}.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekty, které obsahují sdružené vlastnosti, nelze odvodit pomocí možnosti „--isolatedDeclarations“.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekty, které obsahují přiřazení rozprostření, se nedají odvodit pomocí možnosti „--isolatedDeclarations“.", "Octal_digit_expected_1178": "Očekává se osmičková číslice.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Osmičkové literální typy musí používat syntaxi ES2015. Použijte syntaxi {0}.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Osmičkové literály nejsou povolené v inicializátoru členů výčtů. Použijte syntaxi {0}.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Osmičkové literály nejsou ve striktním režimu povolené.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Osmičkové literály nejsou dostupné při cílení na ECMAScript 5 a vyšší. Použijte syntaxi {0}.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Osmičkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny. Pokud to bylo zamýšleno jako řídicí sekvence, použijte místo toho syntaxi „{0}“.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Osmičkové řídicí sekvence nejsou povoleny. Použijte syntaxi „{0}“.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Osmičkové literály nejsou povoleny. Použijte syntaxi „{0}“.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedna hodnota z „{0}.{1}“ je řetězec „{2}“ a druhá hodnota se považuje za neznámou číselnou hodnotu.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "V příkazu for...in se povoluje deklarovat jenom jednu proměnnou.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "V příkazu for...of se povoluje deklarovat jenom jednu proměnnou.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Klíčovým slovem new se dá volat jenom funkce void.", "Only_ambient_modules_can_use_quoted_names_1035": "Názvy v uvozovkách můžou mít jenom ambientní moduly.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Spolu s --{0} se podporují jenom moduly amd a system.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Pomocí možnosti „--isolatedDeclarations“ lze odvodit pouze pole const.", "Only_emit_d_ts_declaration_files_6014": "Bude vydávat jen soubory deklarací .d.ts.", - "Only_named_exports_may_use_export_type_1383": "Jen pojmenované exporty můžou používat export type.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Počítané členy můžou obsahovat jen číselné výčty, ale tento výraz je typu {0}. Pokud nepotřebujete kontroly úplnosti, zvažte místo něho použít objekt literálu.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Zahrňte do výstupu jenom soubory d.ts, nikoli soubory JavaScriptu.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Prostřednictvím klíčového slova super jsou přístupné jenom veřejné a chráněné metody základní třídy.", "Operator_0_cannot_be_applied_to_type_1_2736": "Operátor {0} se nedá použít na typ {1}.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Operátor {0} nejde použít u typů {1} a {2}.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "V rámci třídy znaků nelze kombinovat operátory. Místo toho je zabalte do vnořené třídy.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Při úpravách vyloučit projekt z kontroly odkazů ve více projektech.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Možnost „{0}={1}“ byla odebrána. Odeberte ji prosím z konfigurace.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Možnost „{0}={1}“ je zastaralá a v jazyce TypeScript {2} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{3}\"'.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu false nebo null.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu null.", + "Option_0_can_only_be_specified_on_command_line_6266": "Možnost „{0}“ lze zadat pouze na příkazovém řádku.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Možnost {0} jde použít jenom při zadání možnosti --inlineSourceMap nebo možnosti --sourceMap.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „moduleResolution“ nastavená na „node16“, „nodenext“ nebo „bundler“.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „modul“ nastavená na „preserve“ nebo na „es2015“ a novější.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Když je možnost jsx nastavená na {1}, možnost {0} se nedá zadat.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Když je možnost target nastavená na ES3, možnost {0} se nedá zadat.", "Option_0_cannot_be_specified_with_option_1_5053": "Možnosti {0} a {1} nejde zadat zároveň.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Možnost {0} nejde zadat bez možnosti {1}.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Možnost {0} nejde zadat bez možnosti {1} nebo {2}.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Možnost „{0}“ byla odebrána. Odeberte ji prosím z konfigurace.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Možnost „{0}“ je zastaralá a v jazyce TypeScript {1} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{2}\"'.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Možnost „{0}“ je redundantní a nelze ji zadat s možností „{1}“.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "Možnost „allowImportingTsExtensions“ se dá použít jenom v případě, že je nastavená možnost „noEmit“ nebo „emitDeclarationOnly“.", "Option_build_must_be_the_first_command_line_argument_6369": "Možnost --build musí být prvním argumentem příkazového řádku.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Možnost ‚--incremental‘ se dá zadat jen pomocí tsconfig, při generování do jednoho souboru nebo když se zadá možnost ‚--tsBuildInfoFile‘.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Možnost isolatedModules jde použít jenom v případě, že je poskytnutá možnost --module nebo že možnost target je ES2015 nebo vyšší verze.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Když je povolená možnost isolatedModules, možnost preserveConstEnums se nedá zakázat.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "Možnost preserveValueImports se dá použít jenom v případě, že je modul nastavený na hodnotu es2015 nebo novější.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Když je možnost „module“ nastavená na „{0}“, možnost „moduleResolution“ musí být nastavená na „{1}“ (nebo musí zůstat nezadaná).", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Když je možnost „moduleResolution“ nastavená na „{1}“, možnost „module“ musí být nastavená na „{0}“.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Když je povolená možnost „{0}“, možnost „preserveConstEnums“ se nedá zakázat.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Možnost project se na příkazovém řádku nedá kombinovat se zdrojovým souborem.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Možnost --resolveJsonModule se dá zadat jen v případě, že generování kódu modulu je commonjs, amd, es2015 nebo esNext.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Možnost --resolveJsonModule se nedá zadat bez strategie překladu modulu node.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „moduleResolution“ nastavená na hodnotu „classic“.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „module“ nastavená na „none“, „system“ nebo „umd“.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Možnost „tsBuildInfoFile“ nelze zadat bez zadání možnosti „incremental“ nebo „composite“ nebo pokud není spuštěno „tsc -b“.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Možnost „verbatimModuleSyntax“ nejde použít, pokud je možnost „module“ nastavená na „UMD“, „AMD“ nebo „System“.", "Options_0_and_1_cannot_be_combined_6370": "Možnosti {0} a {1} nejde kombinovat.", "Options_Colon_6027": "Možnosti:", "Output_Formatting_6256": "Formátování výstupu", "Output_compiler_performance_information_after_building_6615": "Po sestavení generovat informace o výkonu kompilátoru.", "Output_directory_for_generated_declaration_files_6166": "Výstupní adresář pro vygenerované soubory deklarace", - "Output_file_0_from_project_1_does_not_exist_6309": "Výstupní soubor {0} z projektu {1} neexistuje.", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Výstupní soubor {0} se nesestavil ze zdrojového souboru {1}.", "Output_from_referenced_project_0_included_because_1_specified_1411": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Očekává se deklarace parametru.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr má název, ale žádný typ. Měli jste na mysli {0}: {1}?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modifikátory parametrů se dají používat jen v typescriptových souborech.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá privátní název {1}.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Po kompilaci vytiskněte názvy generovaných souborů.", "Print_this_message_6017": "Vytisknout tuto zprávu", "Private_accessor_was_defined_without_a_getter_2806": "Privátní přístupový objekt se definoval bez metody getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Privátní pole „{0}“ musí být deklarované v nadřazené třídě.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Privátní identifikátory se v deklaracích proměnných nepovolují.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Privátní identifikátory se mimo těla tříd nepovolují.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Privátní identifikátory jsou povolené jenom v tělech třídy a smí se používat jenom jako součást deklarace člena třídy nebo přístupu k vlastnosti, případně na levé straně výrazu in.", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Privátní identifikátory jsou dostupné jen při cílení na ECMAScript 2015 a novější.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Privátní identifikátory se nedají použít jako parametry.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "K privátnímu nebo chráněnému členu {0} se nedá přistupovat v parametru typu.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt {0} nejde sestavit, protože jeho závislost {1} obsahuje chyby.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Projekt {0} nejde sestavit, protože se nesestavila jeho závislost {1}.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Projekt {0} se nuceně vytváří znovu.", + "Project_0_is_out_of_date_because_1_6420": "Projekt „{0}“ je zastaralý, protože {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že soubor „{2}“ byl kořenovým souborem kompilace, ale už není.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt {0} je zastaralý, protože soubor buildinfo „{1}“ označuje, že program musí hlásit chyby.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "{0} projektu je zastaralý, protože soubor buildinfo {1} indikuje, že se některé změny nevygenerovaly.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že došlo ke změně v možnosti „compilerOptions“.", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt {0} je zastaralý, protože jeho závislost {1} je zastaralá.", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt {0} je zastaralý, protože výstup {1} je starší než vstup {2}.", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt {0} je zastaralý, protože výstupní soubor {1} neexistuje.", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt {0} je zastaralý, protože jeho výstup se vygeneroval pomocí verze {1}, která se liší od aktuální verze {2}.", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Projekt {0} je zastaralý, protože se změnil výstup jeho závislosti {1}.", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Projekt {0} je zastaralý, protože při čtení souboru {1} došlo k chybě.", "Project_0_is_up_to_date_6361": "Projekt {0} je aktuální.", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt {0} je aktuální, protože nejnovější vstup {1} je starší než výstup {2}.", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "Vlastnost {0} se používá dříve, než se inicializuje.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Zdá se, že vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Vlastnost {0} rozšířeného atributu JSX nejde přiřadit cílové vlastnosti.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Vlastnost {0} exportovaného výrazu třídy nesmí být privátní nebo chráněná.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Vlastnost „{0}“ exportovaného anonymního typu třídy nesmí být privátní ani chráněná.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Vlastnost {0} exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Vlastnost {0} exportovaného rozhraní má nebo používá privátní název {1}.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Vlastnost {0} typu {1} se nedá přiřadit k {2} typu indexu {3}.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Vlastnost {0} přepíše základní vlastnost v {1}. Pokud je to záměr, přidejte inicializátor. Jinak přidejte modifikátor declare nebo odeberte redundantní deklaraci.", "Property_assignment_expected_1136": "Očekává se přiřazení vlastnosti.", "Property_destructuring_pattern_expected_1180": "Očekává se vzor destruktoru vlastnosti.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Vlastnost musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", "Property_or_signature_expected_1131": "Očekává se vlastnost nebo podpis.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Hodnota vlastnosti může být jenom řetězcový literál, číselný literál, true, false, null, literál objektu nebo literál pole.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Při cílení na ES5 nebo ES3 poskytněte plnou podporu iterovatelných proměnných ve for-of, rozšíření a destrukturování.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Při cílení na „ES5“ poskytněte plnou podporu iterovatelných proměnných v příkazu „for-of“, rozšíření a destrukturování.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Veřejná metoda {0} z exportované třídy má nebo používá privátní název {1}.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Když se parametr funkce nepřečte, nahlaste chybu.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Vyvolat chybu u výrazů a deklarací s implikovaným typem any", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Vyvolá chybu u výrazů this s implikovaným typem any.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Opětovný export typu ve chvíli, kdy se poskytl příznak --isolatedModules, vyžaduje, aby se použilo export type.", + "Range_out_of_order_in_character_class_1517": "Rozsah ve třídě znaků je mimo pořadí.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Při opětovném exportu typu s povolenou možností „{0}“ je nutné použít možnost „export type“.", + "React_components_cannot_include_JSX_namespace_names_2639": "Komponenty React nemůžou obsahovat názvy oborů názvů JSX.", "Redirect_output_structure_to_the_directory_6006": "Přesměrování výstupní struktury do adresáře", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Snižte počet projektů, které TypeScript načítá automaticky.", "Referenced_project_0_may_not_disable_emit_6310": "Odkazovaný projekt {0} nemůže zakazovat generování.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Odkazovaný projekt {0} musí mít nastavení \"composite\": true.", "Referenced_via_0_from_file_1_1400": "Odkazováno přes {0} ze souboru {1}", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Relativní cesty importu vyžadují explicitní přípony souborů v importech EcmaScriptu, když --moduleResolution je node16 nebo nodenext. Zvažte přidání přípony do cesty importu.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Relativní cesty importu vyžadují explicitní přípony souborů v importech EcmaScriptu, když --moduleResolution je node16 nebo nodenext. Měli jste na mysli {0}?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Zvažte přidání přípony do cesty importu.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Měli jste na mysli „{0}“?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Odeberte z procesu sledování seznam adresářů.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Ze zpracování režimu sledování odeberte seznam souborů.", "Remove_all_unnecessary_override_modifiers_95163": "Odebrat všechny nepotřebné modifikátory override", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Ohlásit chyby v souborech .js", "Report_errors_on_unused_locals_6134": "Umožňuje nahlásit chyby u nevyužitých místních hodnot.", "Report_errors_on_unused_parameters_6135": "Umožňuje nahlásit chyby u nevyužitých parametrů.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Vyžadujte u exportů dostatečnou anotaci, aby ostatní nástroje mohly triviálně generovat soubory deklarací.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Vyžadovat, aby nedeklarované vlastnosti ze signatur indexů používaly přístupy k elementům", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Požadované parametry typu nemůžou být až za volitelnými parametry typu.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Překlad pro modul {0} se našel v mezipaměti umístění {1}.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Překlad pro direktivu odkazu na typ {0} se našel v mezipaměti umístění {1}.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Překlad nerelativního názvu selhal; zkoušíme to se zakázanými moderními funkcemi překladu Node, abychom zjistili, jestli není potřeba aktualizovat konfiguraci knihovny npm.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Překlad nerelativního názvu selhal. Zkoušíme to s možností „--moduleResolution bundler“, abychom zjistili, jestli projekt nepotřebuje aktualizaci konfigurace.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "keyof překládejte jen na názvy vlastností s hodnotami typu string (ne čísla ani symboly).", + "Resolved_under_condition_0_6414": "Vyřešeno za podmínky „{0}“.", "Resolving_in_0_mode_with_conditions_1_6402": "Řešení v režimu {0} s podmínkami {1}.", "Resolving_module_0_from_1_6086": "======== Překládá se modul {0} z {1}. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Překládá se název modulu {0} relativní k základní adrese URL {1}–{2}.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář není nastavený. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář {1}. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář není nastavený. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Překlad direktivy odkazu na typ pro program, který zadává vlastní hodnoty typeRoot, s přeskočením vyhledávání ve složce „node_modules“.", "Resolving_with_primary_search_path_0_6121": "Probíhá překlad pomocí primární cesty hledání {0}.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Parametr rest {0} implicitně obsahuje typ any[].", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest {0} má implicitně typ any[], ale je možné, že lepší typ by se vyvodil z použití.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.", "Rewrite_all_as_indexed_access_types_95034": "Přepsat vše jako indexované typy přístupu", "Rewrite_as_the_indexed_access_type_0_90026": "Přepsat jako indexovaný typ přístupu {0}", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Pravý operand ?? je nedostupný, protože levý operand nemá nikdy hodnotu null.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nedá se určit kořenový adresář, přeskakují se primární cesty hledání.", "Root_file_specified_for_compilation_1427": "Kořenový soubor, který se zadal pro kompilaci", "STRATEGY_6039": "STRATEGIE", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Uložte soubory .tsbuildinfo, aby byla možná přírůstková kompilace projektů.", "Saw_non_matching_condition_0_6405": "Byla zjištěna neshodná podmínka {0}.", "Scoped_package_detected_looking_in_0_6182": "Zjištěn balíček v oboru, hledání v: {0}", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Vyhledávají se záložní rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Vyhledávají se upřednostňovaná rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "Výběr nepředstavuje platný příkaz (platné příkazy).", "Selection_is_not_a_valid_type_node_95133": "Výběr není platným uzlem typů.", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Nastavte verzi jazyka JavaScript pro generovaný JavaScript a zahrňte deklarace kompatibilních knihoven.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Zobrazí podrobné diagnostické informace.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Zobrazit, co by se sestavilo (nebo odstranilo, pokud je zadaná možnost --clean)", "Signature_0_must_be_a_type_predicate_1224": "Signatura {0} musí být predikát typu.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklarace signatur se dají používat jen v typescriptových souborech.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Přeskočí vytváření podřízených projektů při chybě v nadřazeném projektu.", "Skip_type_checking_all_d_ts_files_6693": "Přeskočte kontrolu typů ve všech souborech .d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Při kontrole typů vynechte soubory .d.ts zahrnuté do TypeScriptu.", "Skip_type_checking_of_declaration_files_6012": "Přeskočit kontrolu typu souborů deklarace", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Sestavení projektu {0} se přeskakuje, protože jeho závislost {1} obsahuje chyby.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Sestavení projektu {0} se přeskakuje, protože se nesestavila jeho závislost {1}.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Přeskakuje se modul „{0}“, který vypadá jako absolutní identifikátor URI. Cílové typy souborů: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}.", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none.", "Source_has_0_element_s_but_target_allows_only_1_2619": "Zdroj má následující počet elementů, ale cíl jich povoluje jen {1}: {0}", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Zadejte, jak má fungovat režim sledování TypeScriptu.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Zadejte soubory knihovny, které se mají zahrnout do kompilace.", "Specify_module_code_generation_6016": "Určete generování kódu modulu.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Zadejte strategii překladu modulu: node (Node.js) nebo classic (TypeScript verze nižší než 1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Zadejte specifikátor modulu, který se použije k naimportování továrních funkcí JSX při použití „jsx: react-jsx“.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Zadejte více složek, které budou figurovat jako „node_modules/@types“.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Zadejte jednu nebo více cest nebo jeden či více odkazů na moduly uzlů se základními konfiguračními soubory, ze kterých se dědí nastavení.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Statické členy nemůžou odkazovat na parametry typu třídy.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Statická vlastnost {0} je v konfliktu s předdefinovanou vlastností Function.{0} funkce konstruktoru {1}.", "String_literal_expected_1141": "Očekává se řetězcový literál.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Názvy importu a exportu řetězcového literálu se nepodporují, pokud je příznak „--module“ nastavený na „es2015“ nebo „es2020“.", "String_literal_with_double_quotes_expected_1327": "Očekával se řetězcový literál s dvojitými uvozovkami.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylizujte chyby a zprávy pomocí barev a kontextu (experimentální).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "V případě znaménka minus musí být uvedeny příznaky dílčích vzorů.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Deklarace následných vlastností musí obsahovat stejný typ. Vlastnost {0} musí být typu {1}, ale tady je typu {2}.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Deklarace následných proměnných musí obsahovat stejný typ. Proměnná {0} musí být typu {1}, ale tady je typu {2}.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Nahrazení {0} za vzor {1} má nesprávný typ, očekával se typ string, obdržený je {2}.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Označené výrazy šablony se v nepovinném řetězu nepovolují.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Cíl povoluje jen určitý počet elementů ({0}), ale zdroj jich může mít více.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Cíl vyžaduje určitý počet elementů ({0}), ale zdroj jich může mít méně.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Cílový podpis poskytuje příliš málo argumentů. Očekávalo se {0} nebo více, ale bylo obdrženo {1}.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modifikátor {0} se dá používat jen v typescriptových souborech.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Operátor {0} nejde použít u typu symbol.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operátor {0} není u logických typů povolený. Můžete ale použít {1}.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Vlastnost {0} asynchronního iterátoru musí být metoda.", "The_0_property_of_an_iterator_must_be_a_method_2767": "Vlastnost {0} iterátoru musí být metoda.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ Object se dá přiřadit jen k malému počtu dalších typů. Nechtěli jste místo toho použít typ any?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Funkce šipky v ES3 a ES5 nemůže odkazovat na objekt arguments. Zvažte použití standardního výrazu funkce.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "V ES3 a ES5 se na objekt arguments nedá odkazovat v asynchronní funkci nebo metodě. Zvažte možnost použít standardní funkci nebo metodu.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Příznaky Unicode (u) a Unicode Sets (v) nelze nastavit současně.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Funkce s šipkou v ES5 nemůže odkazovat na objekt „arguments“. Zvažte použití standardního výrazu funkce.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "V ES5 se na objekt „arguments“ nedá odkazovat v asynchronní funkci nebo metodě. Zvažte možnost použít standardní funkci nebo metodu.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Tělo příkazu if nemůže být prázdný příkaz.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Volání by pro tuto implementaci proběhlo úspěšně, ale signatury implementace pro přetížení nejsou externě k dispozici.", "The_character_set_of_the_input_files_6163": "Znaková sada vstupních souborů", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Odvozený typ {0} se odkazuje na typ s cyklickou strukturou, která se nedá triviálně serializovat. Musí se použít anotace typu.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Odvozený typ {0} odkazuje na nepřístupný typ {1}. Musí se použít anotace typu.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Odvozený typ tohoto uzlu přesahuje maximální délku, kterou kompilátor může serializovat. Je potřeba zadat explicitní anotaci typu.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicializátor deklarace „using“ musí být buď objekt s metodou „[Symbol.dispose]()“, nebo musí mít hodnotu „null“ nebo „undefined“.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicializátor deklarace „await using“ musí být buď objekt s metodou „[Symbol.asyncDispose]()“ nebo „[Symbol.dispose]5D;()“, nebo musí mít hodnotu „null“ nebo „undefined“.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Průnik {0} se omezil na never, protože vlastnost {1} existuje v několika konstituentech a v některých z nich je privátní.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Průnik {0} se omezil na never, protože vlastnost {1} má v některých konstituentech konfliktní typy.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Klíčové slovo intrinsic se dá použít jenom k deklaraci vnitřních typů poskytovaných kompilátorem.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "Poslední přetížení vrátilo následující chybu.", "The_last_overload_is_declared_here_2771": "Poslední přetížení je deklarované tady.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Levá strana příkazu for...in nemůže být destrukturačním vzorem.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Levá strana příkazu „for...in“ nemůže být deklarace „using“.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Levá strana příkazu „for...in“ nemůže být deklarace „await using“.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Levá strana příkazu for...in nemůže používat anotaci typu.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Levá strana příkazu for...in nemůže představovat přístup k nepovinné vlastnosti.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Levá strana příkazu for..n musí být proměnná nebo přístup k vlastnosti.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Levá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Levá strana výrazu přiřazení nemůže představovat přístup k nepovinné vlastnosti.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Levá strana výrazu přiřazení musí být proměnná nebo přístup k vlastnosti.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Levá strana výrazu „instanceof“ musí být přiřaditelná k prvnímu argumentu metody „[Symbol.hasInstance]“ na pravé straně.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Levá strana výrazu instanceof musí být typu any, typem objektu nebo parametrem typu.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Národní prostředí, které se používá při zobrazování zpráv uživateli (třeba cs-CZ)", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maximální hloubka závislostí pro vyhledávání pod node_modules a načítání javascriptových souborů", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování exportu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování importu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "K vlastnosti {0} se nedá přistupovat v typu {1} v této třídě, protože ho překrývá jiný privátní identifikátor se stejným zápisem.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Návratový typ přístupového objektu get musí být přiřaditelný k jeho typu přístupového objektu set.", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Návratový typ funkce dekorátoru parametru funkce musí být void nebo any.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Návratový typ funkce dekorátoru vlastnosti musí být void nebo any.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Návratový typ asynchronní funkce musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise. Zamýšleli jste napsat Promise<{0}>?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Pravá strana příkazu for...in musí být typu any, typem objektu nebo parametrem typu, ale tady má typ {0}.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Pravá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Pravá strana výrazu instanceof musí mít typ any nebo typ, který se dá přiřadit k typu rozhraní Function.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Pravá strana výrazu „instanceof“ musí být typ „any“, třída, funkce nebo jiný typ, který se dá přiřadit k typu rozhraní „Function“, nebo typu objektu s metodou „Symbol.hasInstance“.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Pravá strana výrazu „instanceof“ nesmí být výrazem vytvoření instance.", "The_root_value_of_a_0_file_must_be_an_object_5092": "Kořenová hodnota souboru {0} musí být objekt.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává alespoň {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "Překrývající deklarace {0} je definovaná tady.", "The_signature_0_of_1_is_deprecated_6387": "Signatura {0} pro {1} je zastaralá.", "The_specified_path_does_not_exist_Colon_0_5058": "Zadaná cesta neexistuje: {0}", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Pokud se v příkazu k exportu používá „export type“, nemůžete v pojmenovaném exportu použít modifikátor „type“.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Pokud se v příkazu k importu používá „import type“, nemůžete v pojmenovaném importu použít modifikátor „type“.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Typ deklarace funkce musí odpovídat její signatuře.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Tento typ výrazu se nedá pojmenovat bez kontrolního výrazu resolution-mode, což je nestabilní funkce. K potlačení této chyby použijte noční vydání TypeScript. Pokuste se o update pomocí „npm install -D typescript@next'.“.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Uzel tohoto typu nejde serializovat, protože nejde serializovat jeho vlastnost {0}.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ vrácený metodou {0}() asynchronního iterátoru musí být příslib pro typ s vlastností value.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ vrácený metodou {0}() iterátoru musí obsahovat vlastnost value.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklarace proměnné příkazu for...in nemůže obsahovat inicializátor.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklarace proměnné příkazu for...of nemůže obsahovat inicializátor.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Příkaz with není podporovaný. Všechny symboly s blokem with budou typu any.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "V „{0}“ jsou typy, ale tento výsledek se v aktuálním nastavení „moduleResolution“ nepovedlo vyřešit. Zvažte aktualizaci na „node16“, „nodenext“ nebo „bundler“.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "V „{0}“ jsou typy, ale tento výsledek se při respektování pole „exports“ souboru package.json nepodařilo vyřešit. Knihovna „{1}“ bude pravděpodobně muset aktualizovat svůj soubor package.json nebo typings.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "V tomto regulárním výrazu není žádná zachycující skupina s názvem „{0}“.", + "There_is_nothing_available_for_repetition_1507": "Není k dispozici nic pro opakování.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Vlastnost {0} této značky JSX očekává jeden podřízený objekt typu {1}, ale poskytlo se jich více.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Vlastnost {0} této značky JSX očekává typ {1}, který vyžaduje více podřízených objektů, ale zadal se jen jeden.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu nejsou žádné zachytávací skupiny.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu jsou pouze {0} zachytávací skupiny.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Tento binární výraz nikdy nemá hodnotu null. Nechybí vám závorky?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tento znak nelze uvozovat v regulárním výrazu.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Toto porovnání se zdá být neúmyslné, protože typy {0} a {1} se nijak nepřekrývají.", "This_condition_will_always_return_0_2845": "Tato podmínka vždy vrátí {0}.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Tato podmínka vždy vrátí „{0}“, protože JavaScript porovnává objekty pomocí odkazu, nikoli hodnoty.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Tato podmínka vždy vrátí hodnotu True, protože tato {0} je vždy definovaná.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Tato podmínka vždy vrátí hodnotu True, protože tato funkce je vždy definována. Chtěli jste ji místo toho nazvat?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Tato funkce konstruktoru se může převést na deklaraci třídy.", + "This_expression_is_always_nullish_2871": "Tento výraz má vždy hodnotu null.", "This_expression_is_not_callable_2349": "Tento výraz se nedá zavolat.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tento výraz se nedá volat, protože je to přístupový objekt get. Nechtěli jste ho použít bez ()?", "This_expression_is_not_constructable_2351": "Tento výraz se nedá vytvořit.", "This_file_already_has_a_default_export_95130": "Tento soubor už má výchozí export.", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Tento import se nikdy nepoužívá jako hodnota a musí používat import type, protože importsNotUsedAsValues je nastavené na error.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Toto je deklarace, která se rozšiřuje. Zvažte možnost přesunout rozšiřující deklaraci do stejného souboru.", + "This_kind_of_expression_is_always_falsy_2873": "Tento druh výrazu je vždy nepravdivý.", + "This_kind_of_expression_is_always_truthy_2872": "Tento druh výrazu je vždy pravdivý.", "This_may_be_converted_to_an_async_function_80006": "Toto je možné převést na asynchronní funkci.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Tento člen musí mít modifikátor override, protože přepisuje abstraktní metodu, která je deklarovaná v základní třídě {0}.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Na tento modul je možné se pomocí importů nebo exportů ECMAScript odkazovat jen tak, že se zapne příznak {0} a odkáže se na výchozí export.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Tento modul se deklaroval pomocí export =, a dá se použít jenom s výchozím importem při použití příznaku {0}.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tato operace se dá zjednodušit. Tento posun je totožný s {0} {1} {2}.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Toto přetížení implicitně vrací typ „{0}“, protože postrádá anotaci návratového typu.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Tato signatura přetížení není kompatibilní se signaturou implementace.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Tento parametr se nepodporuje s direktivou use strict.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Tato vlastnost parametru musí mít komentář JSDoc se značkou @override, protože přepisuje člen v základní třídě {0}.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Tato vlastnost parametru musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tento příznak regulárního výrazu nelze přepnout v rámci dílčího vzoru.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Tento příznak regulárního výrazu je k dispozici pouze při cílení na „{0}“ nebo novější.", "This_spread_always_overwrites_this_property_2785": "Tento rozsah vždy přepíše tuto vlastnost.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Přidejte koncovou čárku nebo explicitní omezení.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Místo toho použijte výraz „as“.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0}\" nebo přidejte pole \"type\": \"module\" do {1}.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0} nebo vytvořte místní soubor package.json s {\"type\": \"module\"}.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pokud chcete tento soubor převést na modul ECMAScript, vytvořte místní soubor package.json s { \"type\": \"module\" }.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Výrazy await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16 nebo nodenext a možnost target je nastavená na es2017 nebo vyšší.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Výrazy „await“ nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na „es2022“, „esnext“, „system“, „node16“, „nodenext“ nebo „preserve“a možnost „target“ je nastavená na „es2017“ nebo vyšší.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Výrazy „await using“ nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na „es2022“, „esnext“, „system“, „node16“, „nodenext“ nebo „preserve“a možnost „target“ je nastavená na „es2017“ nebo vyšší.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarace nejvyšší úrovně v souborech .d.ts musí začínat modifikátorem declare, nebo export.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Smyčky for await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16 nebo nodenext a možnost target je nastavená na es2017 nebo vyšší.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Smyčky „for await“ nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na „es2022“, „esnext“, „system“, „node16“, „nodenext“ nebo „preserve“a možnost „target“ je nastavená na „es2017“ nebo vyšší.", "Trailing_comma_not_allowed_1009": "Čárka na konci není povolená.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluje každý soubor jako samostatný modul (podobné jako ts.transpileModule).", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Vyzkoušejte deklaraci npm i --save-dev @types/{1}, pokud existuje, nebo přidejte nový soubor deklarací (.d.ts) s deklarací declare module '{0}';.", "Trying_other_entries_in_rootDirs_6110": "Zkoušejí se další položky v rootDirs.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Zkouší se nahrazení {0}, umístění modulu kandidáta: {1}.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Název musí mít buď všechny členy řazené kolekce členů, nebo ho nesmí mít žádný člen.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ řazené kolekce členů {0} délky {1} nemá na indexu {2} žádný prvek.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typů řazené kolekce členů cyklicky odkazují samy na sebe.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Typem {0} se dá iterovat, pouze když se použije příznak --downlevelIteration nebo s možností --target nastavenou na es2015 nebo vyšší.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ {0} nemá odpovídající signaturu indexu pro typ {1}.", "Type_0_has_no_properties_in_common_with_type_1_2559": "Typ {0} nemá žádné vlastnosti společné s typem {1}.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "U typu {0} nejsou žádné podpisy, pro které platí seznam argumentů obecného typu.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}“ je obecný a lze ho indexovat pouze pro čtení.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "V typu {0} chybí následující vlastnosti z typu {1}: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "V typu {0} chybí následující vlastnosti z typu {1}: {2} a ještě {3}", "Type_0_is_not_a_constructor_function_type_2507": "Typ {0} není typ funkce konstruktoru.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Typ {0} nepředstavuje platný návratový typ asynchronní funkce v ES5/ES3, protože neodkazuje na hodnotu konstruktoru kompatibilní s příslibem.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}“ nepředstavuje platný návratový typ asynchronní funkce v ES5, protože neodkazuje na hodnotu konstruktoru kompatibilní s konstruktorem Promise.", "Type_0_is_not_an_array_type_2461": "Typ {0} není typ pole.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ {0} není typem pole nebo řetězce.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ {0} není typem pole nebo řetězce, nebo nemá metodu [Symbol.iterator](), která vrací iterátor.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ {0} se nedá přiřadit k typu {1}. Měli jste na mysli {2}?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typ {0} se nedá přiřadit typu {1}. Existují dva různé typy s tímto názvem, ale nesouvisí spolu.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Typ {0} nelze přiřadit k typu {1}, jak je implikováno anotací odchylky.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Typ „{0}“ nelze přiřadit k typu „{1}“, jak je vyžadováno pro vypočítané hodnoty členů výčtu.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typu cíle.", "Type_0_is_not_comparable_to_type_1_2678": "Typ {0} se nedá porovnat s typem {1}.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Očekává se argument typu.", "Type_argument_list_cannot_be_empty_1099": "Seznam argumentů typu nemůže být prázdný.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typů se dají používat jen v typescriptových souborech.", - "Type_arguments_cannot_be_used_here_1342": "Argumenty typu tady nejde použít.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typů pro {0} se cyklicky odkazují samy na sebe.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozici {0} ve zdroji není kompatibilní s typem na pozici {1} v cíli.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozicích {0} až {1} ve zdroji není kompatibilní s typem na pozici {2} v cíli.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ obsahující privátní název „{0}“ nejde použít s možností --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Soubory deklarace typu, které se mají zahrnout do kompilace", "Type_expected_1110": "Očekával se typ.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Kontrolní výrazy importu typů by měly mít přesně jeden klíč – resolution-mode – s hodnotou import nebo require.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Atributy importu typů by měly mít přesně jeden klíč – „resolution-mode“ – s hodnotou „import“ nebo „require“.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Vytvoření instance typu je příliš hluboké a může být nekonečné.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ se přímo nebo nepřímo odkazuje ve zpětném volání jeho vlastní metody then při splnění.", "Type_library_referenced_via_0_from_file_1_1402": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1}", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Když se podpis dekorátoru metody volá jako výraz, nejde přeložit.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Když se podpis dekorátoru parametru volá jako výraz, nejde přeložit.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Když se podpis dekorátoru vlastnosti volá jako výraz, nejde přeložit.", + "Undetermined_character_escape_1513": "Neurčený řídicí znak.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Neočekáváno: „{0}“. Nechtěli jste ho uvést zpětným lomítkem?", "Unexpected_end_of_text_1126": "Neočekávaný konec textu", "Unexpected_keyword_or_identifier_1434": "Neočekávané klíčové slovo nebo identifikátor.", "Unexpected_token_1012": "Neočekávaný token", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Neočekávaný token. Měli jste na mysli {'>'} nebo >?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Neočekávaný token. Měli jste na mysli {'}'} nebo }?", "Unexpected_token_expected_1179": "Neočekávaný token. Očekává se znak {.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Řídicí sekvence Unicode se tady nemůže vyskytovat.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Řídicí sekvence Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Výrazy hodnoty vlastnosti Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Neznámý název vlastnosti Unicode.", + "Unknown_Unicode_property_name_or_value_1529": "Neznámý název nebo hodnota vlastnosti Unicode.", + "Unknown_Unicode_property_value_1526": "Neznámá hodnota vlastnosti Unicode.", "Unknown_build_option_0_5072": "Neznámá možnost sestavení {0}", "Unknown_build_option_0_Did_you_mean_1_5077": "Neznámá možnost sestavení {0}. Měli jste na mysli {1}?", "Unknown_compiler_option_0_5023": "Neznámá možnost kompilátoru {0}", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Neznámá možnost kompilátoru {0}. Měli jste na mysli {1}?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Neznámé klíčové slovo nebo identifikátor. Neměli jste na mysli „{0}“?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Neznámá možnost excludes. Měli jste na mysli exclude?", + "Unknown_regular_expression_flag_1499": "Neznámý příznak regulárního výrazu.", "Unknown_type_acquisition_option_0_17010": "Neznámá možnost získání typu {0}", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Neznámá možnost získání typu {0}. Měli jste na mysli {1}?", "Unknown_watch_option_0_5078": "Neznámá možnost sledování {0}", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Nepoužívaný popisek", "Unused_ts_expect_error_directive_2578": "Nepoužitá direktiva @ts-expect-error", "Update_import_from_0_90058": "Aktualizovat import z: {0}", - "Updating_output_of_project_0_6373": "Aktualizuje se výstup projektu {0}...", + "Update_modifiers_of_0_90061": "Aktualizujte modifikátory „{0}“", "Updating_output_timestamps_of_project_0_6359": "Aktualizují se výstupní časová razítka projektu {0}...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Aktualizují se nezměněná výstupní časová razítka projektu {0}...", "Use_0_95174": "Použít {0}", + "Use_0_instead_5106": "Místo toho použijte možnost „{0}“.", "Use_Number_isNaN_in_all_conditions_95175": "Ve všech podmínkách použijte Number.isNaN.", "Use_element_access_for_0_95145": "Použít přístup k elementům pro {0}", "Use_element_access_for_all_undeclared_properties_95146": "Použít přístup k elementům pro všechny nedeklarované vlastnosti", + "Use_import_type_95180": "Použijte „import type“.", "Use_synthetic_default_member_95016": "Použije syntetického výchozího člena.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Při překladu importů balíčků použijte pole „exports“ souboru package.json.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Při řešení importů použijte pole „imports“ v souboru package.json.", + "Use_type_0_95181": "Použijte „type {0}„.", "Using_0_subpath_1_with_target_2_6404": "Používá se {0} dílčí cesta {1} s cílem {2}.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Použití řetězce v příkazu for...of se podporuje jenom v ECMAScript 5 nebo vyšší verzi.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Použití --build, -b způsobí, že se tsc bude chovat spíše jako orchestrátor sestavení než kompilátor. Pomocí této možnosti můžete aktivovat vytváření složených projektů, o kterých se můžete dozvědět více {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Očekává se deklarace proměnné.", "Variable_declaration_list_cannot_be_empty_1123": "Seznam deklarací proměnných nemůže být prázdný.", "Variable_declaration_not_allowed_at_this_location_1440": "Deklarace proměnné není v tomto umístění povolená.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Proměnná musí mít explicitní anotaci typu s možností --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Proměnné s více deklaracemi nemohou být vložené.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element variadic na pozici {0} ve zdroji neodpovídá elementu na pozici {1} v cíli.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Poznámky Variance se podporují pouze u aliasů typů pro typy objektů, funkcí, konstruktorů a mapování.", "Version_0_6029": "Verze {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Při kontrole typů berte v potaz i hodnoty „null“ a „undefined“.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Určuje, jestli se místo vymazání obrazovky má zachovat zastaralý výstup konzoly v režimu sledování.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Zabalit všechny neplatné znaky do kontejneru výrazu", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Uzavřít všechny neplatné výrazy dekoratéru do závorek", "Wrap_all_object_literal_with_parentheses_95116": "Uzavřít všechny literály objektů do závorek", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Zabalit všechny JSX bez nadřazených položek ve fragmentu JSX", "Wrap_in_JSX_fragment_95120": "Zabalit ve fragmentu JSX", + "Wrap_in_parentheses_95194": "Uzavřít do závorek", "Wrap_invalid_character_in_an_expression_container_95108": "Zabalit neplatný znak do kontejneru výrazu", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Uzavřít následující kód, který by měl být literál objektu, do závorek", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informace o všech možnostech kompilátoru najdete na {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Signatury indexu {0} a {1} jsou nekompatibilní.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operace {0} a {1} se nedají kombinovat bez závorek.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Položka {0} je zadána dvakrát. Atribut s názvem {0} se přepíše.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ na konci typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ na začátku typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "{0} se dá importovat jen zapnutím příznaku esModuleInterop a pomocí výchozího importu.", "_0_can_only_be_imported_by_using_a_default_import_2595": "{0} se dá importovat jen pomocí výchozího importu.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "{0} se dá importovat jen pomocí volání require nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "{0} se dá importovat jen pomocí volání require nebo pomocí výchozího importu.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo výchozího importu.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "{0} není možné zkompilovat v režimu --isolatedModules, protože se považuje za globální soubor skriptu. Pokud ho chcete převést na modul, přidejte import, export nebo prázdný příkaz export {}.", "_0_cannot_be_used_as_a_JSX_component_2786": "{0} se nedá použít jako součást JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "{0} se nedá používat jako hodnota, protože se exportovalo pomocí export type.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "{0} se nedá používat jako hodnota, protože se importovalo pomocí import type.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Komponenty {0} nepřijímají text jako podřízené prvky. Text v JSX má typ string, ale očekávaný typ {1} je {2}.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Instanci {0} by bylo možné vytvořit s libovolným typem, který by nemusel souviset s {1}.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklarace „{0}“ je možné deklarovat jenom uvnitř bloku.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklarace {0} se dají používat jen v typescriptových souborech.", + "_0_declarations_may_not_have_binding_patterns_1492": "Deklarace „{0}“ nesmí mít vzory s vazbami.", + "_0_declarations_must_be_initialized_1155": "Deklarace „{0}“ se musejí inicializovat.", "_0_expected_1005": "Očekával se: {0}.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ má typ řetězce, ale pokud je povolená možnost isolatedModules, musí mít syntakticky rozpoznatelnou syntaxi řetězce.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "{0} nemá žádný exportovaný člen s názvem {1}. Neměli jste na mysli {2}?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "{0} má implicitně návratový typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "{0} obsahuje implicitně návratový typ any, protože neobsahuje anotaci návratového typu a přímo nebo nepřímo se odkazuje v jednom ze svých návratových výrazů.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "{0} Typ indexu {1} se nedá přiřadit k {2} typu indexu {3}.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0} je primitivum, ale {1} je obálkový objekt. Pokud je to možné, použijte raději {0}.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "{0} je typ a nedá se importovat do javascriptových souborů. V poznámce typu JSDoc použijte {1}.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "Hodnota {0} je typ a musí být importována pomocí importu, který se bude zadávat jenom v případě, že jsou povolené parametry preserveValueImports a isolatedModules.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ je typ a musí se importovat pomocí importu „pouze typ“, pokud je povolená možnost verbatimModuleSyntax.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "{0} je nepoužívané přejmenování {1}. Chtěli jste ji použít jako poznámku typu?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "{0} se dá přiřadit k omezení typu {1}, ale pro {1} se dala vytvořit instance s jiným podtypem omezení {2}.", "_0_is_automatically_exported_here_18044": "{0} se sem automaticky exportuje.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "Seznam {0} nemůže být prázdný.", "_0_modifier_already_seen_1030": "Modifikátor {0} se už jednou vyskytl.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modifikátor {0} se může vyskytovat jenom u parametru typu aliasu třídy, rozhraní nebo typu.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modifikátor „{0}“ se může vyskytovat jenom u parametru typu funkce, metody nebo třídy.", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modifikátor {0} se nemůže objevit v deklaraci konstruktoru.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modifikátor {0} se nemůže objevit v elementu modulu nebo oboru názvů.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Modifikátor {0} se nemůže objevit v parametru.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Modifikátor {0} se nemůže objevit u člena typu.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modifikátor {0} se nemůže objevit u parametru typu.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modifikátor „{0}“ se nemůže vyskytovat v deklaraci „using“.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modifikátor {0} se nemůže vyskytovat v deklaraci „await using“.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modifikátor {0} se nemůže objevit v signatuře indexu.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modifikátor {0} se nemůže objevit u elementů třídy tohoto typu.", "_0_modifier_cannot_be_used_here_1042": "Modifikátor {0} tady nejde použít.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modifikátor {0} nejde použít s modifikátorem {1}.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modifikátor {0} se nedá použít s privátním identifikátorem.", "_0_modifier_must_precede_1_modifier_1029": "Modifikátor {0} se musí vyskytovat před modifikátorem {1}.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po „\\{0}“ musí následovat výraz s hodnotou vlastnosti Unicode uzavřený do složených závorek.", "_0_needs_an_explicit_type_annotation_2782": "{0} vyžaduje explicitní anotaci typu.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "{0} jenom odkazuje na typ, ale tady se používá jako obor názvů.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "{0} odkazuje jenom na typ, ale používá se tady jako hodnota.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "‚{0}‘ odkazuje jen na typ, ale tady se používá jako hodnota. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na es2015 nebo novější.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "{0} odkazuje na globální UMD, ale aktuální soubor je modul. Zvažte raději přidání importu.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "{0} odkazuje na hodnotu, ale tady se používá jako typ. Měli jste na mysli typeof {0}?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "Hodnota {0} se překládá na deklaraci jenom typu a musí být importována pomocí importu, který se bude zadávat jenom v případě, že jsou povolené parametry preserveValueImports a isolatedModules.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "Hodnota {0} se překládá na deklaraci jenom typu a musí se znovu exportovat pomocí zpětného exportu jenom typu, když je povolená vlastnost isolatedModules.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ se překládá na deklaraci „pouze typ“ a musí se exportovat pomocí importu „pouze typ“, když je povolena možnost „verbatimModuleSyntax“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Hodnota „{0}“ se překládá na deklaraci „pouze typ“ a musí se znovu exportovat pomocí zpětného exportu „pouze typ“, když je povoleno {1}.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Klíčové slovo {0} by mělo být nastaveno uvnitř objektu compilerOptions konfiguračního souboru JSON.", "_0_tag_already_specified_1223": "Značka {0} se už specifikovala.", "_0_was_also_declared_here_6203": "{0} se deklarovalo i tady.", @@ -1780,19 +1981,22 @@ "and_here_6204": "a tady.", "arguments_cannot_be_referenced_in_property_initializers_2815": "Na argumenty nejde odkazovat v inicializátorech vlastností.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "auto: Považovat soubory s importy, exporty, import.meta, jsx (s jsx: react-jsx) nebo formátem esm (s modulem node16+) za moduly.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Výraz „await“ nelze použít uvnitř statického bloku třídy.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Výrazy await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Výrazy await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Výrazy await nejdou použít v inicializátoru parametru.", "await_has_no_effect_on_the_type_of_this_expression_80007": "Výraz await nemá žádný vliv na typ tohoto výrazu.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Příkazy „await using“ jsou povoleny jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat „export {}“, aby se tento soubor převedl na modul.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Výrazy „await“ se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Příkazy „await using“ nelze použít uvnitř statického bloku třídy.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Možnost baseUrl je nastavená na {0}, pomocí této hodnoty se přeloží název modulu {1}, který není relativní.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Po „\\c“ musí následovat písmeno v ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "#! se dá použít jen na začátku souboru.", "case_or_default_expected_1130": "Očekává se case nebo default.", "catch_or_finally_expected_1472": "Očekávalo se catch nebo finally.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Deklarace const se dají deklarovat jenom uvnitř bloku.", - "const_declarations_must_be_initialized_1155": "Deklarace const se musejí inicializovat.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Inicializátor člena výčtu const se vyhodnotil na nekonečnou hodnotu.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Inicializátor člena výčtu const se vyhodnotil na nepovolenou hodnotu NaN.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Inicializátory členů konstantního výčtu můžou obsahovat jen hodnoty literálů a další vypočítané hodnoty výčtu.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Inicializátory členů konstantního výčtu musí být konstantní výrazy.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Výčty const se dají použít jenom ve výrazech přístupu k vlastnosti nebo indexu nebo na pravé straně deklarace importu, přiřazení exportu nebo dotazu na typ.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "constructor se nedá použít jako název vlastnosti parametru.", "constructor_is_a_reserved_word_18012": "#constructor je rezervované slovo.", @@ -1811,13 +2015,14 @@ "file_6025": "soubor", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Smyčky for await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Smyčky for await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Smyčky „for await“ nelze použít uvnitř statického bloku třídy.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Přístupové objekty get a set nemůžou deklarovat parametry this.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "[], pokud je zadáno „soubory“, jinak [\"**/*\"]5D;", "implements_clause_already_seen_1175": "Klauzule implements se už jednou vyskytla.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule implements se dají používat jen v typescriptových souborech.", "import_can_only_be_used_in_TypeScript_files_8002": "import = se dá používat jen v typescriptových souborech.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklarace infer jsou povolené jenom v klauzuli extends podmíněného typu.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Deklarace let je možné deklarovat jenom uvnitř bloku.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po „\\k“ musí následovat název zachycující skupiny uzavřený do ostrých závorek.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Nepovoluje se používat let jako název v deklaracích let nebo const.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`", "module_system_or_esModuleInterop_6904": "module === \"system\" or esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "package.json nemá položku typesVersions, která by odpovídala verzi {0}.", "package_json_had_a_falsy_0_field_6220": "Soubor package.json obsahoval neplatné pole {0}.", "package_json_has_0_field_1_that_references_2_6101": "Soubor package.json má pole {0} {1}, které odkazuje na {2}.", + "package_json_has_a_peerDependencies_field_6281": "Soubor package.json má pole „peerDependencies“.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "package.json má položku typesVersions {0}, která není platný rozsah semver.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "package.json má položku typesVersions {0}, která odpovídá verzi kompilátoru {1}. Hledá se vzor, který bude odpovídat názvu modulu {2}.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "package.json má pole typesVersions s mapováními cesty specifickými pro verzi.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json scope {0} má neplatný typ pro cíl specifikátoru {1}.", "package_json_scope_0_has_no_imports_defined_6273": "package.json scope {0} nemá definovány žádné importy.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Je zadaná možnost paths, hledá se vzor, který odpovídá názvu modulu {0}.", + "q_is_only_available_inside_character_class_1511": "„\\q“ je k dispozici pouze uvnitř třídy znaků.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po „\\q“ musí následovat řetězcové alternativy uzavřené ve složených závorkách.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modifikátor readonly se může objevit jenom v deklaraci vlastnosti nebo signatuře indexu.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modifikátor typu readonly se povoluje jen pro typy literálů pole a řazené kolekce členů.", "require_call_may_be_converted_to_an_import_80005": "Volání require se dá převést na import.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Kontrolní výrazy resolution-mode se podporují jenom tehdy, kdy je moduleResolution node16 nebo nodenext", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Kontrolní výrazy resolution-mode jsou nestabilní. K potlačení této chyby použijte noční vydání TypeScript. Pokuste se o update pomocí „npm install -D typescript@next'.“.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "resolution-mode se dá nastavit pouze pro importy type-only.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "resolution-mode je jediný platný klíč pro kontrolní výrazy importu typů.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "„resolution-mode“ je jediný platný klíč pro atributy importu typů.", "resolution_mode_should_be_either_require_or_import_1453": "resolution-mode by měl být buď require, nebo import.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Je nastavená možnost rootDirs, použije se k překladu relativního názvu modulu {0}.", "super_can_only_be_referenced_in_a_derived_class_2335": "Na vlastnost super se dá odkazovat jenom v odvozené třídě.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "Na vlastnost this se nedá odkazovat v názvu počítaného prostředku.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Na vlastnost this se nedá odkazovat v modulu nebo těle oboru názvů.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Na vlastnost this se nedá odkazovat v inicializátoru statické vlastnosti.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "Na vlastnost this se nedá odkazovat v argumentech konstruktoru.", "this_cannot_be_referenced_in_current_location_2332": "Na vlastnost this se nedá odkazovat v aktuálním umístění.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Možnost this má implicitně typ any, protože nemá anotaci typu.", "true_for_ES2022_and_above_including_ESNext_6930": "„true“ pro ES2022 a vyšší, včetně ESNext.", "true_if_composite_false_otherwise_6909": "„true“, pokud „composite“, „false“ jinak", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "Má hodnotu True, když „moduleResolution“ je „node16“, „nodenext“ nebo „bundler“; v opačném případě má hodnotu False.", "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: kompilátor TypeScriptu", "type_Colon_6902": "typ:", "unique_symbol_types_are_not_allowed_here_1335": "Typy unique symbol tady nejsou povolené.", diff --git a/node_modules/typescript/lib/de/diagnosticMessages.generated.json b/node_modules/typescript/lib/de/diagnosticMessages.generated.json index 8aa99fe931..ef387656e4 100644 --- a/node_modules/typescript/lib/de/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/de/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "ALLE COMPILEROPTIONEN", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Ein Modifizierer \"{0}\" darf nicht mit einer Importdeklaration verwendet werden.", "A_0_parameter_must_be_the_first_parameter_2680": "Ein \"{0}\"-Parameter muss der erste Parameter sein.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Ein JSDoc-Tag \"@template\" darf nicht auf ein \"@typedef\", \"@callback\" oder \"@overload\" folgen.", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Ein JSDoc-Kommentar \"@typedef\" darf nicht mehrere @type-Tags enthalten.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Ein \"bigint\"-Literal kann nicht als Eigenschaftenname verwendet werden.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Ein bigint-Literal kann keine exponentielle Notation verwenden.", "A_bigint_literal_must_be_an_integer_1353": "Ein bigint-Literal muss eine ganze Zahl sein.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Ein Bindungsmusterparameter darf in einer Implementierungssignatur nicht optional sein.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Eine break-Anweisung darf nur in einer einschließenden iteration- oder switch-Anweisung verwendet werden.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Eine break-Anweisung kann nur zu einer Bezeichnung einer einschließenden Anweisung springen.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Eine Zeichenklasse darf kein reserviertes doppeltes Interpunktionszeichen enthalten. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Ein Zeichenklassenbereich darf nicht durch eine andere Zeichenklasse gebunden werden.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Eine Klasse kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten implementieren.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Eine Klasse kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern implementieren.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Eine Klasse kann einen primitiven Typ wie \"{0}\" nicht erweitern. Klassen können nur konstruierbare Werte erweitern.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Eine Klasse kann keinen primitiven Typ wie \"{0}\" implementieren. Es können nur andere benannte Objekttypen implementiert werden.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Eine Klassendeklaration ohne den default-Modifizierer muss einen Namen besitzen.", "A_class_member_cannot_have_the_0_keyword_1248": "Ein Klassenmember darf nicht das Schlüsselwort \"{0}\" aufweisen.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Ein Kommaausdruck ist in einem berechneten Eigenschaftennamen unzulässig.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Ein Konstruktor darf keinen \"this\"-Parameter aufweisen.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Eine continue-Anweisung darf nur in einer einschließenden iteration-Anweisung verwendet werden.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Eine continue-Anweisung kann nur zu einer Bezeichnung einer einschließenden Iterationsanweisung springen.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Eine Deklarationsdatei kann nicht ohne \"import type\" importiert werden. Wollten Sie stattdessen eine Implementierungsdatei \"{0}\" importieren?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Ein declare-Modifizierer darf nicht in einem Kontext verwendet werden, der bereits ein Umgebungskontext ist.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Ein Decorator-Element kann nur für eine Methodenimplementierung und nicht für eine Überladung verwendet werden.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Eine default-Klausel darf nicht mehrmals in einer switch-Anweisung auftreten.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Ein Standardexport muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Eine definitive Zuweisungsassertion \"!\" ist in diesem Kontext nicht zulässig.", "A_destructuring_declaration_must_have_an_initializer_1182": "Eine destrukturierende Deklaration muss einen Initialisierer besitzen.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Ein dynamischer Importaufruf in ES5/ES3 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Ein dynamischer Importaufruf in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Ein dynamischer Importaufruf gibt \"Promise\" zurück. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihre Option \"--lib\" ein.", "A_file_cannot_have_a_reference_to_itself_1006": "Eine Datei darf keinen Verweis auf sich selbst enthalten.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Eine Funktion, die \"never\" zurückgibt, kann keinen erreichbaren Endpunkt besitzen.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Eine Funktion, die mit dem Schlüsselwort \"new\" aufgerufen wird, darf keinen \"this\"-Typ aufweisen, der \"void\" ist.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Eine Funktion, deren Typ weder als \"void\" noch als \"any\" deklariert ist, muss einen Wert zurückgeben.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Eine Funktion, deren Typ weder als \"void\" noch als \"any\" deklariert ist, muss einen Wert zurückgeben.", "A_generator_cannot_have_a_void_type_annotation_2505": "Ein Generator darf keine void-Typanmerkung aufweisen.", "A_get_accessor_cannot_have_parameters_1054": "Eine get-Zugriffsmethode darf keine Parameter haben.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Eine Get-Zugriffsmethode muss mindestens so zugänglich sein wie der Setter.", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Eine Namespacedeklaration darf sich nicht in einer anderen Datei als die Klasse oder Funktion befinden, mit der sie zusammengeführt wird.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Eine Namespacedeklaration darf nicht vor der Klasse oder Funktion positioniert werden, mit der sie zusammengeführt wird.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Eine Namespacedeklaration ist nur auf der obersten Ebene eines Namespaces oder Moduls zulässig.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Eine Namespace-Deklaration darf nicht mit dem Schlüsselwort \"module\" deklariert werden. Verwenden Sie stattdessen das Schlüsselwort \"namespace\".", "A_non_dry_build_would_build_project_0_6357": "Bei einem Build ohne das Flag \"-dry\" würde das Projekt \"{0}\" erstellt.", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Bei einem Build ohne das Flag \"-dry\" würden die folgenden Dateien gelöscht: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Ein Build ohne das Flag \"-dry\" würde die Ausgabe des Projekts \"{0}\" aktualisieren.", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Ein Build ohne das Flag \"-dry\" würde die Zeitstempel der Ausgabe von Projekt \"{0}\" aktualisieren.", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Ein Parameterinitialisierer ist nur in einer Funktions- oder Konstruktorimplementierung zulässig.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Eine Parametereigenschaft darf nicht mithilfe eines rest-Parameters deklariert werden.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Ein „super“ Aufruf muss die erste Anweisung im Konstruktor sein, um auf „super“ oder „this“ zu verweisen, wenn eine abgeleitete Klasse initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ein auf \"this\" basierender Typwächter ist nicht mit einem parameterbasierten Typwächter kompatibel.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Ein this-Typ ist nur in einem nicht statischen Member einer Klasse oder Schnittstelle verfügbar.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Ein \"export\"-Modifizierer der obersten Ebene kann nicht für Wertdeklarationen in einem CommonJS-Modul verwendet werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Eine Datei \"tsconfig.json\" ist bereits definiert unter: \"{0}\".", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Ein Tupelelement kann nicht gleichzeitig als \"optional\" und als \"rest\" festgelegt werden.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Ein Tupeltyp kann nicht mit einem negativen Wert indiziert werden.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Ein yield-Ausdruck ist nur in einem Generatortext zulässig.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Auf die abstrakte Methode \"{0}\" in der Klasse \"{1}\" kann nicht über den super-Ausdruck zugegriffen werden.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Auf die abstrakte Eigenschaft \"{0}\" in der Klasse \"{1}\" kann im Konstruktor nicht zugegriffen werden.", "Accessibility_modifier_already_seen_1028": "Der Zugriffsmodifizierer ist bereits vorhanden.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Zugriffsmethoden sind nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Beide Accessoren müssen abstrakt oder nicht abstrakt sein.", "Add_0_to_unresolved_variable_90008": "Der nicht aufgelösten Variablen \"{0}.\" hinzufügen", "Add_a_return_statement_95111": "return-Anweisung hinzufügen", + "Add_a_return_type_to_the_function_declaration_9031": "Fügen Sie der Funktionsdeklaration einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_function_expression_9030": "Fügen Sie dem Funktionsausdruck einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Fügen Sie der get-Accessordeklaration einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_method_9034": "Der Methode einen Rückgabetyp hinzufügen", + "Add_a_type_annotation_to_the_parameter_0_9028": "Fügen Sie dem Parameter {0} eine Typanmerkung hinzu.", + "Add_a_type_annotation_to_the_property_0_9029": "Fügen Sie der Eigenschaft {0} eine Typanmerkung hinzu.", + "Add_a_type_annotation_to_the_variable_0_9027": "Fügen Sie der Variable {0} eine Typanmerkung hinzu.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Fügen Sie dem Parameter der set-Accessordeklaration einen Typ hinzu.", "Add_all_missing_async_modifiers_95041": "Alle fehlenden async-Modifizierer hinzufügen", "Add_all_missing_attributes_95168": "Alle fehlenden Attribute hinzufügen", "Add_all_missing_call_parentheses_95068": "Alle fehlenden Klammern in Aufrufen hinzufügen", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Alle fehlenden Importe hinzufügen", "Add_all_missing_members_95022": "Alle fehlenden Member hinzufügen", "Add_all_missing_override_modifiers_95162": "Alle fehlenden override-Modifizierer hinzufügen", + "Add_all_missing_parameters_95190": "Alle fehlenden Parameter hinzufügen", "Add_all_missing_properties_95166": "Alle fehlenden Eigenschaften hinzufügen", "Add_all_missing_return_statement_95114": "Alle fehlenden return-Anweisungen hinzufügen", "Add_all_missing_super_calls_95039": "Alle fehlenden super-Aufrufe hinzufügen", + "Add_all_missing_type_annotations_90067": "Alle fehlenden Typanmerkungen hinzufügen", + "Add_all_optional_parameters_95193": "Alle optionalen Parameter hinzufügen", + "Add_annotation_of_type_0_90062": "Anmerkung vom Typ \"{0}\" hinzufügen", "Add_async_modifier_to_containing_function_90029": "Async-Modifizierer zur enthaltenden Funktion hinzufügen", "Add_await_95083": "\"await\" hinzufügen", "Add_await_to_initializer_for_0_95084": "\"await\" zum Initialisierer für \"{0}\" hinzufügen", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Allen nicht initialisierten Eigenschaften Initialisierer hinzufügen", "Add_missing_attributes_95167": "Fehlende Attribute hinzufügen", "Add_missing_call_parentheses_95067": "Fehlende Klammern in Aufrufen hinzufügen", + "Add_missing_comma_for_object_member_completion_0_95187": "Fügen Sie ein fehlendes Komma für die Vervollständigung von Objektmembern \"{0}\" hinzu.", "Add_missing_enum_member_0_95063": "Fehlenden Enumerationsmember \"{0}\" hinzufügen", "Add_missing_function_declaration_0_95156": "Fehlende Funktionsdeklaration \"{0}\" hinzufügen", "Add_missing_new_operator_to_all_calls_95072": "Fehlenden new-Operator zu allen Aufrufen hinzufügen", "Add_missing_new_operator_to_call_95071": "Fehlender new-Operator zum Aufruf hinzufügen", + "Add_missing_parameter_to_0_95188": "Fehlenden Parameter zu \"{0}\" hinzufügen", + "Add_missing_parameters_to_0_95189": "Fehlende Parameter zu \"{0}\" hinzufügen", "Add_missing_properties_95165": "Fehlende Eigenschaften hinzufügen", "Add_missing_super_call_90001": "Fehlenden super()-Aufruf hinzufügen", "Add_missing_typeof_95052": "Fehlenden \"typeof\" hinzufügen", "Add_names_to_all_parameters_without_names_95073": "Namen zu allen Parametern ohne Namen hinzufügen", + "Add_optional_parameter_to_0_95191": "Optionale Parameter zu \"{0}\" hinzufügen", + "Add_optional_parameters_to_0_95192": "Optionale Parameter zu \"{0}\" hinzufügen", "Add_or_remove_braces_in_an_arrow_function_95058": "Geschweifte Klammern zu einer Pfeilfunktion hinzufügen oder daraus entfernen", "Add_override_modifier_95160": "override-Modifizierer hinzufügen", "Add_parameter_name_90034": "Parameternamen hinzufügen", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Allen nicht aufgelösten Variablen, die einem Membernamen entsprechen, Qualifizierer hinzufügen", + "Add_return_type_0_90063": "Rückgabetyp \"{0}\" hinzufügen", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Fügen Sie diesem Ausdruck Erfüllungen und eine Typassertion hinzu (entspricht T als T), um den Typ explizit zu machen.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Erfüllungen und eine Inlinetypassertion mit \"{0}\" hinzufügen", "Add_to_all_uncalled_decorators_95044": "Allen nicht aufgerufenen Decorators \"()\" hinzufügen", "Add_ts_ignore_to_all_error_messages_95042": "Allen Fehlermeldungen \"@ts-ignore\" hinzufügen", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Fügen Sie einem Typ „undefined“ hinzu, wenn über einen Index darauf zugegriffen wird.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Standardimporte von Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Codeausgabe aus, lediglich auf die Typprüfung.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "\"Import x from y\" zulassen, wenn ein Modul keinen Standardexport hat.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Das Importieren von Hilfsfunktionen aus tslib einmal pro Projekt zulassen, anstatt sie pro Datei einzubeziehen.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Importe dürfen TypeScript-Dateierweiterungen enthalten. Erfordert die Festlegung von \"--moduleResolution bundler\" und \"--noEmit\" oder \"--emitDeclarationOnly\".", "Allow_javascript_files_to_be_compiled_6102": "Kompilierung von JavaScript-Dateien zulassen.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Lassen Sie zu, dass mehrere Ordner beim Auflösen von Modulen als ein Ordner behandelt werden.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Der bereits enthaltene Dateiname \"{0}\" unterscheidet sich vom Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Es wurde kein Argument angegeben, das diesem Bindungsmuster entspricht.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Ein arithmetischer Operand muss vom Typ \"any\", \"number\" oder \"bigint\" oder ein Enumerationstyp sein.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Eine Pfeilfunktion darf keinen this-Parameter aufweisen.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Eine Async-Funktion oder -Methode in ES5/ES3 erfordert den Konstruktur \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Eine Async-Funktion oder -Methode in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Eine asynchrone Funktion oder Methode muss \"Promise\" zurückgeben. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihrer Option \"--lib\" ein.", "An_async_iterator_must_have_a_next_method_2519": "Ein Async-Iterator muss eine \"next()\"-Async-Methode aufweisen.", "An_element_access_expression_should_take_an_argument_1011": "Ein Ausdruck für einen Elementzugriff muss ein Argument verwenden.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", "An_export_declaration_cannot_have_modifiers_1193": "Eine Exportdeklaration darf keine Modifizierer besitzen.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Eine \"export =\"-Deklaration muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Eine \"export =\"-Deklaration muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"export default\" muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Ein \"export default\" muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Für einen Ausdruck vom Typ \"void\" kann nicht getestet werden, ob er wahr oder falsch ist.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Ein erweiterter Unicode-Escapewert muss zwischen 0x0 und 0x10FFFF (einschließlich) liegen.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Ein Bezeichner oder ein Schlüsselwort kann nicht direkt auf ein numerisches Literal folgen.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Eine Implementierung darf nicht in Umgebungskontexten deklariert werden.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"export type\" exportiert wurde.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"import type\" importiert wurde.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Ein Importalias kann nicht in eine Typ- oder nur Typdeklaration aufgelöst werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", "An_import_alias_cannot_use_import_type_1392": "Ein Importalias kann \"import type\" nicht verwenden.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Eine Importdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Eine Importdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", "An_import_declaration_cannot_have_modifiers_1191": "Eine Importdeklaration darf keine Modifizierer besitzen.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Ein Importpfad darf nicht mit einer Erweiterung \"{0}\" enden. Importieren Sie ggf. stattdessen \"{1}\".", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ein Importpfad kann nur mit einer \"{0}\"-Erweiterung enden, wenn \"allowImportingTsExtensions\" aktiviert ist.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Eine Indexsignatur darf keinen rest-Parameter besitzen.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Eine Indexsignatur darf kein nachstehendes Komma aufweisen.", "An_index_signature_must_have_a_type_annotation_1021": "Eine Indexsignatur muss eine Typanmerkung besitzen.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Auf einen Instanziierungsausdruck kann kein Eigenschaftenzugriff folgen.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Eine Schnittstelle kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten erweitern.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Eine Schnittstelle kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern erweitern.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Eine Schnittstelle kann einen primitiven Typ wie „{0}“ nicht erweitern; eine Schnittstelle kann nur benannte Typen und Klassen erweitern", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Eine Schnittstelle kann einen primitiven Typ wie \"{0}\" nicht erweitern. Es können nur andere benannte Objekttypen erweitert werden.", "An_interface_property_cannot_have_an_initializer_1246": "Schnittstelleneigenschaften können keinen Initialisierer aufweisen.", "An_iterator_must_have_a_next_method_2489": "Ein Iterator muss eine Methode \"next()\" besitzen.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Bei Verwendung eines @jsx-Pragmas mit JSX-Fragmenten wird ein @jsxFrag-Pragma benötigt.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Ein Objektliteral darf nicht über mehrere Eigenschaften mit demselben Namen verfügen.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Ein Objektliteral darf nicht eine Eigenschaft und eine Zugriffsmethode mit demselben Namen besitzen.", "An_object_member_cannot_be_declared_optional_1162": "Ein Objektmember darf nicht als optional deklariert werden.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Die Methode \"[Symbol.hasInstance]\" eines Objekts muss einen booleschen Wert zurückgeben, damit es auf der rechten Seite eines instanceof-Ausdrucks verwendet werden kann.", "An_optional_chain_cannot_contain_private_identifiers_18030": "Eine optionale Kette kann keine privaten Bezeichner enthalten.", "An_optional_element_cannot_follow_a_rest_element_1266": "Ein optionales Element darf nicht auf ein rest-Element folgen.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Ein äußerer Wert von \"this\" wird durch diesen Container verborgen.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Eine Überladungssignatur darf nicht als ein Generator deklariert werden.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unäre Ausdrücke mit dem Operator \"{0}\" sind auf der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.", "Annotate_everything_with_types_from_JSDoc_95043": "Alle Funktionen mit Typen aus JSDoc kommentieren", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Erweiterungsfunktionstypen von Eigenschaften in einem Namespace mit Anmerkungen versehen", "Annotate_with_type_from_JSDoc_95009": "Mit Typ aus JSDoc kommentieren", "Another_export_default_is_here_2753": "Ein weiterer Exportstandardwert befindet sich hier.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jede Unicode-Eigenschaft, die möglicherweise mehr als ein einzelnes Zeichen enthalten würde, ist nur verfügbar, wenn das Flag \"Unicode Sets (v)\" festgelegt ist.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Alle Elemente, die möglicherweise mehr als einem einzelnen Zeichen entsprechen, sind innerhalb einer negierten Zeichenklasse ungültig.", "Are_you_missing_a_semicolon_2734": "Fehlt ein Semikolon?", "Argument_expression_expected_1135": "Es wurde ein Argumentausdruck erwartet.", "Argument_for_0_option_must_be_Colon_1_6046": "Das Argument für die Option \"{0}\" muss \"{1}\" sein.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Das Argument vom Typ „{0}“ kann dem Parameter vom Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Es wurden keine Argumente für den rest-Parameter \"{0}\" angegeben.", "Array_element_destructuring_pattern_expected_1181": "Ein Arrayelement-Destrukturierungsmuster wurde erwartet.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Arrays mit Verteilungselementen können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Assertionen erfordern, dass jeder Name im Aufrufziel mit einer expliziten Typanmerkung deklariert wird.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Assertionen erfordern, dass das Aufrufziel ein Bezeichner oder ein qualifizierter Name ist.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Das Zuweisen von Eigenschaften zu Funktionen ohne Deklaration wird mit \"--isolatedDeclarations\" nicht unterstützt. Fügen Sie eine explizite Deklaration für die Eigenschaften hinzu, die dieser Funktion zugewiesen sind.", "Asterisk_Slash_expected_1010": "\"*/\" wurde erwartet.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Mindestens ein Accessor muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Erweiterungen für den globalen Bereich können nur in externen Modulen oder Umgebungsmoduldeklarationen direkt geschachtelt werden.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Erweiterungen für den globalen Bereich sollten den Modifizierer \"declare\" aufweisen, wenn sie nicht bereits in einem Umgebungskontext auftreten.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "In Projekt \"{0}\" ist die automatische Erkennung von Eingaben aktiviert. Es wird ein zusätzlicher Auflösungsdurchlauf für das Modul \"{1}\" unter Verwendung von Cachespeicherort \"{2}\" ausgeführt.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Der \"Await\"-Ausdruck kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", "BUILD_OPTIONS_6919": "BUILDOPTIONEN", "Backwards_Compatibility_6253": "Abwärtskompatibilität", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Basisklassenausdrücke können nicht auf Klassentypparameter verweisen.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "bigint-Literale sind nicht verfügbar, wenn die Zielversion niedriger ist als ES2020.", "Binary_digit_expected_1177": "Es wurde eine Binärzahl erwartet.", "Binding_element_0_implicitly_has_an_1_type_7031": "Das Bindungselement \"{0}\" weist implizit einen Typ \"{1}\" auf.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Bindungselemente können nicht direkt mit \"--isolatedDeclarations\" exportiert werden.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Die blockbezogene Variable \"{0}\" wurde vor ihrer Deklaration verwendet.", "Build_a_composite_project_in_the_working_directory_6925": "Erstellen Sie ein zusammengesetztes Projekt im Arbeitsverzeichnis.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Erstellen Sie alle Projekte, einschließlich der Projekte, die aktuell zu sein scheinen.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Mindestens ein Projekt und die zugehörigen Abhängigkeiten erstellen, wenn veraltet", "Build_option_0_requires_a_value_of_type_1_5073": "Die Buildoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", "Building_project_0_6358": "Projekt \"{0}\" wird erstellt...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Integrierte Iteratoren werden mit dem Typ \"TReturn\" vom Typ \"undefined\" anstelle von \"any\" instanziiert.", "COMMAND_LINE_FLAGS_6921": "BEFEHLSZEILENFLAGS", "COMMON_COMMANDS_6916": "ALLGEMEINE BEFEHLE", "COMMON_COMPILER_OPTIONS_6920": "ALLGEMEINE COMPILEROPTIONEN", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Die Rückgabetypen \"{0}\" und \"{1}\" der Aufrufsignatur sind nicht kompatibel.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Eine Aufrufsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Aufrufsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.", - "Call_target_does_not_contain_any_signatures_2346": "Das Aufrufziel enthält keine Signaturen.", "Can_only_convert_logical_AND_access_chains_95142": "Es können nur Zugriffsketten mit logischem \"Und\" konvertiert werden.", "Can_only_convert_named_export_95164": "Nur ein benannter Export kann konvertiert werden.", "Can_only_convert_property_with_modifier_95137": "Die Eigenschaft kann nur mit einem Modifizierer konvertiert werden.", - "Can_only_convert_string_concatenation_95154": "Es ist nur die Konvertierung einer Zeichenfolgenverkettung möglich.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Nur Zeichenfolgenverkettungen und Zeichenfolgenliterale können konvertiert werden.", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Der Zugriff auf \"{0}.{1}\" ist nicht möglich, da \"{0}\" ein Typ ist, aber kein Namespace. Wollten Sie den Typ der Eigenschaft \"{1}\" in \"{0}\" mit \"{0}[\"{1}\"]\" abrufen?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Auf umgebende const-Enumerationen kann nicht zugegriffen werden, wenn das Flag \"--isolatedModules\" angegeben wird.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Auf \"{0}\" aus einer anderen Datei kann nicht ohne Qualifizierung zugegriffen werden, wenn \"{1}\" aktiviert ist. Verwenden Sie stattdessen \"{2}\".", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Auf Umgebungskonstantenenumerationen kann nicht zugegriffen werden, wenn \"{0}\" aktiviert ist.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Ein Konstruktortyp \"{0}\" kann nicht einem Konstruktortyp \"{1}\" zugewiesen werden.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Ein abstrakter Konstruktortyp kann nicht einem nicht abstrakten Konstruktortyp zugewiesen werden.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Klasse handelt.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Das Modul \"{0}\" wurde nicht gefunden. Erwägen Sie die Verwendung von \"--resolveJsonModule\" zum Importieren eines Moduls mit der Erweiterung \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Das Modul \"{0}\" wurde nicht gefunden. Möchten Sie die Option \"moduleResolution\" auf \"node\" festlegen oder Aliase zur Option \"paths\" hinzufügen?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Das Modul \"{0}\" wurde nicht gefunden. Möchten Sie die Option \"moduleResolution\" auf \"nodenext\" festlegen oder Aliase zur Option \"paths\" hinzufügen?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Das Modul \"{0}\" oder die zugehörigen Typdeklarationen wurden nicht gefunden.", "Cannot_find_name_0_2304": "Der Name \"{0}\" wurde nicht gefunden.", "Cannot_find_name_0_Did_you_mean_1_2552": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Der Name „{0}“ wurde nicht gefunden. Wollten Sie dies in eine asynchrone Funktion schreiben?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{1}\" oder höher.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" so ab, dass sie \"dom\" enthält.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"bun\" hinzu.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\".", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"jest\" oder \"mocha\" hinzu.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für jQuery installieren? Versuchen Sie es mit \"npm i --save-dev @types/jquery\".", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arraydestrukturierung aber immer \"{0}\" sendet.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arrayverteilung aber immer \"{0}\" sendet.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, \"for-of\" aber immer \"{0}\" sendet.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Das Projekt \"{0}\" kann nicht vorgestellt werden, weil \"outFile\" nicht festgelegt wurde.", + "Cannot_move_statements_to_the_selected_file_95183": "Anweisungen können nicht in die ausgewählte Datei verschoben werden.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Verschieben in Datei nicht möglich, die ausgewählte Datei ist ungültig", "Cannot_read_file_0_5083": "Die Datei \"{0}\" kann nicht gelesen werden.", "Cannot_read_file_0_Colon_1_5012": "Die Datei \"{0}\" kann nicht gelesen werden: {1}", "Cannot_redeclare_block_scoped_variable_0_2451": "Die blockbezogene Variable \"{0}\" Blockbereich kann nicht erneut deklariert werden.", "Cannot_redeclare_exported_variable_0_2323": "Die exportierte Variable \"{0}\" kann nicht erneut deklariert werden.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Der Bezeichner \"{0}\" in der Catch-Klausel kann nicht erneut deklariert werden.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Kann in einer Typanmerkung keinen Funktionsaufruf starten.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Die Ausgabe des Projekts \"{0}\" kann nicht aktualisiert werden, weil es beim Lesen der Datei \"{1}\" zu einem Fehler gekommen ist.", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX kann nur verwendet werden, wenn das Flag \"-jsx\" angegeben wird.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "„export import“ kann nicht für einen Typ oder einen reinen Typnamespace verwendet werden, wenn das Flag „--isolatedModules“ angegeben wird.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "\"export import\" kann nicht für einen Typ oder einen reinen Typnamespace verwendet werden, wenn {0} aktiviert ist.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Es können keine imports-, exports- oder module-Erweiterungen verwendet werden, wenn \"-module\" den Wert \"none\" aufweist.", "Cannot_use_namespace_0_as_a_type_2709": "Der Namespace \"{0}\" kann nicht als Typ verwendet werden.", "Cannot_use_namespace_0_as_a_value_2708": "Der Namespace \"{0}\" kann nicht als Wert verwendet werden.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "\"extends\" in \"implements\" ändern", "Change_spelling_to_0_90022": "Schreibweise in \"{0}\" ändern", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Suchen Sie nach Klasseneigenschaften, die im Konstruktor deklariert, aber nicht festgelegt sind.", + "Check_side_effect_imports_6806": "Überprüfen Sie die Nebeneffektimporte.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Überprüfen Sie, ob die Argumente für die Methoden „bind“, „call“ und „apply“ mit der ursprünglichen Funktion übereinstimmen.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Es wird überprüft, ob \"{0}\" das längste übereinstimmende Präfix für \"{1}\"–\"{2}\" ist.", "Circular_definition_of_import_alias_0_2303": "Zirkuläre Definition des Importalias \"{0}\".", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "Die Klassendeklaration kann die Überladungsliste für \"{0}\" nicht implementieren.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Klassendeklarationen dürfen maximal ein \"@augments\"- oder \"@extends\"-Tag aufweisen.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Decorator-Elemente von Klassen können nicht mit einem statischen privaten Bezeichner verwendet werden. Erwägen Sie, das experimentelle Decorator-Element zu entfernen.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Auf das von der übergeordneten Klasse definierte Klassenfeld \"{0}\" kann in der untergeordneten Klasse nicht über \"super\" zugegriffen werden.", "Class_name_cannot_be_0_2414": "Der Klassenname darf nicht \"{0}\" sein.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Der Klassenname darf nicht \"Object\" lauten, wenn ES5 mit Modul \"{0}\" als Ziel verwendet wird.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Die statische Seite der Klasse \"{0}\" erweitert fälschlicherweise die statische Seite der Basisklasse \"{1}\".", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Befehlszeilenoptionen", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Kompilieren Sie das dem Pfad zugewiesene Projekt zu dessen Konfigurationsdatei oder zu einem Ordner mit der Datei \"tsconfig.json\".", "Compiler_Diagnostics_6251": "Compilerdiagnose", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Die Compileroption \"{0}\" darf keine leere Zeichenfolge erhalten.", "Compiler_option_0_expects_an_argument_6044": "Die Compileroption \"{0}\" erwartet ein Argument.", "Compiler_option_0_may_not_be_used_with_build_5094": "Die Compileroption \"--{0}\" darf nicht mit \"--build\" verwendet werden.", "Compiler_option_0_may_only_be_used_with_build_5093": "Die Compileroption \"--{0}\" darf nur mit \"--build\" verwendet werden.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "In zusammengesetzten Projekten kann die Deklarationsausgabe nicht deaktiviert werden.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Zusammengesetzte Projekte dürfen die inkrementelle Kompilierung nicht deaktivieren.", "Computed_from_the_list_of_input_files_6911": "Aus der Liste der Eingabedateien berechnet", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Berechnete Eigenschaften müssen Zahlen- oder Zeichenfolgenliterale, Variablen oder gepunktete Ausdrücke mit \"--isolatedDeclarations\" sein.", "Computed_property_names_are_not_allowed_in_enums_1164": "Berechnete Eigenschaftennamen sind in Enumerationen unzulässig.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Berechnete Eigenschaftsnamen für Klassen- oder Objektliterale können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Berechnete Werte sind in einer Enumeration mit Membern mit Zeichenfolgenwerten nicht zulässig.", "Concatenate_and_emit_output_to_single_file_6001": "Verketten und Ausgabe in einer Datei speichern.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "In Konflikt stehende Definitionen für \"{0}\" wurden unter \"{1}\" und \"{2}\" gefunden. Installieren Sie ggf. eine bestimmte Version dieser Bibliothek, um den Konflikt aufzulösen.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Bedingungen, die zusätzlich zu den konfliktlöserspezifischen Standardwerten beim Auflösen von Importen festgelegt werden sollen.", "Conflicts_are_in_this_file_6201": "In dieser Datei liegen Konflikte vor.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Erwägen Sie, dieser Klasse einen declare-Modifizierer hinzuzufügen.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Die Rückgabetypen \"{0}\" und \"{1}\" der Konstruktsignatur sind nicht kompatibel.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "\"{0}\" in zugeordneten Objekttyp konvertieren", "Convert_all_const_to_let_95102": "Alle \"const\" in \"let\" konvertieren", "Convert_all_constructor_functions_to_classes_95045": "Alle Konstruktorfunktionen in Klassen konvertieren", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Alle nicht als Wert verwendeten Importe in reine Typenimporte konvertieren", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Alle ungültigen Zeichen in HTML-Entitätscode konvertieren", "Convert_all_re_exported_types_to_type_only_exports_1365": "Alle erneut exportierten Typen in reine Typenexporte konvertieren", "Convert_all_require_to_import_95048": "Alle Aufrufe von \"require\" in \"import\" konvertieren", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Alle in numerische bigint-Literale konvertieren", "Convert_all_to_default_imports_95035": "Alle in Standardimporte konvertieren", "Convert_all_type_literals_to_mapped_type_95021": "Alle Typliterale in einen zugeordneten Typ konvertieren", + "Convert_all_typedef_to_TypeScript_types_95177": "Konvertieren Sie alle typedef in TypeScript-Typen.", "Convert_arrow_function_or_function_expression_95122": "Pfeilfunktion oder Funktionsausdruck konvertieren", "Convert_const_to_let_95093": "\"const\" in \"let\" konvertieren", "Convert_default_export_to_named_export_95061": "Standardexport in benannten Export konvertieren", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "In optionalen Kettenausdruck konvertieren", "Convert_to_template_string_95096": "In Vorlagenzeichenfolge konvertieren", "Convert_to_type_only_export_1364": "In reinen Typenexport konvertieren", - "Convert_to_type_only_import_1373": "In reinen Typenimport konvertieren", + "Convert_typedef_to_TypeScript_type_95176": "Konvertieren Sie typedef in den TypeScript-Typ.", "Corrupted_locale_file_0_6051": "Die Gebietsschemadatei \"{0}\" ist beschädigt.", "Could_not_convert_to_anonymous_function_95153": "Die Konvertierung in eine anonyme Funktion ist nicht möglich.", "Could_not_convert_to_arrow_function_95151": "Die Konvertierung in eine Pfeilfunktion ist nicht möglich.", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", "Could_not_find_namespace_import_or_named_imports_95132": "Der Namespaceimport oder benannte Importe wurden nicht gefunden.", "Could_not_find_property_for_which_to_generate_accessor_95135": "Die Eigenschaft, für die die Zugriffsmethode generiert werden soll, wurde nicht gefunden.", + "Could_not_find_variable_to_inline_95185": "Die Variable zum Inlinevorgang wurde nicht gefunden.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Der Pfad \"{0}\" mit den Erweiterungen konnte nicht aufgelöst werden: {1}.", "Could_not_write_file_0_Colon_1_5033": "Die Datei \"{0}\" konnte nicht geschrieben werden. {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Erstellen Sie Quellzuordnungsdateien für ausgegebene JavaScript-Dateien.", "Create_sourcemaps_for_d_ts_files_6614": "Erstellen Sie Quellzuordnungen für d.ts-Dateien.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Erstellt eine tsconfig.json mit den empfohlenen Einstellungen im Arbeitsverzeichnis.", "DIRECTORY_6038": "VERZEICHNIS", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Dezimale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Dezimalstellen mit führenden Nullen sind nicht zulässig.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Die Deklaration erweitert die Deklaration in einer anderen Datei. Dieser Vorgang kann nicht serialisiert werden.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Die Deklarationsausgabe für diese Datei erfordert, dass dieser Import für Augmentationen beibehalten wird. Dies wird mit \"--isolatedDeclarations\" nicht unterstützt.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" aus dem Modul \"{1}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "Die Deklarationsausgabe für diesen Parameter erfordert das implizit undefinierte Hinzufügen zum Typ. Dies wird mit \"--isolatedDeclarations\" nicht unterstützt.", "Declaration_expected_1146": "Es wurde eine Deklaration erwartet.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Der Deklarationsname steht in Konflikt mit dem integrierten globalen Bezeichner \"{0}\".", "Declaration_or_statement_expected_1128": "Es wurde eine Deklaration oder Anweisung erwartet.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Deklaration oder Anweisung erwartet. Dieses Gleichheitszeichen (=) folgt auf einen Anweisungsblock. Wenn Sie daher eine Destrukturierungszuweisung schreiben möchten, müssen Sie möglicherweise die gesamte Zuweisung in runde Klammern einschließen.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Es wurde eine Deklaration oder Anweisung erwartet. Dieses Gleichheitszeichen (=) folgt auf einen Anweisungsblock. Wenn Sie daher eine Destrukturierungszuweisung schreiben möchten, müssen Sie möglicherweise die gesamte Zuweisung in runde Klammern einschließen.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarationen mit definitiven Zuweisungsassertionen müssen auch Typanmerkungen aufweisen.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarationen mit Initialisierern dürfen keine definitiven Zuweisungsassertionen aufweisen.", "Declare_a_private_field_named_0_90053": "Deklarieren Sie ein privates Feld mit dem Namen \"{0}\".", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Statische Eigenschaft \"{0}\" deklarieren", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Der Rückgabetyp der Decorator-Funktion „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Der Rückgabetyp der Decorator-Funktion ist „{0}“, es wird jedoch erwartet, dass er „void“ oder „any“ ist.", + "Decorator_used_before_export_here_1486": "Decorator, der hier vor \"export\" verwendet wird.", "Decorators_are_not_valid_here_1206": "Decorators sind hier ungültig.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Decorators dürfen nicht auf mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen angewendet werden.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Decorators dürfen nicht auf this-Parameter angewendet werden.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Decorators dürfen nicht nach \"export\" oder \"export default\" angezeigt werden, wenn sie auch vor \"export\" angezeigt werden.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Vor dem Namen und allen Schlüsselwörtern von Eigenschaftendeklarationen müssen Decorator-Elemente stehen.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Stellen Sie die Variablen der Catch-Klauseln standardmäßig als „unknown“ anstelle von „any“ ein.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Der Standardexport des Moduls besitzt oder verwendet den privaten Namen \"{0}\".", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Standardexporte können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", "Default_library_1424": "Standardbibliothek", "Default_library_for_target_0_1425": "Standardbibliothek für Ziel \"{0}\"", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definitionen der folgenden Bezeichner stehen in Konflikt mit denen in einer anderen Datei: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deaktivieren Sie das Löschen von „const enum“-Deklarationen in generiertem Code.", "Disable_error_reporting_for_unreachable_code_6603": "Deaktivieren Sie die Fehlerberichterstattung für nicht erreichbaren Code.", "Disable_error_reporting_for_unused_labels_6604": "Deaktivieren Sie die Fehlerberichterstattung für nicht verwendete Bezeichnungen.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deaktivieren Sie die vollständige Typüberprüfung (nur kritische Analyse- und Ausgabefehler werden gemeldet).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deaktivieren Sie das Generieren von benutzerdefinierten Hilfsfunktionen wie „__extends“ in der kompilierten Ausgabe.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deaktivieren Sie das Einschließen von Bibliotheksdateien, einschließlich der Standarddatei \"lib.d.ts\".", "Disable_loading_referenced_projects_6235": "Deaktivieren Sie das Laden referenzierter Projekte.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Fehler zu nicht erreichbarem Code nicht melden.", "Do_not_report_errors_on_unused_labels_6074": "Fehler zu nicht verwendeten Bezeichnungen nicht melden.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Tatsächlichen Pfad von symbolischen Verknüpfungen nicht auflösen.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Sie sollten keine Importe oder Exporte transformieren oder ausblenden, die nicht als typgeschützt markiert sind. Stellen Sie sicher, dass sie basierend auf der Einstellung \"module\" im Format der Ausgabedatei geschrieben werden.", "Do_not_truncate_error_messages_6165": "Kürzen Sie keine Fehlermeldungen.", "Duplicate_function_implementation_2393": "Doppelte Funktionsimplementierung.", "Duplicate_identifier_0_2300": "Doppelter Bezeichner \"{0}\".", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Doppelte Indexsignatur für Typ \"{0}\".", "Duplicate_label_0_1114": "Doppelte Bezeichnung \"{0}\".", "Duplicate_property_0_2718": "Doppelte Eigenschaft: {0}", + "Duplicate_regular_expression_flag_1500": "Doppeltes Flag für reguläre Ausdrücke.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Der Spezifizierer des dynamischen Imports muss den Typ \"string\" aufweisen, hier ist er jedoch vom Typ \"{0}\".", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamische Importe werden nur unterstützt, wenn das Flag „--module“ auf „es2020“, „es2022“, „esnext“, „commonjs“, „amd“, „system“, „umd“, „node16“ oder „ Knotenext'.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Dynamische Importe können nur einen Modulspezifizierer und eine optionale Assertion als Argumente akzeptieren.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Dynamische Importe unterstützen nur ein zweites Argument, wenn die Option „--module“ auf „esnext“, „node16“ oder „nodenext“ gesetzt ist.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamische Importe können nur einen Modulspezifizierer und ein optionales Set mit Attributen als Argumente akzeptieren.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Dynamische Importe unterstützen nur ein zweites Argument, wenn die Option \"--module\" auf \"esnext\", \"node16\", \"nodenext\" oder \"preserve\" gesetzt ist.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Die ESM-Syntax ist in einem CommonJS-Modul nicht zulässig, wenn \"module\" auf \"preserve\" festgelegt ist.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Die ESM-Syntax ist in einem CommonJS-Modul nicht zulässig, wenn \"verbatimModuleSyntax\" aktiviert ist.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Jede Deklaration von \"{0}.{1}\" unterscheidet sich in ihrem Wert, wobei \"{2}\" erwartet, aber \"{3}\" angegeben wurde.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Jeder Member des union-Typs \"{0}\" weist Konstruktsignaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Jeder Member des union-Typs \"{0}\" weist Signaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", "Editor_Support_6249": "Editor-Unterstützung", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Aktivieren Sie die Fehlerberichterstattung in typgeprüften JavaScript-Dateien.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Aktivieren Sie die Fehlerberichterstattung, wenn lokale Variablen nicht gelesen werden.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Aktivieren Sie die Fehlerberichterstattung, wenn „this“ den Typ „any“ erhält.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Aktivieren Sie experimentelle Unterstützung für Entwurf-Decorator der TC39-Phase 2.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Aktivieren Sie experimentelle Unterstützung für experimentelle Legacy-Decorators.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Hiermit wird das Importieren von Dateien mit beliebiger Erweiterung aktiviert, sofern eine Deklarationsdatei vorhanden ist.", "Enable_importing_json_files_6689": "Aktivieren Sie das Importieren von JSON-Dateien.", "Enable_project_compilation_6302": "Projektkompilierung aktivieren", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Aktivieren Sie die strict-Methoden \"bind\", \"call\" und \"apply\" für Funktionen.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Stellen Sie sicher, dass die Groß-/Kleinschreibung beim Import korrekt ist.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Stellen Sie sicher, dass jede Datei sicher transpiliert werden kann, ohne dass andere Importe erforderlich sind.", "Ensure_use_strict_is_always_emitted_6605": "Stellen Sie sicher, dass \"Use Strict\" immer ausgegeben wird.", + "Entering_conditional_exports_6413": "Bedingte Exporte werden eingegeben.", "Entry_point_for_implicit_type_library_0_1420": "Einstiegspunkt für implizite Typbibliothek \"{0}\"", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Einstiegspunkt für die implizite Typbibliothek \"{0}\" mit packageId \"{1}\"", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\"", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Enumerationsdeklarationen können nur mit Namespace- oder anderen Enumerationsdeklarationen zusammengeführt werden.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Enumerationsdeklarationen müssen alle konstant oder nicht konstant sein.", "Enum_member_expected_1132": "Ein Enumerationsmember wurde erwartet.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Der Enumerationsmember, der auf ein nicht literales numerisches Element folgt, muss über einen Initialisierer verfügen, wenn \"isolatedModules\" aktiviert ist.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Enumerationsmemberinitialisierer müssen ohne Verweise auf externe Symbole mit \"--isolatedDeclarations\" berechenbar sein.", "Enum_member_must_have_initializer_1061": "Ein Enumerationsmember muss einen Initialisierer aufweisen.", "Enum_name_cannot_be_0_2431": "Der Enumerationsname darf nicht \"{0}\" sein.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Der Enumerationstyp \"{0}\" weist Member mit Initialisierern auf, die keine Literale sind.", "Errors_Files_6041": "Fehlerdateien", + "Escape_sequence_0_is_not_allowed_1488": "Escapesequenz \"{0}\" ist nicht zulässig.", "Examples_Colon_0_6026": "Beispiele: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Übermäßige Komplexität beim Vergleichen der Typen \"{0}\" und \"{1}\".", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Übermäßige Stapeltiefe beim Vergleichen der Typen \"{0}\" und \"{1}\".", + "Exiting_conditional_exports_6416": "Bedingte Exporte werden beendet.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", "Expected_0_arguments_but_got_1_2554": "{0} Argumente wurden erwartet, empfangen wurden aber {1}.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Es wurden {0} Argumente erwartet, aber {1} erhalten. Sollte \"void\" in Ihr Typargument in \"Promise\" eingeschlossen werden?", "Expected_0_type_arguments_but_got_1_2558": "{0} Typenargumente wurden erwartet, empfangen wurden aber {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 Argument erwartet, aber 0 erhalten. „new Promise()“ benötigt einen JSDoc-Hinweis, um einen „resolve“ zu erzeugen, der ohne Argumente aufgerufen werden kann.", + "Expected_a_Unicode_property_name_1523": "Es wurde ein Unicode-Eigenschaftsname erwartet.", + "Expected_a_Unicode_property_name_or_value_1527": "Es wurde ein Unicode-Eigenschaftsname oder -wert erwartet.", + "Expected_a_Unicode_property_value_1525": "Es wurde ein Unicode-Eigenschaftswert erwartet.", + "Expected_a_capturing_group_name_1514": "Es wurde ein Name für die Erfassungsgruppe erwartet.", + "Expected_a_class_set_operand_1520": "Es wurde ein Klassensatzoperand erwartet.", "Expected_at_least_0_arguments_but_got_1_2555": "Mindestens {0} Argumente wurden erwartet, empfangen wurden aber {1}.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Das entsprechende schließende JSX-Tag wurde für \"{0}\" erwartet.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Für das JSX-Fragment wurde das entsprechende schließende Tag erwartet.", "Expected_for_property_initializer_1442": "Für den Eigenschafteninitialisierer wurde \"=\" erwartet.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Der erwartete Typ des Felds \"{0}\" in der Datei \"package.json\" lautet \"{1}\", empfangen wurde \"{2}\".", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Die experimentelle Unterstützung für decorator-Elemente ist ein Feature, das in zukünftigen Versionen Änderungen unterliegt. Legen Sie die Option \"-experimentalDecorators\" in Ihrer \"tsconfig\" oder \"jsconfig\" fest, um diese Warnung zu entfernen.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explizit angegebene Art der Modulauflösung: \"{0}\".", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Die Potenzierung kann für bigint-Werte nur durchgeführt werden, wenn die Option \"target\" auf \"es2016\" oder höher festgelegt ist.", "Export_0_from_module_1_90059": "Exportieren von \"{0}\" aus Modul \"{1}\"", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "Die exportierte Variable \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporte und Exportzuweisungen sind in Modulerweiterungen unzulässig.", "Expression_expected_1109": "Es wurde ein Ausdruck erwartet.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Der Ausdruck muss in Klammern eingeschlossen werden, damit er als Decorator verwendet werden kann.", "Expression_or_comma_expected_1137": "Es wurde ein Ausdruck oder Komma erwartet.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Der Ausdruck erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Der Ausdruck erzeugt einen union-Typ, der für die Darstellung zu komplex ist.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Der Ausdruck wird in \"_super\" aufgelöst. Damit erfasst der Compiler den Basisklassenverweis.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Der Ausdruck wird in die Variablendeklaration \"_newTarget\" aufgelöst, die der Compiler zum Erfassen der Metaeigenschaftenreferenz \"new.target\" verwendet.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Der Ausdruck wird in die Variablendeklaration \"_this\" aufgelöst, die der Compiler verwendet, um den this-Verweis zu erfassen.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Der Ausdruckstyp kann nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Die Extends-Klausel darf keinen Ausdruck mit \"--isolatedDeclarations\" enthalten.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Die extends-Klausel für den abgeleiteten Typ \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "Extract_base_class_to_variable_90064": "Basisklasse in Variable extrahieren", + "Extract_binding_expressions_to_variable_90066": "Extrahieren von Bindungsausdrücken in eine Variable", "Extract_constant_95006": "Konstante extrahieren", + "Extract_default_export_to_variable_90065": "Standardexport in Variable extrahieren", "Extract_function_95005": "Funktion extrahieren", "Extract_to_0_in_1_95004": "Als {0} nach {1} extrahieren", "Extract_to_0_in_1_scope_95008": "Als {0} in {1}-Bereich extrahieren", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "In Schnittstelle extrahieren", "Extract_to_type_alias_95078": "In Typalias extrahieren", "Extract_to_typedef_95079": "In TypeDef extrahieren", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "In Variable extrahieren und durch \"{0} as typeof {0}\" ersetzen", "Extract_type_95077": "Typ extrahieren", "FILE_6035": "DATEI", "FILE_OR_DIRECTORY_6040": "DATEI ODER VERZEICHNIS", - "Failed_to_parse_file_0_Colon_1_5014": "Fehler beim Analysieren der Datei \"{0}\": {1}.", + "Failed_to_find_peerDependency_0_6283": "Fehler beim Suchen der peerDependency \"{0}\".", + "Failed_to_resolve_under_condition_0_6415": "Fehler beim Auflösen unter der Bedingung \"{0}\".", "Fallthrough_case_in_switch_7029": "FallThrough-Fall in switch-Anweisung.", "File_0_does_not_exist_6096": "Die Datei \"{0}\" ist nicht vorhanden.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups nicht vorhanden.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Die Datei \"{0}\" ist vorhanden – sie wird als Ergebnis der Namensauflösung verwendet.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups vorhanden.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Die Datei \"{0}\" ist vorhanden – sie wird als Ergebnis der Namensauflösung verwendet.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Die Datei \"{0}\" weist eine nicht unterstützte Erweiterung auf. Es werden nur die folgenden Erweiterungen unterstützt: {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Die Datei \"{0}\" hat eine nicht unterstützte Erweiterung und wird übersprungen.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Die Datei \"{0}\" ist eine JavaScript-Datei. Wollten Sie die Option \"allowJs\" aktivieren?", "File_0_is_not_a_module_2306": "Die Datei \"{0}\" ist kein Modul.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Die Datei \"{0}\" befindet sich nicht in der Dateiliste von Projekt \"{1}\". Projekte müssen alle Dateien auflisten oder ein include-Muster verwenden.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Datei \"{0}\" befindet sich nicht unter \"rootDir\" \"{1}\". \"rootDir\" muss alle Quelldateien enthalten.", "File_0_not_found_6053": "Die Datei \"{0}\" wurde nicht gefunden.", "File_Management_6245": "Dateiverwaltung", + "File_appears_to_be_binary_1490": "Die Datei scheint binär zu sein.", "File_change_detected_Starting_incremental_compilation_6032": "Es wurde eine Dateiänderung erkannt. Die inkrementelle Kompilierung wird gestartet...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Die Datei ist ein CommonJS-Modul, da '{0}' nicht das Feld „Typ“ aufweist", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Die Datei ist ein CommonJS-Modul, da '{0}' das Feld „Typ“ aufweist, dessen Wert nicht „Modul“ ist", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Die Datei ist die Ausgabe der Projektverweisquelle \"{0}\".", "File_is_source_from_referenced_project_specified_here_1416": "Die Datei ist die Quelle des hier angegebenen referenzierten Projekts.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Der Dateiname \"{0}\" unterscheidet sich vom bereits enthaltenen Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Der Dateiname \"{0}\" hat eine \"{1}\"-Erweiterung. Stattdessen wird nach \"{2}\" gesucht.", "File_name_0_has_a_1_extension_stripping_it_6132": "Der Dateiname \"{0}\" weist eine Erweiterung \"{1}\" auf. Diese wird entfernt.", "File_redirects_to_file_0_1429": "Die Datei leitet an die Datei \"{0}\" um.", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Die Dateispezifikation darf kein übergeordnetes Verzeichnis (\"..\") enthalten, das nach einem rekursiven Verzeichnisplatzhalter (\"**\") angegeben wird: \"{0}\".", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Korrigieren Sie alle Ausdrücke, in denen \"await\" möglicherweise fehlt.", "Fix_all_implicit_this_errors_95107": "Alle impliziten this-Fehler beheben", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Alle falschen Rückgabetypen einer asynchronen Funktionen korrigieren", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "\"For await\"-Schleifen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "Fix_all_with_type_only_imports_95182": "Alle mit rein typbasierten Importen korrigieren", "Found_0_errors_6217": "{0} Fehler gefunden.", "Found_0_errors_Watching_for_file_changes_6194": "{0} Fehler gefunden. Es wird auf Dateiänderungen überwacht.", "Found_0_errors_in_1_files_6261": "In {1} Dateien wurden {0} Fehler gefunden.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Es wurden {0} Fehler in derselben Datei gefunden, beginnend bei: {1}", "Found_1_error_6216": "1 Fehler gefunden.", "Found_1_error_Watching_for_file_changes_6193": "1 Fehler gefunden. Es wird auf Dateiänderungen überwacht.", - "Found_1_error_in_1_6259": "1 Fehler in {1} gefunden", + "Found_1_error_in_0_6259": "1 Fehler in {0} gefunden", "Found_package_json_at_0_6099": "\"package.json\" wurde unter \"{0}\" gefunden.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES3\" oder \"ES5\" ist.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES3\" oder \"ES5\" ist. Klassendefinitionen befinden sich automatisch im Strict-Modus.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES3\" oder \"ES5\" ist. Module befinden sich automatisch im Strict-Modus.", + "Found_peerDependency_0_with_1_version_6282": "Es wurde eine peerDependency \"{0}\" mit Version \"{1}\" gefunden.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Klassendefinitionen befinden sich automatisch im Strict-Modus.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Module befinden sich automatisch im Strict-Modus.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Ein Funktionsausdruck ohne Rückgabetypanmerkung weist implizit einen {0}-Rückgabetyp auf.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Die Funktionsimplementierung fehlt oder folgt nicht unmittelbar auf die Deklaration.", "Function_implementation_name_must_be_0_2389": "Der Name der Funktionsimplementierung muss \"{0}\" lauten.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Die Funktion weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem ihrer Rückgabeausdrücke verwiesen wird.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Der Funktion fehlt die abschließende return-Anweisung, und der Rückgabetyp enthält nicht \"undefined\".", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Die Funktion muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", "Function_not_implemented_95159": "Die Funktion ist nicht implementiert.", "Function_overload_must_be_static_2387": "Die Funktionsüberladung muss statisch sein.", "Function_overload_must_not_be_static_2388": "Die Funktionsüberladung darf nicht statisch sein.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Es wurde ein Bezeichner erwartet.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Bezeichner erwartet. \"__esModule\" ist als exportierter Marker für die Umwandlung von ECMAScript-Modulen reserviert.", "Identifier_or_string_literal_expected_1478": "Bezeichner oder Zeichenfolgenliteral erwartet.", + "Identifier_string_literal_or_number_literal_expected_1496": "Bezeichner, Zeichenfolgenliteral oder Zahlenliteral erwartet.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, erwägen Sie, einen Pull Request zum Ändern von https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1} zu senden.", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, versuchen Sie, eine neue Deklarationsdatei (.d.ts) hinzuzufügen, die Declare-Modul \"{1}\" enthält.", "Ignore_this_error_message_90019": "Diese Fehlermeldung ignorieren", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Schnittstelle \"{0}\" implementieren", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Die implements-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Die implizite Konvertierung von \"symbol\" in \"string\" führt zur Laufzeit zu einem Fehler. Erwägen Sie, diesen Ausdruck in \"String(...)\" einzuschließen.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import \"{0}\" steht in Konflikt mit dem in dieser Datei verwendeten globalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import \"{0}\" steht in Konflikt mit dem lokalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", "Import_0_from_1_90013": "\"{0}\" aus \"{1}\" importieren", "Import_assertion_values_must_be_string_literal_expressions_2837": "Importassertionswerte müssen Zeichenfolgenliteralausdrücke sein.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Importassertionen sind für Anweisungen, die in „require“-Aufrufe von CommonJs transpilieren, nicht zulässig.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Importassertionen werden nur unterstützt, wenn die Option „--module“ auf „esnext“ oder „nodenext“ festgelegt ist.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Importassertionen sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompilieren, nicht zulässig.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Importassertionen werden nur unterstützt, wenn die Option \"--module\" auf \"esnext\", \"nodenext\" oder \"preserve\" festgelegt ist.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Importassertionen können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Die Importzuweisung kann nicht verwendet werden, wenn das Ziel ECMAScript-Module sind. Verwenden Sie stattdessen ggf. \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" oder ein anderes Modulformat.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Importattributwerte müssen Zeichenfolgenliteralausdrücke sein.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Importattribute sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompiliert werden, nicht zulässig.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Importattribute werden nur unterstützt, wenn die Option \"--module\" auf \"esnext\", \"nodenext\" oder \"preserve\" festgelegt ist.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Importattribute können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", "Import_declaration_0_is_using_private_name_1_4000": "Die Importdeklaration \"{0}\" verwendet den privaten Namen \"{1}\".", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Die Importdeklaration verursacht einen Konflikt mit der lokalen Deklaration von \"{0}\".", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Importdeklarationen in einem Namespace dürfen nicht auf ein Modul verweisen.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Schließen Sie Quellzuordnungsdateien in das ausgegebene JavaScript ein.", "Includes_imports_of_types_referenced_by_0_90054": "Schließt Importe von Typen ein, auf die von „{0}“ verwiesen wird", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Bei Einschließung von --watch beginnt -w, das aktuelle Projekt auf Dateiänderungen zu überwachen. Einmal eingestellt, können Sie den Überwachungsmodus konfigurieren, und zwar mit:", + "Incomplete_quantifier_Digit_expected_1505": "Unvollständiger Quantifizierer. Eine Ziffer wurde erwartet.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "Die Indexsignatur für den Typ \"{0}\" fehlt im Typ \"{1}\".", "Index_signature_in_type_0_only_permits_reading_2542": "Die Indexsignatur in Typ \"{0}\" lässt nur Lesevorgänge zu.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Einzelne Deklarationen in der gemergten Deklaration \"{0}\" müssen alle exportiert oder alle lokal sein.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Parametertypen aus der Nutzung ableiten", "Infer_this_type_of_0_from_usage_95080": "Typ \"this\" von \"{0}\" aus Syntax ableiten", "Infer_type_of_0_from_usage_95011": "Typ von \"{0}\" aus der Nutzung ableiten", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Der Rückschluss von Klassenausdrücken wird mit \"--isolatedDeclarations\" nicht unterstützt.", "Initialize_property_0_in_the_constructor_90020": "Eigenschaft \"{0}\" im Konstruktor initialisieren", "Initialize_static_property_0_90021": "Statische Eigenschaft \"{0}\" initialisieren", "Initializer_for_property_0_2811": "Initialisierer für Eigenschaft \"{0}\"", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Der Initialisierer der Instanzmembervariablen \"{0}\" darf nicht auf den im Konstruktor deklarierten Bezeichner \"{1}\" verweisen.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Der Initialisierer stellt keinen Wert für dieses Bindungselement bereit, und das Bindungselement besitzt keinen Standardwert.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Initialisierer sind in Umgebungskontexten unzulässig.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialisiert ein TypeScript-Projekt und erstellt eine Datei \"tsconfig.json\".", + "Inline_variable_95184": "Inlinevariable", "Insert_command_line_options_and_files_from_a_file_6030": "Fügt Befehlszeilenoptionen und Dateien aus einer Datei ein.", "Install_0_95014": "\"{0}\" installieren", "Install_all_missing_types_packages_95033": "Alle fehlenden Typenpakete installieren", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Ungültiger Modulname in der Erweiterung. Das Modul \"{0}\" wurde nicht gefunden.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Ungültige optionale Kette aus neuem Ausdruck. Wollten Sie '{0}()' anrufen?", "Invalid_reference_directive_syntax_1084": "Ungültige Syntax der reference-Direktive.", + "Invalid_syntax_in_decorator_1498": "Ungültige Syntax im Decorator.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Ungültige Verwendung von \"{0}\". Es kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Ungültige Verwendung von \"{0}\". Module befinden sich automatisch im Strict-Modus.", "Invalid_use_of_0_in_strict_mode_1100": "Ungültige Verwendung von \"{0}\" im Strict-Modus.", + "Invalid_value_for_ignoreDeprecations_5103": "Ungültiger Wert für \"--ignoreDeprecations\".", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Ungültiger Wert für \"jsxFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Ungültiger Wert für \"jsxFragmentFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Ungültiger Wert für \"-reactNamespace\". \"{0}\" ist kein gültiger Bezeichner.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Der zugehörige Elementtyp \"{0}\" ist kein gültiges JSX-Element.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Der zugehörige Instanztyp \"{0}\" ist kein gültiges JSX-Element.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Der Rückgabetyp \"{0}\" ist kein gültiges JSX-Element.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Der zugehörige Typ \"{0}\" ist kein gültiger JSX-Elementtyp.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" entspricht nicht der Klausel \"extends {2}\".", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" ist keiner Klassendeklaration zugeordnet.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Das JSDoc-Tag \"...\" wird möglicherweise nur im letzten Parameter einer Signatur angezeigt.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es gibt jedoch keinen Parameter dieses Namens.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es ist jedoch kein Parameter dieses Namens vorhanden. Es läge eine Übereinstimmung mit \"arguments\" vor, wenn ein Arraytyp vorläge.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef kann in TypeScript-Typ konvertiert werden.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Das JSDoc-Tag \"@typedef\" muss entweder eine Typanmerkung aufweisen, oder die Tags \"@property\" oder \"@member\" müssen darauf folgen.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs können in TypeScript-Typen konvertiert werden.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc-Typen können nur innerhalb von Dokumentationskommentaren verwendet werden.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc-Typen können in TypeScript-Typen verschoben werden.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX-Attributen darf nur ein nicht leeres expression-Objekt zugewiesen werden.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Liste der Ordner, aus denen Typendefinitionen einbezogen werden sollen.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste der Stammordner, deren kombinierter Inhalt die Struktur des Projekts zur Laufzeit darstellt.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "\"{0}\" wird aus dem Stammverzeichnis \"{1}\" geladen. Speicherort des Kandidaten \"{2}\".", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Modul \"{0}\" wird aus dem Ordner \"node_modules\" geladen, die Zieldatei ist vom Typ \"{1}\".", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Modul wird als Datei/Ordner geladen, der Speicherort des Kandidatenmoduls ist \"{0}\", die Zieldatei ist vom Typ \"{1}\".", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Modul \"{0}\" wird aus dem Ordner \"node_modules\" geladen, Zieldateitypen: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modul wird als Datei/Ordner geladen, der Speicherort des Kandidatenmoduls ist \"{0}\", Zieldateitypen: {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Für das Gebietsschema ist das Format oder - erforderlich, z. B. \"{0}\" oder \"{1}\".", "Log_paths_used_during_the_moduleResolution_process_6706": "Protokollpfade, die während des „moduleResolution“-Prozesses verwendet werden.", "Longest_matching_prefix_for_0_is_1_6108": "Das längste übereinstimmende Präfix für \"{0}\" ist \"{1}\".", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Stellen Sie ein, dass keyof nur Zeichenfolgen, anstelle von Zeichenfolgen, Zahlen oder Symbolen zurückgibt. Legacy-Option.", "Make_super_call_the_first_statement_in_the_constructor_90002": "super()-Aufruf als erste Anweisung im Konstruktor festlegen", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Der zugeordnete Objekttyp weist implizit einen any-Vorlagentyp auf.", + "Mark_array_literal_as_const_90070": "Arrayliteral als \"const\" markieren", "Matched_0_condition_1_6403": "Übereinstimmung mit \"{0}\" Bedingung \"{1}\".", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Standardmäßig zugeordnetes Includemuster „**/*“", "Matched_by_include_pattern_0_in_1_1407": "Abgeglichen mit dem include-Muster \"{0}\" in \"{1}\"", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Die Methode \"{0}\" darf keine Implementierung besitzen, weil sie als abstrakt markiert ist.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Die Methode muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", "Method_not_implemented_95158": "Die Methode ist nicht implementiert.", "Modifiers_cannot_appear_here_1184": "Modifizierer dürfen hier nicht enthalten sein.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Das Modul \"{0}\" kann nur mit dem Flag \"{1}\" als Standard importiert werden.", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Das Modul \"{0}\" umfasst keinen exportierten Member \"{1}\". Wollten Sie stattdessen \"import {1} from {0}\" verwenden?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Das Modul \"{0}\" wird durch eine lokale Deklaration mit dem gleichen Namen ausgeblendet.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Das Modul \"{0}\" verwendet \"export =\" und darf nicht mit \"export *\" verwendet werden.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Das Modul \"{0}\" wurde als in \"{1}\" deklariertes Umgebungsmodul aufgelöst, weil diese Datei nicht geändert wurde.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Das Modul \"{0}\" wurde als lokal deklariertes Umgebungsmodul in der Datei \"{1}\" aufgelöst.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--allowArbitraryExtensions\" ist nicht festgelegt.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Das Modul \"{0}\" wurde zu \"{1}\" aufgelöst, aber \"--jsx\" wurde nicht festgelegt.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--resolveJsonModule\" wird nicht verwendet.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Namen der Moduldeklaration dürfen nur Zeichenfolgen enthalten, die von ' oder \" eingeschlossen werden.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Fehler bei der Modulauflösung mithilfe von \"rootDirs\".", "Modules_6244": "Module", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Modifizierer für bezeichnete Tupelelemente in Bezeichnungen verschieben", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Verschieben Sie den Ausdruck im Standardexport in eine Variable, und fügen Sie ihm eine Typanmerkung hinzu.", "Move_to_a_new_file_95049": "In neue Datei verschieben", + "Move_to_file_95178": "In Datei verschieben", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Mehrere aufeinander folgende numerische Trennzeichen sind nicht zulässig.", "Multiple_constructor_implementations_are_not_allowed_2392": "Mehrere Konstruktorimplementierungen sind unzulässig.", "NEWLINE_6061": "NEUE ZEILE", "Name_is_not_valid_95136": "Der Name ist ungültig.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Benannte Erfassungsgruppen sind nur verfügbar, wenn das Ziel \"ES2018\" oder höher ist.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Benannte Erfassungsgruppen mit demselben Namen müssen sich gegenseitig ausschließen.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Die benannte Eigenschaft \"{0}\" der Typen \"{1}\" und \"{2}\" ist nicht identisch.", "Namespace_0_has_no_exported_member_1_2694": "Der Namespace \"{0}\" besitzt keinen exportierten Member \"{1}\".", "Namespace_must_be_given_a_name_1437": "Namespace muss einen Namen erhalten.", "Namespace_name_cannot_be_0_2819": "Namespacename darf nicht \"{0}\" sein.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces sind in globalen Skriptdateien nicht zulässig, wenn \"{0}\" aktiviert ist. Wenn diese Datei kein globales Skript sein soll, legen Sie \"moduleDetection\" auf \"force\" fest, oder fügen Sie eine leere \"export {}\"-Anweisung hinzu.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Weder Decorators noch Modifizierer können auf \"this\"-Parameter angewendet werden.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Kein Basiskonstruktor weist die angegebene Anzahl von Typargumenten auf.", "No_constituent_of_type_0_is_callable_2755": "Es ist kein Bestandteil vom Typ \"{0}\" aufrufbar.", "No_constituent_of_type_0_is_constructable_2759": "Es kann kein Bestandteil vom Typ \"{0}\" erstellt werden.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Keine Überladung stimmt mit diesem Aufruf überein.", "No_type_could_be_extracted_from_this_type_node_95134": "Aus diesem Typknoten konnte kein Typ extrahiert werden.", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Im Bereich für die Kompakteigenschaft \"{0}\" ist kein Wert vorhanden. Deklarieren Sie entweder einen Wert, oder geben Sie einen Initialisierer an.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Die nicht abstrakte Klasse \"{0}\" implementiert nicht den geerbten abstrakten Member \"{1}\" aus der Klasse \"{2}\".", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Die nicht abstrakte Klasse \"{0}\" implementiert nicht den geerbten abstrakten Member {1} aus der Klasse \"{2}\".", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2} und {3} weitere.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Der nicht abstrakte Ausdruck implementiert nicht den geerbten abstrakten Member \"{0}\" aus der Klasse \"{1}\".", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1} und {2} weitere.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Assertionen ungleich NULL können nur in TypeScript-Dateien verwendet werden.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Nicht relative Pfade sind nur zulässig, wenn \"baseUrl\" festgelegt wurde. Fehlt am Anfang die Zeichenfolge \"./\"?", "Non_simple_parameter_declared_here_1348": "Hier wurde ein nicht einfacher Parameter deklariert.", "Not_all_code_paths_return_a_value_7030": "Nicht alle Codepfade geben einen Wert zurück.", "Not_all_constituents_of_type_0_are_callable_2756": "Nicht alle Bestandteile vom Typ \"{0}\" können aufgerufen werden.", "Not_all_constituents_of_type_0_are_constructable_2760": "Nicht alle Bestandteile vom Typ \"{0}\" können erstellt werden.", + "Numbers_out_of_order_in_quantifier_1506": "Zahlen im Quantifizierer nicht in der richtigen Reihenfolge.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Numerische Literale mit absoluten Werten von 2^53 oder höher sind zu groß, um als ganze Zahlen genau dargestellt werden zu können.", "Numeric_separators_are_not_allowed_here_6188": "Numerische Trennzeichen sind hier nicht zulässig.", "Object_is_of_type_unknown_2571": "Das Objekt ist vom Typ \"Unbekannt\".", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Das Objektliteral kann nur bekannte Eigenschaften angeben, und \"{0}\" ist im Typ \"{1}\" nicht vorhanden.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Das Objektliteral gibt möglicherweise nur bekannte Eigenschaften an, \"{0}\" ist jedoch im Typ \"{1}\" nicht vorhanden. Wollten Sie \"{2}\" schreiben?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Die Eigenschaft \"{0}\" des Objektliterals weist implizit den Typ \"{1}\" auf.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekte, die Kurzformeigenschaften enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekte, die Verteilungszuweisungen enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", "Octal_digit_expected_1178": "Es wurde eine Oktalzahl erwartet.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Oktalliteraltypen müssen die Syntax \"ES2015\" verwenden. Verwenden Sie die Syntax \"{0}\".", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Oktalliterale sind in einem Mitgliederenumerationsinitialisierer nicht zulässig. Verwenden Sie die Syntax \"{0}\".", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Oktalliterale sind im Strict-Modus unzulässig.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Oktalliterale sind bei der Zielgruppenadressierung von ECMAScript 5 und höher nicht verfügbar. Verwenden Sie die Syntax \"{0}\".", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Oktale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig. Wenn dies als Escapesequenz vorgesehen war, verwenden Sie stattdessen die Syntax \"{0}\".", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Oktale Escapesequenzen sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Oktale Literale sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Ein Wert von \"{0}.{1}\" ist die Zeichenfolge \"{2}\", und der andere Wert wird als unbekannter numerischer Wert angenommen.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In einer for...in-Anweisung ist nur eine einzige Variablendeklaration zulässig.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In einer for...of-Anweisung ist nur eine einzige Variablendeklaration zulässig.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Nur eine void-Funktion kann mit dem Schlüsselwort \"new\" aufgerufen werden.", "Only_ambient_modules_can_use_quoted_names_1035": "Nur Umgebungsmodule dürfen Namen in Anführungszeichen verwenden.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Nur die Module \"amd\" und \"system\" werden in Verbindung mit --{0} unterstützt.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Nur const-Arrays können mit \"--isolatedDeclarations\" abgeleitet werden.", "Only_emit_d_ts_declaration_files_6014": "Geben Sie nur .d.ts-Deklarationsdateien aus.", - "Only_named_exports_may_use_export_type_1383": "\"export type\" kann nur von benannten Exporten verwendet werden.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Nur numerische Enumerationen können berechnete Member umfassen, aber dieser Ausdruck weist den Typ \"{0}\" auf. Wenn Sie keine Vollständigkeitsprüfung benötigen, erwägen Sie stattdessen die Verwendung eines Objektliterals.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Nur d.ts-Dateien und keine JavaScript-Dateien ausgeben.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Nur auf öffentliche und geschützte Methoden der Basisklasse kann über das Schlüsselwort \"super\" zugegriffen werden.", "Operator_0_cannot_be_applied_to_type_1_2736": "Der Operator \"{0}\" kann nicht auf den Typ \"{1}\" angewendet werden.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Der Operator \"{0}\" darf nicht auf die Typen \"{1}\" und \"{2}\" angewendet werden.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatoren dürfen innerhalb einer Zeichenklasse nicht gemischt werden. Verpacken Sie ihn stattdessen in eine geschachtelte Klasse.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Deaktivieren Sie bei der Bearbeitung ein Projekt von der Überprüfung mehrerer Projektverweise.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Die Option \"{0}={1}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Die Option \"{0}={1}\" ist veraltet und funktioniert in TypeScript {2} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{3}\" an, um diesen Fehler stumm zu schalten.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf FALSE oder NULL festgelegt werden.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf NULL festgelegt werden.", + "Option_0_can_only_be_specified_on_command_line_6266": "Die Option \"{0}\" kann nur in der Befehlszeile angegeben werden.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Die Option \"{0}\" kann nur verwendet werden, wenn die Option \"-inlineSourceMap\" oder \"-sourceMap\" angegeben wird.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Die Option \"{0}\" kann nur verwendet werden, wenn \"moduleResolution\" auf \"node16\", \"nodenext\" oder \"bundler\" festgelegt ist.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "Die Option \"{0}\" kann nur verwendet werden, wenn \"module\" auf \"preserve\" oder auf \"es2015\" oder höher festgelegt ist.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Die Option \"{0}\" kann nicht angegeben werden, wenn die Option \"jsx\" den Wert \"{1}\" aufweist.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Die Option \"{0}\" kann nicht angegeben werden, wenn die Option \"target\" den Wert \"ES3\" aufweist.", "Option_0_cannot_be_specified_with_option_1_5053": "Die Option \"{0}\" darf nicht zusammen mit der Option \"{1}\" angegeben werden.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Die Option \"{0}\" darf nicht ohne die Option \"{1}\" angegeben werden.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Die Option \"{0}\" kann nicht ohne die Option \"{1}\" oder \"{2}\" angegeben werden.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Die Option \"{0}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Die Option \"{0}\" ist veraltet und funktioniert in TypeScript {1} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{2}\" an, um diesen Fehler stumm zu schalten.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Die Option \"{0}\" ist redundant und darf nicht zusammen mit der Option \"{1}\" angegeben werden.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "Die Option \"allowImportingTsExtensions\" kann nur verwendet werden, wenn entweder \"noEmit\" oder \"emitDeclarationOnly\" festgelegt ist.", "Option_build_must_be_the_first_command_line_argument_6369": "Die Option \"--build\" muss das erste Befehlszeilenargument sein.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Die Option \"--incremental\" kann nur mit \"tsconfig\" und bei Ausgabe in eine einzelne Datei oder bei Festlegung der Option \"--tsBuildInfoFile\" angegeben werden.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Die Option \"isolatedModules\" kann nur verwendet werden, wenn entweder die Option \"--module\" angegeben ist oder die Option \"target\" den Wert \"ES2015\" oder höher aufweist.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Die Option \"preserveConstEnums\" kann nicht deaktiviert werden, wenn \"isolatedModules\" aktiviert ist.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "Die Option „preserveValueImports“ kann nur verwendet werden, wenn „module“ auf „es2015“ oder höher festgelegt ist.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Die Option \"moduleResolution\" muss auf \"{0}\" festgelegt werden (oder nicht angegeben werden), wenn die Option \"module\" auf \"{1}\" festgelegt ist.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Die Option \"module\" muss auf \"{0}\" festgelegt werden, wenn die Option \"moduleResolution\" auf \"{1}\" festgelegt ist.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Die Option \"preserveConstEnums\" kann nicht deaktiviert werden, wenn \"{0}\" aktiviert ist.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Die Option \"project\" darf nicht mit Quelldateien in einer Befehlszeile kombiniert werden.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Die Option \"--resolveJsonModule\" kann nur angegeben werden, wenn die Modulcodegenerierung \"commonjs\", \"amd\", \"es2015\" oder \"esNext\" lautet.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Die Option \"--resolveJsonModule\" kann nicht ohne die Modulauflösungsstrategie \"node\" angegeben werden.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"moduleResolution\" auf \"classic\" festgelegt ist.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"module\" auf \"none\", \"system\" oder \"umd\" festgelegt ist.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Die Option \"tsBuildInfoFile\" kann nicht angegeben werden, ohne die Option \"incremental\" oder \"composite\" anzugeben oder \"tsc -b\" auszuführen.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Die Option \"verbatimModuleSyntax\" kann nicht verwendet werden, wenn \"module\" auf \"UMD\", \"AMD\" oder \"System\" festgelegt ist.", "Options_0_and_1_cannot_be_combined_6370": "Die Optionen \"{0}\" und \"{1}\" können nicht kombiniert werden.", "Options_Colon_6027": "Optionen:", "Output_Formatting_6256": "Ausgabeformatierung", "Output_compiler_performance_information_after_building_6615": "Ausgabe Compiler-Leistungsinformationen nach dem Erstellen.", "Output_directory_for_generated_declaration_files_6166": "Ausgabeverzeichnis für erstellte Deklarationsdateien.", - "Output_file_0_from_project_1_does_not_exist_6309": "Die Ausgabedatei \"{0}\" aus dem Projekt \"{1}\" ist nicht vorhanden.", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Die Ausgabedatei \"{0}\" wurde nicht aus der Quelldatei \"{1}\" erstellt.", "Output_from_referenced_project_0_included_because_1_specified_1411": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"{1}\" angegeben wurde", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"--module\" als \"none\" angegeben wurde", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Eine Parameterdeklaration wurde erwartet.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Der Parameter weist einen Namen, aber keinen Typ auf. Meinten Sie \"{0}: {1}\"?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametermodifizierer können nur in TypeScript-Dateien verwendet werden.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Der Parameter muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Drucken Sie die Namen der ausgegebenen Dateien nach einer Kompilierung.", "Print_this_message_6017": "Diese Nachricht ausgeben.", "Private_accessor_was_defined_without_a_getter_2806": "Die private Zugriffsmethode wurde ohne Getter definiert.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Das private Feld \"{0}\" muss in einer einschließenden Klasse deklariert werden.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Private Bezeichner sind in Variablendeklarationen nicht zulässig.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Private Bezeichner sind außerhalb des Textes von Klassen nicht zulässig.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Private Bezeichner sind nur in Klassentexten zulässig und dürfen nur als Teil einer Klassenmitgliedsdeklaration, eines Eigenschaftszugriffs oder auf der linken Seite eines in-Ausdrucks verwendet werden.", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Private Bezeichner sind nur verfügbar, wenn als Ziel ECMAScript 2015 oder höher verwendet wird.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Private Bezeichner können nicht als Parameter verwendet werden.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Für einen Typparameter kann nicht auf den privaten oder geschützten Member \"{0}\" zugegriffen werden.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt \"{0}\" kann nicht erstellt werden, weil die Abhängigkeit \"{1}\" Fehler enthält.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Das Projekt \"{0}\" kann nicht erstellt werden, weil die zugehörige Abhängigkeit \"{1}\" nicht erstellt wurde.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Die Neuerstellung des Projekts \"{0}\" wird erzwungen.", + "Project_0_is_out_of_date_because_1_6420": "Das Projekt \"{0}\" ist veraltet, da {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Das Projekt \"{0}\" ist veraltet, da die buildinfo-Datei \"{1}\" darauf hinweist, dass die Datei \"{2}\" die Stammdatei der Kompilierung war, es jetzt jedoch nicht mehr ist.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" darauf hinweist, dass das Programm Fehler melden muss.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" angibt, dass einige der Änderungen nicht ausgegeben wurden.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" auf eine Änderung in compilerOptions hinweist.", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt \"{0}\" ist veraltet, weil die Abhängigkeit \"{1}\" veraltet ist.", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe \"{1}\" älter ist als die Eingabe \"{2}\"", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt \"{0}\" ist veraltet, weil die Ausgabedatei \"{1}\" nicht vorhanden ist.", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe für das Projekt mit Version {1} generiert wurde, die sich von der aktuellen Version {2} unterscheidet.", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Das Projekt \"{0}\" ist veraltet, weil sich die zugehörige Abhängigkeit \"{1}\" geändert hat.", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Das Projekt \"{0}\" ist veraltet, weil beim Lesen der Datei \"{1}\" ein Fehler aufgetreten ist.", "Project_0_is_up_to_date_6361": "Projekt \"{0}\" ist auf dem neuesten Stand.", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt \"{0}\" ist auf dem neuesten Stand, weil die neueste Eingabe \"{1}\" älter ist als die Ausgabe \"{2}\".", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "Die Eigenschaft \"{0}\" wird vor ihrer Initialisierung verwendet.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" möglicherweise nicht vorhanden. Meinten Sie \"{2}\"?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Die Eigenschaft \"{0}\" des JSX-Verteilungsattributs kann nicht der Zieleigenschaft zugewiesen werden.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Die Eigenschaft \"{0}\" des exportierten Klassenausdrucks ist unter Umständen nicht privat oder geschützt.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Die Eigenschaft \"{0}\" des exportierten anonymen Klassentyps ist unter Umständen nicht privat oder geschützt.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Die Eigenschaft \"{0}\" von Typ \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Die Eigenschaft \"{0}\" überschreibt die Basiseigenschaft in \"{1}\". Wenn dies beabsichtigt ist, fügen Sie einen Initialisierer hinzu. Andernfalls fügen Sie einen declare-Modifizierer hinzu, oder entfernen Sie die redundante Deklaration.", "Property_assignment_expected_1136": "Die Zuweisung einer Eigenschaft wurde erwartet.", "Property_destructuring_pattern_expected_1180": "Ein Eigenschaftendestrukturierungsmuster wurde erwartet.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Die Eigenschaft muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", "Property_or_signature_expected_1131": "Eine Eigenschaft oder Signatur wurde erwartet.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Der Eigenschaftswert kann nur ein Zeichenfolgenliteral, ein numerisches Literal, \"true\", \"false\", \"NULL\", ein Objektliteral oder ein Arrayliteral sein.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Bieten Sie vollständige Unterstützung für Iterablen in \"for-of\", Verteilung und Destrukturierung mit dem Ziel \"ES5\" oder \"ES3\".", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Bieten Sie vollständige Unterstützung für Iterablen in \"for-of\", Verteilung und Destrukturierung mit dem Ziel \"ES5\".", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Löst einen Fehler aus, wenn ein Funktionsparameter nicht gelesen wird.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Fehler für Ausdrücke und Deklarationen mit einem impliziten any-Typ auslösen.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Fehler für \"this\"-Ausdrücke mit einem impliziten any-Typ auslösen.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Das erneute Exportieren eines Typs erfordert bei Festlegung des Flags \"--isolatedModules\" die Verwendung von \"export type\".", + "Range_out_of_order_in_character_class_1517": "Der Bereich in der Zeichenklasse liegt außerhalb der Reihenfolge.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Wenn \"{0}\" aktiviert ist, erfordert das erneute Exportieren eines Typs die Verwendung von \"export type\".", + "React_components_cannot_include_JSX_namespace_names_2639": "React-Komponenten dürfen keine JSX-Namespacenamen enthalten.", "Redirect_output_structure_to_the_directory_6006": "Die Ausgabestruktur in das Verzeichnis umleiten.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Verringern Sie die Anzahl der Projekte, die von TypeScript automatisch geladen werden.", "Referenced_project_0_may_not_disable_emit_6310": "Beim referenzierten Projekt \"{0}\" darf nicht die Ausgabe deaktiviert werden.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Das referenzierte Projekt \"{0}\" muss für die Einstellung \"composite\" den Wert TRUE aufweisen.", "Referenced_via_0_from_file_1_1400": "Referenziert über \"{0}\" aus der Datei \"{1}\"", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Relative Importpfade erfordern explizite Dateierweiterungen in EcmaScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Erwägen Sie, dem Importpfad eine Erweiterung hinzuzufügen.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Relative Importpfade erfordern explizite Dateierweiterungen in EcmaScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Hast du gemeint '{0}'?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Erwägen Sie, dem Importpfad eine Erweiterung hinzuzufügen.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Meinten Sie \"{0}\"?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Entfernen Sie eine Liste von Verzeichnissen aus dem Überwachungsvorgang.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Entfernen Sie eine Liste von Dateien aus der Verarbeitung des Überwachungsmodus.", "Remove_all_unnecessary_override_modifiers_95163": "Alle nicht benötigten override-Modifizierer entfernen", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Fehler in .js-Dateien melden.", "Report_errors_on_unused_locals_6134": "Fehler für nicht verwendete lokale Variablen melden.", "Report_errors_on_unused_parameters_6135": "Fehler für nicht verwendete Parameter melden.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Fordern Sie eine ausreichende Anmerkung zu Exporten an, damit andere Tools Deklarationsdateien trivial generieren können.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Nicht deklarierte Eigenschaften aus Indexsignaturen müssen Elementzugriffe verwenden.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Erforderliche Typparameter dürfen nicht auf optionale Typparameter folgen.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Die Auflösung für das Modul \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Die Auflösung für die Typreferenzanweisung \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Fehler beim Auflösen des nicht relativen Namens. Es wird versucht, moderne Funktionen zur Knotenauflösung zu deaktivieren, um festzustellen, ob die npm-Bibliothek eine Konfigurationsaktualisierung erfordert.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Fehler beim Auflösen des nicht relativen Namens. Mit \"--moduleResolution bundler\" wird versucht festzustellen, ob das Projekt möglicherweise aktualisiert werden muss.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "\"keyof\" darf nur in Eigenschaftennamen mit Zeichenfolgenwert aufgelöst werden (keine Ziffern oder Symbole).", + "Resolved_under_condition_0_6414": "Aufgelöst unter Bedingung \"{0}\".", "Resolving_in_0_mode_with_conditions_1_6402": "Wird im {0}-Modus mit Bedingungen \"{1}\" aufgelöst.", "Resolving_module_0_from_1_6086": "======== Das Modul \"{0}\" aus \"{1}\" wird aufgelöst. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Der Modulname \"{0}\" relativ zur Basis-URL \"{1}\"–\"{2}\" wird aufgelöst.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist nicht festgelegt. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist \"{1}\". ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist nicht festgelegt. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Die Typverweisdirektive für das Programm, das benutzerdefinierte typeRoots angibt, wird aufgelöst. Lookup im Ordner \"node_modules\" wird übersprungen.", "Resolving_with_primary_search_path_0_6121": "Die Auflösung erfolgt mit dem primären Suchpfad \"{0}\".", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Der rest-parameter \"{0}\" weist implizit einen Typ \"any[]\" auf.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Der rest-Parameter \"{0}\" weist implizit einen Typ \"any[]\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.", "Rewrite_all_as_indexed_access_types_95034": "Alle als indizierte Zugriffstypen neu schreiben", "Rewrite_as_the_indexed_access_type_0_90026": "Als indizierten Zugriffstyp \"{0}\" neu schreiben", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Rechter Operand von ?? ist nicht erreichbar, weil der linke Operand nie \"NULLISH\" ist.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Das Stammverzeichnis kann nicht ermittelt werden. Die primären Suchpfade werden übersprungen.", "Root_file_specified_for_compilation_1427": "Für die Kompilierung angegebene Stammdatei", "STRATEGY_6039": "STRATEGIE", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Speichern Sie die .tsbuildinfo-Dateien, um eine inkrementelle Kompilierung von Projekten zuzulassen.", "Saw_non_matching_condition_0_6405": "Die nicht übereinstimmende Bedingung \"{0}\" wurde angezeigt.", "Scoped_package_detected_looking_in_0_6182": "Bereichsbezogenes Paket erkannt. In \"{0}\" wird gesucht", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Alle node_modules-Vorgängerverzeichnisse werden nach Fallbackerweiterungen durchsucht: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Alle node_modules-Vorgängerverzeichnisse werden nach bevorzugten Erweiterungen durchsucht: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "Die Auswahl umfasst keine gültigen Anweisungen.", "Selection_is_not_a_valid_type_node_95133": "Die Auswahl ist kein gültiger Typknoten.", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Legen Sie die JavaScript-Sprachversion für das ausgegebene JavaScript fest, und schließen Sie kompatible Bibliotheksdeklarationen ein.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Ausführliche Diagnoseinformationen anzeigen.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Anzeigen, was erstellt würde (oder gelöscht würde, wenn mit \"--clean\" angegeben)", "Signature_0_must_be_a_type_predicate_1224": "Die Signatur \"{0}\" muss ein Typprädikat sein.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Signaturdeklarationen können nur in TypeScript-Dateien verwendet werden.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Überspringen Sie die Erstellung von Downstreamprojekten bei einem Fehler im Upstreamprojekt.", "Skip_type_checking_all_d_ts_files_6693": "Überspringen Sie die Typüberprüfung aller .d.ts-Dateien.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Überspringen Sie die Typüberprüfung von .d.ts-Dateien, die in TypeScript enthalten sind.", "Skip_type_checking_of_declaration_files_6012": "Überspringen Sie die Typüberprüfung von Deklarationsdateien.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Das Erstellen von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" einen Fehler aufweist.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Das Kompilieren von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" nicht erstellt wurde.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Modul \"{0}\", das wie ein absoluter URI aussieht, wird übersprungen, Zieldateitypen: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Quelle aus referenziertem Projekt \"{0}\", da \"{1}\" angegeben wurde", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Quelle aus referenziertem Projekt \"{0}\", da \"--module\" als \"none\" angegeben wurde", "Source_has_0_element_s_but_target_allows_only_1_2619": "Die Quelle weist {0} Element(e) auf, aber das Ziel lässt nur {1} zu.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Geben Sie an, wie der TypeScript-Überwachungsmodus funktioniert.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Geben Sie Bibliotheksdateien an, die in die Kompilierung eingeschlossen werden sollen.", "Specify_module_code_generation_6016": "Geben Sie die Modulcodegenerierung an.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Geben Sie die Modulauflösungsstrategie an: \"node\" (Node.js) oder \"classic\" (TypeScript vor Version 1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Geben Sie den Modulspezifizierer an, der zum Importieren der JSX-Factoryfunktionen verwendet wird, wenn Sie „jsx: react-jsx*“ verwenden.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Geben Sie mehrere Ordner an, die als „./node_modules/@types“ fungieren.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Geben Sie einen oder mehrere Pfad- oder Knotenmodulverweise auf Basiskonfigurationsdateien an, von denen Einstellungen geerbt werden.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Statische Member dürfen nicht auf Klassentypparameter verweisen.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Die statische Eigenschaft \"{0}\" steht in Konflikt mit der integrierten Eigenschaft \"Function.{0}\" der Konstruktorfunktion \"{1}\".", "String_literal_expected_1141": "Ein Zeichenfolgenliteral wurde erwartet.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Import- und Exportnamen von Zeichenfolgenliteralen werden nicht unterstützt, wenn das Flag \"--module\" auf \"es2015\" oder \"es2020\" festgelegt ist.", "String_literal_with_double_quotes_expected_1327": "Ein Zeichenfolgenliteral mit doppelten Anführungszeichen wird erwartet.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Fehler und Nachrichten farbig und mit Kontext formatieren (experimentell).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Subpatternkennzeichen müssen vorhanden sein, wenn ein Minuszeichen vorhanden ist.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Nachfolgende Eigenschaftendeklarationen müssen den gleichen Typ aufweisen. Die Eigenschaft \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Nachfolgende Variablendeklarationen müssen den gleichen Typ aufweisen. Die Variable \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Die Ersetzung \"{0}\" für das Muster \"{1}\" weist einen falschen Typ auf. Erwartet wurde \"string\", abgerufen wurde \"{2}\".", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Mit Tags versehene Vorlagenausdrücke sind in einer optionalen Kette nicht zulässig.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Das Ziel erlaubt nur {0} Element(e), aber die Quelle kann mehr aufweisen.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Das Ziel erfordert {0} Element(e), aber die Quelle kann weniger aufweisen.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Die Zielsignatur stellt zu wenige Argumente bereit. Erwartete {0} oder mehr, erhielt aber {1}.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Der Modifizierer \"{0}\" kann nur in TypeScript-Dateien verwendet werden.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Der Operator \"{0}\" darf nicht den Typ \"symbol\" angewendet werden.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Der Operator \"{0}\" ist für boolesche Typen unzulässig. Verwenden Sie stattdessen ggf. \"{1}\".", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Die Eigenschaft \"{0}\" eines asynchronen Iterators muss eine Methode sein.", "The_0_property_of_an_iterator_must_be_a_method_2767": "Die Eigenschaft \"{0}\" eines Iterators muss eine Methode sein.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Der Typ \"Object\" kann nur wenigen anderen Typen zugewiesen werden. Wollten Sie stattdessen den Typ \"any\" verwenden?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Auf das Objekt \"arguments\" darf in einer Pfeilfunktion in ES3 und ES5 nicht verwiesen werden. Verwenden Sie ggf. einen Standardfunktionsausdruck.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Auf das Objekt \"arguments\" darf in einer asynchronen Funktion oder Methode in ES3 und ES5 nicht verwiesen werden. Verwenden Sie ggf. eine Standardfunktion oder -methode.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Das Unicode-Flag (u) und das Unicode Sets-Flag (v) können nicht gleichzeitig festgelegt werden.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Auf das Objekt „arguments“ darf in einer Pfeilfunktion in ES5 nicht verwiesen werden. Verwenden Sie ggf. einen Standardfunktionsausdruck.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Auf das Objekt „arguments“ darf in einer asynchronen Funktion oder Methode in ES5 nicht verwiesen werden. Verwenden Sie ggf. eine Standardfunktion oder -methode.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Der Text einer \"if\"-Anweisung kann keine leere Anweisung sein.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Der Aufruf wäre für diese Implementierung erfolgreich, aber die Implementierungssignaturen von Überladungen sind nicht extern sichtbar.", "The_character_set_of_the_input_files_6163": "Der Zeichensatz der Eingabedateien.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ mit zyklischer Struktur, die nicht trivial serialisiert werden kann. Es ist eine Typanmerkung erforderlich.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ \"{1}\", auf den nicht zugegriffen werden kann. Eine Typanmerkung ist erforderlich.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Der abgeleitete Typ dieses Knotens überschreitet die maximale Länge, die vom Compiler serialisiert wird. Eine explizite Typanmerkung ist erforderlich.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Der Initialisierer einer „using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.dispose]()“ sein oder „null“ oder „undefined“ sein.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Der Initialisierer einer „await using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.asyncDispose]()“ oder „[Symbol.dispose]5D;()“ sein oder „null“ oder „undefined“ sein.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in mehreren Bestandteilen vorhanden und in einigen davon privat ist.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in einigen Bestandteilen widersprüchliche Typen aufweist.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Das Schlüsselwort \"intrinsic\" darf nur zum Deklarieren von vom Compiler bereitgestellten intrinsischen Typen verwendet werden.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "Die letzte Überladung hat den folgenden Fehler verursacht.", "The_last_overload_is_declared_here_2771": "Die letzte Überladung wird hier deklariert.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Die linke Seite einer for...in-Anweisung darf kein Destrukturierungsmuster sein.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Die linke Seite einer „for... in“-Anweisung darf keine „using“-Deklaration sein.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Die linke Seite eines „for...in“-Anweisung darf keine „await using“-Deklaration sein.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Die linke Seite einer for...in-Anweisung darf keine Typanmerkung verwenden.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Die linke Seite einer for...in-Anweisung darf kein optionaler Eigenschaftenzugriff sein.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Die linke Seite einer for...in-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Die linke Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Die linke Seite eines Zuweisungsausdrucks darf kein optionaler Eigenschaftenzugriff sein.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Die linke Seite eines Zuweisungsausdrucks muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Die linke Seite eines „instanceof“-Ausdrucks muss dem ersten Argument der „[Symbol.hasInstance]“-Methode der rechten Seite zugewiesen werden können.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Die linke Seite eines instanceof-Ausdrucks muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Das beim Anzeigen von Meldungen für den Benutzer verwendete Gebietsschema (z. B. \"de-de\").", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Die maximale Abhängigkeitstiefe, die unter \"node_modules\" durchsucht und für die JavaScript-Dateien geladen werden sollen.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Exportzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Importzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Auf die Eigenschaft \"{0}\" kann für den Typ \"{1}\" nicht innerhalb dieser Klasse zugegriffen werden, weil sie von einem anderen privaten Bezeichner mit der gleichen Schreibweise verborgen wird.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Der Rückgabetyp einer get-Zugriffsmethode muss dem zugehörigen set-Accessortyp zugewiesen werden können.", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Der Rückgabetyp einer Parameter-Decorator-Funktion muss \"void\" oder \"any\" sein.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Der Rückgabetyp einer Eigenschaften-Decorator-Funktion muss \"void\" oder \"any\" sein.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Der Rückgabetyp einer asynchronen Funktion muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein. Wollten Sie eigentlich \"Promise<{0}>\" verwenden?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Die rechte Seite einer for...in-Anweisung muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein. Sie weist hier jedoch den Typ \"{0}\" auf.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Die rechte Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Die rechte Seite eines instanceof-Ausdrucks muss den Typ \"any\" oder einen Typ aufweisen, der dem Schnittstellentyp \"Function\" zugewiesen werden kann.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Die rechte Seite eines „instanceof“-Ausdrucks muss entweder vom Typ „any“, eine Klasse, eine Funktion oder ein anderer Typ, der dem Schnittstellentyp „Function“ zugewiesen werden kann, oder ein Objekttyp mit einer Symbol.hasInstance-Methode sein.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Die rechte Seite eines „instanceof“-Ausdrucks darf kein Instanziierungsausdruck sein.", "The_root_value_of_a_0_file_must_be_an_object_5092": "Der Stammwert einer {0}-Datei muss ein Objekt sein.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Die Runtime ruft das Decorator-Element mit {1} Argumenten auf, aber das Decorator-Element erwartet {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Die Runtime ruft das Decorator-Element mit {1}-Argumenten auf, aber das Decorator-Element erwartet mindestens {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "Die verbergende Deklaration von \"{0}\" ist hier definiert.", "The_signature_0_of_1_is_deprecated_6387": "Die Signatur \"{0}\" von \"{1}\" ist veraltet.", "The_specified_path_does_not_exist_Colon_0_5058": "Der angegebene Pfad \"{0}\" ist nicht vorhanden.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Der \"Type\"-Modifizierer kann nicht für einen benannten Export verwendet werden, wenn \"Export-Typ\" auf seiner Export-Anweisung verwendet wird.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Der \"Type\"-Modifizierer kann nicht für einen benannten Import verwendet werden, wenn der \"Import-Typ\" auf seiner Import-Anweisung verwendet wird.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Der Typ einer Funktionsdeklaration muss mit der Signatur der Funktion übereinstimmen.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Der Typ dieses Ausdrucks kann nicht ohne eine „resolution-mode“-Assertion benannt werden, was eine instabile Funktion ist. Verwenden Sie nächtliches TypeScript, um diesen Fehler zu unterdrücken. Versuchen Sie, mit „npm install -D typescript@next“ zu aktualisieren.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Der Typ dieses Knotens kann nicht serialisiert werden, da seine Eigenschaft \"{0}\" nicht serialisiert werden kann.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Der von der {0}()-Methode eines Async-Iterators zurückgegebene Typ muss eine Zusage für einen Typ mit einer value-Eigenschaft sein.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Der von der {0}()-Methode eines Iterators zurückgegebene Typ muss eine value-Eigenschaft aufweisen.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Die Variablendeklaration einer for...in-Anweisung darf keinen Initialisierer aufweisen.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Die Variablendeklaration einer for...of-Anweisung darf keinen Initialisierer aufweisen.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Die with-Anweisung wird nicht unterstützt. Alle Symbole in einem with-Block weisen den Typ \"any\" auf.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte unter Ihrer aktuellen „moduleResolution“-Einstellung nicht aufgelöst werden. Erwägen Sie ein Update auf „node16“, „nodenext“ oder „bundler“.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte nicht aufgelöst werden, wenn package.json „Exporte“ beachtet wird. Die Bibliothek „{1}“ muss möglicherweise ihre package.json oder Eingaben aktualisieren.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "In diesem regulären Ausdruck ist keine Erfassungsgruppe namens „{0}“ vorhanden.", + "There_is_nothing_available_for_repetition_1507": "Es ist nichts für Wiederholungen verfügbar.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet ein einzelnes untergeordnetes Element vom Typ \"{1}\", aber es wurden mehrere untergeordnete Elemente angegeben.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet den Typ \"{1}\", der mehrere untergeordnete Elemente erfordert, aber es wurde nur ein untergeordnetes Elemente angegeben.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. Dieser reguläre Ausdruck enthält keine Erfassungsgruppen.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. In diesem regulären Ausdruck sind nur {0} Erfassungsgruppen vorhanden.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Dieser binäre Ausdruck ist nie „NULLISH“. Fehlen Klammern?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Dieses Zeichen kann in einem regulären Ausdruck nicht mit Escapezeichen versehen werden.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Dieser Vergleich scheint unbeabsichtigt zu sein, da die Typen \"{0}\" und \"{1}\" keine Überlappung aufweisen.", "This_condition_will_always_return_0_2845": "Diese Bedingung gibt immer „{0}“ zurück.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Diese Bedingung gibt immer „{0}“ zurück, da JavaScript Objekte nach Verweis und nicht nach Wert vergleicht.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Diese Bedingung gibt immer TRUE zurück, weil diese '{0}' immer definiert ist.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Diese Bedingung gibt immer TRUE zurück, weil diese Funktion immer definiert ist. Möchten Sie sie stattdessen aufrufen?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Diese Konstruktorfunktion kann in eine Klassendeklaration konvertiert werden.", + "This_expression_is_always_nullish_2871": "Dieser Ausdruck ist immer „NULLISH“.", "This_expression_is_not_callable_2349": "Dieser Ausdruck kann nicht aufgerufen werden.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Dieser Ausdruck kann nicht aufgerufen werden, weil es sich um eine get-Zugriffsmethode handelt. Möchten Sie den Wert ohne \"()\" verwenden?", "This_expression_is_not_constructable_2351": "Dieser Ausdruck kann nicht erstellt werden.", "This_file_already_has_a_default_export_95130": "Diese Datei weist bereits einen Standardexport auf.", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Dieser Import wird nie als Wert verwendet und muss \"import type\" verwenden, weil \"importsNotUsedAsValues\" auf \"error\" festgelegt ist.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Dies ist die erweiterte Deklaration. Die erweiternde Deklaration sollte in dieselbe Datei verschoben werden.", + "This_kind_of_expression_is_always_falsy_2873": "Diese Art von Ausdruck ist immer „FALSY“.", + "This_kind_of_expression_is_always_truthy_2872": "Diese Art von Ausdruck ist immer „TRUTHY“.", "This_may_be_converted_to_an_async_function_80006": "Es kann eine Konvertierung in ein asynchrone Funktion durchgeführt werden.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Dieser Member kann keinen JSDoc-Kommentar mit einem \"@override\"-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem Override-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Dieser Member muss einen override-Modifizierer aufweisen, weil er eine abstrakte Methode überschreibt, die in der Basisklasse \"{0}\" deklariert ist.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Auf dieses Modul kann nur mit ECMAScript-Importen/-Exporten verwiesen werden, indem das Flag \"{0}\" aktiviert und auf den Standardexport verwiesen wird.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Dieses Modul wird mit „export =“ deklariert und kann nur bei Verwendung des Kennzeichnens „{0}“ mit einem Standardimport verwendet werden.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Dieser Vorgang kann vereinfacht werden. Diese Schicht ist identisch mit „{0} {1} {2}“.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Diese Überladung gibt implizit den Typ „{0}“ zurück, da keine Rückgabetypanmerkung vorhanden ist.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Diese Überladungssignatur ist nicht mit der zugehörigen Implementierungssignatur kompatibel.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Dieser Parameter ist mit der Direktive \"use strict\" nicht zugelassen.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Diese Parametereigenschaft muss über einen JSDoc-Kommentar mit einem \"@override\"-Tag verfügen, da sie ein Mitglied in der Basisklasse \"{0}\" überschreibt.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Diese Parametereigenschaft muss einen „override“-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Dieses Flag für reguläre Ausdrücke kann nicht innerhalb eines Untermusters umgeschaltet werden.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Dieses Flag für reguläre Ausdrücke ist nur verfügbar, wenn es auf „{0}“ oder höher ausgerichtet ist.", "This_spread_always_overwrites_this_property_2785": "Diese Eigenschaft wird immer durch diesen Spread-Operator überschrieben.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Diese Syntax ist in Dateien mit der Erweiterung .mts oder .cts reserviert. Fügen Sie ein nachfolgendes Komma oder eine explizite Einschränkung hinzu.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Diese Syntax ist in Dateien mit der Erweiterung \".mts\" oder \".cts\" reserviert. Verwenden Sie stattdessen einen „as“-Ausdruck.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie die Dateierweiterung in \"{0}\", oder fügen Sie das Feld ''type': 'module'' zu \"{1}\" hinzu.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie ihre Dateierweiterung in '{0}', oder erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "'await'-Ausdrücke der obersten Ebene sind nur zulässig, wenn die 'module'-Option auf 'es2022', 'esnext', 'system', 'node16' oder 'nodenext' und die 'target'-Option auf ' es2017' oder höher.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "'await'-Ausdrücke der obersten Ebene sind nur erlaubt, wenn die 'module'-Option auf 'es2022', 'esnext', 'system', 'node16', 'nodenext' oder 'preserve' gesetzt ist und die 'target'-Option auf gesetzt ist 'es2017' oder höher.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "„await using“-Deklarationen der obersten Ebene sind nur erlaubt, wenn die „module“-Option auf „es2022“, „esnext“, „system“, „node16“, „nodenext“ oder „preserve“ und die „target“-Option auf „es2017“ oder höher gesetzt ist.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarationen der obersten Ebene in .d.ts-Dateien müssen entweder mit einem declare- oder einem export-Modifizierer beginnen.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "'for await'-Schleifen der obersten Ebene sind nur erlaubt, wenn die 'module'-Option auf 'es2022', 'esnext', 'system', 'node16' oder 'nodenext' gesetzt ist und die 'target'-Option auf gesetzt ist 'es2017' oder höher.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "'for await'-Schleifen der obersten Ebene sind nur erlaubt, wenn die 'module'-Option auf 'es2022', 'esnext', 'system', 'node16', 'nodenext' oder 'preserve' gesetzt ist und die 'target'-Option auf gesetzt ist 'es2017' oder höher.", "Trailing_comma_not_allowed_1009": "Ein nachgestelltes Komma ist unzulässig.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Jede Datei als separates Modul transpilieren (ähnlich wie bei \"ts.transpileModule\").", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Versuchen Sie es mit \"npm i --save-dev @types/{1}\", sofern vorhanden, oder fügen Sie eine neue Deklarationsdatei (.d.ts) hinzu, die \"declare module '{0}';\" enthält.", "Trying_other_entries_in_rootDirs_6110": "Andere Einträge in \"rootDirs\" werden versucht.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Die Ersetzung \"{0}\" wird versucht. Speicherort des Kandidatenmoduls: \"{1}\".", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Von den Tupelelementen müssen entweder alle oder keines einen Namen aufweisen.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Der Tupeltyp \"{0}\" der Länge {1} weist am Index \"{2}\" kein Element auf.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Tupeltypargumente verweisen zirkulär auf sich selbst.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Der Typ \"{0}\" kann nur durchlaufen werden, wenn das Flag \"--downlevelIteration\" verwendet wird oder \"--target\" den Wert \"es2015\" oder höher aufweist.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Der Typ \"{0}\" weist keine übereinstimmende Indexsignatur für den Typ \"{1}\" auf.", "Type_0_has_no_properties_in_common_with_type_1_2559": "Der Typ \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit Typ \"{1}\".", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Der Typ „{0}“ weist keine Signaturen auf, für die die Liste „Typargument“ gilt.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Der Typ „{0}“ ist generisch und kann nur zum Lesen indiziert werden.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\".", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\" und {3} weitere.", "Type_0_is_not_a_constructor_function_type_2507": "Der Typ \"{0}\" ist kein Konstruktorfunktionstyp.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Der Typ \"{0}\" ist in ES5/ES3 kein gültiger Rückgabetyp einer asynchronen Funktion, weil er nicht auf einen Promise-kompatiblen Konstruktorwert verweist.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Der Typ „{0}“ ist in ES5 kein gültiger Rückgabetyp einer asynchronen Funktion, weil er nicht auf einen Promise-kompatiblen Konstruktorwert verweist.", "Type_0_is_not_an_array_type_2461": "Der Typ \"{0}\" ist kein Arraytyp.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Der Typ \"{0}\" ist kein Array- oder Zeichenfolgentyp.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ \"{0}\" ist kein Array-Typ oder Zeichenfolgentyp oder weist keine \"[Symbol.iterator]()\"-Methode auf, die einen Iterator zurückgibt.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Meinten Sie \"{2}\"?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Der Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Es sind zwei verschiedene Typen mit diesem Namen vorhanden, diese sind jedoch nicht verwandt.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Der Typ „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden, wie in der Abweichungsanmerkung impliziert.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Der Typ „{0}“ kann nicht dem Typ „{1}“ zugewiesen werden, wie für berechnete Enumerationselementwerte erforderlich.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zum Typ des Ziels.", "Type_0_is_not_comparable_to_type_1_2678": "Der Typ \"{0}\" kann nicht mit dem Typ \"{1}\" verglichen werden.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Ein Typargument wurde erwartet.", "Type_argument_list_cannot_be_empty_1099": "Die Typargumentliste darf nicht leer sein.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Typargumente können nur in TypeScript-Dateien verwendet werden.", - "Type_arguments_cannot_be_used_here_1342": "Typargumente können an dieser Stelle nicht verwendet werden.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Typargumente für \"{0}\" verweisen zirkulär auf sich selbst.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Typassertionsausdrücke können nur in TypeScript-Dateien verwendet werden.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Der Typ an Position {0} in der Quelle ist nicht mit dem Typ an Position {1} im Ziel kompatibel.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Der Typ an den Positionen {0} bis {1} in der Quelle ist nicht mit dem Typ an Position {2} im Ziel kompatibel.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Der Typ, der den privaten Namen „{0}“ enthält, kann nicht mit „--isolatedDeclarations“ verwendet werden.", "Type_declaration_files_to_be_included_in_compilation_6124": "Typdeklarationsdateien, die in die Kompilierung eingeschlossen werden sollen.", "Type_expected_1110": "Es wurde ein Typ erwartet.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Typimportassertionen sollten über genau einen Schlüssel verfügen – „resolution-mode“ – mit dem Wert „import“ oder „require“.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Typimportattribute sollten über genau einen Schlüssel verfügen – „resolution-mode“ – mit dem Wert „import“ oder „require“.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Die Typinstanziierung ist übermäßig tief und möglicherweise unendlich.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Auf den Typ wird direkt oder indirekt im Erfüllungsrückruf der eigenen \"then\"-Methode verwiesen.", "Type_library_referenced_via_0_from_file_1_1402": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Die Signatur des Methoden-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Die Signatur des Parameter-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Die Signatur des Eigenschaften-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", + "Undetermined_character_escape_1513": "Nicht definiertes ESC-zeichen.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Unerwartete(s/r) „{0}“. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", "Unexpected_end_of_text_1126": "Unerwartetes Textende.", "Unexpected_keyword_or_identifier_1434": "Unerwartetes Schlüsselwort oder Bezeichner.", "Unexpected_token_1012": "Unerwartetes Token.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Unerwartetes Token. Meinten Sie \"{'>'}\" oder \">\"?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Unerwartetes Token. Meinten Sie \"{'}'}\" oder \"}\"?", "Unexpected_token_expected_1179": "Unerwartetes Token. \"{\" wurde erwartet.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Die Unicode-Escapesequenz kann hier nicht angezeigt werden.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode-Escapesequenzen sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode-Eigenschaftswertausdrücke sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", + "Unknown_Unicode_property_name_1524": "Unbekannter Unicode-Eigenschaftsname.", + "Unknown_Unicode_property_name_or_value_1529": "Unbekannter Unicode-Eigenschaftsname oder -Wert.", + "Unknown_Unicode_property_value_1526": "Unbekannter Unicode-Eigenschaftswert.", "Unknown_build_option_0_5072": "Unbekannte Buildoption \"{0}\".", "Unknown_build_option_0_Did_you_mean_1_5077": "Unbekannte Buildoption \"{0}\". Meinten Sie \"{1}\"?", "Unknown_compiler_option_0_5023": "Unbekannte Compileroption \"{0}\".", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Unbekannte Compileroption \"{0}\". Meinten Sie \"{1}\"?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Unbekanntes Schlüsselwort oder Bezeichner. Meinten Sie \"{0}\"?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Unbekannte Option \"exclude\". Meinten Sie \"exclude\"?", + "Unknown_regular_expression_flag_1499": "Unbekanntes Flag für reguläre Ausdrücke.", "Unknown_type_acquisition_option_0_17010": "Unbekannte Option zur Typerfassung: {0}.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Unbekannte Typerfassungsoption \"{0}\". Meinten Sie \"{1}\"?", "Unknown_watch_option_0_5078": "Unbekannte Überwachungsoption \"{0}\".", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Nicht verwendete Bezeichnung.", "Unused_ts_expect_error_directive_2578": "Nicht verwendete @ts-expect-error-Direktive.", "Update_import_from_0_90058": "Import von \"{0}\" aktualisieren", - "Updating_output_of_project_0_6373": "Ausgabe von Projekt \"{0}\" wird aktualisiert...", + "Update_modifiers_of_0_90061": "Modifizierer von „{0}“ aktualisieren", "Updating_output_timestamps_of_project_0_6359": "Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Unveränderte Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", "Use_0_95174": "Verwenden Sie „{0}“.", + "Use_0_instead_5106": "Verwenden Sie stattdessen „{0}“.", "Use_Number_isNaN_in_all_conditions_95175": "Verwenden Sie „Number.isNaN“ unter allen Bedingungen.", "Use_element_access_for_0_95145": "Elementzugriff für \"{0}\" verwenden", "Use_element_access_for_all_undeclared_properties_95146": "Elementzugriff für alle nicht deklarierten Eigenschaften verwenden", + "Use_import_type_95180": "„Importtyp“ verwenden", "Use_synthetic_default_member_95016": "Verwenden Sie den synthetischen Member \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Verwenden Sie das package.json-Feld „exports“, wenn Sie Paketimporte auflösen.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Verwenden Sie das package.json-Feld „imports“, wenn Sie Importe auflösen.", + "Use_type_0_95181": "„Typ {0}“ verwenden", "Using_0_subpath_1_with_target_2_6404": "Verwenden von \"{0}\" Unterpfad \"{1}\" mit Ziel \"{2}\".", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Das Verwenden einer Zeichenfolge in einer for...of-Anweisung wird nur in ECMAScript 5 oder höher unterstützt.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Bei Verwendung von --build wird tsc durch -b dazu veranlasst, sich eher wie ein Build-Orchestrator als ein Compiler zu verhalten. Damit wird der Aufbau von zusammengesetzten Projekten ausgelöst. Weitere Informationen dazu finden Sie unter {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Eine Variablendeklaration wurde erwartet.", "Variable_declaration_list_cannot_be_empty_1123": "Die Variablendeklarationsliste darf nicht leer sein.", "Variable_declaration_not_allowed_at_this_location_1440": "Variablendeklaration ist an dieser Stelle nicht zulässig.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Die Variable muss eine explizite Typanmerkung mit --isolatedDeclarations aufweisen.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variablen mit mehreren Deklarationen können nicht inline verwendet werden.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Das variadic-Element an Position {0} in der Quelle stimmt nicht mit dem Element an Position {1} im Ziel überein.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Abweichungsanmerkungen werden nur in Typaliasnamen für Objekt-, Funktions-, Konstruktor- und zugeordnete Typen unterstützt.", "Version_0_6029": "Version {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Berücksichtigen Sie bei der Typüberprüfung „null“ und „undefined“.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Gibt an, ob eine veraltete Konsolenausgabe im Überwachungsmodus beibehalten wird, statt den Bildschirm zu löschen.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Alle ungültigen Zeichen mit einem Ausdruckscontainer umschließen", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Umschließen aller ungültigen Decoratorausdrücke in Klammern", "Wrap_all_object_literal_with_parentheses_95116": "Gesamtes Objektliteral in Klammern einschließen", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Alle JSX ohne übergeordnetes Element mit JSX -Fragment umschließen", "Wrap_in_JSX_fragment_95120": "Mit JSX-Fragment umschließen", + "Wrap_in_parentheses_95194": "Umschließen in Klammern", "Wrap_invalid_character_in_an_expression_container_95108": "Ungültiges Zeichen mit Ausdruckscontainer umschließen", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Schließen Sie den folgenden Text, der ein Objektliteral darstellt, in Klammern ein.", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informationen zu allen Compileroptionen finden Sie unter {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Indexsignaturen \"{0}\" und \"{1}\" sind nicht kompatibel.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Die Vorgänge \"{0}\" und \"{1}\" dürfen nicht ohne Klammern kombiniert werden.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" ist zweimal angegeben. Das Attribut mit dem Namen \"{0}\" wird überschrieben.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ am Ende eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ am Anfang eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" kann nur importiert werden, indem das Flag \"esModuleInterop\" aktiviert und ein Standardimport verwendet wird.", "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" kann nur mithilfe eines Standardimports importiert werden.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Verwendung eines Standardimports importiert werden.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder über einen Standardimport importiert werden.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "\"{0}\" wird als globale Skriptdatei betrachtet und kann daher nicht unter \"--isolatedModules\" kompiliert werden. Fügen Sie zum Festlegen als Modul eine Import-, Export- oder eine leere \"export {}\"-Anweisung hinzu.", "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" kann nicht als JSX-Komponente verwendet werden.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" kann nicht als Wert verwendet werden, weil der Export mit \"export type\" durchgeführt wurde.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" kann nicht als Wert verwendet werden, weil der Import mit \"import type\" durchgeführt wurde.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "{0}-Komponenten akzeptieren Text nicht als untergeordnete Elemente. Der Text in der JSX weist den Typ \"string\" auf, aber für \"{1}\" wird der Typ \"{2}\" erwartet.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "\"{0}\" konnte mit einem arbiträren Typ instanziiert werden, der mit \"{1}\" möglicherweise in keinem Zusammenhang steht.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "„{0}“-Deklarationen können nur innerhalb eines Blocks deklariert werden.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "{0}-Deklarationen können nur in TypeScript-Dateien verwendet werden.", + "_0_declarations_may_not_have_binding_patterns_1492": "„{0}“-Deklarationen dürfen keine Bindungsmuster aufweisen.", + "_0_declarations_must_be_initialized_1155": "„{0}“-Deklarationen müssen initialisiert werden.", "_0_expected_1005": "\"{0}\" wurde erwartet.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ hat einen Zeichenfolgentyp, muss aber syntaktisch erkennbare Zeichenfolgensyntax aufweisen, wenn „isolatedModules“ aktiviert ist.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" umfasst keinen exportierten Member namens \"{1}\". Meinten Sie \"{2}\"?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" weist implizit einen Rückgabetyp \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem der Rückgabeausdrücke des Objekts verwiesen wird.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "\"{0}\" Indextyp \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" ist ein primitiver Typ, aber \"{1}\" ist ein Wrapperobjekt. Verwenden Sie vorzugsweise \"{0}\", wenn möglich.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" ist ein Typ und kann nicht in JavaScript-Dateien importiert werden. Verwenden Sie \"{1}\" in einer JSDoc-Typanmerkung.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "„{0}“ ist ein Typ und muss mithilfe eines reinen Typimports importiert werden, wenn „preserveValueImports“ und isolatedModules“ beide aktiviert sind.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ ist ein Typ und muss mit einem reinen Typimport importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}“ ist eine nicht verwendete Umbenennung von „{1}“. Wollten Sie sie als Typanmerkung verwenden?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" kann der Einschränkung vom Typ \"{1}\" zugewiesen werden, aber \"{1}\" könnte mit einem anderen Untertyp der Einschränkung \"{2}\" instanziiert werden.", "_0_is_automatically_exported_here_18044": "\"{0}\" wird hier automatisch exportiert.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "Die {0}-Liste darf nicht leer sein.", "_0_modifier_already_seen_1030": "Der {0}-Modifizierer ist bereits vorhanden.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Klasse, einer Schnittstelle oder eines Typalias verwendet werden.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Funktion, Methode oder Klasse angezeigt werden.", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Der Modifizierer \"{0}\" darf nicht für eine Konstruktordeklaration verwendet werden.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Der Modifizierer \"{0}\" darf nicht für ein Modul- oder Namespaceelement verwendet werden.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Der Modifizierer \"{0}\" darf nicht für einen Parameter verwendet werden.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Der Modifizierer \"{0}\" darf nicht für einen Typmember verwendet werden.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Der Modifizierer „{0}“ kann nicht für einen Typparameter verwendet werden", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Der Modifizierer „{0}“ kann nicht in einer „using“-Deklaration angezeigt werden.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Der Modifizierer „{0}“ kann nicht in einer „await using“-Deklaration angezeigt werden.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Der Modifizierer \"{0}\" darf nicht für eine Indexsignatur verwendet werden.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Der Modifizierer \"{0}\" kann nicht für Klassenelemente dieser Art verwendet werden.", "_0_modifier_cannot_be_used_here_1042": "Der Modifizierer \"{0}\" kann hier nicht verwendet werden.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Der Modifizierer \"{0}\" darf nicht mit dem Modifizierer \"{1}\" verwendet werden.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Der Modifizierer \"{0}\" kann nicht mit einem privaten Bezeichner verwendet werden.", "_0_modifier_must_precede_1_modifier_1029": "Der Modifizierer \"{0}\" muss dem Modifizierer \"{1}\" vorangestellt sein.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Auf „\\{0}“ muss ein Unicode-Eigenschaftswertausdruck folgen, der in geschweifte Klammern eingeschlossen ist.", "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" erfordert eine explizite Typanmerkung.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Namespace verwendet.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" bezieht sich nur auf einen Typ, wird aber hier als Wert verwendet.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"es2015\" oder höher.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" bezieht sich auf eine globale UMD, die aktuelle Datei ist jedoch ein Modul. Ziehen Sie in Betracht, stattdessen einen Import hinzuzufügen.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" bezieht sich auf einen Wert, wird hier jedoch als Typ verwendet. Meinten Sie \"typeof {0}\"?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "„{0}“ wird in eine reine Typdeklaration aufgelöst und muss mithilfe eines reinen Typimports importiert werden, wenn „preserveValueImports“ und isolatedModules“ beide aktiviert sind.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "„{0}“ wird in eine reine Typdeklaration aufgelöst und muss mithilfe eines reinen Typreexports erneut exportiert werden, wenn „isolatedModules“ aktiviert ist.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss mithilfe eines reinen Typimports importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "„{0}“ wird in eine reine Typdeklaration aufgelöst und muss mithilfe eines reinen Typreexports erneut exportiert werden, wenn „{1}“ aktiviert ist.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" sollte im CompilerOptions-Objekt der JSON-Konfigurationsdatei festgelegt werden.", "_0_tag_already_specified_1223": "Das Tag \"{0}\" wurde bereits angegeben.", "_0_was_also_declared_here_6203": "\"{0}\" wurde hier ebenfalls deklariert.", @@ -1780,19 +1981,22 @@ "and_here_6204": "und hier.", "arguments_cannot_be_referenced_in_property_initializers_2815": "Auf \"arguments\" kann in Eigenschaftsinitialisierern nicht verwiesen werden.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto“: Dateien mit imports, exports, import.meta, jsx (mit jsx: respond-jsx) oder esm-Format (mit module: node16+) als Module behandeln.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Der „await“-Ausdruck kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "await-Ausdrücke sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "await-Ausdrücke sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "await-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden.", "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" hat keine Auswirkungen auf den Typ dieses Ausdrucks.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "„await usuing“-Deklarationen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "„await using“-Deklarationen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "„await using“-Anweisungen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Die Option \"baseUrl\" ist auf \"{0}\" festgelegt. Dieser Wert wird verwendet, um den nicht relativen Modulnamen \"{1}\" aufzulösen.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Auf „\\c“ muss ein ASCII-Buchstabe folgen.", "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" kann nur am Anfang einer Datei verwendet werden.", "case_or_default_expected_1130": "\"case\" oder \"default\" wurde erwartet.", "catch_or_finally_expected_1472": "„catch“ oder „finally“ erwartet.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "const-Deklarationen können nur innerhalb eines Blocks deklariert werden.", - "const_declarations_must_be_initialized_1155": "const-Deklarationen müssen initialisiert werden.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Der const-Enumerationsmemberinitialisierer wurde in einen unendlichen Wert ausgewertet.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Der const-Enumerationsmemberinitialisierer wurde in den unzulässigen Wert \"NaN\" ausgewertet.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Initialisierer von const-Enumerationsmembern dürfen nur Literalwerte und andere berechnete Enumerationswerte enthalten.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Elementitialisierer für Konstantenenummeration müssen konstante Ausdrücke sein.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "const-Enumerationen können nur in Eigenschaften- bzw. Indexzugriffsausdrücken oder auf der rechten Seite einer Importdeklaration oder Exportzuweisung verwendet werden.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "\"constructor\" kann nicht als Parametereigenschaftsname verwendet werden.", "constructor_is_a_reserved_word_18012": "\"#constructor\" ist ein reserviertes Wort.", @@ -1811,13 +2015,14 @@ "file_6025": "Datei", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "\"for await\"-Schleifen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "\"for await\"-Schleifen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "„For await“-Schleifen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "get- und set-Zugriffsmethoden können keine this-Parameter deklarieren.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'[]', wenn 'files' angegeben ist, andernfalls '[\"**/*\"]5D;'", "implements_clause_already_seen_1175": "Die implements-Klausel ist bereits vorhanden.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "implements-Klauseln können nur in TypeScript-Dateien verwendet werden.", "import_can_only_be_used_in_TypeScript_files_8002": "\"import... =\" kann nur in TypeScript-Dateien verwendet werden.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "infer-Deklarationen sind nur in der extends-Klausel eines bedingten Typs zulässig.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "let-Deklarationen können nur innerhalb eines Blocks deklariert werden.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Auf „\\k“ muss ein Erfassungsgruppenname folgen, der in spitzen Klammern eingeschlossen ist.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" darf nicht als Name in let- oder const-Deklarationen verwendet werden.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "Modul === 'AMD' oder 'UMD' oder 'System' oder 'ES6', dann 'Klassisch', andernfalls 'Knoten'", "module_system_or_esModuleInterop_6904": "Modul === \"System\" oder esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package.json\" weist keinen Eintrag \"typesVersions\" auf, der mit der Version {0} übereinstimmt.", "package_json_had_a_falsy_0_field_6220": "\"package.json\" enthielt ein \"falsy\" Feld \"{0}\".", "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" weist das {0}-Feld \"{1}\" auf, das auf \"{2}\" verweist.", + "package_json_has_a_peerDependencies_field_6281": "„package.json“ weist das Feld „peerDependencies“ auf.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package.json\" weist einen typesversion-Eintrag \"{0}\" auf, der kein gültiger semver-Bereich ist.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package.json\" weist einen typesVersions-Eintrag \"{0}\" auf, der der Compilerversion \"{1}\" entspricht. Es wird nach einem Muster gesucht, das dem Modulnamen \"{2}\" entspricht.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package.json\" weist ein Feld \"typesVersions\" mit versionsspezifischen Pfadzuordnungen auf.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Der package.json-Bereich \"{0}\" weist einen ungültigen Typ für das Ziel des Spezifizierers \"{1}\" auf.", "package_json_scope_0_has_no_imports_defined_6273": "Für package.jsim, Bereich \"{0}\" wurden keine Importe definiert.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Die Option \"paths\" wurde angegeben. Es wird nach einem Muster gesucht, das mit dem Modulnamen \"{0}\" übereinstimmt.", + "q_is_only_available_inside_character_class_1511": "„\\q“ ist nur innerhalb der Zeichenklasse verfügbar.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Auf „\\q“ müssen Zeichenfolgenalternativen folgen, die in geschweifte Klammern eingeschlossen sind.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Der Modifizierer \"readonly\" darf nur für eine Eigenschaftendeklaration oder Indexsignatur verwendet werden.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Der Typmodifizierer \"readonly\" ist nur für Array- und Tupelliteraltypen zulässig.", "require_call_may_be_converted_to_an_import_80005": "Der Aufruf von \"require\" kann in einen Aufruf von \"import\" konvertiert werden.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "„resolution-mode“-Zusicherungen werden nur unterstützt, wenn „moduleResolution“ „node16“ oder „nodenext“ ist.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "'resolution-mode' Behauptungen sind instabil. Verwenden Sie nächtliches TypeScript, um diesen Fehler zu unterdrücken. Versuchen Sie, mit „npm install -D typescript@next“ zu aktualisieren.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "„resolution-mode“ kann nur für reine Typenimporte festgelegt werden.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "„resolution-mode“ ist für Typimportassertionen der einzige gültige Schlüssel.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "„resolution-mode“ ist für Typimportattribute der einzige gültige Schlüssel.", "resolution_mode_should_be_either_require_or_import_1453": "„resolution-mode“ muss entweder auf „require“ oder „import“ festgelegt sein.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Die Option \"rootDirs\" wurde festgelegt. Sie wird zum Auflösen des relativen Modulnamens \"{0}\" verwendet.", "super_can_only_be_referenced_in_a_derived_class_2335": "Auf \"super\" kann nur in einer abgeleiteten Klasse verwiesen werden.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "Auf \"this\" kann nicht in einem berechneten Eigenschaftennamen verwiesen werden.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Auf \"this\" kann nicht in einem Modul- oder Namespacetext verwiesen werden.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Auf \"this\" kann nicht in einem statischen Eigenschafteninitialisierer verwiesen werden.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "Auf \"this\" kann nicht in Konstruktorargumenten verwiesen werden.", "this_cannot_be_referenced_in_current_location_2332": "Auf \"this\" kann am aktuellen Speicherort nicht verwiesen werden.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist.", "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" für ES2022 und höher, einschließlich ESNext.", "true_if_composite_false_otherwise_6909": "'true', wenn 'composite', andernfalls 'false'", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true“, wenn „moduleResolution“ „node16“, „nodenext“ oder „bundler“ ist; andernfalls „false“.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: Der TypeScript-Compiler", "type_Colon_6902": "Typ:", "unique_symbol_types_are_not_allowed_here_1335": "\"unique symbol\"-Typen sind hier nicht zulässig.", diff --git a/node_modules/typescript/lib/es/diagnosticMessages.generated.json b/node_modules/typescript/lib/es/diagnosticMessages.generated.json index 242b20b064..f51d44ee51 100644 --- a/node_modules/typescript/lib/es/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/es/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "TODAS LAS OPCIONES DEL COMPILADOR", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Un modificador '{0}' no se puede usar con una declaración de importación.", "A_0_parameter_must_be_the_first_parameter_2680": "El parámetro \"{0}\" debe ser el primer parámetro.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Una etiqueta \"@template\" de JSDoc no puede seguir a una etiqueta \"@typedef\", \"@callback\" u \"@overload\"", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un comentario \"@typedef\" de JSDoc no puede contener varias etiquetas \"@type\".", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "No se puede usar un literal 'bigint' como nombre de propiedad.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Un literal bigint no puede usar la notación exponencial.", "A_bigint_literal_must_be_an_integer_1353": "Un literal bigint debe ser un entero.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parámetro de patrón de enlace no puede ser opcional en una signatura de implementación.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Una instrucción \"break\" solo se puede usar dentro de una iteración envolvente o en una instrucción switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Una instrucción \"break\" solo puede saltar a una etiqueta de una instrucción envolvente.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una clase de caracteres no debe contener un signo de puntuación doble reservado. ¿Querías escaparlo con barra diagonal inversa?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un rango de clases de caracteres no debe estar limitado por otra clase de caracteres.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una clase solo puede implementar un identificador o nombre completo con argumentos de tipo opcional.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una clase solo puede implementar un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una clase no puede extender un tipo primitivo como '{0}'. Las clases solo pueden extender valores que se puedan construir.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una clase no puede implementar un tipo primitivo como '{0}'. Solo puede implementar otros tipos de objeto con nombre.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Una declaración de clase sin el modificador \"default\" debe tener un nombre.", "A_class_member_cannot_have_the_0_keyword_1248": "Un miembro de clase no puede tener la palabra clave '{0}'.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "No se admite una expresión de coma en un nombre de propiedad calculada.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Un constructor no puede tener un parámetro 'this'.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Una instrucción \"continue\" solo se puede usar en una instrucción de iteración envolvente.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Una instrucción \"continue\" solo puede saltar a una etiqueta de una instrucción de iteración envolvente.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "No se puede importar un archivo de declaración sin 'import type'. ¿Quería importar un archivo de implementación '{0}' en su lugar?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Un modificador \"declare\" no se puede usar en un contexto de ambiente.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un decorador solo puede modificar la implementación de un método, no una sobrecarga.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una cláusula \"default\" no puede aparecer más de una vez en una instrucción \"switch\".", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Una exportación predeterminada debe estar en el nivel superior de una declaración de módulo o archivo.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "En este contexto no se permite una aserción de asignación definitiva \"!\".", "A_destructuring_declaration_must_have_an_initializer_1182": "Una declaración de desestructuración debe tener un inicializador.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Una llamada de importación dinámica en ES5/ES3 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Una llamada de importación dinámica en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una llamada de importación dinámica devuelve un valor \"Promise\". Asegúrese de que tiene una declaración para \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", "A_file_cannot_have_a_reference_to_itself_1006": "Un archivo no puede tener una referencia a sí mismo.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una función que devuelve 'never' no puede tener un punto de conexión alcanzable.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una función a la que se llama con la palabra clave 'new' no puede tener un tipo 'this' que sea 'void'.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Una función cuyo tipo declarado no es \"void\" o \"any\" debe devolver un valor.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una función cuyo tipo declarado no es \"undefined\", \"void\" o \"any\" debe devolver un valor.", "A_generator_cannot_have_a_void_type_annotation_2505": "Un generador no puede tener una anotación de tipo \"void\".", "A_get_accessor_cannot_have_parameters_1054": "Un descriptor de acceso \"get\" no puede tener parámetros.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un descriptor de acceso get debe ser al menos tan accesible como el establecedor", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una declaración de espacio de nombres no puede estar en un archivo distinto de una clase o función con la que se combina.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una declaración de espacio de nombres no se puede situar antes que una clase o función con la que se combina.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una declaración de espacio de nombres solo se permite en el nivel superior de un espacio de nombres o módulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una declaración \"namespace\" no debe declararse con la palabra clave \"module\". Use la palabra clave \"namespace\" en su lugar.", "A_non_dry_build_would_build_project_0_6357": "Una compilación no -dry compilaría el proyecto \"{0}\"", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Una compilación no -dry eliminaría los archivos siguientes: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Una compilación no -dry actualizaría la salida del proyecto \"{0}\".", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Una compilación no -dry actualizaría las marcas de tiempo para la salida del proyecto \"{0}\".", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inicializador de parámetros solo se permite en una implementación de función o de constructor.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Una propiedad de parámetro no se puede declarar mediante un parámetro rest.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una llamada \"super\" debe ser la primera instrucción del constructor para hacer referencia a \"super\" o \"this\" cuando una clase derivada contiene propiedades inicializadas, propiedades de parámetro o identificadores privados.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Una restricción de tipo basada en 'this' no es compatible con una restricción de tipo basada en un parámetro.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "El tipo \"this\" solo está disponible en un miembro no estático de una clase o interfaz.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "No se puede usar un modificador \"export\" de nivel superior en declaraciones de valor en un módulo CommonJS cuando \"verbatimModuleSyntax\" está habilitado.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Ya hay un archivo \"tsconfig.json\" definido en: '{0}'.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un miembro de tupla no puede ser tanto opcional como REST.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo de tupla no se puede indizar con un valor negativo.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Una expresión \"yield\" solo se permite en un cuerpo de generador.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "No se puede acceder al método abstracto '{0}' de la clase '{1}' mediante una expresión super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Los métodos abstractos solo pueden aparecer en una clase abstracta.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Las propiedades abstractas solo pueden aparecer en una clase abstracta.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "No se puede acceder a la propiedad abstracta \"{0}\" de la clase \"{1}\" en el constructor.", "Accessibility_modifier_already_seen_1028": "El modificador de accesibilidad ya se ha visto.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Los descriptores de acceso solo están disponibles cuando el destino es ECMAScript 5 y versiones posteriores.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Los descriptores de acceso deben ser los dos abstractos o los dos no abstractos.", "Add_0_to_unresolved_variable_90008": "Agregar \"{0}.\" a una variable no resuelta", "Add_a_return_statement_95111": "Agregar una instrucción \"return\"", + "Add_a_return_type_to_the_function_declaration_9031": "Agrega un tipo de valor devuelto a la declaración de función.", + "Add_a_return_type_to_the_function_expression_9030": "Agrega un tipo de valor devuelto a la expresión de función.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Agregue un tipo de valor devuelto a la declaración de get accessor.", + "Add_a_return_type_to_the_method_9034": "Agregar un tipo de valor devuelto al método", + "Add_a_type_annotation_to_the_parameter_0_9028": "Agregue una anotación de tipo al parámetro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Agregue una anotación de tipo a la propiedad {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Agregue una anotación de tipo a la variable {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Agregue un tipo al parámetro de la declaración del set accessor.", "Add_all_missing_async_modifiers_95041": "Agregar todos los modificadores \"async\" que faltan", "Add_all_missing_attributes_95168": "Agregar todos los atributos que faltan", "Add_all_missing_call_parentheses_95068": "Agregar todos los paréntesis de llamada que faltan", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Agregar todas las importaciones que faltan", "Add_all_missing_members_95022": "Agregar todos los miembros que faltan", "Add_all_missing_override_modifiers_95162": "Agregar todos los modificadores \"override\" que faltan", + "Add_all_missing_parameters_95190": "Agregar todos los parámetros que faltan", "Add_all_missing_properties_95166": "Agregar todas las propiedades que faltan", "Add_all_missing_return_statement_95114": "Agregar todas las instrucciones \"return\" que faltan", "Add_all_missing_super_calls_95039": "Agregar todas las llamadas a super que faltan", + "Add_all_missing_type_annotations_90067": "Agregar todas las anotaciones de tipo que faltan", + "Add_all_optional_parameters_95193": "Agregar todos los parámetros opcionales", + "Add_annotation_of_type_0_90062": "Agregar anotación de tipo '{0}'", "Add_async_modifier_to_containing_function_90029": "Agregar el modificador async a la función contenedora", "Add_await_95083": "Agregar \"await\"", "Add_await_to_initializer_for_0_95084": "Agregar \"await\" al inicializador de \"{0}\"", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Agregar inicializadores a todas las propiedades sin inicializar", "Add_missing_attributes_95167": "Agregar los atributos que faltan", "Add_missing_call_parentheses_95067": "Agregar los paréntesis de llamada que faltan", + "Add_missing_comma_for_object_member_completion_0_95187": "Agregue la coma que falta para el '{0}' de finalización del miembro del objeto.", "Add_missing_enum_member_0_95063": "Agregar el miembro de enumeración \"{0}\" que falta", "Add_missing_function_declaration_0_95156": "Agregar la declaración de función \"{0}\" que falta", "Add_missing_new_operator_to_all_calls_95072": "Agregar el operador \"new\" que falta a todas las llamadas", "Add_missing_new_operator_to_call_95071": "Agregar el operador \"new\" que falta a la llamada", + "Add_missing_parameter_to_0_95188": "Agregar parámetro que falta a '{0}'", + "Add_missing_parameters_to_0_95189": "Agregar parámetros que faltan a '{0}'", "Add_missing_properties_95165": "Agregar propiedades que faltan", "Add_missing_super_call_90001": "Agregar la llamada a \"super()\" que falta", "Add_missing_typeof_95052": "Agregar el elemento \"typeof\" que falta", "Add_names_to_all_parameters_without_names_95073": "Agregar nombres a todos los parámetros sin nombres", + "Add_optional_parameter_to_0_95191": "Agregar parámetro opcional a \"{0}\"", + "Add_optional_parameters_to_0_95192": "Agregar parámetros opcionales a \"{0}\"", "Add_or_remove_braces_in_an_arrow_function_95058": "Agregar o quitar llaves en una función de flecha", "Add_override_modifier_95160": "Agregar el modificador \"override\"", "Add_parameter_name_90034": "Agregar un nombre de parámetro", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Agregar un calificador a todas las variables no resueltas que coincidan con un nombre de miembro", + "Add_return_type_0_90063": "Agregar tipo de valor devuelto '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Agregue satisfacciones y una aserción de tipo a esta expresión (satisfacciones T como T) para que el tipo sea explícito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Agregar satisfacciones y una aserción de tipo insertado con '{0}'", "Add_to_all_uncalled_decorators_95044": "Agregar \"()\" a todos los elementos Decorator a los que no se llama", "Add_ts_ignore_to_all_error_messages_95042": "Agregar \"@ts-ignore\" a todos los mensajes de error", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Agregue \"indefinido\" a un tipo cuando se acceda mediante un índice.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permitir las importaciones predeterminadas de los módulos sin exportación predeterminada. Esto no afecta a la emisión de código, solo a la comprobación de tipos.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permita \"importar x desde y\" cuando un módulo no tiene una exportación predeterminada.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permita la importación de funciones de ayuda desde tslib una vez por proyecto, en lugar de incluirlas por archivo.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que las importaciones incluyan extensiones de archivo TypeScript. Requiere que se establezca \"--moduleResolution bundler\" y \"--noEmit\" o \"--emitDeclarationOnly\".", "Allow_javascript_files_to_be_compiled_6102": "Permitir que se compilen los archivos de JavaScript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permita que varias carpetas se consideren como una al resolver módulos.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "El nombre de archivo \"{0}\" ya incluido es diferente del nombre de archivo \"{1}\" solo en el uso de mayúsculas y minúsculas.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "No se proporcionó ningún argumento que coincida con este patrón de enlace.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmético debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Una función de flecha no puede tener un parámetro \"this\".", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Una función o un método de asincronía en ES5/ES3 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Una función o un método de asincronía en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Una función o un método asincrónico debe devolver un \"Promise\". Asegúrese de que tiene una declaración \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", "An_async_iterator_must_have_a_next_method_2519": "Un iterador de asincronía debe tener un método \"next()\".", "An_element_access_expression_should_take_an_argument_1011": "Una expresión de acceso de elemento debe admitir un argumento.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una declaración de exportación solo se puede usar en el nivel superior de un módulo.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una declaración de exportación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", "An_export_declaration_cannot_have_modifiers_1193": "Una declaración de exportación no puede tener modificadores.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Una declaración \"export =\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Una declaración 'export =' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Una declaración \"export default\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Una declaración 'export default' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "No se puede probar la veracidad de una expresión de tipo \"void\".", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valor de escape Unicode extendido debe estar entre 0x0 y 0x10FFFF, incluidos.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificador o una palabra clave no puede seguir inmediatamente a un literal numérico.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Una implementación no se puede declarar en contextos de ambiente.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias de importación no puede hacer referencia a una declaración que se exportó mediante \"export type\".", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias de importación no puede hacer referencia a una declaración que se importó mediante \"import type\".", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias de importación no se puede resolver en una declaración de tipo o solo tipo cuando \"verbatimModuleSyntax\" está habilitado.", "An_import_alias_cannot_use_import_type_1392": "Un alias de importación no puede usar \"import type\"", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una declaración de importación solo se puede usar en el nivel superior de un módulo.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una declaración de importación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", "An_import_declaration_cannot_have_modifiers_1191": "Una declaración de importación no puede tener modificadores.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Una ruta de acceso de importación no puede terminar con una extensión '{0}'. Puede importar '{1}' en su lugar.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Una ruta de acceso de importación solo puede terminar con una extensión '{0}' cuando \"allowImportingTsExtensions\" está habilitado.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Una signatura de índice no puede tener un parámetro rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Una signatura de índice no puede finalizar con una coma.", "An_index_signature_must_have_a_type_annotation_1021": "Una signatura de índice debe tener una anotación de tipo.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Una expresión de creación de una instancia no puede ir seguida de un acceso a una propiedad.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Una interfaz solo puede extender un identificador o nombre completo con argumentos de tipo opcional.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Una interfaz no puede extender un tipo primitivo como \"{0}\"; una interfaz solo puede extender tipos y clases con nombre", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Una interfaz no puede extender un tipo primitivo como '{0}'. Solo puede extender otros tipos de objeto con nombre.", "An_interface_property_cannot_have_an_initializer_1246": "Una propiedad de interfaz no puede tener un inicializador.", "An_iterator_must_have_a_next_method_2489": "Un iterador debe tener un método \"next()\".", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Se necesita una pragma @jsxFrag cuando se usa una pragma @jsx con fragmentos de JSX.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un literal de objeto no puede tener varias propiedades con el mismo nombre.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un literal de objeto no puede tener una propiedad y un descriptor de acceso con el mismo nombre.", "An_object_member_cannot_be_declared_optional_1162": "Un miembro de objeto no se puede declarar como opcional.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "El método '[Symbol.hasInstance]' de un objeto debe devolver un valor booleano para que se use en el lado derecho de una expresión \"instanceof\".", "An_optional_chain_cannot_contain_private_identifiers_18030": "Una cadena opcional no puede contener identificadores privados.", "An_optional_element_cannot_follow_a_rest_element_1266": "Un elemento opcional no puede seguir a un elemento rest.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Este contenedor reemplaza un valor externo de \"this\".", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Una signatura de sobrecarga no se puede declarar como generador.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "No se admite una expresión unaria con el operador '{0}' en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.", "Annotate_everything_with_types_from_JSDoc_95043": "Anotar todo con tipos de JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propiedades de función expando en un espacio de nombres", "Annotate_with_type_from_JSDoc_95009": "Anotar con tipo de JSDoc", "Another_export_default_is_here_2753": "Aquí hay otro valor export default.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Cualquier propiedad Unicode que posiblemente coincida con más de un carácter solo está disponible cuando se establece la marca Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Todo lo que posiblemente coincida con más de un carácter no es válido dentro de una clase de caracteres negada.", "Are_you_missing_a_semicolon_2734": "¿Falta un punto y coma?", "Argument_expression_expected_1135": "Se esperaba una expresión de argumento.", "Argument_for_0_option_must_be_Colon_1_6046": "El argumento para la opción \"{0}\" debe ser {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "El argumento de tipo '{0}' no se puede asignar al parámetro de tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "No se proporcionaron argumentos para el parámetro rest \"{0}\".", "Array_element_destructuring_pattern_expected_1181": "Se esperaba un patrón de desestructuración de elementos de matriz.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Las matrices con elementos spread no se pueden inferir con --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Las aserciones requieren que todos los nombres del destino de llamada se declaren con una anotación de tipo explícito.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Las aserciones requieren que el destino de llamada sea un identificador o un nombre calificado.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "No se admite la asignación de propiedades a funciones sin declararlas con --isolatedDeclarations. Agregue una declaración explícita para las propiedades asignadas a esta función.", "Asterisk_Slash_expected_1010": "Se esperaba \"*/\".", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Al menos un descriptor de acceso debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Los aumentos del ámbito global solo pueden anidarse directamente en módulos externos o en declaraciones de módulos de ambiente.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Los aumentos del ámbito global deben tener el modificador 'declare', a menos que aparezcan en un contexto de ambiente.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La detección automática de escritura está habilitada en el proyecto '{0}'. Se va a ejecutar un paso de resolución extra para el módulo '{1}' usando la ubicación de caché '{2}'.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "La expresión Await no se puede usar dentro de un bloque estático de clase.", "BUILD_OPTIONS_6919": "OPCIONES DE COMPILACIÓN", "Backwards_Compatibility_6253": "Compatibilidad con versiones anteriores", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Las expresiones de clase base no pueden hacer referencia a parámetros de tipo de clase.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Los literales BigInt no están disponibles cuando el destino es anterior a ES2020.", "Binary_digit_expected_1177": "Se esperaba un dígito binario.", "Binding_element_0_implicitly_has_an_1_type_7031": "El elemento de enlace '{0}' tiene un tipo '{1}' implícito.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Los elementos de enlace no se pueden exportar directamente con --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable con ámbito de bloque '{0}' usada antes de su declaración.", "Build_a_composite_project_in_the_working_directory_6925": "Compile un proyecto compuesto en el directorio de trabajo.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos los proyectos, incluidos los que aparecen actualizados.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Generar uno o varios proyectos y sus dependencias, si no están actualizados", "Build_option_0_requires_a_value_of_type_1_5073": "La opción de compilación \"{0}\" requiere un valor de tipo {1}.", "Building_project_0_6358": "Compilando el proyecto \"{0}\"...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Se crea una instancia de los iteradores integrados con un tipo 'TReturn' de 'undefined' en lugar de 'any'.", "COMMAND_LINE_FLAGS_6921": "MARCAS DE LÍNEA DE COMANDOS", "COMMON_COMMANDS_6916": "COMANDOS COMUNES", "COMMON_COMPILER_OPTIONS_6920": "OPCIONES COMUNES DEL COMPILADOR", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Los tipos de valor devuelto de la signatura de llamada \"{0}\" y \"{1}\" son incompatibles.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signatura de llamada, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Las signaturas de llamada sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.", - "Call_target_does_not_contain_any_signatures_2346": "El destino de llamada no contiene signaturas.", "Can_only_convert_logical_AND_access_chains_95142": "Solo pueden convertirse las cadenas lógicas Y de acceso", "Can_only_convert_named_export_95164": "Solo se pueden convertir exportaciones con nombre.", "Can_only_convert_property_with_modifier_95137": "Solo se puede convertir la propiedad con el modificador", - "Can_only_convert_string_concatenation_95154": "Solo puede convertirse la concatenación de cadenas", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Solo se pueden convertir concatenaciones de cadenas y literales de cadena", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "No se puede acceder a \"{0}.{1}\" porque \"{0}\" es un tipo, no un espacio de nombres. ¿Su intención era recuperar el tipo de la propiedad \"{1}\" en \"{0}\" con \"{0}[\"{1}\"]\"?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "No se puede acceder a las enumeraciones const de ambiente cuando se proporciona la marca \"--isolatedModules\".", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "No se puede obtener acceso a '{0}' desde otro archivo sin calificación cuando '{1}' está habilitado. Use \"{2}\" en su lugar.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "No se puede tener acceso a las enumeraciones const de ambiente cuando '{0}' está habilitado.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "No se puede asignar un tipo de constructor '{0}' a un tipo de constructor '{1}'.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "No se puede asignar un tipo de constructor abstracto a uno no abstracto.", "Cannot_assign_to_0_because_it_is_a_class_2629": "No se puede asignar a \"{0}\" porque es una clase.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "No se encuentra la definición lib para \"{0}\".", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "No se encuentra la definición lib para \"{0}\". ¿Quiso decir \"{1}\"?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "No se encuentra el módulo \"{0}\". Considere la posibilidad de usar \"--resolveJsonModule\" para importar el módulo con la extensión \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "No se encuentra el módulo \"{0}\". ¿Pretendía establecer la opción \"moduleResolution\" en \"node\" o agregar alias a la opción \"paths\"?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "No se encuentra el módulo “{0}”. ¿Pretendía establecer la opción “moduleResolution” en “nodenext” o agregar alias a la opción “paths”?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "No se encuentra el módulo \"{0}\" ni sus declaraciones de tipos correspondientes.", "Cannot_find_name_0_2304": "No se encuentra el nombre '{0}'.", "Cannot_find_name_0_Did_you_mean_1_2552": "No se encuentra el nombre \"{0}\". ¿Quería decir \"{1}\"?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "No se puede encontrar el nombre \"{0}\". ¿Ha querido escribir esto en una función asincrónica?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{1}\" o posterior.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" para incluir \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe \"npm i --save-dev @types/bun\" y agregue \"bun\" al campo de tipos de tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un ejecutor de pruebas? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\".", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un test runner? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\" y, a continuación, agregue \"jest\" o \"mocha\" al campo de tipos del archivo tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\".", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la desestructuración de matriz siempre enviará \"{0}\".", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la propagación de matriz siempre enviará \"{0}\".", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero for-of siempre enviará \"{0}\".", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "No se puede anteponer el proyecto \"{0}\" porque no se ha establecido \"outFile\".", + "Cannot_move_statements_to_the_selected_file_95183": "No se pueden mover instrucciones al archivo seleccionado", + "Cannot_move_to_file_selected_file_is_invalid_95179": "No se puede mover al archivo, el archivo seleccionado no es válido", "Cannot_read_file_0_5083": "No se puede leer el archivo \"{0}\".", "Cannot_read_file_0_Colon_1_5012": "No se puede leer el archivo \"{0}\": {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "No se puede volver a declarar la variable con ámbito de bloque '{0}'.", "Cannot_redeclare_exported_variable_0_2323": "No se puede volver a declarar la variable '{0}' exportada.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "No se puede volver a declarar el identificador \"{0}\" en la cláusula catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "No se puede iniciar una llamada de función en una anotación de tipo.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "No se puede actualizar la salida del proyecto \"{0}\" porque se produjo un error al leer el archivo \"{1}\".", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX no se puede usar si no se proporciona la marca \"--jsx\".", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "No se puede utilizar “exportar importar” en un espacio de nombres de tipo o solo de tipo cuando se proporciona la marca \"--isolatedModules\".", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "No se puede usar 'export import' en un tipo o espacio de nombres de solo tipo cuando '{0}' está habilitado.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "No se pueden usar importaciones, exportaciones o aumentos de módulos si el valor de \"--module\" es \"none\".", "Cannot_use_namespace_0_as_a_type_2709": "No se puede utilizar el espacio de nombres '{0}' como un tipo.", "Cannot_use_namespace_0_as_a_value_2708": "No se puede utilizar el espacio de nombres '{0}' como un valor.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Cambiar \"extends\" a \"implements\"", "Change_spelling_to_0_90022": "Cambiar la ortografía a \"{0}\"", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Compruebe las propiedades de clase declaradas pero no establecidas en el constructor.", + "Check_side_effect_imports_6806": "Compruebe las importaciones de efectos secundarios.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Compruebe que los argumentos de los métodos 'bind', 'call' y 'apply' coinciden con la función original.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Comprobando si '{0}' es el prefijo coincidente más largo para '{1}' - '{2}'.", "Circular_definition_of_import_alias_0_2303": "Definición circular del alias de importación '{0}'.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "La declaración de clase no puede implementar la lista de sobrecarga para '{0}'.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Las declaraciones de clase no pueden tener más de una etiqueta \"@augments\" o \"@extends\".", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Los elementos Decorator de una clase no se pueden usar con un identificador privado estático. Pruebe a quitar el elemento Decorator experimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "El campo de clase '{0}' definido por la clase primaria no es accesible en la clase secundaria a través de super.", "Class_name_cannot_be_0_2414": "El nombre de la clase no puede ser \"{0}\".", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "El nombre de clase no puede ser \"Object\" cuando el destino es ES5 con un módulo {0}.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "El lado estático de la clase '{0}' extiende el lado estático de la clase base '{1}' de forma incorrecta.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Opciones de la línea de comandos", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila el proyecto teniendo en cuenta la ruta de acceso a su archivo de configuración o a una carpeta con un archivo \"tsconfig.json\".", "Compiler_Diagnostics_6251": "Diagnóstico del compilador", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "No se puede proporcionar una cadena vacía a la opción del compilador '{0}'.", "Compiler_option_0_expects_an_argument_6044": "La opción '{0}' del compilador espera un argumento.", "Compiler_option_0_may_not_be_used_with_build_5094": "La opción \"--{0}\" del compilador no se puede usar con \"--build\".", "Compiler_option_0_may_only_be_used_with_build_5093": "La opción \"--{0}\" del compilador solo se puede usar con \"--build\".", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Los proyectos compuestos no pueden deshabilitar la emisión de declaración.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Los proyectos compuestos no pueden deshabilitar la compilación incremental.", "Computed_from_the_list_of_input_files_6911": "Calculado a partir de la lista de archivos de entrada", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Las propiedades calculadas deben ser literales de número o cadena, variables o expresiones de puntos con --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "No se permiten nombres de propiedad calculada en las enumeraciones.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Los nombres de propiedad calculada en literales de clase u objeto no se pueden inferir con --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "No se permiten valores calculados en una enumeración que tiene miembros con valores de cadena.", "Concatenate_and_emit_output_to_single_file_6001": "Concatenar y emitir la salida en un único archivo.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Se encontraron definiciones de '{0}' en conflicto en '{1}' y '{2}'. Puede instalar una versión específica de esta biblioteca para resolver el conflicto.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condiciones que se establecerán además de los valores predeterminados específicos de la resolución al resolver las importaciones.", "Conflicts_are_in_this_file_6201": "Hay conflictos en este archivo.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere agregar un modificador 'declare' a esta clase.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Los tipos de valor devuelto de la signatura de construcción \"{0}\" y \"{1}\" son incompatibles.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Convertir \"{0}\" en el tipo de objeto asignado", "Convert_all_const_to_let_95102": "Convertir todo \"const\" en \"let\"", "Convert_all_constructor_functions_to_classes_95045": "Convertir todas las funciones de constructor en clases", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Convertir todas las importaciones no usadas como valor para las importaciones solo de tipo", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir todos los caracteres no válidos al código de entidad HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir todos los tipos reexportados en exportaciones solo de tipo", "Convert_all_require_to_import_95048": "Convertir todas las repeticiones de \"require\" en \"import\"", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Convertir todo en literales numéricos bigint", "Convert_all_to_default_imports_95035": "Convertir todo en importaciones predeterminadas", "Convert_all_type_literals_to_mapped_type_95021": "Convertir todos los literales de tipo en un tipo asignado", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertir typedef en todos los tipos TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Convertir una función de flecha o una expresión de función", "Convert_const_to_let_95093": "Convertir \"const\" en \"let\"", "Convert_default_export_to_named_export_95061": "Convertir una exportación predeterminada en exportación con nombre", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Convertir en expresión de cadena opcional", "Convert_to_template_string_95096": "Convertir en cadena de plantilla", "Convert_to_type_only_export_1364": "Convertir en exportación solo de tipo", - "Convert_to_type_only_import_1373": "Convertir en importación solo de tipo", + "Convert_typedef_to_TypeScript_type_95176": "Convertir typedef en tipo TypeScript.", "Corrupted_locale_file_0_6051": "Archivo de configuración regional {0} dañado.", "Could_not_convert_to_anonymous_function_95153": "No se puede convertir a una función anónima", "Could_not_convert_to_arrow_function_95151": "No se puede convertir a una función de flecha", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "No se ha encontrado el nombre \"{0}\". ¿Quiso decir \"{1}\"?", "Could_not_find_namespace_import_or_named_imports_95132": "No se pudo encontrar la importación del espacio de nombres ni las importaciones con nombre", "Could_not_find_property_for_which_to_generate_accessor_95135": "No se pudo encontrar la propiedad para la que se debe generar el descriptor de acceso", + "Could_not_find_variable_to_inline_95185": "No se pudo encontrar la variable para insertar.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "No se pudo resolver la ruta de acceso \"{0}\" con las extensiones: {1}.", "Could_not_write_file_0_Colon_1_5033": "No se puede escribir en el archivo \"{0}\": \"{1}\".", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Cree archivos de mapa de origen para los archivos JavaScript emitidos.", "Create_sourcemaps_for_d_ts_files_6614": "Cree mapas de origen para archivos d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un archivo tsconfig.json con la configuración recomendada en el directorio de trabajo.", "DIRECTORY_6038": "DIRECTORIO", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "No se permiten decimales con ceros iniciales.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La declaración aumenta una declaración en otro archivo. Esta operación no se puede serializar.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La emisión de declaración para este archivo requiere conservar esta importación para aumentos. Esto no se admite con --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\" del módulo \"{1}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "La emisión de declaración para este parámetro requiere agregar implícitamente un elemento no definido a su tipo. Esto no se admite con --isolatedDeclarations.", "Declaration_expected_1146": "Se esperaba una declaración.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Conflictos entre nombres de declaración con el identificador global '{0}' integrado.", "Declaration_or_statement_expected_1128": "Se esperaba una declaración o una instrucción.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Declarar la propiedad estática \"{0}\"", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "El tipo de valor devuelto de la función Decorator \"{0}\" no se puede asignar al tipo \"{1}\".", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "El tipo de valor devuelto de la función Decorator es \"{0}\" pero se espera que sea \"void\" o \"any\".", + "Decorator_used_before_export_here_1486": "El elemento Decorator se usa antes de \"exportar\" aquí.", "Decorators_are_not_valid_here_1206": "Los elementos Decorator no son válidos aquí.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "No se pueden aplicar elementos Decorator a varios descriptores de acceso get o set con el mismo nombre.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Los elementos Decorator no se pueden aplicar a los parámetros \"this\".", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Los elementos Decorator no pueden aparecer después de \"export\" o \"export default\" si también aparecen antes de \"export\".", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Los decoradores deben preceder al nombre y a todas las palabras clave de las declaraciones de propiedad.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Variables de cláusula catch predeterminadas como \"unknown\" en lugar de \"any\".", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "La exportación predeterminada del módulo tiene o usa el nombre privado '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Las exportaciones predeterminadas no se pueden inferir con --isolatedDeclarations.", "Default_library_1424": "Biblioteca predeterminada", "Default_library_for_target_0_1425": "Biblioteca predeterminada para el destino \"{0}\"", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Las definiciones de los identificadores siguientes entran en conflicto con las de otro archivo: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deshabilite el borrado de declaraciones \"enumeración const\" en el código generado.", "Disable_error_reporting_for_unreachable_code_6603": "Deshabilite los informes de errores para los códigos inaccesibles.", "Disable_error_reporting_for_unused_labels_6604": "Deshabilite los informes de errores para etiquetas sin usar.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deshabilitar la comprobación completa de tipos (solo se notificarán los errores críticos de análisis y emisión).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deshabilite la generación de funciones auxiliares personalizadas como \"__extends\" en la salida compilada.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deshabilite la inclusión de cualquier archivo de biblioteca, incluido el archivo predeterminado lib.d.ts.", "Disable_loading_referenced_projects_6235": "Deshabilite la carga de proyectos a los que se hace referencia.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "No notificar los errores del código inaccesible.", "Do_not_report_errors_on_unused_labels_6074": "No notificar los errores de las etiquetas no usadas.", "Do_not_resolve_the_real_path_of_symlinks_6013": "No resolver la ruta de acceso real de los vínculos simbólicos.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "No transforme ni evite ninguna importación o exportación no marcada como solo de tipo, asegurándose de que se escriben en el formato del archivo de salida en función de la configuración \"module\".", "Do_not_truncate_error_messages_6165": "No truncar los mensajes de error.", "Duplicate_function_implementation_2393": "Implementación de función duplicada.", "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Signatura de índice duplicada para el tipo \"{0}\".", "Duplicate_label_0_1114": "Etiqueta \"{0}\" duplicada.", "Duplicate_property_0_2718": "Propiedad \"{0}\" duplicada.", + "Duplicate_regular_expression_flag_1500": "Marca de expresión regular duplicada.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "El especificador de la importación dinámica debe ser de tipo \"string\", pero aquí tiene el tipo \"{0}\".", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Las importaciones dinámicas solo se admiten cuando la marca \"--módulo\" está establecida en \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\" o \"nodenext\".", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Las importaciones dinámicas solo pueden aceptar un especificador de módulo y una aserción opcional como argumentos", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Las importaciones dinámicas solo admiten un segundo argumento cuando la opción \"--module\" está establecida en \"esnext\", \"node16\" o \"nodenext\".", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Las importaciones dinámicas solo pueden aceptar un especificador de módulo y un set de atributos opcional como argumentos", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Las importaciones dinámicas solo admiten un segundo argumento cuando la opción \"--module\" está establecida en \"esnext\", \"node16\", \"nodenext\" o \"preserve\".", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "No se permite la sintaxis ESM en un módulo CommonJS cuando \"module\" está establecido en \"preserve\".", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "No se permite la sintaxis ESM en un módulo CommonJS cuando \"verbatimModuleSyntax\" está habilitado.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaración de \"{0}.{1}\" difiere en su valor, donde se esperaba '{2}' pero se proporcionó '{3}'.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada miembro del tipo de unión \"{0}\" tiene signaturas de construcción, pero ninguna de ellas es compatible entre sí.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada miembro del tipo de unión \"{0}\" tiene signaturas, pero ninguna de ellas es compatible entre sí.", "Editor_Support_6249": "Compatibilidad con el editor", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilite el informe de errores en los archivos JavaScript de comprobación de tipos.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilite el informe de errores cuando una variable local no se lea.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilite el informe de errores cuando a 'this' se le asigna el tipo 'any'.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Habilite un soporte experimental para los elementos Decorator borradores de la fase 2 de TC39.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite la compatibilidad experimental con decoradores experimentales heredados.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Habilite la importación de archivos con cualquier extensión, siempre que haya un archivo de declaración presente.", "Enable_importing_json_files_6689": "Habilite la importación de archivos .json.", "Enable_project_compilation_6302": "Habilitar la compilación de proyecto", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite los métodos estrictos \"bind\", \"call\" y \"apply\" en las funciones.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Verifique el uso correcto de mayúsculas y minúsculas en las importaciones.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Asegúrese de que cada archivo pueda transpilarse con seguridad sin depender de otras importaciones.", "Ensure_use_strict_is_always_emitted_6605": "Asegúrese de que siempre se emite \"use strict\".", + "Entering_conditional_exports_6413": "Entrando en exportaciones condicionales.", "Entry_point_for_implicit_type_library_0_1420": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\"", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\" con el valor packageId \"{1}\"", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Las declaraciones de enumeración solo se pueden combinar con otras declaraciones de enumeración o de espacio de nombres.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Todas las declaraciones de enumeración deben ser de tipo const o no const.", "Enum_member_expected_1132": "Se esperaba un miembro de enumeración.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "El miembro de enumeración que sigue a un miembro numérico que no sea literal debe tener un inicializador cuando \"isolatedModules\" está habilitado.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Los inicializadores de miembros de enumeración deben poder calcularse sin referencias a símbolos externos con --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "El miembro de enumeración debe tener un inicializador.", "Enum_name_cannot_be_0_2431": "El nombre de la enumeración no puede ser \"{0}\".", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "El tipo de enumeración \"{0}\" tiene miembros con inicializadores que no son literales.", "Errors_Files_6041": "Archivos de errores", + "Escape_sequence_0_is_not_allowed_1488": "No se permite la secuencia de escape \"{0}\".", "Examples_Colon_0_6026": "Ejemplos: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complejidad excesiva al comparar los tipos '{0}' y '{1}'.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidad excesiva de la pila al comparar los tipos '{0}' y '{1}'.", + "Exiting_conditional_exports_6416": "Saliendo de las exportaciones condicionales.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Se esperaban argumentos de tipo {0}-{1}; proporciónelos con una etiqueta \"@extends\".", "Expected_0_arguments_but_got_1_2554": "Se esperaban {0} argumentos, pero se obtuvieron {1}.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Se esperaban {0} argumentos, pero se obtuvo un total de {1}. ¿Olvidó incluir \"void\" en el argumento de tipo para \"Promise\"?", "Expected_0_type_arguments_but_got_1_2558": "Se esperaban {0} argumentos de tipo, pero se obtuvieron {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Se esperaban argumentos de tipo {0}; proporciónelos con una etiqueta \"@extends\".", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Se esperaba 1 argumento, pero se obtuvo 0. \"new Promise()\" necesita una pista de JSDoc para producir un \"resolve\" que pueda llamarse sin argumentos.", + "Expected_a_Unicode_property_name_1523": "Se esperaba un nombre de propiedad Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Se esperaba un valor o un nombre de propiedad Unicode.", + "Expected_a_Unicode_property_value_1525": "Se esperaba un valor de propiedad Unicode.", + "Expected_a_capturing_group_name_1514": "Se esperaba un nombre de grupo de captura.", + "Expected_a_class_set_operand_1520": "Se esperaba un operando de conjunto de clases.", "Expected_at_least_0_arguments_but_got_1_2555": "Se esperaban al menos {0} argumentos, pero se obtuvieron {1}.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Se esperaba la etiqueta de cierre JSX correspondiente de '{0}'.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Se esperaba la etiqueta de cierre correspondiente para el fragmento de JSX.", "Expected_for_property_initializer_1442": "Se esperaba '=' para el inicializador de propiedades.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Se esperaba que el tipo del campo \"{0}\" en \"package.json\" fuese \"{1}\", pero se obtuvo \"{2}\".", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "La compatibilidad experimental con los decoradores es una característica que está sujeta a cambios en una próxima versión. Establezca la opción \"experimentalDecorators\" en \"tsconfig\" o \"jsconfig\" para quitar esta advertencia.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolución de módulo especificado de forma explícita: '{0}'.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "No se puede realizar la exponenciación en los valores \"bigint\", a menos que la opción \"target\" esté establecida en \"es2016\" o posterior.", "Export_0_from_module_1_90059": "Exportar '{0}' desde el módulo '{1}'", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportada '{0}' tiene o usa el nombre privado '{1}'.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "En aumentos de módulos, no se admiten exportaciones ni asignaciones de exportación.", "Expression_expected_1109": "Se esperaba una expresión.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "La expresión debe ir entre paréntesis para usarse como un decorador.", "Expression_or_comma_expected_1137": "Se esperaba una expresión o una coma.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "La expresión genera un tipo de tupla demasiado grande para representarlo.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "La expresión genera un tipo de unión demasiado complejo para representarlo.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "La expresión se resuelve en el valor \"_super\" que el compilador usa para capturar una referencia a la clase base.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "La expresión se resuelve en una declaración de variable \"_newTarget\" que el compilador usa para capturar la referencia de la propiedad Meta \"new.target\".", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "La expresión se resuelve en la declaración de variable \"_this\" que el compilador usa para capturar una referencia \"this\".", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "No se puede inferir el tipo de expresión con --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La cláusula Extends no puede contener una expresión con --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Extiende la cláusula para el tipo deducido '{0}', tiene o usa el nombre privado '{1}'.", + "Extract_base_class_to_variable_90064": "Extraer clase base en variable", + "Extract_binding_expressions_to_variable_90066": "Extraer expresiones de enlace en variable", "Extract_constant_95006": "Extraer la constante", + "Extract_default_export_to_variable_90065": "Extraer exportación predeterminada a la variable", "Extract_function_95005": "Extraer la función", "Extract_to_0_in_1_95004": "Extraer a {0} en {1}", "Extract_to_0_in_1_scope_95008": "Extraer a {0} en el ámbito {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Extraer a la interfaz", "Extract_to_type_alias_95078": "Extraer al alias de tipo", "Extract_to_typedef_95079": "Extraer a typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraer en variable y reemplazar por “{0} as typeof {0}”", "Extract_type_95077": "Extraer el tipo", "FILE_6035": "ARCHIVO", "FILE_OR_DIRECTORY_6040": "ARCHIVO O DIRECTORIO", - "Failed_to_parse_file_0_Colon_1_5014": "Error al analizar el archivo '{0}': {1}.", + "Failed_to_find_peerDependency_0_6283": "No se ha podido encontrar peerDependency “{0}”.", + "Failed_to_resolve_under_condition_0_6415": "No se pudo resolver en la condición “{0}”.", "Fallthrough_case_in_switch_7029": "Caso de Fallthrough en instrucción switch.", "File_0_does_not_exist_6096": "El archivo '{0}' no existe.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "El archivo \"{0}\" no existe de acuerdo con las búsquedas en caché anteriores.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "El archivo '{0}' existe. Utilícelo como resultado de resolución de nombres.", "File_0_exists_according_to_earlier_cached_lookups_6239": "El archivo \"{0}\" existe de acuerdo con las búsquedas en caché anteriores.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "El archivo “{0}” existe. Utilícelo como resultado de resolución de nombres.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "El archivo \"{0}\" tiene una extensión no compatible. Las únicas extensiones compatibles son {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "El archivo \"{0}\" tiene una extensión no admitida, así que se omitirá.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" es un archivo JavaScript. ¿Pretendía habilitar la opción \"allowJs\"?", "File_0_is_not_a_module_2306": "El archivo '{0}' no es un módulo.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "El archivo \"{0}\" no está en la lista de archivos del proyecto \"{1}\". Los proyectos deben enumerar todos los archivos o usar un patrón \"include\".", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "El archivo '{0}' no está en \"rootDir\" '{1}'. Se espera que \"rootDir\" contenga todos los archivos de origen.", "File_0_not_found_6053": "Archivo '{0}' no encontrado.", "File_Management_6245": "Administración de archivos", + "File_appears_to_be_binary_1490": "Parece que el archivo es binario.", "File_change_detected_Starting_incremental_compilation_6032": "Se detectó un cambio de archivo. Iniciando la compilación incremental...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "El archivo es un módulo CommonJS porque “{0}” no tiene el campo “type”", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "El archivo es el módulo CommonJS porque “{0}” tiene el campo “type” cuyo valor no es “module”.", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "El archivo es la salida del origen de referencia del proyecto \"{0}\".", "File_is_source_from_referenced_project_specified_here_1416": "El archivo es el origen del proyecto al que se hace referencia especificado aquí.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "El nombre de archivo \"{0}\" es diferente del nombre de archivo \"{1}\" ya incluido solo en el uso de mayúsculas y minúsculas.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "El nombre de archivo “{0}” tiene una extensión de “{1}”. Buscando “{2}” en su lugar.", "File_name_0_has_a_1_extension_stripping_it_6132": "El nombre de archivo \"{0}\" tiene una extensión \"{1}\" y se va a quitar.", "File_redirects_to_file_0_1429": "El archivo redirecciona al archivo \"{0}\".", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La especificación del archivo no puede contener un directorio primario ('..') que aparezca después de un comodín de directorios recursivo ('**'): '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Corregir todas las expresiones en las que posiblemente falte \"await\"", "Fix_all_implicit_this_errors_95107": "Corregir todos los errores de \"this\" implícitos", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corregir todos los tipos de valor devuelto incorrectos de las funciones asincrónicas", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Los bucles 'For await' no se pueden usar dentro de un bloque estático de clase.", + "Fix_all_with_type_only_imports_95182": "Corregir todo con importaciones de solo tipo", "Found_0_errors_6217": "Se encontró {0} errores.", "Found_0_errors_Watching_for_file_changes_6194": "Se encontraron {0} errores. Supervisando los cambios del archivo.", "Found_0_errors_in_1_files_6261": "Se han encontrado {0} errores en {1} archivos.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Se han encontrado {0} errores en el mismo archivo, empezando por: {1}", "Found_1_error_6216": "Se encontró 1 error.", "Found_1_error_Watching_for_file_changes_6193": "Se encontró un error. Supervisando los cambios del archivo.", - "Found_1_error_in_1_6259": "Se ha encontrado 1 error en {1}", + "Found_1_error_in_0_6259": "Se ha encontrado 1 error en {0}", "Found_package_json_at_0_6099": "Se encontró 'package.json' en '{0}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es 'ES3' o 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es 'ES3' o 'ES5'. Las definiciones de clase están en modo strict de forma automática.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es 'ES3' o 'ES5'. Los módulos están en modo strict de forma automática.", + "Found_peerDependency_0_with_1_version_6282": "Se encontró el “{0}” peerDependency con versión “{1}”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Las definiciones de clase están en modo strict de forma automática.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Los módulos están en modo strict de forma automática.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "La expresión de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto '{0}'.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Falta la implementación de función o no sigue inmediatamente a la declaración.", "Function_implementation_name_must_be_0_2389": "El nombre de la implementación de función debe ser '{0}'.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La función tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a ella directa o indirectamente en una de sus expresiones return.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Falta la instrucción \"return\" final en la función y el tipo de valor devuelto no incluye 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La función debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", "Function_not_implemented_95159": "La función no está implementada.", "Function_overload_must_be_static_2387": "La sobrecarga de función debe ser estática.", "Function_overload_must_not_be_static_2388": "La sobrecarga de función no debe ser estática.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Se esperaba un identificador.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. \"__esModule\" está reservado como marcador exportado al transformar módulos ECMAScript.", "Identifier_or_string_literal_expected_1478": "Se esperaba un literal de cadena o identificador", + "Identifier_string_literal_or_number_literal_expected_1496": "Se esperaba un identificador, un literal de cadena o un literal de número.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si el paquete \"{0}\" expone realmente este módulo, considere la posibilidad de enviar una solicitud de incorporación de cambios para corregir \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\".", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si el paquete '{0}' realmente expone este módulo, intente agregar un nuevo archivo de declaración (.d.ts) que contenga 'declarar módulo '{1}';`", "Ignore_this_error_message_90019": "Ignorar este mensaje de error", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implementar la interfaz \"{0}\"", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La cláusula implements de la clase '{0}' exportada tiene o usa el nombre privado '{1}'.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversión implícita de un elemento \"symbol\" en \"string\" dará un error en tiempo de ejecución. Considere la posibilidad de encapsular esta expresión en \"String (...)\".", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "La importación “{0}” entra en conflicto con el valor global usado en este archivo, por lo que debe declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Importe los conflictos “{0}” con el valor local, por lo que deben declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", "Import_0_from_1_90013": "Importar “{0}” desde “{1}”", "Import_assertion_values_must_be_string_literal_expressions_2837": "Los valores de aserción de importación deben ser expresiones literales de cadena.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Las aserciones de importación no están permitidas en instrucciones que se transpilan a llamadas \"requeridas\" de commonjs.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Las aserciones de importación solo se admiten cuando la opción \"--module\" está establecida en \"esnext\" o \"nodenext\".", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "No se permiten aserciones de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Las aserciones de importación solo se admiten cuando la opción “--module” está establecida en “esnext”, “nodenext” o “preserve”.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Las aserciones de importación no se pueden usar con importaciones o exportaciones de solo tipo.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "No se puede usar una asignación de importación cuando se eligen módulos de ECMAScript como destino. Considere la posibilidad de usar \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" u otro formato de módulo en su lugar.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Los valores de atributo de importación deben ser expresiones literales de cadena.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "No se permiten atributos de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Los atributos de importación solo se admiten cuando la opción “--module” está establecida en “esnext”, “nodenext” o “preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Los atributos de importación no se pueden usar con importaciones o exportaciones de solo tipo.", "Import_declaration_0_is_using_private_name_1_4000": "La declaración de importación '{0}' usa el nombre privado '{1}'.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La declaración de importación está en conflicto con la declaración local de \"{0}\".", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Las declaraciones de importación de un espacio de nombres no pueden hacer referencia a un módulo.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir archivos de mapas de origen dentro del JavaScript emitido.", "Includes_imports_of_types_referenced_by_0_90054": "Incluye importaciones de tipos a los que hace referencia \"{0}\"", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Al incluir --watch, -w empezará a ver el proyecto actual por los cambios de archivo. Una vez establecido, puede configurar el modo de inspección con:", + "Incomplete_quantifier_Digit_expected_1505": "Cuantificador incompleto. Se esperaba un dígito.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "Falta la signatura de índice para el tipo \"{0}\" en el tipo \"{1}\".", "Index_signature_in_type_0_only_permits_reading_2542": "La signatura de índice del tipo '{0}' solo permite lectura.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Las declaraciones individuales de la declaración '{0}' combinada deben ser todas exportadas o todas locales.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Deducir los tipos de parámetro del uso", "Infer_this_type_of_0_from_usage_95080": "Inferir el tipo \"this\" de \"{0}\" a partir del uso", "Infer_type_of_0_from_usage_95011": "Deducir el tipo de \"{0}\" del uso", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "La inferencia de expresiones de clase no se admite con --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Inicializar la propiedad \"{0}\" en el constructor", "Initialize_static_property_0_90021": "Inicializar la propiedad estática \"{0}\"", "Initializer_for_property_0_2811": "Inicializador para la propiedad \"{0}\"", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "El inicializador de la variable miembro de instancia '{0}' no puede hacer referencia al identificador '{1}' declarado en el constructor.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "El inicializador no proporciona ningún valor para este elemento de enlace que, a su vez, no tiene un valor predeterminado.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "No se permiten inicializadores en los contextos de ambiente.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa un proyecto de TypeScript y crea un archivo tsconfig.json.", + "Inline_variable_95184": "Variable insertada", "Insert_command_line_options_and_files_from_a_file_6030": "Inserte opciones de la línea de comandos y archivos desde un archivo.", "Install_0_95014": "Instalar \"{0}\"", "Install_all_missing_types_packages_95033": "Instalar todos los paquetes de tipos que faltan", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nombre de módulo no válido en un aumento, no se encuentra el módulo '{0}'.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadena opcional no válida de la nueva expresión. ¿Quería llamar a \"{0}()\"?", "Invalid_reference_directive_syntax_1084": "Sintaxis de la directiva \"reference\" no válida.", + "Invalid_syntax_in_decorator_1498": "Sintaxis no válida en Decorator.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso no válido de '{0}'. No se puede usar dentro de un bloque estático de clase.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso de '{0}' no válido. Los módulos están en modo strict automáticamente.", "Invalid_use_of_0_in_strict_mode_1100": "Uso no válido de '{0}' en modo strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valor no válido para “--ignoreDeprecations”.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre calificado o un identificador válido.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre cualificado o un identificador válidos.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor no válido para '--reactNamespace'. '{0}' no es un identificador válido.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "El tipo de elemento \"{0}\" no es un elemento JSX válido.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "El tipo de instancia \"{0}\" no es un elemento JSX válido.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "El tipo de valor devuelto \"{0}\" no es un elemento JSX válido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "El tipo “{0}” no es un tipo de elemento JSX válido.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La etiqueta \"@{0} {1}\" de JSDoc no coincide con la cláusula \"extends {2}\".", "JSDoc_0_is_not_attached_to_a_class_8022": "La etiqueta \"@{0}\" de JSDoc no está asociada a una clase.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "\"...\" de JSDoc solo puede aparecer en el último parámetro de una signatura.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La etiqueta \"@param\" de JSDoc tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La etiqueta de JSDoc \"@param\" tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre. Coincidiría con \"arguments\" si tuviera un tipo de matriz.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "El typedef de JSDoc se puede convertir al tipo TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La etiqueta \"@typedef\" de JSDoc debe tener una anotación de tipo o ir seguida de las etiquetas \"@property\" o \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Las definiciones de tipos JSDoc se pueden convertir en tipos TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Los tipos JSDoc solo se pueden usar en los comentarios de la documentación.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Los tipos de JSDoc pueden moverse a tipos de TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "A los atributos JSX se les debe asignar únicamente un elemento \"expression\" que no esté vacío.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Lista de carpetas de donde se deben incluir las definiciones de tipos.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista de carpetas raíz cuyo contenido combinado representa la estructura del proyecto en tiempo de ejecución.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Cargando \"{0}\" del directorio raíz \"{1}\", ubicación candidata: \"{2}\"", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Se cargará el módulo \"{0}\" de la carpeta \"node_modules\", tipo de archivo de destino \"{1}\".", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Se cargará el módulo como archivo/carpeta, ubicación del módulo candidato \"{0}\", tipo de archivo de destino \"{1}\".", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Se cargará el módulo “{0}” de la carpeta “node_modules”, tipos de archivo de destino “{1}”.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Se cargará el módulo como archivo/carpeta, ubicación del módulo candidato “{0}”, tipos de archivo de destino “{1}”.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "La configuración regional debe tener el formato o -. Por ejemplo, '{0}' o '{1}'.", "Log_paths_used_during_the_moduleResolution_process_6706": "Rutas de acceso de registro usadas durante el proceso \"moduleResolution\".", "Longest_matching_prefix_for_0_is_1_6108": "El prefijo coincidente más largo para \"{0}\" es \"{1}\".", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Haga que keyof solo devuelva cadenas en lugar de cadenas, números o símbolos. Opción heredada.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Hacer que la llamada a \"super()\" sea la primera instrucción del constructor", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "El tipo de objeto asignado tiene implícitamente un tipo de plantilla \"any\".", + "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", "Matched_0_condition_1_6403": "Coincidente con '{0}' condición '{1}'.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "La coincidencia de forma predeterminada incluye el patrón '**/*'", "Matched_by_include_pattern_0_in_1_1407": "Coincidencia con el patrón de inclusión \"{0}\" en \"{1}\"", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "El método '{0}' no puede tener ninguna implementación porque está marcado como abstracto.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre privado \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "El método debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", "Method_not_implemented_95158": "El método no está implementado.", "Modifiers_cannot_appear_here_1184": "Los modificadores no pueden aparecer aquí.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "El módulo \"{0}\" solo puede importarse de forma predeterminada con la marca \"{1}\".", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "El módulo \"{0}\" no tiene ningún miembro \"{1}\" exportado. ¿Pretendía usar \"import {1} from {0}\" en su lugar?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "El módulo \"{0}\" está oculto por una declaración local con el mismo nombre.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "El módulo '{0}' usa \"export =\" y no se puede usar con \"export *\".", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "El módulo '{0}' se resolvió como un módulo de ambiente declarado en '{1}', porque este archivo no se había modificado.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "El módulo '{0}' se resolvió como un módulo de ambiente declarado localmente en el archivo '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "El módulo “{0}” se ha resuelto en “{1}”, pero “--allowArbitraryExtensions” no está establecido.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "El módulo '{0}' se resolvió en '{1}', pero \"--jsx\" no está establecido.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "El módulo \"{0}\" se resolvió en \"{1}\", pero no se usa \"--resolveJsonModule\".", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Los nombres de declaración de módulo solo pueden usar cadenas con las comillas \" o '.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "No se pudo resolver el módulo con \"rootDirs\".", "Modules_6244": "Módulos", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover modificadores de elemento de tupla etiquetados a etiquetas", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mueva la expresión de exportación predeterminada a una variable y agréguele una anotación de tipo.", "Move_to_a_new_file_95049": "Mover a un nuevo archivo", + "Move_to_file_95178": "Mover a archivo", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "No se permiten varios separadores numéricos consecutivos.", "Multiple_constructor_implementations_are_not_allowed_2392": "No se permiten varias implementaciones del constructor.", "NEWLINE_6061": "NUEVA LÍNEA", "Name_is_not_valid_95136": "El nombre no es válido", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Los grupos de captura con nombre solo están disponibles cuando el destino es “ES2018” o posterior.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Los grupos de captura con nombre que tengan el mismo nombre deben ser mutuamente excluyentes entre sí.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propiedad '{0}' con nombre de los tipos '{1}' y '{2}' no es idéntica en ambos.", "Namespace_0_has_no_exported_member_1_2694": "El espacio de nombres '{0}' no tiene ningún miembro '{1}' exportado.", "Namespace_must_be_given_a_name_1437": "Se debe asignar un nombre al espacio de nombres.", "Namespace_name_cannot_be_0_2819": "El nombre de espacio no puede ser \"{0}\".", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "No se permiten espacios de nombres en archivos de script globales cuando “{0}” está habilitado. Si este archivo no está pensado para ser un script global, establezca “moduleDetection” en “force” o agregue una instrucción “export {}” vacía.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "No se pueden aplicar modificadores ni decoradores a los parámetros “this”.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "No hay ningún constructor base con el número especificado de argumentos de tipo.", "No_constituent_of_type_0_is_callable_2755": "No se puede llamar a ningún constituyente del tipo \"{0}\".", "No_constituent_of_type_0_is_constructable_2759": "No se puede construir ningún constituyente del tipo \"{0}\".", @@ -970,13 +1077,18 @@ "No_type_could_be_extracted_from_this_type_node_95134": "No se pudo extraer ningún tipo de este nodo de tipo", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "No existe ningún valor en el ámbito para la propiedad abreviada \"{0}\". Declare uno o proporcione un inicializador.", "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La clase '{0}' no abstracta no implementa el miembro abstracto heredado '{1}' de la clase '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2} y {3} más.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Una expresión de clase no abstracta no implementa el miembro abstracto heredado '{0}' de la clase '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1} y {2} más.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Las aserciones no nulas solo se pueden usar en los archivos TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "No se permiten rutas de acceso no relativas si no se ha establecido \"baseUrl\". ¿Ha olvidado poner \"./\" al inicio?", "Non_simple_parameter_declared_here_1348": "Se ha declarado un parámetro no simple aquí.", "Not_all_code_paths_return_a_value_7030": "No todas las rutas de acceso de código devuelven un valor.", "Not_all_constituents_of_type_0_are_callable_2756": "No se puede llamar a todos los constituyentes del tipo \"{0}\".", "Not_all_constituents_of_type_0_are_constructable_2760": "No se pueden construir todos los constituyentes del tipo \"{0}\".", + "Numbers_out_of_order_in_quantifier_1506": "Números desordenado en el cuantificador.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Los literales numéricos con valores absolutos iguales a 2^53 o superiores son demasiado grandes para representarlos de forma precisa como enteros.", "Numeric_separators_are_not_allowed_here_6188": "Aquí no se permiten separadores numéricos.", "Object_is_of_type_unknown_2571": "El objeto es de tipo \"desconocido\".", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "El literal de objeto solo puede especificar propiedades conocidas y '{0}' no existe en el tipo '{1}'.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "El literal de objeto solo puede especificar propiedades conocidas, pero \"{0}\" no existe en el tipo \"{1}\". ¿Quería escribir \"{2}\"?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propiedad '{0}' del literal de objeto tiene un tipo '{1}' implícitamente.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Los objetos que contienen propiedades abreviadas no se pueden inferir con --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Los objetos que contienen asignaciones de propagación no se pueden inferir con --isolatedDeclarations.", "Octal_digit_expected_1178": "Se esperaba un dígito octal.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Los tipos de literales octales deben usar la sintaxis ES2015. Use la sintaxis \"{0}\".", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "No se permiten literales octales en el inicializador de miembros de enumeraciones. Use la sintaxis \"{0}\".", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Los literales octales no se permiten en modo strict.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Los literales octales no están disponibles cuando el destino es ECMAScript 5 y superior. Use la sintaxis \"{0}\".", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres. Si la intención era una secuencia de escape, use la sintaxis “{0}” en su lugar.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "No se permiten secuencias de escape octal. Use la sintaxis “{0}”.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "No se permiten literales octal. Use la sintaxis “{0}”.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valor de “{0}.{1}” es la cadena “{2}” y se supone que el otro es un valor numérico desconocido.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Solo se permite una declaración de variable en una instrucción \"for...in\".", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Solo se permite una declaración de variable en una instrucción \"for...of\".", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Solo se puede llamar a una función void con la palabra clave \"new\".", "Only_ambient_modules_can_use_quoted_names_1035": "Solo los módulos de ambiente pueden usar nombres entrecomillados.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Solo los módulos \"amd\" y \"system\" se admiten con --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Solo se pueden inferir matrices const con --isolatedDeclarations.", "Only_emit_d_ts_declaration_files_6014": "Solo deben emitirse archivos de declaración \".d.ts\".", - "Only_named_exports_may_use_export_type_1383": "Solo las exportaciones con nombre pueden usar \"export type\".", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Solo las enumeraciones numéricas pueden tener miembros calculados, pero esta expresión tiene el tipo \"{0}\". Si no requiere comprobaciones de exhaustividad, considere la posibilidad de usar un literal de objeto en su lugar.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Genere solo archivos d.ts y no archivos JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Solo es posible tener acceso a los métodos públicos y protegidos de la clase base mediante la palabra clave \"super\".", "Operator_0_cannot_be_applied_to_type_1_2736": "El operador \"{0}\" no se puede aplicar al tipo \"{1}\".", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "El operador '{0}' no se puede aplicar a los tipos '{1}' y '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Los operadores no deben mezclarse dentro de una clase de caracteres. Envuelve en una clase anidada en su lugar.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Opte por excluir un proyecto de la comprobación de referencias de varios proyectos al editar.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Se ha quitado la opción “{0}={1}”. Elimínela de la configuración.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "La opción “{0}={1}” está en desuso y dejará de funcionar en TypeScript {2}. Especifique compilerOption “'ignoreDeprecations': '{3}'” para silenciar este error.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"false\" o \"null\" en la línea de comandos.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"null\" en la línea de comandos.", + "Option_0_can_only_be_specified_on_command_line_6266": "La opción “{0}” solo se puede especificar en la línea de comandos.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "La opción '{0}' solo se puede usar cuando se proporciona '--inlineSourceMap' o '--sourceMap'.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "La opción “{0}” solo se puede usar cuando “moduleResolution” está establecido en “node16”, “nodenext” o “bundler”.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "La opción “{0}” solo se puede usar cuando “module” está establecido en “preserve” o en “es2015” o posterior.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "No se puede especificar la opción \"{0}\" cuando la opción \"jsx\" es \"{1}\".", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "No se puede especificar la opción \"{0}\" cuando la opción \"target\" es \"ES3\".", "Option_0_cannot_be_specified_with_option_1_5053": "La opción '{0}' no se puede especificar con la opción '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "La opción '{0}' no se puede especificar sin la opción '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "La opción \"{0}\" no se puede especificar sin la opción \"{1}\" o la opción \"{2}\".", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Se ha quitado la opción “{0}”. Elimínela de la configuración.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "La opción “{0}” está en desuso y dejará de funcionar en TypeScript {1}. Especifique compilerOption “'ignoreDeprecations': '{2}'” para silenciar este error.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "La opción “{0}” es redundante y no se puede especificar con la opción “{1}”.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "La opción “allowImportingTsExtensions” solo se puede usar cuando se establece “noEmit” o “emitDeclarationOnly”.", "Option_build_must_be_the_first_command_line_argument_6369": "La opción \"--build\" debe ser el primer argumento de la línea de comandos.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "La opción \"--incremental\" solo puede especificarse si se usa tsconfig, se emite en un solo archivo o se especifica la opción \"--tsBuildInfoFile\".", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "La opción \"isolatedModules\" solo se puede usar cuando se proporciona la opción \"--module\" o si la opción \"target\" es \"ES2015\" o una versión posterior.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "La opción \"preserveConstEnums\" no se puede deshabilitar cuando \"isolatedModules\" está habilitado.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "La opción \"preserveValueImports\" solo se puede usar cuando \"module\" esté establecido en \"es2015\" o posteriores.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "La opción “moduleResolution” debe establecerse en “{0}” (o no se especificó) cuando la opción “module” está establecida en “{1}”.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "La opción “module” debe establecerse en “{0}” cuando la opción “moduleResolution” esté establecida en “{1}”.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "La opción “preserveConstEnums” no se puede deshabilitar cuando “{0}” está habilitado.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "La opción \"project\" no se puede combinar con archivos de origen en una línea de comandos.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "La opción \"--resolveJsonModule\" solo puede especificarse cuando la generación de código del módulo es \"commonjs\", \"amd\", \"es2015\" o \"esNext\".", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "No se puede especificar la opción \"--resolveJsonModule\" sin la estrategia de resolución de módulos \"node\".", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "No se puede especificar la opción “--resolveJsonModule” cuando “moduleResolution” está establecido en “classic”.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "No se puede especificar la opción “--resolveJsonModule” cuando “module” esté establecido en “none”, “system” o “umd”.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "No se puede especificar la opción “tsBuildInfoFile” sin especificar la opción “incremental” o “composite” o si no se ejecuta “tsc -b”.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "La opción “verbatimModuleSyntax” no se puede usar cuando “module” está establecido en “UMD”, “AMD” o “System”.", "Options_0_and_1_cannot_be_combined_6370": "\"{0}\" y \"{1}\" no se pueden combinar.", "Options_Colon_6027": "Opciones:", "Output_Formatting_6256": "Formato de salida", "Output_compiler_performance_information_after_building_6615": "Información de rendimiento resultante del compilador después de la compilación.", "Output_directory_for_generated_declaration_files_6166": "Directorio de salida para los archivos de declaración generados.", - "Output_file_0_from_project_1_does_not_exist_6309": "El archivo de salida \"{0}\" del proyecto \"{1}\" no existe.", "Output_file_0_has_not_been_built_from_source_file_1_6305": "El archivo de salida \"{0}\" no se compiló desde el archivo de origen \"{1}\".", "Output_from_referenced_project_0_included_because_1_specified_1411": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Se espera una declaración de parámetros.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "El parámetro tiene un nombre, pero no un tipo. ¿Pretendía usar \"{0}: {1}\"?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Los modificadores de parámetro solo se pueden usar en los archivos TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "El parámetro debe tener una anotación de tipo explícita con --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprima los nombres de los archivos emitidos después de una compilación.", "Print_this_message_6017": "Imprima este mensaje.", "Private_accessor_was_defined_without_a_getter_2806": "El descriptor de acceso privado se ha definido sin un captador.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "El campo privado “{0}” debe declararse en una clase envolvente.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "No se permiten identificadores privados en las declaraciones de variables.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "No se permiten identificadores privados fuera de los cuerpos de clase.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Los identificadores privados solo están permitidos en cuerpos de clase y solo se pueden utilizan como parte de una declaración de un miembro de clase, acceso de propiedad o en la parte izquierda de una expresión \"in\".", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Los identificadores privados solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Los identificadores privados no se pueden usar como parámetros.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "No se puede acceder al miembro \"{0}\" privado o protegido en un parámetro de tipo.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "El proyecto \"{0}\" no puede generarse porque su dependencia \"{1}\" tiene errores", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "El proyecto \"{0}\" no puede compilarse porque su dependencia \"{1}\" no se ha compilado.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "El proyecto \"{0}\" se está recompilando de manera forzada.", + "Project_0_is_out_of_date_because_1_6420": "El proyecto “{0}” no está actualizado porque {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que el archivo “{2}” era el archivo raíz de la compilación, pero ya no.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "El “{0}” del proyecto no está actualizado porque el archivo buildinfo “{1}” indica que el programa debe informar de errores.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "El proyecto \"{0}\" no está actualizado porque el archivo buildinfo \"{1}\" indica que algunos de los cambios no se emitieron", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que hay cambios en compilerOptions", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "El proyecto \"{0}\" está obsoleto porque su dependencia \"{1}\" no está actualizada", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "El proyecto \"{0}\" está obsoleto porque la salida \"{1}\" es anterior a la entrada \"{2}\"", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "El proyecto \"{0}\" está obsoleto porque el archivo de salida \"{1}\" no existe", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "El proyecto \"{0}\" está obsoleto porque su salida se generó con la versión \"{1}\", que es distinta a la versión actual \"{2}\".", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "El proyecto \"{0}\" está obsoleto porque la salida de su dependencia \"{1}\" ha cambiado.", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "El proyecto \"{0}\" no está actualizado porque se produjo un error al leer el archivo \"{1}\"", "Project_0_is_up_to_date_6361": "El proyecto \"{0}\" está actualizado", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "El proyecto \"{0}\" está actualizado porque la entrada más reciente \"{1}\" es anterior a la salida \"{2}\"", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "La propiedad \"{0}\" se usa antes de su inicialización.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La propiedad '{0}' del atributo spread de JSX no se puede asignar a la propiedad de destino.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La propiedad \"{0}\" de la expresión de clase exportada no puede ser privada ni estar protegida.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propiedad “{0}” del tipo de clase anónima exportada no puede ser privada ni estar protegida.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propiedad \"{0}\" de tipo \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propiedad \"{0}\" sobrescribirá la propiedad base en \"{1}\" Si esto es intencionado, agregue un inicializador. De lo contrario, agregue un modificador \"declare\" o quite la declaración redundante.", "Property_assignment_expected_1136": "Se esperaba una asignación de propiedad.", "Property_destructuring_pattern_expected_1180": "Se esperaba un patrón de desestructuración de propiedad.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propiedad debe tener una anotación de tipo explícita con --isolatedDeclarations.", "Property_or_signature_expected_1131": "Se esperaba una propiedad o una signatura.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "El valor de la propiedad puede ser solo un literal de cadena, literal numérico, 'true', 'false', 'null', literal de objeto o literal de matriz.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Proporcionar compatibilidad total con objetos iterables en \"for-of\", propagaciones y desestructuraciones cuando el destino es \"ES5\" o \"ES3\".", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Proporcionar compatibilidad total con objetos iterables en “for-of”, propagaciones y desestructuraciones cuando el destino es “ES5”.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo externo {2}, pero no puede tener nombre.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "El método público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un error cuando no se lee un parámetro de función.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Generar un error en las expresiones y las declaraciones con un tipo \"any\" implícito.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Generar un error en expresiones 'this' con un tipo 'any' implícito.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Para volver a exportar un tipo cuando se proporciona la marca \"--isolatedModules\", se requiere el uso de \"export type\".", + "Range_out_of_order_in_character_class_1517": "Rango desordenado en la clase de caracteres.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Volver a exportar un tipo cuando “{0}” está habilitado requiere el uso de “export type”.", + "React_components_cannot_include_JSX_namespace_names_2639": "Los componentes de React no pueden incluir nombres de espacio de nombres JSX", "Redirect_output_structure_to_the_directory_6006": "Redirija la estructura de salida al directorio.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzca el número de proyectos cargados automáticamente por TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "El proyecto \"{0}\" al que se hace referencia no puede deshabilitar la emisión.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "El proyecto \"{0}\" al que se hace referencia debe tener el valor \"composite\": true.", "Referenced_via_0_from_file_1_1400": "Se hace referencia mediante \"{0}\" desde el archivo \"{1}\".", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones EcmaScript cuando \"--moduleResolution\" es \"node16\" o \"nodenext\". Considere la posibilidad de agregar una extensión a la ruta de acceso de importación.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones EcmaScript cuando \"--moduleResolution\" es \"node16\" o \"nodenext\". ¿Quería decir \"{0}\"?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. Considere la posibilidad de agregar una extensión a la ruta de acceso de importación.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. ¿Quiso decir “{0}”?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Quite una lista de directorios del proceso de inspección.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Quite una lista de archivos del procesamiento del modo de inspección.", "Remove_all_unnecessary_override_modifiers_95163": "Quitar todos los modificadores \"override\" innecesarios", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Notifique los errores de los archivos .js.", "Report_errors_on_unused_locals_6134": "Informe de errores sobre variables locales no usadas.", "Report_errors_on_unused_parameters_6135": "Informe de errores sobre parámetros no usados.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Requiere una anotación suficiente en las exportaciones para que otras herramientas puedan generar archivos de declaración de forma trivial.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Se requieren propiedades no declaradas de las signaturas de índice para usar los accesos de elemento.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Los parámetros de tipo requeridos pueden no seguir parámetros de tipo opcionales.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La resolución del módulo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La resolución de la directiva de referencia de tipo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Error en la resolución del nombre no relativo; probando con las características modernas de resolución de nodos deshabilitadas para ver si la biblioteca npm necesita una actualización de la configuración.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Error en la resolución del nombre no relativo; intentando con “--moduleResolution bundler” para ver si el proyecto puede necesitar una actualización de la configuración.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolver \"keyof\" exclusivamente como nombres de propiedad con valores de cadena (sin números ni símbolos).", + "Resolved_under_condition_0_6414": "Resuelto bajo condición “{0}”.", "Resolving_in_0_mode_with_conditions_1_6402": "Resolviendo en modo {0} con condiciones {1}.", "Resolving_module_0_from_1_6086": "======== Resolviendo el módulo '{0}' de '{1}'. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolviendo el nombre de módulo '{0}' relativo a la dirección URL base '{1}' - '{2}'.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz no establecido. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz: '{1}'. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz no establecido. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolviendo la directiva de referencia de tipo para el programa que especifica typeRoots personalizado, omitiendo la búsqueda en la carpeta “node_modules”.", "Resolving_with_primary_search_path_0_6121": "Resolviendo con la ruta de búsqueda principal \"{0}\".", "Rest_parameter_0_implicitly_has_an_any_type_7019": "El parámetro rest '{0}' tiene un tipo \"any[]\" implícitamente.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "El parámetro rest \"{0}\" tiene un tipo \"any[]\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\" con el identificador de paquete \"{3}\".", "Rewrite_all_as_indexed_access_types_95034": "Reescribir todo como tipos de acceso indexados", "Rewrite_as_the_indexed_access_type_0_90026": "Reescribir como tipo de acceso indexado \"{0}\"", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "El operando derecho de ?? es inaccesible porque el operando izquierdo nunca es nulo.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "No se puede determinar el directorio raíz, se omitirán las rutas de búsqueda principales.", "Root_file_specified_for_compilation_1427": "Archivo raíz especificado para la compilación", "STRATEGY_6039": "ESTRATEGIA", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Guarde archivos .tsbuildinfo para permitir la compilación incremental de proyectos.", "Saw_non_matching_condition_0_6405": "Se vio una condición no coincidente '{0}'.", "Scoped_package_detected_looking_in_0_6182": "Se detectó un paquete con ámbito al buscar en \"{0}\"", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Buscando extensiones de reserva en todos los directorios de node_modules antecesores: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Buscando extensiones preferidas en todos los directorios de node_modules antecesores: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "La selección no es una instrucción ni instrucciones válidas", "Selection_is_not_a_valid_type_node_95133": "La selección no es un nodo de tipo válido", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Establezca la versión del lenguaje de JavaScript para las JavaScript emitidas e incluya las declaraciones de bibliotecas compatibles.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Mostrar información de diagnóstico detallada.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar lo que podría compilarse (o eliminarse, si se especifica con \"--clean\")", "Signature_0_must_be_a_type_predicate_1224": "La signatura '{0}' debe tener un predicado de tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Las declaraciones de signatura solo se pueden usar en los archivos TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Omitir la compilación de proyectos que siguen en la cadena debido a un error en el proyecto ascendente.", "Skip_type_checking_all_d_ts_files_6693": "Omita la comprobación de tipos de todos los archivos .d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Omita la comprobación de tipos de archivo .d.ts que se incluyen con TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Omita la comprobación de tipos de los archivos de declaración.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" tiene errores", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" no se ha compilado", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Omitiendo el módulo “{0}” que parece un URI absoluto, tipos de archivo de destino: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", "Source_has_0_element_s_but_target_allows_only_1_2619": "El origen tiene {0} elemento(s), pero el destino solo permite {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique cómo funciona el modo de inspección de TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique los archivos de biblioteca que se van a incluir en la compilación.", "Specify_module_code_generation_6016": "Especifique la generación de código del módulo.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Especifique la estrategia de resolución de módulos: 'node' (Node.js) o 'classic' (TypeScript pre-1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especifique el especificador de módulo que se usa para importar las funciones de fábrica de JSX cuando se usa \"jsx: react-jsx*\".", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especifique varias carpetas que actúen como \"./node_modules/@types\".", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especifique una o varias referencias de ruta o de módulo de nodo a los archivos de configuración base desde los que se herede la configuración.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Los miembros estáticos no pueden hacer referencia a parámetros de tipo de clase.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propiedad estática \"{0}\" está en conflicto con la propiedad integrada \"Function.{0}\" de la función de constructor \"{1}\".", "String_literal_expected_1141": "Se esperaba un literal de cadena.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "No se admiten los nombres de importación y exportación de literales de cadena cuando la marca “--module” está establecida en “es2015” o “es2020”.", "String_literal_with_double_quotes_expected_1327": "Se esperaba un literal de cadena entre comillas dobles.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Use color y contexto para estilizar los errores y los mensajes (experimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Las marcas de subpatrones deben estar presentes cuando hay un signo menos.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Las declaraciones de propiedad subsiguientes deben tener el mismo tipo. La propiedad \"{0}\" debe ser de tipo \"{1}\", pero aquí tiene el tipo \"{2}\".", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Las declaraciones de variable subsiguientes deben tener el mismo tipo. La variable '{0}' debe ser de tipo '{1}', pero aquí tiene el tipo '{2}'.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "La sustitución '{0}' para el patrón '{1}' tiene un tipo incorrecto. Se esperaba 'string', pero se obtuvo '{2}'.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "No se permiten expresiones de plantilla con etiquetas en una cadena opcional.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "El destino solo permite {0} elemento(s), pero el origen puede tener más.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "El destino requiere {0} elemento(s), pero el origen puede tener menos.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma de destino proporciona muy pocos argumentos. Se esperaba {0} o más, pero se obtuvo {1}.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "El modificador \"{0}\" solo se puede usar en los archivos TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "El operador '{0}' no se puede aplicar al tipo \"symbol\".", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "No se permite usar el operador '{0}' para los tipos booleanos. Como alternativa, puede usar '{1}'.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propiedad \"{0}\" de un iterador de asincronía debe ser un método.", "The_0_property_of_an_iterator_must_be_a_method_2767": "La propiedad \"{0}\" de un iterador debe ser un método.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "El tipo 'Object' se puede asignar a muy pocos tipos. ¿Se refería a usar el tipo 'any' en realidad?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "No se puede hacer referencia al objeto \"arguments\" en una función de flecha en ES3 ni ES5. Considere la posibilidad de usar una expresión de función estándar.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "No se puede hacer referencia al objeto \"arguments\" en una función o método asincrónico en ES3 ni ES5. Considere la posibilidad de usar un método o función estándar.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Las marcas Unicode (u) y Unicode Sets (v) no se pueden establecer simultáneamente.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "No se puede hacer referencia al objeto “arguments” en una función de flecha en ES5 ni ES5. Considere la posibilidad de usar una expresión de función estándar.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "No se puede hacer referencia al objeto “arguments” en una función o método asincrónico en ES5. Considere la posibilidad de usar un método o función estándar.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "El cuerpo de una instrucción \"if\" no puede ser la instrucción vacía.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La llamada se llevaría a cabo sin problemas en esta implementación, pero las signaturas de implementación de las sobrecargas no están visibles externamente.", "The_character_set_of_the_input_files_6163": "Conjunto de caracteres de los archivos de entrada.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "El tipo deducido de \"{0}\" hace referencia a un tipo con una estructura cíclica que no se puede serializar trivialmente. Es necesaria una anotación de tipo.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "El tipo inferido de \"{0}\" hace referencia a un tipo \"{1}\" no accesible. Se requiere una anotación de tipo.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "El tipo inferido de este nodo supera la longitud máxima que el compilador podrá serializar. Se necesita una anotación de tipo explícito.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "El inicializador de una declaración “using” debe ser un objeto con un método “[Symbol.dispose]()”, o ser “null” o “undefined”.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "El inicializador de una declaración “await using” debe ser un objeto con un método “[Symbol.asyncDispose]()” o “[Symbol.dispose]5D;()”, o ser “null” o “undefined”.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" existe en varios constituyentes y es privada en algunos de ellos.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" tiene tipos en conflicto en algunos constituyentes.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La palabra clave \"intrinsic\" solo se puede usar para declarar tipos intrínsecos proporcionados por el compilador.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "La última sobrecarga dio el error siguiente.", "The_last_overload_is_declared_here_2771": "La última sobrecarga se declara aquí.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte izquierda de una instrucción \"for...in\" no puede ser un patrón de desestructuración.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "El lado izquierdo de un “for...in” no puede ser una declaración “using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "El lado izquierdo de una instrucción “for...in” no puede ser una declaración “await using”.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La parte izquierda de una instrucción \"for...in\" no puede usar una anotación de tipo.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte izquierda de una instrucción \"for...in\" no puede ser un acceso de propiedad opcional.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte izquierda de una instrucción 'for...in' debe ser una variable o el acceso a una propiedad.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte izquierda de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte izquierda de una expresión de asignación no puede ser un acceso de propiedad opcional.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte izquierda de una expresión de asignación debe ser una variable o el acceso a una propiedad.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "El lado izquierdo de una expresión “instanceof” debe poder asignarse al primer argumento del método “[Symbol.hasInstance]” del lado derecho.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte izquierda de una expresión \"instanceof\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Configuración regional utilizada para mostrar los mensajes al usuario (por ejemplo, \"es-es\")", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "La profundidad máxima de dependencia para buscar en node_modules y cargar los archivos de JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de exportación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de importación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "No se puede acceder a la propiedad \"{0}\" en el tipo \"{1}\" de esta clase porque se ha reemplazado por otro identificador privado con la misma ortografía.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "El tipo de valor devuelto de un descriptor de acceso \"get\" debe poder asignarse a su tipo de descriptor de acceso \"set\".", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "El tipo de valor devuelto de una función Decorator de parámetro debe ser \"void\" o \"any\".", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "El tipo de valor devuelto de una función Decorator de propiedad debe ser \"void\" o \"any\".", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "El tipo de valor devuelto de una función asincrónica debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global. ¿Pretendía escribir \"Promise<{0}>\"?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte derecha de una instrucción \"for...in\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo, pero aquí tiene el tipo \"{0}\".", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte derecha de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La parte derecha de una expresión \"instanceof\" debe ser de tipo \"any\" o un tipo que pueda asignarse al tipo de interfaz \"Function\".", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "El lado derecho de una expresión “instanceof” debe ser de tipo “any”, una clase, función u otro tipo asignable al tipo de interfaz “Function”, o un tipo de objeto con un método “Symbol.hasInstance”.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "El lado derecho de una expresión “instanceof” no debe ser una expresión de creación de instancias.", "The_root_value_of_a_0_file_must_be_an_object_5092": "El valor raíz de un archivo \"{0}\" debe ser un objeto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera al menos {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "La declaración que ensombrece a \"{0}\" se define aquí.", "The_signature_0_of_1_is_deprecated_6387": "La signatura \"{0}\" de \"{1}\" está en desuso.", "The_specified_path_does_not_exist_Colon_0_5058": "La ruta de acceso especificada no existe: \"{0}\".", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "El modificador 'tipo' no se puede usar en una exportación con nombre cuando se usa 'exportar tipo' en su instrucción exportar.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "El modificador 'tipo' no se puede usar en una importación con nombre cuando se usa 'exportar tipo' en su instrucción importar.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "El tipo de una declaración de función debe coincidir con la signatura de la función.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "No se puede nombrar el tipo de esta expresión sin una aserción \"modo de resolución\", que es una característica inestable. Use TypeScript nocturno para silenciar este error. Intente actualizar con \"npm install -D typescript@next\".", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "No se ha podido serializar el tipo de este nodo porque su propiedad '{0}' no se puede serializar.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "El tipo devuelto por el método \"{0}()\" de un iterador de asincronía debe ser una promesa para un tipo con una propiedad \"value\".", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "El tipo devuelto por el método \"{0}()\" de un iterador debe tener una propiedad \"value\".", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La declaración de variable de una instrucción \"for...in\" no puede tener un inicializador.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La declaración de variable de una instrucción \"for...of\" no puede tener un inicializador.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "No se admite la instrucción 'with'. Todos los símbolos de un bloque 'with' tendrán el tipo 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Hay tipos en “{0}”, pero este resultado no se pudo resolver en la configuración actual de “moduleResolution”. Considere la posibilidad de actualizar a “node16”, “nodenext” o “bundler”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Hay tipos en “{0}”, pero este resultado no se pudo resolver al respetar \"exports\" de package.json. Es posible que la biblioteca “{1}” necesite actualizar sus package.json o tipos.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "No hay ningún grupo de captura denominado “{0}” en esta expresión regular.", + "There_is_nothing_available_for_repetition_1507": "No hay nada disponible para la repetición.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propiedad \"{0}\" de esta etiqueta de JSX espera un solo elemento secundario de tipo \"{1}\", pero se han proporcionado varios elementos secundarios.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propiedad \"{0}\" de esta etiqueta de JSX espera el tipo \"{1}\", que requiere varios elementos secundarios, pero solo se ha proporcionado un elemento secundario.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Esta referencia inversa hace referencia a un grupo que no existe. No hay grupos de captura en esta expresión regular.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Esta referencia inversa hace referencia a un grupo que no existe. Solo hay {0} grupos de captura en esta expresión regular.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Esta expresión binaria nunca acepta valores NULL. ¿Faltan paréntesis?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este carácter no se puede escapar en una expresión regular.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparación parece no intencionada porque los tipos \"{0}\" y \"{1}\" no tienen superposición.", "This_condition_will_always_return_0_2845": "Esta condición siempre devolverá \"{0}\".", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Esta condición siempre devolverá \"{0}\", ya que JavaScript compara objetos por referencia, no por valor.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condición devolverá siempre true porque siempre se define '{0}'.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condición siempre devolverá true, porque esta función se define siempre. ¿Pretendía llamarla en su lugar?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta función de constructor puede convertirse en una declaración de clase.", + "This_expression_is_always_nullish_2871": "Esta expresión siempre acepta valores NULL.", "This_expression_is_not_callable_2349": "No se puede llamar a esta expresión.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "No se puede llamar a esta expresión porque es un descriptor de acceso \"get\". ¿Pretendía usarlo sin \"()\"?", "This_expression_is_not_constructable_2351": "No se puede construir esta expresión.", "This_file_already_has_a_default_export_95130": "Este archivo ya tiene una exportación predeterminada", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Esta importación nunca se usa como valor y debe utilizar \"import type\" porque \"importsNotUsedAsValues\" está establecido en \"error\".", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta es la declaración que se está aumentando. Considere la posibilidad de mover la declaración en aumento al mismo archivo.", + "This_kind_of_expression_is_always_falsy_2873": "Este tipo de expresión siempre es falso.", + "This_kind_of_expression_is_always_truthy_2872": "Este tipo de expresión siempre es cierto.", "This_may_be_converted_to_an_async_function_80006": "Puede convertirse en una función asincrónica.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque no se declara en la clase base '{0}'.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Este miembro no puede tener un comentario JSDoc con una etiqueta 'override' porque no se declara en la clase base '{0}'. ¿Quería decir '{1}'?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este miembro debe tener un modificador \"override\" porque reemplaza a un método abstracto que se declara en la clase base \"{0}\".", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Solo se puede hacer referencia a este módulo con las importaciones o exportaciones de ECMAScript mediante la activación de la marca \"{0}\" y la referencia a su exportación predeterminada.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo se declara con \"export =\" y solo se puede usar con una importación predeterminada cuando se usa la marca \"{0}\".", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Esta operación se puede simplificar. Este turno es idéntico a \"{0} {1} {2}\".", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Esta sobrecarga devuelve implícitamente el tipo “{0}” porque carece de una anotación de tipo de valor devuelto.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta signatura de sobrecarga no es compatible con su signatura de implementación.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parámetro no se permite con la directiva \"use strict\".", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Esta propiedad de parámetro debe tener un comentario JSDoc con una etiqueta '@override' porque invalida un miembro de la clase base '{0}'.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propiedad de parámetro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esta marca de expresión regular no se puede alternar dentro de un subpatrón.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esta marca de expresión regular solo está disponible cuando el destino es “{0}” o posterior.", "This_spread_always_overwrites_this_property_2785": "Este elemento de propagación siempre sobrescribe esta propiedad.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Esta sintaxis está reservada en archivos con la extensión .mts o .CTS. Agregue una coma o una restricción explícita al final.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Esta sintaxis se reserva a archivos con la extensión .mts o .cts. En su lugar, use una expresión \"as\".", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o agregue el campo `\"type\": \"module\"` a \"{1}\".", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o cree un archivo package.json local con '{ \"type\": \"module\" }'.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para convertir este archivo en un módulo ECMAScript, cree un archivo package.json local con `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Las expresiones \"await\" de nivel superior solo se permiten cuando la opción \"módulo\" está establecida en \"es2022\", \"esnext\", \"system\", \"node16\" o \"nodenext\", y la opción \"destino\" está establecida en \"es2017\" o superior.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Las expresiones \"await\" de nivel superior solo se permiten cuando la opción \"module\" está establecida en \"es2022\", \"esnext\", \"system\", \"node16\", \"nodenext\" o \"preserve\", y la opción \"target\" está establecida en \"es2017\" o superior.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Las declaraciones “await using” de nivel superior solo se permiten cuando la opción “module” está establecida en “es2022”, “esnext”, “system”, “node16”, “nodenext” o “preserve”, y la opción “target” está establecida en “es2017” o superior.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Las declaraciones de nivel superior de los archivos .d.ts deben comenzar con un modificador \"declare\" o \"export\".", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Los bucles \"for await\" de nivel superior solo se permiten cuando la opción \"módulo\" está establecida en \"es2022\", \"esnext\", \"system\", \"node16\" o \"nodenext\", y la opción \"destino\" está establecida en \"es2017\" o superior.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Los bucles \"for await\" de nivel superior solo se permiten cuando la opción \"módulo\" está establecida en \"es2022\", \"esnext\", \"system\", \"node16\", \"nodenext\" o \"preserve\", y la opción \"target\" está establecida en \"es2017\" o superior.", "Trailing_comma_not_allowed_1009": "No se permite la coma final.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilar cada archivo como un módulo aparte (parecido a \"ts.transpileModule\").", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Pruebe \"npm i --save-dev @types/{1}\" si existe o agregue un nuevo archivo de declaración (.d.ts) que incluya \"declare module '{0}';\".", "Trying_other_entries_in_rootDirs_6110": "Se probarán otras entradas de \"rootDirs\".", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Probando la sustitución '{0}', ubicación candidata para el módulo: '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Todos los miembros de tupla deben tener nombres o no debe tenerlo ninguno de ellos.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "El tipo de tupla \"{0}\" de longitud \"{1}\" no tiene ningún elemento en el índice \"{2}\".", "Tuple_type_arguments_circularly_reference_themselves_4110": "Los argumentos de tipo de tupla se hacen referencia a sí mismos de forma circular.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "El tipo \"{0}\" solo puede iterarse cuando se usa la marca \"--downlevelIteration\" o con un valor \"--target\" de \"es2015\" o superior.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "El tipo '{0}' no tiene una signatura de índice correspondiente al tipo '{1}'.", "Type_0_has_no_properties_in_common_with_type_1_2559": "El tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\".", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "El tipo \"{0}\" no tiene firmas para las que sea aplicable la lista de argumentos de tipo.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "El tipo “{0}” es genérico y solo se puede indizar para lectura.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2} y {3} más.", "Type_0_is_not_a_constructor_function_type_2507": "El tipo '{0}' no es un tipo de función de constructor.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "El tipo '{0}' no es un tipo de valor devuelto válido para una función asincrónica en ES5/ES3, porque no hace referencia a un valor de constructor compatible con promesas.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "El tipo “{0}” no es un tipo de valor devuelto válido para una función asincrónica en ES5, porque no hace referencia a un valor de constructor compatible con promesas.", "Type_0_is_not_an_array_type_2461": "'{0}' no es un tipo de matriz.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' no es un tipo de matriz o un tipo de cadena.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "El tipo \"{0}\" no es un tipo de matriz o un tipo de cadena o no tiene un método \"[Symbol.iterator]()\" que devuelve un iterador.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "El tipo '{0}' no se puede asignar al tipo '{1}'. ¿Quería decir \"{2}\"?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "El tipo \"{0}\" no se puede asignar al tipo \"{1}\". Existen dos tipos distintos con este nombre, pero no están relacionados.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "El tipo “{0}” no se puede asignar al tipo “{1}”, tal y como implica la anotación de desviación.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "El tipo “{0}” no se puede asignar al tipo “{1}” según sea necesario para los valores de miembro de enumeración calculados.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" al tipo del destino.", "Type_0_is_not_comparable_to_type_1_2678": "El tipo '{0}' no se puede comparar con el tipo '{1}'.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Se esperaba un argumento de tipo.", "Type_argument_list_cannot_be_empty_1099": "La lista de argumentos de tipo no puede estar vacía.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Los argumentos de tipo solo se pueden usar en los archivos TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "No se pueden usar argumentos de tipo aquí.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Los argumentos de tipo de \"{0}\" se hacen referencia a sí mismos de forma circular.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Las expresiones de aserción de tipo solo se pueden usar en los archivos TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "El tipo en la posición {0} del origen no es compatible con el tipo en la posición {1} del destino.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "El tipo en las posiciones {0} a {1} del origen no es compatible con el tipo en la posición {2} del destino.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "El tipo que contiene el nombre privado “{0}” no se puede usar con --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Archivos de declaración de tipos que se incluirán en la compilación.", "Type_expected_1110": "Se esperaba un tipo.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Las aserciones de importación de tipos deben tener exactamente una clave - \"resolution-mode\" - con el valor \"import\" o \"require\".", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Los atributos de importación de tipos deben tener exactamente una clave, “resolution-mode”, con el valor “import” o “require”.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creación de una instancia de tipo es excesivamente profunda y posiblemente infinita.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Se hace referencia al tipo directa o indirectamente en la devolución de llamada de entrega de su propio método \"then\".", "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "No se puede resolver la signatura de elemento Decorator de un método cuando se llama como expresión.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "No se puede resolver la signatura de elemento Decorator de un parámetro cuando se llama como expresión.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "No se puede resolver la signatura de elemento Decorator de una propiedad cuando se llama como expresión.", + "Undetermined_character_escape_1513": "Escape de caracteres no determinado.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "“{0}” inesperado. ¿Desea escaparlo con barra diagonal inversa?", "Unexpected_end_of_text_1126": "Final de texto inesperado.", "Unexpected_keyword_or_identifier_1434": "Identificador o palabra clave inesperados.", "Unexpected_token_1012": "Token inesperado.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. ¿Pretendía usar \"{'>'}\" o \">\"?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. ¿Pretendía usar \"{'}'}\" o \"}\"?", "Unexpected_token_expected_1179": "Token inesperado. Se esperaba \"{\".", + "Unicode_escape_sequence_cannot_appear_here_17021": "La secuencia de escape Unicode no puede aparecer aquí.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Las secuencias de escape Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Las expresiones de valor de propiedad Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nombre de propiedad Unicode desconocido.", + "Unknown_Unicode_property_name_or_value_1529": "Nombre o valor de propiedad Unicode desconocido.", + "Unknown_Unicode_property_value_1526": "Valor de propiedad Unicode desconocido.", "Unknown_build_option_0_5072": "Opción de compilación \"{0}\" desconocida.", "Unknown_build_option_0_Did_you_mean_1_5077": "Opción de compilación \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", "Unknown_compiler_option_0_5023": "Opción '{0}' del compilador desconocida.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opción del compilador \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Identificador o palabra clave desconocidos. ¿Quiso decir \"{0}\"?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opción 'excludes' desconocida. ¿Quería decir 'exclude'?", + "Unknown_regular_expression_flag_1499": "Marca de expresión regular desconocida.", "Unknown_type_acquisition_option_0_17010": "Opción '{0}' de adquisición de tipos desconocida.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opción de adquisición de tipos \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", "Unknown_watch_option_0_5078": "Opción de inspección \"{0}\" desconocida.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Etiqueta no usada.", "Unused_ts_expect_error_directive_2578": "Directiva \"@ts-expect-error\" no usada.", "Update_import_from_0_90058": "Actualizar importación desde “{0}”", - "Updating_output_of_project_0_6373": "Actualizando la salida del proyecto \"{0}\"...", + "Update_modifiers_of_0_90061": "Actualizar modificadores de “{0}”", "Updating_output_timestamps_of_project_0_6359": "Actualizando las marcas de hora de salida del proyecto \"{0}\"...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Actualizando las marcas de hora de salida no modificadas del proyecto \"{0}\"...", "Use_0_95174": "Usar `{0}`.", + "Use_0_instead_5106": "Use “{0}” en su lugar.", "Use_Number_isNaN_in_all_conditions_95175": "Use \"Number.isNaN\" en todas las condiciones.", "Use_element_access_for_0_95145": "Usar acceso de elemento para \"{0}\"", "Use_element_access_for_all_undeclared_properties_95146": "Use el acceso de elemento para todas las propiedades no declaradas.", + "Use_import_type_95180": "Usar “import type”", "Use_synthetic_default_member_95016": "Use el miembro sintético \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use el campo “exports” de package.json al resolver las importaciones de paquetes.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use el campo “imports” de package.json al resolver importaciones.", + "Use_type_0_95181": "Usar “type {0}”", "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subruta '{1}' con destino '{2}'.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "El uso de una cadena en una instrucción \"for...of\" solo se admite en ECMAScript 5 y versiones posteriores.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Con --build, -b hará que tsc se comporte más como un orquestador de compilación que como un compilador. Se usa para desencadenar la compilación de proyectos compuestos, sobre los que puede obtener más información en {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Se esperaba una declaración de variable.", "Variable_declaration_list_cannot_be_empty_1123": "La lista de declaraciones de variable no puede estar vacía.", "Variable_declaration_not_allowed_at_this_location_1440": "No se permite una declaración de variable en esta ubicación.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable debe tener una anotación de tipo explícita con --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Las variables con varias declaraciones no se pueden insertar.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "El elemento variádico en la posición {0} del origen no coincide con el elemento en la posición {1} del destino.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Las anotaciones de varianza solo se admiten en alias de tipo para los tipos objeto, función, constructor y asignado.", "Version_0_6029": "Versión {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Al comprobar tipos, tenga en cuenta \"null\" y \"undefined\".", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Si se debe mantener la salida de la consola no actualizada en el modo de inspección en lugar de borrar la pantalla.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos los caracteres no válidos en un contenedor de expresiones", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Incluir todas las expresiones de decorador no válidas entre paréntesis", "Wrap_all_object_literal_with_parentheses_95116": "Encapsular todos los literales de objeto entre paréntesis", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Encapsular todos los JSX no primarios en el fragmento de JSX", "Wrap_in_JSX_fragment_95120": "Ajustar en fragmento de JSX", + "Wrap_in_parentheses_95194": "Incluir entre paréntesis", "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular el carácter no válido en un contenedor de expresiones", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Encapsular el cuerpo siguiente entre paréntesis, lo cual debe ser un literal de objeto", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Puede obtener información sobre todas las opciones del compilador en {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Las signaturas de índice \"{0}\" y \"{1}\" no son compatibles.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Las operaciones \"{0}\" y \"{1}\" no se pueden mezclar sin paréntesis.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" se especifica dos veces. El atributo denominado \"{0}\" se sobrescribirá.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "“{0}” al final de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "“{0}” al principio de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" solo se puede importar si se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" solo se puede importar si se usa una importación predeterminada.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o una importación predeterminada.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o una importación predeterminada.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "\"{0}\" no se puede compilar bajo \"--isolatedModules\" porque se considera un archivo de script global. Agregue una instrucción import o export, o una instrucción \"export {}\" vacía para convertirla en un módulo.", "_0_cannot_be_used_as_a_JSX_component_2786": "No se puede usar \"{0}\" como componente JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "No se puede usar \"{0}\" como valor porque se exportó mediante \"export type\".", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "No se puede usar \"{0}\" como valor porque se importó mediante \"import type\".", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Los componentes \"{0}\" no aceptan el texto como elemento secundario. El texto de JSX tiene el tipo \"string\", pero el tipo que se esperaba de \"{1}\" es \"{2}\".", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Puede crearse una instancia de \"{0}\" con un tipo arbitrario que podría no estar relacionado con \"{1}\".", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Las declaraciones “{0}” solo se pueden declarar dentro de un bloque.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Las declaraciones \"{0}\" solo se pueden usar en los archivos TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Las declaraciones “{0}” no pueden tener patrones de enlace.", + "_0_declarations_must_be_initialized_1155": "Las declaraciones “{0}” deben inicializarse.", "_0_expected_1005": "Se esperaba '{0}'.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}” tiene un tipo de cadena, pero debe tener sintaxis de cadena reconocible sintácticamente cuando “isolatedModules” está habilitado.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" no tiene ningún miembro exportado con el nombre \"{1}\". ¿Pretendía usar \"{2}\"?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" tiene un tipo de valor devuelto \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a este directa o indirectamente en una de sus expresiones return.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "El tipo de índice \"{0}\"' \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' es un elemento primitivo, pero '{1}' es un objeto contenedor. Use '{0}' preferentemente cuando sea posible.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' es un tipo y no se puede importar en archivos JavaScript. Use '{1}' en una anotación de tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "\"{0}\" es un tipo y debe importarse mediante una importación de solo tipo cuando \"preserveValueImports\" y \"isolatedModules\" estén habilitados.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}” es un tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' es un cambio de nombre de '{1}' sin usar. ¿Quería usarlo como una anotación de tipo?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" puede asignarse a la restricción de tipo \"{1}\", pero no se pudo crear una instancia de \"{1}\" con un subtipo distinto de la restricción \"{2}\".", "_0_is_automatically_exported_here_18044": "'{0}' se exporta automáticamente aquí.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "La lista '{0}' no puede estar vacía.", "_0_modifier_already_seen_1030": "El modificador '{0}' ya se ha visto.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una clase, interfaz o alias de tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una función, método o clase", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "El modificador '{0}' no puede aparecer en una declaración de constructor.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "El modificador '{0}' no puede aparecer en un módulo o un elemento de espacio de nombres.", "_0_modifier_cannot_appear_on_a_parameter_1090": "El modificador '{0}' no puede aparecer en un parámetro.", "_0_modifier_cannot_appear_on_a_type_member_1070": "El modificador '{0}' no puede aparecer en un miembro de tipo.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "El modificador “{0}” no puede aparecer en un parámetro de tipo", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "El modificador “{0}” no puede aparecer en una declaración “using”.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "El modificador “{0}” no puede aparecer en una declaración “await using”.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "El modificador '{0}' no puede aparecer en una signatura de índice.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "El modificador \"{0}\" no puede aparecer en elementos de clase de este tipo.", "_0_modifier_cannot_be_used_here_1042": "El modificador '{0}' no se puede usar aquí.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "El modificador '{0}' no se puede usar con el modificador '{1}'.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "El modificador \"{0}\" no se puede usar con un identificador privado.", "_0_modifier_must_precede_1_modifier_1029": "El modificador \"{0}\" debe preceder al modificador \"{1}\".", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}” debe ir seguido de una expresión de valor de propiedad Unicode entre llaves.", "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" necesita una anotación de tipo explícito.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' solo hace referencia a un tipo, pero aquí se usa como espacio de nombres.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' solo hace referencia a un tipo, pero aquí se usa como valor.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" solo hace referencia a un tipo, pero aquí se usa como valor. ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a es2015 o posterior.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' hace referencia a un elemento UMD global, pero el archivo actual es un módulo. Puede agregar una importación en su lugar.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" hace referencia a un valor, pero aquí se usa como tipo. ¿Quiso decir \"typeof {0}\"?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "\"{0}\" se resuelve como una declaración de solo tipo y debe importarse mediante una importación de solo tipo cuando \"preserveValueImports\" y \"isolatedModules\" estén habilitados.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "\"{0}\" se resuelve como una declaración de solo tipo y debe volverse a exportar con un tipo de reexportación solo cuando esté habilitada la opción \"isolatedModules\".", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}” se resuelve en una declaración de solo tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}” se resuelve como una declaración de solo tipo y debe volverse a exportar con un tipo de reexportación solo cuando esté habilitada la opción “{1}”.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" debe establecerse dentro del objeto \"compilerOptions\" del archivo .json de configuración", "_0_tag_already_specified_1223": "La etiqueta '{0}' ya se ha especificado.", "_0_was_also_declared_here_6203": "\"{0}\" también se ha declarado aquí.", @@ -1780,19 +1981,22 @@ "and_here_6204": "y aquí.", "arguments_cannot_be_referenced_in_property_initializers_2815": "no se puede hacer referencia a «arguments» en los inicializadores de propiedad.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trate los archivos con importaciones, exportaciones, import.meta, jsx (con jsx: react-jsx) o formato esm (con el módulo: node16+) como módulos.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "La expresión “await” no se puede usar dentro de un bloque estático de clase.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Las expresiones \"await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Las expresiones \"await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Las expresiones \"await\" no se pueden usar en un inicializador de parámetros.", "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" no tiene efecto en el tipo de esta expresión.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Las declaraciones “await using” solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Las declaraciones “await using” solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Las instrucciones “await using” no se pueden usar dentro de un bloque estático de clase.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "La opción \"baseUrl\" está establecida en \"{0}\", se usará este valor para resolver el nombre de módulo no relativo \"{1}\".", + "c_must_be_followed_by_an_ASCII_letter_1512": "“\\c” debe ir seguido de una letra ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" solo se puede usar al principio de un archivo.", "case_or_default_expected_1130": "Se esperaba \"case\" o \"default\".", "catch_or_finally_expected_1472": "se esperaba \"catch\" o \"finally\".", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Las declaraciones \"const\" solo se pueden declarar dentro de un bloque.", - "const_declarations_must_be_initialized_1155": "Las declaraciones \"const\" deben inicializarse.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor no finito.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor \"NaN\" no permitido.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Los inicializadores de miembros de enumeración const solo pueden contener valores literales y otros valores de enumeración calculados.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Los inicializadores de miembro de enumeración const deben ser expresiones constantes.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Las enumeraciones \"const\" solo se pueden usar en expresiones de acceso de propiedad o índice, o en la parte derecha de una declaración de importación, una asignación de exportación o una consulta de tipo.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "El elemento \"constructor\" no se puede usar como nombre de propiedad de parámetro.", "constructor_is_a_reserved_word_18012": "\"#constructor\" es una palabra reservada.", @@ -1811,13 +2015,14 @@ "file_6025": "archivo", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Los bucles \"for await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Los bucles \"for await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Los bucles “for await” no se pueden usar dentro de un bloque estático de clase.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Los descriptores de acceso \"get\" y \"set\" no pueden declarar parámetros \"this\".", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", si se especifica \"archivos\"; de lo contrario, \"[\"**/*\"]5D;\"", "implements_clause_already_seen_1175": "La cláusula \"implements\" ya se ha visto.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Las cláusulas \"implements\" solo se pueden usar en los archivos TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" solo se puede usar en los archivos TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Las declaraciones \"infer\" solo se permiten en la cláusula \"extends\" de un tipo condicional.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Las declaraciones \"let\" solo se pueden declarar dentro de un bloque.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "“\\k” debe ir seguido de un nombre de grupo de captura entre corchetes angulares.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "No se permite usar \"let\" como nombre en las declaraciones \"let\" o \"const\".", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "módulo === \"AMD\" o \"UMD\" o \"System\" o \"ES6\", después, \"Classic\", de lo contrario \"Node\"", "module_system_or_esModuleInterop_6904": "módulo === \"system\" o esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "El archivo \"package.json\" no tiene ninguna entrada \"typesVersions\" que coincida con la versión \"{0}\".", "package_json_had_a_falsy_0_field_6220": "El archivo \"package.json\" tenía un campo \"{0}\" false.", "package_json_has_0_field_1_that_references_2_6101": "'package.json' tiene el campo '{1}' de '{0}' que hace referencia a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "“package.json” tiene un campo “peerDependencies”.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que no es un intervalo de SemVer válido.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que coincide con la versión del compilador \"{1}\"; se busca un patrón que coincida con el nombre de módulo \"{2}\".", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "El archivo \"package.json\" tiene un campo \"typesVersions\" con asignaciones de ruta de acceso específicas de la versión.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "El ámbito package.json \"{0}\" tiene un tipo no válido para el destino del especificador \"{1}\"", "package_json_scope_0_has_no_imports_defined_6273": "El ámbito de package.json \"{0}\" no tiene importaciones definidas.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Se ha especificado la opción 'paths'. Se buscará un patrón que coincida con el nombre de módulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "“\\q” solo está disponible dentro de la clase de caracteres.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "“\\q” debe ir seguido de alternativas de cadena entre llaves.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "El modificador 'readonly' solo puede aparecer en una declaración de propiedad o una signatura de índice.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "El modificador de tipo \"readonly\" solo se permite en los tipos literales de matriz y de tupla.", "require_call_may_be_converted_to_an_import_80005": "La llamada a \"require\" puede convertirse en una importación.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Las aserciones \"modo de resolución\" solo se admiten cuando \"moduleResolution\" es \"node16\" o \"nodenext\".", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Las aserciones \"modo de resolución\" son inestables. Use TypeScript nocturno para silenciar este error. Intente actualizar con \"npm install -D typescript@next\".", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" solo se puede establecer para importaciones solamente de tipo.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" es la única clave válida para las aserciones de importación de tipos.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "“resolution-mode” es la única clave válida para los atributos de importación de tipos.", "resolution_mode_should_be_either_require_or_import_1453": "\"modo de resolución\" debe ser \"requerir\" o \"importar\".", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Se ha establecido la opción \"rootDirs\". Se usará para resolver el nombre de módulo relativo \"{0}\".", "super_can_only_be_referenced_in_a_derived_class_2335": "Solo se puede hacer referencia a \"super\" en una clase derivada.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "No se puede hacer referencia a \"this\" en un nombre de propiedad calculada.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "No se puede hace referencia a \"this\" en el cuerpo de un módulo o de un espacio de nombres.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "No se puede hacer referencia a \"this\" en un inicializador de propiedad estática.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "No se puede hacer referencia a \"this\" en argumentos de constructor.", "this_cannot_be_referenced_in_current_location_2332": "No se puede hacer referencia a \"this\" en la ubicación actual.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' tiene el tipo implícito 'any' porque no tiene una anotación de tipo.", "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" para ES2022 y versiones posteriores, incluido ESNext.", "true_if_composite_false_otherwise_6909": "\"true\", si \"composite\"; \"false\", en caso contrario", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "“true” cuando “moduleResolution” es “node16”, “nodenext” o “bundler”; en caso contrario, “false”.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: el compilador de TypeScript", "type_Colon_6902": "tipo:", "unique_symbol_types_are_not_allowed_here_1335": "Aquí no se permiten tipos \"unique symbol\".", diff --git a/node_modules/typescript/lib/fr/diagnosticMessages.generated.json b/node_modules/typescript/lib/fr/diagnosticMessages.generated.json index b962857b71..a158f31b22 100644 --- a/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/fr/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "TOUTES LES OPTIONS DU COMPILATEUR", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Impossible d'utiliser un modificateur '{0}' avec une déclaration d'importation.", "A_0_parameter_must_be_the_first_parameter_2680": "Un paramètre '{0}' doit être le premier paramètre.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Une balise JSDoc « @template » ne peut pas suivre une balise « @typedef », « @callback » ou « @overload »", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commentaire JSDoc '@typedef' ne peut pas contenir plusieurs balises '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Un littéral « bigint » ne peut pas être utilisé comme nom de propriété.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Un littéral bigint ne peut pas utiliser la notation exponentielle.", "A_bigint_literal_must_be_an_integer_1353": "Un littéral bigint doit être un entier.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un paramètre de modèle de liaison ne peut pas être facultatif dans une signature d'implémentation.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Une instruction 'break' peut être utilisée uniquement dans une itération englobante ou une instruction switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Une instruction 'break' peut accéder uniquement à une étiquette d'une instruction englobante.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Une classe de caractères ne doit pas contenir de ponctuation double réservée. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Une plage de classes de caractères ne doit pas être liée par une autre classe de caractères.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Une classe peut uniquement implémenter un identificateur/nom qualifié avec des arguments de type facultatifs.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Une classe peut implémenter uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Une classe ne peut pas étendre un type primitif comme « {0} ». Les classes peuvent uniquement étendre des valeurs pouvant être construites.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Une classe ne peut pas implémenter un type primitif tel que « {0} ». Elle ne peut implémenter que d’autres types d’objets nommés.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Une déclaration de classe sans modificateur 'default' doit porter un nom.", "A_class_member_cannot_have_the_0_keyword_1248": "Un membre de classe ne peut pas avoir le mot clé '{0}'.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Une expression avec virgule n'est pas autorisée dans un nom de propriété calculée.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Un constructeur ne peut pas avoir un paramètre 'this'.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Une instruction 'continue' peut uniquement être utilisée dans une instruction d'itération englobante.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Une instruction 'continue' peut accéder uniquement à une étiquette d'une instruction d'itération englobante.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nous ne pouvons pas importer un fichier de déclaration sans « import type ». Vouliez-vous importer un fichier d’implémentation « {0} » à la place ?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Impossible d'utiliser un modificateur 'declare' dans un contexte ambiant déjà défini.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un élément décoratif peut uniquement décorer une implémentation de méthode, pas une surcharge.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Une clause 'default' ne peut pas figurer plusieurs fois dans une instruction 'switch'.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Une exportation par défaut doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Une assertion d'affectation définie ' !' n'est pas autorisée dans ce contexte.", "A_destructuring_declaration_must_have_an_initializer_1182": "Une déclaration de déstructuration doit avoir un initialiseur.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Un appel d'importation dynamique en ES5/ES3 nécessite le constructeur 'Promise'. Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Un appel d’importation dynamique dans ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Un appel d'importation dynamique retourne 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", "A_file_cannot_have_a_reference_to_itself_1006": "Un fichier ne peut pas contenir une référence à lui-même.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Une fonction qui retourne 'never' ne peut pas avoir de point de terminaison accessible.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Une fonction appelée avec le mot clé 'new' ne peut pas avoir un type 'this' dont la valeur est 'void'.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Une fonction dont le type déclaré n'est ni 'void', ni 'any', doit retourner une valeur.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Une fonction dont le type déclaré n'est ni « undefined », « void » ni « any » doit renvoyer une valeur.", "A_generator_cannot_have_a_void_type_annotation_2505": "Un générateur ne peut pas avoir d'annotation de type 'void'.", "A_get_accessor_cannot_have_parameters_1054": "Un accesseur 'get' ne peut pas avoir de paramètres.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un accesseur get doit être au moins aussi accessible que la méthode setter", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Une déclaration d'espace de noms ne peut pas se trouver dans un autre fichier que celui d'une classe ou d'une fonction avec laquelle elle est fusionnée.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Une déclaration d'espace de noms ne peut pas se trouver avant une classe ou une fonction avec laquelle elle est fusionnée.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Une déclaration d’espace de noms n’est autorisée qu’au niveau supérieur d’un espace de noms ou d’un module.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Une déclaration d’« espace de noms » ne doit pas être déclarée à l’aide du mot clé « module ». Utilisez plutôt le mot clé « espace de noms ».", "A_non_dry_build_would_build_project_0_6357": "Une build non-dry va générer le projet '{0}'", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Une build non-dry va supprimer les fichiers suivants : {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Une build non-dry va mettre à jour la sortie du projet '{0}'", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Une build non-dry va mettre à jour les horodatages de la sortie du projet '{0}'", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un initialiseur de paramètre est uniquement autorisé dans une implémentation de fonction ou de constructeur.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Impossible de déclarer une propriété de paramètre à l'aide d'un paramètre rest.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Un appel 'super' doit être la première instruction du constructeur à faire référence à « super » ou « this » lorsqu’une classe dérivée contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Une protection de type basée sur 'this' n'est pas compatible avec une protection de type basée sur des paramètres.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un type 'this' est disponible uniquement dans un membre non statique d'une classe ou d'une interface.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Un modificateur « export » de niveau supérieur ne peut pas être utilisé sur des déclarations de valeur dans un module CommonJS quand « verbatimModuleSyntax » est activé.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un fichier 'tsconfig.json' est déjà défini à l'emplacement '{0}'.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membre de tuple ne peut pas être à la fois facultatif et rest.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un type tuple ne peut pas être indexé avec une valeur négative.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Une expression 'yield' est autorisée uniquement dans le corps d'un générateur.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "La méthode abstraite '{0}' de la classe '{1}' n'est pas accessible au moyen de l'expression super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Les méthodes abstraites peuvent uniquement apparaître dans une classe abstraite.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Les propriétés abstraites peuvent uniquement apparaître dans une classe abstraite.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "La propriété abstraite '{0}' de la classe '{1}' n'est pas accessible dans le constructeur.", "Accessibility_modifier_already_seen_1028": "Modificateur d'accessibilité déjà rencontré.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Les accesseurs sont uniquement disponibles quand EcmaScript 5 ou version supérieure est ciblé.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Les accesseurs doivent être abstraits ou non abstraits.", "Add_0_to_unresolved_variable_90008": "Ajouter '{0}.' à la variable non résolue", "Add_a_return_statement_95111": "Ajouter une instruction return", + "Add_a_return_type_to_the_function_declaration_9031": "Ajoutez un type de retour à la déclaration de fonction.", + "Add_a_return_type_to_the_function_expression_9030": "Ajoutez un type de retour à l’expression de fonction.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Ajoutez un type de retour à la déclaration d’accesseur get.", + "Add_a_return_type_to_the_method_9034": "Ajouter un type de retour à la méthode", + "Add_a_type_annotation_to_the_parameter_0_9028": "Ajoutez une annotation de type au paramètre {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Ajoutez une annotation de type à la propriété {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Ajoutez une annotation de type à la variable {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ajoutez un type au paramètre de la déclaration d’accesseur set.", "Add_all_missing_async_modifiers_95041": "Ajouter tous les modificateurs 'async' manquants", "Add_all_missing_attributes_95168": "Ajouter tous les attributs manquants", "Add_all_missing_call_parentheses_95068": "Ajouter toutes les parenthèses d'appel manquantes", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Ajouter toutes les importations manquantes", "Add_all_missing_members_95022": "Ajouter tous les membres manquants", "Add_all_missing_override_modifiers_95162": "Ajouter tous les modificateurs 'override' manquants", + "Add_all_missing_parameters_95190": "Ajouter tous les paramètres manquants", "Add_all_missing_properties_95166": "Ajouter toutes les propriétés manquantes", "Add_all_missing_return_statement_95114": "Ajouter toutes les instructions return manquantes", "Add_all_missing_super_calls_95039": "Ajouter tous les appels super manquants", + "Add_all_missing_type_annotations_90067": "Ajouter toutes les annotations de type manquantes", + "Add_all_optional_parameters_95193": "Ajouter tous les paramètres optionnels", + "Add_annotation_of_type_0_90062": "Ajouter une annotation de type « {0} »", "Add_async_modifier_to_containing_function_90029": "Ajouter le modificateur async dans la fonction conteneur", "Add_await_95083": "Ajouter 'await'", "Add_await_to_initializer_for_0_95084": "Ajouter 'await' à l'initialiseur pour '{0}'", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Ajouter des initialiseurs à toutes les propriétés non initialisées", "Add_missing_attributes_95167": "Ajouter les attributs manquants", "Add_missing_call_parentheses_95067": "Ajouter les parenthèses d'appel manquantes", + "Add_missing_comma_for_object_member_completion_0_95187": "Ajoutez une virgule manquante pour l’achèvement de membre d’objet « {0} ».", "Add_missing_enum_member_0_95063": "Ajouter le membre enum manquant '{0}'", "Add_missing_function_declaration_0_95156": "Ajouter la déclaration de fonction manquante '{0}'", "Add_missing_new_operator_to_all_calls_95072": "Ajouter l'opérateur 'new' manquant à tous les appels", "Add_missing_new_operator_to_call_95071": "Ajouter l'opérateur 'new' manquant à l'appel", + "Add_missing_parameter_to_0_95188": "Ajouter le paramètre manquant dans « {0} »", + "Add_missing_parameters_to_0_95189": "Ajouter les paramètres manquants dans « {0} »", "Add_missing_properties_95165": "Ajouter des propriétés manquantes", "Add_missing_super_call_90001": "Ajouter l'appel manquant à 'super()'", "Add_missing_typeof_95052": "Ajouter un 'typeof' manquant", "Add_names_to_all_parameters_without_names_95073": "Ajouter des noms à tous les paramètres sans noms", + "Add_optional_parameter_to_0_95191": "Ajouter un paramètre optionnel à « {0} »", + "Add_optional_parameters_to_0_95192": "Ajouter des paramètres optionnels à '{0}'", "Add_or_remove_braces_in_an_arrow_function_95058": "Ajouter ou supprimer les accolades dans une fonction arrow", "Add_override_modifier_95160": "Ajouter un modificateur 'override'", "Add_parameter_name_90034": "Ajouter un nom de paramètre", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Ajouter un qualificateur à toutes les variables non résolues correspondant à un nom de membre", + "Add_return_type_0_90063": "Ajouter le type de retour « {0} »", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Ajoutez des satisfactions et une assertion de type à cette expression (satisfait T en tant que T) pour rendre le type explicite.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Ajouter des satisfactions et une assertion de type inlined avec « {0} »", "Add_to_all_uncalled_decorators_95044": "Ajouter '()' à tous les décorateurs non appelés", "Add_ts_ignore_to_all_error_messages_95042": "Ajouter '@ts-ignore' à tous les messages d'erreur", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Ajoutez « undefined » à un type lorsque vous y accédez à l’aide d’un index.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Autorisez les importations par défaut à partir des modules sans exportation par défaut. Cela n'affecte pas l'émission du code, juste le contrôle de type.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Autoriser « importation de x à partir de y » quand un module n’a pas d’exportation par défaut.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Autorisez l’importation de fonctions d’assistance à partir de tslib une fois par projet, au lieu de les inclure par fichier.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Autorisez les importations pour inclure des extensions de fichier TypeScript. Nécessite la définition de « --moduleResolution bundler » et de « --noEmit » ou « --emitDeclarationOnly ».", "Allow_javascript_files_to_be_compiled_6102": "Autorisez la compilation des fichiers JavaScript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Autorisez plusieurs dossiers à être considérés comme un seul lors de la résolution des modules.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Le nom de fichier déjà inclus '{0}' diffère du nom de fichier '{1}' uniquement par la casse.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Aucun argument correspondant à ce modèle de liaison n'a été fourni.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un opérande arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Une fonction arrow ne peut pas avoir un paramètre 'this'.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Une fonction ou méthode asynchrone en ES5/ES3 nécessite le constructeur 'Promise'. Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Une fonction ou méthode asynchrone dan ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Une fonction ou une méthode async doit retourner 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", "An_async_iterator_must_have_a_next_method_2519": "Un itérateur asynchrone doit comporter une méthode 'next()'.", "An_element_access_expression_should_take_an_argument_1011": "Une expression d'accès à un élément doit accepter un argument.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un module.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", "An_export_declaration_cannot_have_modifiers_1193": "Une déclaration d'exportation ne peut pas avoir de modificateurs.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Une déclaration « export = » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Une déclaration « export = » doit faire référence à une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Une « export default » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Une « export default » doit référencer une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Impossible de tester une expression de type 'void' pour déterminer si elle a la valeur true.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Une valeur d'échappement Unicode étendue doit être comprise entre 0x0 et 0x10FFFF inclus.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificateur ou un mot clé ne peut pas suivre immédiatement un littéral numérique.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Impossible de déclarer une implémentation dans des contextes ambiants.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias d'importation ne peut pas référencer une déclaration exportée à l'aide de 'export type'.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias d'importation ne peut pas référencer une déclaration importée à l'aide de 'import type'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias d'importation ne peut pas être résolu en une déclaration de type ou de type uniquement lorsque « verbatimModuleSyntax » est activé.", "An_import_alias_cannot_use_import_type_1392": "Un alias d'importation ne peut pas utiliser 'import type'", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un module.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", "An_import_declaration_cannot_have_modifiers_1191": "Une déclaration d'importation ne peut pas avoir de modificateurs.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Un chemin d'importation ne peut pas finir par une extension '{0}'. Importez '{1}' à la place.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un chemin d’importation ne peut se terminer que par une extension « {0} » lorsque « allowImportingTsExtensions » est activé.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Une signature d'index ne peut pas avoir de paramètre rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Une signature d'index ne peut pas avoir de virgule de fin.", "An_index_signature_must_have_a_type_annotation_1021": "Une signature d'index doit avoir une annotation de type.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Une expression d’instanciation ne peut pas être suivie d’un accès à la propriété.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Une interface peut uniquement étendre un identificateur/nom qualifié avec des arguments de type facultatifs.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Une interface peut étendre uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Une interface ne peut pas étendre un type primitif comme « {0} » ; une interface peut uniquement étendre des types nommés et des classes.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Une interface ne peut pas étendre un type primitif comme « {0} ». Elle peut uniquement étendre d’autres types d’objets nommés.", "An_interface_property_cannot_have_an_initializer_1246": "Une propriété d'interface ne peut pas avoir d'initialiseur.", "An_iterator_must_have_a_next_method_2489": "Un itérateur doit comporter une méthode 'next()'.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Un pragma @jsxFrag est nécessaire quand un pragma @jsx est utilisé avec des fragments JSX.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un littéral d’objet ne peut pas avoir plusieurs propriétés portant le même nom.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un littéral d'objet ne peut pas avoir une propriété et un accesseur portant le même nom.", "An_object_member_cannot_be_declared_optional_1162": "Impossible de déclarer un membre d'objet comme étant facultatif.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "La méthode « [Symbol.hasInstance] » d’un objet doit retourner une valeur booléenne pour qu’elle soit utilisée à droite d’une expression « instanceof ».", "An_optional_chain_cannot_contain_private_identifiers_18030": "Une chaîne facultative ne peut pas contenir d'identificateurs privés.", "An_optional_element_cannot_follow_a_rest_element_1266": "Un élément optional ne peut pas suivre un élément rest.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Une valeur externe de 'this' est mise en mémoire fantôme par ce conteneur.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Une signature de surcharge ne peut pas être déclarée en tant que générateur.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Une expression unaire avec l'opérateur '{0}' n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.", "Annotate_everything_with_types_from_JSDoc_95043": "Annoter tout avec des types de JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annoter les types de fonction expando de propriétés dans un espace de noms", "Annotate_with_type_from_JSDoc_95009": "Annoter avec le type de JSDoc", "Another_export_default_is_here_2753": "Une autre valeur par défaut d'exportation se trouve ici.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Les propriétés Unicode susceptibles de correspondre à plus d’un caractère unique ne sont disponibles que lorsque l’indicateur Unicode Sets (v) est défini.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tout ce qui peut correspondre à plus d’un seul caractère n’est pas valide dans une classe de caractères négatif.", "Are_you_missing_a_semicolon_2734": "Il vous manque un point-virgule ?", "Argument_expression_expected_1135": "Expression d'argument attendue.", "Argument_for_0_option_must_be_Colon_1_6046": "L'argument de l'option '{0}' doit être {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argument de type '{0}' n'est pas assignable au paramètre de type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Les arguments du paramètre de reste '{0}' n'ont pas été fournis.", "Array_element_destructuring_pattern_expected_1181": "Modèle de déstructuration d'élément de tableau attendu.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Les tableaux avec des éléments de diffusion ne peuvent pas être déduits avec --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Quand vous utilisez des assertions, chaque nom de la cible d'appel doit être déclaré à l'aide d'une annotation de type explicite.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Quand vous utilisez des assertions, la cible d'appel doit être un identificateur ou un nom qualifié.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L’affectation de propriétés à des fonctions sans les déclarer n’est pas prise en charge avec --isolatedDeclarations. Ajoutez une déclaration explicite pour les propriétés affectées à cette fonction.", "Asterisk_Slash_expected_1010": "'.' attendu.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Au moins un accesseur doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Les augmentations de la portée globale ne peuvent être directement imbriquées que dans les modules externes ou les déclarations de modules ambiants.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Les augmentations de la portée globale doivent comporter un modificateur 'declare', sauf si elles apparaissent déjà dans un contexte ambiant.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La détection automatique des typages est activée dans le projet '{0}'. Exécution de la passe de résolution supplémentaire pour le module '{1}' à l'aide de l'emplacement du cache '{2}'.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Impossible d’utiliser l’expression Await à l’intérieur d’un bloc statique de classe.", "BUILD_OPTIONS_6919": "OPTIONS DE BUILD", "Backwards_Compatibility_6253": "Rétrocompatibilité", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Les expressions de classe de base ne peuvent pas référencer les paramètres de type de classe.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Les littéraux BigInt ne sont pas disponibles quand la version ciblée est antérieure à ES2020.", "Binary_digit_expected_1177": "Chiffre binaire attendu.", "Binding_element_0_implicitly_has_an_1_type_7031": "L'élément de liaison '{0}' possède implicitement un type '{1}'.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Les éléments de liaison ne peuvent pas être exportés directement avec --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable de portée de bloc '{0}' utilisée avant sa déclaration.", "Build_a_composite_project_in_the_working_directory_6925": "Générer un projet composite dans le répertoire de travail.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Générer tous les projets, même ceux qui semblent être à jour.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Générer un ou plusieurs projets et leurs dépendances (s'ils sont obsolètes)", "Build_option_0_requires_a_value_of_type_1_5073": "L'option de build '{0}' nécessite une valeur de type {1}.", "Building_project_0_6358": "Génération du projet '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Les itérateurs intégrés sont instanciés avec un type « TReturn » « undefined » au lieu de « any ».", "COMMAND_LINE_FLAGS_6921": "INDICATEURS DE LIGNE DE COMMANDE", "COMMON_COMMANDS_6916": "COMMANDES COURANTES", "COMMON_COMPILER_OPTIONS_6920": "OPTIONS COURANTES DU COMPILATEUR", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Les types de retour de signature d'appel '{0}' et '{1}' sont incompatibles.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signature d'appel, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Les signatures d'appel sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "La cible de l'appel ne contient aucune signature.", "Can_only_convert_logical_AND_access_chains_95142": "Conversion uniquement de chaînes logiques ET de chaînes d'accès", "Can_only_convert_named_export_95164": "Peut uniquement convertir l’exportation nommée", "Can_only_convert_property_with_modifier_95137": "La propriété peut uniquement être convertie avec un modificateur", - "Can_only_convert_string_concatenation_95154": "Peut uniquement convertir une concaténation de chaîne", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Peut uniquement convertir des concaténations de chaînes et des littéraux de chaîne", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Impossible d'accéder à '{0}.{1}', car '{0}' est un type, mais pas un espace de noms. Voulez-vous plutôt récupérer le type de la propriété '{1}' dans '{0}' avec '{0}[\"{1}\"]' ?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Impossible d'accéder aux enums const ambiants quand l'indicateur '--isolatedModules' est fourni.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Désolé... Nous ne pouvons pas accéder à « {0} » à partir d’un autre fichier sans qualification lorsque « {1} » est activé. Utilisez « {2} » à la place.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Impossible d’accéder aux enums const ambiants quand '{0}' est activé.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Impossible d'assigner un type de constructeur '{0}' à un type de constructeur '{1}'.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Impossible d'attribuer un type de constructeur abstrait à un type de constructeur non abstrait.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une classe.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Définition de bibliothèque introuvable pour '{0}'.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Définition de bibliothèque introuvable pour '{0}'. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Le module '{0}' est introuvable. Utilisez '--resolveJsonModule' pour importer le module avec l'extension '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Le module '{0}' est introuvable. Vouliez-vous affecter à l'option 'moduleResolution' la valeur 'node' ou ajouter des alias à l'option 'paths' ?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Le module « {0} » est introuvable. Vouliez-vous définir l’option « moduleResolution » sur la valeur « node » ou ajouter des alias à l’option « paths » ?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Impossible de localiser le module '{0}' ou les déclarations de type correspondantes.", "Cannot_find_name_0_2304": "Le nom '{0}' est introuvable.", "Cannot_find_name_0_Did_you_mean_1_2552": "Le nom '{0}' est introuvable. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Le nom « {0} » est introuvable. Voulez-vous écrire ceci dans une fonction asynchrone ?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{1}' ou une version ultérieure.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' pour inclure 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`, puis ajoutez « bun » au champ types de votre fichier tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha'.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha', puis ajoutez 'jest' ou 'mocha' au champ types de votre fichier tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour jQuery ? Essayez 'npm i --save-dev @types/jquery'.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la déstructuration de tableau envoie toujours '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la diffusion de tableau envoie toujours '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la boucle for-of envoie toujours '{0}'.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Impossible de préfixer le projet '{0}', car 'outFile' n'est pas défini", + "Cannot_move_statements_to_the_selected_file_95183": "Désolé... Nous ne pouvons pas déplacer les instructions vers le fichier sélectionné", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Désolé... Nous ne pouvons pas déplacer vers le fichier. Le fichier sélectionné n’est pas valide", "Cannot_read_file_0_5083": "Impossible de lire le fichier '{0}'.", "Cannot_read_file_0_Colon_1_5012": "Impossible de lire le fichier '{0}' : {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Impossible de redéclarer la variable de portée de bloc '{0}'.", "Cannot_redeclare_exported_variable_0_2323": "Impossible de redéclarer la variable exportée '{0}'.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Impossible de redéclarer l'identificateur '{0}' dans la clause catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Impossible de démarrer un appel de fonction dans une annotation de type.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Impossible de mettre à jour la sortie du projet '{0}', car une erreur s'est produite durant la lecture du fichier '{1}'", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Impossible d'utiliser JSX, sauf si l'indicateur '--jsx' est fourni.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Impossible d’utiliser « export import » sur un espace de noms de type ou de type uniquement lorsque l’indicateur « --isolatedModules » est fourni.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Désolé... Nous ne pouvons pas utiliser « export import » sur un type ou espace de noms de type uniquement lorsque l’indicateur « {0} » est activé.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Impossible d'utiliser des importations, des exportations ou des augmentations de module quand '--module' a la valeur 'none'.", "Cannot_use_namespace_0_as_a_type_2709": "Impossible d'utiliser l'espace de noms '{0}' en tant que type.", "Cannot_use_namespace_0_as_a_value_2708": "Impossible d'utiliser l'espace de noms '{0}' en tant que valeur.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Changer 'extends' en 'implements'", "Change_spelling_to_0_90022": "Changer l'orthographe en '{0}'", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Recherchez les propriétés de classe déclarées mais non définies dans le constructeur.", + "Check_side_effect_imports_6806": "Vérifiez les importations d’effet secondaire.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Vérifiez que les arguments des méthodes « bind », « call » et « apply » correspondent à la fonction d’origine.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Vérification en cours pour déterminer si '{0}' est le préfixe correspondant le plus long pour '{1}' - '{2}'.", "Circular_definition_of_import_alias_0_2303": "Définition circulaire de l'alias d'importation '{0}'.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "La déclaration de classe ne peut pas implémenter la liste de surcharge pour «{0}».", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Les déclarations de classes ne peuvent pas avoir plusieurs balises '@augments' ou '@extends'.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Impossible d'utiliser des éléments décoratifs de classe avec un identificateur privé static. Supprimez l'élément décoratif expérimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Le champ de classe « {0} » défini par la classe parente n’est pas accessible dans la classe enfant via super.", "Class_name_cannot_be_0_2414": "Le nom de la classe ne peut pas être '{0}'.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Le nom de la classe ne peut pas être 'Object' quand ES5 est ciblé avec le module {0}.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Le côté statique de la classe '{0}' étend de manière incorrecte le côté statique de la classe de base '{1}'.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Options de ligne de commande", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compilez le projet en fonction du chemin de son fichier config ou d'un dossier contenant 'tsconfig.json'.", "Compiler_Diagnostics_6251": "Diagnostics du compilateur", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "L’option du compilateur « {0} » ne peut pas recevoir une chaîne vide.", "Compiler_option_0_expects_an_argument_6044": "L'option de compilateur '{0}' attend an argument.", "Compiler_option_0_may_not_be_used_with_build_5094": "L’option '--{0}' du compilateur ne peut pas être utilisée avec '--build'.", "Compiler_option_0_may_only_be_used_with_build_5093": "Option du compilateur '--{0}' ne peut être utilisée qu’avec '--build'.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Les projets composites ne doivent pas désactiver l'émission de déclaration.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Les projets composites ne doivent pas désactiver la compilation incrémentielle.", "Computed_from_the_list_of_input_files_6911": "Calculé à partir de la liste des fichiers d’entrée", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Les propriétés calculées doivent être des littéraux de chaîne ou de nombre, des variables ou des expressions en pointillé avec --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "Les noms de propriétés calculées ne sont pas autorisés dans les enums.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Les noms de propriétés calculées sur des littéraux de classe ou d’objet ne peuvent pas être déduits avec --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Les valeurs calculées ne sont pas autorisées dans un enum avec des membres ayant une valeur de chaîne.", "Concatenate_and_emit_output_to_single_file_6001": "Concaténer la sortie et l'émettre vers un seul fichier.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Définitions en conflit pour '{0}' sur '{1}' et '{2}'. Installez une version spécifique de cette bibliothèque pour résoudre le conflit.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Conditions à définir en plus des valeurs par défaut spécifiques au résolveur lors de la résolution des importations.", "Conflicts_are_in_this_file_6201": "Il existe des conflits dans ce fichier.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Envisagez d’ajouter un modificateur « declare » à cette classe.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Les types de retour de signature de construction '{0}' et '{1}' sont incompatibles.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Convertir '{0}' en type d'objet mappé", "Convert_all_const_to_let_95102": "Convertir tous les 'const' en 'let'", "Convert_all_constructor_functions_to_classes_95045": "Convertir toutes les fonctions de constructeur en classes", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Convertir toutes les importations non utilisées en tant que valeur en importations de types uniquement", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir tous les caractères non valides en code d'entité HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir tous les types réexportés en exportations de types uniquement", "Convert_all_require_to_import_95048": "Convertir tous les 'require' en 'import'", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Tout convertir en littéraux numériques bigint", "Convert_all_to_default_imports_95035": "Convertir tout en importations par défaut", "Convert_all_type_literals_to_mapped_type_95021": "Convertir tous les littéraux de type en type mappé", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertissez tous les typedef en types TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Convertir une fonction arrow ou une expression de fonction", "Convert_const_to_let_95093": "Convertir 'const' en 'let'", "Convert_default_export_to_named_export_95061": "Convertir l'exportation par défaut en exportation nommée", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Convertir en expression de chaîne facultative", "Convert_to_template_string_95096": "Convertir en chaîne de modèle", "Convert_to_type_only_export_1364": "Convertir en exportation de type uniquement", - "Convert_to_type_only_import_1373": "Convertir en importation de type uniquement", + "Convert_typedef_to_TypeScript_type_95176": "Convertissez typedef en type TypeScript.", "Corrupted_locale_file_0_6051": "Fichier de paramètres régionaux endommagé : {0}.", "Could_not_convert_to_anonymous_function_95153": "Impossible de convertir en fonction anonyme", "Could_not_convert_to_arrow_function_95151": "Impossible de convertir en fonction arrow", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Le nom «{0}» est introuvable. Voulez-vous dire «{1}» ?", "Could_not_find_namespace_import_or_named_imports_95132": "Impossible de localiser l'importation d'espace de noms ou les importations nommées", "Could_not_find_property_for_which_to_generate_accessor_95135": "Impossible de localiser la propriété dont l'accesseur doit être généré", + "Could_not_find_variable_to_inline_95185": "Désolé... Nous n’avons pas pu trouver de variable à intégrer.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Impossible de résoudre le chemin '{0}' avec les extensions {1}.", "Could_not_write_file_0_Colon_1_5033": "Impossible d'écrire le fichier '{0}' : {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Créez des fichiers de mappage source pour les fichiers JavaScript émis.", "Create_sourcemaps_for_d_ts_files_6614": "Créez des mappage de source pour les fichiers d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crée un tsconfig.json avec les paramètres recommandés dans le répertoire de travail.", "DIRECTORY_6038": "RÉPERTOIRE", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Les séquences d’échappement décimales et les références arrière ne sont pas autorisées dans une classe de caractères.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Les décimales avec des zéros de début ne sont pas autorisées.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Cette déclaration augmente la déclaration dans un autre fichier. Cette opération ne peut pas être sérialisée.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "L’émission de déclaration pour ce fichier nécessite la conservation de cette importation pour des augmentations. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}' à partir du module '{1}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "L’émission de déclaration pour ce paramètre nécessite l’ajout implicite non défini à son type. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", "Declaration_expected_1146": "Déclaration attendue.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Le nom de la déclaration est en conflit avec l'identificateur global intégré '{0}'.", "Declaration_or_statement_expected_1128": "Déclaration ou instruction attendue.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Déclaration ou instruction attendue. Ce '=' suit un bloc d'instructions, donc si vous avez l'intention d'écrire une affectation de déstructuration, vous devrez peut-être mettre l'ensemble de l'affectation entre parenthèses.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Une déclaration ou instruction est attendue. Ce '=' suit un bloc d’instructions. Si vous avez l’intention d'écrire une affectation de déstructuration, il est possible que vous deviez mettre l’ensemble de l’affectation entre parenthèses.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Les déclarations avec des assertions d'affectation définies doivent également avoir des annotations de type.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Les déclarations avec des initialiseurs ne peuvent pas avoir également des assertions d'affectation définies.", "Declare_a_private_field_named_0_90053": "Déclarez un champ privé nommé '{0}'.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Déclarer la propriété statique '{0}'", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Le type de retour de la fonction de décorateur '{0}' n’est pas attribuable au type '{1}'.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Le type de retour de la fonction de décorateur est '{0}' mais doit être 'void' ou 'any'.", + "Decorator_used_before_export_here_1486": "Élément décoratif utilisé ci avant « export ».", "Decorators_are_not_valid_here_1206": "Les éléments décoratifs ne sont pas valides ici.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Impossible d'appliquer des éléments décoratifs à plusieurs accesseurs get/set du même nom.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Il est possible que les éléments décoratifs ne soient pas appliqués aux paramètres 'this'.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Les éléments décoratifs ne peuvent pas apparaître après « export » ou « export default » s’ils apparaissent également avant « export ».", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Les éléments décoratifs doivent précéder le nom et tous les mots clés des déclarations de propriété.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Les variables de clause catch par défaut sont « unknown » au lieu de « any ».", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'exportation par défaut du module a utilisé ou utilise le nom privé '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Les exportations par défaut ne peuvent peut pas être déduites avec --isolatedDeclarations.", "Default_library_1424": "Bibliothèque par défaut", "Default_library_for_target_0_1425": "Bibliothèque par défaut pour la cible '{0}'", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Les définitions des identificateurs suivants sont en conflit avec celles d'un autre fichier : {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Désactivez l’effacement des déclarations « const enum » dans le code généré.", "Disable_error_reporting_for_unreachable_code_6603": "Désactivez le rapport d’erreurs pour le code inaccessible.", "Disable_error_reporting_for_unused_labels_6604": "Désactivez le rapport d’erreurs pour les étiquettes inutilisées.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Désactivez la vérification complète des types (seules les erreurs critiques d’analyse et d’émission sont signalées).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Désactiver la création de fonctions d'assistance personnalisées comme «__extends» dans la sortie compilée.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Désactivez l’inclusion des fichiers de bibliothèque, y compris la valeur par défaut de lib.d.ts.", "Disable_loading_referenced_projects_6235": "Désactivez le chargement des projets référencés.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Ne signalez pas les erreurs pour le code inaccessible.", "Do_not_report_errors_on_unused_labels_6074": "Ne signalez pas les erreurs pour les étiquettes inutilisées.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Ne pas résoudre le chemin réel des liens symboliques.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Ne transformez ou n’elidez pas les importations ou exportations non marquées en tant que type uniquement, en veillant à ce qu’elles soient écrites dans le format du fichier de sortie en fonction du paramètre « module ».", "Do_not_truncate_error_messages_6165": "Ne tronquez pas les messages d'erreur.", "Duplicate_function_implementation_2393": "Implémentation de fonction en double.", "Duplicate_identifier_0_2300": "Identificateur '{0}' en double.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Doublon de signature d’index pour le type « {0} ».", "Duplicate_label_0_1114": "Étiquette '{0}' en double.", "Duplicate_property_0_2718": "Propriété dupliquée '{0}'.", + "Duplicate_regular_expression_flag_1500": "L’indicateur d’expression régulière est dupliqué.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Le spécificateur de l'importation dynamique doit être de type 'string', mais ici il est de type '{0}'.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Les importations dynamiques sont prises en charge uniquement lorsque l’indicateur '--module' a la valeur 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', ou 'nodenext'.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Les importations dynamiques peuvent accepter uniquement un spécificateur de module et une assertion facultative en tant qu’arguments.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Les importations dynamiques prennent uniquement en charge un deuxième argument lorsque l’option « --module » est définie sur « esnext », « node16 » ou « nodenext ».", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Les importations dynamiques peuvent accepter uniquement un spécificateur de module et un ensemble facultatif d’attributs en tant qu’arguments", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Les importations dynamiques prennent uniquement en charge un deuxième argument lorsque l’option « --module » est définie sur « esnext », « node16 », « nodenext » ou « preserve ».", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "La syntaxe ESM n’est pas autorisée dans un module CommonJS quand « module » a la valeur « preserve ».", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "La syntaxe ESM n'est pas autorisée dans un module CommonJS lorsque « verbatimModuleSyntax » est activé.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Chaque déclaration de '{0}.{1}' diffère dans sa valeur, où '{2}' était attendu, mais '{3}' a été donné.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Chaque membre du type union '{0}' a des signatures de construction, mais aucune de ces signatures n'est compatible avec les autres.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Chaque membre du type union '{0}' a des signatures, mais aucune de ces signatures n'est compatible avec les autres.", "Editor_Support_6249": "Prise en charge de l’Éditeur", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Activez le rapport d’erreurs dans les fichiers JavaScript vérifiés par type.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Activez le rapport d’erreurs lorsque les variables locales ne sont pas lues.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Activez le rapport d’erreurs lorsque « this » reçoit le type « any ».", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Activez la prise en charge expérimentale des éléments décoratifs de l’étape 2 de TC39.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Activez la prise en charge expérimentale des éléments décoratifs expérimentaux hérités.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Activez l’importation de fichiers avec n’importe quelle extension, à condition qu’un fichier de déclaration soit présent.", "Enable_importing_json_files_6689": "Activer l’importation des fichiers .json.", "Enable_project_compilation_6302": "Activer la compilation du projet", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Activez des méthodes 'bind', 'call' et 'apply' strictes sur les fonctions.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Assurez-vous que la casse est correcte dans les importations.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Assurez-vous que chaque fichier peut être recompilé en toute sécurité sans s’appuyer sur d’autres importations.", "Ensure_use_strict_is_always_emitted_6605": "Assurez-vous que « use strict » est toujours émis.", + "Entering_conditional_exports_6413": "Entrée dans des exportations conditionnelles.", "Entry_point_for_implicit_type_library_0_1420": "Point d'entrée pour la bibliothèque de types implicites '{0}'", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Point d'entrée pour la bibliothèque de types implicites '{0}' ayant le packageId '{1}'", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Les déclarations enum ne peuvent fusionner qu'avec des espaces de noms ou d'autres déclarations enum.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Les déclarations d'enum doivent toutes être const ou non const.", "Enum_member_expected_1132": "Membre enum attendu.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Le membre Enum suivant un membre numérique non littéral doit avoir un initialiseur lorsque « isolatedModules » est activé.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Les initialiseurs de membre enum doivent être calculables sans référence à des symboles externes avec --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "Un membre enum doit posséder un initialiseur.", "Enum_name_cannot_be_0_2431": "Le nom d'enum ne peut pas être '{0}'.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Le type enum '{0}' a des membres dont les initialiseurs ne sont pas des littéraux.", "Errors_Files_6041": "Fichiers d’erreurs", + "Escape_sequence_0_is_not_allowed_1488": "La séquence d’échappement « {0} » n’est pas autorisée.", "Examples_Colon_0_6026": "Exemples : {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complexité excessive comparant les types « {0} » et « {1} ».", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profondeur excessive de la pile pour la comparaison des types '{0}' et '{1}'.", + "Exiting_conditional_exports_6416": "Sortie des exportations conditionnelles.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Arguments de type {0}-{1} attendus ; indiquez-les avec la balise '@extends'.", "Expected_0_arguments_but_got_1_2554": "{0} arguments attendus, mais {1} reçus.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} arguments attendus, mais {1} reçus. Avez-vous oublié d'inclure 'void' dans votre argument de type pour 'Promise' ?", "Expected_0_type_arguments_but_got_1_2558": "{0} arguments de type attendus, mais {1} reçus.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Arguments de type {0} attendus ; indiquez-les avec la balise '@extends'.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 argument attendu, mais 0 obtenu. 'new Promise()' a besoin d’un indicateur JSDoc pour produire un 'resolve' qui peut être appelé sans arguments.", + "Expected_a_Unicode_property_name_1523": "Le nom de propriété Unicode est attendu.", + "Expected_a_Unicode_property_name_or_value_1527": "Une valeur ou un nom de propriété Unicode est attendu.", + "Expected_a_Unicode_property_value_1525": "La valeur de propriété Unicode est attendue.", + "Expected_a_capturing_group_name_1514": "Le nom de groupe de capture est attendu.", + "Expected_a_class_set_operand_1520": "Une opérande de jeu de classes est attendue.", "Expected_at_least_0_arguments_but_got_1_2555": "Au moins {0} arguments attendus, mais {1} reçus.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Balise de fermeture JSX correspondante attendue pour '{0}'.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Balise de fermeture correspondante attendue pour le fragment JSX.", "Expected_for_property_initializer_1442": "« = » attendu pour l’initialiseur de propriété.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Le type attendu du champ '{0}' dans 'package.json' est censé être '{1}'. Obtention de '{2}'.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "La prise en charge expérimentale des éléments décoratifs est une fonctionnalité susceptible de changer dans une prochaine version. Définissez l'option 'experimentalDecorators' dans votre fichier 'tsconfig' ou 'jsconfig' pour supprimer cet avertissement.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Spécification explicite du genre de résolution de module : '{0}'.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Impossible d'effectuer l'élévation à une puissance sur des valeurs 'bigint' sauf si l'option 'target' a la valeur 'es2016' ou une valeur qui correspond à une version ultérieure.", "Export_0_from_module_1_90059": "Exporter '{0}' à partir du module '{1}'", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportée '{0}' possède ou utilise le nom privé '{1}'.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Les exportations et les assignations d'exportation ne sont pas autorisées dans les augmentations de module.", "Expression_expected_1109": "Expression attendue.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L’expression doit être entre parenthèses pour être utilisée comme élément décoratif.", "Expression_or_comma_expected_1137": "Expression ou virgule attendue.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'expression produit un type de tuple trop grand pour être représenté.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'expression produit un type union trop complexe à représenter.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Expression résolue en '_super' et utilisée par le compilateur pour capturer la référence de classe de base.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'expression génère une déclaration de variable '_newTarget' que le compilateur utilise pour capturer la référence de méta-propriété 'new.target'.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Expression résolue en déclaration de variable '_this' et utilisée par le compilateur pour capturer la référence 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Le type d'expression ne peut pas être déduit avec --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clause Extends ne peut pas contenir d’expression avec --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clause Extends pour le type déduit « {0} » a ou utilise le nom privé « {1} ».", + "Extract_base_class_to_variable_90064": "Extraire la classe de base dans la variable", + "Extract_binding_expressions_to_variable_90066": "Extraire des expressions de liaison dans une variable", "Extract_constant_95006": "Extraire la constante", + "Extract_default_export_to_variable_90065": "Extraire l’exportation par défaut vers la variable", "Extract_function_95005": "Extraire la fonction", "Extract_to_0_in_1_95004": "Extraire vers {0} dans {1}", "Extract_to_0_in_1_scope_95008": "Extraire vers {0} dans la portée {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Extraire vers l'interface", "Extract_to_type_alias_95078": "Extraire vers l'alias de type", "Extract_to_typedef_95079": "Extraire vers typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraire dans la variable et remplacer par '{0} en tant que typeof {0}'", "Extract_type_95077": "Type d'extraction", "FILE_6035": "FICHIER", "FILE_OR_DIRECTORY_6040": "FICHIER OU RÉPERTOIRE", - "Failed_to_parse_file_0_Colon_1_5014": "Échec de l'analyse du fichier '{0}' : {1}.", + "Failed_to_find_peerDependency_0_6283": "Échec de la recherche de peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Échec de la résolution sous la condition «{0}».", "Fallthrough_case_in_switch_7029": "Case avec fallthrough dans une instruction switch.", "File_0_does_not_exist_6096": "Le fichier '{0}' n'existe pas.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Selon des recherches mises en cache antérieures, le fichier '{0}' n’existe pas.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Le fichier '{0}' existe. Utilisez-le comme résultat pour la résolution de noms.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Selon des recherches mises en cache antérieures, le fichier '{0}' existe.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Le fichier '{0}' existe - utilisez-le comme résultat de résolution de nom.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Le fichier '{0}' a une extension non prise en charge. Les seules extensions prises en charge sont {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Le fichier '{0}' a une extension non prise en charge. Il est ignoré.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Le fichier '{0}' est un fichier JavaScript. Est-ce que vous avez voulu activer l'option 'allowJs' ?", "File_0_is_not_a_module_2306": "Le fichier '{0}' n'est pas un module.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Le fichier '{0}' ne figure pas dans la liste de fichiers du projet '{1}'. Les projets doivent lister tous les fichiers ou utiliser un modèle 'include'.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Le fichier '{0}' ne se trouve pas sous 'rootDir' '{1}'. 'rootDir' est supposé contenir tous les fichiers sources.", "File_0_not_found_6053": "Fichier '{0}' introuvable.", "File_Management_6245": "Gestion de fichiers", + "File_appears_to_be_binary_1490": "Le fichier semble être binaire.", "File_change_detected_Starting_incremental_compilation_6032": "Modification de fichier détectée. Démarrage de la compilation incrémentielle...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Le fichier est un module CommonJS, car « {0} » n’a pas de champ « type »", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Le fichier est un module CommonJS, car « {0} » a un champ « type » dont la valeur n’est pas « module »", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Le fichier représente la sortie de la source de référence de projet '{0}'", "File_is_source_from_referenced_project_specified_here_1416": "Le fichier représente la source du projet référencé spécifié ici.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Le nom de fichier '{0}' diffère du nom de fichier '{1}' déjà inclus uniquement par la casse.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Le nom de fichier '{0}' a une extension '{1}' - recherche '{2}' à la place.", "File_name_0_has_a_1_extension_stripping_it_6132": "Le nom de fichier '{0}' a une extension '{1}'. Suppression de l'extension.", "File_redirects_to_file_0_1429": "Le fichier est redirigé vers le fichier '{0}'", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La spécification de fichier ne peut pas contenir un répertoire parent ('..') après un caractère générique de répertoire récursif ('**') : '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Corriger toutes les expressions où il manque éventuellement 'await'", "Fix_all_implicit_this_errors_95107": "Corriger toutes les erreurs implicites liées à 'this'", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corriger tous les types de retour incorrects des fonctions asynchrone", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Les boucles « for await » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", + "Fix_all_with_type_only_imports_95182": "Corriger tout avec des importations de type uniquement", "Found_0_errors_6217": "{0} erreurs trouvées.", "Found_0_errors_Watching_for_file_changes_6194": "{0} erreurs trouvées. Changements de fichier sous surveillance.", "Found_0_errors_in_1_files_6261": "Erreurs {0} trouvées dans les fichiers {1} .", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Erreurs {0} trouvées dans le même fichier, à partir de : {1}", "Found_1_error_6216": "1 erreur trouvée.", "Found_1_error_Watching_for_file_changes_6193": "1 erreur trouvée. Changements de fichier sous surveillance.", - "Found_1_error_in_1_6259": "1 erreur trouvée dans {1}", + "Found_1_error_in_0_6259": "1 erreur trouvée dans {0}", "Found_package_json_at_0_6099": "'package.json' trouvé sur '{0}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Les déclarations de fonction ne sont pas autorisées dans les blocs en mode strict durant le ciblage de la version 'ES3' ou 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Les déclarations de fonction ne sont pas autorisées dans les blocs en mode strict durant le ciblage de la version 'ES3' ou 'ES5'. Les définitions de classe sont automatiquement en mode strict.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Les déclarations de fonction ne sont pas autorisées dans les blocs en mode strict durant le ciblage de la version 'ES3' ou 'ES5'. Les modules sont automatiquement en mode strict.", + "Found_peerDependency_0_with_1_version_6282": "PeerDependency '{0}' trouvé avec '{1}' version.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ».", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les définitions de classe sont automatiquement en mode strict.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les modules sont automatiquement en mode strict.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'expression de fonction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour '{0}'.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implémentation de fonction est manquante ou ne suit pas immédiatement la déclaration.", "Function_implementation_name_must_be_0_2389": "Le nom de l'implémentation de fonction doit être '{0}'.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La fonction possède implicitement le type de retour 'any', car elle n'a pas d'annotation de type de retour, et est référencée directement ou indirectement dans l'une de ses expressions de retour.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "La fonction n'a pas d'instruction return de fin, et le type de retour n'inclut pas 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La fonction doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", "Function_not_implemented_95159": "Fonction non implémentée.", "Function_overload_must_be_static_2387": "La surcharge de fonction doit être statique.", "Function_overload_must_not_be_static_2388": "La surcharge de fonction ne doit pas être statique.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Identificateur attendu.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificateur attendu. '__esModule' est réservé en tant que marqueur exporté durant la transformation des modules ECMAScript.", "Identifier_or_string_literal_expected_1478": "Identificateur ou littéral de chaîne attendu", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificateur, littéral de chaîne ou littéral de nombre attendu.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si le package '{0}' expose réellement ce module, envoyez une demande de tirage (pull request) pour modifier 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si le package' {0} 'expose effectivement ce module, essayez d’ajouter un nouveau fichier de déclaration (. d. TS) contenant’declare module' {1} '; '", "Ignore_this_error_message_90019": "Ignorer ce message d'erreur", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implémenter l'interface '{0}'", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clause implements de la classe exportée '{0}' possède ou utilise le nom privé '{1}'.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversion implicite de 'symbol' en 'string' va échouer au moment de l'exécution. Incluez dans un wrapper cette expression en 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L’importation «{0}» est en conflit avec la valeur globale utilisée dans ce fichier. Elle doit donc être déclarée avec une importation de type uniquement lorsque ' isolatedModules ' est activé.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L’importation '{0}' est en conflit avec la valeur locale. Elle doit donc être déclarée avec une importation de type uniquement lorsque 'isolatedModules' est activé.", "Import_0_from_1_90013": "Importez '{0}' à partir de \"{1}\".", "Import_assertion_values_must_be_string_literal_expressions_2837": "Les valeurs d’assertion d’importation doivent être des expressions littérales de chaîne.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Les assertions d’importation ne sont pas autorisées sur les instructions qui transpilent en appels commonjs « require ».", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Les assertions d’importation ne sont prises en charge que lorsque l’option « --module » a la valeur « esnext » ou « nodenext ».", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Les assertions d’importation ne sont pas autorisées sur les instructions qui se compilent en appels CommonJS ' require'.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Les assertions d'importation ne sont prises en charge que lorsque l'option '--module' est définie sur 'esnext', 'nodenext' ou 'preserve'.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Les assertions d’importation ne peuvent pas être utilisées avec les importations ou exportations de type uniquement.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Vous ne pouvez pas utiliser l'assignation d'importation pour cibler des modules ECMAScript. Utilisez plutôt 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' ou un autre format de module.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Les valeurs d’attribut d’importation doivent être des expressions littérales de chaîne.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Les attributs d’importation ne sont pas autorisés sur les instructions qui se compilent en appels CommonJS ' require'.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Les attributs d’importation sont pris en charge uniquement lorsque l’option « --module » est définie sur « esnext », « nodenext » ou « preserve ».", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Les attributs d’importation ne peuvent pas être utilisés avec des importations ou des exportations de type uniquement.", "Import_declaration_0_is_using_private_name_1_4000": "La déclaration d'importation '{0}' utilise le nom privé '{1}'.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La déclaration d'importation est en conflit avec la déclaration locale de '{0}'.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Les déclarations d'importation dans un espace de noms ne peuvent pas référencer un module.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluez les fichiers sourcemap à l’intérieur du Code JavaScript émis.", "Includes_imports_of_types_referenced_by_0_90054": "Inclut les importations de types référencés par « {0} »", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "En incluant --watch, -w commence à regarder le projet actuel pour les modifications apportées au fichier. Une fois défini, vous pouvez configurer le mode espion avec :", + "Incomplete_quantifier_Digit_expected_1505": "Quantificateur incomplet. Chiffre attendu.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "La signature d’index pour le type « {0} » est manquante dans le type « {1} ».", "Index_signature_in_type_0_only_permits_reading_2542": "La signature d'index du type '{0}' autorise uniquement la lecture.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Les déclarations individuelles de la déclaration fusionnée '{0}' doivent toutes être exportées ou locales.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Déduire les types des paramètres à partir de l'utilisation", "Infer_this_type_of_0_from_usage_95080": "Déduire le type 'this' de '{0}' à partir de l'utilisation", "Infer_type_of_0_from_usage_95011": "Déduire le type de '{0}' à partir de l'utilisation", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L’inférence des expressions de classe n’est pas prise en charge avec --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Initialiser la propriété '{0}' dans le constructeur", "Initialize_static_property_0_90021": "Initialiser la propriété statique '{0}'", "Initializer_for_property_0_2811": "Initialiseur de la propriété '{0}'", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'initialiseur de la variable membre d'instance '{0}' ne peut pas référencer l'identificateur '{1}' déclaré dans le constructeur.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "L'initialiseur ne fournit aucune valeur pour cet élément de liaison, et ce dernier n'a pas de valeur par défaut.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Les initialiseurs ne sont pas autorisés dans les contextes ambiants.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialise un projet TypeScript et crée un fichier tsconfig.json.", + "Inline_variable_95184": "Variable inline", "Insert_command_line_options_and_files_from_a_file_6030": "Insérer les options de ligne de commande et les fichiers à partir d'un fichier texte.", "Install_0_95014": "Installer '{0}'", "Install_all_missing_types_packages_95033": "Installer tous les packages de types manquants", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nom de module non valide dans l'augmentation. Le module '{0}' est introuvable.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Chaîne facultative non valide à partir de la nouvelle expression. Voulez-vous appeler '{0}()' ?", "Invalid_reference_directive_syntax_1084": "Syntaxe de directive 'reference' non valide.", + "Invalid_syntax_in_decorator_1498": "Syntaxe non valide dans l’élément décoratif.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Utilisation non valide de « {0} ». Il ne peut pas être utilisé à l’intérieur d’un bloc statique de classe.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Utilisation non valide de '{0}'. Les modules sont automatiquement en mode strict.", "Invalid_use_of_0_in_strict_mode_1100": "Utilisation non valide de '{0}' en mode strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valeur non valide pour '--ignoreDeprecations'.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valeur non valide pour 'jsxFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valeur non valide pour 'jsxFragmentFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valeur non valide pour '--reactNamespace'. '{0}' n'est pas un identificateur valide.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Son type d'élément '{0}' n'est pas un élément JSX valide.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Son type d'instance '{0}' n'est pas un élément JSX valide.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Son type de retour '{0}' n'est pas un élément JSX valide.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Son type '{0}' n’est pas un type d’élément JSX valide.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La balise JSDoc '@{0} {1}' ne correspond pas à la clause 'extends {2}'.", "JSDoc_0_is_not_attached_to_a_class_8022": "La balise JSDoc '@{0}' n'est pas attachée à une classe.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' peut apparaître uniquement dans le dernier paramètre d'une signature.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom. Elle doit correspondre à 'arguments', si elle est de type tableau.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Le typedef JSDoc peut être converti en type TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La balise JSDoc '@typedef' doit avoir une annotation de type ou être suivie des balises '@property' ou '@member'.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Les typedefs JSDoc peuvent être convertis en types TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Les types JSDoc peuvent uniquement être utilisés dans les commentaires de la documentation.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Les types JSDoc peuvent être déplacés vers les types TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Les attributs JSX doivent uniquement être attribués à une 'expression' non vide.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Liste des dossiers à partir desquels inclure les définitions de type.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste des dossiers racines dont le contenu combiné représente la structure du projet au moment de l'exécution.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Chargement de '{0}' à partir du répertoire racine '{1}', emplacement candidat '{2}'.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Chargement du module '{0}' à partir du dossier 'node_modules'. Type du fichier cible '{1}'.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Chargement du module en tant que fichier/dossier. Emplacement du module candidat '{0}'. Type de fichier cible '{1}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Chargement du module «{0}» à partir du dossier « node_modules », types de fichiers cibles : {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Chargement du module en tant que fichier/dossier, emplacement du module candidat '{0}', types de fichiers cibles : {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Les paramètres régionaux doivent être sous la forme ou -. Par exemple, '{0}' ou '{1}'.", "Log_paths_used_during_the_moduleResolution_process_6706": "Chemins d’accès de journal utilisés pendant le processus « moduleResolution ».", "Longest_matching_prefix_for_0_is_1_6108": "Le préfixe correspondant le plus long pour '{0}' est '{1}'.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Faites en sorte que keyof retourne uniquement des chaînes au lieu de chaînes, de nombres ou de symboles. Option héritée.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Faire de l'appel à 'super()' la première instruction du constructeur", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Le type d'objet mappé a implicitement un type de modèle 'any'.", + "Mark_array_literal_as_const_90070": "Marquer le littéral du tableau comme const", "Matched_0_condition_1_6403": "Condition '{0}' correspondant à '{1}'.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Mise en correspondance par défaut du modèle include '**/*'", "Matched_by_include_pattern_0_in_1_1407": "Correspond au modèle include '{0}' dans '{1}'", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "La méthode '{0}' ne peut pas avoir d'implémentation, car elle est marquée comme étant abstraite.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom privé '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "La méthode doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", "Method_not_implemented_95158": "Méthode non implémentée.", "Modifiers_cannot_appear_here_1184": "Les modificateurs ne peuvent pas apparaître ici.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Le module '{0}' peut uniquement être importé par défaut à l'aide de l'indicateur '{1}'", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Le module '{0}' n'a aucun membre exporté '{1}'. Est-ce que vous avez voulu utiliser 'import {1} from {0}' à la place ?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Le module '{0}' est masqué par une déclaration locale portant le même nom.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Le module '{0}' utilise 'export =' et ne peut pas être utilisé avec 'export *'.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Le module '{0}' a été résolu en tant que module ambiant déclaré dans '{1}', car ce fichier n'a pas été modifié.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Le module '{0}' a été résolu en tant que module ambiant déclaré localement dans le fichier '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Le module «{0}» a été résolu en «{1}», mais « --allowArbitraryExtensions » n’est pas défini.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Le module '{0}' a été résolu en '{1}' mais '--jsx' n'est pas défini.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Le module '{0}' a été résolu en '{1}' mais '--resolveJsonModule' n'est pas utilisé.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Les noms de déclaration de module ne peuvent utiliser que des chaînes entre guillemets.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Échec de la résolution de module à l'aide de 'rootDirs'.", "Modules_6244": "Modules", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Déplacer les modificateurs d'élément de tuple étiqueté vers les étiquettes", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Déplacez l’expression dans l’exportation par défaut vers une variable et ajoutez-y une annotation de type.", "Move_to_a_new_file_95049": "Déplacer vers un nouveau fichier", + "Move_to_file_95178": "Déplacer vers le fichier", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Les séparateurs numériques consécutifs multiples ne sont pas autorisés.", "Multiple_constructor_implementations_are_not_allowed_2392": "Les implémentations de plusieurs constructeurs ne sont pas autorisées.", "NEWLINE_6061": "NOUVELLE LIGNE", "Name_is_not_valid_95136": "Le nom n'est pas valide", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Les groupes de capture nommés sont disponibles uniquement lorsque vous ciblez « ES2018 » ou une version ultérieure.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Les groupes de capture nommés portant le même nom doivent s’excluent mutuellement les uns des autres.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propriété nommée '{0}' des types '{1}' et '{2}' n'est pas identique.", "Namespace_0_has_no_exported_member_1_2694": "L'espace de noms '{0}' n'a aucun membre exporté '{1}'.", "Namespace_must_be_given_a_name_1437": "Un nom doit être attribué à l’espace de noms.", "Namespace_name_cannot_be_0_2819": "L’espace de noms ne peut pas être «{0}».", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Les espaces de noms ne sont pas autorisés dans les fichiers de script globaux lorsque «{0}» est activé. Si ce fichier n’est pas destiné à être un script global, définissez 'moduleDetection' sur 'force' ou ajoutez une instruction 'export {}' vide.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Ni les décorateurs ni les modificateurs ne peuvent être appliqués aux paramètres « this ».", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Aucun constructeur de base n'a le nombre spécifié d'arguments de type.", "No_constituent_of_type_0_is_callable_2755": "Aucun constituant de type '{0}' ne peut être appelé.", "No_constituent_of_type_0_is_constructable_2759": "Aucun constituant de type '{0}' ne peut être construit.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Aucune surcharge ne correspond à cet appel.", "No_type_could_be_extracted_from_this_type_node_95134": "Aucun type n'a pu être extrait de ce nœud de type", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Il n'existe aucune valeur dans l'étendue de la propriété raccourcie '{0}'. Vous devez en déclarez une, ou fournir un initialiseur.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non abstraite '{0}' n'implémente pas le membre abstrait '{1}' hérité de la classe '{2}'.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non abstraite « {0} » n'implémente pas le membre abstrait « {1} » hérité de la classe « {2} ».", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2} et {3} plus encore.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'expression de classe non abstraite '{0}' n'implémente pas le membre abstrait hérité '{0}' de la classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Les implémentations de l’expression de classe non abstraite sont manquantes pour les membres suivants de '{0}' : {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Il manque des implémentations d’expression de classe non abstraite pour les membres suivants de '{0}' : {1} et {2} plus.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Les assertions non null peuvent uniquement être utilisées dans les fichiers TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Les chemins non relatifs ne sont pas autorisés quand 'baseUrl' n'est pas défini. Avez-vous oublié './' au début ?", "Non_simple_parameter_declared_here_1348": "Paramètre non simple déclaré ici.", "Not_all_code_paths_return_a_value_7030": "Les chemins du code ne retournent pas tous une valeur.", "Not_all_constituents_of_type_0_are_callable_2756": "Tous les constituants de type '{0}' ne peuvent pas être appelés.", "Not_all_constituents_of_type_0_are_constructable_2760": "Tous les constituants de type '{0}' ne peuvent pas être construits.", + "Numbers_out_of_order_in_quantifier_1506": "Nombres incommandants dans le quantificateur.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Les littéraux numériques ayant des valeurs absolues égales ou supérieures à 2^53 sont trop grands pour être représentés avec précision sous forme d'entiers.", "Numeric_separators_are_not_allowed_here_6188": "Les séparateurs numériques ne sont pas autorisés ici.", "Object_is_of_type_unknown_2571": "L'objet est de type 'unknown'.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Un littéral d'objet peut uniquement spécifier des propriétés connues, et '{0}' n'existe pas dans le type '{1}'.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Un littéral d'objet peut uniquement spécifier des propriétés connues, mais '{0}' n'existe pas dans le type '{1}'. Est-ce que vous avez voulu écrire '{2}' ?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propriété '{0}' du littéral d'objet possède implicitement un type '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Les objets qui contiennent des propriétés raccourcies ne peuvent pas être déduits avec --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Les objets qui contiennent des affectations de propagation ne peuvent pas être déduits avec --isolatedDeclarations.", "Octal_digit_expected_1178": "Chiffre octal attendu.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Les types de littéral octal doivent utiliser la syntaxe ES2015. Utilisez la syntaxe '{0}'.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Les littéraux octaux ne sont pas autorisés dans l'initialiseur des membres d'enums. Utilisez la syntaxe '{0}'.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Les littéraux octaux ne sont pas autorisés en mode strict.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Les littéraux octaux ne sont pas disponibles lorsque vous ciblez ECMAScript 5 et ultérieur. Utilisez la syntaxe '{0}'.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Les séquences d’échappement octales et les références arrière ne sont pas autorisées dans une classe de caractères. S’il s’agissait d’une séquence d’échappement, utilisez la syntaxe '{0}' à la place.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Les séquences d’échappement octales ne sont pas autorisées. Utilisez la syntaxe '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Les littéraux octaux ne sont pas autorisés. Utilisez la syntaxe '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Une valeur de '{0}.{1}' est la chaîne '{2}', et l’autre est supposé être une valeur numérique inconnue.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Une seule déclaration de variable est autorisée dans une instruction 'for...in'.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Seule une déclaration de variable unique est autorisée dans une instruction 'for...of'.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Seule une fonction void peut être appelée avec le mot clé 'new'.", "Only_ambient_modules_can_use_quoted_names_1035": "Seuls les modules ambiants peuvent utiliser des noms entre guillemets.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Seuls les modules 'amd' et 'system' sont pris en charge avec --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Seuls les tableaux const peuvent être déduits avec --isolatedDeclarations.", "Only_emit_d_ts_declaration_files_6014": "Émettez uniquement les fichiers de déclaration '.d.ts'.", - "Only_named_exports_may_use_export_type_1383": "Seules les exportations nommées peuvent utiliser 'export type'.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Seules les enums numériques peuvent avoir des membres calculés, mais cette expression a le type '{0}'. Si vous n'avez pas besoin de contrôles d'exhaustivité, utilisez un littéral d'objet à la place.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Sortie uniquement des fichiers d.ts et non des fichiers JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Seules les méthodes publiques et protégées de la classe de base sont accessibles par le biais du mot clé 'super'.", "Operator_0_cannot_be_applied_to_type_1_2736": "Impossible d'appliquer l'opérateur '{0}' au type '{1}'.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Impossible d'appliquer l'opérateur '{0}' aux types '{1}' et '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Les opérateurs ne doivent pas être mixtes dans une classe de caractères. Encapsulez-le dans une classe imbriqué à la place.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Choisir un projet en dehors de la vérification des références multiprojets lors de l’édition.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L’option '{0}={1}' a été supprimée. Supprimez-le de votre configuration.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L’option '{0}={1}' est déconseillée et cessera de fonctionner dans TypeScript {2}. Spécifiez compilerOption « ignoreDeprecations » : «{3}« » pour désactiver cette erreur.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'false' ou 'null' sur la ligne de commande.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'null' sur la ligne de commande.", + "Option_0_can_only_be_specified_on_command_line_6266": "L’option '{0}' ne peut être spécifiée que sur la ligne de commande.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'option '{0}' peut être utilisée uniquement quand l'option '--inlineSourceMap' ou l'option '--sourceMap' est spécifiée.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L’option '{0}' ne peut être utilisée que lorsque 'moduleResolution' a la valeur 'node16', 'nodenext' ou 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "L’option '{0}' ne peut être utilisée que lorsque 'module' a la valeur 'preserve' ou 'es2015' ou version ultérieure.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Impossible de spécifier l'option '{0}' quand l'option 'jsx' a la valeur '{1}'.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Impossible de spécifier l'option '{0}' quand l'option 'target' est 'ES3'.", "Option_0_cannot_be_specified_with_option_1_5053": "Impossible de spécifier l'option '{0}' avec l'option '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}' ou l'option '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L’option «{0}» a été supprimée. Supprimez-le de votre configuration.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L’option '{0}' est déconseillée et cessera de fonctionner dans TypeScript {1}. Spécifiez compilerOption « ignoreDeprecations » : «{2}« » pour désactiver cette erreur.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L’option '{0}' est redondante et ne peut pas être spécifiée avec l’option '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "L’option 'allowImportingTsExtensions' ne peut être utilisée que lorsque 'noEmit' ou 'emitDeclarationOnly' est défini.", "Option_build_must_be_the_first_command_line_argument_6369": "L'option '--build' doit être le premier argument de ligne de commande.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "L'option '--incremental' peut uniquement être spécifiée à l'aide de tsconfig, en cas d'émission vers un seul fichier ou quand l'option '--tsBuildInfoFile' est spécifiée.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'option 'isolatedModules' peut être utilisée seulement quand l'option '--module' est spécifiée, ou quand l'option 'target' a la valeur 'ES2015' ou une version supérieure.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "L'option 'preserveConstEnums' ne peut pas être désactivée quand 'isolatedModules' est activé.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "L’option « preserveValueImports » peut uniquement être utilisée quand « module » a la valeur « es2015 » ou une version ultérieure.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L’option 'moduleResolution' doit avoir la valeur '{0}' (ou laisser non spécifiée) lorsque l’option 'module' a la valeur '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L’option 'module' doit être définie sur '{0}' quand l’option 'moduleResolution' a la valeur '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "L’option 'preserveConstEnums' ne peut pas être désactivée quand '{0}' est activé.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Impossible d'associer l'option 'project' à des fichiers sources sur une ligne de commande.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "L'option '--resolveJsonModule' peut uniquement être spécifiée quand la génération du code de module est 'commonjs', 'amd', 'es2015' ou 'esNext'.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Impossible de spécifier l'option '--resolveJsonModule' sans la stratégie de résolution de module 'node'.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Impossible de spécifier l’option '--resolveJsonModule' quand 'moduleResolution' a la valeur 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Impossible de spécifier l’option '--resolveJsonModule' quand 'module' a la valeur 'none', 'system' ou 'umd'.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Impossible de spécifier l’option 'tsBuildInfoFile' sans spécifier l’option 'incremental' ou 'composite' ou si elle n’exécute pas 'tsc -b'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "L’option 'verbatimModuleSyntax' ne peut pas être utilisée quand 'module' a la valeur 'UMD', 'AMD' ou 'System'.", "Options_0_and_1_cannot_be_combined_6370": "Impossible de combiner les options '{0}' et '{1}'.", "Options_Colon_6027": "Options :", "Output_Formatting_6256": "Mise en forme de sortie", "Output_compiler_performance_information_after_building_6615": "Informations de performances du compilateur de sortie après la génération.", "Output_directory_for_generated_declaration_files_6166": "Répertoire de sortie pour les fichiers de déclaration générés.", - "Output_file_0_from_project_1_does_not_exist_6309": "Le fichier de sortie '{0}' du projet '{1}' n'existe pas", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Le fichier de sortie '{0}' n'a pas été créé à partir du fichier source '{1}'.", "Output_from_referenced_project_0_included_because_1_specified_1411": "Sortie du projet référencé '{0}' incluse, car '{1}' est spécifié", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Sortie du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Déclaration de paramètre attendue.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Le paramètre a un nom mais aucun type. Est-ce que vous avez voulu utiliser '{0} : {1}' ?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Les modificateurs de paramètres peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Le paramètre doit avoir une annotation de type explicite avec --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimez les noms des fichiers émis après une compilation.", "Print_this_message_6017": "Imprimez ce message.", "Private_accessor_was_defined_without_a_getter_2806": "L'accesseur privé a été défini sans getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Le champ privé '{0}' doit être déclaré dans une classe englobante.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Les identificateurs privés ne sont pas autorisés dans les déclarations de variable.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Les identificateurs privés ne sont pas autorisés en dehors des corps de classe.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Les identificateurs privés ne sont autorisés que dans les corps de classe et ne peuvent être utilisés que dans le cadre d’une déclaration de membre de classe, d’accès à une propriété ou de la partie gauche d’une expression ’in'", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Les identificateurs privés sont disponibles uniquement durant le ciblage d'ECMAScript 2015 et version ultérieure.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Les identificateurs privés ne peuvent pas être utilisés en tant que paramètres.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Le membre privé ou protégé '{0}' n'est pas accessible sur un paramètre de type.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Impossible de générer le projet '{0}' car sa dépendance '{1}' comporte des erreurs", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Impossible de générer le projet '{0}', car sa dépendance '{1}' n'a pas été générée", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Le projet « {0} » est en cours de régénération forcée", + "Project_0_is_out_of_date_because_1_6420": "Le projet '{0}' est obsolète car {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le fichier «{2}» était un fichier racine de compilation, mais pas plus.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le programme doit signaler des erreurs.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Le projet « {0} » est obsolète, car le fichier buildinfo « {1} » indique que certaines modifications n’ont pas été émises", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Le projet '{0}' est obsolète, car le fichier buildinfo '{1}' indique qu’il y a un changement dans compilerOptions", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Le projet '{0}' est obsolète car sa dépendance '{1}' est obsolète", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Le projet '{0}' est obsolète car la sortie (« {1} ») est antérieure à l'entrée « {2} »", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Le projet '{0}' est obsolète car le fichier de sortie '{1}' n'existe pas", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Le projet '{0}' est obsolète, car sa sortie a été générée avec la version '{1}', qui diffère de la version actuelle '{2}'", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Le projet '{0}' est obsolète, car la sortie de sa dépendance '{1}' a changé", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Le projet « {0} » est obsolète car une erreur s'est produite lors de la lecture du fichier « {1} »", "Project_0_is_up_to_date_6361": "Le projet '{0}' est à jour", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Le projet « {0} » est à jour car l'entrée la plus récente (« {1} ») est antérieure à la sortie (« {2} »)", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "La propriété '{0}' est utilisée avant son initialisation.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propriété «{0}» n'existe pas sur le type «{1}». Est-ce qu'il ne s'agit pas plutôt de «{2}»?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Impossible d'assigner la propriété '{0}' de l'attribut spread JSX à la propriété cible.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La propriété '{0}' de l'expression de classe exportée ne peut pas être privée ou protégée.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propriété '{0}' du type de classe anonyme exporté ne peut pas être privée ou protégée.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propriété '{0}' de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propriété '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propriété « {0} » de type « {1} » ne peut pas être attribuée au type d’index « {2} », « {3} ».", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propriété '{0}' va remplacer la propriété de base dans '{1}'. Si cela est intentionnel, ajoutez un initialiseur. Sinon, ajoutez un modificateur 'declare', ou supprimez la déclaration redondante.", "Property_assignment_expected_1136": "Assignation de propriété attendue.", "Property_destructuring_pattern_expected_1180": "Modèle de déstructuration de propriété attendu.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propriété doit avoir une annotation de type explicite avec --isolatedDeclarations.", "Property_or_signature_expected_1131": "Propriété ou signature attendue.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "La valeur de la propriété peut être uniquement un littéral de chaîne, un littéral numérique, 'true', 'false', 'null', un littéral d'objet ou un littéral de tableau.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Fournissez une prise en charge complète des éléments pouvant faire l'objet d'une itération dans 'for-of', de l'opérateur spread et de la déstructuration durant le ciblage d''ES5' ou 'ES3'.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fournissez une prise en charge complète des itérables dans 'for-of', la propagation et la destruction lors du ciblage de 'ES5'.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module externe {2} mais ne peut pas être nommée.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom privé '{1}'.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Déclencher une erreur quand un paramètre de fonction n’est pas lu.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Lever une erreur sur les expressions et les déclarations ayant un type 'any' implicite.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Déclenche une erreur sur les expressions 'this' avec un type 'any' implicite.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "La réexportation d'un type quand l'indicateur '--isolatedModules' est spécifié nécessite l'utilisation de 'export type'.", + "Range_out_of_order_in_character_class_1517": "Plage dans l’ordre dans la classe de caractères.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "La réexportation d’un type lorsque «{0}» est activé nécessite l’utilisation de « type d’exportation ».", + "React_components_cannot_include_JSX_namespace_names_2639": "Les composants React ne peuvent pas inclure de noms d’espace de noms JSX", "Redirect_output_structure_to_the_directory_6006": "Rediriger la structure de sortie vers le répertoire.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Réduisez le nombre de projets chargés automatiquement par TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "Le projet référencé '{0}' ne doit pas désactiver l'émission.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Le projet référencé '{0}' doit avoir le paramètre \"composite\" avec la valeur true.", "Referenced_via_0_from_file_1_1400": "Référencé(e) via '{0}' à partir du fichier '{1}'", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Les chemins d’importation relatifs nécessitent des extensions de fichier explicites dans les importations EcmaScript quand '--moduleResolution' est 'node16' ou 'nodenext'. Envisagez d’ajouter une extension au chemin d’importation.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations EcmaScript quand '--moduleResolution' est 'node16' ou 'nodenext'. Voulez-vous dire «{0}» ?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Envisagez d’ajouter une extension au chemin d’importation.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Est-ce que vous avez voulu utiliser '{0}' ?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Supprimez une liste de répertoires du processus d’observation.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Supprimez une liste de fichiers du traitement du mode espion.", "Remove_all_unnecessary_override_modifiers_95163": "Supprimer tous les modificateurs 'override' inutiles", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Signalez les erreurs dans les fichiers .js.", "Report_errors_on_unused_locals_6134": "Signaler les erreurs sur les variables locales inutilisées.", "Report_errors_on_unused_parameters_6135": "Signaler les erreurs sur les paramètres inutilisés.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exiger une annotation suffisante sur les exportations afin que d’autres outils puissent générer de manière triviale des fichiers de déclaration.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Les propriétés non déclarées sont imposées à partir des signatures d'index pour permettre l'utilisation des accès aux éléments.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Les paramètres de type obligatoires ne peuvent pas être placés à la suite des paramètres de type optionnels.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La résolution du module '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La résolution de la directive de référence de type '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Échec de la résolution du nom non relatif ; tentative avec les fonctionnalités de résolution de nœud modernes désactivées pour voir si la bibliothèque npm a besoin d’une mise à jour de configuration.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Échec de la résolution du nom non relatif ; en essayant avec '--moduleResolution bundler' pour voir si le projet peut avoir besoin d’une mise à jour de configuration.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Résoudre 'keyof' en noms de propriétés de valeur chaîne uniquement (aucun nombre ou symbole).", + "Resolved_under_condition_0_6414": "Résolu sous la condition '{0}'.", "Resolving_in_0_mode_with_conditions_1_6402": "Résolution en mode {0} avec des conditions {1}.", "Resolving_module_0_from_1_6086": "======== Résolution du module '{0}' à partir de '{1}'. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Résolution du nom de module '{0}' par rapport à l'URL de base '{1}' - '{2}'.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine non défini. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine '{1}'. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine non défini. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Résolution de la directive de référence de type pour le programme qui spécifie des typesRoots personnalisés, en ignorant la recherche dans le dossier « node_modules ».", "Resolving_with_primary_search_path_0_6121": "Résolution à l'aide du chemin de recherche primaire '{0}'.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Le paramètre rest '{0}' possède implicitement un type 'any[]'.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Le paramètre Rest '{0}' a implicitement un type 'any[]', mais il est possible de déduire un meilleur type à partir de l'utilisation.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} » avec l’ID de package « {3} ».", "Rewrite_all_as_indexed_access_types_95034": "Réécrire tout comme types d'accès indexés", "Rewrite_as_the_indexed_access_type_0_90026": "Réécrire en tant que type d'accès indexé '{0}'", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Opérande droit de ?? est inaccessible, car l’opérande de gauche n’est jamais nullish.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Impossible de déterminer le répertoire racine, chemins de recherche primaires ignorés.", "Root_file_specified_for_compilation_1427": "Fichier racine spécifié pour la compilation", "STRATEGY_6039": "STRATÉGIE", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Enregistrez les fichiers .tsbuildinfo pour permettre la compilation incrémentielle des projets.", "Saw_non_matching_condition_0_6405": "Condition non correspondante '{0}' visible.", "Scoped_package_detected_looking_in_0_6182": "Package de portée détecté. Recherche dans '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Recherche d’extensions de secours dans tous les répertoires node_modules ancêtres : {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Recherche d’extensions préférées dans tous les répertoires node_modules ancêtres : {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "La sélection ne correspond pas à une ou des instructions valides", "Selection_is_not_a_valid_type_node_95133": "La sélection n'est pas un nœud de type valide", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Définissez la version du langage JavaScript pour JavaScript émis et incluez des déclarations de bibliothèque compatibles.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Affichez les informations de diagnostic détaillées.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Montrer ce qui serait généré (ou supprimé si '--clean' est spécifié)", "Signature_0_must_be_a_type_predicate_1224": "La signature '{0}' doit être un prédicat de type.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Les déclarations de signature peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorer la génération de projets en aval en cas d’erreur dans le projet en amont.", "Skip_type_checking_all_d_ts_files_6693": "Ignorer la vérification de type dans tous les fichiers .d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorer la vérification de type des fichiers .d.ts inclus dans TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Ignorer le contrôle de type des fichiers de déclaration.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorer la génération du projet '{0}' car sa dépendance '{1}' comporte des erreurs", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorer la build du projet '{0}', car sa dépendance '{1}' n'a pas été générée", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Le module '{0}' qui ressemble à un URI absolu, types de fichiers cibles : {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Source du projet référencé '{0}' incluse, car '{1}' est spécifié", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Source du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", "Source_has_0_element_s_but_target_allows_only_1_2619": "La source a {0} élément(s) mais la cible n'en autorise que {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Spécifiez le fonctionnement du mode espion TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Spécifiez les fichiers bibliothèques à inclure dans la compilation.", "Specify_module_code_generation_6016": "Spécifier la génération de code de module.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Spécifiez la stratégie de résolution de module : 'node' (Node.js) ou 'classic' (version de TypeScript antérieure à 1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Spécifiez le spécificateur de module utilisé pour importer les fonctions de fabrique JSX lors de l’utilisation de « jsx: react-jsx* ».", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Spécifiez plusieurs dossiers qui agissent comme « ./node_modules/@types ».", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Spécifiez une ou plusieurs références de module de chemin d’accès ou de nœud aux fichiers de configuration de base dont les paramètres sont hérités.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Les membres statiques ne peuvent pas référencer des paramètres de type de classe.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propriété statique '{0}' est en conflit avec la propriété intégrée 'Function.{0}' de la fonction constructeur '{1}'.", "String_literal_expected_1141": "Littéral de chaîne attendu.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Les noms d’importation et d’exportation de littéral de chaîne ne sont pas pris en charge lorsque l’indicateur « --module » a la valeur « es2015 » ou « es2020 ».", "String_literal_with_double_quotes_expected_1327": "Littéral de chaîne avec guillemets doubles attendu.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylisez les erreurs et les messages avec de la couleur et du contexte (expérimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Les indicateurs de sous-modèle doivent être présents lorsqu’il existe un signe moins.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Les prochaines déclarations de propriétés doivent avoir le même type. La propriété '{0}' doit avoir le type '{1}', mais elle a ici le type '{2}'.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Les déclarations de variable ultérieures doivent avoir le même type. La variable '{0}' doit être de type '{1}', mais elle a ici le type '{2}'.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Le type de la substitution '{0}' du modèle '{1}' est incorrect. Attente de 'string'. Obtention de '{2}'.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Les expressions de modèle étiquetées ne sont pas autorisées dans une chaîne facultative.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La cible autorise uniquement {0} élément(s) mais la source peut en avoir plus.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La cible nécessite {0} élément(s) mais la source peut en avoir moins.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La signature cible offre trop peu d’arguments. {0} ou plus sont attendus, mais {1} ont été reçus.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Le modificateur '{0}' peut uniquement être utilisé dans les fichiers TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Impossible d'appliquer l'opérateur '{0}' au type 'symbol'.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'opérateur '{0}' n'est pas autorisé pour les types booléens. Utilisez '{1}' à la place.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propriété '{0}' d'un itérateur asynchrone doit être une méthode.", "The_0_property_of_an_iterator_must_be_a_method_2767": "La propriété '{0}' d'un itérateur doit être une méthode.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Le type 'Object' peut être assigné à très peu d'autres types. Souhaitez-vous utiliser le type 'any' à la place ?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Impossible de référencer l'objet 'arguments' dans une fonction arrow dans ES3 et ES5. Utilisez plutôt une expression de fonction standard.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Les objets 'arguments' ne peuvent pas être référencés dans une fonction ou méthode async en ES3 et ES5. Utilisez une fonction ou méthode standard.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "L’indicateur Unicode (u) et l’indicateur Unicode Sets (v) ne peuvent pas être définis simultanément.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Désolé... Nous ne pouvons pas référencer l’objet « arguments » dans une fonction arrow d’ES5. Utilisez plutôt une expression de fonction standard.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "L’objet « arguments » ne peut pas être référencé dans une fonction ou méthode asynchrone dans ES5. Utilisez une fonction ou méthode standard.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Le corps d'une instruction 'if' ne peut pas être l'instruction vide.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "L'appel aurait pu réussir sur cette implémentation, mais les signatures de surcharges de l'implémentation ne sont pas visibles en externe.", "The_character_set_of_the_input_files_6163": "Jeu de caractères des fichiers d'entrée.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Le type déduit de '{0}' référence un type avec une structure cyclique qui ne peut pas être sérialisée de manière triviale. Une annotation de type est nécessaire.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Le type déduit de '{0}' référence un type '{1}' inaccessible. Une annotation de type est nécessaire.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Le type déduit de ce nœud dépasse la longueur maximale que le compilateur va sérialiser. Une annotation de type explicite est nécessaire.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L’initialiseur d’une déclaration « using » doit être un objet avec une méthode « [Symbol.dispose]() », ou avoir la valeur « null » ou « undefined ».", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L’initialiseur d’une déclaration « await using » doit être un objet avec une méthode « [Symbol.asyncDispose]() » ou « [Symbol.dispose]5D;() », ou avoir la valeur « null » ou « undefined ».", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' existe dans plusieurs constituants et est privée dans certains d'entre eux.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' a des types en conflit dans certains constituants.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Le mot clé 'intrinsic' peut uniquement être utilisé pour déclarer les types intrinsèques fournis par le compilateur.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "La dernière surcharge a généré l'erreur suivante.", "The_last_overload_is_declared_here_2771": "La dernière surcharge est déclarée ici.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La partie gauche d'une instruction 'for...in' ne peut pas être un modèle de déstructuration.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « using ».", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « await using ».", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La partie gauche d'une instruction 'for...in' ne peut pas utiliser d'annotation de type.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La partie gauche d'une instruction 'for...in' ne doit pas être un accès à une propriété facultative.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La partie gauche d'une instruction 'for...in' doit être un accès à une variable ou une propriété.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La partie gauche d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La partie gauche d'une expression d'assignation ne doit pas être un accès à une propriété facultative.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La partie gauche d'une expression d'assignation doit être un accès à une variable ou une propriété.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La partie gauche d’une expression « instanceof » doit pouvoir être assignée au premier argument de la méthode « [Symbol.hasInstance] » du côté droit.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La partie gauche d'une expression 'instanceof' doit être de type 'any', un type d'objet ou un paramètre de type.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Paramètres régionaux utilisés pour afficher les messages à l'utilisateur (exemple : 'fr-fr')", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondeur de dépendance maximale pour la recherche sous node_modules et le chargement de fichiers JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’exportation '{0}' dans le fichier '{1}'. Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’importation «{0}» dans le fichier «{1}». Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "La propriété '{0}' n'est pas accessible sur le type '{1}' dans cette classe, car elle est mise en mémoire fantôme par un autre identificateur privé ayant la même orthographe.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Le type de retour d'un accesseur 'get' doit être assignable à son type d'accesseur 'set'", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Le type de retour d'une fonction d'élément décoratif de paramètre doit être 'void' ou 'any'.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Le type de retour d'une fonction d'élément décoratif de propriété doit être 'void' ou 'any'.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Le type de retour d'une fonction asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Le type de retour d'une fonction ou d'une méthode async doit être le type Promise global.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Le type de retour d'une fonction ou d'une méthode asynchrone doit être le type global Promise. Vouliez-vous vraiment écrire 'Promise<{0}>' ?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La partie droite d'une instruction 'for...in' doit être de type 'any', un type d'objet ou un paramètre de type, mais elle a le type '{0}' ici.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La partie droite d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La partie droite d'une expression 'instanceof' doit être de type 'any' ou d'un type pouvant être assigné au type d'interface 'Function'.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La partie droite d’une expression « instanceof » doit être de type « any », une classe, une fonction ou un autre type pouvant être affecté au type d’interface « Function », ou un type d’objet avec une méthode « Symbol.hasInstance ».", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La partie droite d’une expression « instanceof » ne doit pas être une expression d’instanciation.", "The_root_value_of_a_0_file_must_be_an_object_5092": "La valeur racine d'un fichier '{0}' doit être un objet.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend au moins {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "La déclaration avec mise en mémoire fantôme de '{0}' est définie ici", "The_signature_0_of_1_is_deprecated_6387": "La signature '{0}' de '{1}' est dépréciée.", "The_specified_path_does_not_exist_Colon_0_5058": "Le chemin spécifié n'existe pas : '{0}'.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’exportation est utilisé dans son instruction import.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’importation est utilisé dans son instruction import.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Le type d'une déclaration de fonction doit correspondre à la signature de la fonction.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Le type de cette expression ne peut pas être nommé sans une assertion de « mode résolution », qui est une fonctionnalité instable. Utilisez TypeScript nocturne pour désactiver cette erreur. Essayez de mettre à jour avec « npm install -D typescript@next ».", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossible de sérialiser le type de ce nœud, car sa propriété «{0}» ne peut pas être sérialisée.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Le type retourné par la méthode '{0}()' d'un itérateur asynchrone doit être une promesse pour un type ayant une propriété 'value'.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Le type retourné par la méthode '{0}()' d'un itérateur doit avoir une propriété 'value'.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La déclaration de variable d'une instruction 'for...in' ne peut pas avoir d'initialiseur.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La déclaration de variable d'une instruction 'for...of' ne peut pas avoir d'initialiseur.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'instruction 'with' n'est pas prise en charge. Tous les symboles d'un bloc 'with' ont le type 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu sous votre paramètre « moduleResolution » actuel. Envisagez la mise à jour vers « node16 », « nodenext » ou « bundler ».", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu lors du respect des « exports » package.json. La bibliothèque « {1} » devra peut-être mettre à jour son package.json ou ses typages.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Il n’existe aucun groupe de capture nommé « {0} » dans cette expression régulière.", + "There_is_nothing_available_for_repetition_1507": "Aucun élément n’est disponible pour la répétition.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propriété '{0}' de cette balise JSX attend un seul enfant de type '{1}', mais plusieurs enfants ont été fournis.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propriété '{0}' de cette balise JSX attend le type '{1}', qui nécessite plusieurs enfants, mais un seul enfant a été fourni.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a aucun groupe de capture dans cette expression régulière.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a que {0} groupes de capture dans cette expression régulière.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Cette expression binaire n’est jamais nulle. Avez-vous des parenthèses manquantes ?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Ce caractère ne peut pas être placé dans une séquence d’échappement d’expression régulière.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Cette comparaison semble involontaire, car les types '{0}' et '{1}' n’ont pas de chevauchement.", "This_condition_will_always_return_0_2845": "Cette condition retourne toujours '{0}'.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Cette condition retourne toujours '{0}', car JavaScript compare les objets par référence, et non par valeur.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Cette condition retourne toujours true, car cette « {0} » est toujours définie.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Cette condition retourne toujours true, car cette fonction est toujours définie. Est-ce que vous avez voulu l'appeler à la place ?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Cette fonction constructeur peut être convertie en déclaration de classe.", + "This_expression_is_always_nullish_2871": "Cette expression est toujours nulle.", "This_expression_is_not_callable_2349": "Impossible d'appeler cette expression.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Impossible d'appeler cette expression, car il s'agit d'un accesseur 'get'. Voulez-vous vraiment l'utiliser sans '()' ?", "This_expression_is_not_constructable_2351": "Impossible de construire cette expression.", "This_file_already_has_a_default_export_95130": "Ce fichier a déjà une exportation par défaut", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Cette importation n'est jamais utilisée en tant que valeur. Elle doit utiliser 'import type', car 'importsNotUsedAsValues' a la valeur 'error'.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Ceci est la déclaration augmentée. Pensez à déplacer la déclaration d'augmentation dans le même fichier.", + "This_kind_of_expression_is_always_falsy_2873": "Ce genre d’expression est toujours fausse.", + "This_kind_of_expression_is_always_truthy_2872": "Ce genre d’expression est toujours vrai.", "This_may_be_converted_to_an_async_function_80006": "Ceci peut être converti en fonction asynchrone.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise '@override' car il n'est pas déclaré dans la classe de base '{0}'.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise 'override' car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}' ?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ce membre doit avoir un modificateur 'override', car il se substitue à une méthode abstraite déclarée dans la classe de base '{0}'.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Vous pouvez référencer ce module uniquement avec les importations/exportations ECMAScript en activant l'indicateur '{0}' et en référençant son exportation par défaut.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ce module est déclaré avec 'export =', et ne peut être utilisé qu’avec une importation par défaut lors de l’utilisation de l’indicateur '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Cette opération peut être simplifiée. Ce shift est identique à '{0} {1} {2}'.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Cette surcharge retourne implicitement le type « {0} », car elle n’a pas d’annotation de type de retour.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Cette signature de surcharge n'est pas compatible avec sa signature d'implémentation.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ce paramètre n'est pas autorisé avec la directive 'use strict'.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Cette propriété de paramètre doit avoir un commentaire JSDoc avec une balise '@override' car elle remplace un membre dans la classe de base '{0}'.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Cette propriété de paramètre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Cet indicateur d’expression régulière ne peut pas être activé/désactivé dans un sous-modèle.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Cet indicateur d’expression régulière n’est disponible que lors du ciblage de « {0} » ou d’une version ultérieure.", "This_spread_always_overwrites_this_property_2785": "Cette diffusion écrase toujours cette propriété.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Veuillez ajouter une virgule de fin ou une contrainte explicite.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Utilisez une expression « as »à la place.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}', ou ajoutez le champ `\"type\" : \"module\"` à '{1}'.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}' ou créez un fichier package.json local avec `{ \"type\": \"module\" }`.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pour convertir ce fichier en module ECMAScript, créez un fichier package.json local avec `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Les expressions 'await' de niveau supérieur sont autorisées uniquement lorsque l’option 'module' a la valeur 'es2022', 'esnext', 'system', 'node16' ou 'nodenext' et que l’option 'target' a la valeur 'es2017' ou une valeur supérieure.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Les expressions « await » de niveau supérieur ne sont autorisées que lorsque l'option « module » est définie sur « es2022 », « esnext », « system », « node16 », « nodenext » ou « preserve » et que l'option « target » est définie sur « es2017 » ou supérieur.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Les instructions « await using » de niveau supérieur sont autorisées uniquement lorsque l’option « module » est définie sur « es2022 », « esnext », « system », « node16 », « nodenext » ou « preserve » et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Les déclarations de niveau supérieur dans les fichiers .d.ts doivent commencer par un modificateur 'declare' ou 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Les boucles « for await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » a la valeur « es2022 », « esnext », « system », « node16 » ou « nodenext », et que l’option « target » a la valeur « es2017 » ou une version ultérieure.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Les boucles « for await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » est définie sur « es2022 », « esnext », « system », « node16 » ou « nodenext » et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", "Trailing_comma_not_allowed_1009": "Virgule de fin non autorisée.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilez chaque fichier sous forme de module distinct (semblable à 'ts.transpileModule').", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Essayez 'npm i --save-dev @types/{1}' s'il existe, ou ajoutez un nouveau fichier de déclaration (.d.ts) contenant 'declare module '{0}';'", "Trying_other_entries_in_rootDirs_6110": "Essai avec d'autres entrées dans 'rootDirs'.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Essai avec la substitution '{0}', emplacement de module candidat : '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Les membres de tuples doivent tous avoir des noms ou ne pas en avoir.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Le type tuple '{0}' de longueur '{1}' n'a aucun élément à l'index '{2}'.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Les arguments de type tuple se référencent de manière circulaire.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Le type '{0}' peut être itéré uniquement à l'aide de l'indicateur '--downlevelIteration' ou avec un '--target' dont la valeur est 'es2015' ou une version ultérieure.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Le type '{0}' n'a aucune signature d'index correspondant au type '{1}'.", "Type_0_has_no_properties_in_common_with_type_1_2559": "Le type '{0}' n'a aucune propriété en commun avec le type '{1}'.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Le type '{0}' n’a aucune signature pour laquelle la liste d’arguments de type est applicable.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Le type « {0} » est générique et ne peut être indexé que pour la lecture.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2} et de {3} autres.", "Type_0_is_not_a_constructor_function_type_2507": "Le type '{0}' n'est pas un type de fonction constructeur.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Le type '{0}' n'est pas un type de retour de fonction async valide en ES5/ES3, car il ne référence pas une valeur de constructeur compatible avec une promesse.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Le type « {0} » n’est pas un type de retour de fonction asynchrone valide dans ES5, car il ne fait pas référence à une valeur de constructeur compatible avec une promesse.", "Type_0_is_not_an_array_type_2461": "Le type '{0}' n'est pas un type de tableau.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Le type '{0}' n'est pas un type de tableau ou un type de chaîne.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Le type '{0}' n'est pas un type tableau ou un type chaîne, ou n'a pas de méthode '[Symbol.iterator]()' qui retourne un itérateur.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Le type '{0}' ne peut pas être attribué au type '{1}'. Voulez-vous dire '{2}'?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Impossible d'assigner le type '{0}' au type '{1}'. Il existe deux types distincts portant ce nom, mais ils ne sont pas liés.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Le type «{0}» n’est pas assignable au type «{1}» comme implicite par l’annotation de variance.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Le type « {0} » n’est pas attribuable au type « {1} » comme requis pour les valeurs de membre enum calculées.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' au type de la cible.", "Type_0_is_not_comparable_to_type_1_2678": "Le type '{0}' n'est pas comparable au type '{1}'.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Argument de type attendu.", "Type_argument_list_cannot_be_empty_1099": "La liste des arguments de type ne peut pas être vide.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Les arguments de type peuvent uniquement être utilisés dans les fichiers TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "Impossible d'utiliser des arguments de type ici.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Les arguments de type pour '{0}' se référencent de manière circulaire.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Les expressions d'assertion de type peuvent uniquement être utilisées dans les fichiers TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Le type situé à la position {0} dans la source n'est pas compatible avec le type situé à la position {1} dans la cible.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Le type situé aux positions allant de {0} à {1} dans la source n'est pas compatible avec le type situé à la position {2} dans la cible.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Le type contenant le nom privé « {0} » ne peut pas être utilisé avec --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Fichiers de déclaration de type à inclure dans la compilation.", "Type_expected_1110": "Type attendu.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Les assertions d’importation de type doivent avoir exactement une clé ( « mode résolution » ) avec la valeur « import » ou « require ».", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Les attributs d’importation de type doivent avoir exactement une clé ( « resolution-mode » ) avec une valeur « import » ou « require ».", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "L'instanciation de type est trop profonde et éventuellement infinie.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Le type est directement ou indirectement référencé dans le rappel d'exécution de sa propre méthode 'then'.", "Type_library_referenced_via_0_from_file_1_1402": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}'", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Impossible de résoudre la signature d'un élément décoratif de méthode quand il est appelé en tant qu'expression.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Impossible de résoudre la signature d'un élément décoratif de paramètre quand il est appelé en tant qu'expression.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Impossible de résoudre la signature d'un élément décoratif de propriété quand il est appelé en tant qu'expression.", + "Undetermined_character_escape_1513": "L’échappement de caractère n’est pas déterminé.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "« {0} » est inattendu. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", "Unexpected_end_of_text_1126": "Fin de texte inattendue.", "Unexpected_keyword_or_identifier_1434": "Mot clé ou identificateur inattendu.", "Unexpected_token_1012": "Jeton inattendu.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'>'}' ou '>' ?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'}'}' ou '}' ?", "Unexpected_token_expected_1179": "Jeton inattendu. '{' est attendu.", + "Unicode_escape_sequence_cannot_appear_here_17021": "La séquence d’échappement Unicode ne peut pas apparaître ici.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Les séquences d’échappement Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Les expressions de valeur de propriété Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", + "Unknown_Unicode_property_name_1524": "Le nom de propriété Unicode est inconnu.", + "Unknown_Unicode_property_name_or_value_1529": "Une valeur ou un nom de propriété Unicode est inconnu.", + "Unknown_Unicode_property_value_1526": "La valeur de propriété Unicode est inconnue.", "Unknown_build_option_0_5072": "Option de build inconnue : '{0}'.", "Unknown_build_option_0_Did_you_mean_1_5077": "Option de build inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", "Unknown_compiler_option_0_5023": "Option de compilateur '{0}' inconnue.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Option de compilateur inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Mot clé ou identificateur inconnu. Souhaitiez-vous utiliser «{0}» ?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Option 'excludes' inconnue. Voulez-vous utiliser 'exclude' ?", + "Unknown_regular_expression_flag_1499": "L’indicateur d’expression régulière est inconnu.", "Unknown_type_acquisition_option_0_17010": "Option d'acquisition de type inconnue '{0}'.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Option d'acquisition de type inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", "Unknown_watch_option_0_5078": "Option de surveillance inconnue : '{0}'.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Étiquette inutilisée.", "Unused_ts_expect_error_directive_2578": "Directive '@ts-expect-error' inutilisée.", "Update_import_from_0_90058": "Mettre à jour l’importation à partir de \"{0}\"", - "Updating_output_of_project_0_6373": "Mise à jour de la sortie du projet '{0}'...", + "Update_modifiers_of_0_90061": "Mettre à jour les modificateurs de « {0} »", "Updating_output_timestamps_of_project_0_6359": "Mise à jour des horodatages de sortie du projet '{0}'...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Mise à jour des horodatages de sortie inchangés du projet '{0}'...", "Use_0_95174": "Utilisez `{0}`.", + "Use_0_instead_5106": "Utilisez « {0} » à la place.", "Use_Number_isNaN_in_all_conditions_95175": "Utilisez 'Number.isNaN' dans toutes les conditions.", "Use_element_access_for_0_95145": "Utiliser l'accès à l'élément pour '{0}'", "Use_element_access_for_all_undeclared_properties_95146": "L'accès à l'élément est utilisé pour toutes les propriétés non déclarées.", + "Use_import_type_95180": "Utiliser « import type »", "Use_synthetic_default_member_95016": "Utilisez un membre 'default' synthétique.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Utilisez le champ « exports » package.json lors de la résolution des importations de package.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Utilisez le champ « imports » package.json lors de la résolution des importations.", + "Use_type_0_95181": "Utiliser « type {0} »", "Using_0_subpath_1_with_target_2_6404": "Utilisation de '{0}' de sous-chemin '{1}' avec la cible '{2}'.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'utilisation d'une chaîne dans une instruction 'for...of' est prise en charge uniquement dans ECMAScript 5 et version supérieure.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "L’utilisation de--build,-b fera en sorte que tsc se comporte plus comme une build orchestrateur qu’un compilateur. Utilisé pour déclencher la génération de projets composites sur lesquels vous pouvez obtenir des informations supplémentaires sur {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Déclaration de variable attendue.", "Variable_declaration_list_cannot_be_empty_1123": "La liste des déclarations de variable ne peut pas être vide.", "Variable_declaration_not_allowed_at_this_location_1440": "Déclaration de variable non autorisée à cet emplacement.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable doit avoir une annotation de type explicite avec --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Les variables avec plusieurs déclarations ne peuvent pas être inlined.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'élément variadique situé à la position {0} dans la source ne correspond pas à l'élément situé à la position {1} dans la cible.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Les annotations de variance sont uniquement prises en charge dans les alias de type pour les types objet, fonction, constructeur et mappé.", "Version_0_6029": "Version {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Lors de la vérification de type, prenez en compte « null » et « undefined ».", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Garder la sortie de console obsolète en mode espion au lieu d'effacer l'écran.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Inclure dans un wrapper tous les caractères non valides au sein d'un conteneur d'expressions", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Mettre toutes les expressions de décorateurs non valides entre parenthèses", "Wrap_all_object_literal_with_parentheses_95116": "Placer tous les littéraux d'objet entre parenthèses", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Inclure dans un wrapper tous les JSX non apparentés au sein d'un fragment JSX", "Wrap_in_JSX_fragment_95120": "Inclure dans un wrapper au sein d'un fragment JSX", + "Wrap_in_parentheses_95194": "Mettre entre parenthèses", "Wrap_invalid_character_in_an_expression_container_95108": "Inclure dans un wrapper un caractère non valide au sein d'un conteneur d'expressions", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Placer le corps suivant entre parenthèses pour indiquer qu'il s'agit d'un littéral d'objet", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Vous pouvez en savoir plus sur toutes les options du compilateur sur {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Les signatures d'index « {0} » et « {1} » sont incompatibles.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Les opérations '{0}' et '{1}' ne peuvent pas être mélangées sans parenthèses.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' spécifié deux fois. L'attribut nommé '{0}' va être remplacé.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "« {0} » à la fin d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "« {0} » au début d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' peut uniquement être importé via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' peut uniquement être importé via l'utilisation d'une importation par défaut.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'utilisation d'une importation par défaut.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'utilisation d'une importation par défaut.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "Impossible de compiler '{0}' sous '--isolatedModules', car il est considéré comme un fichier de script global. Ajoutez une importation, une exportation ou une instruction 'export {}' vide pour en faire un module.", "_0_cannot_be_used_as_a_JSX_component_2786": "Impossible d'utiliser '{0}' comme composant JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été exporté à l'aide de 'export type'.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été importé à l'aide de 'import type'.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Les composants '{0}' n'acceptent pas du texte en tant qu'éléments enfants. Le texte dans JSX a le type 'string', mais le type attendu de '{1}' est '{2}'.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' a pu être instancié avec un type arbitraire qui n'est peut-être pas lié à '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Les déclarations « {0} » ne peuvent être déclarées que dans un bloc.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Les déclarations '{0}' peuvent uniquement être utilisées dans les fichiers TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Les déclarations « {0} » ne peuvent pas avoir de modèles de liaison.", + "_0_declarations_must_be_initialized_1155": "Les déclarations « {0} » doivent être initialisées.", "_0_expected_1005": "'{0}' attendu.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "« {0} » a un type de chaîne, mais doit avoir une syntaxe de chaîne syntaxiquement reconnaissable quand « isolatedModules » est activé.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' n'a aucun membre exporté nommé '{1}'. Est-ce que vous pensiez à '{2}' ?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' a implicitement un type de retour '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' possède implicitement le type de retour 'any', car il n'a pas d'annotation de type de retour, et est référencé directement ou indirectement dans l'une de ses expressions de retour.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Le type d’index « {0} », « {1} », ne peut pas être attribué au type d’index « {2} », « {3} ».", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' est une primitive, mais '{1}' est un objet wrapper. Si possible, utilisez '{0}' de préférence.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' est un type qui ne peut pas être importé dans des fichiers JavaScript. Utilisez '{1}' dans une annotation de type JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "« {0} » est un type seul et doit être importé à l'aide d'une importation de type seul lorsque « preserveValueImports » et « isolatedModules » sont tous deux activés.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "« {0} » est un type et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "« {0} » est un changement de nom inutilisé de « {1} ». Souhaitiez-vous l’utiliser comme annotation de type?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' peut être assigné à la contrainte de type '{1}', mais '{1}' a pu être instancié avec un autre sous-type de contrainte '{2}'.", "_0_is_automatically_exported_here_18044": "'{0}' est automatiquement exporté ici.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "La liste '{0}' ne peut pas être vide.", "_0_modifier_already_seen_1030": "Modificateur '{0}' déjà rencontré.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Le modificateur «{0}» ne peut apparaître que sur un paramètre de type d’une classe, d’une interface ou d’un alias de type", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Le modificateur « {0} » ne peut apparaître que sur un paramètre de type d’une fonction, d’une méthode ou d’une classe", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Le modificateur '{0}' ne peut pas apparaître sur une déclaration de constructeur.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Le modificateur '{0}' ne peut pas apparaître dans un élément de module ou d'espace de noms.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Le modificateur '{0}' ne peut pas apparaître dans un paramètre.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Le modificateur '{0}' ne peut pas apparaître dans un membre de type.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Le modificateur «{0}» ne peut pas apparaître sur un paramètre de type", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « using ».", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « await using ».", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Le modificateur '{0}' ne peut pas apparaître dans une signature d'index.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Le modificateur '{0}' ne peut pas apparaître sur les éléments de classe de ce genre.", "_0_modifier_cannot_be_used_here_1042": "Impossible d'utiliser le modificateur '{0}' ici.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Impossible d'utiliser les modificateurs '{0}' et '{1}' ensemble.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Le modificateur '{0}' ne peut pas être utilisé avec un identificateur privé.", "_0_modifier_must_precede_1_modifier_1029": "Le modificateur '{0}' doit précéder le modificateur '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "« \\{0} » doit être suivi d’une expression de valeur de propriété Unicode entre accolades.", "_0_needs_an_explicit_type_annotation_2782": "'{0}' a besoin d'une annotation de type explicite.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' référence uniquement un type mais s'utilise en tant qu'espace de noms ici.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fait uniquement référence à un type mais s'utilise en tant que valeur ici.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' fait uniquement référence à un type, mais il est utilisé ici en tant que valeur. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' par es2015 ou une version ultérieure.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fait référence à une variable globale UMD, mais le fichier actuel est un module. Ajoutez une importation à la place.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fait référence à une valeur, mais il est utilisé ici en tant que type. Est-ce que vous avez voulu utiliser 'typeof {0}' ?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "« {0} » se résout en une déclaration de type seul et doit être importé à l'aide d'une importation de type seul lorsque « preserveValueImports » et « isolatedModules » sont tous deux activés.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "« {0} » se résout une déclaration de type unique et doit être réexporté à l'aide d'une réexportation de type unique lorsque l'option « isolatedModules » est activée.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "« {0} » se résout en une déclaration de type uniquement et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "« {0} » doit être résolu en déclaration de type unique et doit être réexporté en utilisant une réexportation de type unique lorsque l’option {1} est activée.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' doit être défini dans l'objet 'compilerOptions' du fichier de configuration json", "_0_tag_already_specified_1223": "La balise '{0}' est déjà spécifiée.", "_0_was_also_declared_here_6203": "'{0}' a également été déclaré ici.", @@ -1780,19 +1981,22 @@ "and_here_6204": "et ici.", "arguments_cannot_be_referenced_in_property_initializers_2815": "Les « arguments » ne peuvent pas être référencés dans les initialiseurs de propriété.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "« auto » : traitez les fichiers avec des importations, des exportations, import.meta, jsx (avec jsx: react-jsx) ou un format esm (avec module : node16+) en tant que modules.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "L’expression « await » à l’intérieur d’un bloc statique de classe.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Les expressions 'await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a pas d'importations ou d'exportations. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Les expressions 'await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Impossible d'utiliser des expressions 'await' dans un initialiseur de paramètre.", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' n'a aucun effet sur le type de cette expression.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Les instructions « await using » sont uniquement autorisées au niveau supérieur d’un fichier quand celui-ci est un module, mais le fichier actuel n’a aucune importation ou exportation. Envisagez d’ajouter un « export {} » vide pour faire de ce fichier un module.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Les expressions « await using » sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Des instructions « await using » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'option 'baseUrl' a la valeur '{0}'. Utilisation de cette valeur pour la résolution du nom de module non relatif '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' doit être suivi d’une lettre ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' peut uniquement être utilisé au début d'un fichier.", "case_or_default_expected_1130": "'case' ou 'default' attendu.", "catch_or_finally_expected_1472": "« Catch » ou « finally » attendu.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Les déclarations 'const' ne peuvent être déclarées que dans un bloc.", - "const_declarations_must_be_initialized_1155": "Les déclarations 'const' doivent être initialisées.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'initialiseur de membre enum 'const' donne une valeur non finie.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'initialiseur de membre enum 'const' donne une valeur non autorisée 'NaN'.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Les initialiseurs de membres const enum peuvent uniquement contenir des valeurs littérales et autres valeurs enum calculées.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Les initialiseurs de membre enum const doivent être des expressions constantes.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Les enums 'const' ne peuvent être utilisés que dans les expressions d'accès à une propriété ou un index, ou dans la partie droite d'une déclaration d'importation, d'une assignation d'exportation ou d'une requête de type.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' ne peut pas être utilisé en tant que nom de propriété de paramètre.", "constructor_is_a_reserved_word_18012": "'#constructor' est un mot réservé.", @@ -1811,13 +2015,14 @@ "file_6025": "fichier", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Les boucles 'for await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a aucune importation ou exportation. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Les boucles 'for await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Les boucles « for await » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Les accesseurs 'get' et 'set' ne peuvent pas déclarer les paramètres 'this'.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "«[]» si « files » est spécifié, sinon « [\"**/*\"]5D; »", "implements_clause_already_seen_1175": "Clause 'implements' déjà rencontrée.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Les clauses 'implements' peuvent uniquement être utilisées dans les fichiers TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' peut uniquement être utilisé dans les fichiers TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Les déclarations 'infer' sont uniquement autorisées dans la clause 'extends' d’un type conditionnel.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Les déclarations 'let' ne peuvent être déclarées que dans un bloc.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "« \\k » doit être suivi d’un nom de groupe de capture placé entre crochets angulaires.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ne peut pas être utilisé comme nom dans les déclarations 'let' ou 'const'.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === « AMD » ou « UMD » ou « System » ou « ES6 », puis « Classic », sinon « Node »", "module_system_or_esModuleInterop_6904": "module === « system » ou esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' n'a aucune entrée 'typesVersions' qui correspond à la version '{0}'.", "package_json_had_a_falsy_0_field_6220": "'package.json' a un champ '{0}' erroné.", "package_json_has_0_field_1_that_references_2_6101": "'package.json' a un champ '{0}' '{1}' qui fait référence à '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "« package.json » a un champ « peerDependencies ».", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' a une entrée 'typesVersions' '{0}' qui n'est pas une plage SemVer valide.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' a une entrée 'typesVersions' '{0}' qui correspond à la version de compilateur '{1}'. Recherche d'un modèle correspondant au nom de module '{2}'.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' a un champ 'typesVersions' avec des mappages de chemins spécifiques à la version.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L’étendue package.json « {0} » a un type non valide pour la cible du spécificateur « {1} »", "package_json_scope_0_has_no_imports_defined_6273": "L’étendue package.json « {0} » ne comporte aucune importation définie.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "L'option 'paths' est spécifiée. Recherche d'un modèle correspondant au nom de module '{0}'.", + "q_is_only_available_inside_character_class_1511": "« \\q » n’est disponible que dans la classe de caractères.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "« \\q » doit être suivi d’alternatives de chaîne entre accolades.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Le modificateur 'readonly' peut apparaître uniquement dans une déclaration de propriété ou une signature d'index.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Le modificateur de type 'readonly' est uniquement autorisé sur les types littéraux de tableau et de tuple.", "require_call_may_be_converted_to_an_import_80005": "L'appel de 'require' peut être converti en import.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Les assertions 'resolution-mode' sont prises en charge uniquement quand 'moduleResolution' est 'node16' ou 'nodenext'.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Les assertions 'resolution-mode' sont instables. Utilisez TypeScript nocturne pour désactiver cette erreur. Essayez de mettre à jour avec « npm install -D typescript@next ».", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "« mode résolution » ne peut être défini que pour les importations de type uniquement.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "« mode résolution » est la seule clé valide pour les assertions d’importation de type.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "« resolution-mode » est la seule clé valide pour les attributs d’importation de type.", "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' doit être 'require' ou 'import'.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'option 'rootDirs' est définie. Utilisation de celle-ci pour la résolution du nom de module relatif '{0}'.", "super_can_only_be_referenced_in_a_derived_class_2335": "'super' ne peut être référencé que dans une classe dérivée.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "Impossible de référencer 'this' dans un nom de propriété calculée.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Impossible de référencer 'this' dans le corps d'un module ou d'un espace de noms.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Impossible de référencer 'this' dans un initialiseur de propriété statique.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "Impossible de référencer 'this' dans des arguments de constructeur.", "this_cannot_be_referenced_in_current_location_2332": "Impossible de référencer 'this' dans l'emplacement actuel.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' possède implicitement le type 'any', car il n'a pas d'annotation de type.", "true_for_ES2022_and_above_including_ESNext_6930": "'true’ pour ES2022 et versions ultérieures, y compris ESNext.", "true_if_composite_false_otherwise_6909": "« true » si « composite », « false » sinon", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "« true » quand « moduleResolution » a la valeur « node16 », « nodenext » ou « bundler » ; sinon « false ».", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc : compilateur TypeScript", "type_Colon_6902": "type :", "unique_symbol_types_are_not_allowed_here_1335": "Les types 'unique symbol' ne sont pas autorisés ici.", diff --git a/node_modules/typescript/lib/it/diagnosticMessages.generated.json b/node_modules/typescript/lib/it/diagnosticMessages.generated.json index 2acc6530a8..b059e8f131 100644 --- a/node_modules/typescript/lib/it/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/it/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "TUTTE LE OPZIONI DEL COMPILATORE", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Non è possibile usare un modificatore '{0}' con una dichiarazione di importazione.", "A_0_parameter_must_be_the_first_parameter_2680": "Il primo parametro deve essere '{0}'.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Un tag '@template' di JSDoc non può seguire un tag '@typedef', '@callback' o '@overload'", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commento '@typedef' di JSDoc non può contenere più tag '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Non è possibile usare un valore letterale 'bigint' come nome per la proprietà.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Un valore letterale bigint non può usare la notazione esponenziale.", "A_bigint_literal_must_be_an_integer_1353": "Un valore letterale bigint deve essere un numero intero.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parametro del criterio di binding non può essere facoltativo in una firma di implementazione.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Un'istruzione 'break' può essere usata solo all'interno di un'iterazione di inclusione o di un'istruzione switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Un'istruzione 'break' può solo passare a un'etichetta di un'istruzione di inclusione.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una classe di caratteri non deve contenere un segno di punteggiatura doppio riservato. La barra rovesciata stava per un carattere escape?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un intervallo di classi di caratteri non deve essere delimitato da un'altra classe di caratteri.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una classe può implementare solo un identificatore/nome qualificato con argomenti tipo facoltativi.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una classe può implementare solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una classe non può estendere un elemento di tipo primitivo come '{0}'. Le classi possono estendere solo valori costruibili.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una classe non può implementare un tipo primitivo come '{0}'. Può implementare solo altri tipi di oggetto denominati.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "È necessario assegnare un nome a una dichiarazione di classe senza modificatore 'default'.", "A_class_member_cannot_have_the_0_keyword_1248": "Un membro di classe non può contenere la parola chiave '{0}'.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Non sono consentite espressioni con virgole in un nome di proprietà calcolato.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Un costruttore non può contenere un parametro 'this'.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Un'istruzione 'continue' può essere usata solo all'interno di un'istruzione di iterazione di inclusione.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Un'istruzione 'continue' può solo passare a un'etichetta di un'istruzione di iterazione di inclusione.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Non è possibile importare un file di dichiarazione senza 'import type'. Si intendeva importare un file di implementazione '{0}'?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Non è possibile usare un modificatore 'declare' in un contesto già di ambiente.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un elemento Decorator può solo decorare un'implementazione del metodo e non un overload.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una clausola 'default' non può essere specificata più volte in un'istruzione 'switch'.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Un'esportazione predefinita deve essere al livello principale di una dichiarazione di file o di modulo.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "In questo contesto non sono consentite asserzioni di assegnazione definite '!'.", "A_destructuring_declaration_must_have_an_initializer_1182": "Una dichiarazione di destrutturazione deve includere un inizializzatore.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Con una chiamata di importazione dinamica in ES5/ES3 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Con una chiamata di importazione dinamica in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una chiamata di importazione dinamica restituisce un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", "A_file_cannot_have_a_reference_to_itself_1006": "Un file non può contenere un riferimento a se stesso.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una funzione che restituisce 'never' non può includere un punto finale raggiungibile.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una funzione chiamata con la parola chiave 'new' non può contenere un tipo 'this' con valore 'void'.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Una funzione il cui tipo dichiarato non è 'void' né 'any' deve restituire un valore.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una funzione il cui tipo dichiarato non è 'undefined', 'void' o 'any' deve restituire un valore.", "A_generator_cannot_have_a_void_type_annotation_2505": "Un generatore non può contenere un'annotazione di tipo 'void'.", "A_get_accessor_cannot_have_parameters_1054": "Una funzione di accesso 'get' non può contenere parametri.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Una funzione di accesso get deve essere accessibile almeno come setter", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una dichiarazione di spazio dei nomi non può essere presente in un file diverso rispetto a una classe o funzione con cui è stato eseguito il merge.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una dichiarazione di spazio dei nomi non può essere specificata prima di una classe o funzione con cui è stato eseguito il merge.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una dichiarazione di spazio dei nomi è consentita solo al livello superiore di uno spazio dei nomi o di un modulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una dichiarazione 'namespace' non deve essere dichiarata usando la parola chiave 'module'. Usare invece la parola chiave 'namespace'.", "A_non_dry_build_would_build_project_0_6357": "Se si esegue una compilazione senza flag -dry, verrà compilato il progetto '{0}'", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Se si esegue una compilazione senza flag -dry, i file seguenti verranno eliminati: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Se si esegue una compilazione non di prova, l'output del progetto '{0}' verrà aggiornato", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Se si esegue una compilazione non di prova, i timestamp dell'output del progetto '{0}' verranno aggiornati", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inizializzatore di parametro è consentito solo in un'implementazione di funzione o costruttore.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Non è possibile dichiarare una proprietà di parametro usando un parametro REST.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una chiamata 'super' deve essere la prima istruzione del costruttore a fare riferimento a 'super' o 'this' quando una classe derivata contiene proprietà inizializzate, proprietà di parametri o identificatori privati.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Un guard di tipo basato su 'this' non è compatibile con uno basato su parametri.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un tipo 'this' è disponibile solo in un membro non statico di una classe o di interfaccia.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Non è possibile usare un modificatore 'export' di primo livello nelle dichiarazioni di valori in un modulo CommonJS quando è abilitato 'verbatimModuleSyntax'.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un file 'tsconfig.json' è già definito in: '{0}'.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membro di tupla non può essere sia facoltativo che inattivo.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo di tupla non può essere indicizzato con un valore negativo.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Un'espressione 'yield' è consentita solo nel corpo di un generatore.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Non è possibile accedere al metodo astratto '{0}' nella classe '{1}' tramite l'espressione super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "I metodi astratti possono essere inclusi solo in una classe astratta.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Le proprietà astratte possono essere incluse solo in una classe astratta.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Non è possibile accedere alla proprietà astratta '{0}' nella classe '{1}' nel costruttore.", "Accessibility_modifier_already_seen_1028": "Il modificatore di accessibilità è già presente.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Le funzioni di accesso sono disponibili solo se destinate a ECMAScript 5 e versioni successive.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Le funzioni di accesso devono essere tutte astratte o tutte non astratte.", "Add_0_to_unresolved_variable_90008": "Aggiungere '{0}.' alla variabile non risolta", "Add_a_return_statement_95111": "Aggiungere un'istruzione return", + "Add_a_return_type_to_the_function_declaration_9031": "Aggiungere un elemento di tipo restituito alla dichiarazione di funzione.", + "Add_a_return_type_to_the_function_expression_9030": "Aggiungere un elemento di tipo restituito all'espressione della funzione.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Aggiungere un tipo restituito alla dichiarazione della funzione di accesso get.", + "Add_a_return_type_to_the_method_9034": "Aggiungere un tipo restituito al metodo", + "Add_a_type_annotation_to_the_parameter_0_9028": "Aggiungere un'annotazione di tipo al parametro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Aggiungere un'annotazione di tipo alla proprietà {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Aggiungere un'annotazione di tipo alla variabile {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Aggiunge un tipo al parametro della dichiarazione della funzione di accesso set.", "Add_all_missing_async_modifiers_95041": "Aggiungere tutti i modificatori 'async' mancanti", "Add_all_missing_attributes_95168": "Aggiungi tutti gli attributi mancanti", "Add_all_missing_call_parentheses_95068": "Aggiungere tutte le parentesi mancanti nelle chiamate", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Aggiungere tutte le importazioni mancanti", "Add_all_missing_members_95022": "Aggiungere tutti i membri mancanti", "Add_all_missing_override_modifiers_95162": "Aggiungere tutti i modificatori 'override' mancanti", + "Add_all_missing_parameters_95190": "Aggiungere tutti i parametri mancanti", "Add_all_missing_properties_95166": "Aggiunge tutte le proprietà mancanti", "Add_all_missing_return_statement_95114": "Aggiungere tutte le istruzioni return mancanti", "Add_all_missing_super_calls_95039": "Aggiungere tutte le chiamate a super mancanti", + "Add_all_missing_type_annotations_90067": "Aggiungere tutte le annotazioni di tipo mancante", + "Add_all_optional_parameters_95193": "Aggiungere tutti i parametri facoltativi", + "Add_annotation_of_type_0_90062": "Aggiungere annotazione di tipo '{0}'", "Add_async_modifier_to_containing_function_90029": "Aggiungere il modificatore async alla funzione contenitore", "Add_await_95083": "Aggiungere 'await'", "Add_await_to_initializer_for_0_95084": "Aggiungere 'await' all'inizializzatore per '{0}'", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Aggiungere gli inizializzatori a tutte le proprietà non inizializzate", "Add_missing_attributes_95167": "Aggiungi attributi mancanti", "Add_missing_call_parentheses_95067": "Aggiungere le parentesi mancanti nelle chiamate", + "Add_missing_comma_for_object_member_completion_0_95187": "Aggiungere la virgola mancante per il completamento dei membri dell'oggetto '{0}'.", "Add_missing_enum_member_0_95063": "Aggiungere il membro di enumerazione mancante '{0}'", "Add_missing_function_declaration_0_95156": "Aggiungere la dichiarazione di funzione mancante '{0}'", "Add_missing_new_operator_to_all_calls_95072": "Aggiungere l'operatore mancante 'new' a tutte le chiamate", "Add_missing_new_operator_to_call_95071": "Aggiungere l'operatore mancante 'new' alla chiamata", + "Add_missing_parameter_to_0_95188": "Aggiungere il parametro mancante a '{0}'", + "Add_missing_parameters_to_0_95189": "Aggiungere i parametri mancanti a '{0}'", "Add_missing_properties_95165": "Aggiunge le proprietà mancanti", "Add_missing_super_call_90001": "Aggiungere la chiamata mancante a 'super()'", "Add_missing_typeof_95052": "Aggiungere l'elemento 'typeof' mancante", "Add_names_to_all_parameters_without_names_95073": "Aggiungere i nomi a tutti i parametri senza nomi", + "Add_optional_parameter_to_0_95191": "Aggiungere i parametri facoltativi a '{0}'", + "Add_optional_parameters_to_0_95192": "Aggiungi i parametri facoltativi a '{0}'", "Add_or_remove_braces_in_an_arrow_function_95058": "Aggiungere o rimuovere le parentesi graffe in una funzione arrow", "Add_override_modifier_95160": "Aggiungere il modificatore 'override'", "Add_parameter_name_90034": "Aggiungere il nome del parametro", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Aggiungere il qualificatore a tutte le variabili non risolte corrispondenti a un nome di membro", + "Add_return_type_0_90063": "Aggiungere '{0}' del tipo restituito", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Aggiungere soddisfa e un'asserzione di tipo a questa espressione (soddisfa T come T) per rendere il tipo esplicito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Aggiungere soddisfa e un'asserzione di tipo inline con '{0}'", "Add_to_all_uncalled_decorators_95044": "Aggiungere '()' a tutti gli elementi Decorator non chiamati", "Add_ts_ignore_to_all_error_messages_95042": "Aggiungere '@ts-ignore' a tutti i messaggi di errore", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Aggiunge 'undefined' a un tipo quando l'accesso viene eseguito tramite un indice.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Consente di eseguire importazioni predefinite da moduli senza esportazione predefinita. Non influisce sulla creazione del codice ma solo sul controllo dei tipi.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Consente 'import x from y' quando un modulo non contiene un'esportazione predefinita.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Consente di eseguire una volta per progetto l'importazione di funzioni helper da tslib, invece di includerle per ogni file.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Consentire alle importazioni di includere le estensioni di file TypeScript. Richiede l'impostazione di '--moduleResolution bundler' e '--noEmit' o '--emitDeclarationOnly'.", "Allow_javascript_files_to_be_compiled_6102": "Consente la compilazione di file JavaScript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Consente che più cartelle vengano considerate come una sola durante la risoluzione dei moduli.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Il nome file già incluso '{0}' differisce da quello '{1}' solo per l'uso di maiuscole/minuscole.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Non è stato specificato alcun argomento corrispondente a questo modello di associazione.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmetico deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Una funzione arrow non può contenere un parametro 'this'.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Con una funzione o un metodo asincrono in ES5/ES3 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Con una funzione o un metodo asincrono in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Un metodo o una funzione asincrona deve restituire un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", "An_async_iterator_must_have_a_next_method_2519": "Un iteratore asincrono deve contenere un metodo 'next()'.", "An_element_access_expression_should_take_an_argument_1011": "Un'espressione di accesso a elementi deve accettare un argomento.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una dichiarazione di esportazione può essere usata solo al livello superiore di un modulo.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una dichiarazione di esportazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", "An_export_declaration_cannot_have_modifiers_1193": "Una dichiarazione di esportazione non può contenere modificatori.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Non è possibile testare la veridicità di un'espressione di tipo 'void'.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valore di escape Unicode avanzato deve essere compreso tra 0x0 e 0x10FFFF inclusi.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Non è possibile specificare un identificatore o una parola chiave subito dopo un valore letterale numerico.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Non è possibile dichiarare un'implementazione in contesti di ambiente.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias di importazione non può fare riferimento a una dichiarazione esportata con 'export type'.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias di importazione non può fare riferimento a una dichiarazione importata con 'import type'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias di importazione non può essere risolto in una dichiarazione type o type-only quando è abilitato 'verbatimModuleSyntax'.", "An_import_alias_cannot_use_import_type_1392": "Un alias di importazione non può usare 'import type'", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una dichiarazione di importazione può essere usata solo al livello superiore di un modulo.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una dichiarazione di importazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", "An_import_declaration_cannot_have_modifiers_1191": "Una dichiarazione di importazione non può contenere modificatori.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Un percorso di importazione non può terminare con l'estensione '{0}'. In alternativa, provare a importare '{1}'.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un percorso di importazione può terminare con un'estensione '{0}' solo quando 'allowImportingTsExtensions' è abilitato.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Una firma dell'indice non può contenere un parametro rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Una firma dell'indice non può contenere una virgola finale.", "An_index_signature_must_have_a_type_annotation_1021": "Una firma dell'indice deve contenere un'annotazione di tipo.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Un'espressione di creazione di un'istanza non può essere seguita da un accesso a proprietà.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Un'interfaccia può estendere solo un identificatore/nome qualificato con argomenti tipo facoltativi.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Un'interfaccia non può estendere un tipo primitivo come '{0}'; un'interfaccia può estendere solo tipi e classi denominati", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Un'interfaccia non può estendere un elemento di tipo primitivo come '{0}'. Può estendere solo altri tipi di oggetto denominati.", "An_interface_property_cannot_have_an_initializer_1246": "Una proprietà di interfaccia non può contenere un inizializzatore.", "An_iterator_must_have_a_next_method_2489": "Un iteratore deve contenere un metodo 'next()'.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Quando si usa un'istruzione @jsx con frammenti JSX, è necessaria un'istruzione pragma @jsxFrag.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un valore letterale di oggetto non può contenere più proprietà con lo stesso nome.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un valore letterale di oggetto non può contenere proprietà e funzioni di accesso con lo stesso nome.", "An_object_member_cannot_be_declared_optional_1162": "Un membro di oggetto non può essere dichiarato come facoltativo.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Il metodo '[Symbol.hasInstance]' di un oggetto deve restituire un valore booleano da utilizzare a destra di un'espressione 'instanceof'.", "An_optional_chain_cannot_contain_private_identifiers_18030": "Una catena facoltativa non può contenere identificatori privati.", "An_optional_element_cannot_follow_a_rest_element_1266": "Non è possibile specificare un elemento facoltativo dopo un elemento REST.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Un valore esterno di 'this' è nascosto da questo contenitore.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Non è possibile dichiarare come generatore una firma di overload.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione unaria con l'operatore '{0}'. Provare a racchiudere l'espressione tra parentesi.", "Annotate_everything_with_types_from_JSDoc_95043": "Annotare tutto con tipi di JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annotare tipi di proprietà funzione expando in uno spazio dei nomi", "Annotate_with_type_from_JSDoc_95009": "Annotare con tipo di JSDoc", "Another_export_default_is_here_2753": "In questo punto è presente un'altra impostazione predefinita per l'esportazione.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualsiasi proprietà Unicode che potrebbe corrispondere a più di un singolo carattere è disponibile solo quando è impostato il flag Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualsiasi elemento che potrebbe corrispondere a più di un singolo carattere non è valido all'interno di una classe di caratteri negati.", "Are_you_missing_a_semicolon_2734": "Manca un punto e virgola?", "Argument_expression_expected_1135": "È prevista l'espressione di argomento.", "Argument_for_0_option_must_be_Colon_1_6046": "L'argomento per l'opzione '{0}' deve essere {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argomento di tipo '{0}' non può essere assegnato al parametro di tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Gli argomenti per il parametro REST '{0}' non sono stati specificati.", "Array_element_destructuring_pattern_expected_1181": "È previsto il criterio di destrutturazione dell'elemento della matrice.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Non è possibile dedurre matrici con elementi estesi con --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Con le asserzioni ogni nome nella destinazione di chiamata deve essere dichiarato con un'annotazione di tipo esplicita.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Con le asserzioni la destinazione di chiamata deve essere un identificatore o un nome completo.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L'assegnazione di proprietà a funzioni senza dichiararle non è supportata con --isolatedDeclarations. Aggiungere una dichiarazione esplicita per le proprietà assegnate a questa funzione.", "Asterisk_Slash_expected_1010": "È previsto '*/'.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Almeno una funzione di accesso deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Gli aumenti per l'ambito globale possono solo essere direttamente annidati in dichiarazioni di modulo di ambiente o moduli esterni.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Gli aumenti per l'ambito globale devono contenere il modificatore 'declare', a meno che non siano già presenti in un contesto di ambiente.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Il rilevamento automatico per le defizioni di tipi è abilitato nel progetto '{0}'. Verrà eseguito il passaggio di risoluzione aggiuntivo per il modulo '{1}' usando il percorso della cache '{2}'.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Non è possibile usare l'espressione await all'interno di un blocco statico di classe.", "BUILD_OPTIONS_6919": "OPZIONI DI COMPILAZIONE", "Backwards_Compatibility_6253": "Compatibilità con le versioni precedenti", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Le espressioni di classi di base non possono fare riferimento a parametri di tipo classe.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "I valori letterali bigint non sono disponibili quando la destinazione è precedente a ES2020.", "Binary_digit_expected_1177": "È prevista una cifra binaria.", "Binding_element_0_implicitly_has_an_1_type_7031": "L'elemento di binding '{0}' contiene implicitamente un tipo '{1}'.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Non è possibile esportare direttamente gli elementi di binding con --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "La variabile con ambito blocco '{0}' è stata usata prima di essere stata dichiarata.", "Build_a_composite_project_in_the_working_directory_6925": "Compila un progetto composito nella directory di lavoro.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilare tutti i progetti, anche quelli che sembrano aggiornati.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilare uno o più progetti e le relative dipendenze, se non aggiornate", "Build_option_0_requires_a_value_of_type_1_5073": "Con l'opzione di compilazione '{0}' è richiesto un valore di tipo {1}.", "Building_project_0_6358": "Compilazione del progetto '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Per gli enumeratori predefiniti viene creata un'istanza con un tipo 'TReturn' di tipo 'undefined' invece di 'any'.", "COMMAND_LINE_FLAGS_6921": "FLAG DELLA RIGA DI COMANDO", "COMMON_COMMANDS_6916": "COMANDI COMUNI", "COMMON_COMPILER_OPTIONS_6920": "OPZIONI COMUNI DEL COMPILATORE", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "I tipi restituiti delle firme di chiamata '{0}' e '{1}' sono incompatibili.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La firma di chiamata, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Le firme di chiamata senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "La destinazione della chiamata non contiene alcuna firma.", "Can_only_convert_logical_AND_access_chains_95142": "È possibile convertire solo catene di accesso AND logiche", "Can_only_convert_named_export_95164": "È possibile solo convertire l'esportazione denominata", "Can_only_convert_property_with_modifier_95137": "È possibile convertire solo la proprietà con il modificatore", - "Can_only_convert_string_concatenation_95154": "È possibile convertire solo la concatenazione di stringhe", + "Can_only_convert_string_concatenations_and_string_literals_95154": "È possibile convertire solo concatenazioni di stringhe e valori letterali stringa", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Non è possibile accedere a '{0}.{1}' perché '{0}' è un tipo ma non uno spazio dei nomi. Si intendeva recuperare il tipo della proprietà '{1}' in '{0}' con '{0}[\"{1}\"]'?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Quando si specifica il flag '--isolatedModules', non è possibile accedere a enumerazioni const di ambiente.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Non è possibile accedere '{0}' da un altro file senza qualifica quando '{1}' è abilitato. In alternativa, usare '{2}'.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Non è possibile accedere alle enumerazioni const di Ambient quando '{0}' è abilitato.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Non è possibile assegnare un tipo di costruttore '{0}' a un tipo di costruttore '{1}'.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Non è possibile assegnare un tipo di costruttore astratto a un tipo di costruttore non astratto.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Non è possibile assegnare a '{0}' perché è una classe.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "La definizione della libreria per '{0}' non è stata trovata.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "La definizione della libreria per '{0}' non è stata trovata. Si intendeva '{1}'?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Non è possibile trovare il modulo '{0}'. Provare a usare '--resolveJsonModule' per importare il modulo con estensione '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Non è possibile trovare il modulo '{0}'. Si intendeva impostare l'opzione 'moduleResolution' su 'node' o aggiungere alias all'opzione 'paths'?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Non è possibile trovare il modulo '{0}'. Si intendeva impostare l'opzione 'moduleResolution' su 'nodenext' o aggiungere alias all'opzione 'paths'?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Non è possibile trovare il modulo '{0}' o le relative dichiarazioni di tipo corrispondenti.", "Cannot_find_name_0_2304": "Il nome '{0}' non è stato trovato.", "Cannot_find_name_0_Did_you_mean_1_2552": "Il nome '{0}' non è stato trovato. Si intendeva '{1}'?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Impossibile trovare il nome '{0}'. Si intendeva scrivere questo elemento in una funzione asincrona?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{1}' o versioni successive.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a modificare l'opzione 'lib' del compilatore in modo che includa 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun` quindi aggiungere 'bun' al campo Tipi in tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha`.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha` e quindi aggiungere 'jest' o 'mocha' al campo types in tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery`.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma la destrutturazione della matrice invierà sempre '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma l'estensione della matrice invierà sempre '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma for-of invierà sempre '{0}'.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Non è possibile anteporre il progetto '{0}' perché 'outFile' non è impostato", + "Cannot_move_statements_to_the_selected_file_95183": "Non è possibile spostare istruzioni nel file selezionato", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Non è possibile passare al file. Il file selezionato non è valido", "Cannot_read_file_0_5083": "Non è possibile leggere il file '{0}'.", "Cannot_read_file_0_Colon_1_5012": "Non è possibile leggere il file '{0}': {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Non è possibile dichiarare di nuovo la variabile con ambito blocco '{0}'.", "Cannot_redeclare_exported_variable_0_2323": "Non è possibile dichiarare di nuovo la variabile esportata '{0}'.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Non è possibile dichiarare di nuovo l'identificatore '{0}' nella clausola catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Non è possibile avviare una chiamata di funzione in un'annotazione di tipo.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Non è possibile aggiornare l'output del progetto '{0}' perché si è verificato un errore durante la lettura del file '{1}'", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Non è possibile usare JSX a meno che non sia specificato il flag '--jsx'.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Non è possibile usare 'export import' in un tipo o in uno spazio dei nomi solo di tipo quando si specifica il flag '--isolatedModules'.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Non è possibile usare 'export import' in uno spazio dei nomi type o type-only quando '{0}' è abilitato.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Non è possibile usare importazioni, esportazioni o aumenti del modulo quando il valore di '--module' è 'none'.", "Cannot_use_namespace_0_as_a_type_2709": "Non è possibile usare lo spazio dei nomi '{0}' come tipo.", "Cannot_use_namespace_0_as_a_value_2708": "Non è possibile usare lo spazio dei nomi '{0}' come valore.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Cambiare 'extends' in 'implements'", "Change_spelling_to_0_90022": "Modificare l'ortografia in '{0}'", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifica la presenza di proprietà di classe dichiarate ma non impostate nel costruttore.", + "Check_side_effect_imports_6806": "Controllare le importazioni di effetti collaterali.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verifica che gli argomenti per i metodi 'bind', 'call', and 'apply' corrispondano alla funzione originale.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verrà verificato se '{0}' è il prefisso di corrispondenza più lungo per '{1}' - '{2}'.", "Circular_definition_of_import_alias_0_2303": "Definizione circolare dell'alias di importazione '{0}'.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "La dichiarazione classe non può implementare l'elenco di overload per '{0}'.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag '@augments' o '@extends'.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Non è possibile elementi Decorator di classe con l'identificatore privato statico. Provare a rimuovere l'elemento Decorator sperimentale.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Il campo della classe '{0}' definito dalla classe padre non è accessibile nella classe figlio tramite super.", "Class_name_cannot_be_0_2414": "Il nome della classe non può essere '{0}'.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Il nome della classe non può essere 'Object' quando la destinazione è ES5 con il modulo {0}.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Il lato statico '{0}' della classe estende in modo errato il lato statico '{1}' della classe di base.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Opzioni della riga di comando", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila il progetto in base al percorso del file di configurazione o della cartella contenente un file 'tsconfig.json'.", "Compiler_Diagnostics_6251": "Diagnostica compilatore", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Non è possibile specificare una stringa vuota per l'opzione del compilatore '{0}'.", "Compiler_option_0_expects_an_argument_6044": "Con l'opzione '{0}' del compilatore è previsto un argomento.", "Compiler_option_0_may_not_be_used_with_build_5094": "L'opzione del compilatore '--{0}' potrebbe non essere usata con '--build'.", "Compiler_option_0_may_only_be_used_with_build_5093": "L'opzione del compilatore '--{0}' potrebbe essere usata solo con '--build'.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "I progetti compositi non possono disabilitare la creazione di dichiarazioni.", "Composite_projects_may_not_disable_incremental_compilation_6379": "I progetti compositi non possono disabilitare la compilazione incrementale.", "Computed_from_the_list_of_input_files_6911": "Calcolato dall'elenco dei file di input", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Le proprietà calcolate devono essere valori letterali numerici o stringa, variabili o espressioni con punti con --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "I nomi di proprietà calcolati non sono consentiti nelle enumerazioni.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Non è possibile dedurre i nomi di proprietà calcolati nei valori letterali di classe o oggetto con --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "In un'enumerazione con membri con valore stringa non sono consentiti valori calcolati.", "Concatenate_and_emit_output_to_single_file_6001": "Concatena e crea l'output in un singolo file.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "In '{1}' e '{2}' sono state trovate definizioni in conflitto per '{0}'. Per risolvere il conflitto, provare a installare una versione specifica di questa libreria.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condizioni da impostare in aggiunta alle impostazioni predefinite specifiche del resolver durante la risoluzione delle importazioni.", "Conflicts_are_in_this_file_6201": "I conflitti si trovano in questo file.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Provare ad aggiungere un modificatore \"declare\" a questa classe.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "I tipi restituiti delle firme del costrutto '{0}' e '{1}' sono incompatibili.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Convertire '{0}' nel tipo di oggetto con mapping", "Convert_all_const_to_let_95102": "Convertire ogni 'const' in 'let'", "Convert_all_constructor_functions_to_classes_95045": "Convertire tutte le funzioni di costruttore in classi", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Convertire tutte le importazioni non usate come valore in importazioni solo di tipi", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertire tutti i caratteri non validi nel codice entità HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertire tutti i tipi riesportati in esportazioni solo di tipi", "Convert_all_require_to_import_95048": "Convertire tutte le occorrenze di 'require' in 'import'", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Convertire tutto in valori letterali numerici bigint", "Convert_all_to_default_imports_95035": "Convertire tutte le impostazioni predefinite", "Convert_all_type_literals_to_mapped_type_95021": "Convertire tutti i valori letterali di tipo nel tipo di cui è stato eseguito il mapping", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertire tutti gli elementi typedef in tipi TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Convertire la funzione arrow o l'espressione di funzione", "Convert_const_to_let_95093": "Convertire 'const' in 'let'", "Convert_default_export_to_named_export_95061": "Convertire l'esportazione predefinita nell'esportazione denominata", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Convertire nell'espressione di catena facoltativa", "Convert_to_template_string_95096": "Convertire nella stringa di modello", "Convert_to_type_only_export_1364": "Convertire nell'esportazione solo di tipi", - "Convert_to_type_only_import_1373": "Convertire nell'importazione solo di tipi", + "Convert_typedef_to_TypeScript_type_95176": "Convertire typedef in tipo TypeScript.", "Corrupted_locale_file_0_6051": "Il file delle impostazioni locali {0} è danneggiato.", "Could_not_convert_to_anonymous_function_95153": "Non è stato possibile convertire nella funzione anonima", "Could_not_convert_to_arrow_function_95151": "Non è stato possibile convertire nella funzione arrow", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Non è stato possibile trovare il nome '{0}'. Si intendeva '{1}'?", "Could_not_find_namespace_import_or_named_imports_95132": "Non è stato possibile trovare l'importazione spazi dei nomi o importazioni denominate", "Could_not_find_property_for_which_to_generate_accessor_95135": "Non è stato possibile trovare la proprietà per cui generare la funzione di accesso", + "Could_not_find_variable_to_inline_95185": "Non è possibile trovare la variabile per inline.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Non è stato possibile risolvere il percorso '{0}' con le estensioni: {1}.", "Could_not_write_file_0_Colon_1_5033": "Non è stato possibile scrivere il file '{0}': {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Crea file di mapping di origine per i file JavaScript creati.", "Create_sourcemaps_for_d_ts_files_6614": "Crea mapping di origine per i file d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un file tsconfig.jscon le impostazioni consigliate nella directory di lavoro.", "DIRECTORY_6038": "DIRECTORY", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Le sequenze di escape e i backreference decimali non sono consentiti in una classe di caratteri.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "I decimali con zeri iniziali non sono consentiti.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La dichiarazione causa un aumento di una dichiarazione in un altro file. Questa operazione non è serializzabile.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La creazione della dichiarazione per questo file richiede il mantenimento dell'importazione per gli aumenti. Funzionalità non supportata con --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}' dal modulo '{1}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "La creazione di dichiarazioni per questo parametro richiede l'aggiunta implicita di elementi non definiti al relativo tipo. Funzionalità non supportata con --isolatedDeclarations.", "Declaration_expected_1146": "È prevista la dichiarazione.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Il nome della dichiarazione è in conflitto con l'identificatore globale predefinito '{0}'.", "Declaration_or_statement_expected_1128": "È prevista la dichiarazione o l'istruzione.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Dichiarare la proprietà statica '{0}'", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Il tipo restituito della funzione Decorator '{0}' non è assegnabile al tipo '{1}'.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Il tipo restituito della funzione Decorator è '{0}' ma è previsto 'void' o 'any'.", + "Decorator_used_before_export_here_1486": "Elemento Decorator usato prima di 'export'.", "Decorators_are_not_valid_here_1206": "In questo punto le espressioni Decorator non sono valide.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Non è possibile applicare le espressioni Decorator a più funzioni di accesso get/set con lo stesso nome.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Gli elementi Decorator potrebbero non essere applicati ai parametri 'this'.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Gli elementi Decorator non possono essere visualizzati dopo 'export' o 'export default' se vengono visualizzati anche prima di 'export'.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Gli elementi Decorator devono precedere il nome e tutte le parole chiave delle dichiarazioni di proprietà.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Le variabili della clausola catch predefinite sono 'unknown' anziché 'any'.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'esportazione predefinita del modulo contiene o usa il nome privato '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Non è possibile dedurre le esportazioni predefinite con --isolatedDeclarations.", "Default_library_1424": "Libreria predefinita", "Default_library_for_target_0_1425": "Libreria predefinita per la destinazione '{0}'", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Le definizioni degli identificatori seguenti sono in conflitto con quelle di un altro file: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Disabilita la cancellazione delle dichiarazioni 'const enum' nel codice generato.", "Disable_error_reporting_for_unreachable_code_6603": "Disabilita la segnalazione errori per il codice non raggiungibile.", "Disable_error_reporting_for_unused_labels_6604": "Disabilita la segnalazione errori per le etichette non usate.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Disabilitare il controllo completo dei tipi (verranno segnalati solo errori critici di creazione e analisi).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Disabilita la generazione di funzioni helper personalizzate come '__extends' nell'output compilato.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Disabilita l'inclusione di tutti i file di libreria, incluso il file lib.d.ts predefinito.", "Disable_loading_referenced_projects_6235": "Disabilitare il caricamento dei progetti cui viene fatto riferimento.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Non segnala gli errori in caso di codice non raggiungibile.", "Do_not_report_errors_on_unused_labels_6074": "Non segnala gli errori in caso di etichette non usate.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Non risolvere il percorso reale di collegamenti simbolici.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Non trasformare o eliminare importazioni o esportazioni non contrassegnate come type-only, in modo che vengano scritte nel formato del file di output in base all'impostazione 'module'.", "Do_not_truncate_error_messages_6165": "Non tronca i messaggi di errore.", "Duplicate_function_implementation_2393": "Implementazione di funzione duplicata.", "Duplicate_identifier_0_2300": "Identificatore '{0}' duplicato.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Firma dell'indice duplicata per il tipo '{0}'.", "Duplicate_label_0_1114": "Etichetta '{0}' duplicata.", "Duplicate_property_0_2718": "La proprietà '{0}' è duplicata.", + "Duplicate_regular_expression_flag_1500": "Flag di espressione regolare duplicato.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "L'identificatore dell'importazione dinamica deve essere di tipo 'string', ma il tipo specificato qui è '{0}'.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Le importazioni dinamiche sono supportate solo quando il flag '--module' è impostato su 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16' o 'nodenext'.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Le importazioni dinamiche possono accettare come argomenti solo un identificatore di modulo e un'asserzione facoltativa", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Le importazioni dinamiche supportano un secondo argomento solo quando l'opzione '--module' è impostata su ''esnext', 'node16', o 'nodenext'.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Le importazioni dinamiche possono accettare come argomenti solo un identificatore di modulo e un set di attributi facoltativi", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Le importazioni dinamiche supportano un secondo argomento solo quando l'opzione '--module' è impostata su ''esnext', 'node16', 'nodenext' o 'preserve'.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Sintassi ESM non consentita in un modulo CommonJS quando 'module' è impostato su 'preserve'.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Sintassi ESM non consentita in un modulo CommonJS quando 'verbatimModuleSyntax' è abilitato.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Il valore di ogni dichiarazione di '{0}.{1}' è diverso, dove '{2}' è previsto mentre '{3}' è specificato.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Ogni membro del tipo di unione '{0}' contiene firme di costrutto, ma nessuna di tali firme è compatibile con le altre.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Ogni membro del tipo di unione '{0}' contiene firme, ma nessuna di tali firme è compatibile con le altre.", "Editor_Support_6249": "Supporto Editor", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Abilita la segnalazione errori nei file JavaScript con controllo del tipo.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Abilita la segnalazione errori quando variabili locali non vengono lette.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Abilita la segnalazione errori quando a 'this' viene assegnato il tipo 'any'.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Abilita il supporto sperimentale per gli elementi Decorator della bozza fase 2 di TC39.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Abilitare il supporto sperimentale per gli elementi Decorator sperimentali legacy.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Abilitare l'importazione di file con qualsiasi estensione, purché sia presente un file di dichiarazione.", "Enable_importing_json_files_6689": "Abilita l'importazione di file .json.", "Enable_project_compilation_6302": "Abilitare la compilazione dei progetti", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Abilitare i metodi strict 'bind', 'call' e 'apply' nelle funzioni.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Si assicura che l'uso di maiuscole e minuscole sia corretto nelle direttive import.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Si assicura che sia possibile eseguire il transpile di ogni file in modo sicuro senza basarsi su altre direttive import.", "Ensure_use_strict_is_always_emitted_6605": "Si assicura che la direttiva 'use strict' venga sempre creata.", + "Entering_conditional_exports_6413": "Immissione di esportazioni condizionali.", "Entry_point_for_implicit_type_library_0_1420": "Punto di ingresso per la libreria dei tipi impliciti '{0}'", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto di ingresso per la libreria dei tipi impliciti '{0}' con packageId '{1}'", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "È possibile unire dichiarazioni di enumerazione solo con lo spazio dei nomi o altre dichiarazioni di enumerazione.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Le dichiarazioni di enumerazione devono essere tutte const o tutte non const.", "Enum_member_expected_1132": "È previsto il membro di enumerazione.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Il membro di enumerazione che segue un membro numerico non letterale deve avere un inizializzatore quando 'isolatedModules' è abilitato.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Gli inizializzatori di membri di enumerazione devono essere calcolabili senza riferimenti a simboli esterni con --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "Il membro di enumerazione deve contenere l'inizializzatore.", "Enum_name_cannot_be_0_2431": "Il nome dell'enumerazione non può essere '{0}'.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Il tipo di enumerazione '{0}' contiene membri i cui inizializzatori non sono valori letterali.", "Errors_Files_6041": "File di errori", + "Escape_sequence_0_is_not_allowed_1488": "Sequenza di escape '{0}' non consentita.", "Examples_Colon_0_6026": "Esempi: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complessità eccessiva rispetto ai tipi '{0}' e '{1}'.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "La profondità dello stack per il confronto dei tipi '{0}' e '{1}' è eccessiva.", + "Exiting_conditional_exports_6416": "Chiusura di esportazioni condizionali.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Sono previsti argomento tipo {0}-{1}. Per specificarli, usare un tag '@extends'.", "Expected_0_arguments_but_got_1_2554": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}. Si è dimenticato di includere 'void' nell'argomento di tipo per 'Promise'?", "Expected_0_type_arguments_but_got_1_2558": "Sono previsti {0} argomenti tipo, ma ne sono stati ottenuti {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Sono previsti {0} argomenti tipo. Per specificarli, usare un tag '@extends'.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Previsto 1 argomento, ma ottenuto 0. 'new Promise()' richiede un hint JSDoc per produrre un elemento 'resolve' che possa essere chiamato senza argomenti.", + "Expected_a_Unicode_property_name_1523": "È previsto un nome per la proprietà Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "È previsto un nome o un valore per la proprietà Unicode.", + "Expected_a_Unicode_property_value_1525": "È previsto un valore per la proprietà Unicode.", + "Expected_a_capturing_group_name_1514": "È previsto un nome per il gruppo di acquisizione.", + "Expected_a_class_set_operand_1520": "È previsto un operando del set di classi.", "Expected_at_least_0_arguments_but_got_1_2555": "Sono previsti almeno {0} argomenti, ma ne sono stati ottenuti {1}.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "È previsto il tag di chiusura JSX corrispondente per '{0}'.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "È previsto il tag di chiusura corrispondente per il frammento JSX.", "Expected_for_property_initializer_1442": "È previsto '=' per l'inizializzatore di proprietà.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Il tipo previsto del campo '{0}' in 'package.json' è '{1}', ma è stato ottenuto '{2}'.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Il supporto sperimentale per gli elementi Decorator è una funzionalità soggetta a modifica nelle prossime versioni. Per rimuovere questo avviso, impostare l'opzione 'experimentalDecorators' nel file 'tsconfig' o 'jsconfig'.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Il tipo di risoluzione del modulo '{0}' è stato specificato in modo esplicito.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Non è possibile usare l'elevamento a potenza su valori 'bigint' a meno che l'opzione 'target' non sia impostata su 'es2016' o versioni successive.", "Export_0_from_module_1_90059": "Esporta '{0}' dal modulo '{1}'", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variabile esportata '{0}' contiene o usa il nome privato '{1}'.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Le esportazioni e le assegnazioni di esportazioni non sono consentite negli aumenti del modulo.", "Expression_expected_1109": "È prevista l'espressione.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L'espressione deve essere racchiusa tra parentesi per poter essere usata come elemento Decorator.", "Expression_or_comma_expected_1137": "È prevista l'espressione o la virgola.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'espressione produce un tipo di tupla troppo grande da rappresentare.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'espressione produce un tipo di unione troppo complesso da rappresentare.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "L'espressione viene risolta in '_super', che è usato dal compilatore per acquisire il riferimento della classe di base.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'espressione viene risolta nella dichiarazione di variabile '_newTarget', che è usata dal compilatore per acquisire il riferimento alla metaproprietà 'new.target'.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "L'espressione viene risolta nella dichiarazione di variabile '_this', che è usata dal compilatore per acquisire il riferimento 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Non è possibile dedurre il tipo di espressione con --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clausola Extends non può contenere un'espressione con --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clausola Extends del tipo dedotto '{0}' contiene o usa il nome privato '{1}'.", + "Extract_base_class_to_variable_90064": "Estrarre la classe di base nella variabile", + "Extract_binding_expressions_to_variable_90066": "Estrarre le espressioni di associazione nella variabile", "Extract_constant_95006": "Estrarre la costante", + "Extract_default_export_to_variable_90065": "Estrarre l'esportazione predefinita nella variabile", "Extract_function_95005": "Estrarre la funzione", "Extract_to_0_in_1_95004": "Estrarre in {0} in {1}", "Extract_to_0_in_1_scope_95008": "Estrarre in {0} nell'ambito {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Estrarre nell'interfaccia", "Extract_to_type_alias_95078": "Estrarre nell'alias di tipo", "Extract_to_typedef_95079": "Estrarre in typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Estrarre nella variabile e sostituire con '{0} come typeof {0}'", "Extract_type_95077": "Estrarre il tipo", "FILE_6035": "FILE", "FILE_OR_DIRECTORY_6040": "FILE O DIRECTORY", - "Failed_to_parse_file_0_Colon_1_5014": "Non è stato possibile analizzare il file '{0}': {1}.", + "Failed_to_find_peerDependency_0_6283": "Impossibile trovare peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Impossibile risolvere in base alla condizione '{0}'.", "Fallthrough_case_in_switch_7029": "Caso di fallthrough in switch.", "File_0_does_not_exist_6096": "Il file '{0}' non esiste.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Il file '{0}' non esiste in base alle ricerche precedenti memorizzate nella cache.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Il file '{0}' esiste. Usarlo come risultato per la risoluzione dei nomi.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Il file '{0}' esiste già in base alle ricerche precedenti memorizzate nella cache.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Il file '{0}' esiste. Usarlo come risultato per la risoluzione dei nomi.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "L'estensione del file '{0}' non è supportata. Le uniche estensioni supportate sono {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "L'estensione del file '{0}' non è supportata. Il file verrà ignorato.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Il file '{0}' è un file JavaScript. Si intendeva abilitare l'opzione 'allowJs'?", "File_0_is_not_a_module_2306": "Il file '{0}' non è un modulo.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Il file '{0}' non è incluso nell'elenco file del progetto '{1}'. I progetti devono elencare tutti i file o usare un criterio 'include'.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Il file '{0}' non si trova in 'rootDir' '{1}'. 'rootDir' deve contenere tutti i file di origine.", "File_0_not_found_6053": "Il file '{0}' non è stato trovato.", "File_Management_6245": "Gestione dei file", + "File_appears_to_be_binary_1490": "Il file sembra essere binario.", "File_change_detected_Starting_incremental_compilation_6032": "È stata rilevata una modifica ai file. Verrà avviata la compilazione incrementale...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Il file è un modulo CommonJS perché '{0}' non contiene il campo \"type\"", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Il file è un modulo CommonJS perché '{0}' contiene il campo \"type\" il cui valore non è \"module\"", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Il file corrisponde all'origine '{0}' del riferimento al progetto", "File_is_source_from_referenced_project_specified_here_1416": "Il file è l'origine del progetto di riferimento specificato in questo punto.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Il nome file '{0}' differisce da quello già incluso '{1}' solo per l'uso di maiuscole/minuscole.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Il nome file '{0}' ha un'estensione '{1}' - eseguire invece la ricerca di '{2}'.", "File_name_0_has_a_1_extension_stripping_it_6132": "L'estensione del nome file '{0}' è '{1}' e verrà rimossa.", "File_redirects_to_file_0_1429": "Il file viene reindirizzato al file '{0}'", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La specifica del file non può contenere una directory padre ('..') inserita dopo un carattere jolly ('**') di directory ricorsiva: '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Correggere tutte le espressioni in cui potrebbe mancare 'await'", "Fix_all_implicit_this_errors_95107": "Correggere tutti gli errori relativi a 'this' implicito", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Correggere tutti i tipi restituiti non corretti di una funzione asincrona", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Non è possibile usare i cicli 'for await' all'interno di un blocco statico di classe.", + "Fix_all_with_type_only_imports_95182": "Correggere tutto con importazioni type-only", "Found_0_errors_6217": "Sono stati trovati {0} errori.", "Found_0_errors_Watching_for_file_changes_6194": "Sono stati trovati {0} errori. Verranno individuate le modifiche ai file.", "Found_0_errors_in_1_files_6261": "Sono stati trovati {0} errori nei file {1}.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Sono stati trovati {0} errori nello stesso file, a partire da: {1}", "Found_1_error_6216": "È stato trovato 1 errore.", "Found_1_error_Watching_for_file_changes_6193": "È stato trovato 1 errore. Verranno individuate le modifiche ai file.", - "Found_1_error_in_1_6259": "È stato trovato 1 errore in {1}", + "Found_1_error_in_0_6259": "È stato trovato 1 errore in {0}", "Found_package_json_at_0_6099": "Il file 'package.json' è stato trovato in '{0}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES3' o 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES3' o 'ES5'. Le definizioni di classe sono impostate automaticamente nella modalità strict.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES3' o 'ES5'. I moduli sono impostati automaticamente nella modalità strict.", + "Found_peerDependency_0_with_1_version_6282": "Trovato l'elemento peerDependency '{0}' con versione '{1}'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. Le definizioni di classe sono impostate automaticamente nella modalità strict.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. I moduli sono impostati automaticamente nella modalità strict.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'espressione di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implementazione di funzione manca o non segue immediatamente la dichiarazione.", "Function_implementation_name_must_be_0_2389": "Il nome dell'implementazione di funzione deve essere '{0}'.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La funzione contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usata come riferimento diretto o indiretto in una delle relative espressioni restituite.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Nella funzione manca l'istruzione return finale e il tipo restituito non include 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La funzione deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", "Function_not_implemented_95159": "Funzione non implementata.", "Function_overload_must_be_static_2387": "L'overload della funzione deve essere statico.", "Function_overload_must_not_be_static_2388": "L'overload della funzione non deve essere statico.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "È previsto l'identificatore.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "È previsto un identificatore. '__esModule' è riservato come marcatore esportato durante la trasformazione di moduli ECMAScript.", "Identifier_or_string_literal_expected_1478": "Previsto identificatore o valore letterale stringa.", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificatore, valore letterale stringa o valore letterale numerico previsti.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se il pacchetto '{0}' espone effettivamente questo modulo, provare a inviare una richiesta pull per modificare 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se il pacchetto ' {0}' espone effettivamente il modulo, provare ad aggiungere un nuovo file di dichiarazione (.d.ts) contenente ' Dichiara modulo' {1}';'", "Ignore_this_error_message_90019": "Ignorare questo messaggio di errore", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implementare l'interfaccia '{0}'", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clausola implements della classe esportata '{0}' contiene o usa il nome privato '{1}'.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversione implicita di un valore 'symbol' in 'string' non riuscirà in fase di esecuzione. Provare a eseguire il wrapping di questa espressione in 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L'importazione '{0}' è in conflitto con il valore globale usato in questo file, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L'importazione '{0}' è in conflitto con il valore locale, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", "Import_0_from_1_90013": "Importare '{0}' da \"{1}\".", "Import_assertion_values_must_be_string_literal_expressions_2837": "I valori di asserzione di importazione devono essere espressioni letterali delle stringhe.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Le asserzioni di importazione non sono consentite nelle istruzioni che eseguono il transpile nelle chiamate 'require' di commonjs.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Le asserzioni di importazione sono supportate solo quando l'opzione “--module” è impostata su “esnext” o “nodenext”.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Le asserzioni di importazione non sono consentite nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Le asserzioni di importazione sono supportate solo quando l'opzione '--module' è impostata su 'esnext', 'nodenext' o 'preserve'.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Non è possibile usare asserzioni di importazione con importazioni o esportazioni di solo tipo.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Non è possibile usare l'assegnazione di importazione se destinata a moduli ECMAScript. Provare a usare 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' o un altro formato di modulo.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "I valori degli attributi di importazione devono essere espressioni letterali delle stringhe.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Gli attributi di importazione non sono consentiti nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Gli attributi di importazione sono supportati solo quando l'opzione '--module' è impostata su 'esnext', 'nodenext' o 'preserve'.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Non è possibile usare attributi di importazione con importazioni o esportazioni type-only.", "Import_declaration_0_is_using_private_name_1_4000": "La dichiarazione di importazione '{0}' usa il nome privato '{1}'.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La dichiarazione di importazione è in conflitto con la dichiarazione locale di '{0}'.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Le dichiarazioni di importazione in uno spazio dei nomi non possono far riferimento a un modulo.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Include i file dei mapping di origine all'interno del codice JavaScript creato.", "Includes_imports_of_types_referenced_by_0_90054": "Include importazioni di tipi a cui fa riferimento '{0}'", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Se si include --watch, l'opzione -w consentirà di iniziare a controllare il progetto corrente per individuare modifiche ai file. Dopo l'impostazione, è possibile configurare la modalità espressione di controllo con:", + "Incomplete_quantifier_Digit_expected_1505": "Quantificatore incompleto. Numero previsto.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "La firma dell'indice per il tipo '{0}' manca nel tipo '{1}'.", "Index_signature_in_type_0_only_permits_reading_2542": "La firma dell'indice nel tipo '{0}' consente solo la lettura.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Le singole dichiarazioni della dichiarazione sottoposta a merge '{0}' devono essere tutte esportate o tutte locali.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Derivare i tipi di parametro dall'utilizzo", "Infer_this_type_of_0_from_usage_95080": "Derivare il tipo 'this' di '{0}' dall'utilizzo", "Infer_type_of_0_from_usage_95011": "Derivare il tipo di '{0}' dall'utilizzo", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L'inferenza dalle espressioni di classe non è supportata con --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Inizializzare la proprietà '{0}' nel costruttore", "Initialize_static_property_0_90021": "Inizializzare la proprietà statica '{0}'", "Initializer_for_property_0_2811": "Inizializzatore per la proprietà '{0}'", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'inizializzatore della variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "L'inizializzatore non fornisce alcun valore per questo elemento di binding e per quest'ultimo non è disponibile un valore predefinito.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Gli inizializzatori non sono consentiti in contesti di ambiente.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inizializza un progetto TypeScript e crea un file tsconfig.json.", + "Inline_variable_95184": "Variabile inline", "Insert_command_line_options_and_files_from_a_file_6030": "Inserisce i file e le opzioni della riga di comando da un file.", "Install_0_95014": "Installare '{0}'", "Install_all_missing_types_packages_95033": "Installare tutti i pacchetti di tipi mancanti", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' non è stato trovato.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Catena facoltativa non valida dalla nuova espressione. Si intendeva chiamare '{0}()'?", "Invalid_reference_directive_syntax_1084": "La sintassi della direttiva 'reference' non è valida.", + "Invalid_syntax_in_decorator_1498": "Sintassi non valida nell'elemento Decorator.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso non valido di '{0}'. Non può essere usato all'interno di un blocco statico di classe.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso non valido di '{0}'. I moduli vengono impostati automaticamente in modalità strict.", "Invalid_use_of_0_in_strict_mode_1100": "Uso non valido di '{0}' in modalità strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valore non valido per '--ignoreDeprecations'.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Il valore non è valido per 'jsxFactory'. '{0}' non è un identificatore o un nome qualificato valido.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Il valore non è valido per 'jsxFragmentFactory'. '{0}' non è un identificatore o un nome qualificato valido.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Il valore di '--reactNamespace' non è valido. '{0}' non è un identificatore valido", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Il relativo tipo di elemento '{0}' non è un elemento JSX valido.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Il relativo tipo di istanza '{0}' non è un elemento JSX valido.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Il relativo tipo restituito '{0}' non è un elemento JSX valido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Il relativo tipo '{0}' non è un tipo di elemento JSX valido.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Il tag '@{0} {1}' di JSDoc non corrisponde alla clausola 'extends {2}'.", "JSDoc_0_is_not_attached_to_a_class_8022": "Il tag '@{0}' di JSDoc non è collegato a una classe.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' può essere presente solo nell'ultimo parametro di una firma.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome. Se contenesse un tipo matrice, corrisponderebbe ad 'arguments'.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Il typedef di JSDoc può essere convertito nel tipo TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Il tag '@typedef' di JSDoc deve contenere un'annotazione di tipo o essere seguito dal tag '@property' o '@member'.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "I typedef di JSDoc possono essere convertiti nel tipo TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "I tipi JSDoc possono essere usati solo nei commenti della documentazione.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "I tipi JSDoc possono essere convertiti in tipi TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Agli attributi JSX deve essere assegnato solo un elemento 'expression' non vuoto.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Elenco di cartelle da cui includere le definizioni di tipo.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Elenco delle cartelle radice il cui contenuto combinato rappresenta la struttura del progetto in fase di esecuzione.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Verrà eseguito il caricamento di '{0}' dalla directory radice '{1}'. Percorso candidato: '{2}'.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Verrà eseguito il caricamento del modulo '{0}' dalla cartella 'node_modules'. Tipo di file di destinazione: '{1}'.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Verrà eseguito il caricamento del modulo come file/cartella. Percorso candidato del modulo: '{0}'. Tipo di file di destinazione: '{1}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Verrà eseguito il caricamento del modulo '{0}' dalla cartella 'node_modules'. Tipi di file di destinazione: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Verrà eseguito il caricamento del modulo come file/cartella. Percorso candidato del modulo: '{0}'. Tipi di file di destinazione: {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Le impostazioni locali devono essere nel formato o -, ad esempio, '{0}' o '{1}'.", "Log_paths_used_during_the_moduleResolution_process_6706": "Registra i percorsi usati durante il processo 'moduleResolution'.", "Longest_matching_prefix_for_0_is_1_6108": "Il prefisso di corrispondenza più lungo per '{0}' è '{1}'.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Imposta keyof in modo che restituisca solo stringhe invece di stringhe, numeri o simboli. Opzione legacy.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Impostare la chiamata a 'super()' come prima istruzione nel costruttore", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Il tipo di oggetto con mapping contiene implicitamente un tipo di modello 'any'.", + "Mark_array_literal_as_const_90070": "Contrassegnare il valore letterale della matrice come const", "Matched_0_condition_1_6403": "Corrispondenza tra '{0}' condizione '{1}'.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Corrispondente per impostazione predefinita al criterio di inclusione '**/*'", "Matched_by_include_pattern_0_in_1_1407": "Corrispondenza tramite criterio di inclusione '{0}' in '{1}'", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Il metodo '{0}' non può includere un'implementazione perché è contrassegnato come astratto.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome '{1}' del modulo privato '{2}'.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome privato '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Il metodo deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", "Method_not_implemented_95158": "Metodo non implementato.", "Modifiers_cannot_appear_here_1184": "In questo punto non è possibile usare modificatori.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Il modulo '{0}' può essere importato come predefinito solo con il flag '{1}'", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Non esiste alcun membro esportato '{1}' per il modulo '{0}'. Si intendeva usare 'import {1} from {0}'?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Il modulo '{0}' è nascosto da una dichiarazione locale con lo stesso nome.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Il modulo '{0}' usa 'export =' e non può essere usato con 'export *'.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Il modulo '{0}' è stato risolto come modulo di ambiente dichiarato in '{1}' dal momento che questo file non è stato modificato.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Il modulo '{0}' è stato risolto come modulo di ambiente dichiarato in locale nel file '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Il modulo '{0}' è stato risolto in '{1}', ma '--allowArbitraryExtensions' non è impostato.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Il modulo '{0}' è stato risolto in '{1}', ma '--jsx' non è impostato.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Il modulo '{0}' è stato risolto in '{1}', ma '--resolveJsonModule' non viene usato.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "I nomi delle dichiarazioni di modulo possono usare solo stringhe racchiuse tra virgolette.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "La risoluzione del modulo con 'rootDirs' non è riuscita.", "Modules_6244": "Moduli", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Spostare i modificatori di elemento tupla con etichetta nelle etichette", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Spostare l'espressione nell'esportazione predefinita in una variabile e aggiungervi un'annotazione di tipo.", "Move_to_a_new_file_95049": "Passare a un nuovo file", + "Move_to_file_95178": "Spostare nel file", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Non sono consentiti più separatori numerici consecutivi.", "Multiple_constructor_implementations_are_not_allowed_2392": "Non è possibile usare più implementazioni di costruttore.", "NEWLINE_6061": "NUOVA RIGA", "Name_is_not_valid_95136": "Nome non valido.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "I gruppi di acquisizione denominati sono disponibili solo se destinati a 'ES2018' o versioni successive.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "I gruppi di acquisizione denominati con lo stesso nome devono escludersi a vicenda.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Le proprietà denominate '{0}' dei tipi '{1}' e '{2}' non sono identiche.", "Namespace_0_has_no_exported_member_1_2694": "Lo spazio dei nomi '{0}' non contiene un membro esportato '{1}'.", "Namespace_must_be_given_a_name_1437": "È necessario assegnare un nome allo spazio dei nomi.", "Namespace_name_cannot_be_0_2819": "Lo spazio dei nomi non può essere '{0}'.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Gli spazi dei nomi non sono consentiti nei file di script globali quando '{0}' è abilitato. Se questo file non deve essere uno script globale, impostare 'moduleDetection' su 'force' o aggiungere un'istruzione 'export {}' vuota.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Non è possibile applicare né elementi Decorator né modificatori ai parametri 'this'.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nessun costruttore di base contiene il numero specificato di argomenti tipo.", "No_constituent_of_type_0_is_callable_2755": "Non è possibile chiamare nessun costituente di tipo '{0}'.", "No_constituent_of_type_0_is_constructable_2759": "Non è possibile costruire nessun costituente di tipo '{0}'.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Nessun overload corrisponde a questa chiamata.", "No_type_could_be_extracted_from_this_type_node_95134": "Non è stato possibile estrarre il tipo da questo nodo di tipo", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Non esiste alcun valore nell'ambito per la proprietà a sintassi abbreviata '{0}'. Dichiararne uno o specificare un inizializzatore.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non astratta '{0}' non implementa il membro astratto ereditato '{1}' della classe '{2}'.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non astratta '{0}' non implementa il membro astratto ereditato {1} della classe '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2} e altri {3}.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'espressione di classe non astratta non implementa il membro astratto ereditato '{0}' dalla classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1} e altri {2}.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Le asserzioni non Null possono essere usate solo in file TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "I percorsi non relativi non sono consentiti quando 'baseUrl' non è impostato. Si è dimenticato di aggiungere './' all'inizio?", "Non_simple_parameter_declared_here_1348": "In questo punto è dichiarato un parametro non semplice.", "Not_all_code_paths_return_a_value_7030": "Non tutti i percorsi del codice restituiscono un valore.", "Not_all_constituents_of_type_0_are_callable_2756": "Non tutti i costituenti di tipo '{0}' possono essere chiamati.", "Not_all_constituents_of_type_0_are_constructable_2760": "Non tutti i costituenti di tipo '{0}' possono essere costruiti.", + "Numbers_out_of_order_in_quantifier_1506": "Numeri non in ordine nel quantificatore.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "I valori letterali numerici con valori assoluti uguali o maggiori di 2^53 sono troppo grandi per essere rappresentati in modo corretto come numeri interi.", "Numeric_separators_are_not_allowed_here_6188": "I separatori numerici non sono consentiti in questa posizione.", "Object_is_of_type_unknown_2571": "L'oggetto è di tipo 'unknown'.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Il valore letterale di oggetto può specificare solo proprietà note e '{0}' non esiste nel tipo '{1}'.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Il valore letterale dell'oggetto può specificare solo proprietà note, ma '{0}' non esiste nel tipo '{1}'. Si intendeva scrivere '{2}'?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La proprietà '{0}' del valore letterale di oggetto contiene implicitamente un tipo '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Gli oggetti che contengono proprietà a sintassi abbreviata non possono essere dedotti con --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Gli oggetti che contengono assegnazioni di estensione non possono essere dedotti con --isolatedDeclarations.", "Octal_digit_expected_1178": "È prevista la cifra ottale.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "I tipi di valori letterali ottali devono usare la sintassi ES2015. Usare la sintassi '{0}'.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "I valori letterali ottali non sono consentiti nell'inizializzatore di membri di enumerazioni. Usare la sintassi '{0}'.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "I valori letterali ottali non sono consentiti in modalità strict.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "I valori letterali ottali non sono disponibili quando la destinazione è ECMAScript 5 e versioni successive. Usare la sintassi '{0}'.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Le sequenze di escape e i backreference ottali non sono consentiti in una classe di caratteri. Se è stata utilizzata come sequenza di escape, usare la sintassi '{0}'.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Le sequenze di escape ottali non sono consentite. Usare la sintassi '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "I valori letterali ottali non sono consentiti. Usare la sintassi '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valore di '{0}.{1}' è la stringa '{2}' e si presuppone che l'altro sia un valore numerico sconosciuto.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In un'istruzione 'for...in' è consentita solo una singola dichiarazione di variabile.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In un'istruzione 'for...of' è consentita solo una singola dichiarazione di variabile.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Con la parola chiave 'new' può essere chiamata solo una funzione void.", "Only_ambient_modules_can_use_quoted_names_1035": "I nomi delimitati si possono usare solo nei moduli di ambiente.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Unitamente a --{0} sono supportati solo i moduli 'amd' e 'system'.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "È possibile dedurre solo matrici const con --isolatedDeclarations.", "Only_emit_d_ts_declaration_files_6014": "Creare solo i file di dichiarazione '.d.ts'.", - "Only_named_exports_may_use_export_type_1383": "Solo le esportazioni denominate possono usare 'export type'.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Solo le enumerazioni numeriche possono includere membri calcolati, ma il tipo di questa espressione è '{0}'. Se non sono necessari controlli di esaustività, provare a usare un valore letterale di oggetto.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Restituisce solo file d.ts e non file JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Con la parola chiave 'super' è possibile accedere solo ai metodi pubblico e protetto della classe di base.", "Operator_0_cannot_be_applied_to_type_1_2736": "Non è possibile applicare l'operatore '{0}' al tipo '{1}'.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Non è possibile applicare l'operatore '{0}' ai tipi '{1}' e '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Gli operatori non devono essere misti all'interno di una classe di caratteri. Eseguire il wrapping in una classe annidata.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Esclude un progetto dal controllo dei riferimenti a più progetti durante la modifica.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L'opzione '{0}={1}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L'opzione '{0}={1}' è deprecata e non funzionerà più in TypeScript {2}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{3}\"'.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'false' o 'null' sulla riga di comando.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'null' sulla riga di comando.", + "Option_0_can_only_be_specified_on_command_line_6266": "L'opzione '{0}' può essere specificata solo nella riga di comando.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'opzione '{0}' può essere usata solo quando si specifica l'opzione '--inlineSourceMap' o '--sourceMap'.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L'opzione '{0}' può essere usata solo quando 'moduleResolution' è impostato su 'node16', 'nodenext' o 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "L'opzione '{0}' può essere usata solo quando 'module' è impostato su 'preserve' o 'es2015' o versione successiva.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Non è possibile specificare l'opzione '{0}' quando l'opzione 'jsx' è '{1}'.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Non è possibile specificare l'opzione '{0}' quando l'opzione 'target' è 'ES3'.", "Option_0_cannot_be_specified_with_option_1_5053": "Non è possibile specificare l'opzione '{0}' insieme all'opzione '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Non è possibile specificare l'opzione '{0}' senza l'opzione '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Non è possibile specificare l'opzione '{0}' senza l'opzione'{1}' o '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L'opzione '{0}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L'opzione '{0}' è deprecata e non funzionerà più in TypeScript {1}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{2}\"'.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L'opzione '{0}' è ridondante e non può essere specificata con l'opzione'{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "L'opzione 'allowImportingTsExtensions' può essere usata solo quando è impostato 'noEmit' o 'emitDeclarationOnly'.", "Option_build_must_be_the_first_command_line_argument_6369": "L'opzione '--build' deve essere il primo argomento della riga di comando.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "È possibile specificare l'opzione '--incremental' solo se si usa tsconfig, si crea un singolo file o si specifica l'opzione '--tsBuildInfoFile'.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'opzione 'isolatedModules' può essere usata solo quando si specifica l'opzione '--module' oppure il valore dell'opzione 'target' è 'ES2015' o maggiore.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Non è possibile disabilitare l'opzione 'preserveConstEnums' quando l'opzione 'isolatedModules' è abilitata.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "L'opzione 'preserveValueImports' può essere usata solo quando 'module' è impostato su 'es2015' o versione successiva.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L'opzione 'moduleResolution' deve essere impostata su '{0}' (o rimanere non specificata) quando l'opzione 'module' è impostata su '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L'opzione 'module' deve essere impostata su '{0}' quando l'opzione 'moduleResolution' è impostata su '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Non è possibile disabilitare l'opzione 'preserveConstEnums' quando '{0}' è abilitato.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Non è possibile combinare l'opzione 'project' con file di origine in una riga di comando.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "È possibile specificare l'opzione '--resolveJsonModule' solo quando la generazione del codice del modulo è impostata su 'commonjs', 'amd', 'es2015' o 'esNext'.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Non è possibile specificare l'opzione '--resolveJsonModule' senza la strategia di risoluzione del modulo 'node'.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'moduleResolution' è impostato su 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'module' è impostato su 'none', 'system' o 'umd'.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Non è possibile specificare l'opzione 'tsBuildInfoFile' senza specificare l'opzione 'incremental' o 'composite' oppure se non è in esecuzione 'tsc -b'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Non è possibile usare l'opzione 'verbatimModuleSyntax' quando 'module' è impostato su 'UMD', 'AMD' o 'System'.", "Options_0_and_1_cannot_be_combined_6370": "Non è possibile combinare le opzioni '{0}' e '{1}'.", "Options_Colon_6027": "Opzioni:", "Output_Formatting_6256": "Formattazione dell'output", "Output_compiler_performance_information_after_building_6615": "Restituisce informazioni sulle prestazioni del compilatore dopo la compilazione.", "Output_directory_for_generated_declaration_files_6166": "Directory di output per i file di dichiarazione generati.", - "Output_file_0_from_project_1_does_not_exist_6309": "Il file di output '{0}' del progetto '{1}' non esiste", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Il file di output '{0}' non è stato compilato dal file di origine '{1}'.", "Output_from_referenced_project_0_included_because_1_specified_1411": "L'output del progetto di riferimento '{0}' è incluso perché è stato specificato '{1}'", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "L'output del progetto di riferimento '{0}' è incluso perché il valore specificato per '--module' è 'none'", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "È prevista la dichiarazione di parametro.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Il parametro include un nome ma non un tipo. Si intendeva '{0}: {1}'?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "I modificatori di parametro possono esere usati solo in file TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Il parametro deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Stampa i nomi dei file creati al termine di una compilazione.", "Print_this_message_6017": "Stampa questo messaggio.", "Private_accessor_was_defined_without_a_getter_2806": "La funzione di accesso privata è stata definita senza un getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Il campo privato '{0}' deve essere dichiarato in una classe di inclusione.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Gli identificatori privati non sono consentiti nelle dichiarazioni di variabili.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Gli identificatori privati non sono consentiti all'esterno del corpo della classe.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Gli identificatori privati sono consentiti solo nei corpi di classe e possono essere usati solo come parte di una dichiarazione di un membro della classe, dell'accesso alle proprietà o sulla parte sinistra di un'espressione 'in'.", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Gli identificatori privati sono disponibili solo se destinati a ECMAScript 2015 e versioni successive.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Non è possibile usare gli identificatori privati come parametri.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Non è possibile accedere al membro privato o protetto '{0}' in un parametro di tipo.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Non è possibile compilare il progetto '{0}' perché la dipendenza '{1}' contiene errori", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Non è possibile compilare il progetto '{0}' perché la relativa dipendenza '{1}' non è stata compilata", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Il progetto '{0}' è stato ricompilato forzatamente", + "Project_0_is_out_of_date_because_1_6420": "Il progetto '{0}' non è aggiornato perché {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il file '{2}' era un file radice di compilazione ma non più aggiornato.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il programma deve segnalare errori.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Il '{0}' del progetto non è aggiornato perché il file buildinfo '{1}' indica che alcune modifiche non sono state generate", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che è presente una modifica in compilerOptions", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Il progetto '{0}' non è aggiornato perché la dipendenza '{1}' non è aggiornata", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Il progetto '{0}' non è aggiornato perché l'output '{1}' è meno recente dell'input '{2}'", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Il progetto '{0}' non è aggiornato perché il file di output '{1}' non esiste", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Il progetto '{0}' non è aggiornato perché l'output per il progetto è stato generato con la versione '{1}' che non corrisponde alla versione corrente '{2}'", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Il progetto '{0}' non è aggiornato perché l'output della relativa dipendenza '{1}' è cambiato", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Il progetto '{0}' non è aggiornato perché si è verificato un errore durante la lettura del file '{1}'", "Project_0_is_up_to_date_6361": "Il progetto '{0}' è aggiornato", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Il progetto '{0}' è aggiornato perché l'input più recente '{1}' è meno recente dell'output '{2}'", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "La proprietà '{0}' viene usata prima della relativa inizializzazione.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La proprietà '{0}' potrebbe non esistere nel tipo '{1}'. Si intendeva '{2}'?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La proprietà '{0}' dell'attributo spread JSX non è assegnabile alla proprietà di destinazione.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La proprietà '{0}' dell'espressione di classe esportata potrebbe essere non privata o protetta.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La proprietà '{0}' del tipo di classe anonima esportata potrebbe essere non privata o protetta.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La proprietà '{0}' del tipo '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La proprietà '{0}' sovrascriverà la proprietà di base in '{1}'. Se questo comportamento è intenzionale, aggiungere un inizializzatore; in caso contrario, aggiungere un modificatore 'declare' o rimuovere la dichiarazione ridondante.", "Property_assignment_expected_1136": "È prevista l'assegnazione di proprietà.", "Property_destructuring_pattern_expected_1180": "È previsto il criterio di destrutturazione della proprietà.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La proprietà deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", "Property_or_signature_expected_1131": "È prevista la proprietà o la firma.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Il valore della proprietà può essere solo un valore letterale stringa, un valore letterale numerico, 'true', 'false', 'null', un valore letterale di oggetto o un valore letterale di matrice.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Fornisce supporto completo per elementi iterabili in 'for-of', spread e destrutturazione quando la destinazione è 'ES5' o 'ES3'.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornisce supporto completo per elementi iterabili in 'for-of', estensione e destrutturazione quando la destinazione è 'ES5'.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo privato '{2}'.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome privato '{1}'.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un errore quando un parametro di funzione non viene letto.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Genera un errore in caso di espressioni o dichiarazioni con tipo 'any' implicito.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Genera un errore in caso di espressioni 'this con un tipo 'any' implicito.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Per riesportare un tipo quando è specificato il flag '--isolatedModules', è necessario usare 'export type'.", + "Range_out_of_order_in_character_class_1517": "Intervallo non in ordine nella classe di caratteri.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Riesportare un tipo quando '{0}' è abilitato richiede l'uso di 'export type'.", + "React_components_cannot_include_JSX_namespace_names_2639": "I componenti React non possono includere nomi di spazio dei nomi JSX", "Redirect_output_structure_to_the_directory_6006": "Reindirizza la struttura di output alla directory.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Riduce il numero di progetti caricati automaticamente da TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "Il progetto di riferimento '{0}' non può disabilitare la creazione.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Il progetto di riferimento '{0}' deve includere l'impostazione \"composite\": true.", "Referenced_via_0_from_file_1_1400": "Riferimento tramite '{0}' dal file '{1}'", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni EcmaScript quando '--moduleResolution' è 'node16' o 'nodenext'. Provare ad aggiungere un'estensione al percorso di importazione.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni EcmaScript quando '--moduleResolution' è 'node16' o 'nodenext'. Si intendeva \"{0}\"?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Provare ad aggiungere un'estensione al percorso di importazione.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Si intendeva '{0}'?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Rimuove un elenco di directory dal processo dell'espressione di controllo.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Rimuove un elenco di file dall'elaborazione della modalità espressione di controllo.", "Remove_all_unnecessary_override_modifiers_95163": "Rimuovere tutti i modificatori 'override' non necessari", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Segnala gli errori presenti nei file con estensione js.", "Report_errors_on_unused_locals_6134": "Segnala errori relativi a variabili locali non usate.", "Report_errors_on_unused_parameters_6135": "Segnala errori relativi a parametri non usati.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Richiede un'annotazione sufficiente sulle esportazioni in modo che altri strumenti possano generare in modo semplice i file di dichiarazione.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Richiedere alle proprietà non dichiarate da firme dell'indice di usare gli accessi agli elementi.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "I parametri di tipo obbligatori potrebbero non seguire i parametri di tipo facoltativi.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La risoluzione per il modulo '{0}' è stata trovata nella cache dal percorso '{1}'.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La risoluzione per la direttiva '{0}' del riferimento al tipo è stata trovata nella cache dal percorso '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Risoluzione del nome non relativo non riuscita; il tentativo di utilizzare le funzionalità moderne di risoluzione dei nodi è disabilitato per verificare se è necessario aggiornare la configurazione della libreria npm.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Risoluzione del nome non relativo non riuscita; è in corso un tentativo con '--moduleResolution bundler' per verificare se il progetto potrebbe richiedere l'aggiornamento della configurazione.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Risolvere 'keyof' solo in nomi di proprietà con valori stringa (senza numeri o simboli).", + "Resolved_under_condition_0_6414": "Risolto nella condizione '{0}'.", "Resolving_in_0_mode_with_conditions_1_6402": "Risoluzione in modalità {0} con condizioni {1}.", "Resolving_module_0_from_1_6086": "======== Risoluzione del modulo '{0}' da '{1}'. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Verrà eseguita la risoluzione del nome del modulo '{0}' relativo all'URL di base '{1}' - '{2}'.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' e directory radice non impostata. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice '{1}'. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice non impostata. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Risoluzione della direttiva di riferimento al tipo per il programma che specifica typeRoot personalizzati. La ricerca nella cartella 'node_modules' verrà ignorata.", "Resolving_with_primary_search_path_0_6121": "La risoluzione verrà eseguita con il percorso di ricerca primaria '{0}'.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]'.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]', ma è possibile dedurre un tipo migliore dall'utilizzo.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.", "Rewrite_all_as_indexed_access_types_95034": "Riscrivere tutti come tipi di accesso indicizzati", "Rewrite_as_the_indexed_access_type_0_90026": "Riscrivere come tipo di accesso indicizzato '{0}'", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "L'operando destro di ?? non è raggiungibile perché l'operando sinistro non è mai nullish.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Non è possibile determinare la directory radice. I percorsi di ricerca primaria verranno ignorati.", "Root_file_specified_for_compilation_1427": "File radice specificato per la compilazione", "STRATEGY_6039": "STRATEGIA", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salva i file .tsbuildinfo per consentire la compilazione incrementale dei progetti.", "Saw_non_matching_condition_0_6405": "Visualizzata la condizione di corrispondenza '{0}'.", "Scoped_package_detected_looking_in_0_6182": "Il pacchetto con ambito è stato rilevato. Verrà eseguita una ricerca in '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Ricerca di estensioni di fallback in tutte le directory node_modules predecessori: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Ricerca di estensioni preferite in tutte le directory node_modules predecessori: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "La selezione non corrisponde a una o più istruzioni valide", "Selection_is_not_a_valid_type_node_95133": "La selezione non corrisponde a un nodo di tipo valido", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Imposta la versione del linguaggio JavaScript per il codice JavaScript creato e include le dichiarazioni di libreria compatibili.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Mostra le informazioni di diagnostica dettagliate.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostra gli elementi che vengono compilati (o eliminati, se specificati con l'opzione '--clean')", "Signature_0_must_be_a_type_predicate_1224": "La firma '{0}' deve essere un predicato di tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Le dichiarazioni firma possono essere usate solo in file TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorare la compilazione di progetti downstream in base a un errore nel progetto upstream.", "Skip_type_checking_all_d_ts_files_6693": "Ignora il controllo del tipo di tutti i file .d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignora il controllo dei tipi dei file .d.ts inclusi con TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Ignora il controllo del tipo dei file di dichiarazione.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' contiene errori", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' non è stata compilata", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Vine ignorato il modulo '{0}' che sembra un URI assoluto, tipi di file di destinazione: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "L'origine del progetto di riferimento '{0}' è inclusa perché è stato specificato '{1}'", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "L'origine del progetto di riferimento '{0}' è inclusa perché il valore specificato per '--module' è 'none'", "Source_has_0_element_s_but_target_allows_only_1_2619": "L'origine contiene {0} elemento/i ma la destinazione ne consente solo {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Consente di specificare il funzionamento della modalità espressione di controllo TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Specificare i file di libreria da includere nella compilazione.", "Specify_module_code_generation_6016": "Specifica la generazione del codice del modulo.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Specifica la strategia di risoluzione del modulo: 'node' (Node.js) o 'classic' (TypeScript prima della versione 1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Specifica l'identificatore di modulo usato per importare funzioni factory JSX quando si usa 'jsx: react-jsx*'.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Consente di specificare più cartelle che fungono da './node_modules/@types'.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Consente di specificare uno o più percorsi o riferimenti al modulo del nodo ai file di configurazione di base da cui vengono ereditate le impostazioni.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "I membri statici non possono fare riferimento a parametri di tipo classe.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La proprietà statica '{0}' è in conflitto con la proprietà predefinita 'Function.{0}' della funzione del costruttore '{1}'.", "String_literal_expected_1141": "È previsto un valore letterale stringa.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "I nomi di importazione ed esportazione di valori letterali stringa non sono supportati quando il flag '--module' è impostato su 'es2015' o 'es2020'.", "String_literal_with_double_quotes_expected_1327": "È previsto un valore letterale stringa con virgolette doppie.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Applica stili a errori e messaggi usando colore e contesto (sperimentale).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Quando è presente un segno meno, devono essere presenti flag di criteri secondari.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Le dichiarazioni di proprietà successive devono essere dello stesso tipo. La proprietà '{0}' deve essere di tipo '{1}', ma qui è di tipo '{2}'.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Le dichiarazioni di variabili successive devono essere dello stesso tipo. La variabile '{0}' deve essere di tipo '{1}', mentre è di tipo '{2}'.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Il tipo della sostituzione '{0}' per il criterio '{1}' non è corretto. È previsto 'string', ma è stato ottenuto '{2}'.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Le espressioni di modello con tag non sono consentite in una catena facoltativa.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La destinazione consente solo {0} elemento/i ma l'origine potrebbe contenerne di più.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La destinazione richiede {0} elemento/i ma l'origine potrebbe contenerne di meno.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma di destinazione fornisce un numero insufficiente di argomenti. {0} o più elementi previsti, ma {1} effettivi.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Il modificatore '{0}' può essere usato solo in file TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Non è possibile applicare l'operatore '{0}' al tipo 'symbol'.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'operatore '{0}' non è consentito per i tipi booleani. Provare a usare '{1}'.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La proprietà '{0}' di un iteratore asincrono deve essere un metodo.", "The_0_property_of_an_iterator_must_be_a_method_2767": "La proprietà '{0}' di un iteratore deve essere un metodo.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Il tipo 'Object' può essere assegnato a un numero molto limitato di altri tipi. Si intendeva usare il tipo 'any'?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Non è possibile fare riferimento all'oggetto 'arguments' in una funzione arrow in ES3 e ES5. Provare a usare un'espressione di funzione standard.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Non è possibile fare riferimento all'oggetto 'arguments' in un metodo o una funzione asincrona in ES3 e ES5. Provare a usare un metodo o una funzione standard.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Non è possibile impostare contemporaneamente i flag Unicode (u) e Unicode Sets (v).", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Non è possibile fare riferimento all'oggetto 'arguments' in una funzione arrow in ES5. Provare a usare un'espressione di funzione standard.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Non è possibile fare riferimento all'oggetto 'arguments' in un metodo o una funzione asincrona in ES5. Provare a usare un metodo o una funzione standard.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Il corpo di un'istruzione 'if' non può essere l'istruzione vuota.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La chiamata sarebbe riuscita rispetto a questa implementazione, ma le firme di implementazione degli overload non sono visibili esternamente.", "The_character_set_of_the_input_files_6163": "Set di caratteri dei file di input.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Il tipo dedotto di '{0}' fa riferimento a un tipo con una struttura ciclica che non può essere facilmente serializzata. È necessaria un'annotazione di tipo.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Il tipo dedotto di '{0}' fa riferimento a un tipo '{1}' non accessibile. È necessaria un'annotazione di tipo.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Il tipo dedotto di questo nodo supera la lunghezza massima serializzata dal compilatore. È necessaria un'annotazione di tipo esplicita.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L'inizializzatore di una dichiarazione 'using' deve essere un oggetto con un metodo '[Symbol.dispose]()' oppure essere 'null' o 'undefined'.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L'inizializzatore di una dichiarazione 'await using' deve essere un oggetto con un metodo '[Symbol.asyncDispose]()' o '[Symbol.dispose]5D;()' oppure essere 'null' o 'undefined'.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersezione '{0}' è stata ridotta a 'never' perché la proprietà '{1}' esiste in più costituenti ed è privata in alcuni.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersezione '{0}' è stata ridotta a 'never' perché in alcuni costituenti della proprietà '{1}' sono presenti tipi in conflitto.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La parola chiave 'intrinsic' può essere usata solo per dichiarare tipi intrinseci forniti dal compilatore.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "L'ultimo overload ha restituito l'errore seguente.", "The_last_overload_is_declared_here_2771": "In questo punto viene dichiarato l'ultimo overload.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte sinistra di un'espressione 'for...in' non può essere un criterio di destrutturazione.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'await using'.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Nella parte sinistra di un'espressione 'for...in' non è possibile usare un'annotazione di tipo.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte sinistra di un'istruzione 'for...in' non può essere un accesso a proprietà facoltativo.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte sinistra di un'istruzione 'for...in' deve essere una variabile o un accesso a proprietà.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte sinistra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte sinistra di un'espressione di assegnazione non può essere un accesso a proprietà facoltativo.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte sinistra di un'espressione di assegnazione deve essere una variabile o un accesso a proprietà.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La parte sinistra di un'espressione 'instanceof' deve essere assegnabile al primo argomento del metodo '[Symbol.hasInstance]' della parte destra.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte sinistra di un'espressione 'instanceof' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Impostazioni locali usate per la visualizzazione di messaggi all'utente, ad esempio 'it-it'", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondità massima delle dipendenze per la ricerca in node_modules e il caricamento dei file JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di esportazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di importazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Non è possibile accedere alla proprietà '{0}' nel tipo '{1}' all'interno di questa classe perché è nascosta da un altro identificatore privato con la stessa ortografia.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Il tipo restituito di una funzione di accesso 'get' deve essere assegnabile al relativo tipo di funzione di accesso 'set'", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Il tipo restituito di una funzione di espressione Decorator del parametro deve essere 'void' o 'any'.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Il tipo restituito di una funzione di espressione Decorator della proprietà deve essere 'void' o 'any'.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Il tipo restituito di una funzione asincrona deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise. Si intendeva scrivere 'Promise<{0}>'?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte destra di un'istruzione 'for...in' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo, ma in questo caso il tipo è '{0}'.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte destra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La parte destra di un'espressione 'instanceof' deve essere di tipo 'any' o di un tipo assegnabile al tipo di interfaccia 'Function'.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La parte destra di un'espressione 'instanceof' deve essere di tipo 'any', una classe, una funzione o un altro tipo assegnabile al tipo di interfaccia 'Function' oppure un tipo di oggetto con un metodo 'Symbol.hasInstance'.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La parte destra di un'espressione 'instanceof' non deve essere un'espressione di creazione di un'istanza.", "The_root_value_of_a_0_file_must_be_an_object_5092": "Il valore radice di un file '{0}' deve essere un oggetto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede almeno {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "La dichiarazione di oscuramento di '{0}' viene definita in questo punto", "The_signature_0_of_1_is_deprecated_6387": "La firma '{0}' di '{1}' è deprecata.", "The_specified_path_does_not_exist_Colon_0_5058": "Il percorso specificato non esiste: '{0}'.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Impossibile utilizzare il modificatore 'tipo' in un'esportazione denominata quando 'tipo di esportazione' viene usato nell'istruzione di esportazione.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Impossibile utilizzare il modificatore 'tipo' in un'importazione denominata quando 'tipo di importazione' viene usato nella relativa istruzione di importazione.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Il tipo di una dichiarazione di funzione deve corrispondere alla firma della funzione.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Impossibile assegnare un nome al tipo di questa espressione senza un'asserzione 'resolution-mode', che è una funzionalità instabile. Usare TypeScript notturno per disattivare l'errore. Provare ad aggiornare con 'npm install -D typescript@next'.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossibile serializzare questo tipo di nodo perché la sua proprietà '{0}' non può essere serializzata.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Il tipo restituito dal metodo '{0}()' di un iteratore asincrono deve essere una promessa per un tipo con una proprietà 'value'.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Il tipo restituito dal metodo '{0}()' di un iteratore deve contenere una proprietà 'value'.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La dichiarazione di variabile di un'istruzione 'for...in' non può contenere un inizializzatore.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La dichiarazione di variabile di un'istruzione 'for...of' non può contenere un inizializzatore.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'istruzione 'with' non è supportata. Il tipo di tutti i simboli in un blocco 'with' è 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Sono presenti tipi in '{0}', ma non è stato possibile risolvere questo risultato con l'impostazione 'moduleResolution' corrente. Provare a eseguire l'aggiornamento a 'node16', 'nodenext' o 'bundler'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Esistono tipi in '{0}', ma non è stato possibile risolvere questo risultato quando si rispettano le \"esportazioni\" del file package.json. Potrebbe essere necessario aggiornare i file package.json o typings della libreria '{1}'.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Non è presente alcun gruppo di acquisizione denominato '{0}' in questa espressione regolare.", + "There_is_nothing_available_for_repetition_1507": "Nessun elemento disponibile per la ripetizione.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Con la proprietà '{0}' del tag JSX è previsto un singolo elemento figlio di tipo '{1}', ma sono stati specificati più elementi figlio.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Con la proprietà '{0}' del tag JSX è previsto il tipo '{1}' che richiede più elementi figlio, ma è stato specificato un singolo elemento figlio.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Questo backreference fa riferimento a un gruppo che non esiste. Non sono presenti gruppi di acquisizione in questa espressione regolare.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Questo backreference fa riferimento a un gruppo che non esiste. Sono presenti solo {0} gruppi di acquisizione in questa espressione regolare.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Questa espressione binaria non è mai nullish. Mancano le parentesi?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Il carattere non può essere preceduto da un carattere di escape in un'espressione regolare.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Questo confronto sembra non intenzionale perché i tipi '{0}' e '{1}' non presentano alcuna sovrapposizione.", "This_condition_will_always_return_0_2845": "Questa condizione restituirà sempre '{0}'.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Questa condizione restituirà sempre '{0}' perché JavaScript confronta gli oggetti per riferimento, non per valore.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Questa condizione restituirà sempre true perché questo elemento '{0}' è sempre definito.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Questa condizione restituirà sempre true perché questa funzione è sempre definita. Si intendeva chiamarla?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Questa funzione del costruttore può essere convertita in una dichiarazione di classe.", + "This_expression_is_always_nullish_2871": "Questa espressione è sempre nullish.", "This_expression_is_not_callable_2349": "Questa espressione non può essere chiamata.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Non è possibile chiamare questa espressione perché è una funzione di accesso 'get'. Si intendeva usarla senza '()'?", "This_expression_is_not_constructable_2351": "Questa espressione non può essere costruita.", "This_file_already_has_a_default_export_95130": "Per questo file esiste già un'esportazione predefinita", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Questa importazione non viene mai usata come valore e deve usare 'import type' perché 'importsNotUsedAsValues' è impostato su 'error'.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Questa è la dichiarazione che verrà aumentata. Provare a spostare la dichiarazione che causa l'aumento nello stesso file.", + "This_kind_of_expression_is_always_falsy_2873": "Questo tipo di espressione è sempre falso.", + "This_kind_of_expression_is_always_truthy_2872": "Questo tipo di espressione è sempre veritiero.", "This_may_be_converted_to_an_async_function_80006": "Può essere convertita in una funzione asincrona.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Questo membro non può avere un commento JSDoc con un tag '@override' perché non è dichiarato nella classe di base '{0}'.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Questo membro non può avere un commento JSDoc con un tag 'override' perché non è dichiarato nella classe di base '{0}'. Intendevi '{1}'?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Questo membro deve includere un modificatore 'override' perché esegue l'override di un metodo astratto dichiarato nella classe di base '{0}'.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "È possibile fare riferimento a questo modulo solo con importazioni/esportazioni ECMAScript attivando il flag '{0}' e facendo riferimento alla relativa esportazione predefinita.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Il modulo viene dichiarato con 'export =' e può essere usato solo con un'importazione predefinita quando si usa il flag '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Questa operazione può essere semplificata. Questo turno è identico a '{0} {1} {2}'.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Questo overload restituisce implicitamente il tipo '{0}' perché manca un'annotazione di tipo restituito.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Questa firma di overload non è compatibile con la relativa firma di implementazione.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Questo parametro non è consentito con la direttiva 'use strict'.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Questa proprietà di parametro deve avere un commento JSDoc con un tag '@override' perché sostituisce un membro nella classe di base '{0}'.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Questa proprietà parametro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Non è possibile attivare/disattivare questo flag di espressione regolare all'interno di un criterio secondario.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Questo flag di espressione regolare è disponibile solo quando la destinazione è '{0}' o versioni successive.", "This_spread_always_overwrites_this_property_2785": "Questo spread sovrascrive sempre questa proprietà.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Questa sintassi è riservata ai file con estensione MTS o CTS. Aggiungere una virgola finale o un vincolo esplicito.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Questa sintassi è riservata ai file con estensione mts o cts. Utilizzare un'espressione 'as'.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Per convertire il file in un modulo ECMAScript, modificarne l'estensione in '{0}' oppure aggiungere il campo '\"type\": \"module\"' a '{1}'.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Per convertire questo file in un modulo ECMAScript, modificarne l'estensione in '{0}' o creare un file package.json locale con '{ \"type\": \"module\" }'.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Per convertire questo file in un modulo ECMAScript, creare un file package.json locale con '{ \"type\": \"module\" }'.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Le espressioni 'await' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', or 'nodenext', e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Le espressioni 'await' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Le istruzioni 'await using' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Le dichiarazioni di primo livello nei file con estensione d.ts devono iniziare con un modificatore 'declare' o 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "I cicli 'for await' di primo livello sono consentiti solo quando l'opzione 'module' è impostata su'es2022', 'esnext', 'system', 'node16', o 'nodenext' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "I cicli 'for await' di primo livello sono consentiti solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", "Trailing_comma_not_allowed_1009": "La virgola finale non è consentita.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Esegue il transpile di ogni file in un modulo separato (simile a 'ts.transpileModule').", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Provare con `npm i --save-dev @types/{1}` se esiste oppure aggiungere un nuovo file di dichiarazione con estensione d.ts contenente `declare module '{0}';`", "Trying_other_entries_in_rootDirs_6110": "Verrà effettuato un tentativo con altre voci in 'rootDirs'.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Verrà effettuato un tentativo con la sostituzione '{0}'. Percorso candidato del modulo: '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "I membri di tupla devono tutti avere o non avere nomi.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Il tipo di tupla '{0}' con lunghezza '{1}' non contiene elementi alla posizione di indice '{2}'.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Gli argomenti tipo di tupla contengono un riferimento circolare a se stessi.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Il tipo '{0}' può essere iterato solo quando si usa il flag '--downlevelIteration' o quando '--target' è impostato su 'es2015' o un valore superiore.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Nel tipo '{0}' non esiste alcuna firma dell'indice corrispondente per il tipo '{1}'.", "Type_0_has_no_properties_in_common_with_type_1_2559": "Il tipo '{0}' non ha proprietà in comune con il tipo '{1}'.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Il tipo '{0}' non ha firme per cui è applicabile l'elenco degli argomenti tipo.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Il tipo '{0}' è generico e può essere indicizzato solo per la lettura.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2} e altre {3}.", "Type_0_is_not_a_constructor_function_type_2507": "Il tipo '{0}' non è un tipo di funzione del costruttore.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Il tipo '{0}' non è un tipo restituito di funzione asincrona valido in ES5/ES3 perché non fa riferimento a un valore di costruttore compatibile con Promise.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Il tipo '{0}' non è un tipo restituito di funzione asincrona valido in ES5 perché non fa riferimento a un valore di costruttore compatibile con Promise.", "Type_0_is_not_an_array_type_2461": "Il tipo '{0}' non è un tipo matrice.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Il tipo '{0}' non è un tipo matrice o stringa.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Il tipo '{0}' non è un tipo matrice o stringa oppure non contiene un metodo '[Symbol.iterator]()' che restituisce un iteratore.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Si intendeva '{2}'?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Sono presenti due tipi diversi con questo nome, che però non sono correlati.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Il tipo '{0}' non può essere assegnato al tipo '{1}' come indicato dall'annotazione di varianza.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Il tipo '{0}' non è assegnabile al tipo '{1}' come richiesto per i valori dei membri di enumerazione calcolati.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' al tipo di destinazione.", "Type_0_is_not_comparable_to_type_1_2678": "Il tipo '{0}' non è confrontabile con il tipo '{1}'.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "È previsto l'argomento tipo.", "Type_argument_list_cannot_be_empty_1099": "L'elenco degli argomenti tipo non può essere vuoto.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Gli argomenti tipo possono essere usati solo in file TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "Non è possibile usare argomenti tipo in questa posizione.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Gli argomenti tipo per '{0}' contengono un riferimento circolare a se stessi.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Le espressioni di asserzione di tipo possono essere usate solo in file TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Il tipo alla posizione {0} nell'origine non è compatibile con il tipo alla posizione {1} nella destinazione.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Il tipo alle posizioni dalla {0} alla {1} nell'origine non è compatibile con il tipo alla posizione {2} nella destinazione.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Non è possibile usare il tipo contenente il nome privato '{0}' con --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "File della dichiarazione di tipo da includere nella compilazione.", "Type_expected_1110": "È previsto il tipo.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "L’importazione dei tipi di asserzione deve contenere esattamente una chiave, 'resolution-mode', con valore 'import' o 'require'.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Gli attributi di importazione di tipi devono contenere esattamente una chiave 'resolution-mode', con valore 'import' o 'require'.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creazione di un'istanza di tipo presenta troppi livelli ed è probabilmente infinita.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Il tipo viene usato come riferimento diretto o indiretto nel callback di fulfillment del relativo metodo 'then'.", "Type_library_referenced_via_0_from_file_1_1402": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}'", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Non è possibile risolvere la firma dell'espressione Decorator del metodo quando è chiamata come espressione.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Non è possibile risolvere la firma dell'espressione Decorator del parametro quando è chiamata come espressione.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Non è possibile risolvere la firma dell'espressione Decorator della proprietà quando è chiamata come espressione.", + "Undetermined_character_escape_1513": "Carattere di escape indeterminato.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' imprevisto. La barra rovesciata stava per un carattere escape?", "Unexpected_end_of_text_1126": "Fine del testo imprevista.", "Unexpected_keyword_or_identifier_1434": "Parola chiave o identificatore imprevisti.", "Unexpected_token_1012": "Token imprevisto.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Token imprevisto. Si intendeva `{'>'}` o `>`?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token imprevisto. Si intendeva `{'}'}` o `}`?", "Unexpected_token_expected_1179": "Token imprevisto. È previsto '{'.", + "Unicode_escape_sequence_cannot_appear_here_17021": "La sequenza di escape Unicode non può essere visualizzata qui.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Le sequenze di escape Unicode sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Le espressioni valore della proprietà sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nome della proprietà Unicode sconosciuto.", + "Unknown_Unicode_property_name_or_value_1529": "Nome o valore della proprietà Unicode sconosciuto.", + "Unknown_Unicode_property_value_1526": "Valore della proprietà Unicode sconosciuto.", "Unknown_build_option_0_5072": "L'opzione di compilazione '{0}' è sconosciuta.", "Unknown_build_option_0_Did_you_mean_1_5077": "L'opzione di compilazione '{0}' è sconosciuta. Si intendeva '{1}'?", "Unknown_compiler_option_0_5023": "Opzione del compilatore sconosciuta: '{0}'.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "L'opzione '{0}' del compilatore è sconosciuta. Si intendeva '{1}'?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Parola chiave o identificatore sconosciuti. Intendevi '{0}'?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "L'opzione 'excludes' è sconosciuta. Si intendeva 'exclude'?", + "Unknown_regular_expression_flag_1499": "Flag di espressione regolare sconosciuto.", "Unknown_type_acquisition_option_0_17010": "L'opzione '{0}' relativa all'acquisizione del tipo è sconosciuta.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "L'opzione di acquisizione del tipo '{0}' è sconosciuta. Si intendeva '{1}'?", "Unknown_watch_option_0_5078": "L'opzione '{0}' dell'espressione di controllo è sconosciuta.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Etichetta non usata.", "Unused_ts_expect_error_directive_2578": "Direttiva '@ts-expect-error' non usata.", "Update_import_from_0_90058": "Aggiornare l'importazione da \"{0}\"", - "Updating_output_of_project_0_6373": "Aggiornamento dell'output del progetto '{0}'...", + "Update_modifiers_of_0_90061": "Aggiornare i modificatori di '{0}'", "Updating_output_timestamps_of_project_0_6359": "Aggiornamento dei timestamp di output del progetto '{0}'...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Aggiornamento dei timestamp di output non modificati del progetto '{0}'...", "Use_0_95174": "Usa `{0}`.", + "Use_0_instead_5106": "Usare '{0}'.", "Use_Number_isNaN_in_all_conditions_95175": "Usare 'Number.isNaN' in tutte le condizioni.", "Use_element_access_for_0_95145": "Usare l'accesso agli elementi per '{0}'", "Use_element_access_for_all_undeclared_properties_95146": "Usare l'accesso agli elementi per tutte le proprietà non dichiarate.", + "Use_import_type_95180": "Usare 'import type'", "Use_synthetic_default_member_95016": "Usare il membro 'default' sintetico.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Usare il campo 'exports' del file package.json per risolvere le importazioni.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Usare il campo 'imports' del file package.json per risolvere le importazioni.", + "Use_type_0_95181": "Usare 'type {0}'", "Using_0_subpath_1_with_target_2_6404": "Utilizzo di '{0}' sottotracciato '{1}' con destinazione '{2}'.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'uso di una stringa in un'istruzione 'for...of' è supportato solo in ECMAScript 5 e versioni successive.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Se si usa --build, l'opzione -b modificherà il comportamento di tsc in modo che sia più simile a un agente di orchestrazione di compilazione che a un compilatore. Viene usata per attivare la compilazione di progetti compositi. Per altre informazioni, vedere {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "È prevista la dichiarazione di variabile.", "Variable_declaration_list_cannot_be_empty_1123": "L'elenco delle dichiarazioni di variabile non può essere vuoto.", "Variable_declaration_not_allowed_at_this_location_1440": "Dichiarazione di variabile non consentita in questa posizione.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variabile deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Le variabili con più dichiarazioni non possono essere impostate come inline.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'elemento variadic alla posizione {0} nell'origine non corrisponde all'elemento alla posizione {1} nella destinazione.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Le annotazioni di varianza sono supportate solo negli alias di tipo per oggetti, funzioni, costruttori e tipi mappati.", "Version_0_6029": "Versione {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Durante il controllo del tipo prende in considerazione 'null' e 'undefined'.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Indica se mantenere l'output della console obsoleto in modalità espressione di controllo invece di pulire lo schermo.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Eseguire il wrapping di tutti i caratteri non validi in un contenitore di espressioni", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Eseguire il wrapping di tutte le espressioni Decorator non valide tra parentesi", "Wrap_all_object_literal_with_parentheses_95116": "Racchiudere tra parentesi tutti i valori letterali di oggetto", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Esegue il wrapping di JSX senza parentesi nel frammento JSX", "Wrap_in_JSX_fragment_95120": "Esegui il wrapping nel frammento JSX", + "Wrap_in_parentheses_95194": "Eseguire il wrapping tra parentesi", "Wrap_invalid_character_in_an_expression_container_95108": "Eseguire il wrapping del carattere non valido in un contenitore di espressioni", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Racchiudere tra parentesi il corpo seguente che deve essere un valore letterale di oggetto", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Per informazioni su tutte le opzioni del compilatore, vedere {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Le firme dell'indice '{0}' e '{1}' non sono compatibili.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Non è possibile combinare le operazioni '{0}' e '{1}' senza parentesi.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Gli attributi '{0}' sono stati specificati due volte. L'attributo denominato '{0}' verrà sovrascritto.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' alla fine di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' all'inizio di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' può essere importato solo attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' può essere importato solo usando un'importazione predefinita.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' può essere importato solo usando una chiamata 'require' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' può essere importato solo usando una chiamata 'require' o usando un'importazione predefinita.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' può essere importato solo usando 'import {1} = require({2})' o un'importazione predefinita.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' può essere importato solo usando 'import {1} = require({2})' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "Non è possibile compilare '{0}' in '--isolatedModules' perché viene considerato un file di script globale. Aggiungere un'istruzione import, export o un'istruzione 'export {}' vuota per trasformarlo in un modulo.", "_0_cannot_be_used_as_a_JSX_component_2786": "Non è possibile usare '{0}' come componente JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Non è possibile usare '{0}' come valore perché è stato esportato con 'export type'.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Non è possibile usare '{0}' come valore perché è stato importato con 'import type'.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "I componenti di '{0}' non accettano testo come elementi figlio. Il tipo di testo in JSX è 'string ', ma il tipo previsto di '{1}' è '{2}'.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Non è stato possibile creare un'istanza di '{0}' con un tipo arbitrario che potrebbe non essere correlato a '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Le dichiarazioni '{0}' possono essere dichiarate solo all'interno di un blocco.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Le dichiarazioni '{0}' possono essere usate solo in file TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' dichiarazioni non possono avere criteri di associazione.", + "_0_declarations_must_be_initialized_1155": "Le dichiarazioni '{0}' devono essere inizializzate.", "_0_expected_1005": "È previsto '{0}'.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' ha un tipo stringa, ma deve avere una sintassi di stringa riconoscibile sintatticamente quando è abilitato 'isolatedModules'.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "In '{0}' non è presente alcun membro esportato denominato '{1}'. Si intendeva '{2}'?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' include implicitamente un tipo restituito '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usato come riferimento diretto o indiretto in una delle relative espressioni restituite.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Il tipo di indice '{0}' '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' è una primitiva, ma '{1}' è un oggetto wrapper. Quando possibile, preferire '{0}'.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' è un tipo e non può essere importato nei file JavaScript. Usare '{1}' in un'annotazione di tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "'{0}' è un tipo e deve essere importato usando un'importazione solo di tipi quando 'preserveValueImports' e 'isolatedModules' sono entrambi abilitati.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' è un tipo e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' è una ridenominazione inutilizzata di '{1}'. Si intendeva utilizzarla come annotazione di tipo?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' è assegnabile al vincolo di tipo '{1}', ma è possibile creare un'istanza di '{1}' con un sottotipo diverso del vincolo '{2}'.", "_0_is_automatically_exported_here_18044": "'{0}' viene esportato automaticamente qui.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "L'elenco '{0}' non può essere vuoto.", "_0_modifier_already_seen_1030": "Il modificatore '{0}' è già presente.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una classe, un'interfaccia o un alias di tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una funzione, un metodo o una classe", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Il modificatore '{0}' non può essere incluso in una dichiarazione di costruttore.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Il modificatore '{0}' non può essere incluso in un elemento modulo o spazio dei nomi.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Il modificatore '{0}' non può essere incluso in un parametro.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Il modificatore '{0}' non può essere incluso in un membro di tipo.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Il modificatore '{0}' non può essere incluso in un parametro di tipo.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'await using'.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Il modificatore '{0}' non può essere incluso in una firma dell'indice.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Il modificatore '{0}' non può essere incluso in elementi di classe di questo tipo.", "_0_modifier_cannot_be_used_here_1042": "Non è possibile usare il modificatore '{0}' in questo punto.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Non è possibile usare il modificatore '{0}' con il modificatore '{1}'.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Non è possibile usare il modificatore '{0}' con un identificatore privato.", "_0_modifier_must_precede_1_modifier_1029": "Il modificatore '{0}' deve precedere il modificatore '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve essere seguito da un'espressione del valore di proprietà Unicode racchiusa tra parentesi graffe.", "_0_needs_an_explicit_type_annotation_2782": "'{0}' richiede un'annotazione di tipo esplicita.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come spazio dei nomi.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' si riferisce solo a un tipo, ma in questo punto viene usato come valore. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su es2015 o versioni successive.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fa riferimento a un istruzione globale UMD, ma il file corrente è un modulo. Provare ad aggiungere un'importazione.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fa riferimento a un valore, ma qui viene usato come tipo. Si intendeva 'typeof {0}'?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere importato usando un'importazione solo di tipi quando 'preserveValueImports' e 'isolatedModules' sono entrambi abilitati.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere riesportato usando una riesportazione solo di tipi quando 'isolatedModules' è abilitato.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere riesportato usando una riesportazione solo di tipi quando '{1}' è abilitato.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "' {0}' deve essere impostato all'interno dell'oggetto 'compilerOptions' del file JSON di configurazione", "_0_tag_already_specified_1223": "Il tag '{0}' è già specificato.", "_0_was_also_declared_here_6203": "In questo punto viene dichiarato anche '{0}'.", @@ -1780,19 +1981,22 @@ "and_here_6204": "e in questo punto.", "arguments_cannot_be_referenced_in_property_initializers_2815": "impossibile fare riferimento agli 'argomenti' negli inizializzatori di proprietà.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": considera i file con importazioni, esportazioni, import.meta, jsx (con jsx: react-jsx) o il formato esm (con modulo: node16+) come moduli.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Non è possibile usare l'espressione 'await' all'interno di un blocco statico di classe.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Le espressioni 'await' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Le espressioni 'await' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Non è possibile usare le espressioni 'await' in un inizializzatore di parametri.", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' non ha alcun effetto sul tipo di questa espressione.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Le istruzioni 'await using' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Le istruzioni 'await using' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Non è possibile usare le istruzioni 'await using' all'interno di un blocco statico di classe.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'opzione 'baseUrl' è impostata su '{0}'. Verrà usato questo valore per risolvere il nome del modulo non relativo '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve essere seguito da una lettera ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' può essere usato solo all'inizio di un file.", "case_or_default_expected_1130": "È previsto 'case' o 'default'.", "catch_or_finally_expected_1472": "È previsto 'catch' o 'finally'.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Le dichiarazioni 'const' possono essere dichiarate solo all'interno di un blocco.", - "const_declarations_must_be_initialized_1155": "Le dichiarazioni 'const' devono essere inizializzate.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non finito.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non consentito 'NaN'.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "gli inizializzatori di membri di enumerazione const possono contenere solo valori letterali e altri valori di enumerazione calcolati.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "gli inizializzatori di membro di enumerazione const devono essere espressioni costanti.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Le enumerazioni 'const' possono essere usate solo in espressioni di accesso a proprietà o indice oppure nella parte destra di un'assegnazione di esportazione, di una dichiarazione di importazione o di una query su tipo.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Non è possibile usare 'constructor' come nome di proprietà di un parametro.", "constructor_is_a_reserved_word_18012": "'#constructor' è una parola riservata.", @@ -1811,13 +2015,14 @@ "file_6025": "file", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "I cicli 'for await' sono consentiti solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "I cicli 'for await' sono consentiti solo all'interno di funzioni asincrone e al primo livello di moduli.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Non è possibile usare i cicli 'for await' all'interno di un blocco statico di classe.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Le funzioni di accesso 'get' e 'set' non possono dichiarare parametri 'this'.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se è specificato `files`; in caso contrario, `[\"**/*\"]5D;`", "implements_clause_already_seen_1175": "La clausola 'implements' è già presente.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Le clausole 'implements' possono essere usate solo in file TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' può essere usato solo in file TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Le dichiarazioni 'infer' sono consentite solo nella clausola 'extends' di un tipo condizionale.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Le dichiarazioni 'let' possono essere dichiarate solo all'interno di un blocco.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve essere seguito da un nome di gruppo di acquisizione racchiuso tra parentesi acute.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Non è consentito usare 'let' come nome in dichiarazioni 'let' o 'const'.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === `AMD` o `UMD` o `System` o `ES6`, quindi `Classic`; in caso contrario `Node`", "module_system_or_esModuleInterop_6904": "module === \"system\" o esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' non contiene alcuna voce di 'typesVersions' corrispondente alla versione '{0}'.", "package_json_had_a_falsy_0_field_6220": "'package.json' contiene un campo '{0}' falso.", "package_json_has_0_field_1_that_references_2_6101": "Il file 'package.json' contiene il campo '{1}' di '{0}' che fa riferimento a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "'package.json' contiene un campo 'peerDependencies'.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' contiene una voce '{0}' di 'typesVersions' che non corrisponde a un intervallo semver valido.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' contiene una voce '{0}' di 'typesVersions' che corrisponde alla versione '{1}' del compilatore. Verrà cercato un criterio per la corrispondenza con il nome di modulo '{2}'.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' contiene un campo 'typesVersions' con mapping tra percorsi specifici della versione.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L'ambito package.json '{0}' contiene un tipo non valido per la destinazione dell'identificatore '{1}'", "package_json_scope_0_has_no_imports_defined_6273": "L'ambito package.json '{0}' non ha importazioni definite.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "È specificata l'opzione 'paths'. Verrà cercato un criterio per la corrispondenza con il nome del modulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "'\\q' è disponibile solo all'interno della classe di caratteri.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve essere seguito da stringhe alternative racchiuse tra parentesi graffe.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Il modificatore 'readonly' può essere incluso solo in una dichiarazione di proprietà o una firma dell'indice.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Il modificatore di tipo 'readonly' è consentito solo in tipi di valore letterale matrice e tupla.", "require_call_may_be_converted_to_an_import_80005": "La chiamata a 'require' può essere convertita in un'importazione.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Le asserzioni 'resolution-mode' sono supportate solo quando 'moduleResolution' è 'node16' o 'nodenext'.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Le asserzioni 'resolution-mode' sono instabili. Usare TypeScript notturno per disattivare questo errore. Provare ad eseguire l'aggiornamento con 'npm install -D typescript@next'.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode' può essere impostata solo per le importazioni di tipo.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' è l'unica chiave valida per l’importazione dei tipi di asserzioni.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' è l'unica chiave valida per gli attributi di importazione di tipi.", "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve essere 'require' o 'import'.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'opzione 'rootDirs' è impostata e verrà usata per risolvere il nome del modulo relativo '{0}'.", "super_can_only_be_referenced_in_a_derived_class_2335": "È possibile fare riferimento a 'super' solo in una classe derivata.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "Non è possibile fare riferimento a 'this' in un nome di proprietà calcolato.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Non è possibile fare riferimento a 'this' nel corpo di un modulo o di uno spazio dei nomi.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Non è possibile fare riferimento a 'this' in un inizializzatore di proprietà statica.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "Non è possibile fare riferimento a 'this' in argomenti del costruttore.", "this_cannot_be_referenced_in_current_location_2332": "Non è possibile fare riferimento a 'this' nella posizione corrente.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' contiene implicitamente il tipo 'any' perché non include un'annotazione di tipo.", "true_for_ES2022_and_above_including_ESNext_6930": "'true' per ES2022 e versioni successive, incluso ESNext.", "true_if_composite_false_otherwise_6909": "`true` se è `composite`; in caso contrario, `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' è 'node16', 'nodenext' o 'bundler'; in caso contrario, 'false'.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: il compilatore TypeScript", "type_Colon_6902": "tipo:", "unique_symbol_types_are_not_allowed_here_1335": "I tipi 'unique symbol' non sono consentiti in questo punto.", diff --git a/node_modules/typescript/lib/ja/diagnosticMessages.generated.json b/node_modules/typescript/lib/ja/diagnosticMessages.generated.json index 5bc780d7a9..7f01c1abc9 100644 --- a/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/ja/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "すべてのコンパイラ オプション", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾子とインポート宣言は同時に使用できません。", "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' パラメーターは最初のパラメーターである必要があります。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' タグが '@typedef'、'@callback'、または '@overload' タグの後にない可能性があります", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' コメントに複数の '@type' タグを含めることはできません。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' リテラルをプロパティ名として使用することはできません。", "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint リテラルでは指数表記を使用できません。", "A_bigint_literal_must_be_an_integer_1353": "bigint リテラルは整数である必要があります。", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "実装シグネチャでバインド パターン パラメーターを省略可能にすることはできません。", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' ステートメントは外側のイテレーションまたは switch ステートメント内でのみ使用できます。", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' ステートメントは、外側のステートメントのラベルにのみ移動できます。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "予約された二重句読点を文字クラスに含めることはできません。バックスラッシュを使用してエスケープするつもりでしたか?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "文字クラスの範囲を別の文字クラスでバインドすることはできません。", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "クラスで実装できるのは、オプションの型引数を指定した識別子/完全修飾名のみです。", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "クラスで実装できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "クラスが '{0}' のようなプリミティブ型を拡張することはできません。クラスは、コンストラクト可能な値のみを拡張できます。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "クラスが '{0}' のようなプリミティブ型を実装することはできません。実装できるのは、その他の名前付きオブジェクト型のみです。", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' の修飾子がないクラス宣言には名前が必要です。", "A_class_member_cannot_have_the_0_keyword_1248": "クラス メンバーに '{0}' キーワードを指定することはできません。", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "コンマ式は計算されたプロパティ名では使用できません。", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "コンストラクターに 'this' パラメーターを指定することはできません。", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' ステートメントは外側のイテレーション内でのみ使用できます。", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' ステートメントは、外側のイテレーション ステートメントのラベルにのみ移動できます。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "宣言ファイルを 'import type' なしでインポートすることはできません。代わりに実装ファイルト '{0}' をインポートするつもりでしたか?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 修飾子は、環境コンテキストでは使用できません。", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "デコレーターが装飾できるのは、オーバーロードではなく、メソッドの実装のみです。", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 句を 'switch' ステートメントで複数回使用することはできません。", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "既定のエクスポートは、ファイルまたはモジュールの宣言のトップレベルにある必要があります。", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "限定代入アサーション '!' は、このコンテキストで許可されていません。", "A_destructuring_declaration_must_have_an_initializer_1182": "非構造化宣言には初期化子が必要です。", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動的インポート呼び出しは 'Promise' を返します。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることをご確認ください。", "A_file_cannot_have_a_reference_to_itself_1006": "ファイルにそれ自体への参照を含めることはできません。", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' を返す関数には、到達可能なエンド ポイントがありません。", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' キーワードで呼び出される関数に、'void' である 'this' 型を使用することはできません。", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "宣言された型が 'void' でも 'any' でもない関数は値を返す必要があります。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "宣言された型が 'undefined'、'void'、または 'any' でない関数は、値を返す必要があります。", "A_generator_cannot_have_a_void_type_annotation_2505": "ジェネレーターに 'void' 型の注釈を指定することはできません。", "A_get_accessor_cannot_have_parameters_1054": "'get' アクセサーにパラメーターを指定することはできません。", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get アクセサーは、少なくともセッターと同程度にアクセス可能である必要があります", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "名前空間宣言は、それとマージするクラスや関数と異なるファイルに配置できません。", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "名前空間宣言は、それとマージするクラスや関数より前に配置できません。", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "名前空間宣言は、名前空間またはモジュールの最上位レベルでのみ許可されます。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'namespace' 宣言を 'module' キーワードを使用して宣言することはできません。代わりに 'namespace' キーワードを使用してください。", "A_non_dry_build_would_build_project_0_6357": "非 -dry ビルドを実行した場合、プロジェクト '{0}' がビルドされます", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry ビルドを実行した場合、次のファイルが削除されます: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "non-dry build では、プロジェクト '{0}' の出力が更新されます", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "non-dry build では、プロジェクト '{0}' の出力のタイムスタンプが更新されます", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "パラメーター初期化子は、関数またはコンストラクターの実装でのみ指定できます。", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "パラメーター プロパティは、rest パラメーターを使用して宣言することはできません。", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子が派生クラスに含まれている場合は、'super' や 'this' を参照するコンストラクターの最初のステートメントである必要があります。", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' ベース型のガードはパラメーター ベース型のガードとは互換性がありません。", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 型はクラスまたはインターフェイスの静的でないメンバーでのみ使用できます。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' が有効である場合、CommonJS モジュール内の値宣言でトップレベルの 'export' 修飾子を使用することはできません。", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' ファイルは既に '{0}' で定義されています。", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "タプル メンバーを optional と rest の両方に指定することはできません。", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "タプル型に負の値のインデックスを指定することはできません。", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 式は、ジェネレーター本文でのみ使用できます。", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "クラス '{1}' の抽象メソッド '{0}' には super 式を介してアクセスできません。", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象メソッドは抽象クラス内でのみ使用できます。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象プロパティは抽象クラス内でのみ使用できます。", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "コンストラクター内でクラス '{1}' の抽象プロパティ '{0}' にアクセスできません。", "Accessibility_modifier_already_seen_1028": "アクセシビリティ修飾子は既に存在します。", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "アクセサーは ECMAScript 5 以上をターゲットにする場合にのみ使用できます。", "Accessors_must_both_be_abstract_or_non_abstract_2676": "アクセサーはどちらも抽象または非抽象である必要があります。", "Add_0_to_unresolved_variable_90008": "'{0}' を未解決の変数に追加します", "Add_a_return_statement_95111": "return ステートメントを追加する", + "Add_a_return_type_to_the_function_declaration_9031": "関数宣言に戻り値の型を追加してください。", + "Add_a_return_type_to_the_function_expression_9030": "関数式に戻り値の型を追加してください。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "get アクセサー宣言に戻り値の型を追加してください。", + "Add_a_return_type_to_the_method_9034": "メソッドに戻り値の型を追加してください", + "Add_a_type_annotation_to_the_parameter_0_9028": "パラメーター {0} に型注釈を追加してください。", + "Add_a_type_annotation_to_the_property_0_9029": "プロパティ {0} に型注釈を追加してください。", + "Add_a_type_annotation_to_the_variable_0_9027": "変数 {0} に型注釈を追加してください。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set アクセサー宣言のパラメーターに型を追加してください。", "Add_all_missing_async_modifiers_95041": "不足しているすべての 'async' 修飾子を追加します", "Add_all_missing_attributes_95168": "不足しているすべての属性を追加する", "Add_all_missing_call_parentheses_95068": "見つからない呼び出しのかっこをすべて追加します", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "不足しているすべてのインポートを追加する", "Add_all_missing_members_95022": "不足しているすべてのメンバーを追加します", "Add_all_missing_override_modifiers_95162": "不足しているすべての 'override' 修飾子を追加する", + "Add_all_missing_parameters_95190": "不足しているすべてのプロパティを追加してください", "Add_all_missing_properties_95166": "不足しているすべてのプロパティを追加する", "Add_all_missing_return_statement_95114": "不足しているすべての return ステートメントを追加する", "Add_all_missing_super_calls_95039": "不足しているすべての super の呼び出しを追加します", + "Add_all_missing_type_annotations_90067": "不足しているすべての型注釈を追加してください", + "Add_all_optional_parameters_95193": "すべてのオプション パラメーターを追加してください", + "Add_annotation_of_type_0_90062": "型 '{0}' の注釈を追加してください", "Add_async_modifier_to_containing_function_90029": "含まれている関数に async 修飾子を追加します", "Add_await_95083": "'await' を追加する", "Add_await_to_initializer_for_0_95084": "'{0}' の初期化子に 'await' を追加する", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "初期化されていないすべてのプロパティに初期化子を追加します", "Add_missing_attributes_95167": "不足している属性の追加", "Add_missing_call_parentheses_95067": "見つからない呼び出しのかっこを追加します", + "Add_missing_comma_for_object_member_completion_0_95187": "オブジェクト メンバー補完 '{0}' に不足しているコンマを追加してください。", "Add_missing_enum_member_0_95063": "不足している列挙型メンバー '{0}' を追加する", "Add_missing_function_declaration_0_95156": "不足している関数宣言 '{0}' を追加します", "Add_missing_new_operator_to_all_calls_95072": "不足している 'new' 演算子をすべての呼び出しに追加する", "Add_missing_new_operator_to_call_95071": "不足している 'new' 演算子を呼び出しに追加する", + "Add_missing_parameter_to_0_95188": "'{0}' に不足しているパラメーターを追加してください", + "Add_missing_parameters_to_0_95189": "'{0}' に不足しているパラメーターを追加してください", "Add_missing_properties_95165": "不足しているすべてのプロパティの追加", "Add_missing_super_call_90001": "欠落している 'super()' 呼び出しを追加する", "Add_missing_typeof_95052": "不足している 'typeof' を追加します", "Add_names_to_all_parameters_without_names_95073": "名前のないすべてのパラメーターに名前を追加する", + "Add_optional_parameter_to_0_95191": "オプション パラメーターを '{0}' に追加してください", + "Add_optional_parameters_to_0_95192": "省略可能なパラメーターを '{0}' に追加する", "Add_or_remove_braces_in_an_arrow_function_95058": "アロー関数内の中かっこを追加または削除します", "Add_override_modifier_95160": "'override' 修飾子を追加する", "Add_parameter_name_90034": "パラメーター名を追加する", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "メンバー名と一致するすべての未解決の変数に修飾子を追加します", + "Add_return_type_0_90063": "戻り値の型 '{0}' を追加してください", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "型を明示的にするには、この式に satisfies と型アサーションを追加してください (satisfies T as T)。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}' を使用して satisfies とインライン型のアサーションを追加してください", "Add_to_all_uncalled_decorators_95044": "呼び出されていないすべてのデコレーターに '()' を追加します", "Add_ts_ignore_to_all_error_messages_95042": "すべてのエラー メッセージに '@ts-ignore' を追加します", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "インデックスを使用してアクセスした場合は、'undefined' を型に追加します。", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "既定のエクスポートがないモジュールからの既定のインポートを許可します。これは、型チェックのみのため、コード生成には影響を与えません。", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "モジュールに既定のエクスポートがない場合は、'import x from y' を許可します。", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib からヘルパー関数をファイルごとに含めるのではなく、プロジェクトごとに 1 回インポートすることを許可します。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "TypeScript ファイル拡張子を含めるインポートを許可してください。'--moduleResolution bundler' と '--noEmit' または '--emitDeclarationOnly' のいずれかを設定する必要があります。", "Allow_javascript_files_to_be_compiled_6102": "javascript ファイルのコンパイルを許可します。", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "モジュールを解決するときに複数のフォルダーを 1 つのフォルダーとして処理することを許可します。", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "既に含まれているファイル名 '{0}' は、ファイル名 '{1}' と大文字と小文字の指定だけが異なります。", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "このバインド パターンに一致する引数が指定されていません。", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術オペランドは 'any' 型、'number' 型、’bigint' 型、列挙型のいずれかである必要があります。", "An_arrow_function_cannot_have_a_this_parameter_2730": "アロー関数に 'this' パラメーターを指定することはできません。", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同期関数またはメソッドは 'Promise' を返す必要があります。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることを確認してください。", "An_async_iterator_must_have_a_next_method_2519": "非同期反復子には 'next()' メソッドが必要です。", "An_element_access_expression_should_take_an_argument_1011": "要素アクセス式では、引数を取る必要があります。", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "エクスポート宣言は、モジュールの最上位レベルでのみ使用できます。", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "エクスポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", "An_export_declaration_cannot_have_modifiers_1193": "エクスポート宣言に修飾子を指定することはできません。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax' が有効である場合、 'export =' 宣言は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax' が有効である場合、'export =' 宣言は値を参照する必要がありますが、'{0}' は型のみを参照しています。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax' が有効である場合、'export default' は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax' が有効である場合、'export default' は値を参照する必要がありますが、'{0}' は型のみを参照しています。", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 型の式は、真実性をテストできません。", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "拡張された Unicode エスケープ値は 0x0 と 0x10FFFF の間 (両端を含む) でなければなりません。", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別子またはキーワードを数値リテラルのすぐ後に指定することはできません。", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "実装は環境コンテキストでは宣言できません。", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "インポート エイリアスは、'export type' を使用してエクスポートされた宣言を参照できません。", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "インポート エイリアスは、'import type' を使用してインポートされた宣言を参照できません。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax' が有効である場合、インポート エイリアスを型または型のみの宣言に解決することはできません。", "An_import_alias_cannot_use_import_type_1392": "インポート エイリアスで 'import type' を使用することはできません", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "インポート宣言は、モジュールの最上位レベルでのみ使用できます。", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "インポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", "An_import_declaration_cannot_have_modifiers_1191": "インポート宣言に修飾子を指定することはできません。", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "インポート パスの末尾を拡張子 '{0}' にすることはできません。代わりに '{1}' のインポートをご検討ください。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "'allowImportingTsExtensions' が有効である場合、インポート パスの末尾には '{0}' 拡張子のみを指定できます。", "An_index_signature_cannot_have_a_rest_parameter_1017": "インデックス シグネチャに rest パラメーターを指定することはできません。", "An_index_signature_cannot_have_a_trailing_comma_1025": "インデックス シグネチャの末尾にコンマを指定することはできません。", "An_index_signature_must_have_a_type_annotation_1021": "インデックス シグネチャには型の注釈が必要です。", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "インスタンス化式の後にプロパティ アクセスを続けることはできません。", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "インターフェイスが拡張するのは、オプションの型引数が指定された識別子/完全修飾名のみです。", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "インターフェイスが拡張できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "インターフェイスは、'{0}' のようなプリミティブ型を拡張できません。インターフェイスは名前付きの型とクラスのみを拡張できます", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "インターフェイスが '{0}' のようなプリミティブ型を拡張することはできません。拡張できるのは、その他の名前付きオブジェクト型のみです。", "An_interface_property_cannot_have_an_initializer_1246": "インターフェイス プロパティに初期化子を使用することはできません。", "An_iterator_must_have_a_next_method_2489": "反復子には 'next()' メソッドが必要です。", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma を JSX フラグメントで使用する場合は、@jsxFrag pragma が必要です。", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "オブジェクト リテラルに同じ名前の複数のプロパティを指定することはできません。", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "オブジェクト リテラルには、同じ名前のプロパティおよびアクセサーを指定することはできません。", "An_object_member_cannot_be_declared_optional_1162": "オブジェクト メンバーを省略可能として宣言することはできません。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "オブジェクトの '[Symbol.hasInstance]' メソッドを 'instanceof' 式の右側で使用するには、このメソッドがブール値を返す必要があります。", "An_optional_chain_cannot_contain_private_identifiers_18030": "省略可能なチェーンには、pirvate 識別子を含めることはできません。", "An_optional_element_cannot_follow_a_rest_element_1266": "省略可能な要素を rest 要素の後に指定することはできません。", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' の外部値がこのコンテナーによってシャドウされています。", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "オーバーロード シグネチャをジェネレーターとして宣言することはできません。", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "累乗式の左辺で '{0}' 演算子を含む単項式を使用することはできません。式を括弧で囲むことを検討してください。", "Annotate_everything_with_types_from_JSDoc_95043": "すべてに JSDoc の型で注釈を付けます", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "名前空間内のプロパティ expando 関数の型に注釈を付けてください", "Annotate_with_type_from_JSDoc_95009": "JSDoc の型で注釈を付けます", "Another_export_default_is_here_2753": "別のエクスポートの既定値がここにあります。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "複数の文字と一致する可能性のある Unicode プロパティは、Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "複数の文字と一致する可能性のあるものはすべて、負数化された文字クラス内では無効です。", "Are_you_missing_a_semicolon_2734": "セミコロンを忘れていませんか?", "Argument_expression_expected_1135": "引数式が必要です。", "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' オプションの引数は {1} である必要があります。", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "型 '{0}' の引数を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' のパラメーターに割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "rest パラメーター '{0}' の引数が指定されませんでした。", "Array_element_destructuring_pattern_expected_1181": "配列要素の非構造化パターンが必要です。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "spread 要素を含む配列を --isolatedDeclarations と共に推論することはできません。", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "アサーションでは、呼び出し先のすべての名前が明示的な型の注釈で宣言されている必要があります。", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "アサーションでは、呼び出し先が識別子または修飾名である必要があります。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "宣言せずに関数にプロパティを割り当てることは、--isolatedDeclarations ではサポートされていません。この関数に割り当てられたプロパティに明示的な宣言を追加してください。", "Asterisk_Slash_expected_1010": "'*/' が必要です。", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "少なくとも 1 つのアクセサーに、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "グローバル スコープの拡張を直接入れ子にできるのは、外部モジュールまたは環境モジュールの宣言内のみです。", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "グローバル スコープの拡張は、環境コンテキストに既にある場合を除いて、'declare' 修飾子を使用する必要があります。", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "プロジェクト '{0}' で型指定の自動検出が有効になっています。キャッシュの場所 '{2}' を使用して、モジュール '{1}' に対して追加の解決パスを実行しています。", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "await 式はクラスの静的ブロック内では使用できません。", "BUILD_OPTIONS_6919": "ビルド オプション", "Backwards_Compatibility_6253": "下位互換性", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底クラスの式ではクラスの型パラメーターを参照することはできません。", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ターゲットが ES2020 未満の場合、bigint リテラルは使用できません。", "Binary_digit_expected_1177": "2 進の数字が必要です。", "Binding_element_0_implicitly_has_an_1_type_7031": "バインド要素 '{0}' には暗黙的に '{1}' 型が含まれます。", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "バインド要素を --isolatedDeclarations と共に直接エクスポートすることはできません。", "Block_scoped_variable_0_used_before_its_declaration_2448": "ブロック スコープの変数 '{0}' が、宣言の前に使用されています。", "Build_a_composite_project_in_the_working_directory_6925": "作業ディレクトリに複合プロジェクトを作成します。", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "最新の状態であると思われるものを含むすべてのプロジェクトをビルドします。", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "最新でない場合は、1 つ以上のプロジェクトとその依存関係をビルドします", "Build_option_0_requires_a_value_of_type_1_5073": "ビルド オプション '{0}' には型 {1} の値が必要です。", "Building_project_0_6358": "プロジェクト \"{0}\" をビルドしています...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "組み込みの反復子は、'any' の代わりに 'undefined' の 'TReturn' 型を使用してインスタンス化されます。", "COMMAND_LINE_FLAGS_6921": "コマンドライン フラグ", "COMMON_COMMANDS_6916": "一般的なコマンド", "COMMON_COMPILER_OPTIONS_6920": "一般的なコンパイラ オプション", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼び出しシグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "戻り値の型の注釈がない呼び出しシグネチャの戻り値の型は、暗黙的に 'any' になります。", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "引数なしの呼び出しシグネチャに、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。", - "Call_target_does_not_contain_any_signatures_2346": "呼び出しターゲットにシグネチャが含まれていません。", "Can_only_convert_logical_AND_access_chains_95142": "論理 AND のアクセス チェーンのみを変換できます", "Can_only_convert_named_export_95164": "名前付きエクスポートのみを変換できます", "Can_only_convert_property_with_modifier_95137": "修飾子を伴うプロパティの変換のみ可能です", - "Can_only_convert_string_concatenation_95154": "変換できるのは文字列の連結のみです", + "Can_only_convert_string_concatenations_and_string_literals_95154": "文字列の連結と文字列リテラルのみを変換できます", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}.{1}' にアクセスできません。'{0}' は型で、名前空間ではありません。'{0}[\"{1}\"]' で '{0}' のプロパティ '{1}' の型を取得するつもりでしたか?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' フラグが指定されている場合、アンビエント const 列挙型にはアクセスできません。", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' が有効である場合、修飾しないで別のファイルから '{0}' にアクセスすることはできません。代わりに '{2}' を使用してください。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' が有効である場合、アンビエント const 列挙型にアクセスすることはできません。", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' コンストラクター型を '{1}' コンストラクター型に割り当てることができません。", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "抽象コンストラクター型を非抽象コンストラクター型に割り当てることはできません。", "Cannot_assign_to_0_because_it_is_a_class_2629": "クラスであるため、'{0}' に割り当てることはできません。", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "'{0}' のライブラリ定義が見つかりません。", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' のライブラリ定義が見つかりません。'{1}' ですか?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "モジュール '{0}' が見つかりません。'--resolveJsonModule' を使用して '.json' 拡張子を持つモジュールをインポートすることをご検討ください。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "モジュール '{0}' が見つかりません。'moduleResolution' オプションを 'node' に設定することか、'paths' オプションにエイリアスを追加することを意図していましたか?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "モジュール '{0}' が見つかりません。'moduleResolution' オプションを 'nodenext' に設定するか、'paths' オプションにエイリアスを追加するつもりでしたか?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "モジュール '{0}' またはそれに対応する型宣言が見つかりません。", "Cannot_find_name_0_2304": "名前 '{0}' が見つかりません。", "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' という名前は見つかりません。'{1}' ですか?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "名前 '{0}' が見つかりません。これを非同期関数に書き込むということですか?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{1}' 以降に変更してみてください。", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションが 'dom' を含むように変更してみてください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' をお試しください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' を試してから、tsconfig 内の型フィールドに 'bun' を追加してください。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` をお試しください。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、tsconfig の型フィールドに 'jest' または 'mocha' を追加してください。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` をお試しください。", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列の非構造化は常に '{0}' を送信します。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列展開は常に '{0}' を送信します。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、for-of は常に '{0}' を送信します。", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "'outFile' が設定されていないため、プロジェクト '{0}' を先頭に追加することはできません", + "Cannot_move_statements_to_the_selected_file_95183": "選択したファイルにステートメントを移動できません", + "Cannot_move_to_file_selected_file_is_invalid_95179": "ファイルに移動できません。選択したファイルは無効です", "Cannot_read_file_0_5083": "ファイル '{0}' を読み取れません。", "Cannot_read_file_0_Colon_1_5012": "ファイル '{0}' を読み取れません: {1}。", "Cannot_redeclare_block_scoped_variable_0_2451": "ブロック スコープの変数 '{0}' を再宣言することはできません。", "Cannot_redeclare_exported_variable_0_2323": "エクスポートされた変数 '{0}' を再び宣言できません。", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 句で識別子 '{0}' を再宣言することはできません。", "Cannot_start_a_function_call_in_a_type_annotation_1441": "型の注釈で関数呼び出しを開始することはできません。", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "ファイル '{1}' の読み取りでエラーが発生したため、プロジェクト '{0}' の出力を更新できません", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' フラグが指定されていないと、JSX を使用できません。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "'--isolatedModules' フラグが指定されている場合、型または型専用の名前空間で 'export import' を使用することはできません。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' が有効である場合、型または型のみの名前空間で 'export import' を使用することはできません。", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' が 'none' である場合、インポート、エクスポート、モジュール拡張は使用できません。", "Cannot_use_namespace_0_as_a_type_2709": "名前空間 '{0}' を型として使用することはできません。", "Cannot_use_namespace_0_as_a_value_2708": "名前空間 '{0}' を値として使用することはできません。", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "'extends' を 'implements' に変更する", "Change_spelling_to_0_90022": "スペルを '{0}' に変更する", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "宣言されているものの、コンストラクターで設定されていないクラス プロパティを確認します。", + "Check_side_effect_imports_6806": "副作用のインポートを確認してください。", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind'、'call'、'apply' のメソッドの引数が元の関数と一致することを確認します。", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' が '{1}' - '{2}' の最長一致のプレフィックスであるかを確認しています。", "Circular_definition_of_import_alias_0_2303": "インポート エイリアス '{0}' の循環定義です。", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "クラスの宣言では '{0}' のオーバーロード リストを実装できません。", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラスの宣言で複数の '@augments' または '@extends' タグを含めることはできません。", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "クラス デコレーターは、静的プライベート識別子と共に使用することはできません。試験段階のデコレーターを削除することをご検討ください。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "親クラスによって定義されたクラス フィールド '{0}' は、super を介して子クラスでアクセスすることはできません。", "Class_name_cannot_be_0_2414": "クラス名を '{0}' にすることはできません。", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "モジュール {0} を使用して ES5 をターゲットとするときに、クラス名を 'オブジェクト' にすることはできません。", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "クラス側の静的な '{0}' が基底クラス側の静的な '{1}' を正しく拡張していません。", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "コマンド ライン オプション", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "構成ファイルか、'tsconfig.json' を含むフォルダーにパスが指定されたプロジェクトをコンパイルします。", "Compiler_Diagnostics_6251": "コンパイラの診断", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "コンパイラ オプション '{0}' に空の文字列を指定することはできません。", "Compiler_option_0_expects_an_argument_6044": "コンパイラ オプション '{0}' には引数が必要です。", "Compiler_option_0_may_not_be_used_with_build_5094": "コンパイラオプション '--{0} ' は '--build ' と共に使用できない場合があります。", "Compiler_option_0_may_only_be_used_with_build_5093": "コンパイラ オプション '--{0} ' は '--build ' とのみ使用できる場合があります。", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "複合プロジェクトで宣言の生成を無効にすることはできません。", "Composite_projects_may_not_disable_incremental_compilation_6379": "複合プロジェクトではインクリメンタル コンパイルを無効にできません。", "Computed_from_the_list_of_input_files_6911": "入力ファイルのリストから計算されます。", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算されるプロパティは、数値または文字列リテラル、変数、または --isolatedDeclarations を含むドット付き式である必要があります。", "Computed_property_names_are_not_allowed_in_enums_1164": "計算されたプロパティ名は列挙型では使用できません。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "クラスまたはオブジェクト リテラル上の計算されたプロパティ名を --isolatedDeclarations と共に推論することはできません。", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "文字列値のメンバーを持つ列挙型では、計算値は許可されません。", "Concatenate_and_emit_output_to_single_file_6001": "出力を連結して 1 つのファイルを生成します。", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{0}' の定義が '{1}' および '{2}' で競合しています。競合を解決するには、このライブラリの特定バージョンのインストールをご検討ください。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "インポートを解決するときに、リゾルバー固有の既定値に加えて設定する条件です。", "Conflicts_are_in_this_file_6201": "このファイル内に競合があります。", "Consider_adding_a_declare_modifier_to_this_class_6506": "このクラスに 'declare' 修飾子を追加することを検討してください。", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "コンストラクト シグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "'{0}' をマップされたオブジェクト型に変換する", "Convert_all_const_to_let_95102": "すべての 'const' を 'let' に変換する", "Convert_all_constructor_functions_to_classes_95045": "すべてのコンストラクター関数をクラスに変換します", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "値として使用されていないすべてのインポートを型のみのインポートに変換する", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "すべての無効な文字を HTML エンティティ コードに変換する", "Convert_all_re_exported_types_to_type_only_exports_1365": "すべての再エクスポートされた型を、型のみのエクスポートに変換する", "Convert_all_require_to_import_95048": "'require' をすべて 'import' に変換", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "すべてを bigint 数値リテラルに変換する", "Convert_all_to_default_imports_95035": "すべてを既定のインポートに変換します", "Convert_all_type_literals_to_mapped_type_95021": "すべての型リテラルをマップされた型に変換します", + "Convert_all_typedef_to_TypeScript_types_95177": "すべての typedef を TypeScript 型に変換してください。", "Convert_arrow_function_or_function_expression_95122": "アロー関数または関数式を変換する", "Convert_const_to_let_95093": "'const' を 'let' に変換する", "Convert_default_export_to_named_export_95061": "既定のエクスポートを名前付きエクスポートに変換する", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "オプションのチェーン式に変換します", "Convert_to_template_string_95096": "テンプレート文字列に変換する", "Convert_to_type_only_export_1364": "型のみのエクスポートに変換する", - "Convert_to_type_only_import_1373": "型のみのインポートに変換する", + "Convert_typedef_to_TypeScript_type_95176": "typedef を TypeScript 型に変換してください。", "Corrupted_locale_file_0_6051": "ロケール ファイル {0} は破損しています。", "Could_not_convert_to_anonymous_function_95153": "匿名関数に変換できませんでした", "Could_not_convert_to_arrow_function_95151": "アロー関数に変換できませんでした", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "名前 '{0}' が見つかりませんでした。'{1}' ですか?", "Could_not_find_namespace_import_or_named_imports_95132": "名前空間のインポートまたは名前付きインポートが見つかりませんでした", "Could_not_find_property_for_which_to_generate_accessor_95135": "アクセサーを生成するプロパティが見つかりませんでした", + "Could_not_find_variable_to_inline_95185": "インライン化する変数が見つかりませんでした。", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "次の拡張子を持つパス '{0}' を解決できませんでした: {1}。", "Could_not_write_file_0_Colon_1_5033": "ファイル '{0}' を書き込めませんでした: '{1}'。", "Create_source_map_files_for_emitted_JavaScript_files_6694": "生成された JavaScript ファイルのソース マップ ファイルを作成します。", "Create_sourcemaps_for_d_ts_files_6614": "d.ts ファイルのソースマップを作成します。", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "作業ディレクトリの推奨設定を使用して tsconfig.json を作成します。", "DIRECTORY_6038": "ディレクトリ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "文字クラスでは、10 進数のエスケープ シーケンスと前方参照を使用することはできません。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "先頭が 0 の 10 進数を使用することはできません。", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "この宣言は別のファイル内の宣言を拡張します。この操作はシリアル化できません。", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "このファイルの宣言を生成するには、拡張のためにこのインポートを保持する必要があります。これは --isolatedDeclarations ではサポートされていません。", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "このファイルの宣言の生成では、プライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "このファイルの宣言の生成では、モジュール '{1}' からのプライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "このパラメーターの宣言を生成するには、その型に未定義の値を暗黙的に追加する必要があります。これは --isolatedDeclarations ではサポートされていません。", "Declaration_expected_1146": "宣言が必要です。", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣言名が組み込みのグローバル識別子 '{0}' と競合しています。", "Declaration_or_statement_expected_1128": "宣言またはステートメントが必要です。", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "静的プロパティ '{0}' を宣言する", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "デコレーター関数の戻り値の型 '{0}' は、型 '{1}' に割り当てられません。", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "デコレーター関数の戻り値の型は '{0}' ですが、\"void\" または \"any\" である必要があります。", + "Decorator_used_before_export_here_1486": "ここで 'export' の前にデコレーターが使用されています。", "Decorators_are_not_valid_here_1206": "デコレーターはここでは無効です。", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "デコレーターを同じ名前の複数の get/set アクセサーに適用することはできません。", - "Decorators_may_not_be_applied_to_this_parameters_1433": "デコレーターを ' this ' パラメーターに適用することができない場合があります。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "デコレーターが 'export' の前に使用されている場合は、'export' または 'export default' の後にデコレーターを使用することはできません。", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "デコレーターは、プロパティ宣言の名前とすべてのキーワードの前に置く必要があります。", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "既定の catch 句の変数は '任意' ではなく '不明' です。", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "モジュールの既定エクスポートがプライベート名 '{0}' を持っているか、使用しています。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "既定のエクスポートを --isolatedDeclarations と共に推論することはできません。", "Default_library_1424": "既定のライブラリ", "Default_library_for_target_0_1425": "ターゲット '{0}' の既定のライブラリ", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "次の識別子の定義が、別のファイル内の定義と競合しています: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "生成されたコード内で 'const 列挙型' 宣言の消去を無効にします。", "Disable_error_reporting_for_unreachable_code_6603": "到達できないコードのエラー報告を無効にします。", "Disable_error_reporting_for_unused_labels_6604": "未使用のラベルのエラー報告を無効にします。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "完全な型チェックを無効にしてください (重大な解析エラーと生成エラーのみが報告されます)。", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "コンパイルされた出力での '__extends' などのカスタム ヘルパー関数の生成を無効にします。", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "既定の lib.d.ts を含むすべてのライブラリ ファイルを含めることを無効にします。", "Disable_loading_referenced_projects_6235": "参照されているプロジェクトの読み込みを無効にします。", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "到達できないコードに関するエラーを報告しない。", "Do_not_report_errors_on_unused_labels_6074": "未使用のラベルに関するエラーを報告しない。", "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink の実際のパスを解決しません。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "型のみとしてマークされていないインポートまたはエクスポートを変換または削除せずに、'module' 設定に基づいて出力ファイルの形式で書き込まれていることを確認してください。", "Do_not_truncate_error_messages_6165": "エラー メッセージを切り捨てないでください。", "Duplicate_function_implementation_2393": "関数の実装が重複しています。", "Duplicate_identifier_0_2300": "識別子 '{0}' が重複しています。", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "型 '{0}' のインデックス シグネチャが重複しています。", "Duplicate_label_0_1114": "ラベル '{0}' が重複しています。", "Duplicate_property_0_2718": "プロパティ '{0}' が重複しています。", + "Duplicate_regular_expression_flag_1500": "正規表現フラグが重複しています。", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動的インポートの指定子の型は 'string' である必要がありますが、ここでは型 '{0}' が指定されています。", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "動的インポートは、'--module' フラグが 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'nodenext' に設定されている場合にのみサポートされます。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "動的インポートでは、引数として、モジュール指定子とオプションのアサーションのみを受け取ることができます", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "'--module' オプションが 'esnext'、'node16'、または 'nodenext' に設定されている場合、動的インポートは 2 番目の引数のみをサポートします。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動的インポートでは、引数として、モジュール指定子とオプションの属性セットのみを受け取ることができます", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "'--module' オプションが 'esnext'、'node16'、'nodenext'、または 'preserve' に設定されている場合、動的インポートは 2 番目の引数のみをサポートします。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module' が 'preserve' に設定されている場合、CommonJS モジュールでは ESM 構文を使用できません。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "'verbatimModuleSyntax' が有効である場合、CommonJS モジュールで ESM 構文は許可されません。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' の各宣言の値が異なります。'{2}' が必要ですが、'{3}' が指定されました。", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "共用体型 '{0}' の各メンバーにはコンストラクト シグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "共用体型 '{0}' の各メンバーにはシグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", "Editor_Support_6249": "エディター サポート", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "型チェックされた JavaScript ファイルでのエラー報告を有効にします。", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "ローカル変数が読み取られていない場合にエラー報告を有効にします。", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' に 'any' 型が指定されている場合は、エラー報告を有効にします。", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 ステージ 2 ドラフト デコレーター用の実験的なサポートを有効にします。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "従来の実験的なデコレーターの実験的なサポートを有効にしてください。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "宣言ファイルが存在する場合、拡張子を持つファイルのインポートを有効にしてください。", "Enable_importing_json_files_6689": ".json ファイルのインポートを有効にします。", "Enable_project_compilation_6302": "プロジェクトのコンパイルを有効にします", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "厳格な 'bind'、'call'、'apply' メソッドを関数で有効にします。", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "インポートの大文字と小文字の指定が正しいことを確認します。", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "各ファイルが他のインポートに依存しないで安全にトランスパイルできることを確認します。", "Ensure_use_strict_is_always_emitted_6605": "'use strict' が常に生成されることを確認します。", + "Entering_conditional_exports_6413": "条件付きエクスポートを入力しています。", "Entry_point_for_implicit_type_library_0_1420": "暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId が '{1}' の暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions で指定されたタイプ ライブラリ '{0}' のエントリ ポイント", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列挙型の宣言は、名前空間または他の列挙型の宣言とのみマージできます。", "Enum_declarations_must_all_be_const_or_non_const_2473": "列挙型宣言は、すべてが定数、またはすべてが非定数でなければなりません。", "Enum_member_expected_1132": "列挙型メンバーが必要です。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules' が有効である場合、非リテラル数値メンバーの後に続く列挙型メンバーには初期化子が必要です。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列挙型メンバー初期化子は、--isolatedDeclarations を含む外部シンボルへの参照なしで計算可能である必要があります。", "Enum_member_must_have_initializer_1061": "列挙型メンバーには初期化子が必要です。", "Enum_name_cannot_be_0_2431": "列挙型の名前を '{0}' にすることはできません。", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "列挙型 '{0}' に、リテラルではない初期化子を持つメンバーがあります。", "Errors_Files_6041": "エラーの発生したファイル", + "Escape_sequence_0_is_not_allowed_1488": "エスケープ シーケンス '{0}' は許可されていません。", "Examples_Colon_0_6026": "例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "型 '{0}' と '{1}' の比較が複雑すぎます。", "Excessive_stack_depth_comparing_types_0_and_1_2321": "型 '{0}' と '{1}' を比較するスタックが深すぎます。", + "Exiting_conditional_exports_6416": "条件付きエクスポートを終了しています。", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} 型の引数が必要です。'@extends' タグで指定してください。", "Expected_0_arguments_but_got_1_2554": "{0} 個の引数が必要ですが、{1} 個指定されました。", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} 引数が必要ですが、{1} が指定されました。'Promise' の型引数に 'void' を含めましたか?", "Expected_0_type_arguments_but_got_1_2558": "{0} 個の型引数が必要ですが、{1} 個が指定されました。", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} 型の引数が必要です。'@extends' タグで指定してください。", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 個の引数が必要ですが、0 個しかありませんでした。'new Promise()' では、引数なしで呼び出すことができる 'resolve' を生成するための JSDoc ヒントが必要です。", + "Expected_a_Unicode_property_name_1523": "Unicode プロパティ名が必要です。", + "Expected_a_Unicode_property_name_or_value_1527": "Unicode プロパティ名または値が必要です。", + "Expected_a_Unicode_property_value_1525": "Unicode プロパティ値が必要です。", + "Expected_a_capturing_group_name_1514": "キャプチャ グループ名が必要です。", + "Expected_a_class_set_operand_1520": "クラス セット オペランドが必要でした。", "Expected_at_least_0_arguments_but_got_1_2555": "最低でも {0} 個の引数が必要ですが、{1} 個指定されました。", "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' の対応する JSX 終了タグが必要です。", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX フラグメントの対応する終了タグが必要です。", "Expected_for_property_initializer_1442": "プロパティ初期化子には '=' を期待しています。", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' の '{0}' フィールドの型は '{1}' であるべきですが、'{2}' を取得しました。", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "デコレーターの実験的なサポートは将来のリリースで変更になる可能性がある機能です。'tsconfig' または 'jsconfig' に 'experimentalDecorators' オプションを設定してこの警告を削除します。", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明示的に指定されたモジュール解決の種類 '{0}'。", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' オプションが 'es2016' 以降に設定されている場合を除き、'bigint' 値に対して累乗を実行することはできません。", "Export_0_from_module_1_90059": "'{0}' をモジュール '{1}' からエクスポートする", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "エクスポートされた変数 '{0}' がプライベート名 '{1}' を持っているか、使用しています。", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "エクスポートとエクスポートの代入はモジュールの拡張では許可されていません。", "Expression_expected_1109": "式が必要です。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "式をデコレーターとして使用するには、かっこで囲む必要があります。", "Expression_or_comma_expected_1137": "式またはコンマが必要です。", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "式では大きすぎて表すことができないタプル型を生成します。", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "式は、複雑すぎて表現できない共用体型を生成します。", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "式は、コンパイラが基底クラスの参照をキャプチャするために使用する '_super' に解決されます。", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "式は、コンパイラが 'new.target' メタプロパティの参照をキャプチャするために使用する変数宣言 '_newTarget' に解決されます。", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "式は、コンパイラが 'this' の参照をキャプチャするために使用する変数宣言 '_this' に解決されます。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "式の型を --isolatedDeclarations と共に推論することはできません。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "extends 句に --isolatedDeclarations を含む式を含めることはできません。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推論された型 '{0}' の extends 句がプライベート名 '{1}' を持っているか、使用しています。", + "Extract_base_class_to_variable_90064": "基底クラスを変数に抽出する", + "Extract_binding_expressions_to_variable_90066": "バインド式を変数に抽出してください", "Extract_constant_95006": "定数の抽出", + "Extract_default_export_to_variable_90065": "変数への既定のエクスポートを抽出する", "Extract_function_95005": "関数の抽出", "Extract_to_0_in_1_95004": "{1} 内の {0} に抽出する", "Extract_to_0_in_1_scope_95008": "{1} スコープ内の {0} に抽出する", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "インターフェイスに抽出する", "Extract_to_type_alias_95078": "型のエイリアスに抽出する", "Extract_to_typedef_95079": "typedef に抽出する", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "変数に抽出し、'{0} as typeof {0}' で置き換えます", "Extract_type_95077": "Extract 型", "FILE_6035": "ファイル", "FILE_OR_DIRECTORY_6040": "ファイルまたはディレクトリ", - "Failed_to_parse_file_0_Colon_1_5014": "ファイル '{0}' を解析できませんでした。{1}。", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' が見つかりませんでした。", + "Failed_to_resolve_under_condition_0_6415": "条件 '{0}' で解決できませんでした。", "Fallthrough_case_in_switch_7029": "switch に case のフォールスルーがあります。", "File_0_does_not_exist_6096": "ファイル '{0}' が存在しません。", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "以前にキャッシュされた検索によるとファイル '{0}' は存在しません。", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "ファイル '{0}' が存在します。名前解決の結果として使用します。", "File_0_exists_according_to_earlier_cached_lookups_6239": "以前にキャッシュされた参照によるとファイル ' {0} ' は、存在します。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "ファイル '{0}' が存在します。名前解決の結果として使用します。", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "ファイル '{0}' はサポートされていない拡張子を含んでいます。サポートされている拡張子は {1} のみです。", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "ファイル '{0}' にはサポートされていない拡張機能があるため、スキップしています。", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "ファイル '{0}' は JavaScript ファイルです。'allowJs' オプションを有効にするつもりでしたか?", "File_0_is_not_a_module_2306": "ファイル '{0}' はモジュールではありません。", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "ファイル '{0}' がプロジェクト '{1}' のファイル リストに含まれていません。プロジェクトではすべてのファイルをリストするか、'include' パターンを使用する必要があります。", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "ファイル '{0}' が 'rootDir' '{1}' の下にありません。'rootDir' にすべてにソース ファイルが含まれている必要があります。", "File_0_not_found_6053": "ファイル '{0}' が見つかりません。", "File_Management_6245": "ファイルの管理", + "File_appears_to_be_binary_1490": "ファイルはバイナリのようです。", "File_change_detected_Starting_incremental_compilation_6032": "ファイルの変更が検出されました。インクリメンタル コンパイルを開始しています...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}' にはフィールド \"type\" がないため、ファイルは CommonJS モジュールです", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}' にフィールド \"type\" があり、値が \"module\" ではないため、ファイルは CommonJS モジュールです。", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "ファイルはプロジェクト参照ソース '{0}' の出力です", "File_is_source_from_referenced_project_specified_here_1416": "ファイルはこちらで指定された参照先プロジェクトのソースです。", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "ファイル名 '{0}' は、既に含まれているファイル名 '{1}' と大文字と小文字の指定だけが異なります。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "ファイル名 '{0}' の拡張子は '{1}' です。代わりに '{2}' を検索しています。", "File_name_0_has_a_1_extension_stripping_it_6132": "ファイル名 '{0}' に '{1}' 拡張子が使われています - 削除しています。", "File_redirects_to_file_0_1429": "ファイルはファイル '{0}' にリダイレクトされます", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "ファイルの指定で再帰ディレクトリのワイルドカード ('**') の後に親ディレクトリ ('..') を指定することはできません: '{0}'。", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "'await' が不足している可能性があるすべての式を修正する", "Fix_all_implicit_this_errors_95107": "すべての暗黙的な 'this' エラーを修正する", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "非同期関数の無効な戻り値の型をすべて修正します", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' ループは、クラスの静的ブロック内では使用できません。", + "Fix_all_with_type_only_imports_95182": "型のみのインポートを使用してすべてを修正する", "Found_0_errors_6217": "{0} 件のエラーが見つかりました。", "Found_0_errors_Watching_for_file_changes_6194": "{0} 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", "Found_0_errors_in_1_files_6261": "{1} ファイルに {0} 件のエラーが見つかりました。", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "同じファイル内に {0} 件のエラーが見つかりました。{1} から開始します", "Found_1_error_6216": "1 件のエラーが見つかりました。", "Found_1_error_Watching_for_file_changes_6193": "1 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", - "Found_1_error_in_1_6259": "{1} で 1 件のエラーが見つかりました", + "Found_1_error_in_0_6259": "{0} で 1 件のエラーが見つかりました", "Found_package_json_at_0_6099": "'{0}' で 'package.json' が見つかりました。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "'ES3' または 'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "'ES3' または 'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。クラス定義は自動的に厳格モードになります。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "'ES3' または 'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。モジュールは自動的に厳格モードになります。", + "Found_peerDependency_0_with_1_version_6282": "'{1}' バージョンの peerDependency '{0}' が見つかりました。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。クラス定義は自動的に厳格モードになります。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。モジュールは自動的に厳格モードになります。", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "戻り値の型の注釈がない関数式の戻り値の型は、暗黙的に '{0}' になります。", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "関数の実装がないか、宣言の直後に指定されていません。", "Function_implementation_name_must_be_0_2389": "関数の実装名は '{0}' でなければなりません。", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "関数は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "関数に終了の return ステートメントがないため、戻り値の型には 'undefined' が含まれません。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "関数には、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", "Function_not_implemented_95159": "関数が実装されていません。", "Function_overload_must_be_static_2387": "関数のオーバーロードは静的でなければなりません。", "Function_overload_must_not_be_static_2388": "関数のオーバーロードは静的にはできせん。", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "識別子が必要です。", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "識別子が必要です。'__esModule' は、ECMAScript モジュールを変換するときのエクスポート済みマーカーとして予約されています。", "Identifier_or_string_literal_expected_1478": "識別子または文字列リテラルが必要です。", + "Identifier_string_literal_or_number_literal_expected_1496": "識別子、文字列リテラル、または数値リテラルが必要です。", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' パッケージが実際にこのモジュールを公開する場合は、pull request を送信して 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' を修正することを検討してください", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' パッケージが実際にこのモジュールを公開する場合は、'declare module '{1}';' を含む新しい宣言 (d.ts) ファイルを追加してみてください。", "Ignore_this_error_message_90019": "このエラー メッセージを無視する", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "インターフェイス '{0}' を実装する", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "エクスポートされたクラス '{0}' の Implements 句がプライベート名 '{1}' を持っているか、使用しています。", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol ' から 'string' への暗黙の変換は、実行時に失敗します。この式を 'String(...)' でラップすることを検討してください。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "インポート '{0}' は、このファイルで使用されているグローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "インポート '{0}' は、グローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", "Import_0_from_1_90013": "\"{1}\" から `{0}` をインポートします。", "Import_assertion_values_must_be_string_literal_expressions_2837": "インポート アサーションの値は、文字列リテラル式である必要があります。", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "インポート アサーションは、commonjs 'require' 呼び出しに変換するステートメントでは許可されません。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "インポート アサーションは、'--module' オプションが 'esnext' または 'nodenext' に設定されている場合にのみサポートされます。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "インポート アサーションは、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "インポート アサーションは、'--module' オプションが 'esnext'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "インポート アサーションは、型のみのインポートまたはエクスポートでは使用できません。", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript モジュールを対象にする場合は、インポート代入を使用できません。代わりに 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' などのモジュール書式の使用をご検討ください。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "インポート 属性の値は、文字列リテラル式である必要があります。", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "インポート属性は、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "インポート属性は、'--module' オプションが 'esnext'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "インポート属性は、型のみのインポートまたはエクスポートでは使用できません。", "Import_declaration_0_is_using_private_name_1_4000": "インポート宣言 '{0}' がプライベート名 '{1}' を使用しています。", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "インポート宣言が、'{0}' のローカル宣言と競合しています。", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "名前空間内のインポート宣言は、モジュールを参照できません。", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "出力された JavaScript 内にソースマップ ファイルを含めます。", "Includes_imports_of_types_referenced_by_0_90054": "'{0}' によって参照される型のインポートを含む", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch を含めると、ファイルの変更について現在のプロジェクトの監視が開始されます。設定が完了すると、次の操作を使用してウォッチ モードを構成できます。", + "Incomplete_quantifier_Digit_expected_1505": "不完全な量指定子です。数値が必要です。", "Index_signature_for_type_0_is_missing_in_type_1_2329": "型 '{0}' is missing in type '{1}' のインデックス シグネチャがありません。", "Index_signature_in_type_0_only_permits_reading_2542": "型 '{0}' のインデックス シグネチャは、読み取りのみを許可します。", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "マージされた宣言 '{0}' の個々の宣言はすべてエクスポートされるか、すべてローカルであるかのどちらかである必要があります。", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "使用状況からパラメーターの型を推論する", "Infer_this_type_of_0_from_usage_95080": "使い方から '{0}' の 'this' 型を推論する", "Infer_type_of_0_from_usage_95011": "使用状況から '{0}' の型を推論する", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "クラス式からの推論は、--isolatedDeclarations ではサポートされていません。", "Initialize_property_0_in_the_constructor_90020": "コンストラクターのプロパティ '{0}' を初期化する", "Initialize_static_property_0_90021": "静的プロパティ '{0}' を初期化する", "Initializer_for_property_0_2811": "プロパティ ' {0} ' の初期化子。", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "インスタンス メンバー変数 '{0}' の初期化子はコンストラクターで宣言された識別子 '{1}' を参照できません。", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初期化子にこのバインド要素の値が提示されていません。またバインド要素に既定値がありません。", "Initializers_are_not_allowed_in_ambient_contexts_1039": "初期化子は環境コンテキストでは使用できません。", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript プロジェクトを初期化して、tsconfig.json ファイルを作成します。", + "Inline_variable_95184": "インライン変数", "Insert_command_line_options_and_files_from_a_file_6030": "コマンド ライン オプションとファイルをファイルから挿入します。", "Install_0_95014": "'{0}' のインストール", "Install_all_missing_types_packages_95033": "不足しているすべての型のパッケージをインストールします", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "拡張のモジュール名が無効です。モジュール '{0}' が見つかりません。", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新しい式の省略可能なチェーンが無効です。'{0}()' の呼び出しを意図していましたか?", "Invalid_reference_directive_syntax_1084": "無効な 'reference' ディレクティブ構文です。", + "Invalid_syntax_in_decorator_1498": "デコレーターの構文が無効です。", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' の使用が無効です。クラスの静的ブロック内では使用できません。", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' の使用方法が無効です。モジュールは自動的に厳格モードになります。", "Invalid_use_of_0_in_strict_mode_1100": "厳格モードでは '{0}' の使用は無効です。", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' の値が無効です。", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' の値が無効です。'{0}' が有効な識別子または修飾名ではありません。", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' の値が無効です。'{0}' は有効な識別子でも修飾名でもありません。", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' の値が無効です。'{0}' は有効な識別子ではありません。", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "その要素の型 '{0}' は有効な JSX 要素ではありません。", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "そのインスタンスの型 '{0}' は、有効な JSX 要素ではありません。", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "その戻り値の型 '{0}' は、有効な JSX 要素ではありません。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "その型 '{0}' は有効な JSX 要素ではありません。", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' が 'extends {2}' 句と一致しません。", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' はクラスにアタッチされていません。", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' は、シグネチャの最後のパラメーターにのみ使用できます。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' タグの名前は '{0}' ですが、その名前のパラメーターはありません。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' タグに名前 '{0}' が指定されていますが、その名前のパラメーターはありません。配列型があった場合は、'arguments' と一致したはずです。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef は TypeScript 型に変換できます。", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' タグには、型の注釈を指定するか、後に '@property' タグや '@member' タグを付ける必要があります。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef は TypeScript 型に変換できます。", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc の種類は、ドキュメント コメント内でのみ使用できます。", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc の種類は TypeScript の種類に移行される可能性があります。", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 属性は、空ではない '式' にのみ割り当てる必要があります。", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "含める型定義の元のフォルダーの一覧。", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "結合されたコンテンツがランタイムでのプロジェクトの構成を表すルート フォルダーの一覧。", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "ルート ディレクトリ '{1}' から '{0}' を読み込んでいます。候補の場所は '{2}' です。", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' フォルダーからモジュール '{0}' を読み込んでいます。対象のファイルの種類は '{1}' です。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "ファイル / フォルダーとしてモジュールを読み込んでいます。候補のモジュールの場所は '{0}'、対象のファイルの種類は '{1}' です。", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' フォルダーからモジュール '{0}' を読み込んでいます。対象のファイルの種類は {1} です。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "ファイル / フォルダーとしてモジュールを読み込んでいます。候補のモジュールの場所は '{0}'、対象のファイルの種類は {1} です。", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "ロケールは または - の形式で指定する必要があります (例: '{0}'、'{1}')。", "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' の処理中に使用されたログ パス。", "Longest_matching_prefix_for_0_is_1_6108": "'{0}' の一致する最長プレフィックスは '{1}' です。", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof により、文字列、数字、記号の代わりに、文字列のみが返されるようにします。レガシ オプションです。", "Make_super_call_the_first_statement_in_the_constructor_90002": "'super()' 呼び出しをコンストラクター内の最初のステートメントにする", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "マップされたオブジェクト型のテンプレートの型は暗黙的に 'any' になります。", + "Mark_array_literal_as_const_90070": "配列リテラルを const としてマークする", "Matched_0_condition_1_6403": "'{0}' 条件 '{1}' と一致しました。", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "既定で一致するインクルード パターン '**/*'", "Matched_by_include_pattern_0_in_1_1407": "'{1}' のインクルード パターン '{0}' に一致しています", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "メソッド '{0}' は abstract に指定されているため、実装を含めることができません。", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "エクスポートされたインターフェイスのメソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "エクスポートされたインターフェイスのメソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "メソッドには、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", "Method_not_implemented_95158": "メソッドが実装されていません。", "Modifiers_cannot_appear_here_1184": "ここで修飾子を使用することはできません。", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "モジュール '{0}' は、'{1}' フラグを使用して既定でのみインポートできます", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "モジュール '{0}' にはエクスポートされたメンバー '{1}' がありません。'import {1} from {0}' を使用するつもりでしたか?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "モジュール '{0}' は同じ名前のローカル宣言によって非表示になっています。", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "モジュール '{0}' には 'export =' が使用されているため、'export *' は併用できません。", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "このファイルが変更されなかったため、モジュール '{0}' は '{1}' で宣言されたアンビエント モジュールとして解決されました。", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "モジュール '{0}' は、ファイル '{1}' のローカルで宣言されたアンビエント モジュールとして解決されました。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "モジュール '{0}' は '{1}' に解決されましたが、'--allowArbitraryExtensions' が設定されていません。", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "モジュール '{0}' は '{1}' に解決されましたが、'--jsx' が設定されていません。", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "モジュール '{0}' は '{1}' に解決されましたが、'--resolveJsonModule' が使用されていません。", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "モジュール宣言名で使用できるのは、' または \"引用符で囲まれた文字列のみです。", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' を使用したモジュール解決が失敗しました。", "Modules_6244": "モジュール", "Move_labeled_tuple_element_modifiers_to_labels_95117": "ラベル付きのタプル要素の修飾子をラベルに移動する", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "既定のエクスポートで式を変数に移動し、それに型注釈を追加します。", "Move_to_a_new_file_95049": "新しいファイルへ移動します", + "Move_to_file_95178": "ファイルに移動", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "複数の連続した数値区切り記号を指定することはできません。", "Multiple_constructor_implementations_are_not_allowed_2392": "コンストラクターを複数実装することはできません。", "NEWLINE_6061": "改行", "Name_is_not_valid_95136": "名前が無効です", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "名前付きキャプチャ グループは、'ES2018' 以降をターゲットにする場合にのみ使用できます。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "同じ名前の名前の名前付きキャプチャ グループは、相互に排他的である必要があります。", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' 型および '{2}' 型の名前付きプロパティ '{0}' が一致しません。", "Namespace_0_has_no_exported_member_1_2694": "名前空間 '{0}' にエクスポートされたメンバー '{1}' がありません。", "Namespace_must_be_given_a_name_1437": "名前空間に名前を指定する必要があります。", "Namespace_name_cannot_be_0_2819": "名前空間名を '{0}' にすることはできません。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' が有効になっている場合、グローバル スクリプト ファイルでは名前空間を使用できません。このファイルがグローバル スクリプトを意図していない場合は、'moduleDetection' を 'force' に設定するか、空の 'export {}' ステートメントを追加してください。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "デコレーターも修飾子も 'this' パラメーターに適用できません。", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "指定した数の型引数を持つ基底コンストラクターは存在しません。", "No_constituent_of_type_0_is_callable_2755": "型 '{0}' の構成要素は呼び出し可能ではありません。", "No_constituent_of_type_0_is_constructable_2759": "型 '{0}' の構成要素はコンストラクト可能ではありません。", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "この呼び出しに一致するオーバーロードはありません。", "No_type_could_be_extracted_from_this_type_node_95134": "この型ノードからは型を抽出できませんでした", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "短縮形のプロパティ '{0}' のスコープには値がありません。値を宣言するか、または初期化子を指定してください。", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象クラス '{0}' はクラス '{2}' からの継承抽象メンバー '{1}' を実装しません。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象クラス '{0}' は、クラス '{2}' からの継承抽象メンバー '{1}' を実装しません。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2} およびその他 {3}。", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象クラスの式はクラス '{1}' からの継承抽象メンバー '{0}' を実装しません。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1} およびその他 {2}。", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "non-null アサーションは、TypeScript ファイルでのみ使用できます。", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "'baseUrl' が設定されていない場合、非相対パスは許可されません。先頭に './' が使用されていることをご確認ください。", "Non_simple_parameter_declared_here_1348": "ここでは複雑なパラメーターが宣言されています。", "Not_all_code_paths_return_a_value_7030": "一部のコード パスは値を返しません。", "Not_all_constituents_of_type_0_are_callable_2756": "型 '{0}' のすべての構成要素が呼び出し可能なわけではありません。", "Not_all_constituents_of_type_0_are_constructable_2760": "型 '{0}' のすべての構成要素がコンストラクト可能なわけではありません。", + "Numbers_out_of_order_in_quantifier_1506": "量指定子の数値が順不同です。", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絶対値が 2^53 以上の数値リテラルは大きすぎるため、整数として正確に表現できません。", "Numeric_separators_are_not_allowed_here_6188": "数値の区切り記号は、ここでは使用できません。", "Object_is_of_type_unknown_2571": "オブジェクト型は 'unknown' です。", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "オブジェクト リテラルは既知のプロパティのみ指定できます。'{0}' は型 '{1}' に存在しません。", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "オブジェクト リテラルで指定できるのは既知のプロパティのみですが、'{0}' は型 '{1}' に存在しません。書こうとしたのは '{2}' ですか?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "オブジェクト リテラルのプロパティ '{0}' の型は暗黙的に '{1}' になります。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "短縮形プロパティを含むオブジェクトは、--isolatedDeclarations では推論できません。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "スプレッド割り当てを含むオブジェクトを --isolatedDeclarations と共に推論することはできません。", "Octal_digit_expected_1178": "8 進の数字が必要です。", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "8 進数のリテラル型には、ES2015 構文を使用する必要があります。構文 '{0}' を使用してください。", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "8 進数のリテラルは、列挙型メンバーの初期化子では許可されていません。構文 '{0}' を使用してください。", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "厳格モードでは Octal リテラルは使用できません。", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "ECMAScript 5 以降を対象にする場合、8 進数のリテラルは使用できません。構文 '{0}' を使用してください。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "文字クラスでは、8 進数のエスケープ シーケンスと前方参照を使用することはできません。これがエスケープ シーケンスとして意図されていた場合は、代わりに構文 '{0}' を使用してください。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8 進数のエスケープ シーケンスは使用できません。構文 '{0}' を使用してください。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8 進数リテラルは使用できません。構文 '{0}' を使用してください。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' の 1 つの値は文字列 '{2}' で、もう一方の値は不明な数値であると見なされます。", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' ステートメントで使用できる変数宣言は 1 つのみです。", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' ステートメントで使用できる変数宣言は 1 つのみです。", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' キーワードを指定して呼び出せるのは void 関数のみです。", "Only_ambient_modules_can_use_quoted_names_1035": "引用符付きの名前を使用できるのはアンビエント モジュールのみです。", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} と共にサポートされるのは 'amd' モジュールと 'system' モジュールのみです。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "--isolatedDeclarations を使用して推論できるのは const 配列のみです。", "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 宣言ファイルのみを生成します。", - "Only_named_exports_may_use_export_type_1383": "名前付きエクスポートでのみ、'export type' を使用できます。", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "計算されたメンバーを使用できるのは数値列挙型のみですが、この式には '{0}' 型があります。網羅性チェックが不要な場合は、代わりにオブジェクト リテラルを使用することをご検討ください。", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "出力の d.ts ファイルのみで、JavaScript ファイルは対象ではありません。", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' キーワードを使用してアクセスできるのは、基底クラスのパブリック メソッドと保護されたメソッドのみです。", "Operator_0_cannot_be_applied_to_type_1_2736": "演算子 '{0}' は型 '{1}' に適用できません。", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "演算子 '{0}' を型 '{1}' および '{2}' に適用することはできません。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "演算子は文字クラス内で混在してはなりません。入れ子になったクラスでラップしてください。", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "編集時に複数プロジェクト参照のチェックからプロジェクトをオプトアウトします。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "オプション '{0}={1}' が削除されました。構成から削除してください。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "オプション '{0}={1}' は非推奨であり、TypeScript {2} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{3}\"' を指定して、このエラーを無音にします。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'false' または 'null' に設定することしかできません。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'null' に設定することしかできません。", + "Option_0_can_only_be_specified_on_command_line_6266": "オプション '{0}' はコマンド ラインでのみ指定できます。", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "オプション '{0} を使用できるのは、オプション '--inlineSourceMap' またはオプション '--sourceMap' のいずれかを指定した場合のみです。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "オプション '{0}' は、'moduleResolution' が 'node16'、'nodenext'、または 'bundler' に設定されている場合にのみ使用できます。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "オプション '{0}' は、'module' が 'preserve' または 'es2015' 以降に設定されている場合にのみ使用できます。", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "オプション 'jsx' が '{1}' の場合、オプション '{0}' を指定することはできません。", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "オプション 'target' が 'ES3' の場合、オプション '{0}' を指定することはできません。", "Option_0_cannot_be_specified_with_option_1_5053": "オプション '{0}' をオプション '{1}' とともに指定することはできません。", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "オプション '{1}' を指定せずに、オプション '{0}' を指定することはできません。", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "オプション '{1}' またはオプション '{2}' を指定せずに、オプション '{0}' を指定することはできません。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "オプション '{0}' が削除されました。構成から削除してください。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "オプション '{0}' は非推奨であり、TypeScript {1} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{2}\"' を指定して、このエラーを無音にします。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "オプション '{0}' は冗長であり、オプション '{1}' とともに指定することができません。", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "オプション 'allowImportingTsExtensions' は、'noEmit' または 'emitDeclarationOnly' が設定されている場合にのみ使用できます。", "Option_build_must_be_the_first_command_line_argument_6369": "オプション '--build' は最初のコマンド ライン引数である必要があります。", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "オプション '--incremental' は、tsconfig を使用して指定して単一ファイルに出力するか、オプション '--tsBuildInfoFile' が指定された場合にのみ指定することができます。", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "オプション 'isolatedModules' は、オプション '--module' が指定されているか、オプション 'target' が 'ES2015' 以上であるかのいずれかの場合でのみ使用できます。", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules' が有効になっているときは、オプション 'preserveConstEnums' を無効にできません。", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "オプションの \"preserveValueImports\" は \"module\" が \"es2015\" か、またはそれ以降に設定されている時のみ、使用することができます。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "オプション 'module' が '{1}' に設定されている場合は、オプション 'moduleResolution' を '{0}' (または未指定のままに) に設定する必要があります。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "オプション 'moduleResolution' が '{1}' に設定されている場合は、オプション 'module' を '{0}' に設定する必要があります。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' が有効になっている場合、オプション 'preserveConstEnums' を無効にすることはできません。", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "オプション 'project' をコマンド ライン上でソース ファイルと一緒に指定することはできません。", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "オプション '--resolveJsonModule' は、モジュール コードの生成が 'commonjs'、'amd'、'es2015'、'esNext' である場合にのみ指定できます。", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' モジュールの解決方法を使用せずにオプション '--resolveJsonModule' を指定することはできません。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' が 'classic' に設定されている場合、オプション '--resolveJsonModule' を指定できません。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' が 'none'、'system'、または 'umd' に設定されている場合、オプション '--resolveJsonModule' を指定することはできません。", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "オプション 'tsBuildInfoFile' は、オプション 'incremental' または 'composite' を指定せずに、または 'tsc -b' を実行していない場合は指定できません。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' が 'UMD'、'AMD'、または 'System' に設定されている場合、オプション 'verbatimModuleSyntax' は使用できません。", "Options_0_and_1_cannot_be_combined_6370": "オプション '{0}' と '{1}' を組み合わせることはできません。", "Options_Colon_6027": "オプション:", "Output_Formatting_6256": "出力データ形式", "Output_compiler_performance_information_after_building_6615": "ビルド後にコンパイラのパフォーマンス情報を出力します。", "Output_directory_for_generated_declaration_files_6166": "生成された宣言ファイルの出力ディレクトリ。", - "Output_file_0_from_project_1_does_not_exist_6309": "プロジェクト '{1}' からの出力ファイル '{0}' がありません", "Output_file_0_has_not_been_built_from_source_file_1_6305": "出力ファイル '{0}' はソース ファイル '{1}' からビルドされていません。", "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' が指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "パラメーター宣言が必要です。", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "パラメーターに名前はありますが、型がありません。'{0}: {1}' を意図していましたか?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "パラメーター修飾子は TypeScript ファイルでのみ使用できます。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "パラメーターには、--isolatedDeclarations を含む明示的な型注釈が必要です。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "コンパイル後に生成されたファイルの名前を出力します。", "Print_this_message_6017": "このメッセージを表示します。", "Private_accessor_was_defined_without_a_getter_2806": "ゲッターなしでプライベート アクセサーが定義されました。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "プライベート フィールド '{0}' は、エンクロージング クラスで宣言する必要があります。", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "変数宣言では、private 識別子は許可されていません。", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "private 識別子は、クラス本体の外では許可されていません。", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "プライベート識別子はクラス本体でのみ許可され、クラス メンバー宣言、プロパティ アクセス、または 'in' 式の左側でのみ使用できます", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "private 識別子は ECMAScript 2015 以上をターゲットにする場合にのみ使用できます。", "Private_identifiers_cannot_be_used_as_parameters_18009": "private 識別子はパラメーターとして使用できません。", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "private または protected メンバー '{0}' には、型パラメーターではアクセスできません。", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "プロジェクト '{0}' はその依存関係 '{1}' にエラーがあるためビルドできません", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' はビルドできません", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "プロジェクト '{0}' が強制的にリビルドされています", + "Project_0_is_out_of_date_because_1_6420": "{1}のため、プロジェクト '{0}' は古くなっています。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "buildinfo ファイル '{1}' は、ファイル '{2}' がコンパイルのルート ファイルでしたが、それ以上はないことを示しているため、プロジェクト '{0}' は最新ではありません。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "buildinfo ファイル '{1}' はプログラムがエラーを報告する必要があることを示しているため、プロジェクト '{0}' は最新ではありません。", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo ファイルの '{1}' により、一部の変更が生成されなかったことが示されているため、プロジェクトの '{0}' は最新ではありません", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "buildinfo ファイル '{1}' は compilerOptions に変更があることを示しているため、プロジェクト '{0}' は最新ではありません", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "プロジェクト '{0}' はその依存関係 '{1}' が古いため最新の状態ではありません", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "プロジェクト '{0}' は出力 '{1}' が入力 '{2}' より古いため最新の状態ではありません", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "プロジェクト '{0}' は出力ファイル '{1}' が存在しないため最新の状態ではありません", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "プロジェクト '{0}' の出力が現在のバージョン '{2}' と異なるバージョン '{1}' で生成されているため、このプロジェクトは最新の状態ではありません", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "依存関係 '{1}' の出力が変更されているため、プロジェクト '{0}' は最新の状態ではありません", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "ファイル '{1}' の読み取り中にエラーが発生したため、プロジェクト '{0}' は最新ではありません", "Project_0_is_up_to_date_6361": "プロジェクト '{0}' は最新の状態です", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "プロジェクト '{0}' は最新の入力 '{1}' が出力 '{2}' より古いため最新の状態です", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "プロパティ '{0}' が初期化前に使用されています。", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "プロパティ '{0}' は型 '{1}' に存在していない可能性があります。'{2}' ですか?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX のスプレッド属性のプロパティ '{0}' をターゲット プロパティに割り当てることはできません。", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "エクスポートされたクラスの式のプロパティ '{0}' が private または protected でない可能性があります。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "エクスポートされた匿名クラス型のプロパティ '{0}' は、プライベートでないか保護されていない可能性があります。", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "型 '{1}' のプロパティ '{0}' は'{2}' インデックス型 '{3}' に割り当てることはできません。", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "プロパティ '{0}' は、'{1}' の基底プロパティを上書きします。これが意図的である場合は初期化子を追加してください。そうでなければ、'declare' 修飾子を追加するか、冗長な宣言を削除してください。", "Property_assignment_expected_1136": "プロパティの代入が必要です。", "Property_destructuring_pattern_expected_1180": "プロパティの非構造化パターンが必要です。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "プロパティには、--isolatedDeclarations を含む明示的な型注釈が必要です。", "Property_or_signature_expected_1131": "プロパティまたはシグネチャが必要です。", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "プロパティ値には、文字列リテラル、数値リテラル、'true'、'false'、'null'、オブジェクト リテラルまたは配列リテラルのみ使用できます。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "'for-of' の iterable、spread、'ES5' や 'ES3' をターゲットとする場合は destructuring に対してフル サポートを提供します。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'for-of'、spread、destructuring で 'ES5' を対象とする場合は、iterables を完全にサポートします。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "エクスポートされたクラスのパブリック メソッド '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "エクスポートされたクラスのパブリック メソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "エクスポートされたクラスのパブリック メソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "関数パラメーターが読み取られていないときに、エラーを発生させます。", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "暗黙的な 'any' 型を含む式と宣言に関するエラーを発生させます。", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "暗黙的な 'any' 型を持つ 'this' 式でエラーが発生します。", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--IsolatedModules' フラグが指定されている場合に型を再エクスポートするには、 'export type' を使用する必要があります。", + "Range_out_of_order_in_character_class_1517": "文字クラスの順序が正しくありません。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' が有効な場合に型を再エクスポートするには、'export type' を使用する必要があります。", + "React_components_cannot_include_JSX_namespace_names_2639": "React コンポーネントに JSX 名前空間名を含めることはできません", "Redirect_output_structure_to_the_directory_6006": "ディレクトリへ出力構造をリダイレクトします。", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript によって自動的に読み込まれるプロジェクトの数を減らします。", "Referenced_project_0_may_not_disable_emit_6310": "参照されたプロジェクト '{0}' は、生成を無効にできません。", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "参照されているプロジェクト '{0}' には、設定 \"composite\": true が必要です。", "Referenced_via_0_from_file_1_1400": "ファイル '{1}' から '{0}' を介して参照されています", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' の場合、EcmaScript インポートに明示的なファイル拡張子が必要です。インポート パスに拡張機能を追加することを検討してください。", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' の場合、EcmaScript インポートに明示的なファイル拡張子が必要です。'{0}' ということですか?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。インポート パスに拡張機能を追加することを検討してください。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。'{0}' を意図していましたか?", "Remove_a_list_of_directories_from_the_watch_process_6628": "ウォッチ プロセスからディレクトリの一覧を削除します。", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "ウォッチ モードの処理からファイルの一覧を削除します。", "Remove_all_unnecessary_override_modifiers_95163": "不要な 'override' 修飾子をすべて削除", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": ".js ファイルのエラーを報告します。", "Report_errors_on_unused_locals_6134": "使用されていないローカルに関するエラーを報告します。", "Report_errors_on_unused_parameters_6135": "使用されていないパラメーターに関するエラーを報告します。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "他のツールが宣言ファイルを簡単に生成できるように、エクスポートに十分な注釈を必要とします。", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要素アクセスを使用するには、インデックス シグネチャからの宣言されていないプロパティが必要です。", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必須の型パラメーターの後に、オプションの型パラメーターを続けることはできません。", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "モジュール '{0}' の解決が場所 '{1}' のキャッシュに見つかりました。", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "種類参照指令 '{0}' の解決策は、場所 '{1}' のキャッシュには見つかりませんでした。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "非相対名の解決に失敗しました。npm ライブラリで構成の更新が必要かどうかを確認するために、最新のノード解決機能を無効にしています。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "非相対名の解決に失敗しました。'--moduleResolution bundler' を使用して、プロジェクトで構成の更新が必要かどうかを確認しています。", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'keyof' を文字列値のプロパティ名のみに解決します (数字または記号なし)。", + "Resolved_under_condition_0_6414": "条件 '{0}' で解決されました。", "Resolving_in_0_mode_with_conditions_1_6402": "条件 {1} を使用して {0} モードで解決しています。", "Resolving_module_0_from_1_6086": "======== '{1}' からモジュール '{0}' を解決しています。========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "ベース URL '{1}' - '{2}' に相対するモジュール名 '{0}' を解決しています。", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリは未設定。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリ '{1}'。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリは未設定。========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "カスタム typeRoots を指定するプログラムの型参照ディレクティブを解決しています。'node_modules' フォルダーでの参照をスキップします。", "Resolving_with_primary_search_path_0_6121": "プライマリ検索パス '{0}' で解決しています。", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest パラメーター '{0}' の型は暗黙的に 'any[]' になります。", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "rest パラメーター '{0}' の型は暗黙的に 'any[]' 型ですが、使い方からより良い型を推論する場合があります。", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。", "Rewrite_all_as_indexed_access_types_95034": "すべてをインデックス付きアクセス型として書き換えます", "Rewrite_as_the_indexed_access_type_0_90026": "インデックス付きのアクセスの種類 '{0}' として書き換える", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? の右オペランド左オペランドが NULL 値になることがないため、到達できません。", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "ルート ディレクトリを決定できません。プライマリ検索パスをスキップします。", "Root_file_specified_for_compilation_1427": "コンパイル用に指定されたルート ファイル", "STRATEGY_6039": "戦略", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "プロジェクトのインクリメンタル コンパイルを可能にするには、.tsbuildinfo ファイルを保存します。", "Saw_non_matching_condition_0_6405": "一致しない条件 '{0}' がありました。", "Scoped_package_detected_looking_in_0_6182": "'{0}' 内を検索して、スコープ パッケージが検出されました", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "すべての先祖 node_modules ディレクトリでフォールバック拡張子を検索しています: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "すべての先祖 node_modules ディレクトリで優先する拡張子を検索しています: {0}。", "Selection_is_not_a_valid_statement_or_statements_95155": "選択内容は有効なステートメントではありません", "Selection_is_not_a_valid_type_node_95133": "選択は有効な型ノードではありません", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "生成された JavaScript の JavaScript 言語バージョンを設定し、互換性のあるライブラリ宣言を含めます。", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "詳細な診断情報を表示します。", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "ビルドされる (または '--clean' で指定される場合は、削除される) 内容を表示する", "Signature_0_must_be_a_type_predicate_1224": "シグネチャ '{0}' は型の述語である必要があります。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "署名宣言は TypeScript ファイルでのみ使用できます。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "アップストリーム プロジェクトのエラー時にダウンストリーム プロジェクトのビルドをスキップします。", "Skip_type_checking_all_d_ts_files_6693": "すべての .d.ts ファイルについて型チェックをスキップします。", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript に含まれている .d.ts ファイルの型チェックをスキップします。", "Skip_type_checking_of_declaration_files_6012": "宣言ファイルの型チェックをスキップします。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "プロジェクト '{0}' のビルドは、その依存関係 '{1}' にエラーがあるため、スキップしています", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' のビルドをスキップしています", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "絶対 URI のように見えるモジュール '{0}' をスキップしています。ターゲット ファイルの種類: {1}。", "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' が指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", "Source_has_0_element_s_but_target_allows_only_1_2619": "ソースには {0} 個の要素がありますが、ターゲットで使用できるのは {1} 個のみです。", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript ウォッチ モードの動作方法を指定します。", "Specify_library_files_to_be_included_in_the_compilation_6079": "コンパイルに含めるライブラリ ファイルを指定します。", "Specify_module_code_generation_6016": "モジュール コードの生成を指定します。", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "モジュールの解決方法を指定します: 'node' (Node.js) または 'classic' (TypeScript pre-1.6)。", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' を使用するときに JSX ファクトリ関数のインポートに使用するモジュール指定子を指定します。", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' のように動作する複数のフォルダーを指定します。", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "設定の継承元となる基本構成ファイルへのパスまたはノード モジュール参照を 1 つまたは複数指定します。", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "静的メンバーはクラスの型パラメーターを参照できません。", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静的プロパティ '{0}' がコンストラクター関数 '{1}' のビルトイン プロパティ 'Function.{0}' と競合しています。", "String_literal_expected_1141": "文字列リテラルが必要です。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' フラグが 'es2015' または 'es2020' に設定されている場合、文字列リテラルのインポートおよびエクスポート名はサポートされません。", "String_literal_with_double_quotes_expected_1327": "二重引用符を含む文字列リテラルが必要です。", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "色とコンテキストを使用してエラーとメッセージにスタイルを適用します (試験的)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "マイナス記号がある場合は、サブパターン フラグが存在する必要があります。", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後続のプロパティ宣言は同じ型でなければなりません。プロパティ '{0}' の型は '{1}' である必要がありますが、ここでは型が '{2}' になっています。", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後続の変数宣言は同じ型でなければなりません。変数 '{0}' の型は '{1}' である必要がありますが、'{2}' になっています。", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "パターン '{1}' の代入 '{0}' の型が正しくありません。必要な型は 'string' ですが、'{2}' を取得しました。", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "タグ付きテンプレート式は、省略可能なチェーンでは許可されていません。", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "ターゲットには {0} 個の要素のみを使用できますが、ソースにはそれより多くを指定できます。", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "ターゲットには {0} 個の要素が必要ですが、ソースに指定する数はそれより少なくても構いません。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "ターゲット署名の引数が少なすぎます。{0} 以上が必要ですが、{1} でした。", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾子は TypeScript ファイルでのみ使用できます。", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 演算子を 'symbol' 型に適用することはできません。", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 演算子はブール型には使用できません。代わりに '{1}' を使用してください。", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同期反復子の '{0}' プロパティはメソッドである必要があります。", "The_0_property_of_an_iterator_must_be_a_method_2767": "反復子の '{0}' プロパティはメソッドである必要があります。", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 型を割り当てることができるその他の型はごく少数です。代わりの候補には 'any' 型があります。", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "'arguments' オブジェクトは、ES3 および ES5 のアロー関数で参照することはできません。標準の関数式の使用を考慮してください。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "'arguments' オブジェクトは、ES3 および ES5 の非同期関数またはメソッドで参照することはできません。標準の関数またはメソッドを使用することを検討してください。", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) フラグと Unicode Sets (v) フラグを同時に設定することはできません。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' オブジェクトは、ES5 のアロー関数で参照することはできません。標準の関数式の使用を考慮してください。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' オブジェクトは、ES5 の非同期関数またはメソッドで参照することはできません。標準の関数またはメソッドを使用することを検討してください。", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' ステートメントの本文を空のステートメントにすることはできません。", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "呼び出しはこの実装に対して成功した可能性がありますが、オーバーロードの実装シグネチャは外部からは参照できません。", "The_character_set_of_the_input_files_6163": "入力ファイルの文字セット。", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' の推論された型は、循環構造を持つ型を参照しています。この型のシリアル化は自明ではありません。型の注釈が必要です。", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' の推定型はアクセス不可能な '{1}' 型を参照します。型の注釈が必要です。", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "このノードの推定型は、コンパイラがシリアル化する最大長を超えています。明示的な型の注釈が必要です。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣言の初期化子は、'[Symbol.dispose]()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣言の初期化子は、'[Symbol.asyncDispose]()' または '[Symbol.dispose]5D;()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "交差 '{0}' は 'なし' に縮小されました。プロパティ '{1}' が複数の構成要素に存在し、一部ではプライベートであるためです。", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "交差 '{0}' は 'なし' に縮小されました。一部の構成要素でプロパティ '{1}' の型が競合しているためです。", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'組み込み' キーワードは、コンパイラが提供する組み込み型を宣言する場合にのみ使用できます。", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "前回のオーバーロードにより、次のエラーが発生しました。", "The_last_overload_is_declared_here_2771": "前回のオーバーロードはここで宣言されています。", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' ステートメントの左側を非構造化パターンにすることはできません。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ステートメントの左側を 'using' 宣言にすることはできません。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ステートメントの左側を 'await using' 宣言にすることはできません。", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' ステートメントの左側で型の注釈を使用することはできません。", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術演算の左辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "代入式の左辺には、省略可能なプロパティ アクセスを指定できません。", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "代入式の左側は、変数またはプロパティ アクセスである必要があります。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 式の左側は、右側の '[Symbol.hasInstance]' メソッドの最初の引数に割り当て可能である必要があります。", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 式の左辺には、'any' 型、オブジェクト型、または型パラメーターを指定してください。", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "ユーザーにメッセージを表示するときに使用するロケール (例: 'en-us')", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules の下を検索して JavaScript ファイルを読み込む依存関係の最大深度です。", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "プロジェクト ルートはあいまいですが、ファイル '{1}' のエクスポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "プロジェクト ルートはあいまいですが、ファイル '{1}' のインポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "同じスペルの別の private 識別子によってシャドウされているため、このクラス内の型 '{1}' ではプロパティ '{0}' にアクセスできません。", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' アクセサーの戻り値の型は、その 'set' アクセサーの型に割り当て可能である必要があります", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "パラメーター デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "プロパティ デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同期関数の戻り値の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。'Promise<{0}>' と書き込むつもりでしたか?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' ステートメントの右側には、'any' 型、オブジェクト型、型パラメーターを指定する必要がありますが、ここでは型 '{0}' が指定されています。", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術演算の右辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "instanceof' 式の右辺には、'any' 型、または 'Function' インターフェイス型に割り当てることができる型を指定してください。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 式の右側には、型 'any'、クラス、関数、または 'Function' インターフェイス型に割り当て可能なその他の型、または 'Symbol.hasInstance' メソッドを持つオブジェクト型のいずれかを指定する必要があります。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 式の右側をインスタンス化式にすることはできません。", "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' ファイルのルート値はオブジェクトである必要があります。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには {0} が必要です。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには少なくとも {0} が必要です。", "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' のシャドウ宣言はここで定義されています", "The_signature_0_of_1_is_deprecated_6387": "'{1}' のシグネチャ '{0}' は非推奨です。", "The_specified_path_does_not_exist_Colon_0_5058": "指定されたパスがありません: '{0}'。", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "名前付きエクスポートで、export ステートメントに 'export type' が使用されている場合、'type' 修飾子は使用できません。", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "名前付きインポートで、import ステートメントに 'import type' が使用されている場合、'type' 修飾子は使用できません。", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "関数の宣言の型は、関数のシグネチャと一致する必要があります。", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "この式の型には、不安定な機能である 'resolution-mode' アサーションなしで名前を付けることはできません。ナイトリー TypeScript を使用して、このエラーをサイレントにします。'npm install -D typescript@next' を使用して更新してみてください。", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "このノードの種類は、そのプロパティ '{0}' をシリアル化できないため、シリアル化できません。", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同期反復子の '{0}()' メソッドによって返される型は、'value' プロパティを持つ型に対する promise である必要があります。", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "反復子の '{0}()' メソッドによって返される型には 'value' プロパティが必要です。", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' ステートメントの変数宣言に初期化子を指定することはできません。", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' ステートメントの変数宣言に初期化子を指定することはできません。", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ステートメントはサポートされていません。'with' ブロック内のすべてのシンボルの型は 'any' になります。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' に型がありますが、現在の 'moduleResolution' 設定ではこの結果を解決できませんでした。'node16'、'nodenext'、または 'bundler' への更新を検討してください。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' に型がありますが、package.json \"exports\" を尊重しながらこの結果を解決できませんでした。'{1}' ライブラリの package.json または入力を更新する必要がある場合があります。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "この正規表現には '{0}' という名前のキャプチャ グループはありません。", + "There_is_nothing_available_for_repetition_1507": "繰り返しに使用できるものがありません。", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "この JSX タグの '{0}' prop は型 '{1}' の単一の子を予期しますが、複数の子が指定されました。", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "この JSX タグの '{0}' prop は複数の子を必要とする型 '{1}' を予期しますが、単一の子が指定されました。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "この前方参照は、存在しないグループを参照しています。この正規表現にはキャプチャ グループがありません。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "この前方参照は、存在しないグループを参照しています。この正規表現には {0} キャプチャ グループのみがあります。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "このバイナリ式が NULL 値になることはありません。かっこを忘れていませんか?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "この文字を正規表現内でエスケープすることはできません。", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' 型と '{1}' 型が重複していないため、この比較は意図したとおりに表示されない可能性があります。", "This_condition_will_always_return_0_2845": "この条件は常に '{0}' を返します。", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript が値ではなく参照でオブジェクトを比較するため、この条件は常に '{0}' を返します。", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "'{0}' が常に定義されているため、この条件は常に true を返します。", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "この関数は常に定義されているため、この条件は常に true を返します。代わりにこれを呼び出すことを意図していましたか?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "このコンストラクター関数はクラス宣言に変換される可能性があります。", + "This_expression_is_always_nullish_2871": "この式は常に null です。", "This_expression_is_not_callable_2349": "この式は呼び出し可能ではありません。", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "この式は 'get' アクセサーであるため、呼び出すことができません。'()' なしで使用しますか?", "This_expression_is_not_constructable_2351": "この式はコンストラクト可能ではありません。", "This_file_already_has_a_default_export_95130": "このファイルには、既に既定のエクスポートがあります", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "このインポートは値として使用されることはありません。'importsNotUsedAsValues' が 'error' に設定されているため、'import type' を使用する必要があります。", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "これは拡張される宣言です。拡張する側の宣言を同じファイルに移動することを検討してください。", + "This_kind_of_expression_is_always_falsy_2873": "この種の式は常に false です。", + "This_kind_of_expression_is_always_truthy_2872": "この種の式は常に true です。", "This_may_be_converted_to_an_async_function_80006": "これは非同期関数に変換できます。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに '@override' タグを含む JSDoc コメントを指定することはできません。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに 'override' タグを含む JSDoc コメントを指定することはできません。'{1}' ということですか?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "このメンバーは、基底クラス '{0}' で宣言された抽象メソッドをオーバーライドするため、'override' 修飾子を指定する必要があります。", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "このモジュールは、'{0}' フラグをオンにして既定のエクスポートを参照することにより、ECMAScript のインポートまたはエクスポートのみを使用して参照できます。", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "このモジュールは、'export =' を使用して宣言されており、'{0}' フラグを使用する場合は既定のインポートでのみ使用できます。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "この操作は簡略化できます。このシフトは '{0} {1} {2}' と同じです。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "このオーバーロードは、戻り値の型の注釈がないため、型 '{0}' を暗黙的に返します。", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "このオーバーロード シグネチャには、実装シグネチャとの互換性はありません。", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "このパラメーターは、'use strict' ディレクティブと共に使用することはできません。", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "このパラメーター プロパティには、基底クラス '{0}' のメンバーをオーバーライドするため、'@override' タグを含む JSDoc コメントが必要です。", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、パラメーター プロパティに 'override' 修飾子がある必要があります。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "この正規表現フラグをサブパターン内で切り替えることはできません。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "この正規表現フラグは、'{0}' 以降をターゲットにする場合にのみ使用できます。", "This_spread_always_overwrites_this_property_2785": "このスプレッドは、常にこのプロパティを上書きします。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "この構文は、拡張子が .mts または .cts のファイルで予約されています。末尾のコンマまたは明示的な制約を追加します。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "この構文は、拡張子が .mts または .cts のファイルで予約されています。代わりに `as` 式を使用してください。", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、フィールド '\"type\": \"module\"' を '{1}' に追加します。", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "このファイルを ECMAScript モジュールに変換するには、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "トップレベルの 'await' 式は、'module' オプションが 'es2022'、'esnext'、'system'、'node16' または 'nodenext' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ使用できます。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "トップレベルの 'await' 式は、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "トップレベルの 'await using' ステートメントは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts ファイルのトップレベルの宣言は、'declare' または 'export' 修飾子で始める必要があります。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "トップレベルの 'for await' ループは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、または 'nodenext' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ使用できます。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "トップレベルの 'for await' ループは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", "Trailing_comma_not_allowed_1009": "末尾にコンマは使用できません。", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "個々のモジュールとして各ファイルをトランスパイルします ('ts.transpileModule' に類似)。", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "存在する場合は `npm i --save-dev @types/{1}` を試すか、`declare module '{0}';` を含む新しい宣言 (.d.ts) ファイルを追加します", "Trying_other_entries_in_rootDirs_6110": "'rootDirs' の他のエントリを試しています。", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "代入 '{0}' を試しています。候補のモジュールの場所: '{1}'。", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "タプル メンバーのすべての名前が指定されているか、すべての名前が指定されていないかのどちらかでなければなりません。", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長さ '{1}' のタプル型 '{0}' にインデックス '{2}' の要素がありません。", "Tuple_type_arguments_circularly_reference_themselves_4110": "タプル型の引数は、それ自体を循環参照します。", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' の種類は、'--downlevelIteration' フラグを使用している場合、または 'es2015' 以降の '--target' を使用している場合にのみ反復処理できます。", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "型 '{0}' には型 '{1}' と一致するインデックス シグネチャがありません。", "Type_0_has_no_properties_in_common_with_type_1_2559": "型 '{0}' には型 '{1}' と共通のプロパティがありません。", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "型 '{0}' には、型引数リストを適用できるシグネチャがありません。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "型 '{0}' は汎用であり、読み取り専用にしかインデックスを作成できません。", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}、{3} など。", "Type_0_is_not_a_constructor_function_type_2507": "型 '{0}' はコンストラクター関数型ではありません。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "型 '{0}' は Promise と互換性のあるコンストラクター値を参照しないため、ES5/ES3 において有効な非同期関数の戻り値の型ではありません。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "型 '{0}' は Promise と互換性のあるコンストラクター値を参照しないため、ES5 において有効な非同期関数の戻り値の型ではありません。", "Type_0_is_not_an_array_type_2461": "型 '{0}' は配列型ではありません。", "Type_0_is_not_an_array_type_or_a_string_type_2495": "型 '{0}' は配列型でも文字列型でもありません。", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "型 '{0}' は、配列型でも文字列型でもないか、反復子を返す '[Symbol.iterator]()' メソッドを持っていません。", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "型 '{0}' を型 '{1}' に割り当てることはできません。'{2}' でよろしいですか?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "型 '{0}' は型 '{1}' に割り当てられません。同じ名前で 2 つの異なる型が存在しますが、これは関連していません。", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "型 '{0}' は、差異注釈によって暗黙的に示されているように、型 '{1}' に割り当てできません。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "型 '{0}' は、計算された列挙型メンバーの要求どおりに型 '{1}' に割り当てることはできません。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットの型に 'undefined' を追加することを検討してください。", "Type_0_is_not_comparable_to_type_1_2678": "型 '{0}' は型 '{1}' と比較できません。", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "型引数が必要です。", "Type_argument_list_cannot_be_empty_1099": "型引数リストを空にすることはできません。", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "型引数は TypeScript ファイルでのみ使用できます。", - "Type_arguments_cannot_be_used_here_1342": "ここで型引数は使用できません。", "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' の型引数はそれ自体を循環参照します。", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "型アサーション式は TypeScript ファイルでのみ使用できます。", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "ソースの位置 {0} にある型は、ターゲットの位置 {1} にある型と互換性がありません。", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "ソースの位置 {0} から {1} にある型は、ターゲットの位置 {2} にある型と互換性がありません。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "プライベート名 '{0}' を含む型は、--isolatedDeclarations と一緒には使用できません。", "Type_declaration_files_to_be_included_in_compilation_6124": "コンパイルに含む型宣言ファイル。", "Type_expected_1110": "型が必要です。", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "型インポート アサーションには、キー `resolution-mode` が 1 つだけ必要です。値は `import` または `require` です。", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "型インポート属性には、キー 'resolution-mode' が 1 つだけ必要です。値は 'import' または 'require' です。", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "型のインスタンス化は非常に深く、無限である可能性があります。", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "型は、それ自身の 'then' メソッドのフルフィルメント コールバック内で直接または間接的に参照されます。", "Type_library_referenced_via_0_from_file_1_1402": "ファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "式として呼び出される場合、メソッド デコレーターのシグネチャを解決できません。", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "式として呼び出される場合、パラメーター デコレーターのシグネチャを解決できません。", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "式として呼び出される場合、プロパティ デコレーターのシグネチャを解決できません。", + "Undetermined_character_escape_1513": "文字エスケープが不明です。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "予期しない '{0}' です。バックスラッシュを使用してエスケープするつもりでしたか?", "Unexpected_end_of_text_1126": "予期しないテキストの末尾です。", "Unexpected_keyword_or_identifier_1434": "予期しないキーワードまたは識別子です。", "Unexpected_token_1012": "予期しないトークンです。", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "予期しないトークンです。`{'>'}` または `>` を意図していましたか?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "予期しないトークンです。`{'}'}` または `}` を意図していましたか?", "Unexpected_token_expected_1179": "予期しないトークンです。'{' が必要です。", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode エスケープ シーケンスはここでは使用できません。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode エスケープ シーケンスは、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode プロパティ値式は、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Unknown_Unicode_property_name_1524": "Unicode プロパティ名が不明です。", + "Unknown_Unicode_property_name_or_value_1529": "Unicode プロパティ名または値が不明です。", + "Unknown_Unicode_property_value_1526": "Unicode プロパティ値が不明です。", "Unknown_build_option_0_5072": "'{0}' は不明なビルド オプションです。", "Unknown_build_option_0_Did_you_mean_1_5077": "'{0}' は不明なビルド オプションです。'{1}' を意図していましたか?", "Unknown_compiler_option_0_5023": "コンパイラ オプション '{0}' が不明です。", "Unknown_compiler_option_0_Did_you_mean_1_5025": "'{0}' は不明なコンパイラ オプションです。'{1}' を意図していましたか?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "不明なキーワードまたは識別子。'{0}' を意味していましたか?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "不明なオプション 'excludes' です。'exclude' ですか?", + "Unknown_regular_expression_flag_1499": "正規表現フラグが不明です。", "Unknown_type_acquisition_option_0_17010": "不明な型の取得オプション '{0}'。", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "'{0}' は不明な型の取得オプションです。'{1}' を意図していましたか?", "Unknown_watch_option_0_5078": "'{0}' は不明な監視オプションです。", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "未使用のラベル。", "Unused_ts_expect_error_directive_2578": "'@ts-expect-error' ディレクティブが使用されていません。", "Update_import_from_0_90058": "\"{0}\" からのインポートの更新", - "Updating_output_of_project_0_6373": "プロジェクト '{0}' の出力を更新しています...", + "Update_modifiers_of_0_90061": "'{0}' の修飾子を更新してください", "Updating_output_timestamps_of_project_0_6359": "プロジェクト '{0}' の出力タイムスタンプを更新しています...", "Updating_unchanged_output_timestamps_of_project_0_6371": "プロジェクト '{0}' の変更されていない出力タイムスタンプを更新しています...", "Use_0_95174": "\"{0}\" を使用します。", + "Use_0_instead_5106": "代わりに '{0}' を使用してください。", "Use_Number_isNaN_in_all_conditions_95175": "すべての条件で 'Number.isNaN' を使用します。", "Use_element_access_for_0_95145": "'{0}' に要素アクセスを使用する", "Use_element_access_for_all_undeclared_properties_95146": "宣言されていないすべてのプロパティに対して要素アクセスを使用します。", + "Use_import_type_95180": "'import type' を使用してください", "Use_synthetic_default_member_95016": "合成 'default' メンバーを使用します。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "パッケージのインポートを解決する場合、package.json の 'exports' フィールドを使用してください。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "インポートを解決するときに、package.json の 'imports' フィールドを使用してください。", + "Use_type_0_95181": "'type {0}' を使用してください", "Using_0_subpath_1_with_target_2_6404": "'{0}' サブパス '{1}' をターゲット '{2}' と共に使用しています。", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' ステートメントでの文字列の使用は ECMAScript 5 以上でのみサポートされています。", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build を使用すると、-b は tsc をコンパイラというよりビルド オーケストレーターのように動作させます。これは、複合プロジェクトのビルドをトリガーするために使用されます。詳細については、{0} を参照してください。", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "変数の宣言が必要です。", "Variable_declaration_list_cannot_be_empty_1123": "変数宣言リストを空にすることはできません。", "Variable_declaration_not_allowed_at_this_location_1440": "変数の宣言はこの場所では許可されていません。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "変数には、--isolatedDeclarations を含む明示的な型注釈が必要です。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "複数の宣言を含む変数をインライン化することはできません。", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "ソースの位置 {0} にある可変個引数要素は、ターゲットの位置 {1} にある要素と一致しません。", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "分散注釈は、オブジェクト、関数、コンストラクター、およびマップされた型の型エイリアスでのみサポートされています。", "Version_0_6029": "バージョン {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "型チェックを行うときは、'null' と 'undefined' が考慮されます。", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "画面をクリアする代わりに、古くなったコンソール出力をウォッチ モードで保持するかどうか。", "Wrap_all_invalid_characters_in_an_expression_container_95109": "式のコンテナー内のすべての無効な文字をラップする", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "無効なデコレーター式をすべてかっこで囲む", "Wrap_all_object_literal_with_parentheses_95116": "すべてのオブジェクト リテラルをかっこで囲みます", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "親の設定が解除されたすべての JSX を JSX フラグメントでラップする", "Wrap_in_JSX_fragment_95120": "JSX フラグメントでラップする", + "Wrap_in_parentheses_95194": "かっこで囲む", "Wrap_invalid_character_in_an_expression_container_95108": "式のコンテナー内の無効な文字をラップする", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "次の本体をかっこで囲みます。これはオブジェクト リテラルです", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "コンパイラ オプションの詳細については、{0} をご覧ください。", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' および '{1}' インデックス シグネチャに互換性がありません。", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' および '{1}' 演算をかっこなしで混在させることはできません。", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' は 2 回指定されています。'{0}' という名前の属性は上書きされます。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型の末尾にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型の先頭にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' をインポートするには、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' をインポートするには、既定のインポートを使用する必要があります。", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' をインポートするには、'require' 呼び出しを使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' をインポートするには、'require' 呼び出しを使用するか、既定のインポートを使用する必要があります。", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' をインポートするには、'import {1} = require({2})' または既定のインポートを使用する必要があります。", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' をインポートするには、'import {1} = require ({2})' を使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "'{0}' は、グローバル スクリプト ファイルと見なされるため、'--isolatedModules' でコンパイルすることはできません。import、export、または空の 'export {}' ステートメントを追加して、これをモジュールにしてください。", "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' を JSX コンポーネントとして使用することはできません。", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'export type' を使用してエクスポートされたため、'{0}' は値として使用できません。", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'import type' を使用してインポートされたため、'{0}' は値として使用できません。", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' コンポーネントには、テキストを子要素として指定できません。JSX のテキストには 'string' 型が含まれていますが、'{1}' の予期された型は '{2}' です。", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{1}' に関連しない可能性のある任意の型で '{0}' をインスタンス化できます。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 宣言は、ブロック内でのみ宣言できます。", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣言は TypeScript ファイルでのみ使用できます。", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣言はバインド パターンを持っていない可能性があります。", + "_0_declarations_must_be_initialized_1155": "'{0}' 宣言は初期化する必要があります。", "_0_expected_1005": "'{0}' が必要です。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' には文字列型がありますが、'isolatedModules' が有効である場合、構文的に認識可能な文字列構文が必要です。", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{1}' という名前のエクスポートされたメンバーが '{0}' に含まれていません。候補: '{2}'", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' の戻り値の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}'インデックス型'{1}' を '{2}'インデックス型'{3}' に割り当てることはできません。", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' はプリミティブですが、'{1}' はラッパー オブジェクトです。できれば '{0}' をご使用ください。", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' は型であるため、JavaScript ファイルにインポートできません。JSDoc 型の注釈で '{1}' を使用します。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "\"{0}\" は型であり、\"preserveValueImports\" と \"isolatedModules\" の両方が有効な場合、型に限定したインポートを使用してインポートされる必要があります。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' は型であり、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' は、'{1}' の未使用の名前変更です。型の注釈として使用するつもりでしたか?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' は型 '{1}' の制約に代入できますが、'{1}' は制約 '{2}' の別のサブタイプでインスタンス化できることがあります。", "_0_is_automatically_exported_here_18044": "`{0}` は自動的にここにエクスポートされます。", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "'{0}' のリストを空にすることはできません。", "_0_modifier_already_seen_1030": "'{0}' 修飾子は既に存在します。", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾子は、クラス、インターフェイス、または型エイリアスの型パラメーターでのみ使用できます", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾子は、関数、メソッド、またはクラスの型パラメーターでのみ使用できます", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 修飾子はコンストラクター宣言では使用できません。", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 修飾子は、モジュールまたは名前空間の要素では使用できません。", "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' 修飾子はパラメーターでは使用できません。", "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 修飾子は型メンバーでは使用できません。", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 修飾子は型パラメーターでは表示できません。", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾子を 'using' 宣言で使用することはできません。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾子を 'await using' 宣言で使用することはできません。", "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 修飾子はインデックス シグネチャでは使用できません。", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' 修飾子はこの種類のクラス要素では使用できません。", "_0_modifier_cannot_be_used_here_1042": "'{0}' 修飾子はここでは使用できません。", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾子と '{1}' 修飾子は同時に使用できません。", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾子を private 識別子とともに使用することはできません。", "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾子は '{1}' 修飾子の前に指定する必要があります。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' の後には、中かっこで囲まれた Unicode プロパティ値式を指定する必要があります。", "_0_needs_an_explicit_type_annotation_2782": "'{0}' には、明示的な型の注釈が必要です。", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' は型のみを参照しますが、ここで名前空間として使用されています。", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' は型のみを参照しますが、ここで値として使用されています。", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' は型のみを参照しますが、ここでは値として使用されています。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションを es2015 以降に変更してみてください。", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' は UMD グローバルを参照していますが、現在のファイルはモジュールです。代わりにインポートを追加することを考慮してください。", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' は値を参照していますが、ここでは型として使用されています。'typeof {0}' を意図していましたか?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "\"{0}\" は型に限定した宣言を解決するため、\"preserveValueImports\" と \"isolatedModules\" の両方が有効な場合、型に限定したインポートを使用してインポートする必要があります。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "\"{0}\" は型に限定した宣言を解決するため、\" isolatedModules\" が有効になっているときは、型に限定した再エクスポートを使用して再エクスポートされる必要があります。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' は型のみの宣言に解決されるため、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "\"{0}\" は型のみの宣言に解決されるため、'{1}' が有効であるときは、型のみの再エクスポートを使用して再エクスポートされる必要があります。", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "config json ファイル の 'compilerOptions' オブジェクト内に '{0}' を設定する必要があります。", "_0_tag_already_specified_1223": "'{0}' タグは既に指定されています。", "_0_was_also_declared_here_6203": "ここでは '{0}' も宣言されました。", @@ -1780,19 +1981,22 @@ "and_here_6204": "およびここで。", "arguments_cannot_be_referenced_in_property_initializers_2815": "プロパティ初期化子で 'arguments' を参照することはできません。", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": インポート、エクスポート、import.meta、jsx (jsx: react-jsx を使用)、または esm 形式 (モジュール: node16+) でファイルをモジュールとして扱います。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 式はクラスの静的ブロック内では使用できません。", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "ファイルがモジュールの場合、'await' 式はそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 式は、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 式は、パラメーター初期化子では使用できません。", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' は、この式の型に対しては効果がありません。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ステートメントは、ファイルがモジュールである場合、そのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ステートメントは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ステートメントをクラスの静的ブロック内で使用することはできません。", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' オプションは '{0}' に設定され、この値を使用して非相対モジュール名 '{1}' を解決します。", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' の後には ASCII 文字が続く必要があります。", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' は、ファイルの先頭でのみ使用できます。", "case_or_default_expected_1130": "'case' または 'default' が必要です。", "catch_or_finally_expected_1472": "'catch' または 'finally' が必要です。", - "const_declarations_can_only_be_declared_inside_a_block_1156": "'const' 宣言は、ブロック内でのみ宣言できます。", - "const_declarations_must_be_initialized_1155": "'const' 宣言は初期化する必要があります。", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列挙型メンバーの初期化子が、無限値に評価されました。", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列挙型メンバーの初期化子が、許可されない値 'NaN' に評価されました。", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "const 列挙型メンバーの初期化子には、リテラル値および他の計算された列挙型の値のみを含めることができます。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 列挙型メンバー初期化子は定数式である必要があります。", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列挙型は、プロパティまたはインデックスのアクセス式、インポート宣言またはエクスポートの代入の右辺、型のクエリにのみ使用できます。", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' をパラメーターのプロパティ名として使用することはできません。", "constructor_is_a_reserved_word_18012": "'#constructor' は予約語です。", @@ -1811,13 +2015,14 @@ "file_6025": "ファイル", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "ファイルがモジュールの場合、'for await' ループはそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' ループは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' ループは、クラスの静的ブロック内では使用できません。", "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' および 'set' アクセサーでは 'this' パラメーターを宣言できません。", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files' が指定されている場合は '[]'、それ以外の場合は '[\"**/*\"]5D;'", "implements_clause_already_seen_1175": "'implements' 句は既に存在します。", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 句は、TypeScript ファイルでのみ使用できます。", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' は、TypeScript ファイルでのみ使用できます。", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 宣言は、条件付き型の 'extends' 句でのみ許可されます。", - "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' 宣言は、ブロック内でのみ宣言できます。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' の後には、山かっこで囲まれたキャプチャ グループ名を指定する必要があります。", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' は、'let' 宣言または 'const' 宣言で名前として使用することはできません。", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "モジュール === 'AMD'、'UMD'、'System'、'ES6'、'Classic'、それ以外の場合は 'Node'", "module_system_or_esModuleInterop_6904": "module === \"system\" or esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' には、バージョン '{0}' と一致する 'typesVersions' エントリがありません。", "package_json_had_a_falsy_0_field_6220": "'package.json' には、false に評価される '{0}' フィールドが含まれています。", "package_json_has_0_field_1_that_references_2_6101": "'package.json' に '{2}' を参照する '{0}' フィールド '{1}' があります。", + "package_json_has_a_peerDependencies_field_6281": "'package.json' に 'peerDependencies' フィールドがあります。", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' には、有効な semver の範囲ではない 'typesVersions' エントリ '{0}' が含まれています。", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' には、コンパイラ バージョン '{1}' に一致する 'typesVersions' エントリ '{0}' が含まれていて、モジュール名 '{2}' に一致するパターンを探しています。", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' には、バージョン固有のパス マッピングを含む 'typesVersions' フィールドが含まれています。", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json のスコープ '{0}' は、指定子 '{1}' のターゲットに無効な型です。", "package_json_scope_0_has_no_imports_defined_6273": "package.json のスコープ '{0}' にはインポートが定義されていません。", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' オプションが指定され、モジュール名 '{0}' と一致するパターンを検索します。", + "q_is_only_available_inside_character_class_1511": "'\\q' は文字クラス内でのみ使用できます。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' の後には、中かっこで囲まれた代替文字列を指定する必要があります。", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾子はプロパティ宣言またはインデックス シグネチャのみに使用できます。", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 型の修飾子は、配列およびタプル リテラル型でのみ使用できます。", "require_call_may_be_converted_to_an_import_80005": "'require' の呼び出しはインポートに変換される可能性があります。", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "'resolution-mode' アサーションは、`moduleResolution` が `node16` または `nodenext` の場合にのみサポートされます。", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "'resolution-mode' アサーションが不安定です。ナイトリー TypeScript を使用して、このエラーをサイレントにします。npm install -D typescript@next' で更新してみてください。", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` は、型のみのインポートに対してのみ設定できます。", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` は、型インポート アサーションの唯一の有効なキーです。", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' が、型インポート属性の唯一の有効なキーです。", "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" は \"require\" または \"import\" のいずれかにする必要があります。", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' オプションが設定され、このオプションを使用して相対モジュール名 '{0}' を解決します。", "super_can_only_be_referenced_in_a_derived_class_2335": "'super' は、派生クラスでのみ参照できます。", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' は、計算されたプロパティ名では参照できません。", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' はモジュール本体内または名前空間本体内では参照できません。", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' は、静的プロパティ初期化子では参照できません。", - "this_cannot_be_referenced_in_constructor_arguments_2333": "'this' はコンストラクター引数では参照できません。", "this_cannot_be_referenced_in_current_location_2332": "'this' は現在の場所では参照できません。", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' は型として注釈を持たないため、暗黙的に型 'any' になります。", "true_for_ES2022_and_above_including_ESNext_6930": "ESNext を含む ES2022 以降の場合は 'true' です。", "true_if_composite_false_otherwise_6909": "'composite' の場合は 'true'、それ以外の場合は 'false'", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution' が 'node16'、'nodenext'、または 'bundler' である場合は 'true'、それ以外の場合は 'false' です。", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript コンパイラ", "type_Colon_6902": "種類:", "unique_symbol_types_are_not_allowed_here_1335": "'unique symbol' 型はここでは許可されていません。", diff --git a/node_modules/typescript/lib/ko/diagnosticMessages.generated.json b/node_modules/typescript/lib/ko/diagnosticMessages.generated.json index 3fba8e28ee..2e52e8a4d8 100644 --- a/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/ko/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "모든 컴파일러 옵션", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 한정자는 가져오기 선언에서 사용할 수 없습니다.", "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 매개 변수는 첫 번째 매개 변수여야 합니다.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 태그는 '@typedef', '@callback' 또는 '@overload' 태그 다음에 올 수 없습니다.", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 주석에 여러 '@type' 태그를 포함하지 못할 수 있습니다.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' 리터럴은 속성 이름으로 사용할 수 없습니다.", "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint 리터럴에는 지수 표기법을 사용할 수 없습니다.", "A_bigint_literal_must_be_an_integer_1353": "bigint 리터럴은 정수여야 합니다.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "바인딩 패턴 매개 변수는 구현 서명에서 선택 사항이 될 수 없습니다.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 문은 이 문을 둘러싼 반복문 또는 switch 문 내에서만 사용할 수 있습니다.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 문은 이 문을 둘러싼 문의 레이블로만 이동할 수 있습니다.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "문자 클래스는 예약된 이중 문장 부호를 포함해서는 안됩니다. 백슬래시로 이스케이프하려고 하셨나요?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "문자 클래스 범위는 다른 문자 클래스에 의해 바인딩되어서는 안 됩니다.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "클래스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 구현할 수 있습니다.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "클래스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 구현할 수 있습니다.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "클래스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 클래스는 생성 가능한 값만 확장할 수 있습니다.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "클래스는 '{0}' 같은 기본 형식을 구현할 수 없습니다. 다른 명명된 개체 형식만 구현할 수 있습니다.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' 한정자를 사용하지 않는 클래스 선언에는 이름이 있어야 합니다.", "A_class_member_cannot_have_the_0_keyword_1248": "클래스 멤버에는 '{0}' 키워드를 사용할 수 없습니다.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "쉼표 식은 컴퓨팅된 속성 이름에 사용할 수 없습니다.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "생성자에는 'this' 매개 변수를 사용할 수 없습니다.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 문은 이 문을 둘러싼 반복문 내에서만 사용할 수 있습니다.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 문은 이 문을 둘러싼 반복문의 레이블로만 이동할 수 있습니다.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "'import type'이 없으면 선언 파일을 가져올 수 없습니다. 대신 '{0}' 구현 파일을 가져오시겠습니까?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 한정자는 이미 존재하는 앰비언트 컨텍스트에서 사용할 수 없습니다.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "데코레이터는 오버로드가 아니라 메서드 구현만 데코레이팅할 수 있습니다.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 절은 'switch' 문에 두 번 이상 나올 수 없습니다.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "기본 내보내기 수준은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "이 컨텍스트에서는 한정된 할당 어설션 '!'가 허용되지 않습니다.", "A_destructuring_declaration_must_have_an_initializer_1182": "구조 파괴 선언에 이니셜라이저가 있어야 합니다.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "동적 가져오기 호출은 'Promise'를 반환합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", "A_file_cannot_have_a_reference_to_itself_1006": "파일은 자신에 대한 참조를 포함할 수 없습니다.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never'를 반환하는 함수에는 연결 가능한 끝점이 있을 수 없습니다.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' 키워드로 호출한 함수에는 'void'인 'this' 형식을 사용할 수 없습니다.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "선언된 형식이 'void'도 'any'도 아닌 함수는 값을 반환해야 합니다.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "선언된 형식이 'undefined', 'void' 또는 'any'가 아닌 함수는 값을 반환해야 합니다.", "A_generator_cannot_have_a_void_type_annotation_2505": "생성기에는 'void' 형식 주석을 사용할 수 없습니다.", "A_get_accessor_cannot_have_parameters_1054": "'get' 접근자에는 매개 변수를 사용할 수 없습니다.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 접근자는 최소한 setter의 액세스 가능 수준과 같아야 합니다.", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수와 다른 파일에 있을 수 없습니다,", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수 앞에 있을 수 없습니다.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "네임스페이스 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 허용됩니다.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' 키워드를 사용하여 'namespace' 선언을 선언하면 안 됩니다. 대신 'namespace' 키워드를 사용하세요.", "A_non_dry_build_would_build_project_0_6357": "-dry가 아닌 빌드는 프로젝트 '{0}'을(를) 빌드합니다.", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry가 아닌 빌드는 다음 파일을 삭제합니다. {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "DRY가 아닌 빌드는 '{0}' 프로젝트의 출력을 업데이트합니다.", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY가 아닌 빌드는 '{0}' 프로젝트의 출력 타임스탬프를 업데이트합니다.", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "매개 변수 이니셜라이저는 함수 또는 생성자 구현에서만 허용됩니다.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "rest 매개 변수를 사용하여 매개 변수 속성을 선언할 수 없습니다.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "파생 클래스에 초기화된 속성, 매개 변수 속성 또는 개인 식별자가 포함된 경우 'super' 호출은 '수퍼' 또는 'this'를 참조하는 생성자의 첫 번째 명령문이어야 합니다.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' 기반 형식 가드는 매개 변수 기반 형식 가드와 호환되지 않습니다.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 형식은 클래스 또는 인터페이스의 비정적 멤버에서만 사용할 수 있습니다.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 CommonJS 모듈의 값 선언에 최상위 'export' 한정자를 사용할 수 없습니다.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 파일이 이미 '{0}'에 정의되어 있습니다.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "튜플 멤버는 optional이면서 rest일 수 없습니다.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "튜플 형식은 음수 값으로 인덱싱할 수 없습니다.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 식은 생성기 본문에서만 사용할 수 있습니다.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "super 식을 통해 '{1}' 클래스의 추상 메서드 '{0}'에 액세스할 수 없습니다.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "추상 메서드는 추상 클래스 내에서만 사용할 수 있습니다.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "추상 속성은 추상 클래스 내에만 나타날 수 있습니다.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "생성자에서 '{1}' 클래스의 추상 속성 '{0}'에 액세스할 수 없습니다.", "Accessibility_modifier_already_seen_1028": "액세스 가능성 한정자가 이미 있습니다.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "접근자는 ECMAScript 5 이상을 대상으로 지정할 때만 사용할 수 있습니다.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "접근자는 모두 추상이거나 비추상이어야 합니다.", "Add_0_to_unresolved_variable_90008": "확인되지 않은 변수에 '{0}.' 추가", "Add_a_return_statement_95111": "return 문 추가", + "Add_a_return_type_to_the_function_declaration_9031": "함수 선언에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_function_expression_9030": "함수 식에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "get 접근자 선언에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_method_9034": "메서드에 반환 형식 추가", + "Add_a_type_annotation_to_the_parameter_0_9028": "{0} 매개 변수에 형식 주석을 추가합니다.", + "Add_a_type_annotation_to_the_property_0_9029": "{0} 속성에 형식 주석을 추가합니다.", + "Add_a_type_annotation_to_the_variable_0_9027": "{0} 변수에 형식 주석을 추가합니다.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set 접근자 선언의 매개 변수에 형식을 추가합니다.", "Add_all_missing_async_modifiers_95041": "누락된 모든 'async' 한정자 추가", "Add_all_missing_attributes_95168": "누락된 특성 모두 추가", "Add_all_missing_call_parentheses_95068": "누락된 호출 괄호 모두 추가", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "누락된 모든 가져오기 추가", "Add_all_missing_members_95022": "누락된 모든 멤버 추가", "Add_all_missing_override_modifiers_95162": "누락된 모든 'override' 한정자 추가", + "Add_all_missing_parameters_95190": "누락된 매개 변수 모두 추가", "Add_all_missing_properties_95166": "누락된 모든 속성 추가", "Add_all_missing_return_statement_95114": "누락된 모든 return 문 추가", "Add_all_missing_super_calls_95039": "누락된 모든 super 호출 추가", + "Add_all_missing_type_annotations_90067": "누락된 모든 형식 주석 추가", + "Add_all_optional_parameters_95193": "모든 선택적 매개 변수 추가", + "Add_annotation_of_type_0_90062": "'{0}' 형식의 주석 추가", "Add_async_modifier_to_containing_function_90029": "포함된 함수에 async 한정자 추가", "Add_await_95083": "'await' 추가", "Add_await_to_initializer_for_0_95084": "'{0}'의 이니셜라이저에 'await' 추가", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "초기화되지 않은 모든 속성에 이니셜라이저 추가", "Add_missing_attributes_95167": "누락된 특성 추가", "Add_missing_call_parentheses_95067": "누락된 호출 괄호 추가", + "Add_missing_comma_for_object_member_completion_0_95187": "개체 멤버 완료 '{0}'에 대한 누락된 쉼표 추가", "Add_missing_enum_member_0_95063": "누락된 열거형 멤버 '{0}' 추가", "Add_missing_function_declaration_0_95156": "누락된 함수 선언 '{0}' 추가", "Add_missing_new_operator_to_all_calls_95072": "모든 호출에 누락된 'new' 연산자 추가", "Add_missing_new_operator_to_call_95071": "호출에 누락된 'new' 연산자 추가", + "Add_missing_parameter_to_0_95188": "'{0}'에 누락된 매개 변수 추가", + "Add_missing_parameters_to_0_95189": "'{0}'에 누락된 매개 변수 추가", "Add_missing_properties_95165": "누락된 속성 추가", "Add_missing_super_call_90001": "누락된 'super()' 호출 추가", "Add_missing_typeof_95052": "누락된 'typeof' 추가", "Add_names_to_all_parameters_without_names_95073": "이름이 없는 모든 매개 변수에 이름 추가", + "Add_optional_parameter_to_0_95191": "'{0}'에 선택적 매개 변수 추가", + "Add_optional_parameters_to_0_95192": "'{0}'에 선택적 매개 변수 추가", "Add_or_remove_braces_in_an_arrow_function_95058": "화살표 함수에 중괄호 추가 또는 제거", "Add_override_modifier_95160": "'override' 한정자 추가", "Add_parameter_name_90034": "매개 변수 이름 추가", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "멤버 이름과 일치하는 모든 확인되지 않은 변수에 한정자 추가", + "Add_return_type_0_90063": "반환 형식 '{0}' 추가", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "이 식에 충족 및 형식 어설션을 추가하여(T를 T로 충족) 형식을 명시적으로 만듭니다.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}'을(를) 사용하여 충족 및 인라인 형식 어설션 추가", "Add_to_all_uncalled_decorators_95044": "호출되지 않는 모든 데코레이터에 '()' 추가", "Add_ts_ignore_to_all_error_messages_95042": "모든 오류 메시지에 '@ts-ignore' 추가", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "인덱스를 사용하여 액세스할 때 유형에 'undefined'를 추가합니다.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 여기서는 코드 내보내기에는 영향을 주지 않고 형식 검사만 합니다.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "모듈에 기본 내보내기가 없을 때 'y에서 x 가져오기'를 허용합니다.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib에서 도우미 함수를 파일별로 포함하는 대신 프로젝트당 한 번씩 가져오도록 허용합니다.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "가져오기에서 TypeScript 파일 확장자를 포함하도록 허용합니다. '--moduleResolution bundler'와 '--noEmit' 또는 '--emitDeclarationOnly'를 설정해야 합니다.", "Allow_javascript_files_to_be_compiled_6102": "Javascript 파일을 컴파일하도록 허용합니다.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "모듈을 확인할 때 여러 폴더가 하나로 처리되도록 허용합니다.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "이미 포함된 '{0}' 파일 이름은 '{1}' 파일 이름과 대/소문자만 다릅니다.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "이 바인딩 패턴과 일치하는 인수가 제공되지 않았습니다.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "산술 피연산자는 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", "An_arrow_function_cannot_have_a_this_parameter_2730": "화살표 함수에는 'this' 매개 변수를 사용할 수 없습니다.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "비동기 함수 또는 메서드는 'Promise'를 반환해야 합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", "An_async_iterator_must_have_a_next_method_2519": "비동기 반복기에는 'next()' 메서드가 있어야 합니다.", "An_element_access_expression_should_take_an_argument_1011": "요소 액세스 식은 인수를 사용해야 합니다.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "내보내기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "내보내기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", "An_export_declaration_cannot_have_modifiers_1193": "내보내기 선언에는 한정자를 사용할 수 없습니다.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 실제 값을 참조해야 하지만 '{0}'은(는) 형식 전용 선언으로 확인됩니다.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax'가 사용하도록 설정되어 있지만 '{0}'이(가) 형식 전용 선언으로 확인되는 경우 'export default'는 실제 값을 참조해야 합니다.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax'가 사용하도록 설정된 경우 'export default'는 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 형식 식의 truthiness를 테스트할 수 없습니다.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "확장된 유니코드 이스케이프 값은 0x0과 0x10FFFF(포함) 사이여야 합니다.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "식별자 또는 키워드는 숫자 리터럴 바로 뒤에 올 수 없습니다.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "앰비언트 컨텍스트에서는 구현을 선언할 수 없습니다.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "가져오기 별칭은 '내보내기 형식'을 사용하여 내보낸 선언을 참조할 수 없습니다.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "가져오기 별칭은 '가져오기 형식'을 사용하여 가져온 선언을 참조할 수 없습니다.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 가져오기 별칭을 형식 또는 형식 전용 선언으로 확인할 수 없습니다.", "An_import_alias_cannot_use_import_type_1392": "가져오기 별칭은 'import type'을 사용할 수 없습니다.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "가져오기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "가져오기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", "An_import_declaration_cannot_have_modifiers_1191": "가져오기 선언에는 한정자를 사용할 수 없습니다.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "가져오기 경로는 '{0}' 확장으로 끝날 수 없습니다. 대신 '{1}' 가져오기를 고려하세요.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "가져오기 경로는 'allowImportingTsExtensions'가 사용하도록 설정된 경우에만 '{0}' 확장으로 끝날 수 있습니다.", "An_index_signature_cannot_have_a_rest_parameter_1017": "인덱스 시그니처에는 rest 매개 변수를 사용할 수 없습니다.", "An_index_signature_cannot_have_a_trailing_comma_1025": "인덱스 시그니처에는 후행 쉼표를 사용할 수 없습니다.", "An_index_signature_must_have_a_type_annotation_1021": "인덱스 시그니처에는 형식 주석을 사용할 수 없습니다.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "인스턴스화 식 뒤에 속성 액세스가 있을 수 없습니다.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "인터페이스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 확장할 수 있습니다.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "인터페이스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 확장할 수 있습니다.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "인터페이스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 인터페이스는 명명된 형식 및 클래스만 확장할 수 있습니다.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "인터페이스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 다른 명명된 개체 형식만 확장할 수 있습니다.", "An_interface_property_cannot_have_an_initializer_1246": "인터페이스 속성에는 이니셜라이저를 사용할 수 없습니다.", "An_iterator_must_have_a_next_method_2489": "반복기에는 'next()' 메서드가 있어야 합니다.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma를 JSX 조각과 함께 사용하는 경우에는 @jsxFrag pragma가 필요합니다.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "개체 리터럴은 이름이 같은 여러 속성을 가질 수 없습니다.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "개체 리터럴에 이름이 같은 속성과 접근자를 사용할 수 없습니다.", "An_object_member_cannot_be_declared_optional_1162": "개체 멤버는 선택적으로 선언될 수 없습니다.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "개체의 '[Symbol.hasInstance]' 메서드는 'instanceof' 식의 오른쪽에서 사용할 부울 값을 반환해야 합니다.", "An_optional_chain_cannot_contain_private_identifiers_18030": "선택적 체인에는 프라이빗 식별자를 사용할 수 없습니다.", "An_optional_element_cannot_follow_a_rest_element_1266": "선택적 요소는 rest 요소 뒤에 올 수 없습니다.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this'의 외부 값은 이 컨테이너에서 섀도 처리됩니다.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "오버로드 시그니처는 생성기로 선언할 수 없습니다.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "지수 식의 왼쪽에는 '{0}' 연산자가 있는 단항 식을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.", "Annotate_everything_with_types_from_JSDoc_95043": "JSDoc의 형식을 사용하여 모든 항목에 주석 달기", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "네임스페이스의 속성 expando 함수 형식에 주석 달기", "Annotate_with_type_from_JSDoc_95009": "JSDoc의 형식을 사용하여 주석 추가", "Another_export_default_is_here_2753": "다른 내보내기 기본값은 여기에 있습니다.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "단일 문자 이상과 일치할 수 있는 유니코드 속성은 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "단일 문자보다 더 일치할 수 있는 모든 항목은 부정된 문자 클래스 내에서 유효하지 않습니다.", "Are_you_missing_a_semicolon_2734": "세미콜론이 없습니까?", "Argument_expression_expected_1135": "인수 식이 필요합니다.", "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 옵션의 인수는 {1}이어야(여야) 합니다.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' 유형의 인수는 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형의 매개 변수에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "REST 매개 변수 '{0}'에 대한 인수가 제공되지 않았습니다.", "Array_element_destructuring_pattern_expected_1181": "배열 요소 구조 파괴 패턴이 필요합니다.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "분산 요소가 있는 배열은 --isolatedDeclarations로 유추할 수 없습니다.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "어설션에서 호출 대상의 모든 이름은 명시적 형식 주석을 사용하여 선언해야 합니다.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "어설션에서 호출 대상은 식별자 또는 정규화된 이름이어야 합니다.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "함수를 선언하지 않고 함수에 속성을 할당하는 것은 --isolatedDeclarations에서 지원되지 않습니다. 이 함수에 할당된 속성에 대한 명시적 선언을 추가합니다.", "Asterisk_Slash_expected_1010": "'*/'가 필요합니다.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "하나 이상의 접근자에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "전역 범위에 대한 확대는 외부 모듈 또는 앰비언트 모듈 선언에만 직접 중첩될 수 있습니다.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "전역 범위에 대한 확대는 이미 존재하는 앰비언트 컨텍스트에 표시되지 않는 한 'declare' 한정자를 포함해야 합니다.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "프로젝트 '{0}'에서 입력에 대한 자동 검색을 사용하도록 설정되었습니다. '{2}' 캐시 위치를 사용하여 모듈 '{1}'에 대해 추가 해결 패스를 실행합니다.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Await 식은 클래스 정적 블록 내에서 사용할 수 없습니다.", "BUILD_OPTIONS_6919": "빌드 옵션", "Backwards_Compatibility_6253": "이전 버전과의 호환성", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "기본 클래스 식에서 클래스 형식 매개 변수를 참조할 수 없습니다.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020 미만을 대상으로 할 경우 bigint 리터럴을 사용할 수 없습니다.", "Binary_digit_expected_1177": "이진수가 있어야 합니다.", "Binding_element_0_implicitly_has_an_1_type_7031": "바인딩 요소 '{0}'에 암시적으로 '{1}' 형식이 있습니다.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "바인딩 요소는 --isolatedDeclarations를 사용하여 직접 내보낼 수 없습니다.", "Block_scoped_variable_0_used_before_its_declaration_2448": "선언 전에 사용된 블록 범위 변수 '{0}'입니다.", "Build_a_composite_project_in_the_working_directory_6925": "작업 디렉터리에서 복합 프로젝트를 빌드합니다.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "최신으로 보이는 프로젝트를 포함하여 모든 프로젝트를 빌드합니다.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "최신 상태가 아닌 경우, 하나 이상의 프로젝트 및 해당 종속성 빌드", "Build_option_0_requires_a_value_of_type_1_5073": "빌드 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", "Building_project_0_6358": "'{0}' 프로젝트를 빌드하는 중...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "기본 제공 반복기는 'any' 대신 'undefined'의 'TReturn' 형식으로 인스턴스화됩니다.", "COMMAND_LINE_FLAGS_6921": "명령줄 플래그", "COMMON_COMMANDS_6916": "일반 명령", "COMMON_COMPILER_OPTIONS_6920": "일반 컴파일러 옵션", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "호출 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "반환 형식 주석이 없는 호출 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "인수가 없는 호출 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", - "Call_target_does_not_contain_any_signatures_2346": "호출 대상에 시그니처가 포함되어 있지 않습니다.", "Can_only_convert_logical_AND_access_chains_95142": "논리적 AND 액세스 체인만 변환할 수 있습니다.", "Can_only_convert_named_export_95164": "명명된 내보내기만 변환할 수 있습니다.", "Can_only_convert_property_with_modifier_95137": "한정자만 사용하여 속성을 변환할 수 있습니다.", - "Can_only_convert_string_concatenation_95154": "문자열 연결만 변환할 수 있습니다.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "문자열 연결 및 문자열 리터럴만 변환할 수 있습니다.", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}'이(가) 네임스페이스가 아니라 형식이므로 '{0}.{1}'에 액세스할 수 없습니다. '{0}'에서 '{0}[\"{1}\"]'과(와) 함께 '{1}' 속성의 형식을 검색하려고 했나요?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' 플래그가 제공된 경우 앰비언트 const 열거형에 액세스할 수 없습니다.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}'을(를) 사용하도록 설정한 경우 한정 없이 다른 파일에서 '{0}'에 액세스할 수 없습니다. 대신 '{2}'을(를) 사용하세요.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}'이(가) 사용하도록 설정된 경우 앰비언트 const 열거형에 액세스할 수 없습니다.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' 생성자 형식을 '{1}' 생성자 형식에 할당할 수 없습니다.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "추상 생성자 형식을 비추상 생성자 형식에 할당할 수 없습니다.", "Cannot_assign_to_0_because_it_is_a_class_2629": "클래스이므로 '{0}'에 할당할 수 없습니다.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다. '{1}'이(가) 아닌지 확인하세요.", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' 모듈을 찾을 수 없습니다. '--resolveJsonModule'을 사용하여 '. json' 확장명이 포함된 모듈을 가져오는 것이 좋습니다.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "'{0}' 모듈을 찾을 수 없습니다. 'moduleResolution' 옵션을 'node'로 설정하거나 'paths' 옵션에 별칭을 추가하려고 하셨습니까?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' 모듈을 찾을 수 없습니다. 'moduleResolution' 옵션을 'nodenext'로 설정하거나 'paths' 옵션에 별칭을 추가하려고 하셨나요?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' 모듈 또는 해당 형식 선언을 찾을 수 없습니다.", "Cannot_find_name_0_2304": "'{0}' 이름을 찾을 수 없습니다.", "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "이름 '{0}' 찾을 수 없습니다. 비동기 함수에 쓰려고 했나요?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 '{1}' 이상으로 변경해 보세요.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'dom'을 포함하도록 'lib' 컴파일러 옵션을 변경해 보세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 사용해 보세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 시도한 다음 tsconfig의 형식 필드에 'bun'을 추가합니다.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도합니다.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도한 다음, tsconfig의 형식 필드에 'jest' 또는 'mocha'를 추가하세요.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도합니다.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 구조 파괴는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 spread는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 for-of는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "'{0}' 프로젝트는 'outFile'이 설정되어 있지 않기 때문에 앞에 추가할 수 없습니다.", + "Cannot_move_statements_to_the_selected_file_95183": "문을 선택한 파일로 이동할 수 없습니다.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "파일로 이동할 수 없습니다. 선택한 파일이 유효하지 않습니다.", "Cannot_read_file_0_5083": "'{0}' 파일을 읽을 수 없습니다.", "Cannot_read_file_0_Colon_1_5012": "파일 '{0}'을(를) 읽을 수 없습니다. {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "블록 범위 변수 '{0}'을(를) 다시 선언할 수 없습니다.", "Cannot_redeclare_exported_variable_0_2323": "내보낸 변수 '{0}'을(를) 다시 선언할 수 없습니다.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 절에서 식별자 '{0}'을(를) 다시 선언할 수 없습니다.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "형식 주석에서 함수 호출을 시작할 수 없습니다.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "'{1}' 파일을 읽는 동안 오류가 발생하여 '{0}' 프로젝트의 출력을 업데이트할 수 없습니다.", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' 플래그를 제공하지 않으면 JSX를 사용할 수 없습니다.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "'--isolatedModules' 플래그가 제공된 경우 형식 또는 형식 전용 네임스페이스에 '가져오기 내보내기'를 사용할 수 없습니다.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}'을(를) 사용하도록 설정한 경우 형식 또는 형식 전용 네임스페이스에서 'export import'를 사용할 수 없습니다.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module'이 'none'인 경우 가져오기, 내보내기 또는 모듈 확대를 사용할 수 없습니다.", "Cannot_use_namespace_0_as_a_type_2709": "'{0}' 네임스페이스를 형식으로 사용할 수 없습니다.", "Cannot_use_namespace_0_as_a_value_2708": "'{0}' 네임스페이스를 값으로 사용할 수 없습니다.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "'extends'를 'implements'로 변경", "Change_spelling_to_0_90022": "맞춤법을 '{0}'(으)로 변경", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "선언되었지만 생성자에 설정되지 않은 클래스 속성을 확인합니다.", + "Check_side_effect_imports_6806": "부작용 가져오기를 확인합니다.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' 및 'apply' 메서드에 대한 인수가 원래 함수와 일치하는지 확인하세요.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}'이(가) '{1}' - '{2}'에 대해 일치하는 가장 긴 접두사인지 확인하는 중입니다.", "Circular_definition_of_import_alias_0_2303": "가져오기 별칭 '{0}'의 순환 정의입니다.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "클래스 선언에서 '{0}'에 대한 오버로드 목록을 구현할 수 없습니다.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 '@extends' 태그를 둘 이상 가질 수 없습니다.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "클래스 데코레이터는 정적 프라이빗 식별자와 함께 사용할 수 없습니다. 실험적 데코레이터를 제거하는 것이 좋습니다.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "부모 클래스에서 정의한 '{0}' 클래스 필드는 super를 통해 자식 클래스에서 액세스할 수 없습니다.", "Class_name_cannot_be_0_2414": "클래스 이름은 '{0}'일 수 없습니다.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "{0} 모듈을 사용하는 ES5를 대상으로 하는 경우 클래스 이름은 'Object'일 수 없습니다.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "클래스 정적 측면 '{0}'이(가) 기본 클래스 정적 측면 '{1}'을(를) 잘못 확장합니다.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "명령줄 옵션", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "구성 파일에 대한 경로 또는 'tsconfig.json'이 포함된 폴더에 대한 경로를 고려하여 프로젝트를 컴파일합니다.", "Compiler_Diagnostics_6251": "컴파일러 진단", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' 컴파일러 옵션에는 빈 문자열을 지정할 수 없습니다.", "Compiler_option_0_expects_an_argument_6044": "컴파일러 옵션 '{0}'에는 인수가 필요합니다.", "Compiler_option_0_may_not_be_used_with_build_5094": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서 사용되지 않을 수 있습니다.", "Compiler_option_0_may_only_be_used_with_build_5093": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서만 사용할 수 있습니다.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "복합 프로젝트는 선언 내보내기를 비활성화할 수 없습니다.", "Composite_projects_may_not_disable_incremental_compilation_6379": "복합 프로젝트는 증분 컴파일을 비활성화할 수 없습니다.", "Computed_from_the_list_of_input_files_6911": "입력 파일 목록에서 컴퓨팅됨", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "계산된 속성은 --isolatedDeclarations가 있는 숫자 또는 문자열 리터럴, 변수 또는 점선 식이어야 합니다.", "Computed_property_names_are_not_allowed_in_enums_1164": "컴퓨팅된 속성 이름은 열거형에 사용할 수 없습니다.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "클래스 또는 개체 리터럴의 계산된 속성 이름은 --isolatedDeclarations로 유추할 수 없습니다.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "계산된 값은 문자열 값 멤버가 포함된 열거형에서 허용되지 않습니다.", "Concatenate_and_emit_output_to_single_file_6001": "출력을 연결하고 단일 파일로 내보냅니다.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{1}' 및 '{2}'에서 '{0}'에 대한 정의가 충돌하고 있습니다. 이 라이브러리의 특정 버전을 설치하여 충돌을 해결하세요.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "가져오기를 확인할 때 확인자별 기본값 외에 설정할 조건입니다.", "Conflicts_are_in_this_file_6201": "이 파일에 충돌이 있습니다.", "Consider_adding_a_declare_modifier_to_this_class_6506": "이 클래스에 'declare' 한정자를 추가하는 것이 좋습니다.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "구문 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "'{0}'을(를) 매핑된 개체 형식으로 변환", "Convert_all_const_to_let_95102": "모든 'const'를 'let'으로 변환", "Convert_all_constructor_functions_to_classes_95045": "모든 생성자 함수를 클래스로 변환", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "값으로 사용되지 않는 모든 가져오기를 형식 전용 가져오기로 변환", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "모든 잘못된 문자를 HTML 엔터티 코드로 변환", "Convert_all_re_exported_types_to_type_only_exports_1365": "다시 내보낸 모든 형식을 형식 전용 내보내기로 변환", "Convert_all_require_to_import_95048": "모든 'require'를 'import'로 변환", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "모두 bigint 숫자 리터럴로 변환", "Convert_all_to_default_imports_95035": "모든 항목을 기본 가져오기로 변환", "Convert_all_type_literals_to_mapped_type_95021": "모든 형식 리터럴을 매핑된 형식으로 변환", + "Convert_all_typedef_to_TypeScript_types_95177": "모든 typedef를 TypeScript 형식으로 변환합니다.", "Convert_arrow_function_or_function_expression_95122": "화살표 함수 또는 함수 식 변환", "Convert_const_to_let_95093": "'const'를 'let'으로 변환", "Convert_default_export_to_named_export_95061": "기본 내보내기를 명명된 내보내기로 변환", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "선택적 체인 식으로 변환합니다.", "Convert_to_template_string_95096": "템플릿 문자열로 변환", "Convert_to_type_only_export_1364": "형식 전용 내보내기로 변환", - "Convert_to_type_only_import_1373": "형식 전용 가져오기로 변환", + "Convert_typedef_to_TypeScript_type_95176": "typedef를 TypeScript 형식으로 변환합니다.", "Corrupted_locale_file_0_6051": "로캘 파일 {0}이(가) 손상되었습니다.", "Could_not_convert_to_anonymous_function_95153": "익명 함수로 변환할 수 없습니다.", "Could_not_convert_to_arrow_function_95151": "화살표 함수로 변환할 수 없습니다.", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", "Could_not_find_namespace_import_or_named_imports_95132": "네임스페이스 가져오기 또는 명명된 가져오기를 찾을 수 없습니다.", "Could_not_find_property_for_which_to_generate_accessor_95135": "접근자를 생성할 속성을 찾을 수 없습니다.", + "Could_not_find_variable_to_inline_95185": "인라인할 변수를 찾을 수 없습니다.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "{1} 확장이 포함된 '{0}' 경로를 확인할 수 없습니다.", "Could_not_write_file_0_Colon_1_5033": "'{0}' 파일을 쓸 수 없습니다. '{1}'.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "내보낸 JavaScript 파일의 소스 맵 파일을 만듭니다.", "Create_sourcemaps_for_d_ts_files_6614": "d.ts 파일의 sourcemap을 만듭니다.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "작업 디렉터리에 권장되는 설정을 사용하여 tsconfig.json을 만듭니다.", "DIRECTORY_6038": "디렉터리", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "문자 클래스에서는 10진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "앞에 0이 있는 10진수는 허용되지 않습니다.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "선언이 다른 파일의 선언을 확대합니다. 이 작업은 직렬화할 수 없습니다.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "이 파일에 대한 선언 내보내기에서는 확대를 위해 이 가져오기를 유지해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "이 파일의 선언 내보내기에는 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "이 파일의 선언 내보내기에는 '{1}' 모듈의 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "이 매개 변수에 대한 선언 내보내기를 사용하려면 정의되지 않은 형식을 암시적으로 추가해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", "Declaration_expected_1146": "선언이 필요합니다.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "선언 이름이 기본 제공 전역 ID '{0}'과(와) 충돌합니다.", "Declaration_or_statement_expected_1128": "선언 또는 문이 필요합니다.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "'{0}' 정적 속성 선언", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "데코레이터 함수 반환 유형 '{0}'은(는) '{1}' 유형에 할당할 수 없습니다.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "데코레이터 함수 반환 유형은 '{0}'이지만 'void' 또는 'any'여야 합니다.", + "Decorator_used_before_export_here_1486": "여기에서 'export' 앞에 데코레이터를 사용했습니다.", "Decorators_are_not_valid_here_1206": "데코레이터는 여기에 사용할 수 없습니다.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "동일한 이름의 여러 get/set 접근자에 데코레이터를 적용할 수 없습니다.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "데코레이터는 '이' 매개 변수에 적용되지 않을 수 있습니다.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "'export' 앞에도 데코레이터가 나타나면 'export' 또는 'export default' 뒤에 나타나지 않을 수 있습니다.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "데코레이터는 속성 선언의 이름 및 모든 키워드 앞에 와야 합니다.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "기본 catch 절 변수는 'any' 대신 'unknown'입니다.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "모듈의 기본 내보내기에서 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "기본 내보내기는 --isolatedDeclarations로 유추할 수 없습니다.", "Default_library_1424": "기본 라이브러리", "Default_library_for_target_0_1425": "대상 '{0}'의 기본 라이브러리", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "{0} 식별자의 정의가 다른 파일의 정의와 충돌합니다.", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "생성된 코드에서 'const enum' 선언 지우기를 비활성화합니다.", "Disable_error_reporting_for_unreachable_code_6603": "연결할 수 없는 코드에 대한 오류 보고를 사용하지 않습니다.", "Disable_error_reporting_for_unused_labels_6604": "사용하지 않은 레이블에 대한 오류 보고를 사용하지 않습니다.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "전체 형식 검사를 사용하지 않도록 설정합니다(중요한 구문 분석 및 내보내기 오류만 보고됨).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "컴파일된 출력에서 ​​'__extents'와 같은 사용자 지정 도우미 함수 생성을 비활성화합니다.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "기본 lib.d.ts를 비롯하여 모든 라이브러리 파일을 포함하지 않도록 설정합니다.", "Disable_loading_referenced_projects_6235": "참조된 프로젝트 로드를 사용하지 않습니다.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "접근할 수 없는 코드에 대한 오류를 보고하지 않습니다.", "Do_not_report_errors_on_unused_labels_6074": "사용되지 않는 레이블에 대한 오류를 보고하지 않습니다.", "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink의 실제 경로를 확인하지 마세요.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' 설정에 따라 출력 파일의 형식으로 작성되도록 형식 전용으로 표시되지 않은 가져오기 또는 내보내기를 변환하거나 생략하지 마세요.", "Do_not_truncate_error_messages_6165": "오류 메시지를 자르지 않습니다.", "Duplicate_function_implementation_2393": "중복된 함수 구현입니다.", "Duplicate_identifier_0_2300": "'{0}' 식별자가 중복되었습니다.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "'{0}' 형식에 대한 인덱스 시그니처가 중복되었습니다.", "Duplicate_label_0_1114": "중복된 레이블 '{0}'입니다.", "Duplicate_property_0_2718": "중복 속성 '{0}'입니다.", + "Duplicate_regular_expression_flag_1500": "중복된 정규식 플래그입니다.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "동적 가져오기의 지정자는 'string' 형식이어야 하지만 여기에서 형식은 '{0}'입니다.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "동적 가져오기는 '--module' 플래그가 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16' 또는 'nodenext'로 설정된 경우에만 지원됩니다.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "동적 가져오기는 모듈 지정자와 선택적 어설션만 인수로 수락합니다.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "동적 가져오기는 '--module' 옵션이 'esnext', 'node16' 또는 'nodenext'로 설정된 경우에만 두 번째 인수를 지원합니다.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "동적 가져오기는 모듈 지정자와 선택적 특성 집합만 인수로 허용할 수 있습니다.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "동적 가져오기는 '--module' 옵션이 'esnext', 'node16', 'nodenext' 또는 'preserve'로 설정된 경우에만 두 번째 인수를 지원합니다.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module'이 'preserve'로 설정된 경우 CommonJS 모듈에서는 ESM 구문을 사용할 수 없습니다.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 CommonJS 모듈에서는 ESM 구문을 사용할 수 없습니다.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}'의 각 선언 값이 다릅니다. 여기서 '{2}'이(가) 필요한데 '{3}'이(가) 제공되었습니다.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "공용 구조체 형식 '{0}'의 각 멤버에 구문 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "공용 구조체 형식 '{0}'의 각 멤버에 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", "Editor_Support_6249": "편집기 지원", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "형식이 확인된 JavaScript 파일에서 오류 보고를 사용하도록 설정합니다.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "지역 변수를 읽지 않을 때 오류 보고를 활성화합니다.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this'에 'any' 유형이 지정되면 오류 보고를 활성화합니다.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 2단계 초안 데코레이터에 대한 실험적 지원을 사용합니다.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "레거시 실험적 데코레이터에 대해 실험적 지원을 사용하도록 설정합니다.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "선언 파일이 있는 경우 확장자가 있는 파일 가져오기를 사용하도록 설정합니다.", "Enable_importing_json_files_6689": ".json 파일 가져오기를 활성화합니다.", "Enable_project_compilation_6302": "프로젝트 컴파일을 사용하도록 설정", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "함수에서 strict 'bind', 'call' 및 'apply' 메서드를 사용하도록 설정합니다.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "가져오기에서 대/소문자가 올바른지 확인합니다.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "다른 가져오기를 사용하지 않고 각 파일을 안전하게 변환할 수 있는지 확인합니다.", "Ensure_use_strict_is_always_emitted_6605": "'use strict'를 항상 내보내고 있는지 확인합니다.", + "Entering_conditional_exports_6413": "조건부 내보내기가 시작됩니다.", "Entry_point_for_implicit_type_library_0_1420": "암시적 형식 라이브러리 '{0}'의 진입점", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId가 '{1}'인 암시적 형식 라이브러리 '{0}'의 진입점", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "열거형 선언은 네임스페이스 또는 다른 열거형 선언과만 병합할 수 있습니다.", "Enum_declarations_must_all_be_const_or_non_const_2473": "열거형 선언은 모두 const 또는 비const여야 합니다.", "Enum_member_expected_1132": "열거형 멤버가 필요합니다.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules'를 사용하도록 설정한 경우 리터럴이 아닌 숫자 멤버 다음에 오는 열거형 멤버에는 이니셜라이저가 있어야 합니다.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "열거형 멤버 이니셜라이저는 --isolatedDeclarations를 사용하여 외부 기호에 대한 참조 없이 계산할 수 있어야 합니다.", "Enum_member_must_have_initializer_1061": "열거형 멤버에는 이니셜라이저가 있어야 합니다.", "Enum_name_cannot_be_0_2431": "열거형 이름은 '{0}'일 수 없습니다.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "열거형 형식 '{0}'에 리터럴이 아닌 이니셜라이저를 사용하는 멤버가 있습니다.", "Errors_Files_6041": "오류 파일", + "Escape_sequence_0_is_not_allowed_1488": "이스케이프 시퀀스 '{0}'은(는) 허용되지 않습니다.", "Examples_Colon_0_6026": "예: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' 및 '{1}' 형식을 비교하는 데 과도한 복잡성이 있습니다.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "'{0}' 및 '{1}' 형식을 비교하는 스택 깊이가 과도합니다.", + "Exiting_conditional_exports_6416": "조건부 내보내기가 종료됩니다.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "'@extends' 태그로 제공하는 예상되는 {0}-{1} 형식 인수입니다.", "Expected_0_arguments_but_got_1_2554": "{0}개의 인수가 필요한데 {1}개를 가져왔습니다.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0}개 인수가 필요한데 {1}개를 가져왔습니다. 'void'를 'Promise'의 형식 인수에 포함하는 것을 잊으셨습니까?", "Expected_0_type_arguments_but_got_1_2558": "{0}개의 형식 인수가 필요한데 {1}개를 가져왔습니다.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "'@extends' 태그로 제공하는 예상되는 {0} 형식 인수입니다.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1개의 인수가 필요하지만 0이 있습니다. 'new Promise()'는 인수 없이 호출할 수 있는 'resolve'를 생성하기 위해 JSDoc 힌트가 필요합니다.", + "Expected_a_Unicode_property_name_1523": "유니코드 속성 이름이 필요합니다.", + "Expected_a_Unicode_property_name_or_value_1527": "유니코드 속성 이름 또는 값이 필요합니다.", + "Expected_a_Unicode_property_value_1525": "유니코드 속성 값이 필요합니다.", + "Expected_a_capturing_group_name_1514": "캡처 그룹 이름이 필요합니다.", + "Expected_a_class_set_operand_1520": "클래스 집합 피연산자가 필요합니다.", "Expected_at_least_0_arguments_but_got_1_2555": "최소 {0}개의 인수가 필요한데 {1}개를 가져왔습니다.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}'에 해당하는 JSX 닫는 태그가 필요합니다.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 조각에 닫는 태그가 필요합니다.", "Expected_for_property_initializer_1442": "속성 이니셜라이저에는 '='가 필요합니다.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json'의 '{0}' 필드에 '{1}' 형식이 필요한데 '{2}'을(를) 얻었습니다.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "데코레이터에 대한 실험적 지원 기능은 이후 릴리스에서 변경될 수 있습니다. 이 경고를 제거하려면 'tsconfig' 또는 'jsconfig'에서 'experimentalDecorators' 옵션을 설정합니다.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "명시적으로 지정된 모듈 확인 종류 '{0}'입니다.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 옵션이 'es2016' 이상으로 설정되어 있지 않으면 'bigint' 값에 지수화를 수행할 수 없습니다.", "Export_0_from_module_1_90059": "'{0}'을(를) '{1}' 모듈에서 내보냅니다.", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "내보낸 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "내보내기 및 내보내기 할당는 모듈 확대에서 허용되지 않습니다.", "Expression_expected_1109": "식이 필요합니다.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "식을 데코레이터로 사용하려면 괄호로 묶어야 합니다.", "Expression_or_comma_expected_1137": "식 또는 쉼표가 필요합니다.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "식에서는 너무 복잡해서 표시할 수 없는 공용 구조체 형식을 생성합니다.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "컴파일러가 기본 클래스 참조를 캡처하기 위해 사용하는 '_super'로 식이 확인됩니다.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "컴파일러가 'new.target' 메타 속성 참조를 캡처하기 위해 사용하는 변수 선언 '_newTarget'으로 식이 확인됩니다.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "컴파일러가 'this' 참조를 캡처하기 위해 사용하는 변수 선언 '_this'로 식이 확인됩니다.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "식 형식은 --isolatedDeclarations로 유추할 수 없습니다.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 절에는 --isolatedDeclarations가 있는 식을 포함할 수 없습니다.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "유추된 형식 '{0}'에 대한 extends 절이 '{1}' 비공개 이름을 가지고 있거나 사용 중입니다.", + "Extract_base_class_to_variable_90064": "변수에 기본 클래스 추출", + "Extract_binding_expressions_to_variable_90066": "변수에 바인딩 식 추출", "Extract_constant_95006": "상수 추출", + "Extract_default_export_to_variable_90065": "변수로 기본 내보내기 추출", "Extract_function_95005": "함수 추출", "Extract_to_0_in_1_95004": "{1}의 {0}(으)로 추출", "Extract_to_0_in_1_scope_95008": "{1} 범위의 {0}(으)로 추출", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "인터페이스로 추출", "Extract_to_type_alias_95078": "형식 별칭으로 추출", "Extract_to_typedef_95079": "Typedef로 추출", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "변수로 추출하고 '{0} as typeof {0}'(으)로 바꾸기", "Extract_type_95077": "형식 추출", "FILE_6035": "파일", "FILE_OR_DIRECTORY_6040": "파일 또는 디렉터리", - "Failed_to_parse_file_0_Colon_1_5014": "'{0}' 파일 구문 분석 실패: {1}.", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}'을(를) 찾지 못했습니다.", + "Failed_to_resolve_under_condition_0_6415": "조건 '{0}'에서 확인하지 못했습니다.", "Fallthrough_case_in_switch_7029": "switch에 Fallthrough case가 있습니다.", "File_0_does_not_exist_6096": "'{0}' 파일이 없습니다.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "이전 캐시된 검색에 따라 '{0}' 파일이 존재하지 않습니다.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "'{0}' 파일이 있습니다. 이 파일을 이름 확인 결과로 사용하세요.", "File_0_exists_according_to_earlier_cached_lookups_6239": "파일 '{0}'은(는) 이전 캐시된 검색에 따라 존재합니다.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' 파일이 있습니다. 이 파일을 이름 확인 결과로 사용하세요.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' 파일의 확장명이 지원되지 않습니다. 지원되는 확장명은 {1}뿐입니다.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "'{0}' 파일은 확장명이 지원되지 않으므로 건너뜁니다.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' 파일은 JavaScript 파일입니다. 'allowJs' 옵션을 사용하도록 설정하시겠습니까?", "File_0_is_not_a_module_2306": "'{0}' 파일은 모듈이 아닙니다.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' 파일이 '{1}' 프로젝트의 파일 목록에 나열되지 않습니다. 프로젝트는 모든 파일을 나열하거나 'include' 패턴을 사용해야 합니다.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' 파일이 'rootDir' '{1}' 아래에 있지 않습니다. 'rootDir'에는 모든 소스 파일이 포함되어 있어야 합니다.", "File_0_not_found_6053": "파일 '{0}'을(를) 찾을 수 없습니다.", "File_Management_6245": "파일 관리", + "File_appears_to_be_binary_1490": "파일이 이진 파일인 것 같습니다.", "File_change_detected_Starting_incremental_compilation_6032": "파일 변경이 검색되었습니다. 증분 컴파일을 시작하는 중...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}'에 \"type\" 필드가 없으므로 파일이 CommonJS 모듈입니다.", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}'에 값이 \"module\"이 아닌 \"type\" 필드가 있으므로 파일이 CommonJS 모듈입니다.", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "파일은 프로젝트 참조 소스 '{0}'의 출력입니다.", "File_is_source_from_referenced_project_specified_here_1416": "파일은 여기에 지정된 참조된 프로젝트의 소스입니다.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' 파일 이름은 이미 포함된 '{1}' 파일 이름과 대/소문자만 다릅니다.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "파일 이름 '{0}'에는 '{1}' 확장명이 있습니다. 대신 '{2}'을(를) 조회합니다.", "File_name_0_has_a_1_extension_stripping_it_6132": "파일 이름 '{0}'에 '{1}' 확장명이 있어 제거하는 중입니다.", "File_redirects_to_file_0_1429": "파일은 '{0}' 파일로 리디렉션됩니다.", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "파일 사양은 재귀 디렉터리 와일드카드('**') 뒤에 나타나는 부모 디렉터리('..')를 포함할 수 없습니다. '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "'await'가 누락되었을 수 있는 모든 식 수정", "Fix_all_implicit_this_errors_95107": "모든 암시적 'this' 오류 수정", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "비동기 함수의 모든 잘못된 반환 형식 수정", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' 루프는 클래스 정적 블록 내에서 사용할 수 없습니다.", + "Fix_all_with_type_only_imports_95182": "형식 전용 가져오기를 사용하여 모두 수정", "Found_0_errors_6217": "{0}개 오류가 발견되었습니다.", "Found_0_errors_Watching_for_file_changes_6194": "{0}개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", "Found_0_errors_in_1_files_6261": "{1} 파일에서 {0} 오류를 찾았습니다.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "{1}에서 시작하는 동일한 파일에서 {0}개의 오류를 찾았습니다.", "Found_1_error_6216": "1개 오류가 발견되었습니다.", "Found_1_error_Watching_for_file_changes_6193": "1개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", - "Found_1_error_in_1_6259": "{1}에서 1개의 오류를 찾았습니다.", + "Found_1_error_in_0_6259": "{0}에서 1개의 오류를 찾았습니다.", "Found_package_json_at_0_6099": "'{0}'에서 'package.json'을 찾았습니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "'ES3' 또는 'ES5'를 대상으로 할 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "'ES3' 또는 'ES5'를 대상으로 할 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "'ES3' 또는 'ES5'를 대상으로 할 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 모듈은 자동으로 strict 모드가 됩니다.", + "Found_peerDependency_0_with_1_version_6282": "'{1}' 버전이 있는 peerDependency '{0}'을(를) 찾았습니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 모듈은 자동으로 strict 모드가 됩니다.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "반환 형식 주석이 없는 함수 식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "함수 구현이 없거나 선언 바로 다음에 나오지 않습니다.", "Function_implementation_name_must_be_0_2389": "함수 구현 이름이 '{0}'이어야 합니다.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 함수에는 암시적으로 반환 형식 'any'가 포함됩니다.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "함수에 끝 return 문이 없으며 반환 형식에 'undefined'가 포함되지 않습니다.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "함수에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", "Function_not_implemented_95159": "함수가 구현되지 않았습니다.", "Function_overload_must_be_static_2387": "함수 오버로드는 정적이어야 합니다.", "Function_overload_must_not_be_static_2388": "함수 오버로드는 정적이 아니어야 합니다.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "식별자가 필요합니다.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "식별자가 필요합니다. '__esModule'은 ECMAScript 모듈을 변환할 때 내보낸 표식으로 예약되어 있습니다.", "Identifier_or_string_literal_expected_1478": "식별자 또는 문자열 리터럴이 필요합니다.", + "Identifier_string_literal_or_number_literal_expected_1496": "식별자, 문자열 리터럴 또는 숫자 리터럴이 필요합니다.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' 패키지가 이 모듈을 실제로 공개하는 경우 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' 수정을 위한 끌어오기 요청을 보내는 것이 좋습니다.", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' 패키지가 실제로 이 모듈을 노출하는 경우 'declare module {1}';'이(가) 포함된 새 선언(.d.ts) 파일을 추가해 보세요.", "Ignore_this_error_message_90019": "이 오류 메시지 무시", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "'{0}' 인터페이스 구현", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "내보낸 클래스 '{0}'의 Implements 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "런타임에는 'symbol'을 'string'으로 암시적으로 변환할 수 없습니다. 이 식을 'String(...)'으로 래핑하는 것이 좋습니다.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' 가져오기는 이 파일에 사용된 전역 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' 가져오기는 로컬 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", "Import_0_from_1_90013": "\"{1}\"에서 '{0}'을(를) 가져옵니다.", "Import_assertion_values_must_be_string_literal_expressions_2837": "가져오기 어설션 값은 문자열 리터럴 ㅁ이이어야 합니다.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "commonjs 'require' 호출로 변환되는 명령문에는 가져오기 어설션이 허용되지 않습니다.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "가져오기 어설션은 '--module' 옵션이 'esnext' 또는 'nodenext'로 설정된 경우에만 지원됩니다.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 어설션을 사용할 수 없습니다.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "가져오기 어설션은 '--module' 옵션이 'esnext', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "가져오기 어설션은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript 모듈을 대상으로 하는 경우 할당 가져오기를 사용할 수 없습니다. 대신 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' 또는 다른 모듈 형식 사용을 고려하세요.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "가져오기 특성 값은 문자열 리터럴 식이어야 합니다.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 특성을 사용할 수 없습니다.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "가져오기 특성은 '--module' 옵션이 'esnext', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "가져오기 특성은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", "Import_declaration_0_is_using_private_name_1_4000": "가져오기 선언 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 사용하고 있습니다.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "가져오기 선언이 '{0}'의 로컬 선언과 충돌합니다.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "네임스페이스의 가져오기 선언은 모듈을 참조할 수 없습니다.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "내보낸 JavaScript 내에 sourcemap 파일을 포함합니다.", "Includes_imports_of_types_referenced_by_0_90054": "'{0}'에서 참조하는 유형의 가져오기를 포함합니다.", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch를 포함하면 -w는 파일 변경 내용에 대한 현재 프로젝트 감시를 시작합니다. 설정되면 다음을 사용하여 조사식 모드를 구성할 수 있습니다.", + "Incomplete_quantifier_Digit_expected_1505": "불완전한 수량자입니다. 숫자가 필요합니다.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{1}' 형식에 인덱스 시그니처 유형 '{0}'이(가) 없습니다.", "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' 형식의 인덱스 시그니처는 읽기만 허용됩니다.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "병합된 선언 '{0}'의 개별 선언은 모두 내보내 졌거나 모두 로컬이어야 합니다.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "사용량에서 매개 변수 형식 유추", "Infer_this_type_of_0_from_usage_95080": "사용량에서 '{0}'의 'this' 형식 유추", "Infer_type_of_0_from_usage_95011": "사용량에서 '{0}'의 형식 유추", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations에서는 클래스 식의 유추가 지원되지 않습니다.", "Initialize_property_0_in_the_constructor_90020": "생성자에서 속성 '{0}' 초기화", "Initialize_static_property_0_90021": "정적 속성 '{0}' 초기화", "Initializer_for_property_0_2811": "'{0}' 속성에 대한 이니셜라이저", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "인스턴스 멤버 변수 '{0}'의 이니셜라이저는 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "이니셜라이저는 이 바인딩 요소에 대한 값을 제공하지 않으며 바인딩 요소에는 기본값이 없습니다.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "앰비언트 컨텍스트에서는 이니셜라이저가 허용되지 않습니다.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript 프로젝트를 초기화하고 tsconfig.json 파일을 만듭니다.", + "Inline_variable_95184": "인라인 변수", "Insert_command_line_options_and_files_from_a_file_6030": "파일에서 명령줄 옵션 및 파일을 삽입합니다.", "Install_0_95014": "'{0}' 설치", "Install_all_missing_types_packages_95033": "누락된 형식 패키지 모두 설치", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "확대의 모듈 이름이 잘못되었습니다. '{0}' 모듈을 찾을 수 없습니다.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "새 식의 선택적 체인이 잘못되었습니다. '{0}()'을 호출하시겠습니까?", "Invalid_reference_directive_syntax_1084": "'reference' 지시문 구문이 잘못되었습니다.", + "Invalid_syntax_in_decorator_1498": "데코레이터의 구문이 잘못되었습니다.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}'을(를) 잘못 사용했습니다. 해당 항목은 클래스 정적 블록 내에서 사용할 수 없습니다.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}'을(를) 잘못 사용했습니다. 모듈은 자동으로 strict 모드가 됩니다.", "Invalid_use_of_0_in_strict_mode_1100": "strict 모드에서 '{0}'을(를) 잘못 사용했습니다.", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations'의 값이 잘못되었습니다.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory'에 대한 값이 잘못되었습니다. '{0}'이(가) 올바른 식별자 또는 정규화된 이름이 아닙니다.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자 또는 정규화된 이름이 아닙니다.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자가 아닙니다.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "해당 요소 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "해당 인스턴스 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "해당 반환 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "해당 '{0}' 형식은 올바른 JSX 요소 형식이 아닙니다.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}'이(가) 'extends {2}' 절과 일치하지 않습니다.", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}'이(가) 클래스에 연결되어 있지 않습니다.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...'은 시그니처의 마지막 매개 변수에만 나타날 수 있습니다.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 태그의 이름이 '{0}'인데 해당 이름의 매개 변수가 없습니다.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 태그에 '{0}' 이름이 있지만, 해당 이름의 매개 변수가 없습니다. 배열 형식이 있는 경우 '인수'를 일치시킵니다.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 태그는 형식 주석을 포함하거나, '@property' 또는 '@member' 태그 앞에 와야 합니다.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 유형은 문서 주석 내에서만 사용될 수 있습니다.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 형식이 TypeScript 형식으로 이동될 수 있습니다.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 특성에는 비어 있지 않은 '식'만 할당할 수 있습니다.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "포함할 형식 정의가 있는 폴더의 목록입니다.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "런타임에 프로젝트의 구조를 나타내는 결합된 콘텐츠가 있는 루트 폴더의 목록입니다.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "루트 디렉터리 '{1}'에서 '{0}'을(를) 로드하고 있습니다. 후보 위치: '{2}'.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' 폴더에서 '{0}' 모듈을 로드하고 있습니다. 대상 파일 형식은 '{1}'입니다.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "모듈을 파일/폴더로 로드하고 있습니다. 후보 모듈 위치는 '{0}', 대상 파일 형식은 '{1}'입니다.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' 폴더에서 '{0}' 모듈을 로드하고 있습니다. 대상 파일 형식은 '{1}'입니다.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "모듈을 파일/폴더로 로드하고 있습니다. 후보 모듈 위치는 '{0}', 대상 파일 형식은 '{1}'입니다.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "로캘이 또는 - 형식이어야 합니다. 예를 들어 '{0}' 또는 '{1}'입니다.", "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' 프로세스 동안 사용된 로그 경로입니다.", "Longest_matching_prefix_for_0_is_1_6108": "'{0}'에 대해 일치하는 가장 긴 접두사는 '{1}'입니다.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof가 문자열, 숫자 또는 기호 대신 문자열만 반환하도록 합니다. 레거시 옵션입니다.", "Make_super_call_the_first_statement_in_the_constructor_90002": "생성자의 첫 번째 문을 'super()'로 호출", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "매핑된 개체 형식에는 'any' 템플릿 형식이 암시적으로 포함됩니다.", + "Mark_array_literal_as_const_90070": "배열 리터럴을 const로 표시", "Matched_0_condition_1_6403": "'{0}' 조건 '{1}'과(와) 일치합니다.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "기본적으로 일치되는 포함 패턴 '**/*'", "Matched_by_include_pattern_0_in_1_1407": "'{1}'의 포함 패턴 '{0}'(으)로 일치되었습니다.", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' 메서드는 abstract로 표시되어 있으므로 구현이 있을 수 없습니다.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "메서드에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", "Method_not_implemented_95158": "메서드가 구현되지 않았습니다.", "Modifiers_cannot_appear_here_1184": "한정자를 여기에 표시할 수 없습니다.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' 모듈은 '{1}' 플래그를 사용하는 가져온 기본값이어야만 합니다.", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' 모듈에 내보낸 멤버 '{1}'이(가) 없습니다. 대신 '{0}에서 {1} 가져오기'를 사용하시겠습니까?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' 모듈은 이름이 같은 로컬 선언으로 숨겨집니다.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "모듈 '{0}'은(는) 'export ='을 사용하며 'export *'와 함께 사용할 수 없습니다.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "이 파일은 수정되지 않았으므로 '{0}' 모듈은 '{1}'에서 선언된 앰비언트 모듈로 확인되었습니다.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' 모듈은 '{1}'에서 지역으로 선언된 앰비언트 모듈로 확인되었습니다.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--allowArbitraryExtensions'가 설정되지 않았습니다.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "모듈 '{0}'이(가) '{1}'(으)로 확인되었지만 '--jsx'가 설정되지 않았습니다.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--resolveJsonModule'이 사용되지 않았습니다.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "모듈 선언 이름에는 ' 또는 \" 인용 문자열만 사용할 수 있습니다.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs'를 사용한 모듈 확인에 실패했습니다.", "Modules_6244": "모듈", "Move_labeled_tuple_element_modifiers_to_labels_95117": "레이블이 지정된 튜플 요소 한정자를 레이블로 이동", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "기본 내보내기에서 식을 변수로 이동하고 형식 주석을 추가합니다.", "Move_to_a_new_file_95049": "새 파일로 이동", + "Move_to_file_95178": "파일로 이동", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "여러 개의 연속된 숫자 구분 기호는 허용되지 않습니다.", "Multiple_constructor_implementations_are_not_allowed_2392": "여러 생성자 구현은 허용되지 않습니다.", "NEWLINE_6061": "줄 바꿈", "Name_is_not_valid_95136": "이름이 잘못되었습니다.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "명명된 캡처 그룹은 'ES2018' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "이름이 같은 명명된 캡처 그룹은 상호 배타적이어야 합니다.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "명명된 속성 '{0}'의 형식 '{1}' 및 '{2}'이(가) 동일하지 않습니다.", "Namespace_0_has_no_exported_member_1_2694": "'{0}' 네임스페이스에 내보낸 멤버 '{1}'이(가) 없습니다.", "Namespace_must_be_given_a_name_1437": "네임스페이스에 이름을 지정해야 합니다.", "Namespace_name_cannot_be_0_2819": "네임스페이스 이름은 '{0}'일 수 없습니다.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}'이(가) 사용하도록 설정된 경우 전역 스크립트 파일에서는 네임스페이스를 사용할 수 없습니다. 이 파일이 전역 스크립트가 아닌 경우 'moduleDetection'을 'force'로 설정하거나 빈 'export {}' 문을 추가합니다.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "데코레이터와 한정자를 'this' 매개 변수에 적용할 수 없습니다.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "기본 생성자에 지정된 수의 형식 인수가 없습니다.", "No_constituent_of_type_0_is_callable_2755": "'{0}' 형식의 구성원을 호출할 수 없습니다.", "No_constituent_of_type_0_is_constructable_2759": "'{0}' 형식의 구성원을 생성할 수 없습니다.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "이 호출과 일치하는 오버로드가 없습니다.", "No_type_could_be_extracted_from_this_type_node_95134": "이 형식 노드에서 형식을 추출할 수 없습니다.", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "줄임 속성 '{0}'의 범위에 값이 없습니다. 값을 선언하거나 이니셜라이저를 제공합니다.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "비추상 클래스 '{0}'은(는) '{2}' 클래스에서 상속된 추상 멤버 '{1}'을(를) 구현하지 않습니다.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "'{0}' 비추상 클래스는 '{2}' 클래스에서 상속된 추상 멤버 '{1}'을(를) 구현하지 않습니다.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2} 및 {3} 등.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "비추상 클래스 식은 '{1}' 클래스에서 상속된 추상 멤버 '{0}'을(를) 구현하지 않습니다.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1} 및 {2} 등.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "null이 아닌 어설션은 TypeScript 파일에서만 사용할 수 있습니다.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "'baseUrl'이 설정되지 않은 경우 상대 경로가 아닌 경로는 허용되지 않습니다. 선행 './'를 잊으셨습니까?", "Non_simple_parameter_declared_here_1348": "여기서 단순하지 않은 매개 변수가 선언되었습니다.", "Not_all_code_paths_return_a_value_7030": "일부 코드 경로가 값을 반환하지 않습니다.", "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 형식의 일부 구성원을 호출할 수 없습니다.", "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 형식의 일부 구성원을 생성할 수 없습니다.", + "Numbers_out_of_order_in_quantifier_1506": "수량자의 숫자가 순서를 벗어났습니다.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "절대값이 2^53보다 크거나 같은 숫자 리터럴은 너무 커서 정수로 정확하게 표시할 수 없습니다.", "Numeric_separators_are_not_allowed_here_6188": "숫자 구분 기호는 여기에서 허용되지 않습니다.", "Object_is_of_type_unknown_2571": "개체가 '알 수 없는' 형식입니다.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "개체 리터럴은 알려진 속성만 지정할 수 있으며 '{1}' 형식에 '{0}'이(가) 없습니다.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "개체 리터럴은 알려진 속성만 지정할 수 있지만 '{1}' 형식에 '{0}'이(가) 없습니다. '{2}'을(를) 쓰려고 했습니까?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "개체 리터럴의 '{0}' 속성에는 암시적으로 '{1}' 형식이 포함됩니다.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "약식 속성이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "분산 할당이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", "Octal_digit_expected_1178": "8진수가 있어야 합니다.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "8진수 리터럴 형식은 ES2015 구문을 사용해야 합니다. '{0}' 구문을 사용하세요.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "8진수 리터럴은 열거형 멤버 이니셜라이저에서 사용할 수 없습니다. '{0}' 구문을 사용하세요.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "strict 모드에서는 8진수 리터럴이 허용되지 않습니다.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "ECMAScript 5 이상을 대상으로 하는 경우 8진수 리터럴을 사용할 수 없습니다. '{0}' 구문을 사용하세요.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "문자 클래스에서는 8진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다. 이 시퀀스가 이스케이프 시퀀스로 의도된 경우 대신 '{0}' 구문을 사용합니다.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8진수 이스케이프 시퀀스는 허용되지 않습니다. '{0}' 구문을 사용합니다.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8진수 리터럴은 허용되지 않습니다. '{0}' 구문을 사용합니다.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}'의 한 값은 '{2}' 문자열이며, 다른 값은 알 수 없는 숫자 값으로 간주됩니다.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 문에는 단일 변수 선언만 허용됩니다.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 문에는 단일 변수 선언만 허용됩니다.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "void 함수만 'new' 키워드로 호출할 수 있습니다.", "Only_ambient_modules_can_use_quoted_names_1035": "앰비언트 모듈만 따옴표가 붙은 이름을 사용할 수 있습니다.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "'amd' 및 'system' 모듈만 --{0}과(와) 함께 사용할 수 있습니다.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "const 배열만 --isolatedDeclarations를 사용하여 유추할 수 있습니다.", "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 선언 파일만 내보냅니다.", - "Only_named_exports_may_use_export_type_1383": "명명된 내보내기에서만 'export type'을 사용할 수 있습니다.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "숫자 열거형에는 컴퓨팅된 구성원만 사용할 수 있는데 이 식에는 '{0}' 형식이 있습니다. 전체 검사가 필요하지 않은 경우에는 개체 리터럴을 대신 사용해 보세요.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript 파일은 출력하지 않고 d.ts 파일만 출력합니다.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "기본 클래스의 공용 및 보호된 메서드만 'super' 키워드를 통해 액세스할 수 있습니다.", "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' 연산자는 '{1}' 형식에 적용할 수 없습니다.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' 연산자를 '{1}' 및 '{2}' 형식에 적용할 수 없습니다.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "연산자는 문자 클래스 내에서 혼합될 수 없습니다. 대신 중첩 클래스에서 래핑합니다.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "편집할 때 다중 프로젝트 참조 검사에서 프로젝트를 옵트아웃합니다.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' 옵션이 제거되었습니다. 구성에서 제거하세요.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' 옵션은 더 이상 사용되지 않으며 TypeScript {2}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{3}\"'을(를) 지정합니다.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'false' 또는 'null'로 설정할 수 있습니다.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'null'로 설정할 수 있습니다.", + "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' 옵션은 명령줄에서만 지정할 수 있습니다.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0}' 옵션은 '--inlineSourceMap' 옵션 또는 '--sourceMap' 옵션이 제공되는 경우에만 사용할 수 있습니다.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'로 설정된 경우에만 '{0}' 옵션을 사용할 수 있습니다.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "'{0}' 옵션은 'module'이 'preserve' 또는 'es2015' 이상으로 설정된 경우에만 사용할 수 있습니다.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' 옵션이 '{1}'인 경우 '{0}' 옵션을 지정할 수 없습니다.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "'target' 옵션이 'ES3'인 경우 '{0}' 옵션을 지정할 수 없습니다.", "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' 옵션은 '{1}' 옵션과 함께 지정할 수 없습니다.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{1}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' 또는 '{2}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "‘{0}’ 옵션이 제거되었습니다. 구성에서 제거하세요.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}’ 옵션은 더 이상 사용되지 않으며 TypeScript {1}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{2}\"'을(를) 지정합니다.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' 옵션은 중복되므로 '{1}' 옵션으로 지정할 수 없습니다.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "'allowImportingTsExtensions' 옵션은 'noEmit' 또는 'emitDeclarationOnly'가 설정된 경우에만 사용할 수 있습니다.", "Option_build_must_be_the_first_command_line_argument_6369": "'--build' 옵션은 첫 번째 명령줄 인수여야 합니다.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' 옵션은 tsconfig를 사용하거나 단일 파일로 내보내서 지정하거나 '--tsBuildInfoFile' 옵션을 지정할 때만 지정할 수 있습니다.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' 옵션은 '--module' 옵션을 지정하거나 'target' 옵션이 'ES2015' 이상인 경우에만 사용할 수 있습니다.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules'가 사용하도록 설정된 경우 'preserveConstEnums' 옵션을 사용하지 않도록 설정할 수 없습니다.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "'preserveValueImports' 옵션은 'module'이 'es2015' 이상으로 설정된 경우에만 사용할 수 있습니다.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' 옵션이 ‘{1}'(으)로 설정된 경우 'moduleResolution' 옵션을 '{0}'(또는 지정되지 않은 상태로 두어야 함)(으)로 설정해야 합니다.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' 옵션이 '{1}'으(로) 설정된 경우 'module' 옵션을 '{0}'(으)로 설정해야 합니다.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}'이(가) 사용하도록 설정된 경우 'preserveConstEnums' 옵션을 사용하지 않도록 설정할 수 없습니다.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "명령줄에서 'project' 옵션을 원본 파일과 혼합하여 사용할 수 없습니다.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "'--resolveJsonModule' 옵션은 모듈 코드 생성이 'commonjs', 'amd', 'es2015' 또는 'esNext'일 경우에만 지정할 수 있습니다.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' 모듈 확인 전략 없이 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution'이 'classic'으로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module'이 'none', 'system' 또는 'umd'로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "'incremental' 또는 'composite' 옵션을 지정하지 않거나 'tsc -b'를 실행하지 않는 경우 'tsBuildInfoFile' 옵션을 지정할 수 없습니다.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module'이 'UMD', 'AMD' 또는 'System'으로 설정된 경우 'verbatimModuleSyntax' 옵션을 사용할 수 없습니다.", "Options_0_and_1_cannot_be_combined_6370": "'{0}' 및 '{1}' 옵션은 조합할 수 없습니다.", "Options_Colon_6027": "옵션:", "Output_Formatting_6256": "출력 서식 지정", "Output_compiler_performance_information_after_building_6615": "빌드 후 컴파일러 성능 정보를 출력합니다.", "Output_directory_for_generated_declaration_files_6166": "생성된 선언 파일의 출력 디렉터리입니다.", - "Output_file_0_from_project_1_does_not_exist_6309": "프로젝트 '{1}'의 출력 파일 '{0}'이(가) 존재하지 않습니다.", "Output_file_0_has_not_been_built_from_source_file_1_6305": "출력 파일 '{0}'이(가) 소스 파일 '{1}'에서 빌드되지 않았습니다.", "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "매개 변수 선언이 필요합니다.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "매개 변수에 이름이 있지만 형식이 없습니다. '{0}: {1}'을(를) 사용하시겠습니까?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "매개 변수 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "매개 변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "컴파일 후 내보낸 파일의 이름을 출력합니다.", "Print_this_message_6017": "이 메시지를 출력합니다.", "Private_accessor_was_defined_without_a_getter_2806": "프라이빗 접근자가 getter 없이 정의되었습니다.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "'{0}' 프라이빗 필드는 외부 클래스에서 선언되어야 합니다.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "변수 선언에서 프라이빗 식별자를 사용할 수 없습니다.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "클래스 본문 외부에서 프라이빗 식별자를 사용할 수 없습니다.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "비공개 식별자는 클래스 본문에서만 허용되며 클래스 멤버 선언의 일부, 속성 액세스 또는 'in' 식의 왼쪽에서만 사용할 수 있습니다.", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "프라이빗 식별자는 ECMAScript 2015 이상을 대상으로 지정할 때만 사용할 수 있습니다.", "Private_identifiers_cannot_be_used_as_parameters_18009": "프라이빗 식별자는 매개 변수로 사용할 수 없습니다.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "형식 매개 변수에서 프라이빗 또는 보호된 멤버 '{0}'에 액세스할 수 없습니다.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' 프로젝트는 '{1}' 종속성에 오류가 있기 때문에 빌드할 수 없습니다.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트를 빌드할 수 없습니다.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' 프로젝트가 강제로 재구축되고 있습니다.", + "Project_0_is_out_of_date_because_1_6420": "{1} 때문에 ' {0}' 프로젝트가 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "'{1}' buildinfo 파일이 '{2}' 파일이 컴파일의 루트 파일이었지만 더 이상 아님을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "'{1}' buildinfo 파일은 프로그램에서 오류를 보고해야 함을 나타내기 때문에 '{0}' 프로젝트는 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo 파일 '{1}'이(가) 일부 변경 내용이 내보내지지 않았음을 나타내므로 프로젝트 '{0}'은(는) 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "'{1}' buildinfo 파일이 compilerOptions에 변경이 있음을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "'{1}' 종속성이 최신 상태가 아니기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "출력 '{1}'이(가) 최신 입력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "'{1}' 출력 파일이 존재하지 않기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' 프로젝트의 출력이 현재 버전 '{2}'과(와) 다른 '{1}' 버전으로 생성되었기 때문에 이 프로젝트가 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "'{1}' 종속성의 출력이 변경되었기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "'{1}' 파일을 읽는 동안 오류가 발생하여 프로젝트 '{0}'이(가) 만료되었습니다.", "Project_0_is_up_to_date_6361": "'{0}' 프로젝트가 최신 상태입니다.", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "최신 입력 '{1}'이(가) 출력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태입니다.", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "초기화하기 전에 '{0}' 속성이 사용됩니다.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' 속성이 '{1}' 형식에 없을 수 있습니다. '{2}'을(를) 사용하시겠습니까?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 분배 특성의 '{0}' 속성을 대상 속성에 할당할 수 없습니다.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "내보낸 클래스 식의 속성 '{0}'이(가) 프라이빗이 아니거나 보호되지 않을 수 있습니다.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "내보낸 익명 클래스 형식의 '{0}' 속성은 비공개이거나 보호됨이 아닐 수 있습니다.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{0}' 형식의 '{1}' 속성을 '{2}' 인덱스 유형 '{3}'에 할당할 수 없습니다.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' 속성은 '{1}'의 기본 속성을 덮어씁니다. 의도적인 경우 이니셜라이저를 추가합니다. 그렇지 않으면 'declare' 한정자를 추가하거나 중복 선언을 제거합니다.", "Property_assignment_expected_1136": "속성 할당이 필요합니다.", "Property_destructuring_pattern_expected_1180": "속성 구조 파괴 패턴이 필요합니다.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "속성에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", "Property_or_signature_expected_1131": "속성 또는 서명이 필요합니다.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "속성 값은 문자열 리터럴, 숫자 리터럴, 'true', 'false', 'null', 개체 리터럴 또는 배열 리터럴이어야 합니다.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "'ES5' 또는 'ES3'을 대상으로 할 경우 'for-of', spread 및 소멸의 반복 가능한 개체를 완벽히 지원합니다.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5'를 대상으로 할 경우 'for-of', 분산 및 파괴의 반복 가능한 개체를 완벽히 지원합니다.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "내보낸 클래스의 공용 메서드 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "내보낸 클래스의 공용 메서드 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "내보낸 클래스의 공용 메서드의 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "함수 매개 변수를 읽지 않으면 오류가 발생합니다.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "암시된 'any' 형식이 있는 식 및 선언에서 오류를 발생합니다.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "암시된 'any' 형식이 있는 'this' 식에서 오류를 발생합니다.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--isolatedModules' 플래그가 제공될 때 형식을 다시 내보내려면 'export type'을 사용해야 합니다.", + "Range_out_of_order_in_character_class_1517": "문자 클래스의 범위가 순서를 벗어났습니다.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}'을 사용하도록 설정한 경우 형식을 다시 내보내려면 'export type'을 사용해야 합니다.", + "React_components_cannot_include_JSX_namespace_names_2639": "React 구성 요소에는 JSX 네임스페이스 이름을 포함할 수 없습니다.", "Redirect_output_structure_to_the_directory_6006": "출력 구조를 디렉터리로 리디렉션합니다.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript에서 자동으로 로드되는 프로젝트 수를 줄입니다.", "Referenced_project_0_may_not_disable_emit_6310": "참조된 프로젝트 '{0}'은(는) 내보내기를 사용하지 않도록 설정할 수 없습니다.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "참조되는 프로젝트 '{0}'에는 \"composite\": true 설정이 있어야 합니다.", "Referenced_via_0_from_file_1_1400": "'{1}' 파일에서 '{0}'을(를) 통해 참조되었습니다.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "상대 가져오기 경로는 '--moduleResolution'이 'node16' 또는 'nodenext'인 경우 EcmaScript 가져오기의 명시적 파일 확장자가 필요합니다. 가져오기 경로에 확장자를 추가하는 것을 고려하세요.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "상대 가져오기 경로는 '--moduleResolution'이 'node16' 또는 'nodenext'인 경우 EcmaScript 가져오기의 명시적 파일 확장자가 필요합니다. '{0}'을(를) 의미했나요?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. 가져오기 경로에 확장자를 추가하는 것을 고려하세요.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. '{0}'을(를) 사용하시겠습니까?", "Remove_a_list_of_directories_from_the_watch_process_6628": "감시 프로세스에서 디렉터리 목록을 제거합니다.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "감시 모드의 처리에서 파일 목록을 제거합니다.", "Remove_all_unnecessary_override_modifiers_95163": "불필요한 'override' 한정자 모두 제거", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": ".js 파일의 오류를 보고합니다.", "Report_errors_on_unused_locals_6134": "사용되지 않은 로컬 항목에 대한 오류를 보고합니다.", "Report_errors_on_unused_parameters_6135": "사용되지 않은 매개 변수에 대한 오류를 보고합니다.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "다른 도구가 선언 파일을 간단하게 생성할 수 있도록 내보내기에서 충분한 주석이 필요합니다.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "요소 액세스를 사용하려면 인덱스 시그니처의 선언되지 않은 속성이 필요합니다.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "필수 형식 매개 변수는 선택적 형식 매개 변수 다음에 올 수 없습니다.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' 모듈에 대한 해결을 '{1}' 위치의 캐시에서 찾았습니다.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{1}' 위치의 캐시에서 형식 참조 지시어 '{0}'에 대한 해상도가 발견되었습니다.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "상대 이름이 아닌 이름을 확인하지 못했습니다. 최신 노드 확인 기능을 사용하지 않도록 설정하여 npm 라이브러리에 구성 업데이트가 필요한지 확인합니다.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "상대 이름이 아닌 이름을 확인하지 못했습니다. '--moduleResolution bundler'를 사용하여 프로젝트에 구성 업데이트가 필요한지 확인하려고 합니다.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "문자열 값 속성 이름에 대해서만 'keyof'를 확인합니다(숫자나 기호 아님).", + "Resolved_under_condition_0_6414": "조건 '{0}'에서 확인되었습니다.", "Resolving_in_0_mode_with_conditions_1_6402": "조건이 {1}인 {0} 모드에서 확인하는 중입니다.", "Resolving_module_0_from_1_6086": "======== '{1}'에서 '{0}' 모듈을 확인하는 중입니다. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "기본 URL '{1}' - '{2}'을(를) 기준으로 모듈 이름 '{0}'을(를) 확인하는 중입니다.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: 설정되지 않음 ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: '{1}' ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: 설정되지 않음 ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "사용자 지정 typeRoots를 지정하는 프로그램에 대한 형식 참조 지시문을 확인합니다. 'node_modules' 폴더에서 조회를 건너뜁니다.", "Resolving_with_primary_search_path_0_6121": "기본 검색 경로 '{0}'을(를) 사용하여 확인하는 중입니다.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 매개 변수 '{0}'에는 암시적으로 'any[]' 형식이 포함됩니다.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 매개 변수 '{0}'은(는) 암시적으로 'any[]' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.", "Rewrite_all_as_indexed_access_types_95034": "인덱싱된 액세스 형식으로 모두 다시 작성", "Rewrite_as_the_indexed_access_type_0_90026": "인덱싱된 액세스 형식 '{0}'(으)로 다시 작성", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "??의 오른쪽 피연산자는 왼쪽 피연산자가 nullish가 되지 않으므로 연결할 수 없습니다.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "루트 디렉터리를 확인할 수 없어 기본 검색 경로를 건너뜁니다.", "Root_file_specified_for_compilation_1427": "컴파일을 위해 지정된 루트 파일", "STRATEGY_6039": "전략", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "프로젝트의 증분 컴파일을 허용하도록 .tsbuildinfo 파일을 저장합니다.", "Saw_non_matching_condition_0_6405": "비일치 조건 '{0}'을(를) 확인했습니다.", "Scoped_package_detected_looking_in_0_6182": "범위가 지정된 패키지가 검색되었습니다. '{0}'에서 찾습니다.", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "대체 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "기본 설정 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "선택 항목이 유효한 하나의 문 또는 여러 문이 아닙니다.", "Selection_is_not_a_valid_type_node_95133": "선택 영역이 유효한 형식 노드가 아닙니다.", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "내보낸 JavaScript의 JavaScript 언어 버전을 설정하고 호환되는 라이브러리 선언을 포함합니다.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "자세한 진단 정보를 표시합니다.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "빌드될 항목 표시(또는 '--clean'으로 지정된 경우 삭제될 항목 표시)", "Signature_0_must_be_a_type_predicate_1224": "'{0}' 시그니처는 형식 조건자여야 합니다.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "서명 선언은 TypeScript 파일에서만 사용할 수 있습니다.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "업스트림 프로젝트에서 오류 발생 시 다운스트림 프로젝트 빌드를 건너뜁니다.", "Skip_type_checking_all_d_ts_files_6693": "모든 .d.ts 파일의 형식 검사를 건너뜁니다.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript에 포함된 .d.ts 파일의 형식 검사를 건너뜁니다.", "Skip_type_checking_of_declaration_files_6012": "선언 파일 형식 검사를 건너뜁니다.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' 프로젝트의 빌드는 '{1}' 종속성에 오류가 있기 때문에 건너뜁니다.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트의 빌드를 건너뛰는 중", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "절대 URI처럼 보이는 '{0}' 모듈을 건너뛰는 중입니다. 대상 파일 형식은 {1}입니다.", "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", "Source_has_0_element_s_but_target_allows_only_1_2619": "소스에 {0}개 요소가 있지만, 대상에서 {1}개만 허용합니다.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript 감시 모드의 작동 방식을 지정합니다.", "Specify_library_files_to_be_included_in_the_compilation_6079": "컴파일에 포함할 라이브러리 파일을 지정합니다.", "Specify_module_code_generation_6016": "모듈 코드 생성을 지정합니다.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "모듈 확인 전략 지정: 'node'(Node.js) 또는 'classic'(TypeScript 1.6 이전).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*'를 사용할 때 JSX 팩토리 함수를 가져오기 위해 사용되는 모듈 지정자를 지정합니다.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types'와 같은 역할을 하는 여러 폴더를 지정합니다.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "설정이 상속되는 기본 구성 파일에 대한 하나 이상의 경로 또는 노드 모듈 참조를 지정합니다.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "정적 멤버는 클래스 형식 매개 변수를 참조할 수 없습니다.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "정적 속성 '{0}'이(가) 생성자 함수 '{1}'의 기본 제공 속성 'Function.{0}'과(와) 충돌합니다.", "String_literal_expected_1141": "문자열 리터럴이 필요합니다.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' 플래그가 'es2015' 또는 'es2020'으로 설정된 경우 문자열 리터럴 가져오기 및 내보내기 이름은 지원되지 않습니다.", "String_literal_with_double_quotes_expected_1327": "큰따옴표로 묶은 문자열 리터럴이 필요합니다.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "색과 컨텍스트를 사용하여 오류 및 메시지를 스타일화합니다(실험적).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "en 대시가 있는 경우 하위 패턴 플래그가 있어야 합니다.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "후속 속성 선언에 같은 형식이 있어야 합니다. '{0}' 속성이 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "후속 변수 선언에 같은 형식이 있어야 합니다. '{0}' 변수가 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' 패턴에 대한 '{0}' 대체의 형식이 잘못되었습니다. 'string'이 필요한데 '{2}'을(를) 얻었습니다.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "태그가 지정된 템플릿 식은 선택적 체인에서 사용할 수 없습니다.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "대상에서 {0}개 요소만 허용하지만, 소스에 더 많이 있을 수 있습니다.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "대상에 {0}개 요소가 필요하지만, 소스에 더 적게 있을 수 있습니다.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "대상 서명이 너무 적은 인수를 제공합니다. {0} 이상이 필요하지만 {1}을(를) 받았습니다.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 연산자는 'symbol' 유형에 적용될 수 없습니다.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 연산자는 부울 형식에 사용할 수 없습니다. 대신 '{1}'을(를) 사용하세요.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "비동기 반복기의 '{0}' 속성은 메서드여야 합니다.", "The_0_property_of_an_iterator_must_be_a_method_2767": "반복기의 '{0}' 속성은 메서드여야 합니다.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 형식은 할당할 수 있는 다른 형식이 거의 없습니다. 대신 'any' 형식을 사용할까요?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "'arguments' 개체는 ES3 및 ES5의 화살표 함수에서 참조할 수 없습니다. 표준 함수 식을 사용해 보세요.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "'arguments' 개체는 ES3 및 ES5의 비동기 함수 또는 메서드에서 참조할 수 없습니다. 표준 함수 또는 메서드를 사용해 보세요.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "유니코드(u) 플래그와 유니코드 집합(v) 플래그를 동시에 설정할 수 없습니다.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' 개체는 ES5의 화살표 함수에서 참조할 수 없습니다. 표준 함수 식을 사용해 보세요.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' 개체는 ES5의 비동기 함수 또는 메서드에서 참조할 수 없습니다. 표준 함수 또는 메서드를 사용해 보세요.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 문의 본문이 빈 문이면 안 됩니다.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "이 구현에 대한 호출이 성공하겠지만, 오버로드의 구현 시그니처는 외부에 표시되지 않습니다.", "The_character_set_of_the_input_files_6163": "입력 파일의 문자 집합입니다.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}'의 유추된 형식이 일반적으로 직렬화될 수 없는 순환 구조가 있는 형식을 참조합니다. 형식 주석이 필요합니다.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}'의 유추 형식이 액세스할 수 없는 '{1}' 형식을 참조합니다. 형식 주석이 필요합니다.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "이 노드의 유추된 형식이 컴파일러가 직렬화할 최대 길이를 초과합니다. 명시적 형식 주석이 필요합니다.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 선언의 이니셜라이저는 '[Symbol.dispose]()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 선언의 이니셜라이저는 '[Symbol.asyncDispose]()' 또는 '[Symbol.dispose]5D;()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "속성 '{1}'이(가) 여러 구성원에 있고 일부 구성원에서는 프라이빗 상태이므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "일부 구성원에 속성 '{1}'에 충돌하는 형식이 있으므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'내장' 키워드는 컴파일러에서 제공하는 내장 형식을 선언하는 데에만 사용할 수 있습니다.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "마지막 오버로드에서 다음 오류가 발생했습니다.", "The_last_overload_is_declared_here_2771": "여기서 마지막 오버로드가 선언됩니다.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 문의 왼쪽에는 구조 파괴 패턴을 사용할 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for... in' 문의 왼쪽은 'using' 선언일 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for... in' 문의 왼쪽은 'await using' 선언일 수 없습니다.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "산술 연산의 왼쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "할당 식의 왼쪽은 선택적 속성 액세스일 수 없습니다.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "할당 식의 왼쪽은 변수 또는 속성 액세스여야 합니다.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 식의 왼쪽은 오른쪽 '[Symbol.hasInstance]' 메서드의 첫 번째 인수에 할당할 수 있어야 합니다.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 식 왼쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 합니다.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "사용자에게 메시지를 표시할 때 사용되는 로캘입니다(예: 'en-us').", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules에서 검색하고 JavaScript 파일을 로드할 최대 종속성 깊이입니다.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 내보내기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 가져오기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "철자가 동일한 다른 프라이빗 식별자에서 섀도 처리되기 때문에 이 클래스 내의 '{1}' 형식에서 '{0}' 속성에 액세스할 수 없습니다.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' 접근자의 반환 형식은 'set' 접근자 형식에 할당할 수 있어야 합니다.", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "매개 변수 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "속성 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "비동기 함수의 반환 형식은 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다. 'Promise<{0}>'을(를) 쓰려고 했습니까?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 문 오른쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 하는데, 여기에 '{0}' 형식이 있습니다.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "산술 연산 오른쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' 식 오른쪽은 'any' 형식이거나 'Function' 인터페이스 형식에 할당할 수 있는 형식이어야 합니다.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 식의 오른쪽은 'any' 형식, 클래스, 함수 또는 'Function' 인터페이스 형식에 할당할 수 있는 다른 형식이거나 'Symbol.hasInstance' 메서드가 있는 개체 형식이어야 합니다.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 식의 오른쪽은 인스턴스화 식이 아니어야 합니다.", "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 파일의 루트 값은 개체여야 합니다.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0}이(가) 필요합니다.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0} 이상이 필요합니다.", "The_shadowing_declaration_of_0_is_defined_here_18017": "여기서는 '{0}'의 섀도 선언이 정의됩니다.", "The_signature_0_of_1_is_deprecated_6387": "'{1}'의 시그니처 '{0}'은(는) 사용되지 않습니다.", "The_specified_path_does_not_exist_Colon_0_5058": "지정된 경로가 없습니다. '{0}'.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "export 문에 'export type'이 사용될 때 명명된 내보내기에서 'type' 한정자를 사용할 수 없습니다.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "import 문에 'import type'이 사용되는 경우 'type' 수정자는 명명된 가져오기에 사용할 수 없습니다.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "함수 선언의 형식은 함수의 시그니처와 일치해야 합니다.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "이 식의 형식은 불안정한 기능인 'resolution-mode' 어설션 없이 이름을 지정할 수 없습니다. 야간 TypeScript를 사용하여 이 오류를 무음으로 처리합니다. 'npm install -D typescript@next'로 업데이트해 보세요.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "속성 '{0}'을(를) 직렬화할 수 없기 때문에 이 노드의 유형을 직렬화할 수 없습니다.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "비동기 반복기의 '{0}()' 메서드에서 반환하는 형식은 'value' 속성이 있는 형식에 대한 프라미스여야 합니다.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "반복기의 '{0}()' 메서드에 의해 반환되는 형식에는 'value' 속성이 있어야 합니다.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' 문은 지원되지 않습니다. 'with' 블록의 모든 기호가 'any' 형식이 됩니다.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}'에 형식이 있지만 현재 'moduleResolution' 설정에서 이 결과를 확인할 수 없습니다. 'node16', 'nodenext' 또는 'bundler'로 업데이트하는 것이 좋습니다.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}'에 형식이 있지만 package.json \"내보내기\"를 준수할 때 이 결과를 확인할 수 없습니다. '{1}' 라이브러리는 package.json 또는 입력을 업데이트해야 할 수 있습니다.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "이 정규식에는 이름이 '{0}'인 캡처 그룹이 없습니다.", + "There_is_nothing_available_for_repetition_1507": "반복에 사용할 수 있는 항목이 없습니다.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "이 JSX 태그의 '{0}' 속성에는 '{1}' 형식의 자식 하나가 필요하지만, 여러 자식이 제공되었습니다.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "이 JSX 태그의 '{0}' 속성에는 여러 자식이 있어야 하는 '{1}' 형식이 필요하지만, 단일 자식만 제공되었습니다.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 캡처 그룹이 없습니다.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 {0} 캡처 그룹만 있습니다.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "이 이진 식은 nullish가 되지 않습니다. 괄호가 누락되었나요?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "이 문자는 정규식에서 이스케이프할 수 없습니다.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}'이(가) '{1}'과(와) 겹치지 않으므로 이 비교는 의도하지 않은 것 같습니다.", "This_condition_will_always_return_0_2845": "이 조건은 항상 '{0}'을(를) 반환합니다.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript는 값이 아닌 참조로 개체를 비교하므로 이 조건은 항상 '{0}'을(를) 반환합니다.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "이 '{0}'(은)는 항상 정의되어 있으므로 이 조건은 항상 true를 반환합니다.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "함수가 항상 정의되므로 이 조건은 항상 true를 반환합니다. 대신 호출하시겠어요?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "이 생성자 함수는 클래스 선언으로 변환될 수 있습니다.", + "This_expression_is_always_nullish_2871": "이 식은 항상 nullish입니다.", "This_expression_is_not_callable_2349": "이 식은 호출할 수 없습니다.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "이 식은 'get' 접근자이므로 호출할 수 없습니다. '()' 없이 사용하시겠습니까?", "This_expression_is_not_constructable_2351": "이 식은 생성할 수 없습니다.", "This_file_already_has_a_default_export_95130": "이 파일에 이미 기본 내보내기가 있습니다.", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "이 가져오기는 값으로 사용되지 않으며 'importsNotUsedAsValues'가 'error'로 설정되어 있기 때문에 'import type'을 사용해야 합니다.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "확대되는 선언입니다. 확대하는 선언을 같은 파일로 이동하는 것이 좋습니다.", + "This_kind_of_expression_is_always_falsy_2873": "이러한 종류의 식은 항상 거짓입니다.", + "This_kind_of_expression_is_always_truthy_2872": "이러한 종류의 식은 항상 사실입니다.", "This_may_be_converted_to_an_async_function_80006": "비동기 함수로 변환될 수 있습니다.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다. ‘{1}’을(를) 의미했나요?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "이 멤버는 기본 클래스 '{0}'에 선언된 추상 메서드를 재정의하므로 'override' 한정자를 포함해야 합니다.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "이 모듈은 '{0}' 플래그를 켜고 기본 내보내기를 참조하여 ECMAScript 가져오기/내보내기를 통해서만 참조할 수 있습니다.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "이 모듈은 'export ='를 사용하여 선언되었으며 '{0}' 플래그를 사용하는 경우에만 기본 가져오기와 함께 사용할 수 있습니다.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "이 작업은 간소화할 수 있습니다. 이 교대 근무는 '{0} {1} {2}'(와)과 동일합니다.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "이 오버로드는 반환 형식 주석이 없으므로 '{0}' 형식을 암시적으로 반환합니다.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "이 오버로드 시그니처는 해당 구현 시그니처와 호환되지 않습니다.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "이 매개 변수는 'use strict' 지시문에서 사용할 수 없습니다.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "이 매개변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 '@override' 태그가 있는 JSDoc 주석이 있어야 합니다.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "이 매개 변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "이 정규식 플래그는 하위 패턴 내에서 토글할 수 없습니다.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "이 정규식 플래그는 '{0}' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", "This_spread_always_overwrites_this_property_2785": "이 스프레드는 항상 이 속성을 덮어씁니다.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 후행 쉼표 또는 명시적 제약 조건을 추가합니다.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 대신 'as' 식을 사용하세요.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `\"type\": \"module\"` 필드를 '{1}'에 추가하세요.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "이 파일을 ECMAScript 모듈로 변환하려면 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "최상위 'await' 식은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16' 또는 'nodenext'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "최상위 'await' 식은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "최상위 'await using' 문은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 파일의 최상위 수준 선언은 'declare' 또는 'export' 한정자로 시작해야 합니다.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "최상위 'for await' 루프는 'module' 옵션이 'es2022', 'esnext', 'system', 'node16' 또는 'nodenext'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "최상위 'for await' 루프는 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", "Trailing_comma_not_allowed_1009": "후행 쉼표는 허용되지 않습니다.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "각 파일을 별도 모듈로 변환 컴파일합니다('ts.transpileModule'과 유사).", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "해당 항목이 있는 경우 'npm i --save-dev @types/{1}'을(를) 시도하거나, 'declare module '{0}';'을(를) 포함하는 새 선언(.d.ts) 파일 추가", "Trying_other_entries_in_rootDirs_6110": "'rootDirs'의 다른 항목을 시도하는 중입니다.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' 대체를 시도하는 중입니다. 후보 모듈 위치: '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "튜플 멤버는 모두 이름이 있거나 모두 이름이 없어야 합니다.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "길이가 '{1}'인 튜플 형식 '{0}'의 인덱스 '{2}'에 요소가 없습니다.", "Tuple_type_arguments_circularly_reference_themselves_4110": "튜플 형식 인수가 자신을 순환 참조합니다.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' 형식은 '--downlevelIteration' 플래그 또는 'es2015' 이상의 '--target'을 사용하는 경우에만 반복할 수 있습니다.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' 형식에 '{1}' 형식에 대한 일치하는 인덱스 시그니처가 없습니다.", "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' 유형에 '{1}' 유형과 공통적인 속성이 없습니다.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "유형 '{0}'에는 유형 인수 목록을 적용할 수 있는 서명이 없습니다.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "'{0}' 형식은 제네릭이며 읽기용으로만 인덱싱할 수 있습니다.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' 형식에 '{1}' 형식의 {2} 속성이 없습니다.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' 형식에 '{1}' 형식의 {2} 외 {3}개 속성이 없습니다.", "Type_0_is_not_a_constructor_function_type_2507": "'{0}' 형식은 생성자 함수 형식이 아닙니다.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "'{0}' 형식은 Promise 호환 생성자 값을 참조하지 않으므로 ES5/ES3에서 유효한 비동기 함수 반환 형식이 아닙니다.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "'{0}' 형식은 Promise 호환 생성자 값을 참조하지 않으므로 ES5에서 유효한 비동기 함수 반환 형식이 아닙니다.", "Type_0_is_not_an_array_type_2461": "'{0}' 형식은 배열 형식이 아닙니다.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아닙니다.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아니거나, 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 없습니다.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' 형식은 '{1}' 형식에 할당할 수 없습니다. '{2}'을(를) 의미했나요?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' 형식을 '{1}' 형식에 할당할 수 없습니다. 이름이 같은 2개의 서로 다른 형식이 있지만 서로 관련은 없습니다.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "'{0}' 형식은 가변성 주석에 암시된 대로 '{1}' 형식에 할당할 수 없습니다.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "'{0}' 형식은 계산 열거형 멤버 값에 필요하므로 '{1}' 형식에 할당할 수 없습니다.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 유형에 'undefined'를 추가하는 것을 고려하세요.", "Type_0_is_not_comparable_to_type_1_2678": "'{0}' 형식을 '{1}' 형식과 비교할 수 없습니다.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "형식 인수가 필요합니다.", "Type_argument_list_cannot_be_empty_1099": "형식 인수 목록은 비워 둘 수 없습니다.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "형식 인수는 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_arguments_cannot_be_used_here_1342": "형식 인수를 여기에 사용할 수 없습니다.", "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}'의 형식 인수가 자신을 순환 참조합니다.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "형식 어설션 식은 TypeScript 파일에서만 사용할 수 있습니다.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "소스의 {0} 위치에 있는 형식이 대상의 {1} 위치에 있는 형식과 호환되지 않습니다.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "소스의 {0}~{1} 위치에 있는 형식이 대상의 {2} 위치에 있는 형식과 호환되지 않습니다.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' 프라이빗 이름이 포함된 형식은 --isolatedDeclarations와 함께 사용할 수 없습니다.", "Type_declaration_files_to_be_included_in_compilation_6124": "컴파일에 포함할 선언 파일을 입력하세요.", "Type_expected_1110": "형식이 필요합니다.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "유형 가져오기 어설션에는 값이 '가져오기' 또는 '요구'인 정확히 하나의 키('resolution-mode')가 있어야 합니다.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "형식 가져오기 특성에는 값이 'import' 또는 'require'인 키 'resolution-mode'가 정확히 하나 있어야 합니다.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "형식 인스턴스화는 깊이가 매우 깊으며 무한할 수도 있습니다.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "형식은 자체 'then' 메서드의 처리 콜백에서 직간접적으로 참조됩니다.", "Type_library_referenced_via_0_from_file_1_1402": "'{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "식으로 호출된 경우 메서드 데코레이터의 서명을 확인할 수 없습니다.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "식으로 호출된 경우 매개 변수 데코레이터의 서명을 확인할 수 없습니다.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "식으로 호출된 경우 속성 데코레이터의 서명을 확인할 수 없습니다.", + "Undetermined_character_escape_1513": "결정되지 않은 문자 이스케이프입니다.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "예기치 않은 '{0}'입니다. 백슬래시로 이스케이프하려고 하셨나요?", "Unexpected_end_of_text_1126": "예기치 않은 텍스트 끝입니다.", "Unexpected_keyword_or_identifier_1434": "예기치 않은 키워드 또는 식별자입니다.", "Unexpected_token_1012": "예기치 않은 토큰입니다.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "예기치 않은 토큰입니다. '{'>'}' 또는 '>'를 사용하시겠습니까?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "예기치 않은 토큰입니다. '{'}'}' 또는 '}'를 사용하시겠습니까?", "Unexpected_token_expected_1179": "예기치 않은 토큰입니다. '{'가 있어야 합니다.", + "Unicode_escape_sequence_cannot_appear_here_17021": "유니코드 이스케이프 시퀀스는 여기에 나타날 수 없습니다.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "유니코드 이스케이프 시퀀스는 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "유니코드 속성 값 식은 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Unknown_Unicode_property_name_1524": "알 수 없는 유니코드 속성 이름입니다.", + "Unknown_Unicode_property_name_or_value_1529": "알 수 없는 유니코드 속성 이름 또는 값입니다.", + "Unknown_Unicode_property_value_1526": "알 수 없는 유니코드 속성 값입니다.", "Unknown_build_option_0_5072": "알 수 없는 빌드 옵션 '{0}'입니다.", "Unknown_build_option_0_Did_you_mean_1_5077": "알 수 없는 빌드 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", "Unknown_compiler_option_0_5023": "알 수 없는 컴파일러 옵션 '{0}'입니다.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "알 수 없는 컴파일러 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "알 수 없는 키워드 또는 식별자입니다. '{0}'을(를) 의미했나요?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "알 수 없는 옵션 'excludes'입니다. 'exclude'를 사용하시겠습니까?", + "Unknown_regular_expression_flag_1499": "알 수 없는 정규식 플래그입니다.", "Unknown_type_acquisition_option_0_17010": "알 수 없는 형식 인식 옵션 '{0}'입니다.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "알 수 없는 형식 인식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", "Unknown_watch_option_0_5078": "알 수 없는 조사식 옵션 '{0}'입니다.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "사용되지 않는 레이블입니다.", "Unused_ts_expect_error_directive_2578": "사용되지 않는 '@ts-expect-error' 지시문입니다.", "Update_import_from_0_90058": "\"{0}\"에서 가져오기 업데이트", - "Updating_output_of_project_0_6373": "'{0}' 프로젝트의 출력을 업데이트하는 중...", + "Update_modifiers_of_0_90061": "'{0}'의 한정자 업데이트", "Updating_output_timestamps_of_project_0_6359": "'{0}' 프로젝트의 출력 타임스탬프를 업데이트하는 중...", "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' 프로젝트의 변경되지 않은 출력 타임스탬프를 업데이트하는 중...", "Use_0_95174": "`{0}`을(를) 사용합니다.", + "Use_0_instead_5106": "대신 '{0}'을(를) 사용하세요.", "Use_Number_isNaN_in_all_conditions_95175": "모든 조건에서 'Number.isNaN'을 사용합니다.", "Use_element_access_for_0_95145": "'{0}'에 요소 액세스 사용", "Use_element_access_for_all_undeclared_properties_95146": "선언되지 않은 모든 속성에 요소 액세스를 사용합니다.", + "Use_import_type_95180": "'import type' 사용", "Use_synthetic_default_member_95016": "가상 '기본' 멤버를 사용합니다.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "패키지 가져오기를 확인할 때 package.json 'exports' 필드를 사용합니다.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "가져오기를 확인할 때 package.json 'imports' 필드를 사용합니다.", + "Use_type_0_95181": "'형식 {0}' 사용", "Using_0_subpath_1_with_target_2_6404": "'{0}' 하위 경로 '{1}'과(와) 대상 '{2}'을(를) 사용하는 중입니다.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "ECMAScript 5 이상에서만 'for...of' 문에서 문자열을 사용할 수 있습니다.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build를 사용하면 -b가 tsc로 하여금 컴파일러보다 빌드 오케스트레이터처럼 작동하도록 합니다. 이 항목은 {0}에서 더 자세히 알아볼 수 있는 복합 프로젝트를 구축하는 데 사용됩니다.", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "변수 선언이 필요합니다.", "Variable_declaration_list_cannot_be_empty_1123": "변수 선언 목록은 비워 둘 수 없습니다.", "Variable_declaration_not_allowed_at_this_location_1440": "이 위치에서는 변수 선언을 사용할 수 없습니다.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "선언이 여러 개 있는 변수는 인라인 처리할 수 없습니다.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "소스의 {0} 위치에 있는 가변 인자 요소가 대상의 {1} 위치에 있는 요소와 일치하지 않습니다.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "차이 주석은 개체, 함수, 생성자 및 매핑된 형식의 형식 별칭에서만 지원됩니다.", "Version_0_6029": "버전 {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "유형 검사 시 'null' 및 'undefined'를 고려하세요.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "화면을 지우지 않고, 감시 모드의 오래된 콘솔 출력을 유지할지 여부입니다.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "식 컨테이너에서 모든 잘못된 문자 래핑", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "잘못된 데코레이터 식을 모두 괄호로 래핑합니다.", "Wrap_all_object_literal_with_parentheses_95116": "괄호를 사용하여 모든 개체 리터럴 래핑", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX 조각에서 부모가 지정되지 않은 모든 JSX 래핑", "Wrap_in_JSX_fragment_95120": "JSX 조각에서 래핑", + "Wrap_in_parentheses_95194": "괄호로 래핑", "Wrap_invalid_character_in_an_expression_container_95108": "식 컨테이너에서 잘못된 문자 래핑", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "괄호를 사용하여 개체 리터럴이어야 하는 다음 본문 래핑", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "{0}에서 모든 컴파일러 옵션에 대해 알아볼 수 있습니다.", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 및 '{1}' 인덱스 시그니처가 호환되지 않습니다.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 및 '{1}' 작업은 괄호 없이 혼합해서 사용할 수 없습니다.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}'이(가) 두 번 지정되었습니다. 이름이 '{0}'인 특성을 덮어씁니다.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "형식의 끝에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "형식의 시작 부분에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}'은(는) 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}'은(는) 기본 가져오기를 사용해서만 가져올 수 있습니다.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}'은(는) 'require' 호출을 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}'은(는) 'require' 호출을 사용하거나 기본 가져오기를 사용해서만 가져올 수 있습니다.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}'은(는) 'import {1} = require({2})' 또는 기본 가져오기를 사용해서만 가져올 수 있습니다.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}'은(는) 'import {1} = require({2})'를 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "'--isolatedModules'에서는 '{0}'을(를) 컴파일할 수 없는데 전역 스크립트 파일로 간주되기 때문입니다. 모듈로 만들려면 가져오기, 내보내기 또는 빈 'export {}' 문을 추가하세요.", "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}'은(는) JSX 구성 요소로 사용할 수 없습니다.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}'은(는) 'export type'을 사용하여 내보냈으므로 값으로 사용할 수 없습니다.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}'은(는) 'import type'을 사용하여 가져왔으므로 값으로 사용할 수 없습니다.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 구성 요소는 텍스트를 자식 요소로 수락하지 않습니다. JSX의 텍스트는 'string' 형식이지만, '{1}'의 필요한 형식은 '{2}'입니다.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}'은(는) '{1}'과(와) 관련되지 않은 임의의 형식으로 인스턴스화할 수 있습니다.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 선언은 블록 내에서만 선언할 수 있습니다.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 선언은 TypeScript 파일에서만 사용할 수 있습니다.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 선언에는 바인딩 패턴이 없을 수 있습니다.", + "_0_declarations_must_be_initialized_1155": "'{0}' 선언을 초기화해야 합니다.", "_0_expected_1005": "'{0}'이(가) 필요합니다.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}'에는 문자열 형식이 있지만 'isolatedModules'를 사용하도록 설정한 경우 구문으로 인식할 수 있는 문자열 구문이 있어야 합니다.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}'에 내보낸 멤버 '{1}'이(가) 없습니다. '{2}'이(가) 아닌지 확인하세요.", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}'은(는) 암시적으로 '{1}' 반환 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 '{0}'에는 암시적으로 'any' 반환 형식이 포함됩니다.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 인덱스 유형 '{1}'을(를) '{2}' 인텍스 유형 '{3}'에 할당할 수 없습니다.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0}'은(는) 기본 개체이지만 '{1}'은(는) 래퍼 개체입니다. 가능한 경우 '{0}'을(를) 사용하세요.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}'은(는) 유형이며 JavaScript 파일로 가져올 수 없습니다. JSDoc 유형 주석에서 '{1}'을(를) 사용하세요.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "'{0}'은(는) 형식이며, 'preserveValueImports'와 'isolatedModules'를 모두 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}'은(는) 형식이며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}'은(는) '{1}'의 사용되지 않는 이름 변경입니다. 형식 주석으로 사용하려고 했습니까?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}'은(는) '{1}' 형식의 제약 조건에 할당할 수 있지만, '{1}'은(는) '{2}' 제약 조건의 다른 하위 형식으로 인스턴스화할 수 있습니다.", "_0_is_automatically_exported_here_18044": "'{0}'은(는) 여기에서 자동으로 내보내집니다.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "'{0}' 목록은 비워 둘 수 없습니다.", "_0_modifier_already_seen_1030": "'{0}' 한정자가 이미 있습니다.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 한정자는 클래스, 인터페이스 또는 형식 별칭의 형식 매개 변수에만 나타날 수 있습니다.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 한정자는 함수, 메서드 또는 클래스의 형식 매개 변수에만 나타날 수 있습니다.", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 한정자는 생성자 선언에 나타날 수 없습니다.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 한정자는 모듈 또는 네임스페이스 요소에 나타날 수 없습니다.", "_0_modifier_cannot_appear_on_a_parameter_1090": "{0}' 한정자는 매개 변수에 표시될 수 없습니다.", "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 한정자는 형식 멤버에 나타날 수 없습니다.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 한정자는 형식 매개 변수에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 한정자는 'using' 선언에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 한정자는 'await using' 선언에 나타날 수 없습니다.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 한정자는 인덱스 시니그처에 나타날 수 없습니다.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "이 종류의 클래스 요소에는 '{0}' 한정자를 표시할 수 없습니다.", "_0_modifier_cannot_be_used_here_1042": "'{0}' 한정자는 여기에 사용할 수 없습니다.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 한정자는 '{1}' 한정자와 함께 사용할 수 없습니다.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.", "_0_modifier_must_precede_1_modifier_1029": "'{0}' 한정자는 '{1}' 한정자 앞에 와야 합니다.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 뒤에는 중괄호로 묶인 유니코드 속성 값 식이 와야 합니다.", "_0_needs_an_explicit_type_annotation_2782": "'{0}'에는 명시적 형식 주석이 필요합니다.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}'은(는) 형식만 참조하지만, 여기서는 네임스페이스로 사용되고 있습니다.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 es2015 이상으로 변경해 보세요.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}'은(는) UMD 전역을 참조하지만 현재 파일은 모듈입니다. 대신 가져오기를 추가해 보세요.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}'은(는) 값을 참조하지만, 여기서는 형식으로 사용되고 있습니다. 'typeof {0}'을(를) 사용하시겠습니까?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "'{0}'은(는) 형식 전용 선언으로 확인되며, 'preserveValueImports'와 'isolatedModules'를 모두 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "'{0}'은(는) 형식 전용 선언으로 확인되며, 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 다시 내보내기를 사용하여 다시 내보내야 합니다.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}'은(는) 형식 전용 선언으로 확인되며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}'은(는) 형식 전용 선언으로 확인되며, '{1}'을(를) 사용하도록 설정한 경우 형식 전용 다시 내보내기를 사용하여 다시 내보내야 합니다.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}'은(는) 구성 json 파일의 'compilerOptions' 개체 내에 설정해야 합니다.", "_0_tag_already_specified_1223": "'{0}' 태그가 이미 지정되었습니다.", "_0_was_also_declared_here_6203": "여기서도 '{0}'이(가) 선언되었습니다.", @@ -1780,19 +1981,22 @@ "and_here_6204": "및 여기.", "arguments_cannot_be_referenced_in_property_initializers_2815": "'arguments'는 속성 이니셜라이저에서 참조할 수 없습니다.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 가져오기, 내보내기, import.meta, jsx(jsx: react-jsx 포함) 또는 esm 형식(모듈: node16+ 포함)이 있는 파일을 모듈로 처리합니다.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 식은 클래스 정적 블록 내에서 사용할 수 없습니다.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' 식은 파일이 모듈일 경우 해당 파일의 최상위 수준에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 식은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다.", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await'는 이 식의 형식에 영향을 주지 않습니다.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' 문은 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 문은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 옵션이 '{0}'(으)로 설정되어 있습니다. 상대적이지 않은 모듈 이름 '{1}'을(를) 확인하려면 이 값을 사용합니다.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 뒤에는 ASCII 문자가 와야 합니다.", "can_only_be_used_at_the_start_of_a_file_18026": "'#!'는 파일의 시작 부분에서만 사용할 수 있습니다.", "case_or_default_expected_1130": "'case' 또는 'default'가 필요합니다.", "catch_or_finally_expected_1472": "'catch' 또는 'finally'가 필요합니다.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "'const' 선언은 블록 내부에서만 선언할 수 있습니다.", - "const_declarations_must_be_initialized_1155": "'const' 선언은 초기화해야 합니다.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 열거형 멤버 이니셜라이저가 무한 값에 대해 평가되었습니다.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 열거형 멤버 이니셜라이저가 허용되지 않은 'NaN' 값에 대해 평가되었습니다.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "const 열거형 멤버 이니셜라이저에는 리터럴 값과 다른 계산된 열거형 값만 사용할 수 있습니다.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 열거형 멤버 이니셜라이저는 상수 식이어야 합니다.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 열거형은 속성이나 인덱스 액세스 식, 또는 내보내기 할당이나 가져오기 선언의 오른쪽, 또는 형식 쿼리에서만 사용할 수 있습니다.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor'는 매개 변수 속성 이름으로 사용할 수 없습니다.", "constructor_is_a_reserved_word_18012": "'#constructor'는 예약어입니다.", @@ -1811,13 +2015,14 @@ "file_6025": "파일", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' 루프는 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' 루프는 비동기 함수 내부 및 모듈의 최상위에서만 사용할 수 있습니다.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 루프는 클래스 정적 블록 내에서 사용할 수 없습니다.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 및 'set' 접근자는 'this' 매개 변수를 선언할 수 없습니다.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files'를 지정하면 '[]'이고, 그렇지 않으면 '[\"**/*\"]5D;'", "implements_clause_already_seen_1175": "'implements' 절이 이미 있습니다.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 절은 TypeScript 파일에서만 사용할 수 있습니다.", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 선언은 조건 형식의 'extends' 절에서만 사용할 수 있습니다.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' 선언은 블록 내부에서만 선언될 수 있습니다.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 뒤에는 꺾쇠 괄호로 묶인 캡처 그룹 이름이 와야 합니다.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let'은 'let' 또는 'const' 선언에서 이름으로 사용할 수 없습니다.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "모듈 === 'AMD' 또는 'UMD' 또는 'System' 또는 'ES6', 'Classic', 그렇지 않으면 'Node'", "module_system_or_esModuleInterop_6904": "모듈 === \"system\" 또는 esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json'에 '{0}' 버전과 일치하는 'typesVersions' 항목이 없습니다.", "package_json_had_a_falsy_0_field_6220": "'package.json'에 false로 평가되는 '{0}' 필드가 있습니다.", "package_json_has_0_field_1_that_references_2_6101": "'package.json'에 '{2}'을(를) 참조하는 '{0}' 필드 '{1}'이(가) 있습니다.", + "package_json_has_a_peerDependencies_field_6281": "'package.json'에 'peerDependencies' 필드가 있습니다.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json'에 유효한 semver 범위가 아닌 'typesVersions' 항목 '{0}'이(가) 있습니다.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "모듈 이름 '{2}'과(와) 일치하는 패턴을 검색하는 컴파일러 버전 '{1}'과(와) 일치하는 'typesVersions' 항목 '{0}'이(가) 'package.json'에 있습니다.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json'에 버전별 경로 매핑이 포함된 'typesVersions' 필드가 있습니다.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 범위 '{0}'에 '{1}' 지정자의 대상 유형이 잘못되었습니다.", "package_json_scope_0_has_no_imports_defined_6273": "package.json 범위 '{0}'에 정의된 가져오기가 없습니다.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 옵션이 지정되었습니다. 모듈 이름 '{0}'과(와) 일치하는 패턴을 찾는 중입니다.", + "q_is_only_available_inside_character_class_1511": "'\\q'는 문자 클래스 내에서만 사용할 수 있습니다.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 뒤에는 중괄호로 묶인 문자열 대체가 와야 합니다.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 한정자는 속성 선언 또는 인덱스 시그니처에만 나타날 수 있습니다.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 형식 한정자는 배열 및 튜플 리터럴 형식에서만 사용할 수 있습니다.", "require_call_may_be_converted_to_an_import_80005": "'require' 호출이 가져오기로 변환될 수 있습니다.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "'resolution-mode' 어설션은 'moduleResolution'이 'node16' 또는 'nodenext'인 경우에만 지원됩니다.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "‘resolution-mode’ 어설션이 불안정합니다. 야간 TypeScript를 사용하여 이 오류를 차단하십시오. 'npm install -D typescript@next'로 업데이트해 보세요.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode'는 유형 전용 가져오기에만 설정할 수 있습니다.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode'는 유형 가져오기 어설션에 유효한 유일한 키입니다.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode'는 형식 가져오기 특성에 사용할 수 있는 유일한 키입니다.", "resolution_mode_should_be_either_require_or_import_1453": "'해상도 모드'는 '요구' 또는 '가져오기'여야 합니다.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 옵션이 설정되어 있습니다. 상대 모듈 이름 '{0}'을(를) 확인하려면 이 옵션을 사용합니다.", "super_can_only_be_referenced_in_a_derived_class_2335": "파생 클래스에서만 'super'를 참조할 수 있습니다.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this'는 계산된 속성 이름에서 참조할 수 없습니다.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this'는 모듈 또는 네임스페이스 본문에서 참조될 수 없습니다.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "정적 속성 이니셜라이저에서 'this'를 참조할 수 없습니다.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "생성자 인수에서 'this'를 참조할 수 없습니다.", "this_cannot_be_referenced_in_current_location_2332": "현재 위치에서 'this'를 참조할 수 없습니다.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this'에는 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", "true_for_ES2022_and_above_including_ESNext_6930": "ESNext를 포함하여 ES2022 이상의 경우 'true'입니다.", "true_if_composite_false_otherwise_6909": "'composite'이면 'true'이고, 그렇지 않으면 'false'입니다.", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'인 경우 'true'입니다. 그렇지 않으면 'false'입니다.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 컴파일러", "type_Colon_6902": "형식:", "unique_symbol_types_are_not_allowed_here_1335": "여기에서 'unique symbol' 형식은 허용되지 않습니다.", diff --git a/node_modules/typescript/lib/lib.dom.asynciterable.d.ts b/node_modules/typescript/lib/lib.dom.asynciterable.d.ts index 28e1bfd80e..98b96b8160 100644 --- a/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +++ b/node_modules/typescript/lib/lib.dom.asynciterable.d.ts @@ -20,14 +20,22 @@ and limitations under the License. /// Window Async Iterable APIs ///////////////////////////// +interface FileSystemDirectoryHandleAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator; +} + interface FileSystemDirectoryHandle { - [Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>; - entries(): AsyncIterableIterator<[string, FileSystemHandle]>; - keys(): AsyncIterableIterator; - values(): AsyncIterableIterator; + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + entries(): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + keys(): FileSystemDirectoryHandleAsyncIterator; + values(): FileSystemDirectoryHandleAsyncIterator; +} + +interface ReadableStreamAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): ReadableStreamAsyncIterator; } interface ReadableStream { - [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): AsyncIterableIterator; - values(options?: ReadableStreamIteratorOptions): AsyncIterableIterator; + [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; + values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; } diff --git a/node_modules/typescript/lib/lib.dom.d.ts b/node_modules/typescript/lib/lib.dom.d.ts index 079a861575..9ecd352b10 100644 --- a/node_modules/typescript/lib/lib.dom.d.ts +++ b/node_modules/typescript/lib/lib.dom.d.ts @@ -596,6 +596,11 @@ interface GetAnimationsOptions { subtree?: boolean; } +interface GetHTMLOptions { + serializableShadowRoots?: boolean; + shadowRoots?: ShadowRoot[]; +} + interface GetNotificationOptions { tag?: string; } @@ -685,10 +690,6 @@ interface ImageEncodeOptions { type?: string; } -interface ImportMeta { - url: string; -} - interface InputEventInit extends UIEventInit { data?: string | null; dataTransfer?: DataTransfer | null; @@ -862,6 +863,10 @@ interface MediaKeySystemMediaCapability { robustness?: string; } +interface MediaKeysPolicy { + minHdcpVersion?: string; +} + interface MediaMetadataInit { album?: string; artist?: string; @@ -1201,6 +1206,10 @@ interface PointerEventInit extends MouseEventInit { width?: number; } +interface PointerLockOptions { + unadjustedMovement?: boolean; +} + interface PopStateEventInit extends EventInit { state?: any; } @@ -1384,11 +1393,6 @@ interface RTCIceCandidateInit { usernameFragment?: string | null; } -interface RTCIceCandidatePair { - local: RTCIceCandidate; - remote: RTCIceCandidate; -} - interface RTCIceCandidatePairStats extends RTCStats { availableIncomingBitrate?: number; availableOutgoingBitrate?: number; @@ -1520,7 +1524,7 @@ interface RTCRtcpParameters { } interface RTCRtpCapabilities { - codecs: RTCRtpCodecCapability[]; + codecs: RTCRtpCodec[]; headerExtensions: RTCRtpHeaderExtensionCapability[]; } @@ -1531,9 +1535,6 @@ interface RTCRtpCodec { sdpFmtpLine?: string; } -interface RTCRtpCodecCapability extends RTCRtpCodec { -} - interface RTCRtpCodecParameters extends RTCRtpCodec { payloadType: number; } @@ -2228,7 +2229,9 @@ interface ARIAMixin { ariaAtomic: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaAutoComplete) */ ariaAutoComplete: string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaBrailleLabel) */ ariaBrailleLabel: string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaBrailleRoleDescription) */ ariaBrailleRoleDescription: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaBusy) */ ariaBusy: string | null; @@ -2811,7 +2814,6 @@ declare var AudioNode: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam) */ interface AudioParam { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/automationRate) */ automationRate: AutomationRate; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/defaultValue) */ readonly defaultValue: number; @@ -3099,7 +3101,11 @@ declare var BaseAudioContext: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BeforeUnloadEvent) */ interface BeforeUnloadEvent extends Event { - /** @deprecated */ + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BeforeUnloadEvent/returnValue) + */ returnValue: any; } @@ -3407,7 +3413,7 @@ interface CSSImportRule extends CSSRule { readonly layerName: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/media) */ readonly media: MediaList; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/styleSheet) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/stylesheet) */ readonly styleSheet: CSSStyleSheet | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/supportsText) */ readonly supportsText: string | null; @@ -3700,7 +3706,7 @@ declare var CSSPerspective: { interface CSSPropertyRule extends CSSRule { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/inherits) */ readonly inherits: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/initialValue) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/initialvalue) */ readonly initialValue: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/name) */ readonly name: string; @@ -3813,8 +3819,11 @@ declare var CSSScale: { new(x: CSSNumberish, y: CSSNumberish, z?: CSSNumberish): CSSScale; }; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScopeRule) */ interface CSSScopeRule extends CSSGroupingRule { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScopeRule/end) */ readonly end: string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScopeRule/start) */ readonly start: string | null; } @@ -3937,7 +3946,6 @@ interface CSSStyleDeclaration { /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-size) */ backgroundSize: string; baselineShift: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/baseline-source) */ baselineSource: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/block-size) */ blockSize: string; @@ -4119,11 +4127,9 @@ interface CSSStyleDeclaration { columns: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain) */ contain: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-block-size) */ containIntrinsicBlockSize: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-height) */ containIntrinsicHeight: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-inline-size) */ containIntrinsicInlineSize: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-size) */ containIntrinsicSize: string; @@ -4640,7 +4646,9 @@ interface CSSStyleDeclaration { textUnderlinePosition: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-wrap) */ textWrap: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-wrap-mode) */ textWrapMode: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-wrap-style) */ textWrapStyle: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/top) */ top: string; @@ -4675,6 +4683,8 @@ interface CSSStyleDeclaration { vectorEffect: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/vertical-align) */ verticalAlign: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/view-transition-name) */ + viewTransitionName: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/visibility) */ visibility: string; /** @@ -4905,7 +4915,11 @@ interface CSSStyleDeclaration { * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/justify-content) */ webkitJustifyContent: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-line-clamp) */ + /** + * @deprecated This is a legacy alias of `lineClamp`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-line-clamp) + */ webkitLineClamp: string; /** * @deprecated This is a legacy alias of `mask`. @@ -5567,6 +5581,8 @@ interface CanvasShadowStyles { } interface CanvasState { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/isContextLost) */ + isContextLost(): boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/reset) */ reset(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/restore) */ @@ -5764,6 +5780,8 @@ declare var ClipboardEvent: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem) */ interface ClipboardItem { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/presentationStyle) */ + readonly presentationStyle: PresentationStyle; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/types) */ readonly types: ReadonlyArray; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/getType) */ @@ -5773,6 +5791,8 @@ interface ClipboardItem { declare var ClipboardItem: { prototype: ClipboardItem; new(items: Record>, options?: ClipboardItemOptions): ClipboardItem; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/supports_static) */ + supports(type: string): boolean; }; /** @@ -6174,9 +6194,7 @@ interface DOMMatrix extends DOMMatrixReadOnly { rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; rotateFromVectorSelf(x?: number, y?: number): DOMMatrix; rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scale3dSelf) */ scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scaleSelf) */ scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; setMatrixValue(transformList: string): DOMMatrix; skewXSelf(sx?: number): DOMMatrix; @@ -6200,88 +6218,48 @@ declare var WebKitCSSMatrix: typeof DOMMatrix; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly) */ interface DOMMatrixReadOnly { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/a) */ readonly a: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/b) */ readonly b: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/c) */ readonly c: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/d) */ readonly d: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/e) */ readonly e: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/f) */ readonly f: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/is2D) */ readonly is2D: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/isIdentity) */ readonly isIdentity: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m11) */ readonly m11: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m12) */ readonly m12: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m13) */ readonly m13: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m14) */ readonly m14: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m21) */ readonly m21: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m22) */ readonly m22: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m23) */ readonly m23: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m24) */ readonly m24: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m31) */ readonly m31: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m32) */ readonly m32: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m33) */ readonly m33: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m34) */ readonly m34: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m41) */ readonly m41: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m42) */ readonly m42: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m43) */ readonly m43: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m44) */ readonly m44: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipX) */ flipX(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipY) */ flipY(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/inverse) */ inverse(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/multiply) */ multiply(other?: DOMMatrixInit): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotate) */ rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateAxisAngle) */ rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateFromVector) */ rotateFromVector(x?: number, y?: number): DOMMatrix; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale) */ scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale3d) */ scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scaleNonUniform) - */ + /** @deprecated */ scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewX) */ skewX(sx?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewY) */ skewY(sy?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat32Array) */ toFloat32Array(): Float32Array; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat64Array) */ toFloat64Array(): Float64Array; toJSON(): any; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/transformPoint) */ transformPoint(point?: DOMPointInit): DOMPoint; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/translate) */ translate(tx?: number, ty?: number, tz?: number): DOMMatrix; @@ -6353,7 +6331,6 @@ interface DOMPointReadOnly { readonly y: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/z) */ readonly z: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/matrixTransform) */ matrixTransform(matrix?: DOMMatrixInit): DOMPoint; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/toJSON) */ toJSON(): any; @@ -6368,15 +6345,10 @@ declare var DOMPointReadOnly: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad) */ interface DOMQuad { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p1) */ readonly p1: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p2) */ readonly p2: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p3) */ readonly p3: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p4) */ readonly p4: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/getBounds) */ getBounds(): DOMRect; toJSON(): any; } @@ -6399,6 +6371,7 @@ interface DOMRect extends DOMRectReadOnly { declare var DOMRect: { prototype: DOMRect; new(x?: number, y?: number, width?: number, height?: number): DOMRect; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRect/fromRect_static) */ fromRect(other?: DOMRectInit): DOMRect; }; @@ -7143,11 +7116,7 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEve * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/adoptNode) */ adoptNode(node: T): T; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/captureEvents) - */ + /** @deprecated */ captureEvents(): void; /** @deprecated */ caretRangeFromPoint(x: number, y: number): Range | null; @@ -7281,6 +7250,7 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEve createEvent(eventInterface: "SpeechSynthesisEvent"): SpeechSynthesisEvent; createEvent(eventInterface: "StorageEvent"): StorageEvent; createEvent(eventInterface: "SubmitEvent"): SubmitEvent; + createEvent(eventInterface: "TextEvent"): TextEvent; createEvent(eventInterface: "ToggleEvent"): ToggleEvent; createEvent(eventInterface: "TouchEvent"): TouchEvent; createEvent(eventInterface: "TrackEvent"): TrackEvent; @@ -7437,8 +7407,6 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEve * Returns a Boolean value that indicates whether the specified command is in the indeterminate state. * @param commandId String that specifies a command identifier. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandIndeterm) */ queryCommandIndeterm(commandId: string): boolean; /** @@ -7461,18 +7429,14 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEve * Returns the current value of the document, range, or current selection for the given command. * @param commandId String that specifies a command identifier. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandValue) */ queryCommandValue(commandId: string): string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/releaseEvents) - */ + /** @deprecated */ releaseEvents(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess) */ requestStorageAccess(): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/startViewTransition) */ + startViewTransition(callbackOptions?: UpdateCallback): ViewTransition; /** * Writes one or more HTML expressions to a document in the specified window. * @param content Specifies the text and HTML tags to write. @@ -7496,6 +7460,7 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEve declare var Document: { prototype: Document; new(): Document; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/parseHTMLUnsafe_static) */ parseHTMLUnsafe(html: string): Document; }; @@ -7717,7 +7682,7 @@ interface ElementEventMap { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element) */ -interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable { +interface Element extends Node, ARIAMixin, Animatable, ChildNode, NonDocumentTypeChildNode, ParentNode, Slottable { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/attributes) */ readonly attributes: NamedNodeMap; /** @@ -7746,6 +7711,8 @@ interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, Non * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/id) */ id: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) */ + innerHTML: string; /** * Returns the local name. * @@ -7862,6 +7829,8 @@ interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, Non getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf; getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getHTML) */ + getHTML(options?: GetHTMLOptions): string; /** * Returns true if element has an attribute whose qualified name is qualifiedName, and false otherwise. * @@ -7885,7 +7854,7 @@ interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, Non /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentElement) */ insertAdjacentElement(where: InsertPosition, element: Element): Element | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentHTML) */ - insertAdjacentHTML(position: InsertPosition, text: string): void; + insertAdjacentHTML(position: InsertPosition, string: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentText) */ insertAdjacentText(where: InsertPosition, data: string): void; /** @@ -7919,7 +7888,7 @@ interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, Non */ requestFullscreen(options?: FullscreenOptions): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/requestPointerLock) */ - requestPointerLock(): void; + requestPointerLock(options?: PointerLockOptions): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scroll) */ scroll(options?: ScrollToOptions): void; scroll(x: number, y: number): void; @@ -7947,6 +7916,7 @@ interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, Non setAttributeNode(attr: Attr): Attr | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setAttributeNodeNS) */ setAttributeNodeNS(attr: Attr): Attr | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setHTMLUnsafe) */ setHTMLUnsafe(html: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setPointerCapture) */ setPointerCapture(pointerId: number): void; @@ -7976,6 +7946,7 @@ declare var Element: { }; interface ElementCSSInlineStyle { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/attributeStyleMap) */ readonly attributeStyleMap: StylePropertyMap; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/style) */ readonly style: CSSStyleDeclaration; @@ -8090,15 +8061,10 @@ declare var EncodedVideoChunk: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent) */ interface ErrorEvent extends Event { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno) */ readonly colno: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error) */ readonly error: any; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename) */ readonly filename: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno) */ readonly lineno: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message) */ readonly message: string; } @@ -8354,23 +8320,11 @@ declare var EventTarget: { new(): EventTarget; }; -/** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External) - */ +/** @deprecated */ interface External { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External/AddSearchProvider) - */ + /** @deprecated */ AddSearchProvider(): void; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External/IsSearchProviderInstalled) - */ + /** @deprecated */ IsSearchProviderInstalled(): void; } @@ -8810,6 +8764,7 @@ interface Gamepad { readonly mapping: GamepadMappingType; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/timestamp) */ readonly timestamp: DOMHighResTimeStamp; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/vibrationActuator) */ readonly vibrationActuator: GamepadHapticActuator; } @@ -8858,6 +8813,7 @@ declare var GamepadEvent: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadHapticActuator) */ interface GamepadHapticActuator { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadHapticActuator/playEffect) */ playEffect(type: GamepadHapticEffectType, params?: GamepadEffectParameters): Promise; reset(): Promise; } @@ -8913,6 +8869,8 @@ interface GeolocationCoordinates { readonly longitude: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/speed) */ readonly speed: number | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/toJSON) */ + toJSON(): any; } declare var GeolocationCoordinates: { @@ -8930,6 +8888,8 @@ interface GeolocationPosition { readonly coords: GeolocationCoordinates; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPosition/timestamp) */ readonly timestamp: EpochTimeStamp; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPosition/toJSON) */ + toJSON(): any; } declare var GeolocationPosition: { @@ -8975,7 +8935,9 @@ interface GlobalEventHandlersEventMap { "compositionend": CompositionEvent; "compositionstart": CompositionEvent; "compositionupdate": CompositionEvent; + "contextlost": Event; "contextmenu": MouseEvent; + "contextrestored": Event; "copy": ClipboardEvent; "cuechange": Event; "cut": ClipboardEvent; @@ -9089,7 +9051,7 @@ interface GlobalEventHandlers { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/blur_event) */ onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/cancel_event) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/cancel_event) */ oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null; /** * Occurs when playback is possible, but would require further buffering. @@ -9116,6 +9078,8 @@ interface GlobalEventHandlers { onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/close_event) */ onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement/webglcontextlost_event) */ + oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. @@ -9123,6 +9087,8 @@ interface GlobalEventHandlers { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/contextmenu_event) */ oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement/contextrestored_event) */ + oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/copy_event) */ oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/cuechange_event) */ @@ -9273,7 +9239,7 @@ interface GlobalEventHandlers { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/loadstart_event) */ onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/lostpointercapture_event) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/lostpointercapture_event) */ onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null; /** * Fires when the user clicks the object with either mouse button. @@ -9542,15 +9508,11 @@ interface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils { /** * Sets or retrieves the character set used to encode the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/charset) */ charset: string; /** * Sets or retrieves the coordinates of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/coords) */ coords: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/download) */ @@ -9564,8 +9526,6 @@ interface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils { /** * Sets or retrieves the shape of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/name) */ name: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/ping) */ @@ -9583,15 +9543,11 @@ interface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils { /** * Sets or retrieves the relationship between the object and the destination of the link. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/rev) */ rev: string; /** * Sets or retrieves the shape of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/shape) */ shape: string; /** @@ -9625,25 +9581,14 @@ declare var HTMLAnchorElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement) */ interface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils { - /** - * Sets or retrieves a text alternative to the graphic. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/alt) - */ + /** Sets or retrieves a text alternative to the graphic. */ alt: string; - /** - * Sets or retrieves the coordinates of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/coords) - */ + /** Sets or retrieves the coordinates of the object. */ coords: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/download) */ download: string; /** * Sets or gets whether clicks in this region cause action. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/noHref) */ noHref: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/ping) */ @@ -9654,11 +9599,7 @@ interface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils { rel: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/relList) */ readonly relList: DOMTokenList; - /** - * Sets or retrieves the shape of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/shape) - */ + /** Sets or retrieves the shape of the object. */ shape: string; /** * Sets or retrieves the window or frame at which to target content. @@ -9703,8 +9644,6 @@ interface HTMLBRElement extends HTMLElement { /** * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBRElement/clear) */ clear: string; addEventListener(type: K, listener: (this: HTMLBRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -9724,11 +9663,7 @@ declare var HTMLBRElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBaseElement) */ interface HTMLBaseElement extends HTMLElement { - /** - * Gets or sets the baseline URL on which relative links are based. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBaseElement/href) - */ + /** Gets or sets the baseline URL on which relative links are based. */ href: string; /** * Sets or retrieves the window or frame at which to target content. @@ -9756,41 +9691,17 @@ interface HTMLBodyElementEventMap extends HTMLElementEventMap, WindowEventHandle * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement) */ interface HTMLBodyElement extends HTMLElement, WindowEventHandlers { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/aLink) - */ + /** @deprecated */ aLink: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/background) - */ + /** @deprecated */ background: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/bgColor) - */ + /** @deprecated */ bgColor: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/link) - */ + /** @deprecated */ link: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/text) - */ + /** @deprecated */ text: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement/vLink) - */ + /** @deprecated */ vLink: string; addEventListener(type: K, listener: (this: HTMLBodyElement, ev: HTMLBodyElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -9811,49 +9722,21 @@ declare var HTMLBodyElement: { interface HTMLButtonElement extends HTMLElement, PopoverInvokerElement { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/disabled) */ disabled: boolean; - /** - * Retrieves a reference to the form that the object is embedded in. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/form) - */ + /** Retrieves a reference to the form that the object is embedded in. */ readonly form: HTMLFormElement | null; - /** - * Overrides the action attribute (where the data on a form is sent) on the parent form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/formAction) - */ + /** Overrides the action attribute (where the data on a form is sent) on the parent form element. */ formAction: string; - /** - * Used to override the encoding (formEnctype attribute) specified on the form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/formEnctype) - */ + /** Used to override the encoding (formEnctype attribute) specified on the form element. */ formEnctype: string; - /** - * Overrides the submit method attribute previously specified on a form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/formMethod) - */ + /** Overrides the submit method attribute previously specified on a form element. */ formMethod: string; - /** - * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/formNoValidate) - */ + /** Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. */ formNoValidate: boolean; - /** - * Overrides the target attribute on a form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/formTarget) - */ + /** Overrides the target attribute on a form element. */ formTarget: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/labels) */ readonly labels: NodeListOf; - /** - * Sets or retrieves the name of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/name) - */ + /** Sets or retrieves the name of the object. */ name: string; /** * Gets the classification and default behavior of the button. @@ -9861,33 +9744,16 @@ interface HTMLButtonElement extends HTMLElement, PopoverInvokerElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/type) */ type: "submit" | "reset" | "button"; - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/validationMessage) - */ + /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. */ readonly validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/validity) - */ + /** Returns a ValidityState object that represents the validity states of an element. */ readonly validity: ValidityState; - /** - * Sets or retrieves the default or selected value of the control. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/value) - */ + /** Sets or retrieves the default or selected value of the control. */ value: string; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/willValidate) - */ + /** Returns whether an element will successfully validate based on forms validation rules and constraints. */ readonly willValidate: boolean; /** Returns whether a form will validate when it is submitted, without having to submit it. */ checkValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/reportValidity) */ reportValidity(): boolean; /** * Sets a custom error message that is displayed when a form is submitted. @@ -10005,11 +9871,7 @@ interface HTMLCollectionOf extends HTMLCollectionBase { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDListElement) */ interface HTMLDListElement extends HTMLElement { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDListElement/compact) - */ + /** @deprecated */ compact: boolean; addEventListener(type: K, listener: (this: HTMLDListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -10047,11 +9909,7 @@ declare var HTMLDataElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDataListElement) */ interface HTMLDataListElement extends HTMLElement { - /** - * Returns an HTMLCollection of the option elements of the datalist element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDataListElement/options) - */ + /** Returns an HTMLCollection of the option elements of the datalist element. */ readonly options: HTMLCollectionOf; addEventListener(type: K, listener: (this: HTMLDataListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -10138,8 +9996,6 @@ interface HTMLDivElement extends HTMLElement { /** * Sets or retrieves how the object is aligned with adjacent text. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDivElement/align) */ align: string; addEventListener(type: K, listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -10180,6 +10036,7 @@ interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEdit accessKey: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/accessKeyLabel) */ readonly accessKeyLabel: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/autocapitalize) */ autocapitalize: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dir) */ dir: string; @@ -10253,7 +10110,11 @@ interface HTMLEmbedElement extends HTMLElement { * @deprecated */ name: string; - /** Sets or retrieves a URL to be loaded by the object. */ + /** + * Sets or retrieves a URL to be loaded by the object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLEmbedElement/src) + */ src: string; type: string; /** @@ -10280,49 +10141,22 @@ declare var HTMLEmbedElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement) */ interface HTMLFieldSetElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/disabled) */ disabled: boolean; - /** - * Returns an HTMLCollection of the form controls in the element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/elements) - */ + /** Returns an HTMLCollection of the form controls in the element. */ readonly elements: HTMLCollection; - /** - * Retrieves a reference to the form that the object is embedded in. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/form) - */ + /** Retrieves a reference to the form that the object is embedded in. */ readonly form: HTMLFormElement | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/name) */ name: string; - /** - * Returns the string "fieldset". - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/type) - */ + /** Returns the string "fieldset". */ readonly type: string; - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/validationMessage) - */ + /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. */ readonly validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/validity) - */ + /** Returns a ValidityState object that represents the validity states of an element. */ readonly validity: ValidityState; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/willValidate) - */ + /** Returns whether an element will successfully validate based on forms validation rules and constraints. */ readonly willValidate: boolean; /** Returns whether a form will validate when it is submitted, without having to submit it. */ checkValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFieldSetElement/reportValidity) */ reportValidity(): boolean; /** * Sets a custom error message that is displayed when a form is submitted. @@ -10417,11 +10251,7 @@ interface HTMLFormElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/action) */ action: string; - /** - * Specifies whether autocomplete is applied to an editable text field. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/autocomplete) - */ + /** Specifies whether autocomplete is applied to an editable text field. */ autocomplete: AutoFillBase; /** * Retrieves a collection, in source order, of all controls in a given form. @@ -10459,11 +10289,7 @@ interface HTMLFormElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/name) */ name: string; - /** - * Designates a form that is not validated when submitted. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/noValidate) - */ + /** Designates a form that is not validated when submitted. */ noValidate: boolean; rel: string; readonly relList: DOMTokenList; @@ -10473,11 +10299,7 @@ interface HTMLFormElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/target) */ target: string; - /** - * Returns whether a form will validate when it is submitted, without having to submit it. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/checkValidity) - */ + /** Returns whether a form will validate when it is submitted, without having to submit it. */ checkValidity(): boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/reportValidity) */ reportValidity(): boolean; @@ -10508,80 +10330,56 @@ declare var HTMLFormElement: { new(): HTMLFormElement; }; -/** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement) - */ +/** @deprecated */ interface HTMLFrameElement extends HTMLElement { /** * Retrieves the document object of the page or frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/contentDocument) */ readonly contentDocument: Document | null; /** * Retrieves the object of the specified. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/contentWindow) */ readonly contentWindow: WindowProxy | null; /** * Sets or retrieves whether to display a border for the frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/frameBorder) */ frameBorder: string; /** * Sets or retrieves a URI to a long description of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/longDesc) */ longDesc: string; /** * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/marginHeight) */ marginHeight: string; /** * Sets or retrieves the left and right margin widths before displaying the text in a frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/marginWidth) */ marginWidth: string; /** * Sets or retrieves the frame name. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/name) */ name: string; /** * Sets or retrieves whether the user can resize the frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/noResize) */ noResize: boolean; /** * Sets or retrieves whether the frame can be scrolled. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/scrolling) */ scrolling: string; /** * Sets or retrieves a URL to be loaded by the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFrameElement/src) */ src: string; addEventListener(type: K, listener: (this: HTMLFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -10690,8 +10488,6 @@ interface HTMLHeadingElement extends HTMLElement { /** * Sets or retrieves a value that indicates the table alignment. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHeadingElement/align) */ align: string; addEventListener(type: K, listener: (this: HTMLHeadingElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -10828,10 +10624,9 @@ interface HTMLIFrameElement extends HTMLElement { /** * Sets or retrieves how the object is aligned with adjacent text. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/align) */ align: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/allow) */ allow: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/allowFullscreen) */ allowFullscreen: boolean; @@ -10850,8 +10645,6 @@ interface HTMLIFrameElement extends HTMLElement { /** * Sets or retrieves whether to display a border for the frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/frameBorder) */ frameBorder: string; /** @@ -10865,22 +10658,16 @@ interface HTMLIFrameElement extends HTMLElement { /** * Sets or retrieves a URI to a long description of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/longDesc) */ longDesc: string; /** * Sets or retrieves the top and bottom margin heights before displaying the text in a frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/marginHeight) */ marginHeight: string; /** * Sets or retrieves the left and right margin widths before displaying the text in a frame. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/marginWidth) */ marginWidth: string; /** @@ -10891,12 +10678,11 @@ interface HTMLIFrameElement extends HTMLElement { name: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/referrerPolicy) */ referrerPolicy: ReferrerPolicy; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/sandbox) */ readonly sandbox: DOMTokenList; /** * Sets or retrieves whether the frame can be scrolled. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLIFrameElement/scrolling) */ scrolling: string; /** @@ -11001,11 +10787,7 @@ interface HTMLImageElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/longDesc) */ longDesc: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/lowsrc) - */ + /** @deprecated */ lowsrc: string; /** * Sets or retrieves the name of the object. @@ -11089,22 +10871,14 @@ interface HTMLInputElement extends HTMLElement, PopoverInvokerElement { align: string; /** Sets or retrieves a text alternative to the graphic. */ alt: string; - /** - * Specifies whether autocomplete is applied to an editable text field. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/autocomplete) - */ + /** Specifies whether autocomplete is applied to an editable text field. */ autocomplete: AutoFill; capture: string; /** Sets or retrieves the state of the check box or radio button. */ checked: boolean; /** Sets or retrieves the state of the check box or radio button. */ defaultChecked: boolean; - /** - * Sets or retrieves the initial contents of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/defaultValue) - */ + /** Sets or retrieves the initial contents of the object. */ defaultValue: string; dirName: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/disabled) */ @@ -11117,71 +10891,30 @@ interface HTMLInputElement extends HTMLElement, PopoverInvokerElement { files: FileList | null; /** Retrieves a reference to the form that the object is embedded in. */ readonly form: HTMLFormElement | null; - /** - * Overrides the action attribute (where the data on a form is sent) on the parent form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/formAction) - */ + /** Overrides the action attribute (where the data on a form is sent) on the parent form element. */ formAction: string; - /** - * Used to override the encoding (formEnctype attribute) specified on the form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/formEnctype) - */ + /** Used to override the encoding (formEnctype attribute) specified on the form element. */ formEnctype: string; - /** - * Overrides the submit method attribute previously specified on a form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/formMethod) - */ + /** Overrides the submit method attribute previously specified on a form element. */ formMethod: string; - /** - * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/formNoValidate) - */ + /** Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option. */ formNoValidate: boolean; - /** - * Overrides the target attribute on a form element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/formTarget) - */ + /** Overrides the target attribute on a form element. */ formTarget: string; - /** - * Sets or retrieves the height of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/height) - */ + /** Sets or retrieves the height of the object. */ height: number; /** When set, overrides the rendering of checkbox controls so that the current value is not visible. */ indeterminate: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/labels) */ readonly labels: NodeListOf | null; - /** - * Specifies the ID of a pre-defined datalist of options for an input element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/list) - */ + /** Specifies the ID of a pre-defined datalist of options for an input element. */ readonly list: HTMLDataListElement | null; - /** - * Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/max) - */ + /** Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field. */ max: string; - /** - * Sets or retrieves the maximum number of characters that the user can enter in a text control. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/maxLength) - */ + /** Sets or retrieves the maximum number of characters that the user can enter in a text control. */ maxLength: number; - /** - * Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/min) - */ + /** Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field. */ min: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/minLength) */ minLength: number; /** * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. @@ -11191,24 +10924,12 @@ interface HTMLInputElement extends HTMLElement, PopoverInvokerElement { multiple: boolean; /** Sets or retrieves the name of the object. */ name: string; - /** - * Gets or sets a string containing a regular expression that the user's input must match. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/pattern) - */ + /** Gets or sets a string containing a regular expression that the user's input must match. */ pattern: string; - /** - * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/placeholder) - */ + /** Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. */ placeholder: string; readOnly: boolean; - /** - * When present, marks an element that can't be submitted without a value. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/required) - */ + /** When present, marks an element that can't be submitted without a value. */ required: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/selectionDirection) */ selectionDirection: "forward" | "backward" | "none" | null; @@ -11240,23 +10961,11 @@ interface HTMLInputElement extends HTMLElement, PopoverInvokerElement { * @deprecated */ useMap: string; - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/validationMessage) - */ + /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. */ readonly validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/validity) - */ + /** Returns a ValidityState object that represents the validity states of an element. */ readonly validity: ValidityState; - /** - * Returns the value of the data at the cursor's current position. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/value) - */ + /** Returns the value of the data at the cursor's current position. */ value: string; /** Returns a Date object representing the form control's value, if applicable; otherwise, returns null. Can be set, to change the value. Throws an "InvalidStateError" DOMException if the control isn't date- or time-based. */ valueAsDate: Date | null; @@ -11266,17 +10975,9 @@ interface HTMLInputElement extends HTMLElement, PopoverInvokerElement { readonly webkitEntries: ReadonlyArray; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/webkitdirectory) */ webkitdirectory: boolean; - /** - * Sets or retrieves the width of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/width) - */ + /** Sets or retrieves the width of the object. */ width: number; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/willValidate) - */ + /** Returns whether an element will successfully validate based on forms validation rules and constraints. */ readonly willValidate: boolean; /** * Returns whether a form will validate when it is submitted, without having to submit it. @@ -11430,14 +11131,11 @@ interface HTMLLinkElement extends HTMLElement, LinkStyle { charset: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/crossOrigin) */ crossOrigin: string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/disabled) */ disabled: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/fetchPriority) */ fetchPriority: string; - /** - * Sets or retrieves a destination URL or an anchor point. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/href) - */ + /** Sets or retrieves a destination URL or an anchor point. */ href: string; /** * Sets or retrieves the language code of the object. @@ -11447,6 +11145,7 @@ interface HTMLLinkElement extends HTMLElement, LinkStyle { hreflang: string; imageSizes: string; imageSrcset: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/integrity) */ integrity: string; /** Sets or retrieves the media type. */ media: string; @@ -11465,14 +11164,17 @@ interface HTMLLinkElement extends HTMLElement, LinkStyle { * @deprecated */ rev: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/sizes) */ readonly sizes: DOMTokenList; /** * Sets or retrieves the window or frame at which to target content. * @deprecated */ target: string; - /** Sets or retrieves the MIME type of the object. */ + /** + * Sets or retrieves the MIME type of the object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement/type) + */ type: string; addEventListener(type: K, listener: (this: HTMLLinkElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -11491,11 +11193,7 @@ declare var HTMLLinkElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMapElement) */ interface HTMLMapElement extends HTMLElement { - /** - * Retrieves a collection of the area objects defined for the given map object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMapElement/areas) - */ + /** Retrieves a collection of the area objects defined for the given map object. */ readonly areas: HTMLCollection; /** * Sets or retrieves the name of the object. @@ -11656,7 +11354,6 @@ interface HTMLMediaElement extends HTMLElement { readonly networkState: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/encrypted_event) */ onencrypted: ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/waitingforkey_event) */ onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null; /** * Gets a flag that specifies whether playback is paused. @@ -11670,11 +11367,7 @@ interface HTMLMediaElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/playbackRate) */ playbackRate: number; - /** - * Gets TimeRanges for the current media resource that has been played. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/played) - */ + /** Gets TimeRanges for the current media resource that has been played. */ readonly played: TimeRanges; /** * Gets or sets a value indicating what data should be preloaded, if any. @@ -11694,11 +11387,7 @@ interface HTMLMediaElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/seekable) */ readonly seekable: TimeRanges; - /** - * Gets a flag that indicates whether the client is currently moving to a new playback position in the media resource. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/seeking) - */ + /** Gets a flag that indicates whether the client is currently moving to a new playback position in the media resource. */ readonly seeking: boolean; /** * Available only in secure contexts. @@ -11722,7 +11411,6 @@ interface HTMLMediaElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/volume) */ volume: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/addTextTrack) */ addTextTrack(kind: TextTrackKind, label?: string, language?: string): TextTrack; /** * Returns a string that specifies whether the client can play a given media resource type. @@ -11793,11 +11481,7 @@ declare var HTMLMediaElement: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMenuElement) */ interface HTMLMenuElement extends HTMLElement { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMenuElement/compact) - */ + /** @deprecated */ compact: boolean; addEventListener(type: K, listener: (this: HTMLMenuElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -11860,19 +11544,13 @@ declare var HTMLMetaElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement) */ interface HTMLMeterElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/high) */ high: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/labels) */ readonly labels: NodeListOf; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/low) */ low: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/max) */ max: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/min) */ min: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/optimum) */ optimum: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMeterElement/value) */ value: number; addEventListener(type: K, listener: (this: HTMLMeterElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -11891,17 +11569,9 @@ declare var HTMLMeterElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLModElement) */ interface HTMLModElement extends HTMLElement { - /** - * Sets or retrieves reference information about the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLModElement/cite) - */ + /** Sets or retrieves reference information about the object. */ cite: string; - /** - * Sets or retrieves the date and time of a modification to the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLModElement/dateTime) - */ + /** Sets or retrieves the date and time of a modification to the object. */ dateTime: string; addEventListener(type: K, listener: (this: HTMLModElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -11920,11 +11590,7 @@ declare var HTMLModElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOListElement) */ interface HTMLOListElement extends HTMLElement { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOListElement/compact) - */ + /** @deprecated */ compact: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOListElement/reversed) */ reversed: boolean; @@ -11953,44 +11619,28 @@ declare var HTMLOListElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement) */ interface HTMLObjectElement extends HTMLElement { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/align) - */ + /** @deprecated */ align: string; /** * Sets or retrieves a character string that can be used to implement your own archive functionality for the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/archive) */ archive: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/border) - */ + /** @deprecated */ border: string; /** * Sets or retrieves the URL of the file containing the compiled Java class. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/code) */ code: string; /** * Sets or retrieves the URL of the component. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/codeBase) */ codeBase: string; /** * Sets or retrieves the Internet media type for the code associated with the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/codeType) */ codeType: string; /** @@ -12007,11 +11657,7 @@ interface HTMLObjectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/data) */ data: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/declare) - */ + /** @deprecated */ declare: boolean; /** * Retrieves a reference to the form that the object is embedded in. @@ -12025,11 +11671,7 @@ interface HTMLObjectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/height) */ height: string; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/hspace) - */ + /** @deprecated */ hspace: number; /** * Sets or retrieves the name of the object. @@ -12040,8 +11682,6 @@ interface HTMLObjectElement extends HTMLElement { /** * Sets or retrieves a message to be displayed while an object is loading. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/standby) */ standby: string; /** @@ -12069,11 +11709,7 @@ interface HTMLObjectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/validity) */ readonly validity: ValidityState; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/vspace) - */ + /** @deprecated */ vspace: number; /** * Sets or retrieves the width of the object. @@ -12093,9 +11729,7 @@ interface HTMLObjectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/checkValidity) */ checkValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/getSVGDocument) */ getSVGDocument(): Document | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLObjectElement/reportValidity) */ reportValidity(): boolean; /** * Sets a custom error message that is displayed when a form is submitted. @@ -12121,13 +11755,8 @@ declare var HTMLObjectElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptGroupElement) */ interface HTMLOptGroupElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptGroupElement/disabled) */ disabled: boolean; - /** - * Sets or retrieves a value that you can use to implement your own label functionality for the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptGroupElement/label) - */ + /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */ label: string; addEventListener(type: K, listener: (this: HTMLOptGroupElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -12146,49 +11775,20 @@ declare var HTMLOptGroupElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement) */ interface HTMLOptionElement extends HTMLElement { - /** - * Sets or retrieves the status of an option. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/defaultSelected) - */ + /** Sets or retrieves the status of an option. */ defaultSelected: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/disabled) */ disabled: boolean; - /** - * Retrieves a reference to the form that the object is embedded in. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/form) - */ + /** Retrieves a reference to the form that the object is embedded in. */ readonly form: HTMLFormElement | null; - /** - * Sets or retrieves the ordinal position of an option in a list box. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/index) - */ + /** Sets or retrieves the ordinal position of an option in a list box. */ readonly index: number; - /** - * Sets or retrieves a value that you can use to implement your own label functionality for the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/label) - */ + /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */ label: string; - /** - * Sets or retrieves whether the option in the list box is the default item. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/selected) - */ + /** Sets or retrieves whether the option in the list box is the default item. */ selected: boolean; - /** - * Sets or retrieves the text string specified by the option tag. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/text) - */ + /** Sets or retrieves the text string specified by the option tag. */ text: string; - /** - * Sets or retrieves the value which is returned to the server when the form control is submitted. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionElement/value) - */ + /** Sets or retrieves the value which is returned to the server when the form control is submitted. */ value: string; addEventListener(type: K, listener: (this: HTMLOptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -12213,16 +11813,12 @@ interface HTMLOptionsCollection extends HTMLCollectionOf { * When set to a smaller number, truncates the number of option elements in the corresponding container. * * When set to a greater number, adds new blank option elements to that container. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionsCollection/length) */ length: number; /** * Returns the index of the first selected item, if any, or −1 if there is no selected item. * * Can be set, to change the selection. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionsCollection/selectedIndex) */ selectedIndex: number; /** @@ -12233,15 +11829,9 @@ interface HTMLOptionsCollection extends HTMLCollectionOf { * If before is omitted, null, or a number out of range, then element will be added at the end of the list. * * This method will throw a "HierarchyRequestError" DOMException if element is an ancestor of the element into which it is to be inserted. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionsCollection/add) */ add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void; - /** - * Removes the item with index index from the collection. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOptionsCollection/remove) - */ + /** Removes the item with index index from the collection. */ remove(index: number): void; } @@ -12271,41 +11861,25 @@ interface HTMLOrSVGElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement) */ interface HTMLOutputElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/defaultValue) */ defaultValue: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/form) */ readonly form: HTMLFormElement | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/htmlFor) */ readonly htmlFor: DOMTokenList; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/labels) */ readonly labels: NodeListOf; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/name) */ name: string; - /** - * Returns the string "output". - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/type) - */ + /** Returns the string "output". */ readonly type: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/validationMessage) */ readonly validationMessage: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/validity) */ readonly validity: ValidityState; /** * Returns the element's current value. * * Can be set, to change the value. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/value) */ value: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/willValidate) */ readonly willValidate: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/checkValidity) */ checkValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/reportValidity) */ reportValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOutputElement/setCustomValidity) */ setCustomValidity(error: string): void; addEventListener(type: K, listener: (this: HTMLOutputElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -12327,8 +11901,6 @@ interface HTMLParagraphElement extends HTMLElement { /** * Sets or retrieves how the object is aligned with adjacent text. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParagraphElement/align) */ align: string; addEventListener(type: K, listener: (this: HTMLParagraphElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -12352,29 +11924,21 @@ interface HTMLParamElement extends HTMLElement { /** * Sets or retrieves the name of an input parameter for an element. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParamElement/name) */ name: string; /** * Sets or retrieves the content type of the resource designated by the value attribute. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParamElement/type) */ type: string; /** * Sets or retrieves the value of an input parameter for an element. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParamElement/value) */ value: string; /** * Sets or retrieves the data type of the value attribute. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParamElement/valueType) */ valueType: string; addEventListener(type: K, listener: (this: HTMLParamElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -12415,8 +11979,6 @@ interface HTMLPreElement extends HTMLElement { /** * Sets or gets a value that you can use to implement your own width functionality for the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLPreElement/width) */ width: number; addEventListener(type: K, listener: (this: HTMLPreElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -12473,11 +12035,7 @@ declare var HTMLProgressElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLQuoteElement) */ interface HTMLQuoteElement extends HTMLElement { - /** - * Sets or retrieves reference information about the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLQuoteElement/cite) - */ + /** Sets or retrieves reference information about the object. */ cite: string; addEventListener(type: K, listener: (this: HTMLQuoteElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -12496,6 +12054,7 @@ declare var HTMLQuoteElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement) */ interface HTMLScriptElement extends HTMLElement { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/async) */ async: boolean; /** * Sets or retrieves the character set used to encode the object. @@ -12504,28 +12063,47 @@ interface HTMLScriptElement extends HTMLElement { charset: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/crossOrigin) */ crossOrigin: string | null; - /** Sets or retrieves the status of the script. */ + /** + * Sets or retrieves the status of the script. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/defer) + */ defer: boolean; /** * Sets or retrieves the event for which the script is written. * @deprecated */ event: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/fetchPriority) */ fetchPriority: string; /** * Sets or retrieves the object that is bound to the event script. * @deprecated */ htmlFor: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/integrity) */ integrity: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/noModule) */ noModule: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/referrerPolicy) */ referrerPolicy: string; - /** Retrieves the URL to an external file that contains the source code or data. */ + /** + * Retrieves the URL to an external file that contains the source code or data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/src) + */ src: string; - /** Retrieves or sets the text of the object as a string. */ + /** + * Retrieves or sets the text of the object as a string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/text) + */ text: string; - /** Sets or retrieves the MIME type for the associated scripting engine. */ + /** + * Sets or retrieves the MIME type for the associated scripting engine. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement/type) + */ type: string; addEventListener(type: K, listener: (this: HTMLScriptElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -12546,7 +12124,6 @@ declare var HTMLScriptElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement) */ interface HTMLSelectElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/autocomplete) */ autocomplete: AutoFill; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/disabled) */ disabled: boolean; @@ -12558,23 +12135,11 @@ interface HTMLSelectElement extends HTMLElement { readonly form: HTMLFormElement | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/labels) */ readonly labels: NodeListOf; - /** - * Sets or retrieves the number of objects in a collection. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/length) - */ + /** Sets or retrieves the number of objects in a collection. */ length: number; - /** - * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/multiple) - */ + /** Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. */ multiple: boolean; - /** - * Sets or retrieves the name of the object. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/name) - */ + /** Sets or retrieves the name of the object. */ name: string; /** * Returns an HTMLOptionsCollection of the list of options. @@ -12582,11 +12147,7 @@ interface HTMLSelectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/options) */ readonly options: HTMLOptionsCollection; - /** - * When present, marks an element that can't be submitted without a value. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/required) - */ + /** When present, marks an element that can't be submitted without a value. */ required: boolean; /** * Sets or retrieves the index of the selected option in a select object. @@ -12596,11 +12157,7 @@ interface HTMLSelectElement extends HTMLElement { selectedIndex: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/selectedOptions) */ readonly selectedOptions: HTMLCollectionOf; - /** - * Sets or retrieves the number of rows in the list box. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/size) - */ + /** Sets or retrieves the number of rows in the list box. */ size: number; /** * Retrieves the type of select control based on the value of the MULTIPLE attribute. @@ -12608,17 +12165,9 @@ interface HTMLSelectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/type) */ readonly type: "select-one" | "select-multiple"; - /** - * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/validationMessage) - */ + /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting. */ readonly validationMessage: string; - /** - * Returns a ValidityState object that represents the validity states of an element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/validity) - */ + /** Returns a ValidityState object that represents the validity states of an element. */ readonly validity: ValidityState; /** * Sets or retrieves the value which is returned to the server when the form control is submitted. @@ -12626,11 +12175,7 @@ interface HTMLSelectElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/value) */ value: string; - /** - * Returns whether an element will successfully validate based on forms validation rules and constraints. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/willValidate) - */ + /** Returns whether an element will successfully validate based on forms validation rules and constraints. */ readonly willValidate: boolean; /** * Adds an element to the areas, controlRange, or options collection. @@ -12669,7 +12214,6 @@ interface HTMLSelectElement extends HTMLElement { */ remove(): void; remove(index: number): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSelectElement/reportValidity) */ reportValidity(): boolean; /** * Sets a custom error message that is displayed when a form is submitted. @@ -12721,27 +12265,13 @@ declare var HTMLSlotElement: { interface HTMLSourceElement extends HTMLElement { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/height) */ height: number; - /** - * Gets or sets the intended media type of the media source. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/media) - */ + /** Gets or sets the intended media type of the media source. */ media: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/sizes) */ sizes: string; - /** - * The address or URL of the a media resource that is to be considered. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/src) - */ + /** The address or URL of the a media resource that is to be considered. */ src: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/srcset) */ srcset: string; - /** - * Gets or sets the MIME type of a media resource. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/type) - */ + /** Gets or sets the MIME type of a media resource. */ type: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSourceElement/width) */ width: number; @@ -12818,8 +12348,6 @@ interface HTMLTableCaptionElement extends HTMLElement { /** * Sets or retrieves the alignment of the caption or legend. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCaptionElement/align) */ align: string; addEventListener(type: K, listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -12855,8 +12383,6 @@ interface HTMLTableCellElement extends HTMLElement { /** * Sets or retrieves a comma-delimited list of conceptual categories associated with the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement/axis) */ axis: string; /** @@ -12898,8 +12424,6 @@ interface HTMLTableCellElement extends HTMLElement { /** * Sets or retrieves the height of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement/height) */ height: string; /** @@ -12930,8 +12454,6 @@ interface HTMLTableCellElement extends HTMLElement { /** * Sets or retrieves the width of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement/width) */ width: string; addEventListener(type: K, listener: (this: HTMLTableCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -12985,8 +12507,6 @@ interface HTMLTableColElement extends HTMLElement { /** * Sets or retrieves the width of the object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableColElement/width) */ width: string; addEventListener(type: K, listener: (this: HTMLTableColElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -13190,8 +12710,6 @@ interface HTMLTableRowElement extends HTMLElement { /** * Sets or retrieves how the object is aligned with adjacent text. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement/align) */ align: string; /** @@ -13230,11 +12748,7 @@ interface HTMLTableRowElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement/sectionRowIndex) */ readonly sectionRowIndex: number; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement/vAlign) - */ + /** @deprecated */ vAlign: string; /** * Removes the specified cell from the table row, as well as from the cells collection. @@ -13270,8 +12784,6 @@ interface HTMLTableSectionElement extends HTMLElement { /** * Sets or retrieves a value that indicates the table alignment. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement/align) */ align: string; /** @@ -13292,11 +12804,7 @@ interface HTMLTableSectionElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement/rows) */ readonly rows: HTMLCollectionOf; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement/vAlign) - */ + /** @deprecated */ vAlign: string; /** * Removes the specified row (tr) from the element and from the rows collection. @@ -13335,7 +12843,14 @@ interface HTMLTemplateElement extends HTMLElement { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement/content) */ readonly content: DocumentFragment; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement/shadowRootClonable) */ + shadowRootClonable: boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement/shadowRootDelegatesFocus) */ + shadowRootDelegatesFocus: boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement/shadowRootMode) */ shadowRootMode: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement/shadowRootSerializable) */ + shadowRootSerializable: boolean; addEventListener(type: K, listener: (this: HTMLTemplateElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLTemplateElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; @@ -13353,7 +12868,6 @@ declare var HTMLTemplateElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTextAreaElement) */ interface HTMLTextAreaElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTextAreaElement/autocomplete) */ autocomplete: AutoFill; /** Sets or retrieves the width of the object. */ cols: number; @@ -13383,7 +12897,6 @@ interface HTMLTextAreaElement extends HTMLElement { selectionEnd: number; /** Gets or sets the starting position or offset of a text selection. */ selectionStart: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTextAreaElement/textLength) */ readonly textLength: number; /** * Retrieves the type of control. @@ -13403,7 +12916,6 @@ interface HTMLTextAreaElement extends HTMLElement { wrap: string; /** Returns whether a form will validate when it is submitted, without having to submit it. */ checkValidity(): boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTextAreaElement/reportValidity) */ reportValidity(): boolean; /** Highlights the input area of a form element. */ select(): void; @@ -13480,23 +12992,14 @@ declare var HTMLTitleElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement) */ interface HTMLTrackElement extends HTMLElement { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/default) */ default: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/kind) */ kind: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/label) */ label: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/readyState) */ readonly readyState: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/src) */ src: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/srclang) */ srclang: string; - /** - * Returns the TextTrack object corresponding to the text track of the track element. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/track) - */ + /** Returns the TextTrack object corresponding to the text track of the track element. */ readonly track: TextTrack; readonly NONE: 0; readonly LOADING: 1; @@ -13523,17 +13026,9 @@ declare var HTMLTrackElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLUListElement) */ interface HTMLUListElement extends HTMLElement { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLUListElement/compact) - */ + /** @deprecated */ compact: boolean; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLUListElement/type) - */ + /** @deprecated */ type: string; addEventListener(type: K, listener: (this: HTMLUListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -14364,7 +13859,7 @@ interface IDBTransaction extends EventTarget { /** * Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/objectStoreNames) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/ObjectStoreNames) */ readonly objectStoreNames: DOMStringList; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/abort_event) */ @@ -14521,9 +14016,9 @@ declare var ImageData: { new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData; }; -interface InnerHTML { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) */ - innerHTML: string; +interface ImportMeta { + url: string; + resolve(specifier: string): string; } /** @@ -15292,6 +14787,7 @@ declare var MediaKeySystemAccess: { interface MediaKeys { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaKeys/createSession) */ createSession(sessionType?: MediaKeySessionType): MediaKeySession; + getStatusForPolicy(policy?: MediaKeysPolicy): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaKeys/setServerCertificate) */ setServerCertificate(serverCertificate: BufferSource): Promise; } @@ -15480,11 +14976,8 @@ interface MediaSource extends EventTarget { readonly activeSourceBuffers: SourceBufferList; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/duration) */ duration: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/sourceclose_event) */ onsourceclose: ((this: MediaSource, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/sourceended_event) */ onsourceended: ((this: MediaSource, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/sourceopen_event) */ onsourceopen: ((this: MediaSource, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/readyState) */ readonly readyState: ReadyState; @@ -15509,10 +15002,21 @@ interface MediaSource extends EventTarget { declare var MediaSource: { prototype: MediaSource; new(): MediaSource; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/canConstructInDedicatedWorker_static) */ + readonly canConstructInDedicatedWorker: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSource/isTypeSupported_static) */ isTypeSupported(type: string): boolean; }; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSourceHandle) */ +interface MediaSourceHandle { +} + +declare var MediaSourceHandle: { + prototype: MediaSourceHandle; + new(): MediaSourceHandle; +}; + interface MediaStreamEventMap { "addtrack": MediaStreamTrackEvent; "removetrack": MediaStreamTrackEvent; @@ -15716,11 +15220,7 @@ interface MessageEvent extends Event { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/source) */ readonly source: MessageEventSource | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent) - */ + /** @deprecated */ initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void; } @@ -15786,29 +15286,21 @@ interface MimeType { /** * Returns the MIME type's description. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeType/description) */ readonly description: string; /** * Returns the Plugin object that implements this MIME type. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeType/enabledPlugin) */ readonly enabledPlugin: Plugin; /** * Returns the MIME type's typical file extensions, in a comma-separated list. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeType/suffixes) */ readonly suffixes: string; /** * Returns the MIME type. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeType/type) */ readonly type: string; } @@ -15826,23 +15318,11 @@ declare var MimeType: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeTypeArray) */ interface MimeTypeArray { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeTypeArray/length) - */ + /** @deprecated */ readonly length: number; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeTypeArray/item) - */ + /** @deprecated */ item(index: number): MimeType | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MimeTypeArray/namedItem) - */ + /** @deprecated */ namedItem(name: string): MimeType | null; [index: number]: MimeType; } @@ -16313,7 +15793,7 @@ interface NavigatorPlugins { /** * @deprecated * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigatorPlugins/mimeTypes) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/mimeTypes) */ readonly mimeTypes: MimeTypeArray; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/pdfViewerEnabled) */ @@ -16862,7 +16342,9 @@ interface OffscreenCanvas extends EventTarget { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/height) */ height: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextlost_event) */ oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextrestored_event) */ oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null; /** * These attributes return the dimensions of the OffscreenCanvas object's bitmap. @@ -16914,8 +16396,6 @@ declare var OffscreenCanvas: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvasRenderingContext2D) */ interface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform { readonly canvas: OffscreenCanvas; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvasRenderingContext2D/commit) */ - commit(): void; } declare var OffscreenCanvasRenderingContext2D: { @@ -17775,15 +17255,11 @@ interface Plugin { /** * Returns the plugin's description. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Plugin/description) */ readonly description: string; /** * Returns the plugin library's filename, if applicable on the current platform. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Plugin/filename) */ readonly filename: string; /** @@ -17794,22 +17270,14 @@ interface Plugin { /** * Returns the plugin's name. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Plugin/name) */ readonly name: string; /** * Returns the specified MimeType object. * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Plugin/item) */ item(index: number): MimeType | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Plugin/namedItem) - */ + /** @deprecated */ namedItem(name: string): MimeType | null; [index: number]: MimeType; } @@ -17827,29 +17295,13 @@ declare var Plugin: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PluginArray) */ interface PluginArray { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PluginArray/length) - */ + /** @deprecated */ readonly length: number; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PluginArray/item) - */ + /** @deprecated */ item(index: number): Plugin | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PluginArray/namedItem) - */ + /** @deprecated */ namedItem(name: string): Plugin | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PluginArray/refresh) - */ + /** @deprecated */ refresh(): void; [index: number]: Plugin; } @@ -17907,6 +17359,7 @@ declare var PointerEvent: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PopStateEvent) */ interface PopStateEvent extends Event { + readonly hasUAVisualTransition: boolean; /** * Returns a copy of the information that was provided to pushState() or replaceState(). * @@ -17982,6 +17435,7 @@ declare var PromiseRejectionEvent: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PublicKeyCredential) */ interface PublicKeyCredential extends Credential { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PublicKeyCredential/authenticatorAttachment) */ readonly authenticatorAttachment: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PublicKeyCredential/rawId) */ readonly rawId: ArrayBuffer; @@ -18201,12 +17655,11 @@ interface RTCDtlsTransportEventMap { interface RTCDtlsTransport extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/iceTransport) */ readonly iceTransport: RTCIceTransport; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/error_event) */ onerror: ((this: RTCDtlsTransport, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/statechange_event) */ onstatechange: ((this: RTCDtlsTransport, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/state) */ readonly state: RTCDtlsTransportState; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/getRemoteCertificates) */ getRemoteCertificates(): ArrayBuffer[]; addEventListener(type: K, listener: (this: RTCDtlsTransport, ev: RTCDtlsTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -18324,6 +17777,11 @@ declare var RTCIceCandidate: { new(candidateInitDict?: RTCIceCandidateInit): RTCIceCandidate; }; +interface RTCIceCandidatePair { + local: RTCIceCandidate; + remote: RTCIceCandidate; +} + interface RTCIceTransportEventMap { "gatheringstatechange": Event; "selectedcandidatepairchange": Event; @@ -18480,12 +17938,9 @@ declare var RTCPeerConnection: { interface RTCPeerConnectionIceErrorEvent extends Event { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnectionIceErrorEvent/address) */ readonly address: string | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnectionIceErrorEvent/errorCode) */ readonly errorCode: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnectionIceErrorEvent/errorText) */ readonly errorText: string; readonly port: number | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnectionIceErrorEvent/url) */ readonly url: string; } @@ -18515,6 +17970,8 @@ declare var RTCPeerConnectionIceEvent: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpReceiver) */ interface RTCRtpReceiver { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpReceiver/jitterBufferTarget) */ + jitterBufferTarget: DOMHighResTimeStamp | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpReceiver/track) */ readonly track: MediaStreamTrack; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpReceiver/transform) */ @@ -18593,7 +18050,7 @@ interface RTCRtpTransceiver { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/sender) */ readonly sender: RTCRtpSender; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/setCodecPreferences) */ - setCodecPreferences(codecs: RTCRtpCodecCapability[]): void; + setCodecPreferences(codecs: RTCRtpCodec[]): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/stop) */ stop(): void; } @@ -18613,6 +18070,7 @@ interface RTCSctpTransport extends EventTarget { readonly maxChannels: number | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCSctpTransport/maxMessageSize) */ readonly maxMessageSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCSctpTransport/statechange_event) */ onstatechange: ((this: RTCSctpTransport, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCSctpTransport/state) */ readonly state: RTCSctpTransportState; @@ -18640,7 +18098,7 @@ interface RTCSessionDescription { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCSessionDescription/type) */ readonly type: RTCSdpType; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCSessionDescription/toJSON) */ - toJSON(): any; + toJSON(): RTCSessionDescriptionInit; } declare var RTCSessionDescription: { @@ -18713,7 +18171,7 @@ interface Range extends AbstractRange { */ comparePoint(node: Node, offset: number): number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Range/createContextualFragment) */ - createContextualFragment(fragment: string): DocumentFragment; + createContextualFragment(string: string): DocumentFragment; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Range/deleteContents) */ deleteContents(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Range/detach) */ @@ -18932,6 +18390,7 @@ declare var Report: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody) */ interface ReportBody { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody/toJSON) */ toJSON(): any; } @@ -18991,11 +18450,7 @@ interface Request extends Body { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity) */ readonly integrity: string; - /** - * Returns a boolean indicating whether or not request can outlive the global in which it was created. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive) - */ + /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */ readonly keepalive: boolean; /** * Returns request's HTTP method, which is "GET" by default. @@ -19071,6 +18526,7 @@ interface ResizeObserverEntry { readonly contentBoxSize: ReadonlyArray; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ResizeObserverEntry/contentRect) */ readonly contentRect: DOMRectReadOnly; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ResizeObserverEntry/devicePixelContentBoxSize) */ readonly devicePixelContentBoxSize: ReadonlyArray; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ResizeObserverEntry/target) */ readonly target: Element; @@ -19254,7 +18710,9 @@ declare var SVGAnimatedBoolean: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedEnumeration) */ interface SVGAnimatedEnumeration { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedEnumeration/animVal) */ readonly animVal: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedEnumeration/baseVal) */ baseVal: number; } @@ -19284,7 +18742,9 @@ declare var SVGAnimatedInteger: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedLength) */ interface SVGAnimatedLength { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedLength/animVal) */ readonly animVal: SVGLength; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGAnimatedLength/baseVal) */ readonly baseVal: SVGLength; } @@ -19646,11 +19106,8 @@ declare var SVGFEBlendElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGFEColorMatrixElement) */ interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGFEColorMatrixElement/in1) */ readonly in1: SVGAnimatedString; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGFEColorMatrixElement/type) */ readonly type: SVGAnimatedEnumeration; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGFEColorMatrixElement/values) */ readonly values: SVGAnimatedNumberList; readonly SVG_FECOLORMATRIX_TYPE_UNKNOWN: 0; readonly SVG_FECOLORMATRIX_TYPE_MATRIX: 1; @@ -20340,7 +19797,6 @@ declare var SVGGraphicsElement: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGImageElement) */ interface SVGImageElement extends SVGGraphicsElement, SVGURIReference { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGImageElement/crossorigin) */ crossOrigin: string | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGImageElement/height) */ readonly height: SVGAnimatedLength; @@ -21289,6 +20745,7 @@ interface ScreenOrientationEventMap { interface ScreenOrientation extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ScreenOrientation/angle) */ readonly angle: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ScreenOrientation/change_event) */ onchange: ((this: ScreenOrientation, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ScreenOrientation/type) */ readonly type: OrientationType; @@ -21387,6 +20844,8 @@ interface Selection { readonly anchorNode: Node | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Selection/anchorOffset) */ readonly anchorOffset: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Selection/direction) */ + readonly direction: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Selection/focusNode) */ readonly focusNode: Node | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Selection/focusOffset) */ @@ -21559,18 +21018,25 @@ interface ShadowRootEventMap { } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot) */ -interface ShadowRoot extends DocumentFragment, DocumentOrShadowRoot, InnerHTML { +interface ShadowRoot extends DocumentFragment, DocumentOrShadowRoot { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/clonable) */ readonly clonable: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/delegatesFocus) */ readonly delegatesFocus: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/host) */ readonly host: Element; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/innerHTML) */ + innerHTML: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/mode) */ readonly mode: ShadowRootMode; onslotchange: ((this: ShadowRoot, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/serializable) */ + readonly serializable: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/slotAssignment) */ readonly slotAssignment: SlotAssignmentMode; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/getHTML) */ + getHTML(options?: GetHTMLOptions): string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ShadowRoot/setHTMLUnsafe) */ setHTMLUnsafe(html: string): void; /** Throws a "NotSupportedError" DOMException if context object is a shadow root. */ addEventListener(type: K, listener: (this: ShadowRoot, ev: ShadowRootEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; @@ -21630,15 +21096,10 @@ interface SourceBuffer extends EventTarget { readonly buffered: TimeRanges; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/mode) */ mode: AppendMode; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/abort_event) */ onabort: ((this: SourceBuffer, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/error_event) */ onerror: ((this: SourceBuffer, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/update_event) */ onupdate: ((this: SourceBuffer, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/updateend_event) */ onupdateend: ((this: SourceBuffer, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/updatestart_event) */ onupdatestart: ((this: SourceBuffer, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBuffer/timestampOffset) */ timestampOffset: number; @@ -21676,9 +21137,7 @@ interface SourceBufferListEventMap { interface SourceBufferList extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBufferList/length) */ readonly length: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBufferList/addsourcebuffer_event) */ onaddsourcebuffer: ((this: SourceBufferList, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SourceBufferList/removesourcebuffer_event) */ onremovesourcebuffer: ((this: SourceBufferList, ev: Event) => any) | null; addEventListener(type: K, listener: (this: SourceBufferList, ev: SourceBufferListEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; @@ -22312,6 +21771,16 @@ declare var TextEncoderStream: { new(): TextEncoderStream; }; +interface TextEvent extends UIEvent { + readonly data: string; + initTextEvent(type: string, bubbles?: boolean, cancelable?: boolean, view?: Window | null, data?: string): void; +} + +declare var TextEvent: { + prototype: TextEvent; + new(): TextEvent; +}; + /** * The dimensions of a piece of text in the canvas, as created by the CanvasRenderingContext2D.measureText() method. * @@ -22588,7 +22057,7 @@ interface TextTrackList extends EventTarget { onaddtrack: ((this: TextTrackList, ev: TrackEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextTrackList/change_event) */ onchange: ((this: TextTrackList, ev: Event) => any) | null; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextTrackList/removetrack_event) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextTrackList/removeTrack_event) */ onremovetrack: ((this: TextTrackList, ev: TrackEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextTrackList/getTrackById) */ getTrackById(id: string): TextTrack | null; @@ -22905,9 +22374,11 @@ declare var URL: { prototype: URL; new(url: string | URL, base?: string | URL): URL; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/canParse_static) */ - canParse(url: string | URL, base?: string): boolean; + canParse(url: string | URL, base?: string | URL): boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL_static) */ createObjectURL(obj: Blob | MediaSource): string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/parse_static) */ + parse(url: string | URL, base?: string | URL): URL | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/revokeObjectURL_static) */ revokeObjectURL(url: string): void; }; @@ -23017,21 +22488,13 @@ declare var VTTCue: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion) */ interface VTTRegion { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/id) */ id: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/lines) */ lines: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/regionAnchorX) */ regionAnchorX: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/regionAnchorY) */ regionAnchorY: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/scroll) */ scroll: ScrollSetting; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/viewportAnchorX) */ viewportAnchorX: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/viewportAnchorY) */ viewportAnchorY: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VTTRegion/width) */ width: number; } @@ -23048,7 +22511,6 @@ declare var VTTRegion: { interface ValidityState { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/badInput) */ readonly badInput: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/customError) */ readonly customError: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/patternMismatch) */ readonly patternMismatch: boolean; @@ -23064,7 +22526,6 @@ interface ValidityState { readonly tooShort: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/typeMismatch) */ readonly typeMismatch: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/valid) */ readonly valid: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ValidityState/valueMissing) */ readonly valueMissing: boolean; @@ -23106,6 +22567,7 @@ interface VideoDecoderEventMap { interface VideoDecoder extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/decodeQueueSize) */ readonly decodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/dequeue_event) */ ondequeue: ((this: VideoDecoder, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/state) */ readonly state: CodecState; @@ -23128,6 +22590,7 @@ interface VideoDecoder extends EventTarget { declare var VideoDecoder: { prototype: VideoDecoder; new(init: VideoDecoderInit): VideoDecoder; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/isConfigSupported_static) */ isConfigSupported(config: VideoDecoderConfig): Promise; }; @@ -23143,6 +22606,7 @@ interface VideoEncoderEventMap { interface VideoEncoder extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encodeQueueSize) */ readonly encodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/dequeue_event) */ ondequeue: ((this: VideoEncoder, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/state) */ readonly state: CodecState; @@ -23152,6 +22616,7 @@ interface VideoEncoder extends EventTarget { configure(config: VideoEncoderConfig): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encode) */ encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/flush) */ flush(): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/reset) */ reset(): void; @@ -23164,6 +22629,7 @@ interface VideoEncoder extends EventTarget { declare var VideoEncoder: { prototype: VideoEncoder; new(init: VideoEncoderInit): VideoEncoder; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/isConfigSupported_static) */ isConfigSupported(config: VideoEncoderConfig): Promise; }; @@ -23195,6 +22661,7 @@ interface VideoFrame { clone(): VideoFrame; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/close) */ close(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/copyTo) */ copyTo(destination: AllowSharedBufferSource, options?: VideoFrameCopyToOptions): Promise; } @@ -23229,6 +22696,23 @@ declare var VideoPlaybackQuality: { new(): VideoPlaybackQuality; }; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ViewTransition) */ +interface ViewTransition { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ViewTransition/finished) */ + readonly finished: Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ViewTransition/ready) */ + readonly ready: Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ViewTransition/updateCallbackDone) */ + readonly updateCallbackDone: Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ViewTransition/skipTransition) */ + skipTransition(): void; +} + +declare var ViewTransition: { + prototype: ViewTransition; + new(): ViewTransition; +}; + interface VisualViewportEventMap { "resize": Event; "scroll": Event; @@ -24094,7 +23578,7 @@ interface WebGL2RenderingContextBase { clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: number): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clientWaitSync) */ clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexImage3D) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexImage2D) */ compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void; compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexSubImage3D) */ @@ -24977,6 +24461,7 @@ declare var WebGLRenderingContext: { interface WebGLRenderingContextBase { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/canvas) */ readonly canvas: HTMLCanvasElement | OffscreenCanvas; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferColorSpace) */ drawingBufferColorSpace: PredefinedColorSpace; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferHeight) */ readonly drawingBufferHeight: GLsizei; @@ -25686,7 +25171,7 @@ declare var WebGLVertexArrayObject: { new(): WebGLVertexArrayObject; }; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObjectOES) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObject) */ interface WebGLVertexArrayObjectOES { } @@ -26267,24 +25752,24 @@ interface WindowOrWorkerGlobalScope { /** * Available only in secure contexts. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/caches) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) */ readonly caches: CacheStorage; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crossOriginIsolated) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ readonly crossOriginIsolated: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crypto_property) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ readonly crypto: Crypto; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/indexedDB) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ readonly indexedDB: IDBFactory; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/isSecureContext) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ readonly isSecureContext: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/origin) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ readonly origin: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/performance_property) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ readonly performance: Performance; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/atob) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ atob(data: string): string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/btoa) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ btoa(data: string): string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/clearInterval) */ clearInterval(id: number | undefined): void; @@ -26791,7 +26276,7 @@ interface Console { clear(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static) */ count(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countreset_static) */ countReset(label?: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static) */ debug(...data: any[]): void; @@ -26803,9 +26288,9 @@ interface Console { error(...data: any[]): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static) */ group(...data: any[]): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupcollapsed_static) */ groupCollapsed(...data: any[]): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupend_static) */ groupEnd(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static) */ info(...data: any[]): void; @@ -26815,9 +26300,9 @@ interface Console { table(tabularData?: any, properties?: string[]): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static) */ time(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeend_static) */ timeEnd(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timelog_static) */ timeLog(label?: string, ...data: any[]): void; timeStamp(label?: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static) */ @@ -26969,9 +26454,7 @@ declare namespace WebAssembly { /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global) */ interface Global { - /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global/value) */ value: ValueTypeMap[T]; - /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global/valueOf) */ valueOf(): ValueTypeMap[T]; } @@ -27270,6 +26753,10 @@ interface UnderlyingSourceStartCallback { (controller: ReadableStreamController): any; } +interface UpdateCallback { + (): any; +} + interface VideoFrameOutputCallback { (output: VideoFrame): void; } @@ -27846,7 +27333,7 @@ declare var onbeforetoggle: ((this: Window, ev: Event) => any) | null; * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/blur_event) */ declare var onblur: ((this: Window, ev: FocusEvent) => any) | null; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/cancel_event) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/cancel_event) */ declare var oncancel: ((this: Window, ev: Event) => any) | null; /** * Occurs when playback is possible, but would require further buffering. @@ -27873,6 +27360,8 @@ declare var onchange: ((this: Window, ev: Event) => any) | null; declare var onclick: ((this: Window, ev: MouseEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/close_event) */ declare var onclose: ((this: Window, ev: Event) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement/webglcontextlost_event) */ +declare var oncontextlost: ((this: Window, ev: Event) => any) | null; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. @@ -27880,6 +27369,8 @@ declare var onclose: ((this: Window, ev: Event) => any) | null; * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/contextmenu_event) */ declare var oncontextmenu: ((this: Window, ev: MouseEvent) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement/contextrestored_event) */ +declare var oncontextrestored: ((this: Window, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/copy_event) */ declare var oncopy: ((this: Window, ev: ClipboardEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/cuechange_event) */ @@ -28030,7 +27521,7 @@ declare var onloadedmetadata: ((this: Window, ev: Event) => any) | null; * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/loadstart_event) */ declare var onloadstart: ((this: Window, ev: Event) => any) | null; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/lostpointercapture_event) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/lostpointercapture_event) */ declare var onlostpointercapture: ((this: Window, ev: PointerEvent) => any) | null; /** * Fires when the user clicks the object with either mouse button. @@ -28297,24 +27788,24 @@ declare var localStorage: Storage; /** * Available only in secure contexts. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/caches) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) */ declare var caches: CacheStorage; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crossOriginIsolated) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ declare var crossOriginIsolated: boolean; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crypto_property) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ declare var crypto: Crypto; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/indexedDB) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ declare var indexedDB: IDBFactory; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/isSecureContext) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ declare var isSecureContext: boolean; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/origin) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ declare var origin: string; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/performance_property) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ declare var performance: Performance; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/atob) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ declare function atob(data: string): string; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/btoa) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ declare function btoa(data: string): string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/clearInterval) */ declare function clearInterval(id: number | undefined): void; @@ -28408,7 +27899,7 @@ type ReportList = Report[]; type RequestInfo = Request | string; type TexImageSource = ImageBitmap | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas | VideoFrame; type TimerHandler = string | Function; -type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | ReadableStream | WritableStream | TransformStream | VideoFrame | ArrayBuffer; +type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | MediaSourceHandle | ReadableStream | WritableStream | TransformStream | VideoFrame | ArrayBuffer; type Uint32List = Uint32Array | GLuint[]; type VibratePattern = number | number[]; type WindowProxy = Window; diff --git a/node_modules/typescript/lib/lib.dom.iterable.d.ts b/node_modules/typescript/lib/lib.dom.iterable.d.ts index f8ac3d9c11..b4cec2ce2d 100644 --- a/node_modules/typescript/lib/lib.dom.iterable.d.ts +++ b/node_modules/typescript/lib/lib.dom.iterable.d.ts @@ -41,36 +41,36 @@ interface BaseAudioContext { } interface CSSKeyframesRule { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface CSSNumericArray { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSNumericValue]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSNumericValue]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface CSSRuleList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface CSSStyleDeclaration { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface CSSTransformValue { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSTransformComponent]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSTransformComponent]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface CSSUnparsedValue { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSUnparsedSegment]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSUnparsedSegment]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface Cache { @@ -92,72 +92,80 @@ interface CustomStateSet extends Set { } interface DOMRectList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface DOMStringList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface DOMTokenList { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, string]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, string]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface DataTransferItemList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface EventCounts extends ReadonlyMap { } interface FileList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface FontFaceSet extends Set { } +interface FormDataIterator extends IteratorObject { + [Symbol.iterator](): FormDataIterator; +} + interface FormData { - [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>; + [Symbol.iterator](): FormDataIterator<[string, FormDataEntryValue]>; /** Returns an array of key, value pairs for every entry in the list. */ - entries(): IterableIterator<[string, FormDataEntryValue]>; + entries(): FormDataIterator<[string, FormDataEntryValue]>; /** Returns a list of keys in the list. */ - keys(): IterableIterator; + keys(): FormDataIterator; /** Returns a list of values in the list. */ - values(): IterableIterator; + values(): FormDataIterator; } interface HTMLAllCollection { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface HTMLCollectionBase { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface HTMLCollectionOf { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface HTMLFormElement { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface HTMLSelectElement { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; +} + +interface HeadersIterator extends IteratorObject { + [Symbol.iterator](): HeadersIterator; } interface Headers { - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): HeadersIterator<[string, string]>; /** Returns an iterator allowing to go through all key/value pairs contained in this object. */ - entries(): IterableIterator<[string, string]>; + entries(): HeadersIterator<[string, string]>; /** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */ - keys(): IterableIterator; + keys(): HeadersIterator; /** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */ - values(): IterableIterator; + values(): HeadersIterator; } interface Highlight extends Set { @@ -197,32 +205,32 @@ interface MIDIOutput { interface MIDIOutputMap extends ReadonlyMap { } +interface MediaKeyStatusMapIterator extends IteratorObject { + [Symbol.iterator](): MediaKeyStatusMapIterator; +} + interface MediaKeyStatusMap { - [Symbol.iterator](): IterableIterator<[BufferSource, MediaKeyStatus]>; - entries(): IterableIterator<[BufferSource, MediaKeyStatus]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>; + entries(): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>; + keys(): MediaKeyStatusMapIterator; + values(): MediaKeyStatusMapIterator; } interface MediaList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface MessageEvent { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent) - */ + /** @deprecated */ initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable): void; } interface MimeTypeArray { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface NamedNodeMap { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface Navigator { @@ -237,82 +245,86 @@ interface Navigator { } interface NodeList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** Returns an array of key, value pairs for every entry in the list. */ - entries(): IterableIterator<[number, Node]>; + entries(): ArrayIterator<[number, Node]>; /** Returns an list of keys in the list. */ - keys(): IterableIterator; + keys(): ArrayIterator; /** Returns an list of values in the list. */ - values(): IterableIterator; + values(): ArrayIterator; } interface NodeListOf { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** Returns an array of key, value pairs for every entry in the list. */ - entries(): IterableIterator<[number, TNode]>; + entries(): ArrayIterator<[number, TNode]>; /** Returns an list of keys in the list. */ - keys(): IterableIterator; + keys(): ArrayIterator; /** Returns an list of values in the list. */ - values(): IterableIterator; + values(): ArrayIterator; } interface Plugin { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface PluginArray { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface RTCRtpTransceiver { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/setCodecPreferences) */ - setCodecPreferences(codecs: Iterable): void; + setCodecPreferences(codecs: Iterable): void; } interface RTCStatsReport extends ReadonlyMap { } interface SVGLengthList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SVGNumberList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SVGPointList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SVGStringList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SVGTransformList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SourceBufferList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SpeechRecognitionResult { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SpeechRecognitionResultList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; +} + +interface StylePropertyMapReadOnlyIterator extends IteratorObject { + [Symbol.iterator](): StylePropertyMapReadOnlyIterator; } interface StylePropertyMapReadOnly { - [Symbol.iterator](): IterableIterator<[string, Iterable]>; - entries(): IterableIterator<[string, Iterable]>; - keys(): IterableIterator; - values(): IterableIterator>; + [Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + entries(): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + keys(): StylePropertyMapReadOnlyIterator; + values(): StylePropertyMapReadOnlyIterator>; } interface StyleSheetList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface SubtleCrypto { @@ -331,25 +343,29 @@ interface SubtleCrypto { } interface TextTrackCueList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface TextTrackList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface TouchList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; +} + +interface URLSearchParamsIterator extends IteratorObject { + [Symbol.iterator](): URLSearchParamsIterator; } interface URLSearchParams { - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): URLSearchParamsIterator<[string, string]>; /** Returns an array of key, value pairs for every entry in the search params. */ - entries(): IterableIterator<[string, string]>; + entries(): URLSearchParamsIterator<[string, string]>; /** Returns a list of keys in the search params. */ - keys(): IterableIterator; + keys(): URLSearchParamsIterator; /** Returns a list of values in the search params. */ - values(): IterableIterator; + values(): URLSearchParamsIterator; } interface WEBGL_draw_buffers { diff --git a/node_modules/typescript/lib/lib.es2015.generator.d.ts b/node_modules/typescript/lib/lib.es2015.generator.d.ts index 716bac29c1..dc7460a0ff 100644 --- a/node_modules/typescript/lib/lib.es2015.generator.d.ts +++ b/node_modules/typescript/lib/lib.es2015.generator.d.ts @@ -18,9 +18,9 @@ and limitations under the License. /// -interface Generator extends Iterator { +interface Generator extends IteratorObject { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): IteratorResult; + next(...[value]: [] | [TNext]): IteratorResult; return(value: TReturn): IteratorResult; throw(e: any): IteratorResult; [Symbol.iterator](): Generator; diff --git a/node_modules/typescript/lib/lib.es2015.iterable.d.ts b/node_modules/typescript/lib/lib.es2015.iterable.d.ts index 3ad043c679..eaff26d9a3 100644 --- a/node_modules/typescript/lib/lib.es2015.iterable.d.ts +++ b/node_modules/typescript/lib/lib.es2015.iterable.d.ts @@ -38,39 +38,59 @@ interface IteratorReturnResult { type IteratorResult = IteratorYieldResult | IteratorReturnResult; -interface Iterator { +interface Iterator { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): IteratorResult; + next(...[value]: [] | [TNext]): IteratorResult; return?(value?: TReturn): IteratorResult; throw?(e?: any): IteratorResult; } -interface Iterable { - [Symbol.iterator](): Iterator; +interface Iterable { + [Symbol.iterator](): Iterator; } -interface IterableIterator extends Iterator { - [Symbol.iterator](): IterableIterator; +/** + * Describes a user-defined {@link Iterator} that is also iterable. + */ +interface IterableIterator extends Iterator { + [Symbol.iterator](): IterableIterator; +} + +/** + * Describes an {@link Iterator} produced by the runtime that inherits from the intrinsic `Iterator.prototype`. + */ +interface IteratorObject extends Iterator { + [Symbol.iterator](): IteratorObject; +} + +/** + * Defines the `TReturn` type used for built-in iterators produced by `Array`, `Map`, `Set`, and others. + * This is `undefined` when `strictBuiltInIteratorReturn` is `true`; otherwise, this is `any`. + */ +type BuiltinIteratorReturn = intrinsic; + +interface ArrayIterator extends IteratorObject { + [Symbol.iterator](): ArrayIterator; } interface Array { /** Iterator */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an iterable of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, T]>; + entries(): ArrayIterator<[number, T]>; /** * Returns an iterable of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an iterable of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface ArrayConstructor { @@ -91,67 +111,71 @@ interface ArrayConstructor { interface ReadonlyArray { /** Iterator of values in the array. */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an iterable of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, T]>; + entries(): ArrayIterator<[number, T]>; /** * Returns an iterable of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an iterable of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface IArguments { /** Iterator */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; +} + +interface MapIterator extends IteratorObject { + [Symbol.iterator](): MapIterator; } interface Map { /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; + [Symbol.iterator](): MapIterator<[K, V]>; /** * Returns an iterable of key, value pairs for every entry in the map. */ - entries(): IterableIterator<[K, V]>; + entries(): MapIterator<[K, V]>; /** * Returns an iterable of keys in the map */ - keys(): IterableIterator; + keys(): MapIterator; /** * Returns an iterable of values in the map */ - values(): IterableIterator; + values(): MapIterator; } interface ReadonlyMap { /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; + [Symbol.iterator](): MapIterator<[K, V]>; /** * Returns an iterable of key, value pairs for every entry in the map. */ - entries(): IterableIterator<[K, V]>; + entries(): MapIterator<[K, V]>; /** * Returns an iterable of keys in the map */ - keys(): IterableIterator; + keys(): MapIterator; /** * Returns an iterable of values in the map */ - values(): IterableIterator; + values(): MapIterator; } interface MapConstructor { @@ -165,42 +189,46 @@ interface WeakMapConstructor { new (iterable: Iterable): WeakMap; } +interface SetIterator extends IteratorObject { + [Symbol.iterator](): SetIterator; +} + interface Set { /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): SetIterator; /** * Returns an iterable of [v,v] pairs for every value `v` in the set. */ - entries(): IterableIterator<[T, T]>; + entries(): SetIterator<[T, T]>; /** * Despite its name, returns an iterable of the values in the set. */ - keys(): IterableIterator; + keys(): SetIterator; /** * Returns an iterable of values in the set. */ - values(): IterableIterator; + values(): SetIterator; } interface ReadonlySet { /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): SetIterator; /** * Returns an iterable of [v,v] pairs for every value `v` in the set. */ - entries(): IterableIterator<[T, T]>; + entries(): SetIterator<[T, T]>; /** * Despite its name, returns an iterable of the values in the set. */ - keys(): IterableIterator; + keys(): SetIterator; /** * Returns an iterable of values in the set. */ - values(): IterableIterator; + values(): SetIterator; } interface SetConstructor { @@ -233,25 +261,29 @@ interface PromiseConstructor { race(values: Iterable>): Promise>; } +interface StringIterator extends IteratorObject { + [Symbol.iterator](): StringIterator; +} + interface String { /** Iterator */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): StringIterator; } interface Int8Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Int8ArrayConstructor { @@ -267,19 +299,19 @@ interface Int8ArrayConstructor { } interface Uint8Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Uint8ArrayConstructor { @@ -295,21 +327,21 @@ interface Uint8ArrayConstructor { } interface Uint8ClampedArray { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Uint8ClampedArrayConstructor { @@ -325,21 +357,21 @@ interface Uint8ClampedArrayConstructor { } interface Int16Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Int16ArrayConstructor { @@ -355,19 +387,19 @@ interface Int16ArrayConstructor { } interface Uint16Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Uint16ArrayConstructor { @@ -383,19 +415,19 @@ interface Uint16ArrayConstructor { } interface Int32Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Int32ArrayConstructor { @@ -411,19 +443,19 @@ interface Int32ArrayConstructor { } interface Uint32Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Uint32ArrayConstructor { @@ -439,19 +471,19 @@ interface Uint32ArrayConstructor { } interface Float32Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Float32ArrayConstructor { @@ -467,19 +499,19 @@ interface Float32ArrayConstructor { } interface Float64Array { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): ArrayIterator<[number, number]>; /** * Returns an list of keys in the array */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns an list of values in the array */ - values(): IterableIterator; + values(): ArrayIterator; } interface Float64ArrayConstructor { diff --git a/node_modules/typescript/lib/lib.es2017.object.d.ts b/node_modules/typescript/lib/lib.es2017.object.d.ts index af9ef2f987..523b05dc8b 100644 --- a/node_modules/typescript/lib/lib.es2017.object.d.ts +++ b/node_modules/typescript/lib/lib.es2017.object.d.ts @@ -18,25 +18,25 @@ and limitations under the License. interface ObjectConstructor { /** - * Returns an array of values of the enumerable properties of an object + * Returns an array of values of the enumerable own properties of an object * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ values(o: { [s: string]: T; } | ArrayLike): T[]; /** - * Returns an array of values of the enumerable properties of an object + * Returns an array of values of the enumerable own properties of an object * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ values(o: {}): any[]; /** - * Returns an array of key/values of the enumerable properties of an object + * Returns an array of key/values of the enumerable own properties of an object * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ entries(o: { [s: string]: T; } | ArrayLike): [string, T][]; /** - * Returns an array of key/values of the enumerable properties of an object + * Returns an array of key/values of the enumerable own properties of an object * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ entries(o: {}): [string, any][]; diff --git a/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts b/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts index 092a34f010..429c218200 100644 --- a/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +++ b/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts @@ -18,9 +18,9 @@ and limitations under the License. /// -interface AsyncGenerator extends AsyncIterator { +interface AsyncGenerator extends AsyncIteratorObject { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): Promise>; + next(...[value]: [] | [TNext]): Promise>; return(value: TReturn | PromiseLike): Promise>; throw(e: any): Promise>; [Symbol.asyncIterator](): AsyncGenerator; diff --git a/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts b/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts index f3de8021d7..a2ddd99be6 100644 --- a/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +++ b/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts @@ -27,17 +27,27 @@ interface SymbolConstructor { readonly asyncIterator: unique symbol; } -interface AsyncIterator { +interface AsyncIterator { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. - next(...args: [] | [TNext]): Promise>; + next(...[value]: [] | [TNext]): Promise>; return?(value?: TReturn | PromiseLike): Promise>; throw?(e?: any): Promise>; } -interface AsyncIterable { - [Symbol.asyncIterator](): AsyncIterator; +interface AsyncIterable { + [Symbol.asyncIterator](): AsyncIterator; } -interface AsyncIterableIterator extends AsyncIterator { - [Symbol.asyncIterator](): AsyncIterableIterator; +/** + * Describes a user-defined {@link AsyncIterator} that is also async iterable. + */ +interface AsyncIterableIterator extends AsyncIterator { + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +/** + * Describes an {@link AsyncIterator} produced by the runtime that inherits from the intrinsic `AsyncIterator.prototype`. + */ +interface AsyncIteratorObject extends AsyncIterator { + [Symbol.asyncIterator](): AsyncIteratorObject; } diff --git a/node_modules/typescript/lib/lib.es2020.bigint.d.ts b/node_modules/typescript/lib/lib.es2020.bigint.d.ts index 4b8939601b..9997ac0003 100644 --- a/node_modules/typescript/lib/lib.es2020.bigint.d.ts +++ b/node_modules/typescript/lib/lib.es2020.bigint.d.ts @@ -171,7 +171,7 @@ interface BigInt64Array { copyWithin(target: number, start: number, end?: number): this; /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; + entries(): ArrayIterator<[number, bigint]>; /** * Determines whether all the members of an array satisfy the specified test. @@ -256,7 +256,7 @@ interface BigInt64Array { join(separator?: string): string; /** Yields each index in the array. */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns the index of the last occurrence of a value in an array. @@ -378,9 +378,9 @@ interface BigInt64Array { valueOf(): BigInt64Array; /** Yields each value in the array. */ - values(): IterableIterator; + values(): ArrayIterator; - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; readonly [Symbol.toStringTag]: "BigInt64Array"; @@ -443,7 +443,7 @@ interface BigUint64Array { copyWithin(target: number, start: number, end?: number): this; /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; + entries(): ArrayIterator<[number, bigint]>; /** * Determines whether all the members of an array satisfy the specified test. @@ -528,7 +528,7 @@ interface BigUint64Array { join(separator?: string): string; /** Yields each index in the array. */ - keys(): IterableIterator; + keys(): ArrayIterator; /** * Returns the index of the last occurrence of a value in an array. @@ -650,9 +650,9 @@ interface BigUint64Array { valueOf(): BigUint64Array; /** Yields each value in the array. */ - values(): IterableIterator; + values(): ArrayIterator; - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; readonly [Symbol.toStringTag]: "BigUint64Array"; diff --git a/node_modules/typescript/lib/lib.es2020.string.d.ts b/node_modules/typescript/lib/lib.es2020.string.d.ts index 17c15806ed..cdb38e0d86 100644 --- a/node_modules/typescript/lib/lib.es2020.string.d.ts +++ b/node_modules/typescript/lib/lib.es2020.string.d.ts @@ -16,7 +16,7 @@ and limitations under the License. /// -/// +/// interface String { /** @@ -24,7 +24,7 @@ interface String { * containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ - matchAll(regexp: RegExp): IterableIterator; + matchAll(regexp: RegExp): RegExpStringIterator; /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */ toLocaleLowerCase(locales?: Intl.LocalesArgument): string; diff --git a/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts b/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts index 89262b74c9..a3b45bb8a9 100644 --- a/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +++ b/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts @@ -27,11 +27,15 @@ interface SymbolConstructor { readonly matchAll: unique symbol; } +interface RegExpStringIterator extends IteratorObject { + [Symbol.iterator](): RegExpStringIterator; +} + interface RegExp { /** * Matches a string with this regular expression, and returns an iterable of matches * containing the results of that search. * @param string A string to search within. */ - [Symbol.matchAll](str: string): IterableIterator; + [Symbol.matchAll](str: string): RegExpStringIterator; } diff --git a/node_modules/typescript/lib/lib.es2022.intl.d.ts b/node_modules/typescript/lib/lib.es2022.intl.d.ts index 6a2ba07870..cd8eb11408 100644 --- a/node_modules/typescript/lib/lib.es2022.intl.d.ts +++ b/node_modules/typescript/lib/lib.es2022.intl.d.ts @@ -46,6 +46,10 @@ declare namespace Intl { granularity: "grapheme" | "word" | "sentence"; } + interface SegmentIterator extends IteratorObject { + [Symbol.iterator](): SegmentIterator; + } + interface Segments { /** * Returns an object describing the segment in the original string that includes the code unit at a specified index. @@ -55,7 +59,7 @@ declare namespace Intl { containing(codeUnitIndex?: number): SegmentData; /** Returns an iterator to iterate over the segments. */ - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): SegmentIterator; } interface SegmentData { diff --git a/node_modules/typescript/lib/lib.esnext.d.ts b/node_modules/typescript/lib/lib.esnext.d.ts index a2912fe3d8..e0217b6c60 100644 --- a/node_modules/typescript/lib/lib.esnext.d.ts +++ b/node_modules/typescript/lib/lib.esnext.d.ts @@ -26,3 +26,4 @@ and limitations under the License. /// /// /// +/// diff --git a/node_modules/typescript/lib/lib.esnext.disposable.d.ts b/node_modules/typescript/lib/lib.esnext.disposable.d.ts index 0fea9442a0..b169d962e7 100644 --- a/node_modules/typescript/lib/lib.esnext.disposable.d.ts +++ b/node_modules/typescript/lib/lib.esnext.disposable.d.ts @@ -17,6 +17,8 @@ and limitations under the License. /// /// +/// +/// interface SymbolConstructor { /** @@ -183,3 +185,9 @@ interface AsyncDisposableStackConstructor { readonly prototype: AsyncDisposableStack; } declare var AsyncDisposableStack: AsyncDisposableStackConstructor; + +interface IteratorObject extends Disposable { +} + +interface AsyncIteratorObject extends AsyncDisposable { +} diff --git a/node_modules/typescript/lib/lib.esnext.iterator.d.ts b/node_modules/typescript/lib/lib.esnext.iterator.d.ts new file mode 100644 index 0000000000..9833442792 --- /dev/null +++ b/node_modules/typescript/lib/lib.esnext.iterator.d.ts @@ -0,0 +1,148 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// + +// NOTE: This is specified as what is essentially an unreachable module. All actual global declarations can be found +// in the `declare global` section, below. This is necessary as there is currently no way to declare an `abstract` +// member without declaring a `class`, but declaring `class Iterator` globally would conflict with TypeScript's +// general purpose `Iterator` interface. +export {}; + +// Abstract type that allows us to mark `next` as `abstract` +declare abstract class Iterator { // eslint-disable-line @typescript-eslint/no-unsafe-declaration-merging + abstract next(value?: TNext): IteratorResult; +} + +// Merge all members of `IteratorObject` into `Iterator` +interface Iterator extends globalThis.IteratorObject {} + +// Capture the `Iterator` constructor in a type we can use in the `extends` clause of `IteratorConstructor`. +type IteratorObjectConstructor = typeof Iterator; + +declare global { + // Global `IteratorObject` interface that can be augmented by polyfills + interface IteratorObject { + /** + * Returns this iterator. + */ + [Symbol.iterator](): IteratorObject; + + /** + * Creates an iterator whose values are the result of applying the callback to the values from this iterator. + * @param callbackfn A function that accepts up to two arguments to be used to transform values from the underlying iterator. + */ + map(callbackfn: (value: T, index: number) => U): IteratorObject; + + /** + * Creates an iterator whose values are those from this iterator for which the provided predicate returns true. + * @param predicate A function that accepts up to two arguments to be used to test values from the underlying iterator. + */ + filter(predicate: (value: T, index: number) => value is S): IteratorObject; + + /** + * Creates an iterator whose values are those from this iterator for which the provided predicate returns true. + * @param predicate A function that accepts up to two arguments to be used to test values from the underlying iterator. + */ + filter(predicate: (value: T, index: number) => unknown): IteratorObject; + + /** + * Creates an iterator whose values are the values from this iterator, stopping once the provided limit is reached. + * @param limit The maximum number of values to yield. + */ + take(limit: number): IteratorObject; + + /** + * Creates an iterator whose values are the values from this iterator after skipping the provided count. + * @param count The number of values to drop. + */ + drop(count: number): IteratorObject; + + /** + * Creates an iterator whose values are the result of applying the callback to the values from this iterator and then flattening the resulting iterators or iterables. + * @param callback A function that accepts up to two arguments to be used to transform values from the underlying iterator into new iterators or iterables to be flattened into the result. + */ + flatMap(callback: (value: T, index: number) => Iterator | Iterable): IteratorObject; + + /** + * Calls the specified callback function for all the elements in this iterator. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the iterator. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of a value from the iterator. + */ + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number) => T): T; + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number) => T, initialValue: T): T; + + /** + * Calls the specified callback function for all the elements in this iterator. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. + * @param callbackfn A function that accepts up to three arguments. The reduce method calls the callbackfn function one time for each element in the iterator. + * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of a value from the iterator. + */ + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U; + + /** + * Creates a new array from the values yielded by this iterator. + */ + toArray(): T[]; + + /** + * Performs the specified action for each element in the iterator. + * @param callbackfn A function that accepts up to two arguments. forEach calls the callbackfn function one time for each element in the iterator. + */ + forEach(callbackfn: (value: T, index: number) => void): void; + + /** + * Determines whether the specified callback function returns true for any element of this iterator. + * @param predicate A function that accepts up to two arguments. The some method calls + * the predicate function for each element in this iterator until the predicate returns a value + * true, or until the end of the iterator. + */ + some(predicate: (value: T, index: number) => unknown): boolean; + + /** + * Determines whether all the members of this iterator satisfy the specified test. + * @param predicate A function that accepts up to two arguments. The every method calls + * the predicate function for each element in this iterator until the predicate returns + * false, or until the end of this iterator. + */ + every(predicate: (value: T, index: number) => unknown): boolean; + + /** + * Returns the value of the first element in this iterator where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of this iterator, in + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + */ + find(predicate: (value: T, index: number) => value is S): S | undefined; + find(predicate: (value: T, index: number) => unknown): T | undefined; + + readonly [Symbol.toStringTag]: string; + } + + // Global `IteratorConstructor` interface that can be augmented by polyfills + interface IteratorConstructor extends IteratorObjectConstructor { + /** + * Creates a native iterator from an iterator or iterable object. + * Returns its input if the input already inherits from the built-in Iterator class. + * @param value An iterator or iterable object to convert a native iterator. + */ + from(value: Iterator | Iterable): IteratorObject; + } + + var Iterator: IteratorConstructor; +} diff --git a/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts b/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts index 86de21097f..4c7aaadc6a 100644 --- a/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +++ b/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts @@ -20,14 +20,22 @@ and limitations under the License. /// Worker Async Iterable APIs ///////////////////////////// +interface FileSystemDirectoryHandleAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator; +} + interface FileSystemDirectoryHandle { - [Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>; - entries(): AsyncIterableIterator<[string, FileSystemHandle]>; - keys(): AsyncIterableIterator; - values(): AsyncIterableIterator; + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + entries(): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + keys(): FileSystemDirectoryHandleAsyncIterator; + values(): FileSystemDirectoryHandleAsyncIterator; +} + +interface ReadableStreamAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): ReadableStreamAsyncIterator; } interface ReadableStream { - [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): AsyncIterableIterator; - values(options?: ReadableStreamIteratorOptions): AsyncIterableIterator; + [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; + values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; } diff --git a/node_modules/typescript/lib/lib.webworker.d.ts b/node_modules/typescript/lib/lib.webworker.d.ts index ce78eb2fe5..ba727932e7 100644 --- a/node_modules/typescript/lib/lib.webworker.d.ts +++ b/node_modules/typescript/lib/lib.webworker.d.ts @@ -340,10 +340,6 @@ interface ImageEncodeOptions { type?: string; } -interface ImportMeta { - url: string; -} - interface JsonWebKey { alg?: string; crv?: string; @@ -414,6 +410,10 @@ interface MediaEncodingConfiguration extends MediaConfiguration { type: MediaEncodingType; } +interface MediaStreamTrackProcessorInit { + maxBufferSize?: number; +} + interface MessageEventInit extends EventInit { data?: T; lastEventId?: string; @@ -1667,6 +1667,8 @@ interface CanvasShadowStyles { } interface CanvasState { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/isContextLost) */ + isContextLost(): boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/reset) */ reset(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/restore) */ @@ -2000,9 +2002,7 @@ interface DOMMatrix extends DOMMatrixReadOnly { rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; rotateFromVectorSelf(x?: number, y?: number): DOMMatrix; rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scale3dSelf) */ scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scaleSelf) */ scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; skewXSelf(sx?: number): DOMMatrix; skewYSelf(sy?: number): DOMMatrix; @@ -2019,88 +2019,48 @@ declare var DOMMatrix: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly) */ interface DOMMatrixReadOnly { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/a) */ readonly a: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/b) */ readonly b: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/c) */ readonly c: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/d) */ readonly d: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/e) */ readonly e: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/f) */ readonly f: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/is2D) */ readonly is2D: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/isIdentity) */ readonly isIdentity: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m11) */ readonly m11: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m12) */ readonly m12: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m13) */ readonly m13: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m14) */ readonly m14: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m21) */ readonly m21: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m22) */ readonly m22: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m23) */ readonly m23: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m24) */ readonly m24: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m31) */ readonly m31: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m32) */ readonly m32: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m33) */ readonly m33: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m34) */ readonly m34: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m41) */ readonly m41: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m42) */ readonly m42: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m43) */ readonly m43: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m44) */ readonly m44: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipX) */ flipX(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipY) */ flipY(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/inverse) */ inverse(): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/multiply) */ multiply(other?: DOMMatrixInit): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotate) */ rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateAxisAngle) */ rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateFromVector) */ rotateFromVector(x?: number, y?: number): DOMMatrix; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale) */ scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale3d) */ scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scaleNonUniform) - */ + /** @deprecated */ scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewX) */ skewX(sx?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewY) */ skewY(sy?: number): DOMMatrix; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat32Array) */ toFloat32Array(): Float32Array; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat64Array) */ toFloat64Array(): Float64Array; toJSON(): any; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/transformPoint) */ transformPoint(point?: DOMPointInit): DOMPoint; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/translate) */ translate(tx?: number, ty?: number, tz?: number): DOMMatrix; @@ -2143,7 +2103,6 @@ interface DOMPointReadOnly { readonly y: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/z) */ readonly z: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/matrixTransform) */ matrixTransform(matrix?: DOMMatrixInit): DOMPoint; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/toJSON) */ toJSON(): any; @@ -2158,15 +2117,10 @@ declare var DOMPointReadOnly: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad) */ interface DOMQuad { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p1) */ readonly p1: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p2) */ readonly p2: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p3) */ readonly p3: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p4) */ readonly p4: DOMPoint; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/getBounds) */ getBounds(): DOMRect; toJSON(): any; } @@ -2189,6 +2143,7 @@ interface DOMRect extends DOMRectReadOnly { declare var DOMRect: { prototype: DOMRect; new(x?: number, y?: number, width?: number, height?: number): DOMRect; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRect/fromRect_static) */ fromRect(other?: DOMRectInit): DOMRect; }; @@ -2414,15 +2369,10 @@ declare var EncodedVideoChunk: { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent) */ interface ErrorEvent extends Event { - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno) */ readonly colno: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error) */ readonly error: any; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename) */ readonly filename: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno) */ readonly lineno: number; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message) */ readonly message: string; } @@ -3739,7 +3689,7 @@ interface IDBTransaction extends EventTarget { /** * Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/objectStoreNames) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/ObjectStoreNames) */ readonly objectStoreNames: DOMStringList; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/abort_event) */ @@ -3866,6 +3816,11 @@ declare var ImageData: { new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData; }; +interface ImportMeta { + url: string; + resolve(specifier: string): string; +} + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/KHR_parallel_shader_compile) */ interface KHR_parallel_shader_compile { readonly COMPLETION_STATUS_KHR: 0x91B1; @@ -3919,6 +3874,26 @@ declare var MediaCapabilities: { new(): MediaCapabilities; }; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSourceHandle) */ +interface MediaSourceHandle { +} + +declare var MediaSourceHandle: { + prototype: MediaSourceHandle; + new(): MediaSourceHandle; +}; + +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaStreamTrackProcessor) */ +interface MediaStreamTrackProcessor { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaStreamTrackProcessor/readable) */ + readonly readable: ReadableStream; +} + +declare var MediaStreamTrackProcessor: { + prototype: MediaStreamTrackProcessor; + new(init: MediaStreamTrackProcessorInit): MediaStreamTrackProcessor; +}; + /** * This Channel Messaging API interface allows us to create a new message channel and send data through it via its two MessagePort properties. * @@ -3980,11 +3955,7 @@ interface MessageEvent extends Event { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/source) */ readonly source: MessageEventSource | null; - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent) - */ + /** @deprecated */ initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void; } @@ -4316,7 +4287,9 @@ interface OffscreenCanvas extends EventTarget { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/height) */ height: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextlost_event) */ oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextrestored_event) */ oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null; /** * These attributes return the dimensions of the OffscreenCanvas object's bitmap. @@ -4368,8 +4341,6 @@ declare var OffscreenCanvas: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvasRenderingContext2D) */ interface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform { readonly canvas: OffscreenCanvas; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvasRenderingContext2D/commit) */ - commit(): void; } declare var OffscreenCanvasRenderingContext2D: { @@ -4959,6 +4930,7 @@ declare var Report: { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody) */ interface ReportBody { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody/toJSON) */ toJSON(): any; } @@ -5018,11 +4990,7 @@ interface Request extends Body { * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity) */ readonly integrity: string; - /** - * Returns a boolean indicating whether or not request can outlive the global in which it was created. - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive) - */ + /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */ readonly keepalive: boolean; /** * Returns request's HTTP method, which is "GET" by default. @@ -5694,9 +5662,11 @@ declare var URL: { prototype: URL; new(url: string | URL, base?: string | URL): URL; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/canParse_static) */ - canParse(url: string | URL, base?: string): boolean; + canParse(url: string | URL, base?: string | URL): boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL_static) */ createObjectURL(obj: Blob): string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/parse_static) */ + parse(url: string | URL, base?: string | URL): URL | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/revokeObjectURL_static) */ revokeObjectURL(url: string): void; }; @@ -5784,6 +5754,7 @@ interface VideoDecoderEventMap { interface VideoDecoder extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/decodeQueueSize) */ readonly decodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/dequeue_event) */ ondequeue: ((this: VideoDecoder, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/state) */ readonly state: CodecState; @@ -5806,6 +5777,7 @@ interface VideoDecoder extends EventTarget { declare var VideoDecoder: { prototype: VideoDecoder; new(init: VideoDecoderInit): VideoDecoder; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/isConfigSupported_static) */ isConfigSupported(config: VideoDecoderConfig): Promise; }; @@ -5821,6 +5793,7 @@ interface VideoEncoderEventMap { interface VideoEncoder extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encodeQueueSize) */ readonly encodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/dequeue_event) */ ondequeue: ((this: VideoEncoder, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/state) */ readonly state: CodecState; @@ -5830,6 +5803,7 @@ interface VideoEncoder extends EventTarget { configure(config: VideoEncoderConfig): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encode) */ encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/flush) */ flush(): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/reset) */ reset(): void; @@ -5842,6 +5816,7 @@ interface VideoEncoder extends EventTarget { declare var VideoEncoder: { prototype: VideoEncoder; new(init: VideoEncoderInit): VideoEncoder; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/isConfigSupported_static) */ isConfigSupported(config: VideoEncoderConfig): Promise; }; @@ -5873,6 +5848,7 @@ interface VideoFrame { clone(): VideoFrame; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/close) */ close(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/copyTo) */ copyTo(destination: AllowSharedBufferSource, options?: VideoFrameCopyToOptions): Promise; } @@ -6650,7 +6626,7 @@ interface WebGL2RenderingContextBase { clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: number): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clientWaitSync) */ clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexImage3D) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexImage2D) */ compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void; compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexSubImage3D) */ @@ -7531,6 +7507,7 @@ declare var WebGLRenderingContext: { }; interface WebGLRenderingContextBase { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferColorSpace) */ drawingBufferColorSpace: PredefinedColorSpace; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferHeight) */ readonly drawingBufferHeight: GLsizei; @@ -8240,7 +8217,7 @@ declare var WebGLVertexArrayObject: { new(): WebGLVertexArrayObject; }; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObjectOES) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObject) */ interface WebGLVertexArrayObjectOES { } @@ -8451,24 +8428,24 @@ interface WindowOrWorkerGlobalScope { /** * Available only in secure contexts. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/caches) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) */ readonly caches: CacheStorage; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crossOriginIsolated) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ readonly crossOriginIsolated: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crypto_property) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ readonly crypto: Crypto; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/indexedDB) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ readonly indexedDB: IDBFactory; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/isSecureContext) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ readonly isSecureContext: boolean; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/origin) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ readonly origin: string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/performance_property) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ readonly performance: Performance; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/atob) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ atob(data: string): string; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/btoa) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ btoa(data: string): string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/clearInterval) */ clearInterval(id: number | undefined): void; @@ -8565,7 +8542,9 @@ interface WorkerGlobalScope extends EventTarget, FontFaceSource, WindowOrWorkerG onoffline: ((this: WorkerGlobalScope, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/online_event) */ ononline: ((this: WorkerGlobalScope, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/rejectionhandled_event) */ onrejectionhandled: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/unhandledrejection_event) */ onunhandledrejection: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; /** * Returns workerGlobal. @@ -8899,7 +8878,7 @@ interface Console { clear(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static) */ count(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countreset_static) */ countReset(label?: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static) */ debug(...data: any[]): void; @@ -8911,9 +8890,9 @@ interface Console { error(...data: any[]): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static) */ group(...data: any[]): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupcollapsed_static) */ groupCollapsed(...data: any[]): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupend_static) */ groupEnd(): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static) */ info(...data: any[]): void; @@ -8923,9 +8902,9 @@ interface Console { table(tabularData?: any, properties?: string[]): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static) */ time(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeend_static) */ timeEnd(label?: string): void; - /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static) */ + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timelog_static) */ timeLog(label?: string, ...data: any[]): void; timeStamp(label?: string): void; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static) */ @@ -8948,9 +8927,7 @@ declare namespace WebAssembly { /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global) */ interface Global { - /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global/value) */ value: ValueTypeMap[T]; - /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/JavaScript_interface/Global/valueOf) */ valueOf(): ValueTypeMap[T]; } @@ -9228,7 +9205,9 @@ declare var onlanguagechange: ((this: DedicatedWorkerGlobalScope, ev: Event) => declare var onoffline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/online_event) */ declare var ononline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/rejectionhandled_event) */ declare var onrejectionhandled: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/unhandledrejection_event) */ declare var onunhandledrejection: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; /** * Returns workerGlobal. @@ -9253,24 +9232,24 @@ declare var fonts: FontFaceSet; /** * Available only in secure contexts. * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/caches) + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) */ declare var caches: CacheStorage; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crossOriginIsolated) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ declare var crossOriginIsolated: boolean; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/crypto_property) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ declare var crypto: Crypto; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/indexedDB) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ declare var indexedDB: IDBFactory; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/isSecureContext) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ declare var isSecureContext: boolean; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/origin) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ declare var origin: string; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/performance_property) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ declare var performance: Performance; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/atob) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ declare function atob(data: string): string; -/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/btoa) */ +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ declare function btoa(data: string): string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/clearInterval) */ declare function clearInterval(id: number | undefined): void; @@ -9347,7 +9326,7 @@ type ReportList = Report[]; type RequestInfo = Request | string; type TexImageSource = ImageBitmap | ImageData | OffscreenCanvas | VideoFrame; type TimerHandler = string | Function; -type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | ReadableStream | WritableStream | TransformStream | VideoFrame | ArrayBuffer; +type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | MediaSourceHandle | ReadableStream | WritableStream | TransformStream | VideoFrame | ArrayBuffer; type Uint32List = Uint32Array | GLuint[]; type XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string; type AlphaOption = "discard" | "keep"; diff --git a/node_modules/typescript/lib/lib.webworker.iterable.d.ts b/node_modules/typescript/lib/lib.webworker.iterable.d.ts index 4f53ad5e08..be864068e7 100644 --- a/node_modules/typescript/lib/lib.webworker.iterable.d.ts +++ b/node_modules/typescript/lib/lib.webworker.iterable.d.ts @@ -26,24 +26,24 @@ interface AbortSignal { } interface CSSNumericArray { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSNumericValue]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSNumericValue]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface CSSTransformValue { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSTransformComponent]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSTransformComponent]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface CSSUnparsedValue { - [Symbol.iterator](): IterableIterator; - entries(): IterableIterator<[number, CSSUnparsedSegment]>; - keys(): IterableIterator; - values(): IterableIterator; + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSUnparsedSegment]>; + keys(): ArrayIterator; + values(): ArrayIterator; } interface Cache { @@ -62,34 +62,42 @@ interface CanvasPathDrawingStyles { } interface DOMStringList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface FileList { - [Symbol.iterator](): IterableIterator; + [Symbol.iterator](): ArrayIterator; } interface FontFaceSet extends Set { } +interface FormDataIterator extends IteratorObject { + [Symbol.iterator](): FormDataIterator; +} + interface FormData { - [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>; + [Symbol.iterator](): FormDataIterator<[string, FormDataEntryValue]>; /** Returns an array of key, value pairs for every entry in the list. */ - entries(): IterableIterator<[string, FormDataEntryValue]>; + entries(): FormDataIterator<[string, FormDataEntryValue]>; /** Returns a list of keys in the list. */ - keys(): IterableIterator; + keys(): FormDataIterator; /** Returns a list of values in the list. */ - values(): IterableIterator; + values(): FormDataIterator; +} + +interface HeadersIterator extends IteratorObject { + [Symbol.iterator](): HeadersIterator; } interface Headers { - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): HeadersIterator<[string, string]>; /** Returns an iterator allowing to go through all key/value pairs contained in this object. */ - entries(): IterableIterator<[string, string]>; + entries(): HeadersIterator<[string, string]>; /** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */ - keys(): IterableIterator; + keys(): HeadersIterator; /** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */ - values(): IterableIterator; + values(): HeadersIterator; } interface IDBDatabase { @@ -113,19 +121,19 @@ interface IDBObjectStore { } interface MessageEvent { - /** - * @deprecated - * - * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent) - */ + /** @deprecated */ initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable): void; } +interface StylePropertyMapReadOnlyIterator extends IteratorObject { + [Symbol.iterator](): StylePropertyMapReadOnlyIterator; +} + interface StylePropertyMapReadOnly { - [Symbol.iterator](): IterableIterator<[string, Iterable]>; - entries(): IterableIterator<[string, Iterable]>; - keys(): IterableIterator; - values(): IterableIterator>; + [Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + entries(): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + keys(): StylePropertyMapReadOnlyIterator; + values(): StylePropertyMapReadOnlyIterator>; } interface SubtleCrypto { @@ -143,14 +151,18 @@ interface SubtleCrypto { unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable): Promise; } +interface URLSearchParamsIterator extends IteratorObject { + [Symbol.iterator](): URLSearchParamsIterator; +} + interface URLSearchParams { - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): URLSearchParamsIterator<[string, string]>; /** Returns an array of key, value pairs for every entry in the search params. */ - entries(): IterableIterator<[string, string]>; + entries(): URLSearchParamsIterator<[string, string]>; /** Returns a list of keys in the search params. */ - keys(): IterableIterator; + keys(): URLSearchParamsIterator; /** Returns a list of values in the search params. */ - values(): IterableIterator; + values(): URLSearchParamsIterator; } interface WEBGL_draw_buffers { diff --git a/node_modules/typescript/lib/pl/diagnosticMessages.generated.json b/node_modules/typescript/lib/pl/diagnosticMessages.generated.json index fc734cc2d1..f8e4a82746 100644 --- a/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/pl/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "WSZYSTKIE OPCJE KOMPILATORA", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modyfikatora „{0}” nie można używać z deklaracją importu.", "A_0_parameter_must_be_the_first_parameter_2680": "Parametr „{0}” musi być pierwszym parametrem.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Tag „@template” obiektu JSDoc nie może następować po tagu „@typedef”, „@callback” ani „@overload”", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentarz JSDoc „@typedef” nie może zawierać wielu tagów „@type”.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literał „bigint” nie może być używany jako nazwa właściwości.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Literał typu bigint nie może używać notacji wykładniczej.", "A_bigint_literal_must_be_an_integer_1353": "Literał typu bigint musi być liczbą całkowitą.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr wzorca wiązania nie może być opcjonalny w sygnaturze implementacji.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Instrukcji „break” można użyć tylko w ramach otaczającej instrukcji iteracji lub switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Instrukcja „break” może wykonać skok tylko do etykiety otaczającej instrukcji.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Klasa znaków nie może zawierać zastrzeżonej podwójnej interpunkcji. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Zakres klasy znaków nie może być ograniczony przez inną klasę znaków.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Klasa może zawierać implementację tylko identyfikatora/nazwy kwalifikowanej z opcjonalnymi argumentami typu.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Klasa może implementować tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Klasa nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Klasy mogą rozszerzać tylko wartości konstruowalne.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Klasa nie może zaimplementować typu pierwotnego, takiego jak „{0}”. Może implementować tylko inne nazwane typy obiektów.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklaracja klasy bez modyfikatora „default” musi mieć nazwę.", "A_class_member_cannot_have_the_0_keyword_1248": "Składowa klasy nie może zawierać słowa kluczowego „{0}”.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Wyrażenie przecinkowe nie jest dozwolone w obliczonej nazwie właściwości.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nie może zawierać parametru „this”.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Instrukcji „continue” można użyć tylko w otaczającej instrukcji iteracji.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Instrukcja „continue” może wykonać skok tylko do etykiety otaczającej instrukcji iteracji.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nie można zaimportować pliku deklaracji bez elementu „import type”. Czy zamiast tego chcesz zaimportować plik implementacji „{0}”?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Nie można użyć modyfikatora „declare” w otaczającym kontekście.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorator może dekorować jedynie implementację metody, a nie przeciążenie.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzula „default” nie może występować więcej niż raz w instrukcji „switch”.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Eksport domyślny musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Asercja określonego przypisania „!” nie jest dozwolona w tym kontekście.", "A_destructuring_declaration_must_have_an_initializer_1182": "Deklaracja usuwająca strukturę musi mieć inicjator.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Wywołanie dynamicznego importowania w wersji ES5/ES3 wymaga konstruktora \"Promise\". Upewnij się, że masz deklarację dla konstruktora \"Promise\", lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Wywołanie dynamicznego importowania w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", "A_file_cannot_have_a_reference_to_itself_1006": "Plik nie może przywoływać samego siebie.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkcja zwracająca wartość „never” nie może mieć osiągalnego punktu końcowego.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkcja wywoływana ze słowem kluczowym „new” nie może mieć typu „this” o wartości „void”.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Funkcja, której deklarowany typ jest inny niż „void” lub „any”, musi zwracać wartość.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkcja, której zadeklarowany typ nie ma wartości „undefined”, „void” ani „any”, musi zwracać wartości.", "A_generator_cannot_have_a_void_type_annotation_2505": "Generator nie może mieć adnotacji typu „void”.", "A_get_accessor_cannot_have_parameters_1054": "Metoda dostępu „get” nie może mieć parametrów.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Metoda dostępu get musi być co najmniej tak samo dostępna, jak metoda ustawiająca", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklaracja przestrzeni nazw nie może znajdować się w innym pliku niż klasa lub funkcja, z którą ją scalono.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklaracja przestrzeni nazw nie może występować przed klasą lub funkcją, z którą ją scalono.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklaracja przestrzeni nazw jest dozwolona tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklaracja „namespace” nie powinna być deklarowana przy użyciu słowa kluczowego „module”. Zamiast tego należy użyć słowa kluczowego „namespace”.", "A_non_dry_build_would_build_project_0_6357": "Kompilacja inna niż -dry spowodowałaby skompilowanie projektu „{0}”", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Kompilacja inna niż -dry spowodowałaby usunięcie następujących plików: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Kompilacja bez opcji dry spowoduje zaktualizowanie danych wyjściowych projektu „{0}”", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Kompilacja bez opcji dry spowoduje zaktualizowanie sygnatur czasowych dla danych wyjściowych projektu „{0}”", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicjator parametru jest dozwolony tylko w implementacji funkcji lub konstruktora.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Właściwości parametru nie można zadeklarować za pomocą parametru rest.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Wywołanie „super” musi być pierwszą instrukcją w konstruktorze, aby odwoływać się do „super” lub „this”, gdy klasa pochodna zawiera zainicjalizowane właściwości, właściwości parametrów lub prywatne identyfikatory.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrona typu oparta na elemencie „this” nie jest zgodna z ochroną typu opartą na parametrze.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ „this” jest dostępny tylko w niestatycznej składowej klasy lub interfejsu.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modyfikatora „export” najwyższego poziomu nie można używać w deklaracjach wartości w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Plik „tsconfig.json” jest już zdefiniowany w: „{0}”.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Składowa krotki nie może być jednocześnie opcjonalna i typu rest.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Nie można indeksować typu krotki z wartością ujemną.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Wyrażenie „yield” jest dozwolone tylko w treści generatora.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Nie można uzyskać dostępu do metody abstrakcyjnej „{0}” w klasie „{1}” za pomocą wyrażenia super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Metody abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Właściwości abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Właściwość abstrakcyjna „{0}” w klasie „{1}” jest niedostępna w konstruktorze.", "Accessibility_modifier_already_seen_1028": "Napotkano już modyfikator dostępności.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Metody dostępu są dostępne tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Obie metody dostępu muszą być abstrakcyjne lub nieabstrakcyjne.", "Add_0_to_unresolved_variable_90008": "Dodaj „{0}.” do nierozpoznanej zmiennej", "Add_a_return_statement_95111": "Dodaj instrukcję return", + "Add_a_return_type_to_the_function_declaration_9031": "Dodaj zwracany typ do deklaracji funkcji.", + "Add_a_return_type_to_the_function_expression_9030": "Dodaj zwracany typ do wyrażenia funkcji.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Dodaj zwracany typ do deklaracji metody dostępu get.", + "Add_a_return_type_to_the_method_9034": "Dodawanie typu zwracanego do metody", + "Add_a_type_annotation_to_the_parameter_0_9028": "Dodaj adnotację typu do parametru {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Dodaj adnotację typu do właściwości {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Dodaj adnotację typu do zmiennej {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Dodaj typ do parametru deklaracji metody dostępu zestawu.", "Add_all_missing_async_modifiers_95041": "Dodaj wszystkie brakujące modyfikatory „async”", "Add_all_missing_attributes_95168": "Dodawanie wszystkich brakujących atrybutów", "Add_all_missing_call_parentheses_95068": "Dodaj wszystkie brakujące nawiasy wywołań", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Dodaj wszystkie brakujące importy", "Add_all_missing_members_95022": "Dodaj wszystkie brakujące elementy członkowskie", "Add_all_missing_override_modifiers_95162": "Dodaj wszystkie brakujące modyfikatory „override”", + "Add_all_missing_parameters_95190": "Dodaj wszystkie brakujące parametry", "Add_all_missing_properties_95166": "Dodaj wszystkie brakujące właściwości", "Add_all_missing_return_statement_95114": "Dodaj wszystkie brakujące instrukcje return", "Add_all_missing_super_calls_95039": "Dodaj wszystkie brakujące wywołania typu super", + "Add_all_missing_type_annotations_90067": "Dodaj wszystkie brakujące adnotacje typu", + "Add_all_optional_parameters_95193": "Dodaj wszystkie parametry opcjonalne", + "Add_annotation_of_type_0_90062": "Dodaj adnotację typu „{0}”", "Add_async_modifier_to_containing_function_90029": "Dodaj modyfikator asynchroniczny do funkcji zawierającej", "Add_await_95083": "Dodaj operator „await”", "Add_await_to_initializer_for_0_95084": "Dodaj operator „await” do inicjatora dla elementu „{0}”", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości", "Add_missing_attributes_95167": "Dodawanie brakujących atrybutów", "Add_missing_call_parentheses_95067": "Dodaj brakujące nawiasy wywołań", + "Add_missing_comma_for_object_member_completion_0_95187": "Dodaj brakujący przecinek dla ukończenia składowych obiektu „{0}”.", "Add_missing_enum_member_0_95063": "Dodaj brakujący element członkowski wyliczenia „{0}”", "Add_missing_function_declaration_0_95156": "Dodaj brakującą deklarację funkcji „{0}”", "Add_missing_new_operator_to_all_calls_95072": "Dodaj brakujący operator „new” do wszystkich wywołań", "Add_missing_new_operator_to_call_95071": "Dodaj brakujący operator „new” do wywołania", + "Add_missing_parameter_to_0_95188": "Dodaj brakujący parametr do elementu „{0}”", + "Add_missing_parameters_to_0_95189": "Dodaj brakujące parametry do elementu „{0}”", "Add_missing_properties_95165": "Dodaj brakujące właściwości", "Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”", "Add_missing_typeof_95052": "Dodaj brakujący element „typeof”", "Add_names_to_all_parameters_without_names_95073": "Dodaj nazwy do wszystkich parametrów bez nazw", + "Add_optional_parameter_to_0_95191": "Dodaj opcjonalny parametr do elementu „{0}\"", + "Add_optional_parameters_to_0_95192": "Dodaj opcjonalne parametry do elementu „{0}”", "Add_or_remove_braces_in_an_arrow_function_95058": "Dodaj lub usuń nawiasy klamrowe w funkcji strzałki", "Add_override_modifier_95160": "Dodaj modyfikator „override”", "Add_parameter_name_90034": "Dodaj nazwę parametru", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej", + "Add_return_type_0_90063": "Dodaj zwracany typ „{0}”", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Dodaj elementy satisfies i asercję typu do tego wyrażenia (satisfies T jako T), aby jawnie utworzyć typ.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Dodaj elementy satisfies i asercję typu wbudowanego za pomocą elementu „{0}”", "Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów", "Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Dodaj element „niezdefiniowany” do typu podczas uzyskiwania dostępu przy użyciu indeksu.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Zezwalaj na elementy „import x from y”, gdy moduł nie ma domyślnej operacji eksportu.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Zezwalaj na jednorazowe importowanie funkcji pomocniczych z biblioteki tslib w projekcie zamiast dołączania ich dla poszczególnych plików.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Zezwalaj na importowanie w celu uwzględnienia rozszerzeń plików TypeScript. Wymaga ustawienia elementu „--moduleResolution bundler” i „--noEmit” lub „--emitDeclarationOnly”.", "Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Zezwalaj na traktowanie wielu folderów jako jednego podczas rozpoznawania modułów.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Już dołączona nazwa pliku „{0}” różni się od nazwy pliku „{1}” tylko wielkością liter", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Argument pasujący do tego wzorca powiązania nie został podany.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Arytmetyczny operand musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkcja strzałki nie może mieć parametru „this”.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchroniczna funkcja lub metoda w wersji ES5/ES3 wymaga konstruktora \"Promise\". Upewnij się, że masz deklarację dla konstruktora \"Promise\", lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchroniczna funkcja lub metoda w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchroniczna funkcja lub metoda musi zwrócić element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", "An_async_iterator_must_have_a_next_method_2519": "Iterator asynchroniczny musi mieć metodę „next()”.", "An_element_access_expression_should_take_an_argument_1011": "Wyrażenie dostępu do elementu powinno przyjmować argument.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklaracji eksportu można używać tylko na najwyższym poziomie modułu.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklaracji eksportu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", "An_export_declaration_cannot_have_modifiers_1193": "Deklaracja eksportu nie może mieć modyfikatorów.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Deklaracja „export =” musi odwoływać się do rzeczywistej wartości, gdy właściwość „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklaracja „export =” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Element „export default” musi odwoływać się do rzeczywistej wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Element „export default” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Wyrażenie typu „void” nie może być testowane pod kątem prawdziwości.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozszerzona wartość znaku ucieczki Unicode musi należeć do zakresu od 0x0 do 0x10FFFF (włącznie).", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identyfikatora lub słowa kluczowego nie można użyć bezpośrednio po literale liczbowym.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementacja nie może być zadeklarowana w otaczających kontekstach.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu nie może odwoływać się do deklaracji, która została wyeksportowana przy użyciu elementu „export type”.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu nie może odwoływać się do deklaracji, która została zaimportowana przy użyciu elementu „import type”.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Alias importu nie może zostać rozpoznany jako deklaracja typu lub deklaracja tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", "An_import_alias_cannot_use_import_type_1392": "Alias importu nie może używać właściwości „import type”", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklaracji importu można używać tylko na najwyższym poziomie modułu.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklaracji importu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", "An_import_declaration_cannot_have_modifiers_1191": "Deklaracja importu nie może mieć modyfikatorów.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Ścieżka importu nie może kończyć się rozszerzeniem „{0}”. Rozważ zaimportowanie „{1}”.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ścieżka importu może tylko kończyć się rozszerzeniem „{0}”, gdy jest włączona opcja „allowImportingTsExtensions”.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Sygnatura indeksu nie może mieć parametru rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Sygnatura indeksu nie może być zakończona przecinkiem.", "An_index_signature_must_have_a_type_annotation_1021": "Sygnatura indeksu musi mieć adnotację typu.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po wyrażeniu tworzenia wystąpienia nie może następować dostęp do właściwości.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Interfejs może rozszerzać tylko identyfikator/nazwę kwalifikowaną z opcjonalnymi argumentami typu.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Interfejs może rozszerzać tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Interfejs nie może rozszerzyć typu pierwotnego, takiego jak „{0}”; interfejs może rozszerzać tylko nazwane typy i klasy", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Interfejs nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Może rozszerzać tylko inne nazwane typy obiektów.", "An_interface_property_cannot_have_an_initializer_1246": "Właściwość interfejsu nie może mieć inicjatora.", "An_iterator_must_have_a_next_method_2489": "Iterator musi zawierać metodę „next()”.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "W przypadku używania dyrektywy pragma @jsx z fragmentami JSX jest wymagana dyrektywa pragma @jsxFrag.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literał obiektu nie może mieć wielu właściwości o tej samej nazwie.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literał obiektu nie może mieć właściwości i metody dostępu o takiej samej nazwie.", "An_object_member_cannot_be_declared_optional_1162": "Składowa obiektu nie może być zadeklarowana jako opcjonalna.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]” obiektu musi zwracać wartość logiczną, aby mogła być używana po prawej stronie wyrażenia „instanceof”.", "An_optional_chain_cannot_contain_private_identifiers_18030": "Opcjonalny łańcuch nie może zawierać identyfikatorów prywatnych.", "An_optional_element_cannot_follow_a_rest_element_1266": "Element opcjonalny nie może następować po elemencie rest.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Zewnętrzna wartość parametru „this” jest zasłaniana przez ten kontener.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Sygnatura przeciążenia nie może być zadeklarowana jako generator.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Wyrażenie jednoargumentowe z operatorem „{0}” jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", "Annotate_everything_with_types_from_JSDoc_95043": "Adnotuj wszystko przy użyciu typów JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Adnotuj typy funkcji expando właściwości w przestrzeni nazw", "Annotate_with_type_from_JSDoc_95009": "Dodaj adnotację z typem z danych JSDoc", "Another_export_default_is_here_2753": "W tym miejscu jest kolejny element export default.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Każda właściwość standardu Unicode, która może być zgodna z więcej niż jednym znakiem, jest dostępna tylko wtedy, gdy ustawiono flagę Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Wszystko, co może być zgodne z więcej niż pojedynczym znakiem, jest nieprawidłowe wewnątrz klasy znaków negowanych.", "Are_you_missing_a_semicolon_2734": "Czy brakuje średnika?", "Argument_expression_expected_1135": "Oczekiwano wyrażenia argumentu.", "Argument_for_0_option_must_be_Colon_1_6046": "Argumentem opcji „{0}” musi być: {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argumentu typu \"{0}\" nie można przypisać do parametru typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nie podano argumentów dla parametru REST „{0}”.", "Array_element_destructuring_pattern_expected_1181": "Oczekiwano wzorca usuwającego strukturę elementu tablicy.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Tablic z elementami rozproszonymi nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Asercje wymagają, aby każda nazwa w celu wywołania była zadeklarowana z jawną adnotacją typu.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Asercje wymagają, aby cel wywołania był identyfikatorem lub nazwą kwalifikowaną.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Przypisywanie właściwości do funkcji bez deklarowania ich nie jest obsługiwane w przypadku opcji --isolatedDeclarations. Dodaj jawną deklarację właściwości przypisanych do tej funkcji.", "Asterisk_Slash_expected_1010": "Oczekiwano znaków „*/”.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Co najmniej jedna metoda dostępu musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozszerzenia zakresu globalnego mogą być zagnieżdżane bezpośrednio jedynie w modułach zewnętrznych lub deklaracjach modułów otoczenia.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozszerzenia zakresu globalnego muszą mieć modyfikator „declare”, chyba że znajdują się w już otaczającym kontekście.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatyczne odnajdowanie operacji wpisywania zostało włączone w projekcie „{0}”. Trwa uruchamianie dodatkowego przejścia rozwiązania dla modułu „{1}” przy użyciu lokalizacji pamięci podręcznej „{2}”.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia await wewnątrz bloku statycznego klasy.", "BUILD_OPTIONS_6919": "OPCJE KOMPILACJI", "Backwards_Compatibility_6253": "Zgodność z poprzednimi wersjami", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Wyrażenia klasy bazowej nie mogą odwoływać się do parametrów typu klasy.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Literały typu BigInt są niedostępne, gdy wersja docelowa jest wcześniejsza niż ES2020.", "Binary_digit_expected_1177": "Oczekiwano bitu.", "Binding_element_0_implicitly_has_an_1_type_7031": "Dla elementu powiązania „{0}” niejawnie określono typ „{1}”.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Elementów powiązania nie można eksportować bezpośrednio za pomocą wyrażenia --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Zmienna „{0}” o zakresie bloku została użyta przed jej deklaracją.", "Build_a_composite_project_in_the_working_directory_6925": "Skompiluj projekt złożony w katalogu roboczym.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Kompiluj co najmniej jeden projekt i jego zależności, jeśli są nieaktualne", "Build_option_0_requires_a_value_of_type_1_5073": "Opcja kompilacji „{0}” wymaga wartości typu {1}.", "Building_project_0_6358": "Trwa kompilowanie projektu „{0}”...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Wbudowane iteratory są tworzone przy użyciu typu „TReturn” o wartości „undefined” zamiast „any”.", "COMMAND_LINE_FLAGS_6921": "FLAGI WIERSZA POLECENIA", "COMMON_COMMANDS_6916": "TYPOWE POLECENIA", "COMMON_COMPILER_OPTIONS_6920": "TYPOWE OPCJE KOMPILATORA", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Zwracane typy sygnatur wywołania „{0}” i „{1}” są niezgodne.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dla sygnatury wywołania bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Sygnatury wywołania bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", - "Call_target_does_not_contain_any_signatures_2346": "Cel wywołania nie zawiera żadnych podpisów.", "Can_only_convert_logical_AND_access_chains_95142": "Można konwertować tylko łańcuchy logiczne ORAZ łańcuchy dostępu", "Can_only_convert_named_export_95164": "Można przekonwertować tylko nazwany eksport", "Can_only_convert_property_with_modifier_95137": "Właściwość można skonwertować tylko za pomocą modyfikatora", - "Can_only_convert_string_concatenation_95154": "Konwertować można tylko łączenie ciągów", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Można konwertować tylko połączenia ciągów i literały ciągów", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Nie można uzyskać dostępu do elementu „{0}.{1}”, ponieważ element „{0}” jest typem, ale nie przestrzenią nazw. Czy chcesz pobrać typ właściwości „{1}” w lokalizacji „{0}” za pomocą elementu „{0}[„{1}”]”?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Nie można uzyskać dostępu do otaczających wyliczeń const, gdy flaga „--isolatedModules” jest podana.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Nie można uzyskać dostępu do „{0}” z innego pliku bez kwalifikacji, gdy opcja „{1}” jest włączona. Zamiast tego użyj „{2}”.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Nie można uzyskać dostępu do wyliczenia stałej otoczenia, gdy element „{0}” jest włączony.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Nie można przypisać typu konstruktora „{0}” do typu konstruktora „{1}”.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Nie można przypisać abstrakcyjnego typu konstruktora do nieabstrakcyjnego typu konstruktora.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Nie można przypisać do elementu „{0}”, ponieważ jest to klasa.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Nie można znaleźć definicji biblioteki dla elementu „{0}”.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nie można znaleźć definicji biblioteki dla elementu „{0}”. Czy chodziło Ci o element „{1}”?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nie można znaleźć modułu „{0}”. Rozważ użycie opcji „--resolveJsonModule” do importowania modułu z rozszerzeniem „.json”.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Nie można odnaleźć modułu „{0}”. Czy chcesz ustawić opcję „moduleResolution” na wartość „node”, czy dodać aliasy do opcji „paths”?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nie można odnaleźć modułu „{0}”. Czy chcesz ustawić opcję „moduleResolution” na wartość „nodenext”, czy dodać aliasy do opcji „paths”?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nie można odnaleźć modułu „{0}” lub odpowiadających mu deklaracji typów.", "Cannot_find_name_0_2304": "Nie można odnaleźć nazwy „{0}”.", "Cannot_find_name_0_Did_you_mean_1_2552": "Nie można znaleźć nazwy „{0}”. Czy chodziło Ci o „{1}”?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nie można odnaleźć nazwy \"{0}\". Czy chodziło Ci o napisanie tego w funkcji asynchronicznej?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na wersję \"{1}\" lub nowszą.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić element \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”, a następnie dodaj ciąg „bun” do pola typów w pliku tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia \"npm i --save-dev @types/jest\" lub \"npm i --save-dev @types/mocha\", a następnie dodaj element \"jest\" lub \"mocha\" do pola types w pliku tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale destrukturyzacja tablicy będzie zawsze wysyłała „{0}”.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale rozkładanie tablicy będzie zawsze wysyłało „{0}”.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale pętla for-of będzie zawsze wysyłała „{0}”.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Nie można poprzedzić projektu „{0}”, ponieważ nie ma on ustawionej właściwości „outFile”", + "Cannot_move_statements_to_the_selected_file_95183": "Nie można przenieść instrukcji do wybranego pliku", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Nie można przenieść do pliku, wybrany plik jest nieprawidłowy", "Cannot_read_file_0_5083": "Nie można odczytać pliku „{0}”.", "Cannot_read_file_0_Colon_1_5012": "Nie można odczytać pliku „{0}”: {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Nie można ponownie zadeklarować zmiennej „{0}” o zakresie bloku.", "Cannot_redeclare_exported_variable_0_2323": "Nie można zadeklarować ponownie wyeksportowanej zmiennej „{0}”.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nie można ponownie zadeklarować identyfikatora „{0}” w klauzuli catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nie można uruchomić wywołania funkcji w adnotacji typu.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Nie można zaktualizować danych wyjściowych projektu „{0}”, ponieważ wystąpił błąd podczas odczytu pliku „{1}”", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Nie można użyć kodu JSX, jeśli nie podano flagi „--jsx”.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Nie można użyć polecenia „export import” w przestrzeni nazw typu lub tylko typu, jeśli podano flagę „--isolatedModules”.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Nie można użyć polecenia „export import” w przestrzeni nazw typu lub tylko typu, gdy opcja „{0}” jest włączona.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nie można używać importów, eksportów lub rozszerzeń modułów, jeśli flaga „--module” ma wartość „none”.", "Cannot_use_namespace_0_as_a_type_2709": "Nie można używać przestrzeni nazw „{0}” jako typu.", "Cannot_use_namespace_0_as_a_value_2708": "Nie można używać przestrzeni nazw „{0}” jako wartości.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Zmień atrybut „extends” na „implements”", "Change_spelling_to_0_90022": "Zmień pisownię na „{0}”", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Sprawdź, czy istnieją zadeklarowane właściwości klas, które nie zostały ustawione w konstruktorze.", + "Check_side_effect_imports_6806": "Sprawdź importy efektów ubocznych.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Sprawdź, czy argumenty dla metod „bind”, „call” i „apply” są zgodne z oryginalną funkcją.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Sprawdzanie, czy „{0}” to najdłuższy zgodny prefiks dla „{1}” — „{2}”.", "Circular_definition_of_import_alias_0_2303": "Definicja cykliczna aliasu importu „{0}”.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklaracja klasy nie może implementować listy przeciążeń dla elementu \"{0}\".", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag \"@augments\" lub \"@extends\".", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekoratorów klas nie można używać ze statycznym identyfikatorem prywatnym. Rozważ usunięcie eksperymentalnego dekoratora.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole klasy „{0}” zdefiniowane przez klasę nadrzędną nie jest dostępne w klasie podrzędnej za pośrednictwem super.", "Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Nazwą klasy nie może być słowo „Object”, gdy docelowym językiem jest ES5 z modułem {0}.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Opcje wiersza polecenia", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Skompiluj projekt z uwzględnieniem ścieżki jego pliku konfiguracji lub folderu z plikiem „tsconfig.json”.", "Compiler_Diagnostics_6251": "Diagnostyka kompilatora", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Opcja kompilatora „{0}” nie może mieć pustego ciągu.", "Compiler_option_0_expects_an_argument_6044": "Opcja kompilatora „{0}” oczekuje argumentu.", "Compiler_option_0_may_not_be_used_with_build_5094": "Opcja kompilatora \"--{0}\" nie może być używana z parametrem \"--build\".", "Compiler_option_0_may_only_be_used_with_build_5093": "Opcję kompilatora \"--{0}\" można używać tylko z parametrem \"--build\".", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Projekty kompozytowe nie mogą wyłączyć emitowania deklaracji.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Projekty złożone nie mogą wyłączać kompilacji przyrostowej.", "Computed_from_the_list_of_input_files_6911": "Obliczono na podstawie listy plików wejściowych", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Obliczone właściwości muszą być literałami liczb lub ciągów, zmiennymi lub wyrażeniami kropkowanymi z wyrażeniem --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "Obliczone nazwy właściwości nie są dozwolone w wyliczeniach.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nie można wywnioskować obliczonych nazw właściwości w literałach klas lub obiektów za pomocą wyrażenia --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Obliczone wartości nie są dozwolone w wyliczeniu ze składowymi o wartości ciągu.", "Concatenate_and_emit_output_to_single_file_6001": "Połącz i wyemituj dane wyjściowe do pojedynczego pliku.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Znaleziono definicje będące w konflikcie dla „{0}” w „{1}” i „{2}”. Rozważ zainstalowanie konkretnej wersji tej biblioteki, aby rozwiązać problem.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Warunki, które należy ustawić oprócz ustawień domyślnych specyficznych dla programu rozpoznawania nazw podczas rozpoznawania importów.", "Conflicts_are_in_this_file_6201": "Konflikty znajdują się w tym pliku.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Rozważ dodanie modyfikatora \"declare\" do tej klasy.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Zwracane typy „{0}” i „{1}” sygnatur konstrukcji są niezgodne.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Konwertuj element „{0}” na zamapowany typ obiektu", "Convert_all_const_to_let_95102": "Konwertuj wszystkie elementy „const” na „let”", "Convert_all_constructor_functions_to_classes_95045": "Przekonwertuj wszystkie funkcje konstruktora na klasy", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Konwertuj wszystkie importy nieużywane jako wartość na importy dotyczące tylko typu", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Konwertuj wszystkie nieprawidłowe znaki na kod jednostki HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Konwertuj wszystkie ponownie wyeksportowane typy na eksporty dotyczące tylko typu", "Convert_all_require_to_import_95048": "Konwertuj wszystkie wywołania „require” na wywołania „import”", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Konwertuj wszystko na literały liczbowe typu bigint", "Convert_all_to_default_imports_95035": "Przekonwertuj wszystko na domyślne importowanie", "Convert_all_type_literals_to_mapped_type_95021": "Konwertuj wszystkie literały typu na typ zamapowany", + "Convert_all_typedef_to_TypeScript_types_95177": "Konwertuj wszystkie elementy typedef na typy TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Konwertuj funkcję strzałki lub wyrażenie funkcji", "Convert_const_to_let_95093": "Konwertuj zmienne „const” na „let”", "Convert_default_export_to_named_export_95061": "Konwertuj eksport domyślny na nazwany eksport", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Konwertuj na opcjonalne wyrażenie łańcucha", "Convert_to_template_string_95096": "Konwertuj na ciąg szablonu", "Convert_to_type_only_export_1364": "Konwertuj na eksport dotyczący tylko typu", - "Convert_to_type_only_import_1373": "Konwertuj na import dotyczący tylko typu", + "Convert_typedef_to_TypeScript_type_95176": "Konwertuj element typedef na typ TypeScript.", "Corrupted_locale_file_0_6051": "Uszkodzony plik ustawień regionalnych {0}.", "Could_not_convert_to_anonymous_function_95153": "Nie można przekonwertować na funkcję anonimową", "Could_not_convert_to_arrow_function_95151": "Nie można przekonwertować na funkcję strzałki", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Nie można znaleźć nazwy „{0}”. Czy chodziło o „{1}”?", "Could_not_find_namespace_import_or_named_imports_95132": "Nie można było znaleźć importu przestrzeni nazw lub nazwanych importów", "Could_not_find_property_for_which_to_generate_accessor_95135": "Nie można było znaleźć właściwości, dla której ma zostać wygenerowana metoda dostępu", + "Could_not_find_variable_to_inline_95185": "Nie można odnaleźć zmiennej w tekście.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nie można rozpoznać ścieżki „{0}” z rozszerzeniami: {1}.", "Could_not_write_file_0_Colon_1_5033": "Nie można zapisać pliku „{0}”: {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Twórz pliki mapy źródła dla emitowanych plików JavaScript.", "Create_sourcemaps_for_d_ts_files_6614": "Twórz mapy źródła dla plików d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Tworzy plik tsconfig.json z zalecanymi ustawieniami w katalogu roboczym.", "DIRECTORY_6038": "KATALOG", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sekwencje ucieczki i odwołania wsteczne dziesiętne nie są dozwolone w klasie znaków.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Wartości dziesiętne z zerami wiodącymi są niedozwolone.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklaracja rozszerza deklarację w innym pliku. Nie można przeprowadzić serializacji.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Emisja deklaracji dla tego pliku wymaga zachowania tego importu dla rozszerzeń. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}” z modułu „{1}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "Emisja deklaracji dla tego parametru wymaga niejawnego dodania niezdefiniowanego do jego typu. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", "Declaration_expected_1146": "Oczekiwano deklaracji.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Nazwa deklaracji powoduje konflikt z wbudowanym identyfikatorem globalnym „{0}”.", "Declaration_or_statement_expected_1128": "Oczekiwano deklaracji lub instrukcji.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Zadeklaruj właściwość statyczną „{0}”", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Zwracany typ funkcji dekoratora „{0}” nie jest możliwy do przypisania do typu „{1}”.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Zwracany typ funkcji dekoratora to „{0}”, natomiast powinien być to typ „void” lub „any”.", + "Decorator_used_before_export_here_1486": "Dekorator używany przed elementem „export” w tym miejscu.", "Decorators_are_not_valid_here_1206": "Elementy Decorator nie są tutaj prawidłowe.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Nie można stosować elementów Decorator do wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Nie można zastosować dekoratorów w przypadku parametrów \"this\".", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratory nie mogą występować po instrukcji „export” lub „export default”, jeśli występują również przed instrukcją „export”.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratory muszą poprzedzać nazwę i wszystkie słowa kluczowe deklaracji właściwości.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Wpisz zmienne klauzuli catch jako „unknown” zamiast „any”.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Domyślny eksport modułu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Eksportów domyślnych nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", "Default_library_1424": "Domyślna biblioteka", "Default_library_for_target_0_1425": "Domyślna biblioteka dla elementu docelowego „{0}”", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definicje następujących identyfikatorów powodują konflikt z tymi w innym pliku: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Wyłącz wymazywanie deklaracji „const enum” w wygenerowanym kodzie.", "Disable_error_reporting_for_unreachable_code_6603": "Wyłącz raportowanie błędów dla nieosiągalnego kodu.", "Disable_error_reporting_for_unused_labels_6604": "Wyłącz raportowanie błędów dla nieużywanych etykiet.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Wyłącz sprawdzanie pełnego typu (będą zgłaszane tylko krytyczne analizy i błędy emisji).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Wyłącz generowanie niestandardowych funkcji pomocniczych, takich jak „__extends” w skompilowanych danych wyjściowych.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Wyłącz dołączanie plików bibliotek, w tym domyślnego pliku lib.d.ts.", "Disable_loading_referenced_projects_6235": "Wyłącz ładowanie przywoływanych projektów.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Nie zgłaszaj błędów dla nieosiągalnego kodu.", "Do_not_report_errors_on_unused_labels_6074": "Nie zgłaszaj błędów dla nieużywanych etykiet.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Nie rozpoznawaj rzeczywistej ścieżki linków symbolicznych.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Nie przekształcaj ani nie usuwaj żadnych importów ani eksportów, które nie są oznaczone jako tylko typy, dzięki czemu są zapisywane w formacie pliku wyjściowego na podstawie ustawienia „module”.", "Do_not_truncate_error_messages_6165": "Nie obcinaj komunikatów o błędach.", "Duplicate_function_implementation_2393": "Zduplikowana implementacja funkcji.", "Duplicate_identifier_0_2300": "Zduplikowany identyfikator „{0}”.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Zduplikowana sygnatura indeksu dla typu „{0}”.", "Duplicate_label_0_1114": "Zduplikowana etykieta „{0}”.", "Duplicate_property_0_2718": "Zduplikowana właściwość „{0}”.", + "Duplicate_regular_expression_flag_1500": "Zduplikowana flaga wyrażenia regularnego.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specyfikator dynamicznego importowania musi być typu „string”, ale określono typ „{0}”.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamiczne importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na „es2020”, „es2022”, „esnext”, „commonjs”, „amd”, „system”, „umd”, „node16” lub „nodenext”.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Importy dynamiczne akceptują jako argumenty tylko specyfikator modułu i asercję opcjonalną", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Importy dynamiczne obsługują tylko drugi argument, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node16” lub „nodenext”.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Importy dynamiczne mogą akceptować tylko specyfikator modułu i opcjonalny zestaw atrybutów jako argumenty", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Importy dynamiczne obsługują tylko drugi argument, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node16”, „nodenext” lub „preserve”.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Składnia ESM jest niedozwolona w module CommonJS, gdy element „module” jest ustawiony na wartość „preserve”.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Składnia ESM jest niedozwolona w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Każda deklaracja znaku „{0}.{1}” różni się wartością, gdzie oczekiwano elementu „{2}”, ale podano „{3}”.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Każdy element członkowski typu unii „{0}” ma sygnatury konstrukcji, ale żadne z tych sygnatur nie są ze sobą zgodne.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Każdy element członkowski typu unii „{0}” ma sygnatury, ale żadne z tych sygnatur nie są ze sobą zgodne.", "Editor_Support_6249": "Pomoc techniczna edytora", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Włącz raportowanie błędów w plikach JavaScript z zaznaczonym typem.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Włącz raportowanie błędów, gdy zmienne lokalne nie są odczytywane.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Włącz raportowanie błędów, gdy element „this” ma typ „any”.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Włącz eksperymentalną obsługę dekoratorów w wersji TC39 stage 2 draft.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Włącz eksperymentalną obsługę starszych dekoratorów eksperymentalnych.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Włącz importowanie plików z dowolnym rozszerzeniem, pod warunkiem, że istnieje plik deklaracji.", "Enable_importing_json_files_6689": "Włącz importowanie plików json.", "Enable_project_compilation_6302": "Włącz kompilację projektu", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Włącz ścisłe metody „bind”, „call” i „apply” dla funkcji.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Upewnij się, że wielkość liter jest poprawna w importach.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Upewnij się, że każdy plik może być bezpiecznie transponowany bez polegania na innych importach.", "Ensure_use_strict_is_always_emitted_6605": "Upewnij się, że element „use strict” jest zawsze emitowany.", + "Entering_conditional_exports_6413": "Wprowadzanie eksportów warunkowych.", "Entry_point_for_implicit_type_library_0_1420": "Punkt wejścia dla biblioteki niejawnych typów „{0}”", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punkt wejścia dla biblioteki niejawnych typów „{0}” o identyfikatorze packageId „{1}”", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklaracje wyliczeń można scalać tylko z przestrzeniami nazw lub innymi deklaracjami wyliczeń.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Wszystkie deklaracje wyliczeń muszą być elementami const lub żadna nie może być elementem const.", "Enum_member_expected_1132": "Oczekiwano składowych wyliczenia.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Składowa wyliczenia następująca po składowej liczbowej niebędącej literałem musi mieć inicjator, gdy jest włączona opcja „isolatedModules”.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicjatory składowych wyliczenia muszą być możliwe do obliczenia bez odwołań do symboli zewnętrznych z wyrażeniem --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "Składowa wyliczenia musi mieć inicjator.", "Enum_name_cannot_be_0_2431": "Wyliczenie nie może mieć nazwy „{0}”.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Typ wyliczenia „{0}” ma składowe z inicjatorami niebędącymi literałami.", "Errors_Files_6041": "Pliki z błędami", + "Escape_sequence_0_is_not_allowed_1488": "Sekwencja ucieczki „{0}” jest niedozwolona.", "Examples_Colon_0_6026": "Przykłady: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Nadmierna złożoność podczas porównywania typów „{0}” i „{1}”.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadmierna głębokość stosu podczas porównywania typów „{0}” i „{1}”.", + "Exiting_conditional_exports_6416": "Wyjście z eksportu warunkowego.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Oczekiwano argumentów typu {0}-{1}; podaj je z tagiem „@extends”.", "Expected_0_arguments_but_got_1_2554": "Oczekiwane argumenty: {0}, uzyskano: {1}.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Oczekiwano {0} argumentów, ale otrzymano {1}. Czy zapomniano dołączyć wartość „void” w argumencie typu obiektu „Promise”?", "Expected_0_type_arguments_but_got_1_2558": "Oczekiwane argumenty typu: {0}, uzyskano: {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Oczekiwano argumentów typu {0}; podaj je z tagiem „@extends”.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Oczekiwano 1 argumentu, ale otrzymano 0. Element „new Promise()” wymaga wskazówki JSDoc, aby utworzyć element „resolve”, który można wywołać bez argumentów.", + "Expected_a_Unicode_property_name_1523": "Oczekiwano nazwy właściwości standardu Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Oczekiwano nazwy lub wartości właściwości standardu Unicode.", + "Expected_a_Unicode_property_value_1525": "Oczekiwano wartości właściwości standardu Unicode.", + "Expected_a_capturing_group_name_1514": "Oczekiwano nazwy grupy przechwytywania.", + "Expected_a_class_set_operand_1520": "Oczekiwano operandu zestawu klas.", "Expected_at_least_0_arguments_but_got_1_2555": "Oczekiwane argumenty: co najmniej {0}, uzyskano: {1}.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Oczekiwano odpowiadającego tagu zamykającego kodu JSX dla elementu „{0}”.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Oczekiwano odpowiedniego tagu zamykającego dla fragmentu kodu JSX.", "Expected_for_property_initializer_1442": "Oczekiwano znaku „=” dla inicjatora właściwości.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Oczekiwany typ pola „{0}” w pliku „package.json” to „{1}”, a uzyskano typ „{2}”.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Obsługa eksperymentalna dekoratorów to funkcja, która może ulec zmianie w nowszych wersjach. Ustaw opcję „experimentalDecorators” w pliku „tsconfig” lub „jsconfig”, aby usunąć to ostrzeżenie.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Jawnie określony rodzaj rozpoznawania modułów: „{0}”.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Nie można wykonać potęgowania wartości typu „bigint”, chyba że opcja „target” ma wartość „es2016” lub nowszą.", "Export_0_from_module_1_90059": "Eksportuj „{0}” z modułu „{1}”", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "Wyeksportowana zmienna „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Eksporty i przypisania eksportów nie są dozwolone w rozszerzeniach modułów.", "Expression_expected_1109": "Oczekiwano wyrażenia.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Wyrażenie musi być ujęte w nawiasy, aby było używane jako dekorator.", "Expression_or_comma_expected_1137": "Oczekiwano wyrażenia lub przecinka.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Wyrażenie tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Wyrażenie tworzy typ unii, który jest zbyt złożony, aby go reprezentować.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Wynikiem rozpoznania wyrażenia jest element „_super” używany przez kompilator do przechwycenia odwołania do klasy bazowej.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_newTarget” używana przez kompilator do przechwytywania odwołania do metawłaściwości „new.target”.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_this” używana przez kompilator do przechwycenia odwołania do elementu „this”.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Nie można wywnioskować typu wyrażenia za pomocą wyrażenia --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzula Extends nie może zawierać wyrażenia z parametrem --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzula Extends dla wnioskowanego typu „{0}” ma nazwę prywatną „{1}” lub używa jej.", + "Extract_base_class_to_variable_90064": "Wyodrębnij klasę bazową do zmiennej", + "Extract_binding_expressions_to_variable_90066": "Wyodrębnianie wyrażeń powiązania do zmiennej", "Extract_constant_95006": "Wyodrębnij stałą", + "Extract_default_export_to_variable_90065": "Wyodrębnij domyślny eksport do zmiennej", "Extract_function_95005": "Wyodrębnij funkcję", "Extract_to_0_in_1_95004": "Wyodrębnij do {0} w {1}", "Extract_to_0_in_1_scope_95008": "Wyodrębnij do {0} w zakresie {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Wyodrębnianie do interfejsu", "Extract_to_type_alias_95078": "Wyodrębnianie do aliasu typu", "Extract_to_typedef_95079": "Wyodrębnianie do elementu typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Wyodrębnij do zmiennej i zamień na „{0} as typeof {0}”", "Extract_type_95077": "Typ wyodrębniania", "FILE_6035": "PLIK", "FILE_OR_DIRECTORY_6040": "PLIK LUB KATALOG", - "Failed_to_parse_file_0_Colon_1_5014": "Nie można przeanalizować pliku „{0}”: {1}.", + "Failed_to_find_peerDependency_0_6283": "Nie można odnaleźć elementu peerDependency „{0}”.", + "Failed_to_resolve_under_condition_0_6415": "Nie można rozpoznać pod warunkiem „{0}”.", "Fallthrough_case_in_switch_7029": "Przepuszczająca klauzula case w instrukcji switch.", "File_0_does_not_exist_6096": "Plik „{0}” nie istnieje.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” nie istnieje.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” istnieje.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Plik „{0}” ma nieobsługiwane rozszerzenie. Obsługiwane są tylko rozszerzenia {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Plik „{0}” ma nieobsługiwane rozszerzenie, dlatego zostanie pominięty.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Plik „{0}” jest plikiem JavaScript. Czy chodziło Ci o włączenie opcji „allowJs”?", "File_0_is_not_a_module_2306": "Plik „{0}” nie jest modułem.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Plik „{0}” nie znajduje się na liście plików projektu „{1}”. Projekty muszą zawierać listę wszystkich plików lub używać wzorca „include”.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Plik „{0}” nie znajduje się w katalogu „rootDir” „{1}”. Katalog „rootDir” powinien zawierać wszystkie pliki źródłowe.", "File_0_not_found_6053": "Nie można odnaleźć pliku '{0}'.", "File_Management_6245": "Zarządzanie plikami", + "File_appears_to_be_binary_1490": "Plik jest prawdopodobnie binarny.", "File_change_detected_Starting_incremental_compilation_6032": "Wykryto zmianę pliku. Trwa rozpoczynanie kompilacji przyrostowej...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Plik jest modułem CommonJS, ponieważ element „{0}” nie ma pola „type”", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Plik jest modułem CommonJS, ponieważ element „{0}” ma pole „type”, którego wartość nie jest „module”", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Plik to dane wyjściowe ze źródła odwołania do projektu „{0}”", "File_is_source_from_referenced_project_specified_here_1416": "Plik to źródło z przywoływanego projektu określonego w tym miejscu.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Nazwa pliku „{0}” różni się od już dołączonej nazwy pliku „{1}” tylko wielkością liter.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zamiast tego wyszukaj „{2}”.", "File_name_0_has_a_1_extension_stripping_it_6132": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zostanie ono usunięte.", "File_redirects_to_file_0_1429": "Plik przekierowuje do pliku „{0}”", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specyfikacja pliku nie może zawierać katalogu nadrzędnego („..”) wyświetlanego po symbolu wieloznacznym katalogu rekursywnego („**”): „{0}”.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Napraw wszystkie wyrażenia, w których prawdopodobnie brakuje operatora „await”", "Fix_all_implicit_this_errors_95107": "Usuń wszystkie niejawne błędy „this”", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Napraw wszystkie niepoprawne zwracane typy funkcji asynchronicznych", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli \"For await\" nie można używać wewnątrz bloku statycznego klasy.", + "Fix_all_with_type_only_imports_95182": "Napraw wszystko za pomocą importów tylko typów", "Found_0_errors_6217": "Znaleziono błędy: {0}.", "Found_0_errors_Watching_for_file_changes_6194": "Znalezione błędy: {0}. Obserwowanie zmian plików.", "Found_0_errors_in_1_files_6261": "Znaleziono błędy {0} w plikach {1}.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Znaleziono błędy {0} w tym samym pliku, zaczynając od: {1}", "Found_1_error_6216": "Znaleziono 1 błąd.", "Found_1_error_Watching_for_file_changes_6193": "Znaleziono 1 błąd. Obserwowanie zmian plików.", - "Found_1_error_in_1_6259": "Znaleziono 1 błąd w {1}", + "Found_1_error_in_0_6259": "Znaleziono 1 błąd w {0}", "Found_package_json_at_0_6099": "Znaleziono plik „package.json” w lokalizacji „{0}”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES3” lub „ES5”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES3” lub „ES5”. Definicje klas automatycznie używają trybu z ograniczeniami.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES3” lub „ES5”. Moduły automatycznie używają trybu z ograniczeniami.", + "Found_peerDependency_0_with_1_version_6282": "Znaleziono element peerDependency „{0}” z wersją „{1}”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Definicje klas automatycznie używają trybu z ograniczeniami.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Moduły automatycznie używają trybu z ograniczeniami.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dla wyrażenia funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Brak implementacji funkcji lub nie występuje ona bezpośrednio po deklaracji.", "Function_implementation_name_must_be_0_2389": "Implementacja funkcji musi mieć nazwę „{0}”.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dla funkcji niejawnie określono zwracany typ „any”, ponieważ nie zawiera ona adnotacji zwracanego typu i jest przywoływana bezpośrednio lub pośrednio w jednym z jej zwracanych wyrażeń.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Funkcja nie zawiera końcowej instrukcji return, a zwracany typ nie obejmuje wartości „undefined”.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkcja musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", "Function_not_implemented_95159": "Funkcja nie jest zaimplementowana.", "Function_overload_must_be_static_2387": "Przeciążenie funkcji musi być statyczne.", "Function_overload_must_not_be_static_2388": "Przeciążenie funkcji nie może być statyczne.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Oczekiwano identyfikatora.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Oczekiwano identyfikatora. Ciąg „__esModule” jest zastrzeżony jako eksportowany znacznik podczas transformowania modułów ECMAScript.", "Identifier_or_string_literal_expected_1478": "Oczekiwano identyfikatora lub literału ciągu.", + "Identifier_string_literal_or_number_literal_expected_1496": "Oczekiwano identyfikatora, literału ciągu lub literału liczbowego.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet \"{0}\" faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Jeśli pakiet „{0}” rzeczywiście uwidacznia ten moduł, spróbuj dodać nowy plik deklaracji (.d.ts) zawierający „declare module”{1}';`", "Ignore_this_error_message_90019": "Ignoruj ten komunikat o błędzie", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implementuj interfejs „{0}”", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzula implements wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Niejawna konwersja typu „symbol” na „string” zakończy się niepowodzeniem w czasie wykonywania. Rozważ opakowywanie tego wyrażenia w elemencie „String(...)”.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}\" powoduje konflikt z wartością globalną używaną w tym pliku, dlatego musi być zadeklarowany z importem tylko typu, gdy jest włączona opcja „isolatedModules”.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}” powoduje konflikt z wartością lokalną, dlatego musi być zadeklarowany za pomocą importu tylko typu, gdy jest włączona opcja „isolatedModules”.", "Import_0_from_1_90013": "Importuj element „{0}” z lokalizacji „{1}”", "Import_assertion_values_must_be_string_literal_expressions_2837": "Wartości atrybutu importu muszą być wyrażeniami literału ciągu.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Atrybuty importu są niedozwolone w instrukcjach, które transpilują do wywołań commonjs „require”.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Atrybuty importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext” lub „nodenext”.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Asercje importu są niedozwolone w instrukcjach, które kompilują do wywołań „require” CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Asercje importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „nodenext” lub „preserve”.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Asercji importu nie można używać z importami ani eksportami ograniczonymi do tylko danego typu.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Nie można użyć przypisania importu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „import * as ns from \"mod\"”, „import {a} from \"mod\"” lub „import d from \"mod\"” albo innego formatu modułu.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Wartości atrybutów importu muszą być wyrażeniami literału ciągu.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atrybuty importu są niedozwolone w instrukcjach kompilowanych do wywołań „require” CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Atrybuty importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „nodenext” lub „preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atrybutów importu nie można używać z importami ani eksportami tylko typów.", "Import_declaration_0_is_using_private_name_1_4000": "Deklaracja importu „{0}” używa nazwy prywatnej „{1}”.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklaracja importu powoduje konflikt z deklaracją lokalną „{0}”.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklaracje importu w przestrzeni nazw nie mogą odwoływać się do modułu.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Uwzględnij pliki mapy źródła w emitowanym kodzie JavaScript.", "Includes_imports_of_types_referenced_by_0_90054": "Obejmuje importy typów przywoływanych przez element \"{0}\"", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Zawarcie elementu --watch spowoduje, że -w rozpocznie obserwowanie bieżącego projektu w kierunku zmian w plikach. Po skonfigurowaniu ustawienia możesz określić tryb obserwacji za pomocą:", + "Incomplete_quantifier_Digit_expected_1505": "Niekompletny kwantyfikator. Oczekiwano cyfry.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "Brak sygnatury indeksu dla typu „{0}” w typie „{1}”.", "Index_signature_in_type_0_only_permits_reading_2542": "Sygnatura indeksu w typie „{0}” zezwala tylko na odczytywanie.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Wszystkie poszczególne deklaracje w scalonej deklaracji „{0}” muszą być wyeksportowane lub lokalne.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Wnioskuj typy parametrów na podstawie użycia", "Infer_this_type_of_0_from_usage_95080": "Wnioskuj typ „this” elementu „{0}” na podstawie użycia", "Infer_type_of_0_from_usage_95011": "Wnioskuj typ elementu „{0}” na podstawie użycia", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Wnioskowanie z wyrażeń klasy nie jest obsługiwane w przypadku wyrażenia --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Zainicjuj właściwość „{0}” w konstruktorze", "Initialize_static_property_0_90021": "Zainicjuj właściwość statyczną „{0}”", "Initializer_for_property_0_2811": "Inicjator właściwości \"{0}\"", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicjator zmiennej składowej wystąpienia „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego w konstruktorze.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Inicjator nie określa żadnej wartości dla tego elementu powiązania, a element powiązania nie ma wartości domyślnej.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicjatory są niedozwolone w otaczających kontekstach.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicjuje projekt TypeScript i tworzy plik tsconfig.json.", + "Inline_variable_95184": "Zmienna wbudowana", "Insert_command_line_options_and_files_from_a_file_6030": "Wstaw opcje wiersza polecenia i pliki z pliku.", "Install_0_95014": "Zainstaluj składnik „{0}”", "Install_all_missing_types_packages_95033": "Zainstaluj wszystkie brakujące pakiety typów", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nieprawidłowa nazwa modułu w rozszerzeniu. Nie można znaleźć modułu „{0}”.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Nieprawidłowy opcjonalny łańcuch z nowego wyrażenia. Czy chodziło Ci o wywołanie „{0}()”?", "Invalid_reference_directive_syntax_1084": "Nieprawidłowa składnia dyrektywy „reference”.", + "Invalid_syntax_in_decorator_1498": "Nieprawidłowa składnia w dekoratorze.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Nieprawidłowe użycie elementu \"{0}\". Nie można go użyć wewnątrz bloku statycznego klasy.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Nieprawidłowe użycie elementu „{0}”. Moduły są określane automatycznie w trybie z ograniczeniami.", "Invalid_use_of_0_in_strict_mode_1100": "Nieprawidłowe użycie elementu „{0}” w trybie z ograniczeniami.", + "Invalid_value_for_ignoreDeprecations_5103": "Nieprawidłowa wartość parametru „--ignoreDeprecations”.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Nieprawidłowa wartość elementu „jsxFactory”. „{0}” to nie jest prawidłowy identyfikator ani kwalifikowana nazwa.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Nieprawidłowa wartość elementu „jsxFragmentFactory”. „{0}” nie jest prawidłowym identyfikatorem ani kwalifikowaną nazwą.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Nieprawidłowa wartość opcji „--reactNamespace”. Element „{0}” nie jest prawidłowym identyfikatorem.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Jego typ elementu „{0}” nie jest prawidłowym elementem JSX.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Jego typ wystąpienia „{0}” nie jest prawidłowym elementem JSX.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Jego zwracany typ „{0}” nie jest prawidłowym elementem JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Jego typ „{0}” nie jest prawidłowym typem rozszerzenia JSX.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Element JSDoc „@{0} {1}” nie pasuje do klauzuli „extends {2}”.", "JSDoc_0_is_not_attached_to_a_class_8022": "Element JSDoc „@{0}” nie został dołączony do klasy.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Element „...” JSDoc może występować tylko w ostatnim parametrze sygnatury.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Tag JSDoc „@param” tag ma nazwę „{0}”, ale nie ma parametru o tej nazwie.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Tag JSDoc „@param” ma nazwę „{0}”, ale nie istnieje parametr o tej nazwie. Byłby on zgodny z elementem „arguments”, gdyby miał typ tablicy.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Element JSDoc typedef można przekonwertować na typ TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Tag „@typedef” JSDoc powinien mieć adnotację typu lub powinien po nim następować tag „@property” lub „@member”.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Element JSDoc typedefs można przekonwertować na typy TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc mogą być używane wyłącznie w komentarzach dokumentacji.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc mogą być przenoszone do typów TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atrybuty JSX muszą mieć przypisane wyrażenie, które nie jest puste.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Lista folderów, z których mają być uwzględnione definicje typów.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista folderów głównych, których połączona zawartość reprezentuje strukturę projektu w czasie wykonywania.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Ładowanie elementu „{0}” z katalogu głównego „{1}”, lokalizacja kandydata: „{2}”.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Ustawienia regionalne muszą mieć postać lub -. Na przykład „{0}” lub „{1}”.", "Log_paths_used_during_the_moduleResolution_process_6706": "Rejestruj ścieżki używane podczas procesu „moduleResolution”.", "Longest_matching_prefix_for_0_is_1_6108": "Najdłuższy zgodny prefiks dla „{0}” to „{1}”.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Określ, że element keyof ma zwracać tylko ciągi zamiast ciągów, liczb i symboli. Starsza opcja.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Ustaw wywołanie „super()” jako pierwszą instrukcję w konstruktorze", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Zmapowany typ obiektu niejawnie ma typ szablonu „any”.", + "Mark_array_literal_as_const_90070": "Oznaczanie literału tablicy jako stałego", "Matched_0_condition_1_6403": "Dopasowano „{0}” warunku „{1}”.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Dopasowywane domyślnie do wzorca dołączania „**/*”", "Matched_by_include_pattern_0_in_1_1407": "Zgodne z wzorcem dołączania „{0}” w elemencie „{1}”", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda „{0}” nie może mieć implementacji, ponieważ jest oznaczona jako abstrakcyjna.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", "Method_not_implemented_95158": "Metoda nie jest zaimplementowana.", "Modifiers_cannot_appear_here_1184": "Modyfikatory nie mogą występować w tym miejscu.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Moduł „{0}” może być importowany domyślnie tylko przy użyciu flagi „{1}”", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Moduł „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy zamiast tego miał zostać użyty element „import {1} from {0}”?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Moduł „{0}” został ukryty przez deklarację lokalną o takiej samej nazwie.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Moduł „{0}” używa elementu „export =” i nie może być używany z elementem „export *”.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany w elemencie „{1}”, ponieważ nie zmodyfikowano tego pliku.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany lokalnie w pliku „{1}”.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie ustawiono parametru „--allowArbitraryExtensions”.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie jest ustawiona opcja „--jsx”.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Moduł „{0}” został rozpoznany jako „{1}”, ale opcja „--resolveJsonModule” nie jest używana.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "W nazwach deklaracji modułu można używać tylko ciągi ujęte w cudzysłów \" lub „”.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Nie można rozpoznać modułów przy użyciu opcji „rootDirs”.", "Modules_6244": "Moduły", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Przenieś modyfikatory elementów krotki z etykietami do etykiet", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Przenieś wyrażenie w eksporcie domyślnym do zmiennej i dodaj do niej adnotację typu.", "Move_to_a_new_file_95049": "Przenieś do nowego pliku", + "Move_to_file_95178": "Przenieś do pliku", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Kolejne następujące po sobie separatory liczbowe nie są dozwolone.", "Multiple_constructor_implementations_are_not_allowed_2392": "Konstruktor nie może mieć wielu implementacji.", "NEWLINE_6061": "NOWY WIERSZ", "Name_is_not_valid_95136": "Nazwa nie jest prawidłowa", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Nazwane grupy przechwytywania są dostępne tylko w przypadku wartości docelowej „ES2018” lub nowszej.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Nazwane grupy przechwytywania o tej samej nazwie muszą się wzajemnie wykluczać.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Nazwane właściwości „{0}” typów „{1}” i „{2}” nie są identyczne.", "Namespace_0_has_no_exported_member_1_2694": "Przestrzeń nazw „{0}” nie ma wyeksportowanej składowej „{1}”.", "Namespace_must_be_given_a_name_1437": "Przestrzeń nazw musi mieć nazwę.", "Namespace_name_cannot_be_0_2819": "Przestrzeń nazw nie może mieć nazwy „{0}”.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Przestrzenie nazw są niedozwolone w globalnych plikach skryptów, gdy włączona jest opcja „{0}”. Jeśli ten plik nie jest przeznaczony do bycia skryptem globalnym, ustaw parametr „moduleDetection” na wartość „force” lub dodaj pustą instrukcję „export {}”.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Do parametrów „this” nie można stosować dekoratorów ani modyfikatorów.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Żaden z konstruktorów podstawowych nie ma określonej liczby argumentów typu.", "No_constituent_of_type_0_is_callable_2755": "Żadna składowa typu „{0}” nie jest wywoływalna.", "No_constituent_of_type_0_is_constructable_2759": "Żadnej składowej typu „{0}” nie można skonstruować.", @@ -970,13 +1077,18 @@ "No_type_could_be_extracted_from_this_type_node_95134": "Nie można było wyodrębnić żadnego typu z tego węzła typu", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Nie istnieje żadna wartość w zakresie dla właściwości skrótowej „{0}”. Zadeklaruj ją lub udostępnij inicjatora.", "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Klasa nieabstrakcyjna „{0}” nie implementuje odziedziczonej abstrakcyjnej składowej „{1}” z klasy „{2}”.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2} i {3} więcej.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Wyrażenie klasy nieabstrakcyjnej nie implementuje odziedziczonej abstrakcyjnej składowej „{0}” z klasy „{1}”.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Brak implementacji nieabstrakcyjnych wyrażeń klasy dla następujących składowych elementu „{0}”: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "W nieabstrakcyjnym wyrażeniu klasy brakuje implementacji dla następujących składowych elementu „{0}”: {1} i {2} więcej.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Asercji o wartości innej niż null można używać tylko w plikach TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Ścieżki inne niż względne nie są dozwolone, gdy nie jest ustawiona wartość „baseUrl”. Czy nie zostały pominięte początkowe znaki „./”?", "Non_simple_parameter_declared_here_1348": "W tym miejscu zadeklarowano parametr inny niż prosty.", "Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki w kodzie zwracają wartość.", "Not_all_constituents_of_type_0_are_callable_2756": "Nie wszystkie składowe typu „{0}” są wywoływalne.", "Not_all_constituents_of_type_0_are_constructable_2760": "Nie wszystkie składowe typu „{0}” można skonstruować.", + "Numbers_out_of_order_in_quantifier_1506": "Liczby poza kolejnością w kwantyfikatorze.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Literały liczbowe z wartościami bezwzględnymi równymi 2^53 lub większymi są zbyt duże, aby mogły być dokładnie reprezentowane jako liczby całkowite.", "Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.", "Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Dla literału obiektu można określić tylko znane właściwości, a właściwość „{0}” nie istnieje w typie „{1}”.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literał obiektu może określać wyłącznie znane właściwości, ale element „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Dla właściwości „{0}” literału obiektu niejawnie określono typ „{1}”.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Obiektów zawierających właściwości skrótowe nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Obiektów zawierających przypisania rozproszone nie można wywnioskować za pomocą parametru --isolatedDeclarations.", "Octal_digit_expected_1178": "Oczekiwano cyfry ósemkowej.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Typy literałów ósemkowych muszą korzystać ze składni ES2015. Użyj składni „{0}”.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Literały ósemkowe są niedozwolone w inicjatorze składowych wyliczeń. Użyj składni „{0}”.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Literały ósemkowe są niedozwolone w trybie z ograniczeniami.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Literały ósemkowe są niedostępne, jeśli językiem docelowym jest ECMAScript 5 lub nowszy. Użyj składni „{0}”.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Ósemkowe sekwencje ucieczki i odwołania wsteczne nie są dozwolone w klasie znaków. Jeśli było to zamierzone jako sekwencja ucieczki, użyj składni „{0}”.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Ósemkowe sekwencje ucieczki są niedozwolone. Użyj składni „{0}”.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literały ósemkowe są niedozwolone. Użyj składni „{0}”.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedną z wartości „{0}.{1}” jest ciąg „{2}”, a druga przyjmuje się, że jest nieznaną wartością liczbową.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "W instrukcji „for...in” jest dozwolona tylko pojedyncza deklaracja zmiennej.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "W instrukcji „for...of” jest dozwolona tylko pojedyncza deklaracja zmiennej.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Tylko funkcja typu void może być wywoływana za pomocą słowa kluczowego „new”.", "Only_ambient_modules_can_use_quoted_names_1035": "Tylko otaczające moduły mogą używać nazw w cudzysłowie.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Tylko moduły „amd” i „system” są obsługiwane razem z parametrem --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Tylko tablice const można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", "Only_emit_d_ts_declaration_files_6014": "Emituj tylko pliki deklaracji „d.ts”.", - "Only_named_exports_may_use_export_type_1383": "Tylko nazwane eksporty mogą używać elementu „export type”.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Tylko wyliczenia numeryczne mogą mieć składowe obliczane, ale to wyrażenie ma typ „{0}”. Jeśli nie potrzebujesz sprawdzeń kompletności, rozważ użycie literału obiektu.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Generuj tylko pliki d.ts, a nie pliki JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Tylko publiczne i chronione metody klasy bazowej są dostępne przy użyciu słowa kluczowego „super”.", "Operator_0_cannot_be_applied_to_type_1_2736": "Nie można zastosować operatora „{0}” do typu „{1}”.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Nie można zastosować operatora „{0}” do typów „{1}” i „{2}”.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatory nie mogą być mieszane w klasie znaków. Zamiast tego zawijaj go w zagnieżdżonej klasie.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Rezygnacja ze sprawdzania odwołań do wielu projektów podczas edytowania projektu.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Opcja „{0}={1}” została usunięta. Usuń go z konfiguracji.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Opcja „{0}={1}” jest przestarzała i przestanie działać w języku TypeScript {2}. Określ parametr compilerOption „ignoreDeprecations”: „{3}”, aby wyciszyć ten błąd.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „false” lub „null” w wierszu polecenia.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „null” w wierszu polecenia.", + "Option_0_can_only_be_specified_on_command_line_6266": "Opcję „{0}” można określić tylko w wierszu polecenia.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Opcja „{0}” może być używana tylko w przypadku podania opcji „--inlineSourceMap” lub „--sourceMap”.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Opcji „{0}” można używać tylko wtedy, gdy parametr „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "Opcji „{0}” można używać tylko wtedy, gdy element „module” ma wartość „preserve” lub „es2015” lub nowszą.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Nie można określić opcji „{0}”, jeśli opcja „jsx” ma wartość „{1}”.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Nie można określić opcji „{0}”, jeśli opcja „target” ma wartość „ES3”.", "Option_0_cannot_be_specified_with_option_1_5053": "Opcji „{0}” nie można określić razem z opcją „{1}”.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Opcji „{0}” nie można określić bez opcji „{1}”.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Opcji „{0}” nie można określić bez opcji „{1}” lub opcji „{2}”.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Opcja „{0}” została usunięta. Usuń go z konfiguracji.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Opcja „{0}” jest przestarzała i przestanie działać w języku TypeScript {1}. Określ parametr compilerOption „ignoreDeprecations”: „{2}”, aby wyciszyć ten błąd.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Opcja „{0}\" jest nadmiarowa i nie można jej określić za pomocą opcji „{1}”.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "Opcji „allowImportingTsExtensions” można używać tylko wtedy, gdy jest ustawiona opcja „noEmit” lub „emitDeclarationOnly”.", "Option_build_must_be_the_first_command_line_argument_6369": "Opcja „--build” musi być pierwszym argumentem wiersza polecenia.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Opcję \"--incremental\" można określić tylko za pomocą pliku tsconfig, emitując do pojedynczego pliku lub gdy określono opcję \"--tsBuildInfoFile\".", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Opcji „isolatedModules” można użyć tylko wtedy, gdy podano opcję „--module” lub opcja „target” określa cel „ES2015” lub wyższy.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Nie można wyłączyć opcji „preserveConstEnums”, jeśli opcja „isolatedModules” jest włączona.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "Opcji \"preserveValueImports\" można użyć tylko wtedy, gdy parametr\"module\" jest ustawiony na wartość \"es2015\" lub nowszą.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Opcja „moduleResolution” musi być ustawiona na wartość „{0}” (lub pozostać nieokreślona), gdy opcja „module” jest ustawiona na „{1}”.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Opcja „module” musi mieć wartość „{0}”, gdy opcja „moduleResolution” ma wartość „{1}”.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Opcja „preserveConstEnums” nie może być wyłączona, gdy opcja „{0}” jest włączona.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Nie można mieszać opcji „project” z plikami źródłowymi w wierszu polecenia.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Opcję „--resolveJsonModule” można określić tylko wtedy, gdy generacja kodu modułu to „commonjs”, „amd”, „es2015” lub „esNext”.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Nie można określić opcji „--resolveJsonModule” bez strategii rozpoznawania modułów „node”.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „moduleResolution” ma wartość „classic”.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „module” ma wartość „none”, „system” lub „umd”.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Nie można określić opcji „tsBuildInfoFile” bez określenia opcji „incremental” lub „composite” albo jeśli nie jest uruchomiona opcja „tsc -b”.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Nie można użyć opcji „verbatimModuleSyntax”, gdy parametr „module” ma wartość „UMD”, „AMD” lub „System”.", "Options_0_and_1_cannot_be_combined_6370": "Nie można połączyć opcji „{0}” i „{1}”.", "Options_Colon_6027": "Opcje:", "Output_Formatting_6256": "Formatowanie danych wyjściowych", "Output_compiler_performance_information_after_building_6615": "Informacje o wydajności kompilatora danych wyjściowych po skompilowaniu.", "Output_directory_for_generated_declaration_files_6166": "Katalog wyjściowy dla wygenerowanych plików deklaracji.", - "Output_file_0_from_project_1_does_not_exist_6309": "Plik wyjściowy „{0}” z projektu „{1}” nie istnieje", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Plik wyjściowy „{0}” nie został utworzony na podstawie pliku źródłowego „{1}”.", "Output_from_referenced_project_0_included_because_1_specified_1411": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono element „{1}”", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono wartość „none” dla opcji „--module”", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Oczekiwano deklaracji parametru.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr ma nazwę, ale nie ma typu. Czy chodziło Ci o „{0}: {1}”?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modyfikatorów parametrów można używać tylko w plikach TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musi mieć jawną adnotację typu z wyrażeniem --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Wyświetlaj nazwy wyemitowanych plików po kompilacji.", "Print_this_message_6017": "Wypisz ten komunikat.", "Private_accessor_was_defined_without_a_getter_2806": "Prywatna metoda dostępu została zdefiniowana bez metody pobierającej.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Pole prywatne „{0}” musi być zadeklarowane w otaczającej klasie.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identyfikatory prywatne są niedozwolone w deklaracjach zmiennych.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identyfikatory prywatne są niedozwolone poza treściami klasy.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identyfikatory prywatne są dozwolone tylko w treściach klasy i mogą być używane tylko jako część deklaracji członka klasy, dostępu do właściwości lub po lewej stronie wyrażenia „in”", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identyfikatory prywatne są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Identyfikatory prywatne nie mogą być używane jako parametry.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Nie można uzyskać dostępu do prywatnego lub chronionego elementu składowego „{0}” w parametrze typu.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowania", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Trwa wymuszone odbudowanie projektu „{0}”", + "Project_0_is_out_of_date_because_1_6420": "Projekt „{0}” jest nieaktualny, ponieważ {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że plik „{2}” był plikiem głównym kompilacji, ale już nie jest.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że program musi zgłaszać błędy.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że niektóre zmiany nie zostały wyemitowane", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że nastąpiła zmiana w parametrze compilerOptions", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt „{0}” jest nieaktualny, ponieważ jego zależność „{1}” jest nieaktualna", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt „{0}” jest nieaktualny, ponieważ dane wyjściowe „{1}” są starsze niż dane wejściowe „{2}”", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt „{0}” jest nieaktualny, ponieważ plik wyjściowy „{1}” nie istnieje", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt „{0}” jest nieaktualny, ponieważ jego dane wyjściowe zostały wygenerowane w wersji „{1}”, która różni się od bieżącej wersji „{2}”", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Projekt „{0}” jest nieaktualny, ponieważ dane wyjściowe jego zależności „{1}” uległy zmianie", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Projekt „{0}” jest nieaktualny, ponieważ wystąpił błąd podczas odczytywania pliku „{1}”", "Project_0_is_up_to_date_6361": "Projekt „{0}” jest aktualny", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt „{0}” jest aktualny, ponieważ najnowsze dane wejściowe „{1}” są starsze niż dane wyjściowe „{2}”", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "Właściwość „{0}” jest używana przez jej zainicjowaniem.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Właściwości „{0}” atrybutu rozkładu JSX nie można przypisać do właściwości docelowej.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego wyrażenia klasy nie może być prywatna ani chroniona.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego typu klasy anonimowej nie może być prywatna ani chroniona.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Właściwości „{0}” typu „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Właściwość „{0}” zastąpi właściwość bazową w elemencie „{1}”. Jeśli jest to zamierzone, dodaj inicjator. W przeciwnym razie dodaj modyfikator „declare” lub usuń nadmiarową deklarację.", "Property_assignment_expected_1136": "Oczekiwano przypisania właściwości.", "Property_destructuring_pattern_expected_1180": "Oczekiwano wzorca usuwającego strukturę właściwości.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Właściwość musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", "Property_or_signature_expected_1131": "Oczekiwano właściwości lub sygnatury.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Wartością właściwości może być jedynie literał ciągu, literał numeryczny, wartości „true”, „false” i „null”, literał obiektu i literał tablicy.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Udostępnij pełne wsparcie dla elementów iterowanych w elementach „for-of”, rozpiętości i usuwania, gdy elementem docelowym jest „ES5” lub „ES3”.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Udostępnij pełne wsparcie dla elementów iterowanych w elementach „for-of”, rozpiętości i usuwania, gdy elementem docelowym jest „ES5”.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Zgłoś błąd, gdy parametr funkcji nie zostanie odczytany.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Zgłaszaj błąd w przypadku wyrażeń i deklaracji z implikowanym typem „any”.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Zgłaszaj błąd w przypadku wyrażeń „this” z niejawnym typem „any”.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy podano flagę „--isolatedModules”, wymaga użycia aliasu „export type”.", + "Range_out_of_order_in_character_class_1517": "Zakres poza kolejnością w klasie znaków.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy element „{0}” jest włączony, wymaga użycia elementu „export type”.", + "React_components_cannot_include_JSX_namespace_names_2639": "Składniki platformy React nie mogą zawierać nazw przestrzeni rozszerzenia JSX", "Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Zmniejsz liczbę projektów ładowanych automatycznie przez język TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "Przywoływany projekt „{0}” nie może wyłączać emisji.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.", "Referenced_via_0_from_file_1_1400": "Przywoływane za pośrednictwem elementu „{0}” z pliku „{1}”", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ecmaScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Zastanów się nad dodaniem rozszerzenia do ścieżki importu.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ecmaScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Czy chodziło Ci o „{0}”?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Zastanów się nad dodaniem rozszerzenia do ścieżki importu.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Czy chodziło Ci o „{0}”?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Usuń listę katalogów z procesu obserwacji.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Usuń listę plików z przetwarzania w trybie obserwacji.", "Remove_all_unnecessary_override_modifiers_95163": "Usuń wszystkie niepotrzebne modyfikatory „overrides”", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Zgłaszaj błędy w plikach js.", "Report_errors_on_unused_locals_6134": "Raportuj błędy dla nieużywanych elementów lokalnych.", "Report_errors_on_unused_parameters_6135": "Raportuj błędy dla nieużywanych parametrów.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Wymagaj wystarczającej adnotacji w eksportach, aby inne narzędzia mogły w prosty sposób generować pliki deklaracji.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Wymagane parametry typu mogą nie być zgodne z opcjonalnymi parametrami typu.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Znaleziono rozwiązanie dla modułu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Znaleziono rozwiązanie dla dyrektywy odwołania do typu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba wyłączenia nowoczesnych funkcji rozpoznawania węzłów w celu sprawdzenia, czy biblioteka npm wymaga aktualizacji konfiguracji.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba użycia wyrażenia „--moduleResolution”, aby sprawdzić, czy projekt może wymagać aktualizacji konfiguracji.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Rozwiązuj elementy „keyof” tylko do nazw właściwości mających jako wartość ciągi (nie liczby czy symbole).", + "Resolved_under_condition_0_6414": "Rozwiązano pod warunkiem „{0}”.", "Resolving_in_0_mode_with_conditions_1_6402": "Rozpoznawanie w trybie {0} z warunkami {1}.", "Resolving_module_0_from_1_6086": "======== Rozpoznawanie modułu „{0}” na podstawie „{1}”. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Rozpoznawanie nazwy modułu „{0}” względem podstawowego adresu URL „{1}” — „{2}”.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny nie został ustawiony. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny: „{1}”. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny nie został ustawiony. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Rozpoznawanie dyrektywy odwołania do typu dla programu, który określa niestandardowe typeRoots, pomijanie wyszukiwania w folderze „node_modules”.", "Resolving_with_primary_search_path_0_6121": "Rozpoznawanie przy użyciu ścieżki wyszukiwania podstawowego „{0}”.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Dla parametru rest „{0}” niejawnie określono typ „any[]”.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest „{0}” niejawnie ma typ „any[]”, ale lepszy typ można wywnioskować na podstawie użycia.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}” o identyfikatorze pakietu „{3}”.", "Rewrite_all_as_indexed_access_types_95034": "Zmień wszystko na indeksowane typy dostępu", "Rewrite_as_the_indexed_access_type_0_90026": "Napisz ponownie jako indeksowany typ dostępu „{0}”", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Prawy operand elementu ?? jest nieosiągalny, ponieważ lewy operand nigdy nie dopuszcza wartości null.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nie można określić katalogu głównego. Pomijanie ścieżek wyszukiwania podstawowego.", "Root_file_specified_for_compilation_1427": "Plik główny określony na potrzeby kompilacji", "STRATEGY_6039": "STRATEGIA", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Zapisuj pliki tsbuildinfo, aby umożliwić przyrostową kompilację projektów.", "Saw_non_matching_condition_0_6405": "Wyświetlono niezgodny warunek „{0}”.", "Scoped_package_detected_looking_in_0_6182": "Wykryto pakiet w zakresie, wyszukiwanie w „{0}”", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Przeszukiwanie wszystkich katalogów nadrzędnych node_modules w poszukiwaniu rozszerzeń rezerwowych: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Wyszukiwanie preferowanych rozszerzeń we wszystkich katalogach nadrzędnych node_modules: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "Wybór nie jest prawidłową instrukcją ani instrukcjami", "Selection_is_not_a_valid_type_node_95133": "Wybór nie jest prawidłowym węzłem typu", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Określ wersję języka JavaScript dla emitowanego kodu JavaScript i dołącz zgodne deklaracje bibliotek.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Pokaż pełne informacje diagnostyczne.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Pokaż, co zostanie skompilowane (lub usunięte, jeśli określono opcję „--clean”)", "Signature_0_must_be_a_type_predicate_1224": "Sygnatura „{0}” musi być predykatem typów.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklaracji podpisu można używać tylko w plikach TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Pomiń kompilowanie projektów podrzędnych w przypadku błędu w projekcie nadrzędnym.", "Skip_type_checking_all_d_ts_files_6693": "Pomiń sprawdzanie typów dla wszystkich plików d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Pomiń sprawdzanie typów w plikach d.ts dołączanych w kodzie TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Pomiń sprawdzanie typu plików deklaracji.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowana", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Pomijanie modułu „{0}”, który wygląda jak bezwzględny identyfikator URI, docelowe typy plików: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono element „{1}”", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono wartość „none” dla opcji „--module”", "Source_has_0_element_s_but_target_allows_only_1_2619": "Liczba elementów w źródle to {0}, ale element docelowy zezwala tylko na {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Określ sposób działania trybu zegarka TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Określ pliki biblioteki do uwzględnienia w kompilacji.", "Specify_module_code_generation_6016": "Określ generowanie kodu modułu.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Określ strategię rozpoznawania modułów: „node” (Node.js) lub „classic” (TypeScript w wersji wcześniejszej niż 1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Określ specyfikator modułów używany do importowania funkcji fabryki JSX w przypadku używania elementów „jsx: react-jsx*”.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Określ wiele folderów działających jak element „./node_modules/@types”.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Określ co najmniej jedną ścieżkę lub odwołanie do modułu platformy Node dotyczące podstawowych plików konfiguracji, z których są dziedziczone ustawienia.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Statyczne składowe nie mogą przywoływać parametrów typu klasy.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Właściwość statyczna „{0}” jest w konflikcie z właściwością wbudowaną „Function.{0}” funkcji konstruktora „{1}”.", "String_literal_expected_1141": "Oczekiwano literału ciągu.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Nazwy importu i eksportu literału ciągu nie są obsługiwane, gdy flaga „--module” ma wartość „es2015” lub „es2020”.", "String_literal_with_double_quotes_expected_1327": "Oczekiwano literału ciągu z podwójnymi cudzysłowami.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stosuj styl dla błędów i komunikatów za pomocą koloru i kontekstu. (eksperymentalne).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Flagi wzorca podrzędnego muszą być obecne, gdy istnieje półpauza.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Kolejne deklaracje właściwości muszą być tego samego typu. Właściwość „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Kolejne deklaracje zmiennej muszą być tego samego typu. Zmienna „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Podstawienie „{0}” dla wzorca „{1}” ma nieprawidłowy typ. Oczekiwano typu „string”, a uzyskano typ „{2}”.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Oznakowane wyrażenia szablonu nie są dozwolone w opcjonalnym łańcuchu.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Liczba elementów dozwolonych przez element docelowy to {0}, ale źródło może mieć ich więcej.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Liczba elementów wymaganych przez element docelowy to {0}, ale źródło może mieć ich mniej.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Podpis docelowy zawiera zbyt mało argumentów. Oczekiwano {0} lub więcej, ale otrzymano {1}.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modyfikatora „{0}” można używać tylko w plikach TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Nie można zastosować operatora „{0}” do typu „symbol”.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operator „{0}” nie jest dozwolony w przypadku typów logicznych. Zamiast tego rozważ użycie operatora „{1}”.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Właściwość „{0}” iteratora asynchronicznego musi być metodą.", "The_0_property_of_an_iterator_must_be_a_method_2767": "Właściwość „{0}” iteratora musi być metodą.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ „Object” można przypisać do niewielu innych typów. Czy zamiast tego typu miał zostać użyty typ „any”?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w językach ES3 i ES5. Rozważ użycie standardowego wyrażenia funkcji.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES3 i ES5. Rozważ użycie standardowej funkcji lub metody.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Nie można jednocześnie ustawić flagi Unicode (u) i flagi Unicode Sets (v).", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w języku ES5. Rozważ użycie standardowego wyrażenia funkcji.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES5. Rozważ użycie standardowej funkcji lub metody.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Treść instrukcji „if” nie może być pustą instrukcją.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Wywołanie powiodłoby się dla tej implementacji, ale sygnatury implementacji przeciążeń nie są widoczne na zewnątrz.", "The_character_set_of_the_input_files_6163": "Zestaw znaków plików wejściowych.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Wywnioskowany typ elementu „{0}” odwołuje się do typu ze strukturą cykliczną, którego nie można serializować w prosty sposób. Wymagana jest adnotacja typu.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Wnioskowany typ „{0}” przywołuje niedostępny typ „{1}”. Adnotacja typu jest konieczna.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Wywnioskowany typ tego węzła przekracza maksymalną długość, którą kompilator może serializować. Wymagana jest jawna adnotacja typu.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicjator deklaracji „using” musi być obiektem z metodą „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicjator deklaracji „await using” musi być obiektem z metodą „[Symbol.asyncDispose]()” lub „[Symbol.dispose]5D;()” albo mieć wartość „null” lub „undefined”.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” istnieje w wielu elementach składowych i w części z nich jest prywatna.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” zawiera typy powodujące konflikt w niektórych elementach składowych.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Słowa kluczowego „intrinsic” można używać tylko do deklarowania typów wewnętrznych udostępnianych przez kompilator.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "Ostatnie przeciążenie dało następujący błąd.", "The_last_overload_is_declared_here_2771": "Ostatnie przeciążenie jest zadeklarowane tutaj.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Lewa strona instrukcji „for...in” nie może być wzorcem usuwającym strukturę.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Lewa strona instrukcji „for...in” nie może być deklaracją „using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Lewa strona instrukcji „for...in” nie może być deklaracją „await using”.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Lewa strona instrukcji „for...in” nie może używać adnotacji typu.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Lewa strona instrukcji „for...in” nie może być opcjonalnym dostępem do właściwości.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Lewa strona instrukcji „for...in” musi być zmienną lub dostępem do właściwości.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Lewa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Lewa strona wyrażenia przypisania nie może być opcjonalnym dostępem do właściwości.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Lewa strona wyrażenia przypisania musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Lewa strona wyrażenia „instanceof” musi być przypisana do pierwszego argumentu po prawej stronie metody „[Symbol.hasInstance]”.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Lewa strona wyrażenia „instanceof” musi być typu „any”, typu obiektu lub parametrem typu.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Ustawienia regionalne używane przy wyświetlaniu komunikatów użytkownikowi (np. „pl-pl”)", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maksymalna głębokość zależności na potrzeby wyszukiwania w elemencie node_modules i ładownia plików JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy eksportu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy importu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Nie można uzyskać dostępu do właściwości „{0}” w typie „{1}” w tej klasie, ponieważ jest ona zasłaniana przez inny identyfikator prywatny o takiej samej pisowni.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Zwracany typ metody dostępu „get” musi być możliwy do przypisania do typu metody dostępu „set”", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Zwracany typ funkcji dekoratora parametrów musi mieć postać „void” lub „any”.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Zwracany typ funkcji dekoratora właściwości musi mieć postać „void” lub „any”.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zwracany typ funkcji asynchronicznej musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zwracany typ metody lub funkcji asynchronicznej musi być globalnym typem Promise.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Zwracany typ funkcji lub metody asynchronicznej musi być globalnym typem Promise. Czy chodziło Ci o typ „Promise<{0}>”?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Prawa strona instrukcji „for...in” musi zawierać typ „any”, typ obiektu lub parametr typu, a tutaj ma typ „{0}”.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Prawa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Prawa strona wyrażenia „instanceof” musi być typu „any” lub typu, który można przypisać do typu interfejsu „Function”.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Prawa strona wyrażenia „instanceof” musi być typem „any”, klasą, funkcją lub innym typem, który można przypisać do typu interfejsu „Function”, albo typem obiektu z metodą „Symbol.hasInstance”.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Prawa strona wyrażenia „instanceof” nie może być wyrażeniem tworzenia wystąpienia.", "The_root_value_of_a_0_file_must_be_an_object_5092": "Wartość katalogu głównego pliku „{0}” musi być obiektem.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje co najmniej {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "Deklaracja przesłaniania „{0}” jest zdefiniowana tutaj", "The_signature_0_of_1_is_deprecated_6387": "Sygnatura „{0}” elementu „{1}” jest przestarzała.", "The_specified_path_does_not_exist_Colon_0_5058": "Wybrana ścieżka nie istnieje: „{0}”.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Modyfikatora „type” nie można użyć w nazwanym eksporcie, gdy w instrukcji eksportowania jest używany element „export type”.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Modyfikatora „type” nie można użyć w nazwanym imporcie, gdy w instrukcji importowania jest używany element „import type”.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Typ deklaracji funkcji musi być zgodny z sygnaturą funkcji.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Nie można nazwać typu tego wyrażenia bez asercji „resolution-mode”, która jest niestabilną funkcją. Aby wyciszyć ten błąd, użyj nocnego języka TypeScript. Spróbuj zaktualizować przy użyciu polecenia „npm install -D typescript@next”.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Typ tego węzła nie może być serializowany, ponieważ jego właściwość „{0}” nie może być serializowana.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ zwracany przez metodę „{0}()” iteratora asynchronicznego musi być obietnicą dla typu z właściwością „value”.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ zwracany przez metodę „{0}()” iteratora musi mieć właściwość „value”.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklaracja zmiennej instrukcji „for...in” nie może mieć inicjatora.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklaracja zmiennej instrukcji „for...of” nie może mieć inicjatora.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Instrukcja „with” nie jest obsługiwana. Wszystkie symbole w bloku „with” będą mieć typ „any”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku w bieżącym ustawieniu „moduleResolution”. Rozważ zaktualizowanie do wartości „node16”, „nodenext” lub „bundler”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku podczas uwzględniania pliku package.json „exports”. Biblioteka „{1}” może wymagać zaktualizowania pliku package.json lub wpisywania tekstu.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "W tym wyrażeniu regularnym nie ma żadnej grupy przechwytywania o nazwie „{0}”.", + "There_is_nothing_available_for_repetition_1507": "Brak dostępnych elementów do powtórzenia.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Element prop „{0}” tego tagu JSX oczekuje pojedynczego elementu podrzędnego typu „{1}”, ale podano wiele elementów podrzędnych.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Element prop „{0}” tego tagu JSX oczekuje typu „{1}”, który wymaga wielu elementów podrzędnych, ale podano tylko jeden element podrzędny.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym nie ma żadnych grup przechwytywania.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym jest tylko następująca liczba grup przechwytywania: {0}.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "To wyrażenie binarne nigdy nie dopuszcza wartości null. Czy brakuje nawiasów?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tego znaku nie można poprzedzić znakiem ucieczki w wyrażeniu regularnym.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "To porównanie wydaje się niezamierzone, ponieważ typy „{0}” i „{1}” nie nakładają się na siebie.", "This_condition_will_always_return_0_2845": "Ten warunek będzie zawsze zwracać wartość „{0}”.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Ten warunek zawsze będzie zwracać wartość „{0}”, ponieważ język JavaScript porównuje obiekty według odwołania, a nie wartości.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Ten warunek będzie zawsze zwracać wartość true, ponieważ wartość '{0}' jest zawsze prawdziwa.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją zamiast tego?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Ta funkcja konstruktora może zostać przekonwertowana na deklarację klasy.", + "This_expression_is_always_nullish_2871": "To wyrażenie ma zawsze wartość null.", "This_expression_is_not_callable_2349": "To wyrażenie nie jest wywoływalne.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tego wyrażenia nie można wywoływać, ponieważ jest to metoda dostępu „get”. Czy chodziło Ci o użycie go bez znaków „()”?", "This_expression_is_not_constructable_2351": "Tego wyrażenia nie można skonstruować.", "This_file_already_has_a_default_export_95130": "Ten plik ma już domyślny eksport", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Ten import nigdy nie jest używany jako wartość i musi używać aliasu „import type”, ponieważ opcja „importsNotUsedAsValues” jest ustawiona na wartość „error”.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "To jest rozszerzana deklaracja. Rozważ przeniesienie deklaracji rozszerzenia do tego samego pliku.", + "This_kind_of_expression_is_always_falsy_2873": "Tego rodzaju wyrażenie jest zawsze błędne.", + "This_kind_of_expression_is_always_truthy_2872": "Tego rodzaju wyrażenie jest zawsze prawdziwe.", "This_may_be_converted_to_an_async_function_80006": "To można przekonwertować na funkcję asynchroniczną.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ta składowa nie może mieć komentarza JSDoc z tagiem „override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”. Czy chodziło Ci o „{1}”?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ten element członkowski musi mieć modyfikator „override”, ponieważ zastępuje metodę abstrakcyjną zadeklarowaną w klasie podstawowej „{0}”.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Do tego modułu można odwoływać się tylko za pomocą importów/eksportów języka ECMAScript, włączając flagę „{0}” i odwołując się do jego eksportu domyślnego.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ten moduł jest zadeklarowany przy użyciu składni „export =” i może być używany tylko z importem domyślnym, gdy jest używana flaga „{0}”.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tę operację można uprościć. Ta zmiana jest identyczna z „{0} {1} {2}”.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "To przeciążenie niejawnie zwraca typ „{0}”, ponieważ nie ma adnotacji zwracanego typu.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Ta sygnatura przeciążenia nie jest zgodna z jej sygnaturą implementacji.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ten parametr nie jest dozwolony w dyrektywie „use strict”.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Ta właściwość parametru musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Ta właściwość parametru musi mieć modyfikator \"override\", ponieważ zastępuje on członka w klasie bazowej \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tej flagi wyrażenia regularnego nie można przełączać w obrębie wzorca podrzędnego.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Ta flaga wyrażenia regularnego jest dostępna tylko w przypadku określania wartości docelowej „{0}” lub nowszej.", "This_spread_always_overwrites_this_property_2785": "To rozmieszczenie zawsze powoduje zastąpienie tej właściwości.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem .MTS lub CTS. Dodaj końcowy przecinek lub jawne ograniczenie.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem. MTS lub. CTS. Użyj zamiast tego wyrażenia „as”.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub dodaj pole „\"type\": \"module\"” do „{1}”.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Aby przekonwertować ten plik na moduł ECMAScript, utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Wyrażenia „await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16” lub „nodenext”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Wyrażenia „await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Instrukcje „await using” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklaracje najwyższego poziomu w plikach .d.ts muszą rozpoczynać się od modyfikatora „declare” lub „export”.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Pętle najwyższego poziomu „for await” są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16” lub „nodenext”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Pętle „for await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", "Trailing_comma_not_allowed_1009": "Końcowy przecinek jest niedozwolony.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluj każdy plik jako oddzielny moduł (podobne do „ts.transpileModule”).", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Spróbuj użyć polecenia „npm i --save-dev @types/{1}”, jeśli istnieje, lub dodać nowy plik deklaracji (.d.ts) zawierający ciąg „declare module '{0}';”", "Trying_other_entries_in_rootDirs_6110": "Wykonywanie prób przy użyciu innych pozycji opcji „rootDirs”.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Wykonywanie próby przeprowadzenia podstawienia „{0}”, lokalizacja modułu kandydata: „{1}”.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Wszystkie składowe krotki muszą mieć nazwy albo wszystkie nie mogą mieć nazw.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ krotki „{0}” o długości „{1}” nie ma żadnego elementu w indeksie „{2}”.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typu krotki cyklicznie odwołują się do samych siebie.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Po typie „{0}” można iterować tylko wtedy, gdy jest używana flaga „--downlevelIteration” lub parametr „--target” ma wartość „es2015” lub wyższą.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ „{0}” nie ma pasującej sygnatury indeksu dla typu „{1}”.", "Type_0_has_no_properties_in_common_with_type_1_2559": "Typy „{0}” i „{1}” nie mają żadnych wspólnych właściwości.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Typ „{0}” nie ma podpisów, dla których ma zastosowanie lista argumentów typu ogólnego.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}” jest typem ogólnym i może być indeksowany tylko do odczytu.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2} i jeszcze {3}.", "Type_0_is_not_a_constructor_function_type_2507": "Typ „{0}” nie jest typem funkcji konstruktora.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Typ „{0}” nie jest prawidłowym zwracanym typem funkcji asynchronicznej w wersji ES5/ES3, ponieważ nie odwołuje się do wartości konstruktora zgodnej z elementem Promise.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}” nie jest prawidłowym zwracanym typem funkcji asynchronicznej w języku ES5, ponieważ nie odwołuje się do wartości konstruktora zgodnej z elementem Promise.", "Type_0_is_not_an_array_type_2461": "Typ „{0}” nie jest typem tablicowym.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ „{0}” nie jest typem tablicowym ani typem ciągu.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ „{0}” nie jest typem tablicy ani ciągu lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Nie można przypisać typu „{0}” do typu „{1}”. Czy chodziło Ci o „{2}”?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typu „{0}” nie można przypisać do typu „{1}”. Istnieją dwa różne typy o tej nazwie, lecz są ze sobą niezwiązane.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Nie można przypisać typu „{0}” do typu „{1}”, jak sugeruje adnotacja wariancji.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Nie można przypisać typu „{0}” do typu „{1}” zgodnie z wymaganiami dla obliczonych wartości składowych wyliczenia.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typu elementu docelowego.", "Type_0_is_not_comparable_to_type_1_2678": "Typu „{0}” nie można porównać z typem „{1}”.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Oczekiwano argumentu typu.", "Type_argument_list_cannot_be_empty_1099": "Lista argumentów typu nie może być pusta.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typu mogą być używane tylko w plikach TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "Nie można tutaj używać argumentów typu.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typu dla elementu „{0}” cyklicznie odwołują się do samych siebie.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozycji {0} w źródle nie jest zgodny z typem na pozycji {1} w lokalizacji docelowej.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozycjach od {0} do {1} w źródle nie jest zgodny z typem w pozycji {2} w lokalizacji docelowej.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ zawierający nazwę prywatną „{0}” nie może być używany z elementem --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Pliki deklaracji typu do uwzględnienia w kompilacji.", "Type_expected_1110": "Oczekiwano typu.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Twierdzenie importu typu powinno mieć dokładnie jeden klucz – „resolution-mode“ – z wartością „importuj“ lub „wymagaj“.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Atrybuty importu typów powinny mieć dokładnie jeden klucz — „resolution-mode” — z wartością „import” lub „require”.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tworzenie wystąpienia typu jest nadmiernie szczegółowe i prawdopodobnie nieskończone.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ jest przywoływany bezpośrednio lub pośrednio w wywołaniu zwrotnym realizacji jego własnej metody „then”.", "Type_library_referenced_via_0_from_file_1_1402": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Nie można rozpoznać sygnatury dekoratora metody wywołanego jako wyrażenie.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Nie można rozpoznać sygnatury dekoratora parametru wywołanego jako wyrażenie.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Nie można rozpoznać sygnatury dekoratora właściwości wywołanego jako wyrażenie.", + "Undetermined_character_escape_1513": "Nieokreślony znak ucieczki.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Nieoczekiwane „{0}”. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", "Unexpected_end_of_text_1126": "Nieoczekiwany koniec tekstu.", "Unexpected_keyword_or_identifier_1434": "Nieoczekiwane słowo kluczowe lub identyfikator.", "Unexpected_token_1012": "Nieoczekiwany token.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Nieoczekiwany token. Czy chodziło o „{'>'}” lub „>”?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Nieoczekiwany token. Czy chodziło o „{'}'}” lub „}”?", "Unexpected_token_expected_1179": "Nieoczekiwany token. Oczekiwano znaku „{”.", + "Unicode_escape_sequence_cannot_appear_here_17021": "W tym miejscu nie można wyświetlić sekwencji ucieczki standardu Unicode.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Sekwencje ucieczki standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Wyrażenia wartości właściwości standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nieznana nazwa właściwości standardu Unicode.", + "Unknown_Unicode_property_name_or_value_1529": "Nieznana nazwa lub wartość właściwości standardu Unicode.", + "Unknown_Unicode_property_value_1526": "Nieznana wartość właściwości standardu Unicode.", "Unknown_build_option_0_5072": "Nieznana opcja kompilacji „{0}”.", "Unknown_build_option_0_Did_you_mean_1_5077": "Nieznana opcja kompilacji „{0}”. Czy chodziło o „{1}”?", "Unknown_compiler_option_0_5023": "Nieznana opcja kompilatora „{0}”.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Nieznana opcja kompilatora „{0}”. Czy chodziło o „{1}”?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Nieznane słowo kluczowe lub identyfikator. Czy chodziło Ci o „{0}”?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Nieznana opcja „excludes”. Czy chodziło o „exclude”?", + "Unknown_regular_expression_flag_1499": "Nieznana flaga wyrażenia regularnego.", "Unknown_type_acquisition_option_0_17010": "Opcja pozyskania nieznanego typu „{0}”.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Nieznana opcja pozyskania typu „{0}”. Czy chodziło o „{1}”?", "Unknown_watch_option_0_5078": "Nieznana opcja obserwowania „{0}”.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Nieużywana etykieta.", "Unused_ts_expect_error_directive_2578": "Nieużywana dyrektywa „@ts-expect-error”.", "Update_import_from_0_90058": "Aktualizuj import z „{0}”", - "Updating_output_of_project_0_6373": "Trwa aktualizowanie danych wyjściowych projektu „{0}”...", + "Update_modifiers_of_0_90061": "Modyfikatory aktualizacji elementu „{0}”", "Updating_output_timestamps_of_project_0_6359": "Trwa aktualizowanie sygnatury czasowej danych wyjściowych projektu „{0}”...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Trwa aktualizowanie niezmienionych sygnatur czasowych danych wyjściowych projektu „{0}”...", "Use_0_95174": "Użyj „{0}”.", + "Use_0_instead_5106": "Zamiast tego użyj „{0}”.", "Use_Number_isNaN_in_all_conditions_95175": "Użyj wartości „Number.isNaN” we wszystkich warunkach.", "Use_element_access_for_0_95145": "Użyj dostępu do elementu w przypadku elementu „{0}”", "Use_element_access_for_all_undeclared_properties_95146": "Użyj dostępu do elementu w przypadku wszystkich niezadeklarowanych właściwości.", + "Use_import_type_95180": "Użyj opcji „import type”", "Use_synthetic_default_member_95016": "Użyj syntetycznej składowej „default”.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Podczas rozpoznawania importów pakietów użyj pola „exports” pliku package.json.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Podczas rozpoznawania importów użyj pola „imports” pliku package.json.", + "Use_type_0_95181": "Użyj „typu {0}”", "Using_0_subpath_1_with_target_2_6404": "Używanie „{0}” ścieżki podrzędnej „{1}” z elementem docelowym „{2}”.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Używanie ciągu w instrukcji „for...of” jest obsługiwane tylko w języku ECMAScript 5 lub nowszym.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Użycie elementu --build, -b sprawi, że narzędzie tsc będzie zachowywało się bardziej jak orkiestrator kompilacji niż kompilator. Ta opcja jest wykorzystywana do wyzwalania kompilacji projektów złożonych, o których dowiesz się więcej na stronie {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Oczekiwano deklaracji zmiennej.", "Variable_declaration_list_cannot_be_empty_1123": "Lista deklaracji zmiennych nie może być pusta.", "Variable_declaration_not_allowed_at_this_location_1440": "Deklaracja zmiennej jest niedozwolona w tej lokalizacji.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Zmienna musi mieć jawną adnotację typu z właściwością --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Zmienne z wieloma deklaracjami nie mogą być śródwierszowe.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element ze zmienną liczbą argumentów na pozycji {0} w źródle nie jest zgodny z elementem na pozycji {1} w lokalizacji docelowej.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Adnotacje wariancji są obsługiwane tylko w aliasach typów obiektów, funkcji, konstruktorów i mapowanych typów.", "Version_0_6029": "Wersja {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Podczas sprawdzania typów uwzględniaj wartości „null” i „undefined”.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Określa, czy zachować nieaktualne dane wyjściowe konsoli w trybie śledzenia zamiast wyczyścić ekran.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Opakuj wszystkie nieprawidłowe znaki w kontenerze wyrażenia", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Zawijaj wszystkie nieprawidłowe wyrażenia dekoratora w nawiasy", "Wrap_all_object_literal_with_parentheses_95116": "Zawijaj wszystkie literały obiektu z nawiasami", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Opakuj wszystkie elementy JSX bez elementu nadrzędnego we fragment JSX", "Wrap_in_JSX_fragment_95120": "Opakuj we fragment JSX", + "Wrap_in_parentheses_95194": "Zawijaj w nawiasy", "Wrap_invalid_character_in_an_expression_container_95108": "Opakuj nieprawidłowy znak w kontenerze wyrażenia", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Zawijaj następującą treść z nawiasami, która powinna być literałem obiektu", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "O wszystkich opcjach kompilatora przeczytasz na stronie {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Sygnatury indeksów „{0}” i „{1}” są niezgodne.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operacji „{0}” i „{1}” nie można mieszać bez nawiasów.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Element „{0}” został określony dwa razy. Atrybut o nazwie „{0}” zostanie przesłonięty.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "Element „{0}” na końcu typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "Element „{0}” na początku typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Element „{0}” można zaimportować tylko przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", "_0_can_only_be_imported_by_using_a_default_import_2595": "Element „{0}” można zaimportować tylko przy użyciu importu domyślnego.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Element „{0}” można zaimportować za pomocą wywołania „require” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Element „{0}” można zaimportować tylko za pomocą wywołania „require” lub przy użyciu importu domyślnego.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub importu domyślnego.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "Nie można skompilować elementu „{0}” z opcją „--isolatedModules”, ponieważ jest on traktowany jako globalny plik skryptu. Dodaj instrukcję import, export lub pustą instrukcję „export {}”, aby stał się modułem.", "_0_cannot_be_used_as_a_JSX_component_2786": "Elementu „{0}” nie można użyć jako składnika JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Element „{0}” nie może być używany jako wartość, ponieważ został wyeksportowany przy użyciu aliasu „export type”.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Element „{0}” nie może być używany jako wartość, ponieważ został zaimportowany przy użyciu aliasu „import type”.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Składniki „{0}” nie akceptują tekstu jako elementów podrzędnych. Tekst w JSX ma typ „string”, ale oczekiwany typ elementu „{1}” to „{2}”.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Nie można utworzyć wystąpienia elementu „{0}” z dowolnym typem, który może być niezwiązany z elementem „{1}”.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklaracje „{0}” mogą być deklarowane tylko w bloku.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklaracje „{0}” mogą być używane tylko w plikach TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Deklaracje „{0}” mogą nie mieć wzorców powiązań.", + "_0_declarations_must_be_initialized_1155": "Deklaracje „{0}” muszą być zainicjowane.", "_0_expected_1005": "Oczekiwano elementu „{0}”.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "Element „{0}” ma typ ciągu, ale po włączeniu opcji „isolatedModules” musi mieć składnię ciągu rozpoznawalną składniowo.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "Element „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy chodziło o „{2}”?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "Element „{0}” niejawnie ma zwracany typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dla elementu „{0}” niejawnie określono zwracany typ „any”, ponieważ nie zawiera on adnotacji zwracanego typu i jest przywoływany bezpośrednio lub pośrednio w jednym z jego zwracanych wyrażeń.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Typu indeksu „{0}” „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "Element „{0}” jest elementem podstawowym, ale element „{1}” jest obiektem otoki. Preferuje się użycie elementu „{0}”, jeśli jest to możliwe.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "„{0}” jest typem i nie można go zaimportować w plikach JavaScript. Użyj elementu „{1}” w adnotacji typu JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "Element \"{0}\" jest typem i musi być importowany przy użyciu importu tylko typu, gdy są włączone opcje \"preserveValueImports\" i \"isolatedModules\".", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "Element „{0}” jest typem i należy go zaimportować przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}” to nieużywana zmiana nazwy elementu „{1}”. Czy zamierzano używać go jako adnotacji typu?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "Element „{0}” można przypisać do ograniczenia typu „{1}”, ale wystąpienie typu „{1}” można utworzyć z innym podtypem ograniczenia „{2}”.", "_0_is_automatically_exported_here_18044": "W tym miejscu jest automatycznie eksportowany element „{0}”.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "Lista „{0}” nie może być pusta.", "_0_modifier_already_seen_1030": "Napotkano już modyfikator „{0}”.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modyfikator „{0}” może występować tylko w parametrze typu klasy, interfejsu lub aliasu typu", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modyfikator „{0}” może występować tylko w parametrze typu funkcji, metody lub klasy", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modyfikator „{0}” nie może występować w deklaracji konstruktora.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modyfikator „{0}” nie może być stosowany w przypadku elementu przestrzeni nazw lub modułu.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Modyfikator „{0}” nie może występować w parametrze.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Modyfikator „{0}” nie może być stosowany w przypadku składowej typu.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modyfikator „{0}” nie może występować w parametrze typu", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modyfikator „{0}” nie może występować w deklaracji „using”.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modyfikator „{0}” nie może występować w deklaracji „await using”.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modyfikator „{0}” nie może być stosowany w przypadku sygnatury indeksu.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modyfikator „{0}” nie może występować w elementach klasy tego rodzaju.", "_0_modifier_cannot_be_used_here_1042": "Modyfikatora „{0}” nie można użyć w tym miejscu.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modyfikatora „{0}” nie można używać z modyfikatorem „{1}”.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modyfikatora „{0}” nie można używać z identyfikatorem prywatnym.", "_0_modifier_must_precede_1_modifier_1029": "Modyfikator „{0}” musi występować przed modyfikatorem „{1}”.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po wyrażeniu „\\{0}” musi następować wyrażenie wartości właściwości standardu Unicode ujęte w nawiasy klamrowe.", "_0_needs_an_explicit_type_annotation_2782": "Element „{0}” wymaga jawnej adnotacji typu.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako przestrzeń nazw.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "Element „{0}” odwołuje się jedynie do typu, ale jest używany w tym miejscu jako wartość.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element \"{0}\" odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na es2015 lub nowszą.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "„{0}” odnosi się do globalnego formatu UMD, ale bieżący plik jest modułem. Rozważ zamiast tego dodanie importu.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "Element „{0}” odwołuje się do wartości, ale jest używany tutaj jako typ. Czy chodziło o „typeof {0}”?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "Element \"{0}\" jest rozpoznawany jako deklaracja tylko do typu i musi zostać zaimportowany przy użyciu importu tylko typu, gdy są włączone opcje \"preserveValueImports\" i \"isolatedModules\".", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "Element \"{0}\" jest rozpoznawany jako deklaracja tylko do typu i musi zostać ponownie wyeksportowany przy użyciu ponownego eksportu tylko typu, gdy jest włączona opcja \"isolatedModules\".", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać zaimportowany przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać ponownie wyeksportowany przy użyciu ponownego eksportowania tylko typu, gdy włączono opcję „{1}”.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Element \"{0}\" powinien być ustawiony wewnątrz obiektu \"compilerOptions\" pliku json konfiguracji", "_0_tag_already_specified_1223": "Tag „{0}” jest już określony.", "_0_was_also_declared_here_6203": "Element „{0}” został również zadeklarowany w tym miejscu.", @@ -1780,19 +1981,22 @@ "and_here_6204": "i tutaj.", "arguments_cannot_be_referenced_in_property_initializers_2815": "w inicjatorach właściwości nie można odwoływać się do \"arguments\".", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto”: Traktuj pliki za pomocą importów, eksportów, import.meta, jsx (z jsx: react-jsx) lub formatu esm (z modułem: node16+) jako moduły.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia „await” wewnątrz bloku statycznego klasy.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Wyrażenia „await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Wyrażenia „await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Wyrażeń „await” nie można używać w inicjatorze parametru.", "await_has_no_effect_on_the_type_of_this_expression_80007": "Operator „await” nie ma wpływu na typ tego wyrażenia.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Instrukcje „await using” są dozwolone tylko na najwyższym poziomie pliku, gdy ten plik jest modułem, ale ten plik nie ma importów ani eksportów. Rozważ dodanie pustego wyrażenia „export {}”, aby uczynić ten plik modułem.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instrukcje „await using” są dozwolone tylko w ramach funkcji asynchronicznych i na najwyższych poziomach modułów.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instrukcji „await using” nie można używać wewnątrz bloku statycznego klasy.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Opcja „baseUrl” ma ustawioną wartość „{0}”. Ta wartość zostanie użyta do rozpoznania innej niż względna nazwy modułu „{1}”.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Po wyrażeniu „\\c” musi następować litera ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "Elementu „#!” można użyć tylko na początku pliku.", "case_or_default_expected_1130": "Oczekiwano elementu „case” lub „default”.", "catch_or_finally_expected_1472": "Oczekiwano instrukcji „catch” lub „finally”.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Deklaracje „const” mogą być deklarowane tylko w bloku.", - "const_declarations_must_be_initialized_1155": "Konieczne jest zainicjowanie deklaracji „const”.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest wartość nieskończona.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest niedozwolona wartość „NaN”.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Inicjatory elementów członkowskich wyliczenia const mogą zawierać tylko wartości literałów i inne obliczone wartości wyliczenia.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "inicjatory składowych wyliczenia const muszą być wyrażeniami stałymi.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Wyliczenia ze specyfikatorem „const” mogą być używane tylko w wyrażeniach dostępu do indeksu lub właściwości albo po prawej stronie deklaracji importu, przypisania eksportu lub typu zapytania.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Nie można użyć ciągu „constructor” jako nazwy właściwości parametru.", "constructor_is_a_reserved_word_18012": "„#constructor” jest słowem zastrzeżonym.", @@ -1811,13 +2015,14 @@ "file_6025": "plik", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Pętle „for await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Pętle „for await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli „for await” nie można używać wewnątrz bloku statycznego klasy.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Metody dostępu „get” i „set” nie mogą deklarować parametrów „this”.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\" jeśli określono \"files\", w przeciwnym razie \"[\"**/*\"]5D;\"", "implements_clause_already_seen_1175": "Napotkano już klauzulę „implements”.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule „implements” mogą być używane tylko w plikach TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "Ciąg „import ... =” może być używany tylko w plikach TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklaracje „infer” są dozwolone tylko w klauzuli „extends” typu warunkowego.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Deklaracje „let” mogą być deklarowane tylko w bloku.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po wyrażeniu „\\k” musi następować nazwa grupy przechwytywania ujęta w nawiasy ostre.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Element „let” nie może być używany jako nazwa w deklaracjach „let” ani „const”.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === \"AMD\" lub \"UMD\" lub \"System\" lub \"ES6\", a następnie \"Classic\", w przeciwnym razie \"Node\"", "module_system_or_esModuleInterop_6904": "module === \"system\" lub esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "Plik „package.json” nie zawiera wpisu „typesVersions” odpowiadającego wersji „{0}”.", "package_json_had_a_falsy_0_field_6220": "Plik „package.json” miał błędne pole „{0}”.", "package_json_has_0_field_1_that_references_2_6101": "Plik „package.json” zawiera pole „{0}” „{1}” odwołujące się do elementu „{2}”.", + "package_json_has_a_peerDependencies_field_6281": "Plik „package.json” ma pole „peerDependencies”.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który nie jest prawidłowym zakresem semver.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który dopasowuje wersję kompilatora „{1}”, szukając wzorca odpowiadającego nazwie modułu „{2}”.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Plik „package.json” zawiera pole „typesVersions” z mapowaniami ścieżek specyficznymi dla wersji.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Zakres package.json „{0}” ma nieprawidłowy typ elementu docelowego specyfikatora „{1}”", "package_json_scope_0_has_no_imports_defined_6273": "Zakres package.json „{0}” nie ma zdefiniowanych importów.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Opcja „paths” została określona. Wyszukiwanie wzorca zgodnego z nazwą modułu „{0}”.", + "q_is_only_available_inside_character_class_1511": "Wyrażenie „\\q” jest dostępne tylko wewnątrz klasy znaków.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po wyrażeniu „\\q” muszą następować alternatywy ciągów ujęte w nawiasy klamrowe.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modyfikator „readonly” może występować jedynie w deklaracji właściwości lub sygnaturze indeksu.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modyfikator typu „readonly” jest dozwolony tylko w typach literału tablicy i krotki.", "require_call_may_be_converted_to_an_import_80005": "Wywołanie „require” może zostać przekonwertowane na wywołanie import.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Asercje „resolution-mode” są obsługiwane tylko wtedy, gdy element „moduleResolution” ma wartość „node16” lub „nodenext”.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Asercje „resolution-mode” są niestabilne. Użyj nocnego języka TypeScript, aby wyciszyć ten błąd. Spróbuj zaktualizować za pomocą polecenia „npm install -D typescript@next”.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "Element „resolution-mode“ można ustawić wyłącznie dla importów tylko typów.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "Element „resolution-mode“ jest jedynym prawidłowym kluczem dla twierdzenia importu typu.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "Element „resolution-mode” jest jedynym prawidłowym kluczem dla atrybutów importu typu.", "resolution_mode_should_be_either_require_or_import_1453": "Element „resolution-mode” powinien mieć wartość „require” lub „import”.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Opcja „rootDirs” została ustawiona. Zostanie ona użyta do rozpoznania względnej nazwy modułu „{0}”.", "super_can_only_be_referenced_in_a_derived_class_2335": "Element „super” może być przywoływany tylko w klasie pochodnej.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "Nie można przywołać elementu „this” w obliczonej nazwie właściwości.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Nie można przywołać elementu „this” w treści modułu ani przestrzeni nazw.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Nie można przywołać elementu „this” w inicjatorze właściwości statycznej.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "Nie można przywołać elementu „this” w argumentach konstruktora.", "this_cannot_be_referenced_in_current_location_2332": "Nie można przywołać elementu „this” w bieżącej lokalizacji.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Element „this” niejawnie przyjmuje typ „any”, ponieważ nie ma adnotacji typu.", "true_for_ES2022_and_above_including_ESNext_6930": "wartość \"true\" dla ES2022 i powyżej, uwzględniając ESNext.", "true_if_composite_false_otherwise_6909": "\"true\", jeśli \"composite\", w przeciwnym razie \"false\"", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true”, gdy element „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”; w przeciwnym razie „false”.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: kompilator TypeScript", "type_Colon_6902": "typ:", "unique_symbol_types_are_not_allowed_here_1335": "Typy „unique symbol” nie są dozwolone w tym miejscu.", diff --git a/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json b/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json index cec13e7f80..e8327cb2c6 100644 --- a/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "TODAS AS OPÇÕES DO COMPILADOR", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Um modificador '{0}' não pode ser usado com uma declaração de importação.", "A_0_parameter_must_be_the_first_parameter_2680": "Um parâmetro '{0}' deve ser o primeiro parâmetro.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Uma marca JSDoc '@template' pode não seguir uma marca '@typedef', '@callback' ou '@overload'", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Um comentário de JSDoc '@typedef' não pode conter várias marcas '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Um literal 'bigint' não pode ser usado como um nome de propriedade.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Um literal de bigint não pode usar notação exponencial.", "A_bigint_literal_must_be_an_integer_1353": "Um literal de bigint deve ser um inteiro.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Um parâmetro de padrão de associação não pode ser opcional em uma assinatura de implementação.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Uma instrução 'break' só pode ser usada em uma iteração de circunscrição ou instrução switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Uma instrução 'break' só pode saltar para um rótulo de uma instrução de circunscrição.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Uma classe de caracteres não deve conter um pontuador duplo reservado. Você quis escapar com uma barra invertida?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "O intervalo de uma classe de caracteres não deve ser limitado por outra classe de caracteres.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Uma classe pode implementar apenas um identificador/nome qualificado com argumentos de tipo opcionais.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Uma classe pode implementar somente um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Uma classe não pode estender um tipo primitivo como '{0}'. As classes só podem estender valores construtíveis.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Uma classe não pode implementar um tipo primitivo como '{0}'. Ela só pode implementar outros tipos de objetos nomeados.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Uma declaração de classe sem o modificador 'default' deve ter um nome.", "A_class_member_cannot_have_the_0_keyword_1248": "Um membro de classe não pode ter a palavra-chave '{0}'.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Uma expressão de vírgula não é permitida em um nome de propriedade calculado.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Um construtor não pode ter um parâmetro 'this'.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Uma instrução 'continue' só pode ser usada em uma instrução de iteração de circunscrição.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Uma instrução 'continue' só pode saltar para um rótulo de uma instrução de iteração de circunscrição.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Um arquivo de declaração não pode ser importado sem 'import type'. Você quis importar um arquivo de implementação '{0}'?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Um modificador 'declare' não pode ser usado em um contexto de ambiente.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Um decorador pode decorar somente uma implementação de método, não uma sobrecarga.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Uma cláusula 'default' não pode aparecer mais de uma vez em uma instrução 'switch'.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Uma exportação padrão deve estar no nível superior de uma declaração de arquivo ou módulo.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Uma declaração de atribuição definitiva '!' não é permitida neste contexto.", "A_destructuring_declaration_must_have_an_initializer_1182": "Uma declaração de desestruturação deve ter um inicializador.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Uma chamada de importação dinâmica em ES5/ES3 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Uma chamada de importação dinâmica no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", "A_file_cannot_have_a_reference_to_itself_1006": "Um arquivo não pode fazer referência a si mesmo.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Uma função que retorna 'never' não pode ter um ponto de extremidade acessível.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Uma função chamada com a palavra-chave 'new' não pode ter um tipo 'this' que seja 'void'.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "A função cujo tipo declarado não é 'void' nem 'any' deve retornar um valor.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Uma função cujo tipo declarado não seja 'undefined', 'void' nem 'any' deve retornar um valor.", "A_generator_cannot_have_a_void_type_annotation_2505": "O gerador não pode ter uma anotação de tipo 'void'.", "A_get_accessor_cannot_have_parameters_1054": "Um acessador 'get' não pode ter parâmetros.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Um acessador get precisa ser pelo menos tão acessível quanto o setter", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Uma declaração de namespace não pode estar em um arquivo diferente de uma classe ou função com a qual ela é mesclada.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Uma declaração de namespace não pode estar localizada antes de uma classe ou função com a qual ela é mesclada.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Uma declaração de namespace só é permitida no nível superior de um namespace ou módulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Uma declaração \"namespace\" não deve ser declarada usando a palavra-chave \"module\". Use a palavra-chave \"namespace\".", "A_non_dry_build_would_build_project_0_6357": "Um build não -dry criaria o projeto '{0}'", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Um build não -dry excluiria os seguintes arquivos: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Um build não -dry atualizaria a saída do projeto '{0}'", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Um build não -dry atualizaria carimbos de data/hora para a saída do projeto '{0}'", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Um inicializador de parâmetro só é permitido em uma implementação de função ou de construtor.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Uma propriedade de parâmetro não pode ser declarada usando um parâmetro rest.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Uma chamada 'super' deve ser a primeira instrução no construtor a se referir a 'super' ou 'this' quando uma classe derivada contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Uma proteção de tipo baseado em 'this não é compatível com uma proteção de tipo baseado em parâmetro.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Um tipo 'this' está disponível somente em um membro não estático de uma classe ou interface.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Um modificador 'export' de nível superior não pode ser usado em declarações de valor em um módulo CommonJS quando 'verbatimModuleSyntax' estiver habilitado.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Um arquivo 'tsconfig.json' já está definido em: '{0}'.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Um membro de tupla não pode ser opcional e rest.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Um tipo de tupla não pode ser indexado com um valor negativo.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "A expressão 'yield' só é permitida em um corpo gerador.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "O método abstrato '{0}' na classe '{1}' não pode ser acessado por meio da expressão super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Os métodos abstratos só podem aparecer dentro de uma classe abstrata.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "As propriedades abstratas só podem aparecer em uma classe abstrata.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "A propriedade abstrata '{0}' na classe '{1}' não pode ser acessada no construtor.", "Accessibility_modifier_already_seen_1028": "O modificador de acessibilidade já foi visto.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Os acessadores somente estão disponíveis no direcionamento para ECMAScript 5 e superior.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Acessadores devem ser abstratos ou não abstratos.", "Add_0_to_unresolved_variable_90008": "Adicionar '{0}.' à variável não resolvida", "Add_a_return_statement_95111": "Adicionar uma instrução return", + "Add_a_return_type_to_the_function_declaration_9031": "Adicione um tipo de retorno à declaração da função.", + "Add_a_return_type_to_the_function_expression_9030": "Adicionar um tipo de retorno à expressão da função.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Adicione um tipo de retorno à declaração do acessório Get.", + "Add_a_return_type_to_the_method_9034": "Adicione um tipo de retorno ao método", + "Add_a_type_annotation_to_the_parameter_0_9028": "Adicione uma anotação de tipo ao parâmetro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Adicione uma anotação de tipo à propriedade {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Adicione uma anotação de tipo à variável {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Adicionar um tipo ao parâmetro da declaração do acessório set.", "Add_all_missing_async_modifiers_95041": "Adicionar todos os modificadores 'async' ausentes", "Add_all_missing_attributes_95168": "Adicionar todos os atributos ausentes", "Add_all_missing_call_parentheses_95068": "Adicionar todos os parênteses de chamada ausentes", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Adicionar todas as importações ausentes", "Add_all_missing_members_95022": "Adicionar todos os membros ausentes", "Add_all_missing_override_modifiers_95162": "Adicionar todos os modificadores 'override' ausentes", + "Add_all_missing_parameters_95190": "Adicionar todos os parâmetros ausentes", "Add_all_missing_properties_95166": "Adicionar todas as propriedades ausentes", "Add_all_missing_return_statement_95114": "Adicionar todas as instruções return ausentes", "Add_all_missing_super_calls_95039": "Adicionar todas as chamadas super ausentes", + "Add_all_missing_type_annotations_90067": "Adicione todas as anotações de tipo ausentes", + "Add_all_optional_parameters_95193": "Adicione todos os parâmetros opcionais", + "Add_annotation_of_type_0_90062": "Adicionar anotação do tipo '{0}'", "Add_async_modifier_to_containing_function_90029": "Adicione o modificador assíncrono que contém a função", "Add_await_95083": "Adicionar 'await'", "Add_await_to_initializer_for_0_95084": "Adicionar 'await' ao inicializador para '{0}'", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas", "Add_missing_attributes_95167": "Adicionar atributos ausentes", "Add_missing_call_parentheses_95067": "Adicionar os parênteses de chamada ausentes", + "Add_missing_comma_for_object_member_completion_0_95187": "Adicionar vírgula ausente para conclusão de membro de objeto '{0}'.", "Add_missing_enum_member_0_95063": "Adicionar membro de enumeração ausente '{0}'", "Add_missing_function_declaration_0_95156": "Adicionar a declaração de função ausente '{0}'", "Add_missing_new_operator_to_all_calls_95072": "Adicionar operador 'new' ausente a todas as chamadas", "Add_missing_new_operator_to_call_95071": "Adicionar operador 'new' ausente à chamada", + "Add_missing_parameter_to_0_95188": "Adicionar parâmetro ausente a '{0}'", + "Add_missing_parameters_to_0_95189": "Adicionar parâmetros ausentes a '{0}'", "Add_missing_properties_95165": "Adicionar propriedades ausentes", "Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente", "Add_missing_typeof_95052": "Adicionar 'typeof' ausente", "Add_names_to_all_parameters_without_names_95073": "Adicionar nomes a todos os parâmetros sem nomes", + "Add_optional_parameter_to_0_95191": "Adicionar parâmetro opcional a '{0}'", + "Add_optional_parameters_to_0_95192": "Adicionar parâmetros opcionais ao '{0}'", "Add_or_remove_braces_in_an_arrow_function_95058": "Adicionar ou remover chaves em uma função de seta", "Add_override_modifier_95160": "Adicionar modificador \"override\"", "Add_parameter_name_90034": "Adicionar nome de parâmetro", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro", + "Add_return_type_0_90063": "Adicionar tipo de retorno '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Adicione satisfies e uma asserção de tipo a esta expressão (satisfies T as T) para tornar o tipo explícito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Adicionar satisfies e uma asserção de tipo embutido com '{0}'", "Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados", "Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Adicione 'indefinido' a um tipo quando acessado usando um índice.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permitir 'importar x de y' quando um módulo não tiver uma exportação padrão.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permitir a importação de funções auxiliares do tslib uma vez por projeto, em vez de incluí-las por arquivo.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que as importações incluam extensões de arquivo TypeScript. Requer a definição de '--moduleResolution bundler' e '--noEmit' ou '--emitDeclarationOnly'.", "Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permitir que várias pastas sejam tratadas como uma ao resolver módulos.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "O nome do arquivo '{0}' já incluído difere do nome de arquivo '{1}' somente em maiúsculas e minúsculas.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Não foi fornecido um argumento correspondente a esse padrão de associação.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Um operando aritmético deve ser do tipo 'any', 'number', 'bignit' ou um tipo enumerado.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Uma função de seta não pode ter um parâmetro 'this'.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Uma função ou método assíncrono em ES5/ES3 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Uma função ou método assíncrono no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Uma função ou método assíncrono deve retornar um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", "An_async_iterator_must_have_a_next_method_2519": "O iterador assíncrono deve ter um método 'next()'.", "An_element_access_expression_should_take_an_argument_1011": "Uma expressão de acesso do elemento deveria receber um argumento.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Uma declaração de exportação só pode ser usada no nível superior de um módulo.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Uma declaração de exportação só pode ser usada no nível superior de um namespace ou módulo.", "An_export_declaration_cannot_have_modifiers_1193": "Uma declaração de exportação não pode ter modificadores.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Uma declaração 'export =' deve fazer referência a um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Uma declaração 'export =' deve fazer referência a um valor quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' refere-se apenas a um tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' se refere somente a um tipo.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Uma expressão do tipo 'nula' não pode ser testada quanto à veracidade.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Um valor de escape Unicode estendido deve estar entre 0x0 e 0x10FFFF, inclusive.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Um identificador ou palavra-chave não pode imediatamente seguir um literal numérico.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uma implementação não pode ser declarada em contextos de ambiente.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Um alias de importação não pode fazer referência a uma declaração que foi exportada usando 'tipo de exportação'.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Um alias de importação não pode fazer referência a uma declaração que foi importada usando 'tipo de importação'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Um alias de importação não pode resolver uma declaração de tipo ou somente tipo quando \"verbatimModuleSyntax\" estiver habilitado.", "An_import_alias_cannot_use_import_type_1392": "Um alias de importação não pode usar um 'tipo de importação'", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Uma declaração de importação só pode ser usada no nível superior de um módulo.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Uma declaração de importação só pode ser usada no nível superior de um namespace ou módulo.", "An_import_declaration_cannot_have_modifiers_1191": "Uma declaração de importação não pode ter modificadores.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Um caminho de importação não pode terminar com uma extensão '{0}'. Considere importar '{1}'.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Um caminho de importação só pode terminar com uma extensão '{0}' quando 'allowImportingTsExtensions' estiver habilitado.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Uma assinatura de índice não pode ter um parâmetro rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Uma assinatura de índice não pode ter uma vírgula à direita.", "An_index_signature_must_have_a_type_annotation_1021": "Uma assinatura de índice deve ter uma anotação de tipo.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Uma expressão de instanciação não pode ser seguida por um acesso de propriedade.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Uma interface só pode estender um identificador/nome qualificado com argumentos de tipo opcionais.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Uma interface não pode estender um tipo primitivo como '{0}'; uma interface só pode estender tipos e classes nomeados", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Uma interface não pode estender um tipo primitivo como '{0}'. Ela só pode estender outros tipos de objetos nomeados.", "An_interface_property_cannot_have_an_initializer_1246": "Uma propriedade de interface não pode ter um inicializador.", "An_iterator_must_have_a_next_method_2489": "Um iterador deve ter um método 'next()'.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Um pragma @jsxFrag é necessário ao usar um pragma @jsx com fragmentos JSX.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Um literal de objeto não pode ter várias propriedades com o mesmo nome.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Um literal de objeto não pode ter propriedade e acessador com o mesmo nome.", "An_object_member_cannot_be_declared_optional_1162": "Um membro de objeto não pode ser declarado como opcional.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "O método '[Symbol.hasInstance]' de um objeto deve retornar um valor booliano para que ele seja usado no lado direito de uma expressão 'instanceof'.", "An_optional_chain_cannot_contain_private_identifiers_18030": "Uma cadeia opcional não pode conter identificadores privados.", "An_optional_element_cannot_follow_a_rest_element_1266": "Um elemento opcional não pode seguir um elemento REST.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Um valor externo de 'this' é sombreado por este contêiner.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "A assinatura de sobrecarga não pode ser declarada como geradora.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Uma expressão unária com o operador '{0}' não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", "Annotate_everything_with_types_from_JSDoc_95043": "Anotar tudo com tipos do JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propriedades da função expando em um namespace", "Annotate_with_type_from_JSDoc_95009": "Anotar com o tipo do JSDoc", "Another_export_default_is_here_2753": "Outro padrão de exportação está aqui.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualquer propriedade Unicode que possa corresponder a mais de um único caractere só estará disponível quando o sinalizador Conjuntos Unicode (v) estiver definido.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualquer coisa que possa corresponder a mais de um único caractere é inválida dentro de uma classe de caractere negada.", "Are_you_missing_a_semicolon_2734": "Você está esquecendo de um ponto e vírgula?", "Argument_expression_expected_1135": "Expressão de argumento esperada.", "Argument_for_0_option_must_be_Colon_1_6046": "O argumento para a opção '{0}' deve ser: {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "O argumento do tipo '{0}' não pode ser atribuído ao parâmetro do tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Não foram fornecidos argumentos para o parâmetro REST '{0}'.", "Array_element_destructuring_pattern_expected_1181": "Padrão de desestruturação de elemento da matriz esperado.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Matrizes com elementos espalhados não podem ser inferidas com --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "As declarações exigem que todos os nomes no destino de chamada sejam declarados com uma anotação de tipo explícito.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "As declarações exigem que o destino da chamada seja um identificador ou um nome qualificado.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Não há suporte para a atribuição de propriedades a funções sem declará-las com --isolatedDeclarations. Adicione uma declaração explícita para as propriedades atribuídas a essa função.", "Asterisk_Slash_expected_1010": "'*/' esperado.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "Pelo menos um acessório deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Acréscimos de escopo global somente podem ser diretamente aninhados em módulos externos ou declarações de módulo de ambiente.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Acréscimos de escopo global devem ter o modificador 'declare' a menos que apareçam em contexto já ambiente.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "A descoberta automática para digitações está habilitada no projeto '{0}'. Executando o passe de resolução extra para o módulo '{1}' usando o local do cache '{2}'.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão Await não pode ser usada dentro de um bloco estático de classe.", "BUILD_OPTIONS_6919": "OPÇÕES DE BUILD", "Backwards_Compatibility_6253": "Compatibilidade com Versões Anteriores", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "As expressões de classe base não podem referenciar parâmetros de tipo de classe.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Os literais de BigInt não estão disponíveis ao direcionar para menos de ES2020.", "Binary_digit_expected_1177": "Dígito binário esperado.", "Binding_element_0_implicitly_has_an_1_type_7031": "O elemento de associação '{0}' tem implicitamente um tipo '{1}'.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Os elementos de associação não podem ser exportados diretamente com --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Variável de escopo de bloco '{0}' usada antes da sua declaração.", "Build_a_composite_project_in_the_working_directory_6925": "Crie um projeto composto no diretório de trabalho.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilar um ou mais projetos e suas dependências, se estiverem desatualizados", "Build_option_0_requires_a_value_of_type_1_5073": "A opção de build '{0}' requer um valor do tipo {1}.", "Building_project_0_6358": "Compilando o projeto '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Iteradores internos são instanciados com um tipo 'TReturn' de 'undefined' em vez de 'any'.", "COMMAND_LINE_FLAGS_6921": "SINALIZADORES DE LINHA DE COMANDO", "COMMON_COMMANDS_6916": "COMANDOS COMUNS", "COMMON_COMPILER_OPTIONS_6920": "OPÇÕES COMUNS DO COMPILADOR", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Os tipos de retorno da assinatura de chamada '{0}' e '{1}' são incompatíveis.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Assinatura de chamada, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Assinaturas de chamada sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "O destino da chamada não contém nenhuma assinatura.", "Can_only_convert_logical_AND_access_chains_95142": "Só é possível converter cadeias de acesso E lógicas", "Can_only_convert_named_export_95164": "Só pode converter exportação nomeada", "Can_only_convert_property_with_modifier_95137": "Só é possível converter a propriedade com o modificador", - "Can_only_convert_string_concatenation_95154": "Só é possível converter a concatenação de cadeia de caracteres", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Só é possível converter concatenações de cadeia de caracteres e literais de cadeia de caracteres", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Não foi possível acessar '{0}.{1}' porque '{0}' é um tipo, mas não um namespace. Você quis dizer recuperar o tipo da propriedade '{1}' em '{0}' com '{0}[\"{1}\"]'?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Não é possível acessar enumerações de constante de ambiente quando o sinalizador '--isolatedModules' é fornecido.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Não é possível acessar '{0}' de outro arquivo sem qualificação quando '{1}' estiver habilitado. Use '{2}' em vez disso.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Não é possível acessar enumerações const de ambiente quando '{0}' estiver habilitado.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Não é possível atribuir um tipo de construtor '{0}' para um tipo de construtor '{1}'.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Não é possível atribuir um tipo de construtor abstrato a um tipo de construtor não abstrato.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Não é possível fazer a atribuição a '{0}' porque ela é uma classe.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Não é possível encontrar a definição de biblioteca para '{0}'.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Não é possível encontrar a definição de biblioteca para '{0}'. Você quis dizer '{1}'?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Não é possível localizar o módulo '{0}'. Considere usar '--resolveJsonModule' para importar o módulo com a extensão '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Não é possível localizar o módulo '{0}'. Você quis definir a opção 'moduleResolution' como 'node' ou adicionar aliases à opção 'paths'?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Não é possível localizar o módulo '{0}'. Você quis definir a opção 'moduleResolution' como 'nodenext' ou adicionar aliases à opção 'paths'?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Não é possível localizar o módulo '{0}' ou suas declarações de tipo correspondentes.", "Cannot_find_name_0_2304": "Não é possível encontrar o nome '{0}'.", "Cannot_find_name_0_Did_you_mean_1_2552": "Não é possível localizar o nome '{0}'. Você quis dizer '{1}'?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Não foi possível encontrar o nome '{0}'. Você quis escrever isto em uma função assíncrona?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{1}' ou posterior.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para incluir 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun' e adicione 'bun' ao campo de tipos em seu tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha`.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e depois adicione 'jest' ou 'mocha' ao campo tipos em seu tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery`.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a desestruturação da matriz sempre enviará '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o array spread sempre enviará '{0}'.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a instrução for-of sempre enviará '{0}'.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Não é possível preceder o projeto '{0}' porque ele não tem o conjunto 'outFile'", + "Cannot_move_statements_to_the_selected_file_95183": "Não é possível mover instruções para o arquivo selecionado", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Não é possível mover para o arquivo, o arquivo selecionado é inválido", "Cannot_read_file_0_5083": "Não é possível ler o arquivo '{0}'.", "Cannot_read_file_0_Colon_1_5012": "Não é possível ler o arquivo '{0}': {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Não é possível declarar novamente a variável de escopo de bloco '{0}'.", "Cannot_redeclare_exported_variable_0_2323": "Não é possível redeclarar a variável exportada '{0}'.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Não é possível declarar novamente o identificador '{0}' na cláusula catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Não é possível iniciar uma chamada de função em uma anotação de tipo.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Não é possível atualizar a saída do projeto '{0}' porque houve um erro ao ler o arquivo '{1}'", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Não é possível usar JSX, a menos que o sinalizador '--jsx' seja fornecido.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Não é possível usar \"exportar importação\" em um namespace de tipo ou apenas de tipo quando a bandeira \"--isolatedModules\" é fornecida.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Não é possível usar 'export import' em um tipo ou namespace somente de tipo quando '{0}' estiver habilitado.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Não será possível usar importações, exportações ou acréscimos de módulo quando '--module' for 'none'.", "Cannot_use_namespace_0_as_a_type_2709": "Não é possível usar o namespace '{0}' como um tipo.", "Cannot_use_namespace_0_as_a_value_2708": "Não é possível usar o namespace '{0}' como um valor.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Alterar 'extends' para 'implements'", "Change_spelling_to_0_90022": "Alterar ortografia para '{0}'", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifique as propriedades de classe declaradas, mas não definidas no construtor.", + "Check_side_effect_imports_6806": "Verifique as importações de efeitos colaterais.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verificar se os argumentos para os métodos 'associar', 'chamar' e 'aplicar' correspondem à função original.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verificando se '{0}' é o maior prefixo correspondente para '{1}' - '{2}'.", "Circular_definition_of_import_alias_0_2303": "Definição circular do alias de importação '{0}'.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "A declaração da classe não pode implementar a lista de sobrecarga para '{0}'.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "As declarações de classe não podem ter mais de uma marca '@augments' ou '@extends'.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Os decoradores de classe não podem ser usados com um identificador privado estático. Considere remover o decorador experimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "O campo de classe '{0}' definido pela classe pai não está acessível na classe filho via super.", "Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar ES5 com módulo {0}.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Opções da Linha de Comando", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compile o projeto dando o caminho para seu arquivo de configuração ou para uma pasta com um 'tsconfig.json'.", "Compiler_Diagnostics_6251": "Diagnóstico do Compilador", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "A opção do compilador '{0}' não pode receber uma cadeia de caracteres vazia.", "Compiler_option_0_expects_an_argument_6044": "A opção do compilador '{0}' espera um argumento.", "Compiler_option_0_may_not_be_used_with_build_5094": "A opção de compilador '--{0}' não pode ser usada com '--build'.", "Compiler_option_0_may_only_be_used_with_build_5093": "A opção de compilador '--{0}' pode ser usada somente com '--build'.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Projetos compostos não podem desabilitar a emissão de declaração.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Projetos compostos podem não desabilitar a compilação incremental.", "Computed_from_the_list_of_input_files_6911": "Calculado a partir da lista de arquivos de entrada", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "As propriedades computadas devem ser literais de números ou cadeia de caracteres, variáveis ou expressões pontilhadas com --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "Nomes de propriedade calculados não são permitidos em enums.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nomes de propriedades computadas em literais de classe ou objeto não podem ser inferidos com --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Os valores computados não são permitidos em uma enumeração com membros de valor de cadeia de caracteres.", "Concatenate_and_emit_output_to_single_file_6001": "Concatenar e emitir saída para um arquivo único.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Foram encontradas definições em conflito para '{0}' em '{1}' e em '{2}'. Considere instalar uma versão específica desta biblioteca para solucionar o conflito.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condições a serem definidas além dos padrões específicos do resolvedor ao resolver importações.", "Conflicts_are_in_this_file_6201": "Há conflitos neste arquivo.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere adicionar um modificador 'declare' para esta classe.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Os tipos de retorno de assinatura de constructo '{0}' e '{1}' são incompatíveis.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Converter '{0}' para o tipo de objeto mapeado", "Convert_all_const_to_let_95102": "Converta todos os 'const' para 'let'", "Convert_all_constructor_functions_to_classes_95045": "Converter todas as funções de construtor em classes", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Converter todas as importações não usadas como um valor para importações somente de tipo", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Converter todos os caracteres inválidos em código de entidade HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Converter todos os tipos re-exportados para exportações somente de tipo", "Convert_all_require_to_import_95048": "Converter todos os 'require' em 'import'", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Converter todos para literais numéricos bigint", "Convert_all_to_default_imports_95035": "Converter tudo para importações padrão", "Convert_all_type_literals_to_mapped_type_95021": "Converter todos os literais de tipo em tipo mapeado", + "Convert_all_typedef_to_TypeScript_types_95177": "Converta todos os typedef em tipos TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Converter a função de seta ou a expressão de função", "Convert_const_to_let_95093": "Converter 'const' para 'let'", "Convert_default_export_to_named_export_95061": "Converter exportação padrão para exportação nomeada", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Converter em expressão de cadeia opcional", "Convert_to_template_string_95096": "Converter para cadeia de caracteres de modelo", "Convert_to_type_only_export_1364": "Converter para exportação somente de tipo", - "Convert_to_type_only_import_1373": "Converter para importação somente de tipo", + "Convert_typedef_to_TypeScript_type_95176": "Converta o typedef em um tipo TypeScript.", "Corrupted_locale_file_0_6051": "Arquivo de localidade {0} corrompido.", "Could_not_convert_to_anonymous_function_95153": "Não foi possível fazer a conversão para a função anônima", "Could_not_convert_to_arrow_function_95151": "Não foi possível fazer a conversão para a função de seta", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Não foi possível encontrar o nome '{0}'. Você quis dizer '{1}'?", "Could_not_find_namespace_import_or_named_imports_95132": "Não foi possível localizar a importação de namespace nem as importações nomeadas", "Could_not_find_property_for_which_to_generate_accessor_95135": "Não foi possível localizar a propriedade para a qual o acessador deve ser gerado", + "Could_not_find_variable_to_inline_95185": "Não foi possível localizar a variável para embutida.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Não foi possível resolver o caminho '{0}' com as extensões: {1}.", "Could_not_write_file_0_Colon_1_5033": "Não foi possível gravar o arquivo '{0}': {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Criar arquivos source map para arquivos JavaScript emitidos.", "Create_sourcemaps_for_d_ts_files_6614": "Criar sourcemaps para arquivos .d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Cria um tsconfig.json com as configurações recomendadas no diretório de trabalho.", "DIRECTORY_6038": "DIRETÓRIO", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sequências de escape decimais e referências inversas não são permitidas em uma classe de caracteres.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Decimais com zeros à esquerda não são permitidos.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "A declaração aumenta a declaração em outro arquivo. Isso não pode ser serializado.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "A emissão de declaração para este arquivo requer a preservação desta importação para aumentos. Não há suporte para isso com --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}' do módulo '{1}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "A declaração emit para esse parâmetro requer a adição implícita de undefined ao seu tipo. Não há suporte para isso com --isolatedDeclarations.", "Declaration_expected_1146": "Declaração esperada.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "O nome de declaração entra em conflito com o identificador global integrado '{0}'.", "Declaration_or_statement_expected_1128": "Declaração ou instrução esperada.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "É esperada uma declaração ou uma instrução. Este '=' segue um bloco de instruções, portanto, se você pretende gravar uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Declaração ou instrução esperada. Esse \"=\" segue um bloco de instruções, portanto, se você pretendia escrever uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "As declarações com asserções de atribuição definitiva também precisam ter anotações de tipo.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "As declarações com inicializadores também não podem ter asserções de atribuição definitiva.", "Declare_a_private_field_named_0_90053": "Declare um campo privado chamado '{0}'.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Declarar propriedade estática '{0}'", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "O tipo de retorno da função decorador '{0}' não é atribuível ao tipo '{1}'.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "O tipo de retorno da função decorador é '{0}' mas deve ser 'void' ou 'any'.", + "Decorator_used_before_export_here_1486": "Decorador usado antes de 'export' aqui.", "Decorators_are_not_valid_here_1206": "Os decoradores não são válidos aqui.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Os decoradores não podem ser aplicados a vários acessadores get/set de mesmo nome.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Decoradores não podem ser aplicados a parâmetros 'this'.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Os decoradores podem não aparecer após 'export' ou 'export default' se também aparecerem antes de 'export'.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Os decoradores devem preceder o nome e todas as palavras-chave das declarações de propriedade.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Padronize as variáveis da cláusula catch como 'desconhecido' em vez de 'qualquer'.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "A exportação padrão do módulo tem ou está usando o nome particular '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "As exportações padrão não podem ser inferidas com --isolatedDeclarations.", "Default_library_1424": "Biblioteca padrão", "Default_library_for_target_0_1425": "Biblioteca padrão para o destino '{0}'", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "As definições dos seguintes identificadores estão em conflito com as de outro arquivo: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Desabilitar a exclusão de declarações 'enum const' no código gerado.", "Disable_error_reporting_for_unreachable_code_6603": "Desabilitar o relatório de erros para código inacessível.", "Disable_error_reporting_for_unused_labels_6604": "Desabilitar o relatório de erros para rótulos não utilizados.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Desative a verificação completa do tipo (somente erros críticos de análise e emissão serão relatados).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Desabilitar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Desabilitar a inclusão de qualquer arquivo de biblioteca, incluindo o padrão lib.d.ts.", "Disable_loading_referenced_projects_6235": "Desabilite o carregamento de projetos referenciados.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Não relate erros sobre código inacessível.", "Do_not_report_errors_on_unused_labels_6074": "Não relate erros sobre rótulos não utilizados.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Não resolver o real caminho de symlinks.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Não transforme ou elimine quaisquer importações ou exportações não marcadas como somente tipo, garantindo que sejam gravadas no formato do arquivo de saída com base na configuração 'module'.", "Do_not_truncate_error_messages_6165": "Não truncar as mensagens de erro.", "Duplicate_function_implementation_2393": "Implementação de função duplicada.", "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Assinatura de índice duplicada para o tipo '{0}'.", "Duplicate_label_0_1114": "Rótulo '{0}' duplicado.", "Duplicate_property_0_2718": "Propriedade '{0}' duplicada.", + "Duplicate_regular_expression_flag_1500": "Duplicar o sinalizador de expressão regular.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "O especificador da importação dinâmica deve ser do tipo 'string', mas aqui tem o tipo '{0}'.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Só há suporte para importações dinâmicas quando o sinalizador '--module' está definido como 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16' ou 'nodenext'.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "As importações dinâmicas somente podem aceitar um especificador de módulo e uma asserção opcional como argumentos", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "As importações dinâmicas suportam apenas um segundo argumento quando a opção '--module' é definida como 'esnext', 'node16' ou 'nodenext'.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "As importações dinâmicas só podem aceitar um especificador de módulo e um conjunto opcional de atributos como argumentos", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "As importações dinâmicas só darão suporte a um segundo argumento quando a opção '--module' estiver definida como 'esnext', 'node16', 'nodenext' ou 'preserve'.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "A sintaxe ESM não é permitida em um módulo CommonJS quando 'module' estiver definido como 'preserve'.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "A sintaxe ESM não é permitida em um módulo CommonJS quando a opção \"verbatimModuleSyntax\" estiver habilitada.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaração de '{0}.{1}' difere em seu valor, onde '{2}' era esperado, mas '{3}' foi fornecido.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada membro do tipo de união '{0}' tem assinaturas de constructo, mas nenhuma dessas assinaturas é compatível entre si.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada membro do tipo de união '{0}' tem assinaturas, mas nenhuma dessas assinaturas é compatível entre si.", "Editor_Support_6249": "Suporte do Editor", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilitar o relatório de erros em arquivos JavaScript verificados por tipo.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilitar relatório de erros quando as variáveis locais não forem lidas.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilitar relatório de erros quando 'this' for fornecido o tipo 'any'.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Habilitar suporte experimental para decoradores de rascunho do TC39 estágio 2.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite o suporte experimental para decoradores experimentais herdados.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Permite a importação de arquivos com qualquer extensão, desde que um arquivo de declaração esteja presente.", "Enable_importing_json_files_6689": "Habilitar importação de arquivos .json.", "Enable_project_compilation_6302": "Habilitar a compilação do projeto", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite os métodos estritos 'bind', 'call' e 'apply' em funções.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Certifique-se de que a capitalização esteja correta nas importações.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Certifique-se que cada arquivo pode ser convertido em segurança sem depender de outras importações.", "Ensure_use_strict_is_always_emitted_6605": "Certifique-se de que 'use strict' seja sempre emitido.", + "Entering_conditional_exports_6413": "Inserção de exportações condicionais.", "Entry_point_for_implicit_type_library_0_1420": "Ponto de entrada para a biblioteca de tipos implícita '{0}'", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Ponto de entrada para a biblioteca de tipos implícita '{0}' com packageId '{1}'", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "As declarações enum só podem ser mescladas com namespaces ou com outras declarações enum.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Declarações de enumeração devem ser const ou não const.", "Enum_member_expected_1132": "Membro de enumeração esperado.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "O membro Enumeração que segue um membro numérico não literal deve ter um inicializador quando 'isolatedModules' estiver habilitado.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Os inicializadores de membros de Enumeração devem ser computáveis sem referências a símbolos externos com --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "O membro de enumeração deve ter um inicializador.", "Enum_name_cannot_be_0_2431": "O nome de enumeração não pode ser '{0}'.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "O tipo de Enumeração '{0}' tem membros com inicializadores que não são literais.", "Errors_Files_6041": "Arquivos de Erros", + "Escape_sequence_0_is_not_allowed_1488": "A sequência de escape '{0}' não é permitida.", "Examples_Colon_0_6026": "Exemplos: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complexidade excessiva ao comparar os tipos '{0}' e '{1}'.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidade da pilha excessiva ao comparar tipos '{0}' e '{1}'.", + "Exiting_conditional_exports_6416": "Saída das exportações condicionais.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Espera-se {0}-{1} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", "Expected_0_arguments_but_got_1_2554": "{0} argumentos eram esperados, mas {1} foram obtidos.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} argumentos eram esperados, mas foram obtidos {1}. Você esqueceu de incluir 'void' no argumento de tipo para 'Promise'?", "Expected_0_type_arguments_but_got_1_2558": "{0} argumentos de tipo eram esperados, mas {1} foram obtidos.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Espera-se {0} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Esperava 1 argumento, mas obteve 0. 'new Promise()' precisa de uma dica JSDoc para produzir um 'resolver' que pode ser chamado sem argumentos.", + "Expected_a_Unicode_property_name_1523": "Esperado um nome de propriedade Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Espera-se um nome ou valor de propriedade Unicode.", + "Expected_a_Unicode_property_value_1525": "Espera-se um valor da propriedade Unicode.", + "Expected_a_capturing_group_name_1514": "Esperado um nome de grupo de captura.", + "Expected_a_class_set_operand_1520": "Espera-se um operando de conjunto de classes.", "Expected_at_least_0_arguments_but_got_1_2555": "Pelo menos {0} argumentos eram esperados, mas {1} foram obtidos.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Marca de fechamento de JSX correspondente esperada para '{0}'.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Marca de fechamento correspondente esperada para fragmento JSX.", "Expected_for_property_initializer_1442": "Esperado '=' para inicializador de propriedade.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "O tipo esperado do campo '{0}' em 'package.json' como '{1}' obteve '{2}'.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "O suporte experimental de decorador é um recurso que está sujeito a alterações em uma liberação futura. Configure a opção 'experimentalDecorators' em seu 'tsconfig' ou 'jsconfig' para remover este aviso.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolução de módulo especificado explicitamente: '{0}'.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "A exponenciação não pode ser executada nos valores 'bigint', a menos que a opção 'target' esteja definida como 'es2016' ou posterior.", "Export_0_from_module_1_90059": "Exportar '{0}' do módulo '{1}'", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "A variável exportada '{0}' tem ou está usando o nome particular '{1}'.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exportações e designações de exportações não são permitidas em acréscimos de módulo.", "Expression_expected_1109": "Expressão esperada.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "A expressão deve ser colocada entre parênteses para ser usada como um decorador.", "Expression_or_comma_expected_1137": "Expressão ou vírgula esperada.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "A expressão produz um tipo de tupla grande demais para ser representada.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "A expressão produz um tipo de união muito complexo para representar.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "A expressão é resolvida como '_super', que o compilador utiliza para capturar a referência da classe base.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "A expressão é resolvida para a declaração de variável '_newTarget' que o compilador usa para capturar a referência de metapropriedade 'new.target'.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "A expressão é resolvida como a declaração de variável '_this' que o compilador utiliza para capturar a referência 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "O tipo de expressão não pode ser inferido com --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "A cláusula Extends não pode conter uma expressão com --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "A cláusula extends para o tipo inferido '{0}' tem ou está usando o nome particular '{1}'.", + "Extract_base_class_to_variable_90064": "Extrair classe base para variável", + "Extract_binding_expressions_to_variable_90066": "Extrair expressões de associação para variável", "Extract_constant_95006": "Extrair constante", + "Extract_default_export_to_variable_90065": "Extrair exportação padrão para variável", "Extract_function_95005": "Extrair função", "Extract_to_0_in_1_95004": "Extrair para {0} em {1}", "Extract_to_0_in_1_scope_95008": "Extrair para {0} no escopo {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Extrair para interface", "Extract_to_type_alias_95078": "Extrair para alias de tipo", "Extract_to_typedef_95079": "Extrair para typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrair para variável e substituir por '{0} as typeof {0}'", "Extract_type_95077": "Tipo de extração", "FILE_6035": "ARQUIVO", "FILE_OR_DIRECTORY_6040": "ARQUIVO OU DIRETÓRIO", - "Failed_to_parse_file_0_Colon_1_5014": "Falha ao analisar arquivo '{0}': {1}.", + "Failed_to_find_peerDependency_0_6283": "Falha ao localizar peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Falha ao resolver na condição '{0}'.", "Fallthrough_case_in_switch_7029": "Caso de fallthrough no comutador.", "File_0_does_not_exist_6096": "O arquivo '{0}' não existe.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "O arquivo '{0}' não existe de acordo com as pesquisas anteriores em cache.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.", "File_0_exists_according_to_earlier_cached_lookups_6239": "O arquivo '{0}' existe de acordo com as pesquisas anteriores em cache.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "O arquivo '{0}' tem uma extensão sem suporte. As únicas extensões com suporte são {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "O arquivo '{0}' tem uma extensão sem suporte, portanto ele será ignorado.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "O arquivo '{0}' é um arquivo JavaScript. Você quis habilitar a opção 'allowJs'?", "File_0_is_not_a_module_2306": "O arquivo '{0}' não é um módulo.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "O arquivo '{0}' não está na lista de arquivos de projeto '{1}'. Os projetos devem listar todos os arquivos ou usar um padrão 'include'.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "O arquivo '{0}' não está em 'rootDir' '{1}'. Espera-se que 'rootDir' contenha todos os arquivos de origem.", "File_0_not_found_6053": "Arquivo '{0}' não encontrado.", "File_Management_6245": "Gerenciamento de Arquivos", + "File_appears_to_be_binary_1490": "O arquivo parece ser binário.", "File_change_detected_Starting_incremental_compilation_6032": "Alteração do arquivo detectada. Iniciando compilação incremental...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "O arquivo é um módulo CommonJS porque '{0}' não tem o campo \"type\"", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "O arquivo é o módulo CommonJS porque '{0}' tem o campo \"type\" cujo valor não é \"module\"", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "O arquivo é a saída da origem de referência do projeto '{0}'", "File_is_source_from_referenced_project_specified_here_1416": "O arquivo é a origem do projeto referenciado especificado aqui.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "O nome do arquivo '{0}' difere do nome de arquivo '{1}' já incluído somente em maiúsculas e minúsculas.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "O nome de arquivo '{0}' tem uma extensão '{1}' – procurando '{2}' em vez disso.", "File_name_0_has_a_1_extension_stripping_it_6132": "O nome do arquivo '{0}' tem uma extensão '{1}' – remoção.", "File_redirects_to_file_0_1429": "O arquivo redireciona para o arquivo '{0}'", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "A especificação de arquivo não pode conter um diretório pai ('..') que aparece após um curinga de diretório recursivo ('**'): '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Corrigir todas as expressões possivelmente com 'await' ausente", "Fix_all_implicit_this_errors_95107": "Corrigir todos os erros de 'this' implícitos", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corrigir todo tipo de retorno incorreto de uma função assíncrona", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops “For Await” não podem ser usados dentro de um bloco estático de classe.", + "Fix_all_with_type_only_imports_95182": "Corrigir tudo com importações somente de tipo", "Found_0_errors_6217": "Encontrados {0} erros.", "Found_0_errors_Watching_for_file_changes_6194": "{0} erros encontrados. Monitorando alterações de arquivo.", "Found_0_errors_in_1_files_6261": "Foram encontrados {0} erros em {1} arquivos.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Foram encontrados {0} erros no mesmo arquivo, começando em: {1}", "Found_1_error_6216": "Encontrado 1 erro.", "Found_1_error_Watching_for_file_changes_6193": "Um erro encontrado. Monitorando alterações de arquivo.", - "Found_1_error_in_1_6259": "Encontrado 1 erro em {1}", + "Found_1_error_in_0_6259": "Encontrado 1 erro em {0}", "Found_package_json_at_0_6099": "'package.json' encontrado em '{0}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Decorações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES3' ou 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES3' ou 'ES5'. Definições de classe estão automaticamente em modo estrito.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES3' ou 'ES5'. Módulos estão automaticamente em modo estrito.", + "Found_peerDependency_0_with_1_version_6282": "Foi encontrada peerDependency '{0}' com a versão '{1}'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Definições de classe estão automaticamente em modo estrito.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Módulos estão automaticamente em modo estrito.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "A expressão de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "A implementação da função está ausente ou não está imediatamente depois da declaração.", "Function_implementation_name_must_be_0_2389": "O nome da implementação de função deve ser '{0}'.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "A função tem o tipo de retorno 'any', de forma implícita, porque ela não tem uma anotação de tipo de retorno e é referenciada direta ou indiretamente em uma das suas expressões de retorno.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "A função não tem a instrução return final e o tipo de retorno não inclui 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "A função deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", "Function_not_implemented_95159": "Função não implementada.", "Function_overload_must_be_static_2387": "A sobrecarga de função deve ser estática.", "Function_overload_must_not_be_static_2388": "A sobrecarga de função não deve ser estática.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Identificador esperado.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. '__esModule' é reservado como um marcador exportado ao transformar os módulos ECMAScript.", "Identifier_or_string_literal_expected_1478": "Identificador ou literal de cadeia de caracteres esperado.", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificador, literal de cadeia de caracteres ou literal de número esperado.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação de pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se o pacote '{0}' realmente expõe este módulo, tente adicionar um novo arquivo de declaração (.d.ts) contendo o módulo `declare '{1}';`", "Ignore_this_error_message_90019": "Ignorar essa mensagem de erro", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Implementar a interface '{0}'", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "A cláusula implements da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "A conversão implícita de um 'symbol' em ' string' falhará em runtime. Considere o encapsulamento desta expressão em 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "A importação '{0}' está em conflito com o valor global usado neste arquivo, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "A importação '{0}' está em conflito com o valor local, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", "Import_0_from_1_90013": "Importar '{0}' de \"{1}\"", "Import_assertion_values_must_be_string_literal_expressions_2837": "Os valores de asserção de importação devem ser expressões literais de cadeias de caracteres.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "As declarações de importação não são permitidas em declarações que transpilam para chamadas 'require' do commonjs.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "As declarações de importação são suportadas apenas quando a opção '--module' está definida como 'esnext' ou 'nodenext'.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "As declarações de importação não são permitidas em declarações que compilam para chamadas 'require' do commonjs.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "As declarações de importação são suportadas apenas quando a opção '--module' é definida como 'esnext' ou 'nodenext'.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "As afirmações de importação não podem ser usadas com importações ou exportações somente de tipo.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Não é possível usar a atribuição de importação durante o direcionamento para módulos de ECMAScript. Use 'importar * como ns de \"mod\"', 'importar {a} de \"mod\"', 'importar d de \"mod\"' ou outro formato de módulo em vez disso.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Os valores do atributo de importação devem ser expressões literais de cadeias de caracteres.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atributos de importação não são permitidos em instruções que são compiladas para chamadas 'require' do CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Os atributos de importação só têm suporte quando a opção '--module' está definida como 'esnext', 'nodenext' ou 'preserve'.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Os atributos de importação não podem ser usadas com importações ou exportações somente de tipo.", "Import_declaration_0_is_using_private_name_1_4000": "A declaração da importação '{0}' está usando o nome particular '{1}'.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "A declaração da importação está em conflito com a declaração local '{0}'.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "As declarações de importação em um namespace não podem fazer referência a um módulo.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir arquivos sourcemap dentro do JavaScript emitido.", "Includes_imports_of_types_referenced_by_0_90054": "Inclui importações de tipos referenciados por '{0}'", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Incluir --watch, -w começará a observar o projeto atual para as alterações do arquivo. Uma vez definido, você pode configurar o modo de inspeção com:", + "Incomplete_quantifier_Digit_expected_1505": "Quantificador incompleto. Dígito esperado.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "A assinatura do índice para o tipo '{0}' está ausente no tipo '{1}'.", "Index_signature_in_type_0_only_permits_reading_2542": "Assinatura de índice no tipo '{0}' permite somente leitura.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Todas as declarações individuais na declaração mesclada '{0}' devem ser exportadas ou ficar no local.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Inferir tipos de parâmetro pelo uso", "Infer_this_type_of_0_from_usage_95080": "Inferir tipo 'this' de '{0}' do uso", "Infer_type_of_0_from_usage_95011": "Inferir tipo de '{0}' pelo uso", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Não há suporte para inferência de expressões de classe com --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Inicializar a propriedade '{0}' no construtor", "Initialize_static_property_0_90021": "Inicializar a propriedade estática '{0}'", "Initializer_for_property_0_2811": "Inicializador para a propriedade '{0}'", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "O inicializador da variável de membro de instância '{0}' não pode referenciar o identificador '{1}' declarado no construtor.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "O inicializador não fornece um valor para esse elemento de associação e o elemento de associação não tem valor padrão.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializadores não são permitidos em contextos de ambiente.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa um projeto TypeScript e cria um arquivo tsconfig.json.", + "Inline_variable_95184": "Variável embutida", "Insert_command_line_options_and_files_from_a_file_6030": "Inserir opções e arquivos de linha de comando de um arquivo.", "Install_0_95014": "Instalar '{0}'", "Install_all_missing_types_packages_95033": "Instalar todos os pacotes de tipos ausentes", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nome de módulo inválido em acréscimo, o módulo '{0}' não pôde ser encontrado.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadeia opcional inválida da nova expressão. Você quis dizer chamar '{0}()'?", "Invalid_reference_directive_syntax_1084": "Sintaxe de diretiva 'reference' inválida.", + "Invalid_syntax_in_decorator_1498": "Sintaxe inválida no decorador.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso inválido de “{0}”. Ele não pode ser usado dentro de um bloco estático de classe.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso inválido de '{0}'. Os módulos ficam automaticamente em modo estrito.", "Invalid_use_of_0_in_strict_mode_1100": "Uso inválido de '{0}' no modo estrito.", + "Invalid_value_for_ignoreDeprecations_5103": "Valor inválido para '--ignoreDeprecations'.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor inválido para 'jsxFactory'. '{0}' não é um identificador válido ou nome qualificado.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor inválido para 'jsxFragmentFactory'. '{0}' não é um identificador válido ou nome qualificado.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor inválido para '--reactNamespace'. '{0}' não é um identificador válido.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Seu tipo de elemento '{0}' não é um elemento JSX válido.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Seu tipo de instância '{0}' não é um elemento JSX válido.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Seu tipo de retorno '{0}' não é um elemento JSX válido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Seu tipo '{0}' não é um elemento JSX válido.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "O '@{0} {1}' do JSDoc não corresponde à cláusula 'extends {2}'.", "JSDoc_0_is_not_attached_to_a_class_8022": "O '@{0}' do JSDoc não está anexado a uma classe.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' só pode aparecer no último parâmetro de uma assinatura.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "A marcação do JSDoc \"@param\" tem o nome \"{0}\", mas não há nenhum parâmetro com esse nome.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "A marca '@param' do JSDoc tem o nome '{0}', mas não há nenhum parâmetro com esse nome. Ela corresponderia a 'argumentos' se tivesse um tipo de matriz.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc pode ser convertido em tipo TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "A marca JSDoc \"@typedef\" deve ter uma anotação de tipo ou ser seguida pelas marcas \"@property\" or \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Typedefs JSDoc podem ser convertidos em tipos TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Os tipos de JSDoc podem ser usados somente dentro dos comentários de documentação.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Tipos JSDoc podem ser movidos para tipos TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Os atributos JSX só devem ser atribuídos a 'expressões' que não estejam vazias.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Lista de pastas das quais são incluídas as definições de tipo.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Listas das pastas raiz cujo conteúdo combinado representa a estrutura do projeto no tempo de execução.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Carregando '{0}' do diretório raiz '{1}', local candidato '{2}'.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino '{1}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "A localidade deve estar no formato ou -. Por exemplo '{0}' ou '{1}'.", "Log_paths_used_during_the_moduleResolution_process_6706": "Caminhos de log usados durante o processo 'moduleResolution'.", "Longest_matching_prefix_for_0_is_1_6108": "O maior prefixo correspondente para '{0}' é '{1}'.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Fazer com que o keyof retorne apenas cadeias de caracteres, números ou símbolos. Opção herdada.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Tornar a chamada 'super()' a primeira instrução no construtor", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "O tipo de objeto mapeado implicitamente tem um tipo de modelo 'any'.", + "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", "Matched_0_condition_1_6403": "'{0}' correspondente à condição '{1}'.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Correspondido por padrão de inclusão padrão '**/*'", "Matched_by_include_pattern_0_in_1_1407": "Correspondência pelo padrão de inclusão '{0}' em '{1}'", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "O método '{0}' não pode ter uma implementação, pois está marcado como abstrato.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "O método '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "O método '{0}' da interface exportada tem ou está usando o nome privado '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "O método deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", "Method_not_implemented_95158": "Método não implementado.", "Modifiers_cannot_appear_here_1184": "Modificadores não podem aparecer aqui.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "O módulo '{0}' só pode ser importado por padrão usando o sinalizador '{1}'", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "O módulo '{0}' não tem membro exportado '{1}'. Você quis dizer 'importar {1} de {0}' em vez disso?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "O módulo '{0}' está oculto por uma declaração de local com o mesmo nome.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "O módulo '{0}' usa 'export =' e não pode ser usado com 'export *'.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "O módulo '{0}' foi resolvido como um módulo de ambiente declarado em '{1}', já que este arquivo não foi modificado.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "O módulo '{0}' foi resolvido como módulo de ambiente declarado localmente no arquivo '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "O módulo '{0}' foi resolvido para '{1}', mas '--allowArbitraryExtensions' não está definido.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "O módulo '{0}' foi resolvido para '{1}', mas '--jsx' não está configurado.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "O módulo '{0}' foi resolvido para '{1}', mas '--resolveJsonModule' não é usado.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Os nomes de declaração de módulo só podem usar ' ou “ cadeias de caracteres entre aspas.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Falha na resolução de módulo usando 'rootDirs'.", "Modules_6244": "Módulos", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover os modificadores de elemento de tupla rotulados para rótulos", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mova a expressão na exportação padrão para uma variável e adicione uma anotação de tipo a ela.", "Move_to_a_new_file_95049": "Mover para um novo arquivo", + "Move_to_file_95178": "Mover para Arquivo", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Não são permitidos vários separadores numéricos consecutivos.", "Multiple_constructor_implementations_are_not_allowed_2392": "Não são permitidas várias implementações de construtor.", "NEWLINE_6061": "NEWLINE", "Name_is_not_valid_95136": "Nome inválido", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Grupos de captura nomeados só estão disponíveis ao direcionar para 'ES2018' ou posterior.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Grupos de captura nomeados com o mesmo nome devem ser mutuamente exclusivos entre si.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "As propriedades com nome '{0}' dos tipos '{1}' e '{2}' não são idênticas.", "Namespace_0_has_no_exported_member_1_2694": "O namespace '{0}' não tem o membro exportado '{1}'.", "Namespace_must_be_given_a_name_1437": "O Namespace deve receber um nome.", "Namespace_name_cannot_be_0_2819": "O nome do Namespace não pode ser '{0}'.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces não são permitidos em arquivos de script global quando '{0}' está habilitado. Se esse arquivo não se destina a ser um script global, defina 'moduleDetection' como 'force' ou adicione uma instrução 'export {}' vazia.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Nem decoradores nem modificadores podem ser aplicados a parâmetros 'this'.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nenhum construtor base tem o número especificado de argumentos de tipo.", "No_constituent_of_type_0_is_callable_2755": "Nenhum membro do tipo '{0}' pode ser chamado.", "No_constituent_of_type_0_is_constructable_2759": "Nenhum membro do tipo '{0}' é construído.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Nenhuma sobrecarga corresponde a esta chamada.", "No_type_could_be_extracted_from_this_type_node_95134": "Não foi possível extrair nenhum tipo deste nó de tipo", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Não existe valor no escopo para a propriedade abreviada '{0}'. Declare um ou forneça um inicializador.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "A classe não abstrata '{0}' não implementa o membro abstrato herdado '{1}' da classe '{2}'.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "A classe não abstrata '{0}' não implementa o membro abstrato herdado {1} da classe '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2} e mais {3}.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "A expressão da classe não abstrata não implementa o membro abstrato herdado '{0}' da classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1} e mais {2}.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "As declarações não nulas só podem ser usadas em arquivos TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Os caminhos não relativos não são permitidos quando a 'baseUrl' não está definida. Você esqueceu um './' à esquerda?", "Non_simple_parameter_declared_here_1348": "Parâmetro não simples declarado aqui.", "Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.", "Not_all_constituents_of_type_0_are_callable_2756": "Nem todos os membros do tipo '{0}' podem ser chamados.", "Not_all_constituents_of_type_0_are_constructable_2760": "Nem todos os membros do tipo '{0}' são construídos.", + "Numbers_out_of_order_in_quantifier_1506": "Números fora de ordem no quantificador.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Os literais numéricos com valores absolutos iguais a 2^53 ou mais são muito grandes para serem representados precisamente como inteiros.", "Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.", "Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "O literal de objeto pode especificar apenas propriedades conhecidas e '{0}' não existe no tipo '{1}'.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "O literal de objeto pode especificar somente propriedades conhecidas, mas o '{0}' não existe no tipo '{1}'. Você queria ter escrito '{2}'?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "A propriedade '{0}' do literal de objeto implicitamente tem um tipo '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objetos que contêm propriedades abreviadas não podem ser inferidos com --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Os objetos que contêm atribuições de espalhamento não podem ser inferidos com --isolatedDeclarations.", "Octal_digit_expected_1178": "Dígito octal esperado.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Tipos de literais octais devem usar a sintaxe ES2015. Use a sintaxe '{0}'.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Literais octais não são permitidos em inicializador de membros de enumerações. Use a sintaxe '{0}'.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Literais octais não são permitidos no modo estrito.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Literais octais não estão disponíveis quando se tem como destino ECMAScript 5 e superiores. Use a sintaxe '{0}'.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Sequências de escape octais e referências inversas não são permitidas em uma classe de caracteres. Se isso foi destinado a uma sequência de escape, use a sintaxe '{0}' em vez disso.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sequências de escape octais não são permitidas. Use a sintaxe '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literais octais não são permitidos. Use a sintaxe '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Um valor de '{0}.{1}' é a cadeia de caracteres '{2}', e o outro é considerado um valor numérico desconhecido.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "É permitida apenas uma única declaração de variável em uma instrução 'for...in'.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "É permitida apenas uma única declaração de variável em uma instrução 'for...of'.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Apenas uma função void pode ser chamada com a palavra-chave 'new'.", "Only_ambient_modules_can_use_quoted_names_1035": "Somente os módulos de ambiente podem usar nomes entre aspas.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Há suporte somente aos módulos 'amd' e 'system' ao lado de --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Somente matrizes const podem ser inferidas com --isolatedDeclarations.", "Only_emit_d_ts_declaration_files_6014": "Emita somente arquivos de declaração '.d.ts'.", - "Only_named_exports_may_use_export_type_1383": "Somente as exportações nomeadas podem usar 'export type'.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Somente enumerações numéricas podem ter membros computados, mas esta expressão tem o tipo '{0}'. Se você não precisar de verificações de exaustão, considere o uso de um literal de objeto.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Gerar somente arquivos .d.ts e não arquivos JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Somente métodos protegidos e públicos da classe base são acessíveis pela palavra-chave 'super'.", "Operator_0_cannot_be_applied_to_type_1_2736": "O operador '{0}' não pode ser aplicado ao tipo '{1}'.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "O operador '{0}' não pode ser aplicado aos tipos '{1}' e '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Os operadores não devem ser mistos em uma classe de caracteres. Encapsule-o em uma classe aninhada.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Recusar um projeto de verificação de referência de multiprojeto ao editar.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "A opção '{0}={1}' foi removida. Remova-a da configuração.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "A opção '{0}={1}' foi preterida e deixará de funcionar no TypeScript {2}. Especifique compilerOption '\"ignoreDeprecations\": \"{3}\"' para silenciar esse erro.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'false' ou 'null' na linha de comando.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'null' na linha de comando.", + "Option_0_can_only_be_specified_on_command_line_6266": "A opção '{0}' só pode ser especificada na linha de comando.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "A opção '{0} só pode ser usada quando qualquer uma das opções '--inlineSourceMap' ou '--sourceMap' é fornecida.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "A opção '{0}' só pode ser usada quando 'moduleResolution' está definido como 'node16', 'nodenext' ou 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "A opção '{0}' só pode ser usada quando 'module' está definido como 'preserve' ou 'es2015' ou posterior.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "A opção '{0}' não pode ser especificada quando a opção 'jsx' é '{1}'.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "A opção '{0}' não pode ser especificada quando a opção 'target' é 'ES3'.", "Option_0_cannot_be_specified_with_option_1_5053": "A opção '{0}' não pode ser especificada com a opção '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "A opção '{0}' não pode ser especificada sem especificar a opção '{1}'.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "A opção '{0}' não pode ser especificada sem a especificação da opção '{1}' ou '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "A opção '{0}' foi removida. Remova-a da configuração.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "A opção '{0}' foi preterida e deixará de funcionar no TypeScript {1}. Especifique compilerOption '\"ignoreDeprecations\": \"{2}\"' para silenciar esse erro.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "A opção '{0}' é redundante e não pode ser especificada com a opção '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "A opção 'allowImportingTsExtensions' só pode ser usada quando 'noEmit' ou 'emitDeclarationOnly' está definido.", "Option_build_must_be_the_first_command_line_argument_6369": "A opção '--build' precisa ser o primeiro argumento da linha de comando.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "A opção '--incremental' só pode ser especificada usando tsconfig, emitindo para um arquivo único ou quando a opção '--tsBuildInfoFile' for especificada.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "A opção 'isolatedModules' só pode ser usada quando nenhuma opção de '--module' for fornecida ou a opção 'target' for 'ES2015' ou superior.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando 'isolatedModules' está habilitada.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "A opção 'preserveValueImports' só pode ser usada quando 'módulo' está definido como 'es2015' ou posterior.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "A opção 'moduleResolution' deve ser definida como '{0}' (ou deixada não especificada) quando a opção 'module' está definida como '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "A opção 'module' deve ser definida como '{0}' quando a opção 'moduleResolution' está definida como '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando '{0}' está habilitada.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "A opção 'project' não pode ser mesclada com arquivos de origem em uma linha de comando.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "A opção '--resolveJsonModule' só pode ser especificada quando a geração de código de módulo é 'commonjs', 'amd', 'es2015' ou 'esNext'.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "A opção '--resolveJsonModule' não pode ser especificada sem a estratégia de resolução de módulo de 'nó'.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "A opção '--resolveJsonModule' não pode ser especificada quando 'moduleResolution' está definido como 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "A opção '--resolveJsonModule' não pode ser especificada quando 'module' está definido como 'none', 'system' ou 'umd'.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "A opção 'tsBuildInfoFile' não pode ser especificada sem especificar a opção 'incremental' ou 'composite' ou se não estiver executando 'tsc -b'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "A opção 'texttimModuleSyntax' não pode ser usada quando 'module' está definido como 'UMD', 'AMD' ou 'System'.", "Options_0_and_1_cannot_be_combined_6370": "As opções '{0}' e '{1}' não podem ser combinadas.", "Options_Colon_6027": "Opções:", "Output_Formatting_6256": "Formatação da Saída", "Output_compiler_performance_information_after_building_6615": "Gerar informações de desempenho do compilador após a criação.", "Output_directory_for_generated_declaration_files_6166": "Diretório de saída para os arquivos de declaração gerados.", - "Output_file_0_from_project_1_does_not_exist_6309": "O arquivo de saída '{0}' do projeto '{1}' não existe", "Output_file_0_has_not_been_built_from_source_file_1_6305": "O arquivo de saída '{0}' não foi compilado do arquivo de origem '{1}'.", "Output_from_referenced_project_0_included_because_1_specified_1411": "Saída do projeto referenciado '{0}' incluída porque '{1}' está especificado", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Saída do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Declaração de parâmetro esperada.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "O parâmetro tem um nome, mas não um tipo. Você quis dizer '{0}: {1}'?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modificadores de parâmetro só podem ser usados em arquivos TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "O parâmetro deve ter uma anotação de tipo explícito com --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimir os nomes dos arquivos emitidos após uma compilação.", "Print_this_message_6017": "Imprima esta mensagem.", "Private_accessor_was_defined_without_a_getter_2806": "O acessador privado foi definido sem um getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "O campo particular '{0}' deve ser declarado em uma classe delimitadora.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identificadores privados não são permitidos em declarações de variáveis.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identificadores privados não são permitidos fora dos corpos de classe.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identificadores privados são permitidos apenas em corpos de classe e só podem ser usados como parte de uma declaração de membro de classe, acesso de propriedade ou no lado esquerdo de uma expressão 'em'", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identificadores privados só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Não é possível usar identificadores privados como parâmetros.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "O membro privado ou protegido '{0}' não pode ser acessado em um parâmetro de tipo.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "O projeto '{0}' não pode ser compilado porque sua dependência '{1}' tem erros", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "O projeto '{0}' não pode ser criado porque sua dependência '{1}' não foi criada", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "O projeto '{0}' está sendo reconstruído forçadamente", + "Project_0_is_out_of_date_because_1_6420": "O projeto '{0}' está desatualizada porque {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "O projeto '{0}' está desatualizada porque o arquivo buildinfo '{1}' indica que o arquivo '{2}' era o arquivo raiz da compilação, mas não é mais.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que o programa precisa relatar erros.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que algumas das alterações não foram emitidas", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que há alteração em compilerOptions", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "O projeto '{0}' está desatualizado porque sua dependência '{1}' está desatualizada", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "O projeto '{0}' está desatualizado porque a saída '{1}' é mais antiga que a entrada '{2}'", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "O projeto '{0}' está desatualizado porque o arquivo de saída '{1}' não existe", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "O projeto '{0}' está desatualizado porque a saída foi gerada com a versão '{1}' que difere da versão atual '{2}'", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "O projeto '{0}' está desatualizado porque a saída de sua dependência '{1}' foi alterada", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "O projeto '{0}' está desatualizado porque ocorreu um erro ao ler o arquivo '{1}'", "Project_0_is_up_to_date_6361": "O projeto '{0}' está atualizado", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "O projeto '{0}' está atualizado porque a entrada mais recente '{1}' é mais antiga que a saída '{2}'", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "A propriedade '{0}' é usada antes da inicialização.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "A propriedade pode não existir '{0}' no tipo '{1}'. Você quis dizer '{2}'?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "A propriedade \"{0}\" do atributo de espalhamento JSX não pode ser atribuída à propriedade de destino.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "A propriedade '{0}' da expressão de classe exportada não pode ser privada nem protegida.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "A propriedade '{0}' do tipo de classe anônima exportada pode não ser privada ou protegida.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "A propriedade '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "A propriedade '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "A propriedade '{0}' do tipo '{1}' não pode ser atribuída ao '{2}' tipo de índice '{3}'.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "A propriedade '{0}' substituirá a propriedade base em '{1}'. Se isso for intencional, adicione um inicializador. Caso contrário, adicione um modificador 'declare' ou remova a declaração redundante.", "Property_assignment_expected_1136": "Atribuição de propriedade esperada.", "Property_destructuring_pattern_expected_1180": "Padrão de desestruturação de propriedade esperado.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "A propriedade deve ter uma anotação de tipo explícita com --isolatedDeclarations.", "Property_or_signature_expected_1131": "Propriedade ou assinatura esperada.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "O valor da propriedade pode ser somente um literal de cadeia, um literal numérico, 'true', 'false', 'null', literal de objeto ou literal de matriz.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Fornecer suporte completo para os iteráveis em 'for-of', espalhamento e desestruturação ao direcionar 'ES5' ou 'ES3'.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornecer suporte completo para os iteráveis em 'for-of', espalhamento e desestruturação ao direcionar 'ES5'.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "O método público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Gerar um erro quando um parâmetro de função não for lido.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Gerar erro em expressões e declarações com um tipo 'any' implícito.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Gerar erro em expressões 'this' com um tipo 'any' implícito.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Exportar novamente um tipo quando o sinalizador '--isolatedModules' é fornecido requer o uso de 'export type'.", + "Range_out_of_order_in_character_class_1517": "Intervalo fora de ordem na classe de caracteres.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Exportar novamente um tipo quando '{0}' está habilitado requer o uso de 'tipo de exportação'.", + "React_components_cannot_include_JSX_namespace_names_2639": "Os componentes react não podem incluir nomes de namespace JSX", "Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzir o número de projetos carregados automaticamente pelo TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "O projeto referenciado '{0}' pode não desabilitar a emissão.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.", "Referenced_via_0_from_file_1_1400": "Referenciado via '{0}' do arquivo '{1}'", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do EcmaScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Considere adicionar uma extensão ao caminho de importação.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do EcmaScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Você quis dizer '{0}'?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Considere adicionar uma extensão ao caminho de importação.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Você quis dizer '{0}'?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Remova uma lista de diretórios do processo de inspeção.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Remover uma lista de arquivos do processamento do modo de inspeção.", "Remove_all_unnecessary_override_modifiers_95163": "Remover todos os modificadores 'override' desnecessários", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Relatar erros em arquivos .js.", "Report_errors_on_unused_locals_6134": "Relatar erros nos locais não utilizados.", "Report_errors_on_unused_parameters_6135": "Relatar erros nos parâmetros não utilizados.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exigir anotação suficiente em exportações para que outras ferramentas possam gerar arquivos de declaração trivialmente.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Os parâmetros de tipo necessários podem não seguir os parâmetros de tipo opcionais.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "A resolução para o módulo '{0}' foi encontrada no cache do local '{1}'.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "A resolução para a diretiva de referência de tipo '{0}' foi encontrada no cache a partir do local '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Falha na resolução de nome não relativo; tentando com recursos modernos de resolução de Nó desabilitados para ver se a biblioteca npm precisa de atualização de configuração.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Falha na resolução de nome não relativo; tentando com '--moduleResolution bundler' para ver se o projeto pode precisar de atualização de configuração.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolva 'keyof' somente para nomes de propriedades com valores de cadeia de caracteres (sem números nem símbolos).", + "Resolved_under_condition_0_6414": "Resolvido sob a condição '{0}'.", "Resolving_in_0_mode_with_conditions_1_6402": "Resolvendo no modo {0} com condições {1}.", "Resolving_module_0_from_1_6086": "======== Resolvendo módulo '{0}' de '{1}'. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolvendo nome de módulo '{0}' relativo à URL base '{1}' - '{2}'.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz não configurado. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz '{1}'. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz não configurado. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolvendo diretiva de referência de tipo para o programa que especifica typeRoots personalizado, ignorando a pesquisa na pasta 'node_modules'.", "Resolving_with_primary_search_path_0_6121": "Resolvendo com caminho de pesquisa primário '{0}'.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "O parâmetro rest '{0}' implicitamente tem um tipo 'any[]'.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "O parâmetro REST '{0}' implicitamente tem um tipo 'any[]', mas um tipo melhor pode ser inferido do uso.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Reutilizando a resolução do tipo diretriz de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com ID do Pacote '{3}'.", "Rewrite_all_as_indexed_access_types_95034": "Reescrever tudo como tipos de acesso indexados", "Rewrite_as_the_indexed_access_type_0_90026": "Reescrever como o tipo de acesso indexado '{0}'", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Operando direito de ?? está inacessível porque o operando esquerdo nunca é nulo.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Diretório raiz não pode ser determinado, ignorando caminhos de pesquisa primários.", "Root_file_specified_for_compilation_1427": "Arquivo raiz especificado para compilação", "STRATEGY_6039": "ESTRATÉGIA", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salvar arquivos .tsbuildinfo para permitir a compilação incremental de projetos.", "Saw_non_matching_condition_0_6405": "Viu condição de não correspondência '{0}'.", "Scoped_package_detected_looking_in_0_6182": "Pacote com escopo detectado, procurando no '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões de fallback: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões preferenciais: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "A seleção não é uma instrução ou instruções válidas", "Selection_is_not_a_valid_type_node_95133": "A seleção não é um nó de tipo válido", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Definir a versão do idioma do JavaScript para o JavaScript emitido e incluir as declarações de biblioteca compatíveis.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Mostras as informações detalhadas de diagnóstico.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar o que seria compilado (ou excluído, se especificado com '--clean')", "Signature_0_must_be_a_type_predicate_1224": "A assinatura '{0}' deve ser um predicado de tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "As declarações de assinatura só podem ser usadas em arquivos TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorar a criação de projetos downstream em caso de erro no projeto upstream.", "Skip_type_checking_all_d_ts_files_6693": "Ignorar verificação de tipo de todos os arquivos .d.ts.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorar verificação de tipo de arquivos .d.ts que estão incluídos com TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Ignorar a verificação de tipo dos arquivos de declaração.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorando o build do projeto '{0}' porque a dependência '{1}' tem erros", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorando o build do projeto '{0}' porque a dependência '{1}' não foi criada", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Ignorando o módulo '{0}' que se parece com um URI absoluto, tipos de arquivo de destino: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Origem do projeto referenciado '{0}' incluída porque '{1}' está especificado", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Origem do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", "Source_has_0_element_s_but_target_allows_only_1_2619": "A origem tem {0} elementos, mas o destino permite somente {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique como funciona o modo de inspeção TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique os arquivos de biblioteca a serem incluídos na compilação.", "Specify_module_code_generation_6016": "Especifique a geração do código do módulo.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Especifique a estratégia de resolução de módulo: 'node' (Node.js) ou 'classic' (TypeScript pré-1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especificar o especificador de módulo usado para importar as funções de fábrica JSX ao usar 'jsx: react-jsx*'.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especificar várias pastas que agem como './node_modules/@types '.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especificar uma ou mais referências de módulo ou nó para os arquivos de configuração base dos quais as configurações são herdadas.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Membros estáticos não podem fazer referência a parâmetros de tipo de classe.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Conflitos de propriedade estática '{0}' com propriedade interna 'Function.{0}' da função de construtor '{1}'.", "String_literal_expected_1141": "Literal de cadeia de caracteres esperado.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Não há suporte para nomes de importação e exportação de literal de cadeia de caracteres quando o sinalizador '--module' está definido como 'es2015' ou 'es2020'.", "String_literal_with_double_quotes_expected_1327": "Literal de cadeia com aspas duplas é esperado.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Estilizar erros e mensagens usando cor e contexto (experimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Sinalizadores de subpadrão devem estar presentes quando há um sinal de subtração.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Declarações de propriedade subsequentes devem ter o mesmo tipo. A propriedade '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Declarações de variável subsequentes devem ter o mesmo tipo. A variável '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "A substituição '{0}' para o padrão '{1}' tem um tipo incorreto, 'string' esperada, obteve '{2}'.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Expressões de modelo marcado não são permitidas em uma cadeia opcional.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "O destino permite apenas {0} elementos, mas a origem pode ter mais.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "O destino exige {0} elementos, mas a origem pode ter menos.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "A assinatura de destino fornece poucos argumentos. Esperava {0} ou mais, mas obteve {1}.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "O modificador '{0}' só pode ser usado em arquivos TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "O operador '{0}' não pode ser aplicado ao tipo 'symbol'.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "O operador '{0}' não é permitido para tipos boolianos. Considere usar '{1}'.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "A propriedade '{0}' de um iterador assíncrono deve ser um método.", "The_0_property_of_an_iterator_must_be_a_method_2767": "A propriedade '{0}' de um iterador deve ser um método.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "O tipo 'Objeto' pode ser atribuído para muito poucos outros tipos. Você desejava usar o tipo 'qualquer' ao invés disso?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES3 e ES5. Considere usar uma expressão de função padrão.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES3 e ES5. Considere usar uma função ou um método padrão.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "O sinalizador Unicode (u) e o sinalizador Conjuntos Unicode (v) não podem ser definidos simultaneamente.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES5. Considere usar uma expressão de função padrão.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES5. Considere usar uma função ou um método padrão.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "O corpo de uma instrução 'if' não pode ser uma instrução vazia.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "A chamada teria sido bem-sucedida nesta implementação, mas as assinaturas de implementação de sobrecargas não estão visíveis externamente.", "The_character_set_of_the_input_files_6163": "O conjunto de caracteres dos arquivos de entrada.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "O tipo inferido '{0}' faz referência a um tipo com uma estrutura cíclica que não pode ser serializada trivialmente. Uma anotação de tipo é necessária.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "O tipo inferido de '{0}' faz referência a um tipo '{1}' inacessível. Uma anotação de tipo é necessária.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "O tipo inferido deste nó excede o tamanho máximo que o compilador serializará. Uma anotação de tipo explícita é necessária.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "O inicializador de uma declaração 'using' deve ser um objeto com um método '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "O inicializador de uma declaração 'await using' deve ser um objeto com um método '[Symbol.asyncDispose]()' ou '[Symbol.dispose]5D;()' ou ser 'null' ou 'undefined'.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' existe em vários constituintes e é privada em alguns.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' tem tipos conflitantes em alguns constituintes.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "A palavra-chave 'intrinsic' só pode ser usada para declarar tipos intrínsecos fornecidos pelo compilador.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "A última sobrecarga gerou o seguinte erro.", "The_last_overload_is_declared_here_2771": "A última sobrecarga é declarada aqui.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "O lado esquerdo de uma instrução 'for...in' não pode ser um padrão de desestruturação.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'await using'.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "O lado esquerdo de uma instrução 'for...in' não pode usar uma anotação de tipo.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "O lado esquerdo de uma instrução 'for...in' pode não ser um acesso opcional de propriedade.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "O lado esquerdo de uma instrução 'for...in' deve ser uma variável ou um acesso à propriedade.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "O lado esquerdo de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "O lado esquerdo de uma expressão de atribuição pode não ser um acesso opcional de propriedade.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "O lado esquerdo de uma expressão de atribuição deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "O lado esquerdo de uma expressão 'instanceof' deve ser atribuível ao primeiro argumento do método '[Symbol.hasInstance]' do lado direito.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "O lado esquerdo de uma expressão 'instanceof' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "O local usado ao exibir mensagens ao usuário (por exemplo, 'en-us')", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "A profundidade máxima de dependência a ser pesquisada em arquivos node_modules e de carregamento de JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada de mapa de exportação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada do mapa de importação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "A propriedade '{0}' não pode ser acessada no tipo '{1}' dentro dessa classe porque ela é sombreada por outro identificador privado com a mesma grafia.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "O tipo de retorno de um acessador 'get' precisa ser atribuível ao respectivo tipo de acessador 'set'", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "O tipo de retorno de uma função de decorador de parâmetro deve ser 'void' ou 'any'.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "O tipo de retorno de uma função de decorador de propriedade deve ser 'void' ou 'any'.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "O tipo de retorno de uma função assíncrona deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "O tipo de retorno de uma função assíncrona ou método deve ser o tipo Promessa global.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "O tipo de retorno de uma função assíncrona ou método precisa ser o tipo Promise global. Você quis escrever 'Promise<{0}>'?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "O lado direito de uma instrução 'for...in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo, mas aqui ele tem o tipo '{0}'.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "O lado direito de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any' ou de um tipo que pode ser atribuído ao tipo de interface 'Function'.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any', uma classe, uma função ou outro tipo atribuível ao tipo de interface 'Function' ou um tipo de objeto com um método 'Symbol.hasInstance'.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "O lado direito de uma expressão 'instanceof' não deve ser uma expressão de instanciação.", "The_root_value_of_a_0_file_must_be_an_object_5092": "O valor raiz de um arquivo '{0}' precisa ser um objeto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera pelo menos {0}.", "The_shadowing_declaration_of_0_is_defined_here_18017": "A declaração de sombreamento de '{0}' é definida aqui", "The_signature_0_of_1_is_deprecated_6387": "A assinatura '{0}' de '{1}' foi preterida.", "The_specified_path_does_not_exist_Colon_0_5058": "O caminho especificado não existe: '{0}'.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "O modificador “type” não pode ser usado em uma exportação nomeada quando “export type” for usado em sua instrução de exportar.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "O modificador “type” não pode ser usado em uma importação nomeada quando “import type” for usado em sua instrução de importar.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "O tipo de uma declaração de função deve corresponder à assinatura da função.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "O tipo dessa expressão não pode ser nomeado sem uma declaração 'modo de resolução', que é um recurso instável. Use o TypeScript noturno para silenciar esse erro. Tente atualizar com 'npm install -D typescript@next'.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "O tipo deste nó não pode ser serializado porque sua propriedade '{0}' não pode ser serializada.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "O tipo retornado pelo método '{0}()' de um iterador assíncrono deve ser uma promessa para um tipo com a propriedade 'value'.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "O tipo retornado pelo método '{0}()' de um iterador deve ter uma propriedade 'value'.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "A declaração de variável de uma instrução 'for...in' não pode ter um inicializador.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "A declaração de variável de uma instrução 'for...of' não pode ter um inicializador.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "A instrução \"with\" não tem suporte. Todos os símbolos em um bloco \"with\" terão o tipo \"any\".", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido na configuração 'moduleResolution' atual. Considere atualizar para 'node16', 'nodenext' ou 'bundler'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido ao respeitar as \"exportações\" do package.json. A biblioteca '{1}' pode precisar atualizar o package.json ou as digitações.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Não há nenhum grupo de captura chamado '{0}' nesta expressão regular.", + "There_is_nothing_available_for_repetition_1507": "Não há nada disponível para repetição.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "A propriedade '{0}' da marca desse JSX espera um único filho do tipo '{1}', mas vários filhos foram fornecidos.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "A propriedade '{0}' da marca desse JSX espera o tipo '{1}' que requer vários filhos, mas somente um único filho foi fornecido.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Essa referência inversa refere-se a um grupo que não existe. Não há grupos de captura nessa expressão regular.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Essa referência inversa refere-se a um grupo que não existe. Há apenas {0} grupos de captura nesta expressão regular.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Essa expressão binária nunca é nula. Está faltando parênteses?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este caractere não pode ser escapado em uma expressão regular.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparação parece não ser intencional porque os tipos '{0}' e '{1}' não têm sobreposição.", "This_condition_will_always_return_0_2845": "Esta condição sempre retornará '{0}'.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Essa condição sempre retornará '{0}', pois o JavaScript compara objetos por referência, não por valor.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condição sempre retornará verdadeiro, já que este '{0}' está sempre definido.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condição sempre retornará verdadeira, uma vez que esta função foi sempre definida. Você pretendia chamá-la em vez disso?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta função de construtor pode ser convertida em uma declaração de classe.", + "This_expression_is_always_nullish_2871": "Essa expressão sempre é nula.", "This_expression_is_not_callable_2349": "Essa expressão não pode ser chamada.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Esta expressão não pode ser chamada porque é um acessador 'get'. Você quis usá-la sem '()'?", "This_expression_is_not_constructable_2351": "Essa expressão não pode ser construída.", "This_file_already_has_a_default_export_95130": "Este arquivo já tem uma exportação padrão", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Esta importação nunca é usada como um valor e precisa usar um 'tipo de importação' porque 'importsNotUsedAsValues' está definido como 'erro'.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta é a declaração que está sendo aumentada. Considere mover a declaração em aumento para o mesmo arquivo.", + "This_kind_of_expression_is_always_falsy_2873": "Esse tipo de expressão é sempre inválido.", + "This_kind_of_expression_is_always_truthy_2872": "Esse tipo de expressão é sempre verdadeiro.", "This_may_be_converted_to_an_async_function_80006": "Isso pode ser convertido em uma função assíncrona.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque ele não está declarado na classe base '{0}'.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Esse membro não pode ter um comentário JSDoc com uma marca 'override' porque ele não está declarado na classe base '{0}'. Você quis dizer '{1}'?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este membro precisa ter um modificador 'override' porque substitui um método abstrato que é declarado na classe base '{0}'.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Esse módulo só pode ser referenciado com importações/exportações de ECMAScript ligando o sinalizador '{0}' e referenciando sua exportação padrão.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo é declarado com 'export =', e só pode ser usado com uma importação padrão ao usar o sinalizador '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Essa operação pode ser simplificada. Essa mudança é idêntica a `{0} {1} {2}`.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Essa sobrecarga retorna implicitamente o tipo '{0}' porque não tem uma anotação de tipo de retorno.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta assinatura de sobrecarga não é compatível com sua assinatura de implementação.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parâmetro não é permitido com a diretiva 'use strict'.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Essa propriedade de parâmetro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propriedade de parâmetro deve ter uma modificação de 'substituição' porque substitui um membro na classe base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esse sinalizador de expressão regular não pode ser alternado em um subpadrão.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esse sinalizador de expressão regular só está disponível ao direcionar para '{0}' ou posterior.", "This_spread_always_overwrites_this_property_2785": "Essa difusão sempre substitui essa propriedade.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Adicione uma vírgula final ou restrição explícita.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Em vez disso, use uma expressão `as`.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou adicione o campo `\"type\": \"module\"` para '{1}'.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou crie um arquivo package.json local com `{ \"type\": \"module\" }`.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para converter este arquivo em um módulo ECMAScript, crie um arquivo package.json local com `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "As expressões 'await' de nível superior só são permitidas quando a opção 'module' está definida como 'es2022', 'esnext', 'system', 'node16' ou 'nodenext' e a opção 'target' está definida como ' es2017' ou superior.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Expressões 'await' de nível superior só são permitidas quando a opção 'module' estiver definida como 'es2022', 'esnext', 'system', 'node16', 'nodenext' ou 'preserve', e a opção 'target' estiver definida como 'es2017' ou superior.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "As instruções 'await' de nível superior só são permitidas quando a opção 'module' está definida como 'es2022', 'esnext', 'system', 'node16' ou 'nodenext' e a opção 'target' está definida como ' es2017' ou superior.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "As declarações de nível superior em arquivos .d.ts devem começar com um modificador 'declare' ou 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Loops 'for await' de nível superior só são permitidos quando a opção 'module' está definida como 'es2022', 'esnext', 'system', 'node16' ou 'nodenext', e a opção 'target' está definida como 'es2017' ou superior.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Loops 'for await' de nível superior só são permitidos quando a opção 'module' estiver definida como 'es2022', 'esnext', 'system', 'node16', 'nodenext' ou 'preserve', e a opção 'target' estiver definida como 'es2017' ou superior.", "Trailing_comma_not_allowed_1009": "Vírgula à direita não permitida.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transcompilar cada arquivo como um módulo separado (do mesmo modo que 'ts.transpileModule').", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Tente `npm i --save-dev @types/{1}` caso exista ou adicione um novo arquivo de declaração (.d.ts) contendo `declare module '{0}';`", "Trying_other_entries_in_rootDirs_6110": "Tentando outras entradas em 'rootDirs'.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Tentando substituição '{0}', local de módulo candidato: '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Todos os membros de tupla precisam ter nomes ou não ter nomes.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "O tipo de tupla '{0}' de comprimento '{1}' não tem nenhum elemento no índice '{2}'.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Os argumentos de tipo de tupla se referenciam circularmente.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "O tipo '{0}' só pode ser iterado usando o sinalizador '--downlevelIteration' ou um '--target' igual a 'es2015' ou superior.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "O tipo '{0}' não tem assinatura de índice correspondente para o tipo '{1}'.", "Type_0_has_no_properties_in_common_with_type_1_2559": "O tipo '{0}' não tem propriedades em comum com o tipo '{1}'.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "O tipo “{0}” não tem assinaturas para as quais a lista de argumentos de tipo é aplicável.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "O tipo '{0}' é genérico e só pode ser indexado para leitura.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2} e mais {3}.", "Type_0_is_not_a_constructor_function_type_2507": "O tipo '{0}' não é um tipo de função de construtor.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "O tipo '{0}' não é um tipo de retorno de função assíncrona válido no ES5/ES3, pois não se refere ao valor construtor compatível com a Promessa.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "O tipo '{0}' não é um tipo de retorno de função assíncrona válido no ES5, pois não se refere ao valor construtor compatível com a Promessa.", "Type_0_is_not_an_array_type_2461": "O tipo '{0}' não é um tipo de matriz.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "O tipo '{0}' não é um tipo de matriz ou de cadeia de caracteres.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "O tipo '{0}' não é um tipo de matriz de um tipo de cadeia ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "O tipo '' não pode ser atribuído ao tipo {0} '{1}'. Você quis dizer '{2}'?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "O tipo '{0}' não é atribuível ao tipo '{1}'. Dois tipos diferentes com esse nome existem, mas eles não estão relacionados.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Tipo '{0}' não é atribuível ao tipo '{1}' como implícito pela anotação de variância.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "O tipo '{0}' não é atribuível ao tipo '{1}', conforme necessário para valores de membro de enumeração computados.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' ao tipo do destino.", "Type_0_is_not_comparable_to_type_1_2678": "O tipo '{0}' não pode ser comparável ao tipo '{1}'.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Argumento de tipo esperado.", "Type_argument_list_cannot_be_empty_1099": "A lista de argumentos de tipo não pode estar vazia.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Os argumentos de tipo só podem ser usados em arquivos TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "Argumentos de tipo não podem ser usados aqui.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Os argumentos de tipo '{0}' se referenciam circularmente.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "As expressões de declaração de tipo só podem ser usadas em arquivos TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "O tipo na posição {0} na fonte não é compatível com o tipo na posição {1} no destino.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "O tipo nas posições {0} até {1} na fonte não é compatível com o tipo na posição {2} no destino.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "O tipo que contém o nome particular '{0}' não pode ser usado com --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Arquivos de declaração de tipo a serem incluídos em compilação.", "Type_expected_1110": "Tipo esperado.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "As asserções de importação de tipo devem ter exatamente uma chave - `resolution-mode` - com valor `import` ou` require`.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "As asserções de importação de tipo devem ter exatamente uma chave - 'resolution-mode' - com valor 'import' ou 'require'.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "A instanciação de tipo é muito profunda e possivelmente infinita.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "O tipo é referenciado diretamente ou indiretamente em um retorno de chamada de preenchimento do seu próprio método 'then'.", "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}'", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Não é possível resolver a assinatura do decorador de método quando ele é chamado como uma expressão.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Não é possível resolver a assinatura do decorador de parâmetro quando ele é chamado como uma expressão.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Não é possível resolver a assinatura do decorador de propriedade quando ele é chamado como uma expressão.", + "Undetermined_character_escape_1513": "Escape de caractere indeterminado.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' inesperado. Você quer escapar com barra invertida?", "Unexpected_end_of_text_1126": "Fim inesperado do texto.", "Unexpected_keyword_or_identifier_1434": "Palavra-chave ou identificador inesperado.", "Unexpected_token_1012": "Token inesperado.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. Você quis dizer '{'>'}' ou '>'?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. Você quis dizer '{'}'}' ou '}'?", "Unexpected_token_expected_1179": "Token inesperado. '{' esperado.", + "Unicode_escape_sequence_cannot_appear_here_17021": "A sequência de escape Unicode não pode aparecer aqui.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "As sequências de escape Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "As expressões de valor da propriedade Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unknown_Unicode_property_name_1524": "Nome da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_name_or_value_1529": "Nome ou valor da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_value_1526": "Valor da propriedade Unicode desconhecido.", "Unknown_build_option_0_5072": "Opção de build '{0}' desconhecida.", "Unknown_build_option_0_Did_you_mean_1_5077": "Opção de build '{0}' desconhecida. Você quis dizer '{1}'?", "Unknown_compiler_option_0_5023": "Opção do compilador '{0}' desconhecida.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opção de compilador '{0}' desconhecida. Você quis dizer '{1}'?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Palavra-chave ou identificador desconhecido. Você quis dizer '{0}'?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opção desconhecida 'excludes'. Você quis dizer 'exclude'?", + "Unknown_regular_expression_flag_1499": "Sinalizador de expressão regular desconhecido.", "Unknown_type_acquisition_option_0_17010": "Opção de aquisição de tipo desconhecido '{0}'.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opção de aquisição de tipo '{0}' desconhecida. Você quis dizer '{1}'?", "Unknown_watch_option_0_5078": "Opção de observador '{0}' desconhecida.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Rótulo não utilizado.", "Unused_ts_expect_error_directive_2578": "Diretiva '@ts-expect-error' não usada.", "Update_import_from_0_90058": "Atualizar importação de \"{0}\"", - "Updating_output_of_project_0_6373": "Atualizando a saída do projeto '{0}'...", + "Update_modifiers_of_0_90061": "Atualizar modificadores de '{0}'", "Updating_output_timestamps_of_project_0_6359": "Atualizando os carimbos de data/hora de saída do projeto '{0}'...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Atualizando os carimbos de data/hora de saída inalterados do projeto '{0}'...", "Use_0_95174": "Use `{0}`.", + "Use_0_instead_5106": "Use '{0}' em vez disso.", "Use_Number_isNaN_in_all_conditions_95175": "Use `Number.isNaN` em todas as condições.", "Use_element_access_for_0_95145": "Usar o acesso de elemento para '{0}'", "Use_element_access_for_all_undeclared_properties_95146": "Usar o acesso de elemento para todas as propriedades não declaradas.", + "Use_import_type_95180": "Usar 'tipo de importação'", "Use_synthetic_default_member_95016": "Use o membro sintético 'padrão'.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use o campo 'exports' do package.json ao resolver importações de pacote.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use o campo 'imports' no package.json ao resolver importações.", + "Use_type_0_95181": "Usar 'type {0}'", "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subcaminho '{1}' com destino '{2}'.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Há suporte para o uso de uma cadeia de caracteres em uma instrução 'for...of' somente no ECMAScript 5 e superior.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Usar --build, -b fará com que o tsc se comporte mais como um orquestrador de build do que como um compilador. Isso é usado para acionar a construção de projetos compostos sobre os quais você pode aprender mais em {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Declaração de variável esperada.", "Variable_declaration_list_cannot_be_empty_1123": "A lista de declaração de variável não pode estar vazia.", "Variable_declaration_not_allowed_at_this_location_1440": "A declaração de variável não é permitida neste local.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "A variável deve ter uma anotação de tipo explícita com --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variáveis com várias declarações não podem ser embutidas.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "O elemento variádico na posição {0} na fonte não corresponde ao elemento na posição {1} no destino.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Só há suporte para anotações de variação em aliases do tipo para objetos, funções, construtores e tipos mapeados.", "Version_0_6029": "Versão {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Quando a fizer a verificação de tipo, considere 'null' e 'undefined'.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Se é necessário manter a saída de console desatualizada no modo de inspeção, em vez de limpar a tela.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos os caracteres inválidos em um contêiner de expressão", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Encapsular todas as expressões de decorador inválidas entre parênteses", "Wrap_all_object_literal_with_parentheses_95116": "Colocar todo o literal de objeto entre parênteses", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Empacotar todos os JSXs sem pai no fragmento de JSX", "Wrap_in_JSX_fragment_95120": "Encapsular o fragmento de JSX", + "Wrap_in_parentheses_95194": "Encapsular entre parênteses", "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular caractere inválido em um contêiner de expressão", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Colocar entre parênteses o corpo a seguir, que deve ser um literal de objeto", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Você pode aprender sobre todas as opções do compilador em {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "As assinaturas de índice '{0}' e '{1}' são incompatíveis.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "As operações '{0}' e '{1}' não podem ser combinadas sem parênteses.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' são especificados duas vezes. O atributo chamado '{0}' será substituído.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' no final de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' no início de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' só pode ser importado ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' só pode ser importado usando uma importação padrão.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' só pode ser importado usando uma chamada 'require' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' só pode ser importado usando uma chamada 'require' ou usando uma importação padrão.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou uma importação padrão.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "'{0}' não pode ser compilado em '--isolatedModules' porque é considerado um arquivo de script global. Adicione uma instrução de importação, de exportação ou de 'export {}' vazia para transformá-lo em módulo.", "_0_cannot_be_used_as_a_JSX_component_2786": "O módulo '{0}' não pode ser usado como um componente JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' não pode ser usado como um valor porque foi exportado usando 'tipo de exportação'.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' não pode ser usado como um valor porque foi importado usando 'tipo de importação'.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Os componentes '{0}' não aceitam texto como elementos filho. O texto em JSX tem o tipo 'cadeia de caracteres', mas o tipo esperado de '{1}' é '{2}'.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Uma instância de '{0}' poderia ser criada com um tipo arbitrário que poderia não estar relacionado a '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Declarações '{0}' só podem ser declaradas dentro de um bloco.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "As declarações '{0}' só podem ser usadas em arquivos TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Declarações '{0}' podem não ter padrões de associação.", + "_0_declarations_must_be_initialized_1155": "Declarações '{0}' devem ser inicializadas.", "_0_expected_1005": "'{0}' esperado.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' tem um tipo de cadeia de caracteres, mas deve ter sintaxe de cadeia de caracteres reconhecível sintaticamente quando 'isolatedModules' está habilitado.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' não tem nenhum membro exportado chamado '{1}'. Você quis dizer '{2}'?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' tem implicitamente um tipo de retorno '{1}', mas um tipo melhor pode ser inferido do uso.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Implicitamente, '{0}' tem um retorno tipo 'any' porque ele não tem uma anotação de tipo de retorno e é referenciado direta ou indiretamente em uma das suas expressões de retorno.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' tipo de índice '{1}' não pode ser atribuído a '{2}' tipo de índice '{3}'.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' é um primitivo, mas '{1}' é um objeto de wrapper. Prefira usar '{0}' quando possível.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' é um tipo e não pode ser importado em arquivos JavaScript. Use '{1}' em uma anotação de tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "'{0}' é um tipo e deve ser importado usando uma importação somente de tipo quando 'preserveValueImports' e 'isolatedModules' estiverem habilitados.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' é um tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' é uma renomeação não usada de '{1}'. Você pretendia usá-lo como uma anotação de tipo?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' é atribuível à restrição do tipo '{1}', mas é possível criar uma instância de '{1}' com um subtipo diferente de restrição '{2}'.", "_0_is_automatically_exported_here_18044": "'{0}' é exportado automaticamente aqui.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "A lista '{0}' não pode estar vazia.", "_0_modifier_already_seen_1030": "O modificador '{0}' já foi visto.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "O modificador '{0}' pode aparecer apenas em um parâmetro de tipo de uma classe, interface ou alias de tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "O modificador '{0}' só pode aparecer em um parâmetro de tipo de uma função, método ou classe", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "O modificador '{0}' não pode aparecer em uma declaração de construtor.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "O modificador '{0}' não pode aparecer em um módulo ou elemento de namespace.", "_0_modifier_cannot_appear_on_a_parameter_1090": "O modificador '{0}' não pode aparecer em um parâmetro.", "_0_modifier_cannot_appear_on_a_type_member_1070": "O modificador '{0}' não pode aparecer em um membro de tipo.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "O modificador '{0}' não pode aparecer em um parâmetro de tipo", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "O modificador '{0}' não pode aparecer em uma declaração 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "O modificador '{0}' não pode aparecer em uma declaração 'await using'.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "O modificador '{0}' não pode aparecer em uma assinatura de índice.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "O modificador '{0}' não pode aparecer em elementos de classe deste tipo.", "_0_modifier_cannot_be_used_here_1042": "O modificador '{0}' não pode ser usado aqui.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "O modificador '{0}' não pode ser usado com um modificador '{1}'.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "O modificador '{0}' não pode ser usado com um identificador privado.", "_0_modifier_must_precede_1_modifier_1029": "O modificador '{0}' deve preceder o modificador '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve ser seguido por uma expressão de valor de propriedade Unicode entre chaves.", "_0_needs_an_explicit_type_annotation_2782": "'{0}' precisa de uma anotação de tipo explícita.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um namespace aqui.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' só faz referência a um tipo, mas está sendo usado como valor no momento.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para es2015 ou posterior.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' refere-se a uma UMD global, mas o arquivo atual é um módulo. Considere adicionar uma importação.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' refere-se a um valor, mas está sendo usado como um tipo aqui. Você quis dizer 'typeof {0}'?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "'{0}' resolve para uma declaração somente de tipo e deve ser importado usando uma importação de somente tipo quando 'preserveValueImports' e 'isolatedModules' estão ambos habilitados.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "'{0}' resolve para uma declaração apenas de tipo e deve ser reexportada usando uma reexportação apenas de tipo quando 'isolatedModules' está habilitado.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' resolve para uma declaração somente de tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' resolve para uma declaração apenas de tipo e deve ser reexportada usando uma reexportação apenas de tipo quando '{1}' está habilitado.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' deve ser colocado dentro do objeto 'compilerOptions' do arquivo config json", "_0_tag_already_specified_1223": "A marca '{0}' já foi especificada.", "_0_was_also_declared_here_6203": "'{0}' também foi declarado aqui.", @@ -1780,19 +1981,22 @@ "and_here_6204": "e aqui.", "arguments_cannot_be_referenced_in_property_initializers_2815": "'argumentos' não podem ser referenciados em inicializadores de propriedade.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trata os arquivos com import, export, import.meta, jsx (com jsx: react-jsx) ou formato esm (com module: node16+) como módulos.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão 'await' não pode ser usada dentro de um bloco estático de classe.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "As expressões 'await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas não tem importações ou exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "As expressões 'await' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "As expressões 'await' não podem ser usadas em inicializadores de parâmetros.", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' não tem efeito sobre o tipo desta expressão.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "As instruções 'for await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instruções 'await using' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instruções 'await using' não podem ser usadas dentro de um bloco estático de classe.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "A opção 'baseUrl' é configurada para '{0}', usando este valor para resolver o nome de módulo não relativo '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve ser seguido por uma letra ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' só pode ser usado no início de um arquivo.", "case_or_default_expected_1130": "'case' ou 'default' esperado.", "catch_or_finally_expected_1472": "é esperado 'catch' ou 'finally'.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Declarações 'const' só podem ser declaradas dentro de um bloco.", - "const_declarations_must_be_initialized_1155": "Declarações 'const' devem ser inicializadas.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "O inicializador de membro de enumeração 'const' foi avaliado como um valor não finito.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "O inicializador de membro de enumeração 'const' foi avaliado como o valor não permitido 'NaN'.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Os inicializadores de membros de enumeração const só podem conter valores literais e outros valores de enumeração calculados.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Os inicializadores de membro de enumeração const devem ser expressões constantes.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Enumerações 'const' só podem ser usadas em expressões de acesso de índice ou propriedade, ou então do lado direito de uma consulta de tipo, declaração de importação ou atribuição de exportação.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Não é possível usar 'constructor' como nome de uma propriedade de parâmetro.", "constructor_is_a_reserved_word_18012": "'#constructor' é uma palavra reservada.", @@ -1811,13 +2015,14 @@ "file_6025": "arquivo", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Os loops 'for await' só são permitidos no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Os loops 'for await' só são permitidos em funções assíncronas e nos níveis superiores dos módulos.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops 'for await' não podem ser usados dentro de um bloco estático de classe.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "os acessadores 'get' e 'set' não podem declarar os parâmetros 'this'.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se `files` for especificado, caso contrário `[\"**/*\"]5D;`", "implements_clause_already_seen_1175": "A cláusula 'implements' já foi vista.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Cláusulas 'implements' só podem ser usadas em arquivos TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' só pode ser usado em arquivos TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "As declarações 'infer' só são permitidas na cláusula 'extends' de um tipo condicional.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Declarações 'let' só podem ser declaradas dentro de um bloco.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve ser seguido por um nome de grupo de captura entre colchetes angulares.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "O uso de 'let' não é permitido como um nome em declarações 'let' ou 'const'.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "módulo === `AMD` ou `UMD` ou `System` ou `ES6` e `Classic`. Caso contrário, `Node`", "module_system_or_esModuleInterop_6904": "módulo === \"system\" ou esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' não tem uma entrada 'typesVersions' que corresponda à versão '{0}'.", "package_json_had_a_falsy_0_field_6220": "'package.json' teve um campo '{0}' false.", "package_json_has_0_field_1_that_references_2_6101": "'package.json' tem '{0}' campo '{1}' que faz referência a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "'package.json' tem um campo 'peerDependencies'.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' tem uma entrada 'typesVersions' '{0}' que não é um intervalo semver válido.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' tem uma entrada 'typesVersions' '{0}' que corresponde à versão do compilador '{1}', procurando por um padrão que corresponda ao nome do módulo '{2}'.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' tem um campo 'typesVersions' com mapeamentos de caminho específicos à versão.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "O escopo package.json '{0}' tem um tipo inválido para o destino do especificador '{1}'", "package_json_scope_0_has_no_imports_defined_6273": "O escopo package.json '{0}' não tem importações definidas.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "A opção 'paths' é especificada, procurando por um padrão para corresponder ao nome do módulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "'\\q' só está disponível dentro da classe de caracteres.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve ser seguido por alternativas de cadeia de caracteres entre chaves.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "O modificador 'readonly' pode aparecer somente em uma declaração de propriedade ou assinatura de índice.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "O modificador de tipo 'readonly' só é permitido em tipos literais de matriz e tupla.", "require_call_may_be_converted_to_an_import_80005": "A chamada 'require' pode ser convertida em uma importação.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "asserções de 'modo de resolução' são suportadas apenas quando 'moduleResolution' é 'node16' ou 'nodenext'.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "asserções de 'modo de resolução' são instáveis. Use o TypeScript noturno para silenciar esse erro. Tente atualizar com 'npm install -D typescript@next'.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` pode ser definido apenas para importações somente de tipo.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` é a única chave válida para as asserções de importação de tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' é a única chave válida para os atributos de importação de tipo.", "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve ser 'require' ou 'import'.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "A opção 'rootDirs' está configurada, usando-a para resolver o nome de módulo relativo '{0}'.", "super_can_only_be_referenced_in_a_derived_class_2335": "'super' só pode ser referenciado em uma classe derivada.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' não pode ser referenciado em um nome de propriedade calculado.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' não pode ser referenciado em um corpo de módulo ou de namespace.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' não pode ser referenciado em um inicializador de propriedade estática.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "'this' não pode ser referenciado em argumentos de construtor.", "this_cannot_be_referenced_in_current_location_2332": "'this' não pode ser referenciado no local atual.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.", "true_for_ES2022_and_above_including_ESNext_6930": "'True' para ES2022 e acima, incluindo ESNext.", "true_if_composite_false_otherwise_6909": "`true` se` composite`, `false` caso contrário", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' é 'node16', 'nodenext' ou 'bundler'; caso contrário, \"false\".", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: o Compilador TypeScript", "type_Colon_6902": "tipo:", "unique_symbol_types_are_not_allowed_here_1335": "Tipos de 'unique symbol' não são permitidos aqui.", diff --git a/node_modules/typescript/lib/ru/diagnosticMessages.generated.json b/node_modules/typescript/lib/ru/diagnosticMessages.generated.json index 1de4b2b1c0..0f5324c302 100644 --- a/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/ru/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "ВСЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Модификатор \"{0}\" не может быть использован с объявлением импорта.", "A_0_parameter_must_be_the_first_parameter_2680": "В качестве первого параметра необходимо указать \"{0}\".", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Тег JSDoc @template не может следовать за тегом @typedef, @callback или @overload.", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Комментарий \"@typedef\" JSDoc не может содержать несколько тегов \"@type\".", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Литерал 'bigint' не может использоваться в качестве имени свойства.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Литерал типа bigint не может использовать экспоненциальное представление.", "A_bigint_literal_must_be_an_integer_1353": "Литерал типа bigint должен быть целым числом.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Параметр шаблона привязки не может быть необязательным в сигнатуре реализации.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Оператор break можно использовать только во включающей итерации или операторе switch.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Оператор break может переходить только к метке внешнего оператора.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Класс символов не должен содержать зарезервированный двойной знак пунктуации. Вы хотели избежать этого с помощью обратной косой черты?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Диапазон классов символов не должен быть ограничен другим классом символов.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Класс может реализовать только идентификатор или полное имя с дополнительными аргументами типа.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Класс может реализовать только тип объекта или пересечение типов объектов со статическими известными членами.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Класс не может расширять примитивный тип, такой как ' {0} '. Классы могут расширять только конструируемые значения.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Класс не может реализовать примитивный тип, такой как '{0}'. Он может реализовывать только другие именованные типы объектов.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Объявление класса без модификатора \"default\" должно иметь имя.", "A_class_member_cannot_have_the_0_keyword_1248": "Элемент класса не может иметь ключевое слово \"{0}\".", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Выражение с запятой запрещено в имени вычисляемого свойства.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Конструктор не может иметь параметр this.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Оператор continue можно использовать только в операторе включающей итерации.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Оператор continue может переходить только к метке оператора включающей итерации.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Файл декларации невозможно импортировать без \"типа импорта\". Вы хотели вместо этого импортировать файл реализации ' {0} '?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Модификатор declare нельзя использовать в уже окружающем контексте.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Декоратор может только декорировать реализацию метода, а не перегрузку.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Предложение default не может повторяться в операторе switch.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Экспорт по умолчанию должен находиться на верхнем уровне объявления файла или модуля.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Утверждение определенного назначения \"!\" запрещено в этом контексте.", "A_destructuring_declaration_must_have_an_initializer_1182": "Объявление деструктурирования должно включать инициализатор.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Для вызова динамического импорта в ES5/ES3 требуется конструктор \"Promise\". Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Для вызова динамического импорта в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Вызов динамического импорта возвращает \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", "A_file_cannot_have_a_reference_to_itself_1006": "Файл не может содержать ссылку на самого себя.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Функция, возвращающая \"never\", не может иметь доступную конечную точку.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Функция, которая вызывается с ключевым словом new, не может иметь тип this со значением void.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Функция, объявленный тип которой не является void или any, должна возвращать значение.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Функция, объявленный тип которой не является ни \"неопределенным\", ни \"недействительным\", ни \"любым\", должна возвращать значение.", "A_generator_cannot_have_a_void_type_annotation_2505": "Генератор не может иметь аннотацию типа void.", "A_get_accessor_cannot_have_parameters_1054": "Метод доступа get не может иметь параметров.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Метод доступа get должен быть доступным как минимум в той же мере, что и метод задания.", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Объявление пространства имен и класс или функция, с которыми оно объединено, не могут находится в разных файлах.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Объявление пространства имен не может располагаться раньше класса или функции, с которыми оно объединено.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Объявление пространства имен разрешено только на верхнем уровне пространства имен или модуля.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Объявление \"namespace\" с использованием ключевого слова \"module\" недопустимо. Вместо него используйте ключевое слово \"namespace\".", "A_non_dry_build_would_build_project_0_6357": "При сборке без флага -dry будет собран проект \"{0}\"", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "При сборке без флага -dry будут удалены следующие файлы: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "Сборка без флага -dry обновит выходные данные проекта \"{0}\"", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Сборка без флага -dry обновит метки времени для выходных данных проекта \"{0}\"", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Инициализатор параметра разрешено использовать только в реализации функции или конструктора.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Свойство параметра невозможно объявить с помощью параметра REST.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Вызов \"super\" должен быть первой инструкцией в конструкторе, ссылающейся на \"super\" или \"this\", если производный класс содержит инициализированные свойства, свойства параметров или частные идентификаторы.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Условие типа this несовместимо с условием типа на основе параметров.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Тип this доступен только в нестатическом элементе класса или интерфейса.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Модификатор \"export\" верхнего уровня нельзя использовать в объявлениях значений в модуле CommonJS, если включен \"verbatimModuleSyntax\".", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Файл tsconfig.json уже определен в \"{0}\".", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Элемент кортежа не может быть одновременно элементом rest и необязательным элементом.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Тип кортежа нельзя индексировать с отрицательным значением.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Выражение yield разрешено использовать только в теле генератора.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Невозможно получить доступ к абстрактному методу \"{0}\" класса \"{1}\" с помощью выражения super.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Абстрактные методы могут использоваться только в абстрактных классах.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Абстрактные свойства могут появляться только внутри абстрактного класса.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Абстрактное свойство \"{0}\" в классе \"{1}\" недоступно в конструкторе.", "Accessibility_modifier_already_seen_1028": "Модификатор специальных возможностей уже встречался.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Методы доступа доступны только при разработке для ECMAScript 5 и более поздних версий.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "Методы доступа должны быть абстрактными или неабстрактными.", "Add_0_to_unresolved_variable_90008": "Добавить \"{0}.\" к неразрешенной переменной", "Add_a_return_statement_95111": "Добавить оператор return", + "Add_a_return_type_to_the_function_declaration_9031": "Добавьте тип возвращаемого значения в объявление функции.", + "Add_a_return_type_to_the_function_expression_9030": "Добавьте тип возвращаемого значения в выражение функции.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Добавьте тип возвращаемого значения в объявление метода доступа get.", + "Add_a_return_type_to_the_method_9034": "Добавьте тип возвращаемого значения в метод", + "Add_a_type_annotation_to_the_parameter_0_9028": "Добавьте аннотацию типа к параметру {0} .", + "Add_a_type_annotation_to_the_property_0_9029": "Добавьте аннотацию типа к свойству {0} .", + "Add_a_type_annotation_to_the_variable_0_9027": "Добавьте аннотацию типа к переменной {0} .", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Добавьте тип в параметр объявления метода доступа set.", "Add_all_missing_async_modifiers_95041": "Добавить все отсутствующие модификаторы \"async\"", "Add_all_missing_attributes_95168": "Добавить все отсутствующие атрибуты", "Add_all_missing_call_parentheses_95068": "Добавить все недостающие скобки вызова", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Добавить все отсутствующие импорты", "Add_all_missing_members_95022": "Добавить все отсутствующие элементы", "Add_all_missing_override_modifiers_95162": "Добавьте все отсутствующие модификаторы \"override\".", + "Add_all_missing_parameters_95190": "Добавьте все недостающие параметры", "Add_all_missing_properties_95166": "Добавить все отсутствующие свойства", "Add_all_missing_return_statement_95114": "Добавить все отсутствующие операторы return", "Add_all_missing_super_calls_95039": "Добавить все отсутствующие вызовы super", + "Add_all_missing_type_annotations_90067": "Добавьте все недостающие аннотации типов", + "Add_all_optional_parameters_95193": "Добавить все необязательные параметры", + "Add_annotation_of_type_0_90062": "Добавьте аннотацию типа ' {0} '", "Add_async_modifier_to_containing_function_90029": "Добавьте модификатор async в содержащую функцию", "Add_await_95083": "Добавить \"await\"", "Add_await_to_initializer_for_0_95084": "Добавить \"await\" к инициализатору для \"{0}\"", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Добавить инициализаторы ко всем неинициализированным свойствам", "Add_missing_attributes_95167": "Добавить отсутствующие атрибуты", "Add_missing_call_parentheses_95067": "Добавить недостающие скобки вызова", + "Add_missing_comma_for_object_member_completion_0_95187": "Добавьте недостающую запятую для завершения члена объекта ' {0} '.", "Add_missing_enum_member_0_95063": "Добавить отсутствующий член перечисления \"{0}\"", "Add_missing_function_declaration_0_95156": "Добавить недостающее объявление функции \"{0}\"", "Add_missing_new_operator_to_all_calls_95072": "Добавить отсутствующий оператор \"new\" во все вызовы", "Add_missing_new_operator_to_call_95071": "Добавить отсутствующий оператор \"new\" в вызов", + "Add_missing_parameter_to_0_95188": "Добавить недостающий параметр в ' {0} '", + "Add_missing_parameters_to_0_95189": "Добавьте недостающие параметры в ' {0} '", "Add_missing_properties_95165": "Добавить отсутствующие свойства", "Add_missing_super_call_90001": "Добавьте отсутствующий вызов \"super()\"", "Add_missing_typeof_95052": "Добавить отсутствующий \"typeof\"", "Add_names_to_all_parameters_without_names_95073": "Добавить имена ко всем параметрам без имен", + "Add_optional_parameter_to_0_95191": "Добавьте необязательный параметр в ' {0} '", + "Add_optional_parameters_to_0_95192": "Добавить дополнительные параметры в \"{0}\"", "Add_or_remove_braces_in_an_arrow_function_95058": "Добавить скобки в стрелочную функцию или удалить скобки из нее", "Add_override_modifier_95160": "Добавьте модификатор \"override\".", "Add_parameter_name_90034": "Добавить имя параметра", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Добавить квалификатор ко всем неразрешенным переменным, соответствующим имени члена", + "Add_return_type_0_90063": "Добавить тип возвращаемого значения ' {0} '", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Добавьте к этому выражению satisfies и утверждение типа (удовлетворяет T как T), чтобы сделать тип явным.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Добавьте удовлетворение и утверждение встроенного типа с помощью ' {0} '", "Add_to_all_uncalled_decorators_95044": "Добавить \"()\" ко всем невызванным декораторам", "Add_ts_ignore_to_all_error_messages_95042": "Добавить \"@ts-ignore\" ко всем сообщениям об ошибках", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Добавьте \"undefined\" к типу при доступе с использованием индекса.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не повлияет на выведение кода — только на проверку типов.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Разрешить \"импортировать x из y\", если модуль не имеет экспорта по умолчанию.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Разрешить импортировать вспомогательныхе функции из tslib один раз для каждого проекта, а не включать их для каждого файла.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Разрешить импортировать расширения файлов TypeScript. Требуется установить --moduleResolution packager и --noEmit или --emitDeclarationOnly.", "Allow_javascript_files_to_be_compiled_6102": "Разрешить компиляцию файлов javascript.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Разрешить обрабатывать несколько папок как одну при разрешении модулей.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Уже включенное имя файла \"{0}\" отличается от имени файла \"{1}\" только регистром.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Не указан аргумент, соответствующий этому шаблону привязки.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Арифметический операнд должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Стрелочная функция не может иметь параметр \"this\".", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Асинхронной функции или методу ES5/ES3 требуется конструктор \"Promise\". Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Для асинхронной функции или метода в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Асинхронная функция или метод должны вернуть \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", "An_async_iterator_must_have_a_next_method_2519": "В асинхронном итераторе должен быть метод next().", "An_element_access_expression_should_take_an_argument_1011": "Выражение доступа к элементу должно принимать аргумент.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Объявление экспорта может использоваться только на верхнем уровне модуля.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Объявление экспорта может использоваться только на верхнем уровне пространства имен или модуля.", "An_export_declaration_cannot_have_modifiers_1193": "Объявление экспорта не может иметь модификаторы.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Объявление 'export =' должно ссылаться на реальное значение, если включен 'verbatimModuleSyntax', но ' {0} ' разрешается в объявление только для типа.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Объявление 'export =' должно ссылаться на значение, если включен 'verbatimModuleSyntax', но ' {0} ' относится только к типу.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"Экспорт по умолчанию\" должен ссылаться на реальное значение, когда \"verbatimModuleSyntax\" включен, но \" {0} \" разрешается в объявление только типа.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "\"Экспорт по умолчанию\" должен ссылаться на значение, если включен \"verbatimModuleSyntax\", но \" {0} \" относится только к типу.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Выражение типа \"void\" не может быть проверено на истинность.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Расширенное escape-значение в Юникоде должно быть в пределах от 0x0 до 0x10FFFF включительно.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Идентификатор или ключевое слово не может следовать непосредственно за числовым литералом.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Реализацию невозможно объявить в окружающих контекстах.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Псевдоним импорта не может ссылаться на объявление, экспортированное с помощью \"export type\".", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Псевдоним импорта не может ссылаться на объявление, импортированное с помощью \"import type\".", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Псевдоним импорта не может быть преобразован в объявление типа или только типа, если включен \"verbatimModuleSyntax\".", "An_import_alias_cannot_use_import_type_1392": "Псевдоним импорта не может использовать \"import type\".", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Объявление импорта может использоваться только на верхнем уровне модуля.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Объявление импорта может использоваться только на верхнем уровне пространства имен или модуля.", "An_import_declaration_cannot_have_modifiers_1191": "Объявление импорта не может иметь модификаторы.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "Путь импорта не может заканчиваться расширением \"{0}\". Попробуйте импортировать \"{1}\".", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Путь импорта может заканчиваться расширением \" {0} \" только в том случае, если включен параметр \"allowImportingTsExtensions\".", "An_index_signature_cannot_have_a_rest_parameter_1017": "Сигнатура индекса не может иметь параметр rest.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Сигнатура индекса не может заканчиваться запятой.", "An_index_signature_must_have_a_type_annotation_1021": "У сигнатуры индекса должна быть аннотация типа.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "За выражением создания экземпляра не может следовать доступ к свойству.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Интерфейс может расширить только идентификатор или полное имя с дополнительными аргументами типа.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Интерфейс может расширять только тип объекта или пересечение типов объектов со статическими известными членами.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Интерфейс не может расширять примитивный тип, например \"{0}\". Интерфейс может расширять только именованные типы и классы", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Интерфейс не может расширять примитивный тип, такой как ' {0} '. Он может расширять только другие именованные типы объектов.", "An_interface_property_cannot_have_an_initializer_1246": "Свойство интерфейса не может иметь инициализатор.", "An_iterator_must_have_a_next_method_2489": "Итератор должен иметь метод \"next()\".", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "При использовании директивы pragma @jsx с фрагментами JSX требуется директива pragma @jsxFrag.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "У объектного литерала не может быть несколько свойств с одинаковым именем.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Объектный литерал не может иметь свойство и метод доступа с одинаковым именем.", "An_object_member_cannot_be_declared_optional_1162": "Элемент объекта не может быть объявлен необязательным.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Метод объекта \"[Symbol.hasInstance]\" должен возвращать логическое значение, чтобы его можно было использовать в правой части выражения \"instanceof\".", "An_optional_chain_cannot_contain_private_identifiers_18030": "Необязательная цепочка не может содержать закрытые идентификаторы.", "An_optional_element_cannot_follow_a_rest_element_1266": "Необязательный элемент не может следовать за элементом rest.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Этот контейнер затемняет внешнее значение \"this\".", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Сигнатура перегрузки не может быть объявлена в качестве генератора.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Унарное выражение с оператором \"{0}\" не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.", "Annotate_everything_with_types_from_JSDoc_95043": "Добавить заметки ко всем элементам с типами JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Аннотирование типов свойств расширяет функцию в пространстве имен", "Annotate_with_type_from_JSDoc_95009": "Заметка с типом из JSDoc", "Another_export_default_is_here_2753": "Здесь находится другой экспорт данных по умолчанию.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Любое свойство Unicode, которое может соответствовать более чем одному символу, доступно только в том случае, если установлен флаг Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Все, что может соответствовать более чем одному символу, недопустимо внутри отрицаемого класса символов.", "Are_you_missing_a_semicolon_2734": "У вас отсутствует точка с запятой?", "Argument_expression_expected_1135": "Ожидалось выражение аргумента.", "Argument_for_0_option_must_be_Colon_1_6046": "Аргумент для параметра \"{0}\" должен быть {1}.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Невозможно назначить аргумент типа \"{0}\" параметру типа \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Не указаны аргументы для параметра REST \"{0}\".", "Array_element_destructuring_pattern_expected_1181": "Ожидался шаблон деструктурирования элемента массива.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Массивы с расширенными элементами не могут быть выведены с помощью --isolatedDeclarations.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Утверждения требуют, чтобы каждое имя в целевом объекте вызова было объявлено с явной заметкой с типом.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Утверждения требуют, чтобы целевой объект вызова был идентификатором или полным именем.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Назначение свойств функциям без их объявления не поддерживается с помощью --isolatedDeclarations. Добавьте явное объявление свойств, назначенных этой функции.", "Asterisk_Slash_expected_1010": "Ожидалось \"*/\".", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "По крайней мере один метод доступа должен иметь явную аннотацию возвращаемого типа с --isolatedDeclarations.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Улучшения для глобальной области могут быть вложены во внешние модули или неоднозначные объявления модулей только напрямую.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Улучшения для глобальной области не должны иметь модификатор declare, если они отображаются в окружающем контексте.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Автообнаружение для вводимых данных включено в проекте \"{0}\". Идет запуск дополнительного этапа разрешения для модуля \"{1}\" с использованием расположения кэша \"{2}\".", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Выражение Await нельзя использовать внутри статического блока класса.", "BUILD_OPTIONS_6919": "ПАРАМЕТРЫ СБОРКИ", "Backwards_Compatibility_6253": "Обратная совместимость", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Выражения базового класса не могут ссылаться на параметры типа класса.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Литералы типа bigint недоступны при нацеливании на версию ниже ES2020.", "Binary_digit_expected_1177": "Ожидался бит.", "Binding_element_0_implicitly_has_an_1_type_7031": "Элемент привязки \"{0}\" имеет неявный тип \"{1}\".", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Элементы привязки нельзя экспортировать напрямую с помощью --isolatedDeclarations.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Переменная \"{0}\" с областью видимости, ограниченной блоком, использована перед своим объявлением.", "Build_a_composite_project_in_the_working_directory_6925": "Создание составного проекта в рабочей папке.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Собирайте все проекты, включая не требующие обновления.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Собрать один проект или несколько и их зависимости, если они не обновлены", "Build_option_0_requires_a_value_of_type_1_5073": "Параметр сборки \"{0}\" требует значение типа {1}.", "Building_project_0_6358": "Сборка проекта \"{0}\"...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Встроенные итераторы создаются с типом TReturn \"неопределенным\" вместо \"любого\".", "COMMAND_LINE_FLAGS_6921": "ФЛАГИ КОМАНДНОЙ СТРОКИ", "COMMON_COMMANDS_6916": "ОБЩИЕ КОМАНДЫ", "COMMON_COMPILER_OPTIONS_6920": "ОБЩИЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "Типы возвращаемых значений сигнатур вызовов \"{0}\" и \"{1}\" несовместимы.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Сигнатура вызова, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Сигнатуры вызова без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".", - "Call_target_does_not_contain_any_signatures_2346": "Объект вызова не содержит сигнатуры.", "Can_only_convert_logical_AND_access_chains_95142": "Можно преобразовывать только цепочки доступа с логическим И.", "Can_only_convert_named_export_95164": "Можно преобразовать только именованный экспорт.", "Can_only_convert_property_with_modifier_95137": "Можно только преобразовать свойство с модификатором", - "Can_only_convert_string_concatenation_95154": "Можно только преобразовать объединение строк.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Можно преобразовывать только конкатенации строк и строковые литералы.", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Не удается получить доступ к {0}.{1}, так как {0} является типом, но не является пространством имен. Вы хотели получить тип свойства {1} в {0} с использованием {0}[\"{1}\"]?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Не удается обратиться к перечислениям внешних констант, если задан флаг \"--isolatedModules\".", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Невозможно получить доступ к ' {0} ' из другого файла без уточнения, если включен ' {1} '. Вместо него используйте '{2}'.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Невозможно получить доступ к перечислениям окружения const, если включено ' {0} '.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Не удается назначить тип конструктора \"{0}\" для типа конструктора \"{1}\".", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Не удается назначить тип конструктора абстрактного класса для типа конструктора класса, не являющегося абстрактным.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Не удается задать значение для \"{0}\", так как это класс.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "Не удается найти определение lib для \"{0}\".", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Не удается найти определение lib для \"{0}\". Вы имели в виду \"{1}\"?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Не удается найти модуль \"{0}\". Рекомендуется использовать параметр \"--resolveJsonModule\" для импорта модуля с расширением \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "Не найден модуль \"{0}\". Хотели ли вы задать значение \"node\" для параметра \"moduleResolution\" или добавить псевдонимы в параметр \"paths\"?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Не найден модуль \"{0}\". Вы имели в виду установить для параметра \"moduleResolution\" значение \"nodenext\" или добавить псевдонимы к параметру \"paths\"?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Не удается найти модуль \"{0}\" или связанные с ним объявления типов.", "Cannot_find_name_0_2304": "Не удается найти имя \"{0}\".", "Cannot_find_name_0_Did_you_mean_1_2552": "Не удается найти имя \"{0}\". Вы имели в виду \"{1}\"?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Не удается найти имя \"{0}\". Вы собирались использовать его в асинхронной функции?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{1}\" или более поздней версии.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`, а затем добавьте 'bun' в поле типов в вашем tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства запуска тестов? Попробуйте использовать команды \"npm i --save-dev @types/jest\" или \"npm i --save-dev @types/mocha\".", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства выполнения тестов? Попробуйте использовать `npm i --save-dev @types/jest` или `npm i --save-dev @types/mocha`, а затем добавьте \"jest\" или \"mocha\" в поле типов в файле tsconfig.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать команду \"npm i --save-dev @types/jquery\".", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но деструктурирование массива всегда будет отправлять \"{0}\".", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но расширение массива всегда будет отправлять \"{0}\".", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но \"for-of\" всегда будет отправлять \"{0}\".", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "Невозможно добавить проект \"{0}\" в начало, так как для него не задан outFile", + "Cannot_move_statements_to_the_selected_file_95183": "Невозможно переместить выписки в выбранный файл", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Невозможно перейти к файлу, выбранный файл недействителен.", "Cannot_read_file_0_5083": "Невозможно прочитать файл \"{0}\".", "Cannot_read_file_0_Colon_1_5012": "Не удается считать файл \"{0}\": {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Невозможно повторно объявить переменную \"{0}\" с областью видимости \"Блок\".", "Cannot_redeclare_exported_variable_0_2323": "Не удается повторно объявить экспортированную переменную \"{0}\".", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Невозможно повторно объявить идентификатор \"{0}\" в операторе catch.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Не удается запустить вызов функции в заметке типа.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Не удается обновить выходные данные проекта \"{0}\", так как произошла ошибка при чтении файла \"{1}\".", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Невозможно использовать JSX, если не задан флаг \"--jsx\".", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "Невозможно использовать \"export import\" для типа или пространства имен, доступного только для типов, когда указан флаг \"--isolatedModules\".", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Невозможно использовать \"экспорт-импорт\" в пространстве имен типа или только для типов, если включен '{0}'.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Невозможно использовать директивы import, export или приращения модуля, если флаг \"--module\" имеет значение \"none\".", "Cannot_use_namespace_0_as_a_type_2709": "Невозможно использовать пространство имен \"{0}\" как тип.", "Cannot_use_namespace_0_as_a_value_2708": "Невозможно использовать пространство имен \"{0}\" как значение.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "Измените \"extends\" на \"implements\"", "Change_spelling_to_0_90022": "Измените написание на \"{0}\"", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Проверьте свойства класса, которые объявлены, но не заданы в конструкторе.", + "Check_side_effect_imports_6806": "Проверьте импорт побочных эффектов.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Убедитесь, что аргументы для методов \"bind\", \"call\" и \"apply\" соответствуют исходной функции.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Идет проверка того, является ли \"{0}\" самым длинным соответствующим префиксом для \"{1}\" — \"{2}\".", "Circular_definition_of_import_alias_0_2303": "Циклическое определение псевдонима импорта \"{0}\".", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "Объявление класса не может реализовать список перегрузок для \"{0}\".", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "В объявлении класса не может использоваться более одного тега \"@augments\" или \"@extends\".", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Декораторы классов не могут использоваться со статическим частным идентификатором. Попробуйте удалить экспериментальный декоратор.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Поле класса \" {0} \", определенное родительским классом, недоступно в дочернем классе через super.", "Class_name_cannot_be_0_2414": "Имя класса не может иметь значение \"{0}\".", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Класс не может иметь имя \"Object\" при выборе ES5 с модулем {0} в качестве целевого.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Статическая сторона класса \"{0}\" неправильно расширяет статическую сторону базового класса \"{1}\".", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Параметры командной строки", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Компиляция проекта по заданному пути к файлу конфигурации или папке с файлом tsconfig.json.", "Compiler_Diagnostics_6251": "Диагностика компилятора", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Опции компилятора \" {0} \" не может быть присвоена пустая строка.", "Compiler_option_0_expects_an_argument_6044": "Параметр компилятора \"{0}\" ожидает аргумент.", "Compiler_option_0_may_not_be_used_with_build_5094": "Параметр компилятора \"--{0}\" не может использоваться с \"--build\".", "Compiler_option_0_may_only_be_used_with_build_5093": "Параметр компилятора \"--{0}\" может использоваться только с \"--build\".", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Составные проекты не могут отключать выпуск объявления.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Составные проекты не могут отключить добавочную компиляцию.", "Computed_from_the_list_of_input_files_6911": "Вычислено из списка входных файлов", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Вычисляемые свойства должны быть числовыми или строковыми литералами, переменными или выражениями, разделенными точками, с параметром --isolatedDeclarations.", "Computed_property_names_are_not_allowed_in_enums_1164": "Имена вычисляемых свойств запрещены в перечислениях.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Вычисленные имена свойств в литералах классов или объектов не могут быть выведены с помощью --isolatedDeclarations.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Вычисленные значения запрещены в перечислении с членами, имеющими строковые значения.", "Concatenate_and_emit_output_to_single_file_6001": "Связать и вывести результаты в один файл.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Конфликтующие определения для \"{0}\" найдены в \"{1}\" и \"{2}\". Попробуйте установить конкретную версию этой библиотеки, чтобы устранить конфликт.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Условия, которые необходимо установить в дополнение к настройкам по умолчанию, специфичным для преобразователя, при разрешении импорта.", "Conflicts_are_in_this_file_6201": "В этом файле присутствуют конфликты.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Попробуйте добавить к этому классу модификатор \"declare\".", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Типы возвращаемых значений сигнатур конструкции \"{0}\" и \"{1}\" несовместимы.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "Преобразовать \"{0}\" в тип сопоставленного объекта", "Convert_all_const_to_let_95102": "Преобразовать все \"const\" в \"let\"", "Convert_all_constructor_functions_to_classes_95045": "Преобразовать все функции конструктора в классы", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Преобразовать все импорты, не используемые в качестве значения, в импорты, затрагивающие только тип", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Преобразовать все недопустимые символы в код сущности HTML", "Convert_all_re_exported_types_to_type_only_exports_1365": "Преобразовать все повторно экспортированные типы в экспорты, затрагивающие только тип", "Convert_all_require_to_import_95048": "Преобразовать все \"require\" в \"import\"", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Преобразовать все в числовые литералы типа bigint", "Convert_all_to_default_imports_95035": "Преобразовать все в импорт по умолчанию", "Convert_all_type_literals_to_mapped_type_95021": "Преобразовать все литералы типов в сопоставленный тип", + "Convert_all_typedef_to_TypeScript_types_95177": "Преобразуйте все typedef в типы TypeScript.", "Convert_arrow_function_or_function_expression_95122": "Преобразовать стрелочную функцию или выражение функции", "Convert_const_to_let_95093": "Преобразовать \"const\" в \"let\"", "Convert_default_export_to_named_export_95061": "Преобразовать экспорт по умолчанию в именованный экспорт", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "Преобразовать в необязательное выражение цепочки", "Convert_to_template_string_95096": "Преобразовать в строку шаблона", "Convert_to_type_only_export_1364": "Преобразовать в экспорт, распространяющийся только на тип", - "Convert_to_type_only_import_1373": "Преобразовать в импорт, распространяющийся только на тип", + "Convert_typedef_to_TypeScript_type_95176": "Преобразование typedef в тип TypeScript.", "Corrupted_locale_file_0_6051": "Поврежденный файл языкового стандарта \"{0}\".", "Could_not_convert_to_anonymous_function_95153": "Не удалось преобразовать в анонимную функцию.", "Could_not_convert_to_arrow_function_95151": "Не удалось преобразовать в стрелочную функцию.", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "Не удалось найти имя \"{0}\". Вы имели в виду \"{1}\"?", "Could_not_find_namespace_import_or_named_imports_95132": "Не удалось найти импорт пространства имен или именованные импорты.", "Could_not_find_property_for_which_to_generate_accessor_95135": "Не удалось найти свойство, для которого создается метод доступа.", + "Could_not_find_variable_to_inline_95185": "Не удалось найти переменную для встраивания.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Не удалось разрешить путь \"{0}\" с расширениями: {1}.", "Could_not_write_file_0_Colon_1_5033": "Не удалось записать файл \"{0}\": \"{1}\".", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Создать файлы сопоставителя с исходным кодом для выпущенных файлов JavaScript.", "Create_sourcemaps_for_d_ts_files_6614": "Создание сопоставителя с исходным кодом для файлов d.ts.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Создает tsconfig.jsс рекомендуемыми параметрами в рабочей папке.", "DIRECTORY_6038": "КАТАЛОГ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Десятичные escape-последовательности и обратные ссылки не допускаются в классе символов.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Десятичные дроби с ведущими нулями не допускаются.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Объявление дополняет объявление в другом файле. Сериализация невозможна.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Выдача декларации для этого файла требует сохранения этого импорта для дополнений. Это не поддерживается с помощью --isolatedDeclarations.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\". Явная заметка с типом может разблокировать порождение объявления.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\" из модуля \"{1}\". Явная заметка с типом может разблокировать порождение объявления.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "Выдача объявления для этого параметра требует неявного добавления неопределенного значения к его типу. Это не поддерживается с помощью --isolatedDeclarations.", "Declaration_expected_1146": "Ожидалось объявление.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Имя объявления конфликтует со встроенным глобальным идентификатором \"{0}\".", "Declaration_or_statement_expected_1128": "Ожидалось объявление или оператор.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Ожидалось объявление или инструкция. Этот символ \"=\" следует за блоком инструкций, поэтому, если вы хотите использовать назначение деструктурирования, может потребоваться заключить все присваивание в круглые скобки.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Ожидалось объявление или инструкция. Этот '=' следует за блоком операторов, поэтому, если вы намереваетесь написать деструктурирующее присваивание, вам может потребоваться заключить все присваивание в круглые скобки.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Объявления с определенными утверждениями присваивания также должны иметь заметки типов.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Объявления с инициализаторами не могут также иметь определенные утверждения присваивания.", "Declare_a_private_field_named_0_90053": "Объявите закрытое поле с именем \"{0}\".", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "Объявите статическое свойство \"{0}\"", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Тип возвращаемого значения функции декоратора \"{0}\" нельзя назначить типу \"{1}\".", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Тип возвращаемого значения функции декоратора — \"{0}\", но ожидается \"void\" или \"any\".", + "Decorator_used_before_export_here_1486": "Здесь декоратор используется перед \"экспортом\".", "Decorators_are_not_valid_here_1206": "Декораторы здесь недопустимы.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Декораторы нельзя применять к множественным методам доступа get или set с совпадающим именем.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Декораторы не могут применяться к параметрам \"this\".", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Декораторы могут не отображаться после \"экспорта\" или \"экспорта по умолчанию\", если они также появляются перед \"экспортом\".", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Перед именем и всеми ключевыми словами объявлений свойств должны предшествовать декораторы.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "По умолчанию применяйте для переменных предложения catch значение \"unknown\" вместо \"any\".", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Экспорт модуля по умолчанию использует или имеет закрытое имя \"{0}\".", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Экспорт по умолчанию не может быть выведен с помощью --isolatedDeclarations.", "Default_library_1424": "Библиотека по умолчанию", "Default_library_for_target_0_1425": "Библиотека по умолчанию для целевого объекта \"{0}\"", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Определения следующих идентификаторов конфликтуют с определениями в другом файле: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Отключите стирание объявлений \"const enum\" в сгенерированном коде.", "Disable_error_reporting_for_unreachable_code_6603": "Отключить отчеты об ошибках для недостижимого кода.", "Disable_error_reporting_for_unused_labels_6604": "Отключить отчеты об ошибках для неиспользуемых меток.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Отключите полную проверку типов (будут сообщаться только о критических ошибках синтаксического анализа и генерации).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Отключите создание пользовательских вспомогательных функций, таких как \"__extends\", в скомпилированных выходных данных.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Отключить включение любых файлов библиотеки, включая lib.d.ts по умолчанию.", "Disable_loading_referenced_projects_6235": "Отключите загрузку проектов, на которые имеются ссылки.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Не сообщать об ошибках в недостижимом коде.", "Do_not_report_errors_on_unused_labels_6074": "Не сообщать об ошибках в неиспользуемых метках.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Не разрешать реальный путь symlink.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Не преобразовывайте и не удаляйте любые операции импорта или экспорта, не помеченные как только текстовые, гарантируя, что они записаны в формате выходного файла на основе настройки \"модуль\".", "Do_not_truncate_error_messages_6165": "Не усекать сообщения об ошибках.", "Duplicate_function_implementation_2393": "Повторяющаяся реализация функции.", "Duplicate_identifier_0_2300": "Повторяющийся идентификатор \"{0}\".", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "Повторяющаяся сигнатура индекса для типа \"{0}\".", "Duplicate_label_0_1114": "Повторяющаяся метка \"{0}\".", "Duplicate_property_0_2718": "Повторяющееся свойство \"{0}\".", + "Duplicate_regular_expression_flag_1500": "Дублирующийся флаг регулярного выражения.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Описатель динамического импорта должен иметь тип \"string\", но имеет тип \"{0}\".", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Динамический импорт поддерживается только в том случае, если для флажка --module установлено значение ''es2020'', ''es2022'', ''esnext'', ''commonjs'', ''amd'', ''system'', ''umd'', ''node16'' или ''nodenext''.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Динамические импорты могут принять спецификатор модуля и необязательное утверждение в качестве аргументов", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Динамический импорт поддерживает только второй аргумент, если для параметра --module установлено значение ''esnext'', ''node16'' или ''nodenext''.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Динамический импорт может принимать в качестве аргументов только спецификатор модуля и необязательный набор атрибутов.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Динамический импорт поддерживает второй аргумент только в том случае, если для параметра --module установлено значение \"esnext\", \"node16\", \"nodenext\" или \"preserve\".", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Синтаксис ESM не разрешен в модуле CommonJS, если для параметра \"модуль\" установлено значение \"сохранить\".", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Синтаксис ESM не разрешен в модуле CommonJS, если включен \"verbatimModuleSyntax\".", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Каждое объявление '{0}.{1}' отличается по своему значению: ожидалось ' {2} ', но было задано ' {3} '.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Каждый член типа объединения \"{0}\" имеет сигнатуры конструкций, но ни одна из их не совместима с другими.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Каждый член типа объединения \"{0}\" имеет сигнатуры, но ни одна из их не совместима с другими.", "Editor_Support_6249": "Поддержка редактора", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Включить отчеты об ошибках в файлах JavaScript с проверкой типа.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Включите отчеты об ошибках, если локальные переменные не считываются.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Включите отчеты об ошибках, если параметр \"this\" имеет тип \"any\".", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Включить экспериментальную поддержку черновиков оформителей TC39 stage 2.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Включите экспериментальную поддержку устаревших экспериментальных декораторов.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Разрешить импорт файлов с любым расширением при наличии файла декларации.", "Enable_importing_json_files_6689": "Включите импорт файлов JSON.", "Enable_project_compilation_6302": "Включить компиляцию проекта", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Включите строгие методы \"bind\", \"call\" и \"apply\" для функций.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "Убедитесь, что при импорте используется правильный регистр.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Убедитесь, что каждый файл можно безопасно перенести, не полагаясь на другой импорт.", "Ensure_use_strict_is_always_emitted_6605": "Убедитесь, что всегда используется \"use strict\".", + "Entering_conditional_exports_6413": "Ввод условного экспорта.", "Entry_point_for_implicit_type_library_0_1420": "Точка входа для библиотеки неявных типов \"{0}\"", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Точка входа для библиотеки неявных типов \"{0}\" с идентификатором пакета \"{1}\"", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Точка входа для библиотеки типов \"{0}\", указанная в compilerOptions", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Объявления перечислений можно объединять только с пространствами имен или другими объявлениями перечислений.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Все объявления перечислений должны иметь значение const или отличное от const.", "Enum_member_expected_1132": "Ожидался элемент перечисления.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Член перечисления, следующий за небуквенным числовым элементом, должен иметь инициализатор, если включена опция \"isolatedModules\".", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Инициализаторы членов перечисления должны быть вычислимыми без ссылок на внешние символы с помощью --isolatedDeclarations.", "Enum_member_must_have_initializer_1061": "У элемента перечисления должен быть инициализатор.", "Enum_name_cannot_be_0_2431": "Имя перечисления не может иметь значение \"{0}\".", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Тип перечисления \"{0}\" имеет элементы с инициализаторами, которые не являются литералами.", "Errors_Files_6041": "Файлы ошибок", + "Escape_sequence_0_is_not_allowed_1488": "Escape-последовательность ' {0} ' не разрешена.", "Examples_Colon_0_6026": "Примеры: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Чрезмерная сложность сравнения типов ' {0} ' и ' {1} '.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Чрезмерная глубина стека при сравнении типов \"{0}\" и \"{1}\".", + "Exiting_conditional_exports_6416": "Выход из условного экспорта.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Ожидается аргументов типа: {0}–{1}. Укажите их с тегом \"@extends\".", "Expected_0_arguments_but_got_1_2554": "Ожидалось аргументов: {0}, получено: {1}.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Ожидаемое число аргументов — {0}, фактическое — {1}. Возможно, вы забыли указать void в аргументе типа в Promise?", "Expected_0_type_arguments_but_got_1_2558": "Ожидались аргументы типа {0}, получены: {1}.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Ожидается аргументов типа: {0}. Укажите их с тегом \"@extends\".", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Ожидался 1 аргумент, получено 0. Для \"new Promise()\" требуется указание JSDoc, чтобы создать \"resolve\" с возможностью вызова без аргументов.", + "Expected_a_Unicode_property_name_1523": "Ожидается имя свойства в Юникоде.", + "Expected_a_Unicode_property_name_or_value_1527": "Ожидается имя или значение свойства в Юникоде.", + "Expected_a_Unicode_property_value_1525": "Ожидается значение свойства Unicode.", + "Expected_a_capturing_group_name_1514": "Ожидается имя группы захвата.", + "Expected_a_class_set_operand_1520": "Ожидается операнд набора классов.", "Expected_at_least_0_arguments_but_got_1_2555": "Ожидалось аргументов не меньше: {0}, получено: {1}.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "Ожидался соответствующий закрывающий тег JSX для \"{0}\".", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Ожидался соответствующий закрывающий тег фрагмента JSX.", "Expected_for_property_initializer_1442": "Требуется \"=\" для инициализатора свойства.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Ожидаемый тип поля \"{0}\" в \"package.json\" должен быть \"{1}\", получен \"{2}\".", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Экспериментальная поддержка для декораторов — это функция, которая будет изменена в будущем выпуске. Задайте параметр \"experimentalDecorators\" в \"tsconfig\" или \"jsconfig\", чтобы удалить это предупреждение.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Явно указанный тип разрешения модуля: \"{0}\".", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Невозможно выполнить возведение в степень для значений \"bigint\", если для параметра \"target\" не задана версия \"es2016\" или более поздняя версия.", "Export_0_from_module_1_90059": "Экспорт \"{0}\" из модуля \"{1}\"", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "Экспортированная переменная \"{0}\" имеет или использует закрытое имя \"{1}\".", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Экспорт и назначения экспорта не разрешены в улучшениях модуля.", "Expression_expected_1109": "Ожидалось выражение.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Выражение должно быть заключено в круглые скобки, чтобы его можно было использовать в качестве декоратора.", "Expression_or_comma_expected_1137": "Ожидалось выражение или запятая.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Выражение создает тип кортежа, который слишком большой для представления.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Выражение создает тип объединения, который слишком сложен для представления.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Разрешение выражения дает идентификатор \"_super\", который используется компилятором для получения ссылки на базовый класс.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Выражение разрешается в объявление переменной \"_newTarget\", которое компилятор использует для получения ссылки на метасвойство \"new.target\".", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Разрешение выражения дает объявление переменной \"_this\", которое используется компилятором для получения ссылки this.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Тип выражения не может быть выведен с помощью --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Предложение Extends не может содержать выражение с --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Предложение extends для выведенного типа \" {0} \" имеет или использует частное имя \" {1} \".", + "Extract_base_class_to_variable_90064": "Извлечь базовый класс в переменную", + "Extract_binding_expressions_to_variable_90066": "Извлечь выражения привязки в переменную", "Extract_constant_95006": "Извлечь константу", + "Extract_default_export_to_variable_90065": "Извлечение экспорта по умолчанию в переменную", "Extract_function_95005": "Извлечь функцию", "Extract_to_0_in_1_95004": "Извлечь в {0} в {1}", "Extract_to_0_in_1_scope_95008": "Извлечь в {0} в области {1}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Извлечь в интерфейс", "Extract_to_type_alias_95078": "Извлечь в псевдоним типа", "Extract_to_typedef_95079": "Извлечь в typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Извлечь в переменную и заменить на \"{0} как typeof {0}\"", "Extract_type_95077": "Тип Extract", "FILE_6035": "ФАЙЛ", "FILE_OR_DIRECTORY_6040": "Файл или каталог", - "Failed_to_parse_file_0_Colon_1_5014": "Не удалось проанализировать файл \"{0}\": {1}.", + "Failed_to_find_peerDependency_0_6283": "Не удалось найти peerDependency \"{0}\".", + "Failed_to_resolve_under_condition_0_6415": "Не удалось разрешить при условии \"{0}\".", "Fallthrough_case_in_switch_7029": "Случай передачи управления в операторе switch.", "File_0_does_not_exist_6096": "Файл \"{0}\" не существует.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Согласно ранее кэшированным поискам, файл \"{0}\" не существует.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "Файл \"{0}\" существует — используйте его как результат разрешения имени.", "File_0_exists_according_to_earlier_cached_lookups_6239": "Согласно ранее кэшированным поискам, файл \"{0}\" существует.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Файл \"{0}\" существует — используйте его как результат разрешения имени.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Файл \"{0}\" имеет неподдерживаемое расширение. Поддерживаются только следующие расширения: {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Файл \"{0}\" имеет неподдерживаемое разрешение, поэтому будет пропущен.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" является файлом JavaScript. Вы хотели включить параметр \"allowJs\"?", "File_0_is_not_a_module_2306": "Файл \"{0}\" не является модулем.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Файл \"{0}\" отсутствует в списке файлов проекта \"{1}\". Проекты должны перечислять все файлы или использовать шаблон включения.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Файл \"{0}\" отсутствует в \"rootDir\" \"{1}\". Все исходные файлы должны находиться в каталоге \"rootDir\".", "File_0_not_found_6053": "Файл \"{0}\" не найден.", "File_Management_6245": "Управление файлами", + "File_appears_to_be_binary_1490": "Файл выглядит двоичным.", "File_change_detected_Starting_incremental_compilation_6032": "Обнаружено изменение в файле. Запускается инкрементная компиляция...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Файл является модулем CommonJS, так как \"{0}\" не содержит поле \"type\"", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Файл является модулем CommonJS, так как \"{0}\" содержит поле \"type\", значение которого отличается от \"module\"", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Файл представляет собой выходные данные для источника ссылки на проект \"{0}\"", "File_is_source_from_referenced_project_specified_here_1416": "Файл представляет собой источник для указанного здесь проекта, на который указывает ссылка.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Файл с именем \"{0}\" отличается от уже включенного файла с именем \"{1}\" только регистром.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Имя файла \"{0}\" имеет расширение \"{1}\" — поиск \"{2}\".", "File_name_0_has_a_1_extension_stripping_it_6132": "У имени файла \"{0}\" есть расширение \"{1}\"; расширение удаляется.", "File_redirects_to_file_0_1429": "Файл перенаправляется в файл \"{0}\"", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Спецификация файла не может содержать родительский каталог (\"..\"), который указывается после рекурсивного подстановочного знака каталога (\"**\"): \"{0}\".", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "Исправить все выражения, где может отсутствовать \"await\"", "Fix_all_implicit_this_errors_95107": "Исправить все ошибки неявного this", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Исправьте все неправильные возвращаемые типы асинхронных функций.", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Циклы \"For await\" нельзя использовать внутри статического блока класса.", + "Fix_all_with_type_only_imports_95182": "Исправить все с помощью импорта только по типу", "Found_0_errors_6217": "Найдено ошибок: {0}.", "Found_0_errors_Watching_for_file_changes_6194": "Найдено ошибок: {0}. Отслеживаются изменения в файлах.", "Found_0_errors_in_1_files_6261": "Обнаружены ошибки ({0}) в файлах ({1}).", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Обнаружены {0} ошибки в этом же файле, начиная с: {1}", "Found_1_error_6216": "Найдено ошибок: 1.", "Found_1_error_Watching_for_file_changes_6193": "Найдена одна ошибка. Отслеживаются изменения в файлах.", - "Found_1_error_in_1_6259": "Обнаружена 1 ошибка в {1}", + "Found_1_error_in_0_6259": "Обнаружена 1 ошибка в {0}", "Found_package_json_at_0_6099": "Обнаружен package.json в \"{0}\".", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Объявления функций не разрешены в блоках в строгом режиме при нацеливании ES3 или ES5.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Объявления функций не разрешены в блоках в строгом режиме при нацеливании ES3 или ES5. Определения класса автоматически появляются в строгом режиме.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Объявления функций не разрешены в блоках в строгом режиме при нацеливании ES3 или ES5. Модули автоматически появляются в строгом режиме.", + "Found_peerDependency_0_with_1_version_6282": "Обнаружена peerDependency \"{0}\" с версией \"{1}\".", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\".", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Определения класса автоматически появляются в строгом режиме.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Модули автоматически появляются в строгом режиме.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Выражение функции, у которого нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Реализация функции отсутствует либо не идет сразу после объявления.", "Function_implementation_name_must_be_0_2389": "Имя реализации функции должно иметь значение \"{0}\".", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Функция неявно имеет тип возвращаемого значения any, так как у нее нет заметки с типом возвращаемого значения, а также на нее прямо или косвенно указывает ссылка в одном из ее выражений \"return\".", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "В функции отсутствует завершающий оператор return, а тип возвращаемого значения не включает \"undefined\".", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Функция должна иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", "Function_not_implemented_95159": "Функция не реализована.", "Function_overload_must_be_static_2387": "Перегрузка функции должна быть статической.", "Function_overload_must_not_be_static_2388": "Перегрузка функции не должна быть статической.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Ожидался идентификатор.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Ожидался идентификатор. Значение \"__esModule\" зарезервировано как экспортируемый маркер при преобразовании модулей ECMAScript.", "Identifier_or_string_literal_expected_1478": "Ожидался идентификатор или строковый литерал.", + "Identifier_string_literal_or_number_literal_expected_1496": "Ожидается идентификатор, строковый или числовой литерал.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Если пакет \"{0}\" фактически предоставляет этот модуль, рекомендуется отправить запрос на вытягивание, чтобы изменить \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Если пакет \"{0}\" действительно предоставляет этот модуль, попробуйте добавить новый файл объявления (. d. TS), содержащий \"declare module\" \"{1}\";`", "Ignore_this_error_message_90019": "Пропустите это сообщение об ошибке", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "Реализуйте интерфейс \"{0}\"", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Предложение Implements экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Неявное преобразование \"symbol\" в \"string\" приведет к сбою во время выполнения. Рекомендуется заключить это выражение в \"String(...)\".", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Импорт \"{0}\" конфликтует с глобальным значением, используемым в этом файле, поэтому его необходимо объявить с импортом только по типу, когда включен \"isolatedModules\".", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Импорт \"{0}\" конфликтует с локальным значением, поэтому его необходимо объявить с импортом только по типу, если включен \"isolatedModules\".", "Import_0_from_1_90013": "Импорт \"{0}\" из \"{1}\"", "Import_assertion_values_must_be_string_literal_expressions_2837": "Значения утверждения импорта должны быть выражениями строковых литералов.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Утверждения импорта не разрешены для операторов, которые транскомпилируются в вызовы \"require\" в CommonJS.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "Утверждения импорта поддерживаются только в случае, когда для параметра \"--module\" задано значение \"esnext\" или \"nodenext\".", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Утверждения импорта не допускаются для операторов, которые компилируются в вызовы \"require\" CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "Утверждения импорта поддерживаются только в том случае, если для параметра \"--module\" установлено значение \"esnext\", \"nodenext\" или \"preserve\".", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Утверждения импорта не могут использоваться с импортом или экспортом, затрагивающими только тип.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Назначение импорта невозможно использовать при разработке для модулей ECMAScript. Попробуйте использовать \"import * as ns from \"mod\", \"import {a} from \"mod\", \"import d from \"mod\" или другой формат модуля.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Значения атрибутов импорта должны быть строковыми литеральными выражениями.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Атрибуты импорта не разрешены в операторах, которые компилируются в вызовы \"require\" CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "Атрибуты импорта поддерживаются, только если для параметра --module установлено значение \"esnext\", \"nodenext\" или \"preserve\".", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Атрибуты импорта нельзя использовать с импортом или экспортом только по типу.", "Import_declaration_0_is_using_private_name_1_4000": "Объявление импорта \"{0}\" использует закрытое имя \"{1}\".", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Объявление импорта конфликтует с локальным объявлением \"{0}\".", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Объявления импорта в пространстве имен не могут иметь ссылки на модуль.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Включить файлы исходных карт в создаваемый код JavaScript.", "Includes_imports_of_types_referenced_by_0_90054": "Включает импорт типов, на которые ссылается \"{0}\"", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "При включении --watch, -w начнет отслеживание изменений файла в текущем проекте. После установки можно настроить режим просмотра с помощью:", + "Incomplete_quantifier_Digit_expected_1505": "Неполный квантификатор. Ожидалась цифра.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "В типе \"{1}\" отсутствует сигнатура индекса для типа \"{0}\".", "Index_signature_in_type_0_only_permits_reading_2542": "Сигнатура индекса в типе \"{0}\" разрешает только чтение.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Все отдельные объявления в объединенном объявлении \"{0}\" должны быть экспортированными или локальными.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Выведите типы параметров на основании их использования", "Infer_this_type_of_0_from_usage_95080": "Определить тип \"this\" для \"{0}\" из использования", "Infer_type_of_0_from_usage_95011": "Выведите тип \"{0}\" на основании его использования", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Вывод из выражений класса не поддерживается с использованием --isolatedDeclarations.", "Initialize_property_0_in_the_constructor_90020": "Инициализируйте свойство \"{0}\" в конструкторе", "Initialize_static_property_0_90021": "Инициализируйте статическое свойство \"{0}\"", "Initializer_for_property_0_2811": "Инициализатор для свойства \"{0}\"", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Инициализатор не предоставляет значения для элемента привязки, который не имеет значения по умолчанию.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Инициализаторы не разрешены в окружающих контекстах.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Инициализирует проект TypeScript и создает файл \"tsconfig.json\".", + "Inline_variable_95184": "Встроенная переменная", "Insert_command_line_options_and_files_from_a_file_6030": "Вставка параметров командной строки и файлов из файла.", "Install_0_95014": "Установить \"{0}\"", "Install_all_missing_types_packages_95033": "Установить все отсутствующие пакеты типов", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Недопустимое имя модуля в улучшении, не удается найти модуль \"{0}\".", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Недопустимая необязательная цепочка из нового выражения. Вы хотели вызвать ''{0}()''?", "Invalid_reference_directive_syntax_1084": "Недопустимый синтаксис директивы reference.", + "Invalid_syntax_in_decorator_1498": "Недопустимый синтаксис в декораторе.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Недопустимое использование \"{0}\". Его нельзя использовать внутри статического блока класса.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Недопустимое использование \"{0}\". Модули автоматически находятся в строгом режиме.", "Invalid_use_of_0_in_strict_mode_1100": "Недопустимое использование \"{0}\" в строгом режиме.", + "Invalid_value_for_ignoreDeprecations_5103": "Недопустимое значение для \"--ignoreDeprecations\".", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Недопустимое значение для jsxFactory. \"{0}\" не является допустимым идентификатором или полным именем.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Недопустимое значение \"jsxFragmentFactory\". \"{0}\" не является допустимым идентификатором или полным именем.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Недопустимое значение для \"--reactNamespace\". \"{0}\" не является допустимым идентификатором.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Тип элемента \"{0}\" не является допустимым элементом JSX.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Тип экземпляра \"{0}\" не является допустимым элементом JSX.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Тип возвращаемого значения \"{0}\" не является допустимым элементом JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Его тип \"{0}\" не является допустимым типом элемента JSX.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Параметр \"@{0} {1}\" JSDoc не соответствует предложению \"extends {2}\".", "JSDoc_0_is_not_attached_to_a_class_8022": "Параметр \"@{0}\" JSDoc не связан с классом.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" может использоваться только в последнем параметре сигнатуры.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "У тега \"@param\" JSDoc есть имя \"{0}\", но параметр с таким именем отсутствует.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Тег \"@param\" JSDoc имеет имя \"{0}\", но параметра с таким именем не существует. Он совпадал бы с \"arguments\", если бы у него был указан тип массива.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc можно преобразовать в тип TypeScript.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "У тега \"@typedef\" JSDoc должна быть аннотация типа, или после него должны стоять теги \"@property\" или \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Определения типов JSDoc можно преобразовать в типы TypeScript.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Типы JSDoc можно использовать только в комментариях в документации.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Типы JSDoc могут быть преобразованы в типы TypeScript.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Атрибутам JSX должно назначаться только непустое \"expression\".", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Список папок, определения типов из которых будут включены.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Список корневых папок, объединенное содержимое которых представляет структуру проекта во время выполнения.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Загружается \"{0}\" из корневого каталога \"{1}\"; расположение кандидата: \"{2}\".", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Загружается модуль \"{0}\" из папки \"node_modules\", тип целевого файла: \"{1}\".", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Загружается модуль в виде файла или папки, расположение модуля-кандидата: \"{0}\", тип целевого файла: \"{1}\".", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Загрузка модуля \"{0}\" из папки \"node_modules\", типы целевых файлов: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Загрузка модуля как файла или папки, расположение модуля-кандидата \"{0}\", целевые типы файлов: {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Языковой стандарт должен иметь форму <язык> или <язык>–<территория>. Например, \"{0}\" или \"{1}\".", "Log_paths_used_during_the_moduleResolution_process_6706": "Пути к журналу, используемые в процессе \"moduleResolution\".", "Longest_matching_prefix_for_0_is_1_6108": "Самый длинный соответствующий префикс для \"{0}\": \"{1}\".", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Сделать так, чтобы keyof возвращал только строки, а не строки, числа или символы. Устаревший вариант.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Сделайте вызов \"super()\" первой инструкцией в конструкторе", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Сопоставленный объект неявно имеет тип шаблона \"любой\".", + "Mark_array_literal_as_const_90070": "Пометить литерал массива как константу", "Matched_0_condition_1_6403": "Соответствие: \"{0}\", условие: \"{1}\".", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Сопоставление по умолчанию включает шаблон '**/*'", "Matched_by_include_pattern_0_in_1_1407": "Соответствует шаблону включения \"{0}\" в \"{1}\".", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Метод \"{0}\" не может иметь реализацию, так как он отмечен в качестве абстрактного.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Метод \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Метод \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Метод должен иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", "Method_not_implemented_95158": "Метод не реализован.", "Modifiers_cannot_appear_here_1184": "Здесь невозможно использовать модификаторы.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Модуль \"{0}\" можно только импортировать по умолчанию с помощью флага \"{1}\"", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "В модуле \"{0}\" нет экспортированного члена \"{1}\". Возможно, вы хотели вместо этого использовать \"import {1} from {0}\"?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Модуль \"{0}\" скрыт локальным объявлением с таким же именем.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Модуль \"{0}\" использует параметр \"export =\" и не может использоваться с параметром \"export *\".", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "Модуль \"{0}\" был разрешен в окружающий модуль, объявленный в \"{1}\", так как этот файл не был изменен.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Модуль \"{0}\" был разрешен как локально объявленный окружающий модуль в файле \"{1}\".", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Модуль \"{0}\" разрешен в \"{1}\", но \"--allowArbitraryExtensions\" не установлен.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--jsx\" не задан.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--resolveJsonModule\" не используется.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Имена объявлений модулей могут использовать только строки в кавычках «» или \"\".", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "Произошел сбой при разрешении модуля с помощью \"rootDirs\".", "Modules_6244": "Модули", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Переместить модификаторы элементов маркированного кортежа в метки", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Переместите выражение из экспорта по умолчанию в переменную и добавьте к нему аннотацию типа.", "Move_to_a_new_file_95049": "Переместить в новый файл", + "Move_to_file_95178": "Переместить в файл", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Использовать несколько последовательных числовых разделителей запрещено.", "Multiple_constructor_implementations_are_not_allowed_2392": "Не разрешается использование нескольких реализаций конструкторов.", "NEWLINE_6061": "НОВАЯ СТРОКА", "Name_is_not_valid_95136": "Недопустимое имя", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Именованные группы захвата доступны только при настройке \"ES2018\" или более поздней версии.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Именованные группы захвата с одинаковым именем должны быть взаимоисключающими.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Именованное свойство \"{0}\" содержит типы \"{1}\" и \"{2}\", которые не являются идентичными.", "Namespace_0_has_no_exported_member_1_2694": "Пространство имен \"{0}\" не содержит экспортированный элемент \"{1}\".", "Namespace_must_be_given_a_name_1437": "Пространству имен должно быть задано имя.", "Namespace_name_cannot_be_0_2819": "Имя пространства имен не может быть \"{0}\".", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Пространства имен не допускаются в глобальных файлах сценариев, если включено \"{0}\". Если этот файл не предназначен для использования в качестве глобального сценария, установите для параметра \"moduleDetection\" значение \"force\" или добавьте пустой оператор \"export {}\".", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "К параметрам \"this\" нельзя применять декораторы и модификаторы.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Ни один конструктор базового класса не имеет указанного числа аргументов типа.", "No_constituent_of_type_0_is_callable_2755": "Нет составляющей типа \"{0}\", которую можно вызвать.", "No_constituent_of_type_0_is_constructable_2759": "Нет составляющей типа \"{0}\", которую можно создать.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Ни одна перегрузка не соответствует этому вызову.", "No_type_could_be_extracted_from_this_type_node_95134": "Не удалось извлечь тип из этого узла типа.", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Не существует значение в области для собирательного свойства \"{0}\". Либо объявите его, либо укажите инициализатор.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Класс \"{0}\", не являющийся абстрактным, не реализует наследуемый абстрактный элемент \"{1}\" класса \"{2}\".", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Неабстрактный класс ' {0} ' не реализует унаследованный абстрактный член {1} из класса ' {2} '.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2} и {3} других.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Выражение неабстрактного класса не реализует унаследованный абстрактный элемент \"{0}\" класса \"{1}\".", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1} и {2} других.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Утверждения, отличные от NULL, можно использовать только в файлах TypeScript.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Неотносительные пути не допускаются, если не задано значение параметра baseUrl. Вы забыли указать начальные символы \"./\"?", "Non_simple_parameter_declared_here_1348": "Здесь объявлен не простой параметр.", "Not_all_code_paths_return_a_value_7030": "Не все пути к коду возвращают значение.", "Not_all_constituents_of_type_0_are_callable_2756": "Не все составляющие типа \"{0}\" можно вызвать.", "Not_all_constituents_of_type_0_are_constructable_2760": "Не все составляющие типа \"{0}\" можно создать.", + "Numbers_out_of_order_in_quantifier_1506": "Неупорядоченные числа в квантификаторе.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Числовые литералы с абсолютными значениями, равными 2^53 или более, слишком велики для точного представления в виде целых чисел.", "Numeric_separators_are_not_allowed_here_6188": "Числовые разделители здесь запрещены.", "Object_is_of_type_unknown_2571": "Объект имеет тип \"Неизвестный\".", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Объектный литерал может использовать только известные свойства. \"{0}\" не существует в типе \"{1}\".", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Объектный литерал может указывать только известные свойства, но \"{0}\" не существует в типе \"{1}\". Вы хотели записать \"{2}\"?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Свойство объектного литерала \"{0}\" неявно имеет тип \"{1}\".", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Объекты, содержащие сокращенные свойства, не могут быть выведены с помощью --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Объекты, содержащие назначения распространения, не могут быть выведены с помощью --isolatedDeclarations.", "Octal_digit_expected_1178": "Ожидалась восьмеричная цифра.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Литералы восьмеричного типа должны использовать синтаксис ES2015. Используйте синтаксис \"{0}\".", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Восьмеричные литералы запрещены в инициализаторах членов перечисления. Используйте синтаксис \"{0}\".", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Восьмеричные литералы запрещено использовать в строгом режиме.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "Восьмеричные литералы недоступны при выборе целевой платформы ECMAScript 5 и более поздних. Используйте синтаксис \"{0}\".", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Восьмеричные escape-последовательности и обратные ссылки не допускаются в классе символов. Если это должна быть escape-последовательность, используйте синтаксис \"{0}\".", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Восьмеричные escape-последовательности не допускаются. Используйте синтаксис \"{0}\".", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Восьмеричные литералы не допускаются. Используйте синтаксис \"{0}\".", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Одно значение \"{0}.{1}\" - это строка \"{2}\", а второе предполагается как неизвестное числовое значение.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "В операторе for...in разрешено только одно объявление переменной.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "В операторе for...of разрешено только одно объявление переменной.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "С помощью ключевого слова new можно вызвать только функцию void.", "Only_ambient_modules_can_use_quoted_names_1035": "Имена в кавычках могут использоваться только во внешних модулях.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Только модули amd и system поддерживаются вместе с --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "С помощью --isolatedDeclarations можно указать только const-массивы.", "Only_emit_d_ts_declaration_files_6014": "Порождаются только файлы объявлений \".d.ts\".", - "Only_named_exports_may_use_export_type_1383": "\"export type\" может использоваться только в именованном экспорте.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Только числовые перечисления могут иметь вычисляемые элементы, но это выражение имеет тип \"{0}\". Если вы не хотите проверять полноту, рекомендуется использовать вместо этого объектный литерал.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Вывод только файлов d.ts, но не файлов JavaScript.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Через ключевое слово super доступны только общие и защищенные методы базового класса.", "Operator_0_cannot_be_applied_to_type_1_2736": "Не удается применить операнд \"{0}\" к типу \"{1}\".", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Оператор \"{0}\" невозможно применить к типам \"{1}\" и \"{2}\".", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Операторы не должны быть смешанными внутри класса символов. Вместо этого перенесите его во вложенный класс.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Отключить проект от проверки ссылок на несколько проектов при редактировании.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Параметр \"{0}={1}\" удален. Удалите его из конфигурации.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Параметр \"{0}={1}\" является нерекомендуемым и перестанет работать в TypeScript {2}. Укажите compilerOption \"\"ignoreDeprecations\": \"{3}\"\", чтобы отключить эту ошибку.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"false\" или \"null\" для этого параметра в командной строке.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"null\" для этого параметра в командной строке.", + "Option_0_can_only_be_specified_on_command_line_6266": "Параметр \"{0}\" может быть указан только в командной строке.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Параметр \"{0}\" можно использовать только при указании \"--inlineSourceMap\" или \"--sourceMap\".", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Опцию \"{0}\" можно использовать, только если для параметра \"moduleResolution\" установлено значение \"node16\", \"nodenext\" или \"bundler\".", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "Параметр \"{0}\" можно использовать только в том случае, если для параметра \"module\" установлено значение \"preserve\" или \"es2015\" или более поздней версии.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Параметр \"{0}\" не может быть указан, если параметр jsx имеет значение \"{1}\".", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "Параметр \"{0}\" не может быть указан, если параметр \"target\" имеет значение \"ES3\".", "Option_0_cannot_be_specified_with_option_1_5053": "Параметр \"{0}\" невозможно указать с помощью параметра \"{1}\".", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Параметр \"{0}\" невозможно указать без указания параметра \"{1}\".", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Параметр \"{0}\" нельзя указывать без указания параметра \"{1}\" или \"{2}\".", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Параметр \"{0}\" удален. Удалите его из конфигурации.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Параметр \"{0}\" является нерекомендуемым и перестанет работать в TypeScript {1}. Укажите compilerOption \"\"ignoreDeprecations\": \"{2}\"\", чтобы отключить эту ошибку.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Параметр \"{0}\" является избыточным и не может быть указан с параметром \"{1}\".", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "Параметр \"allowImportingTsExtensions\" можно использовать, только если установлен параметр \"noEmit\" или \"emitDeclarationOnly\".", "Option_build_must_be_the_first_command_line_argument_6369": "Параметр \"--build\" должен быть первым аргументом командной строки.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Параметр \"--incremental\" можно указать только с помощью tsconfig, выполнив выпуск в отдельный файл или если указан параметр \"--tsBuildInfoFile\".", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Параметр isolatedModules можно использовать, только если указан параметр --module или если параметр target — ES2015 или выше.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Параметр \"preserveConstEnums\" не может быть отключен, если включен параметр \"isolatedModules\".", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "Параметр \"preserveValueImports\" можно использовать лишь в случае, если для параметра \"module\" установлено значение \"es2015\" или более позднее.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Для параметра \"moduleResolution\" должно быть установлено (или оставлено неопределенным) значение \"{0}\", если для параметра \"module\" установлено значение \"{1}\".", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Для параметра \"module\" должно быть установлено значение \"{0}\", если для параметра \"moduleResolution\" установлено значение \"{1}\".", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Параметр \"preserveConstEnums\" нельзя отключить, если включен параметр \"{0}\".", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Параметр project не может быть указан вместе с исходными файлами в командной строке.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Параметр \"--resolveJsonModule\" можно указывать, только когда для создания кода модуля указано значение \"commonjs\", \"amd\", \"es2015\" или \"esNext\".", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Параметр \"--resolveJsonModule\" нельзя указать без стратегии разрешения модуля node.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Параметр \"--resolveJsonModule\" нельзя указать, если для параметра \"moduleResolution\" установлено значение \"classic\".", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Параметр \"--resolveJsonModule\" не может быть указан, если для параметра \"module\" установлено значение \"none\", \"system\" или \"umd\".", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "Параметр \"tsBuildInfoFile\" нельзя указать без указания параметра \"incremental\" или \"composite\" или, если не запущен \"tsc -b\".", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Параметр \"verbatimModuleSyntax\" нельзя использовать, если для параметра \"module\" установлено значение \"UMD\", \"AMD\" или \"System\".", "Options_0_and_1_cannot_be_combined_6370": "Параметры \"{0}\" и \"{1}\" не могут использоваться одновременно.", "Options_Colon_6027": "Параметры:", "Output_Formatting_6256": "Форматирование выходных данных", "Output_compiler_performance_information_after_building_6615": "Вывод сведений о производительности компиляторов после сборки.", "Output_directory_for_generated_declaration_files_6166": "Выходной каталог для создаваемых файлов объявления.", - "Output_file_0_from_project_1_does_not_exist_6309": "Выходной файл \"{0}\" из проекта \"{1}\" не существует", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Выходной файл \"{0}\" не создан из исходного файла \"{1}\".", "Output_from_referenced_project_0_included_because_1_specified_1411": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как указан \"{1}\".", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как для параметра \"--module\" указано значение \"none\".", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Ожидалось объявление параметра.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Параметр имеет имя, но не тип. Возможно, вы хотели использовать \"{0}: {1}\"?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Модификаторы параметров можно использовать только в файлах TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Параметр должен иметь явную аннотацию типа с --isolatedDeclarations.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Печать имен созданных файлов после компиляции.", "Print_this_message_6017": "Напечатайте это сообщение.", "Private_accessor_was_defined_without_a_getter_2806": "Частный метод доступа был определен без метода получения.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Частное поле \"{0}\" должно быть объявлено во включающем классе.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Закрытые идентификаторы запрещено использовать в объявлениях переменных.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Закрытые идентификаторы запрещено использовать вне тела классов.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Закрытые идентификаторы разрешены только в теле класса и могут использоваться только как часть объявления члена класса, доступа к свойствам или левой стороны выражения \"in\"", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Закрытые идентификаторы доступны только при разработке для ECMAScript 2015 или более поздних версий.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Закрытые идентификаторы не могут использоваться в качестве параметров.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Не удается обратиться к закрытому или защищенному члену \"{0}\" в параметре типа.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" содержит ошибки", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" не была собрана", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "Проект \"{0}\" принудительно перестраивается", + "Project_0_is_out_of_date_because_1_6420": "Проект \"{0}\" устарел по причине {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что файл \"{2}\" был корневым файлом компиляции, но больше им не является.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что программе необходимо сообщать об ошибках.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Проект \"{0}\" устарел, так как файл buildinfo \"{1}показывает, что некоторые изменения не переданы.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает на изменения в параметрах компилятора.", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Проект \"{0}\" требует обновления, так как не обновлена его зависимость \"{1}\"", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Проект \"{0}\" устарел, так как выходные данные \"{1}\" старше входных данных \"{2}\".", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Проект \"{0}\" требует обновления, так как выходного файла \"{1}\" не существует", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Проект \"{0}\" устарел, так как выходные данные для него были созданы с помощью версии \"{1}\", которая отличается от текущей версии \"{2}\"", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "Проект \"{0}\" устарел, так как изменились выходные данные его зависимости \"{1}\"", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Проект \"{0}\" устарел из-за ошибки при чтении файла \"{1}\"", "Project_0_is_up_to_date_6361": "Проект \"{0}\" не требует обновления", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Проект \"{0}\" актуален, так как новейшие входные данные \"{1}\" старше выходных данных \"{2}\".", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "Свойство \"{0}\" используется перед его инициализацией.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Свойство \"{0}\" может не существовать в типе \"{1}\". Вы имели в виду \"{2}\"?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Свойство \"{0}\" атрибута расширения JSX не может быть назначено для целевого свойства.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Свойство \"{0}\" выражения экспортированного класса не может быть частным или защищенным.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Свойство \"{0}\" экспортированного типа анонимного класса не может быть частным или защищенным.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Свойство \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Свойство \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Свойство \"{0}\" типа \"{1}\" не может быть назначено типу индекса \"{2}\" \"{3}\".", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Свойство \"{0}\" перезапишет базовое свойство в \"{1}\". Если это сделано намеренно, добавьте инициализатор. В противном случае добавьте модификатор \"declare\" или удалите избыточное объявление.", "Property_assignment_expected_1136": "Ожидалось назначение свойства.", "Property_destructuring_pattern_expected_1180": "Ожидался шаблон деструктурирования свойства.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Свойство должно иметь явную аннотацию типа с --isolatedDeclarations.", "Property_or_signature_expected_1131": "Ожидалось свойство или сигнатура.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Значение свойства может быть только строковым или числовым литералом, True, False, Null, объектным литералом либо литералом массива.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "Предоставление полной поддержки для итерируемых элементов в for-of, расширение и деструктуризация при выборе целевой платформы ES5 или ES3.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Предоставление полой поддержки итераций в \"for-of\", распространении и деструктуризации при настройке \"ES5\".", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Открытый метод \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Возникновение ошибки, если параметр функции не читается.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Вызывать ошибку в выражениях и объявлениях с подразумеваемым типом any.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Вызвать ошибку в выражениях this с неявным типом any.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Для повторного экспорта типа при указании флага \"--isolatedModules\" требуется использовать \"export type\".", + "Range_out_of_order_in_character_class_1517": "Диапазон не по порядку в классе символов.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Для повторного экспорта типа при включенном \"{0}\", необходимо использовать \"export type\".", + "React_components_cannot_include_JSX_namespace_names_2639": "Компоненты React не могут включать имена пространств имен JSX.", "Redirect_output_structure_to_the_directory_6006": "Перенаправить структуру вывода в каталог.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Уменьшить количество проектов, автоматически загружаемых с помощью TypeScript.", "Referenced_project_0_may_not_disable_emit_6310": "Проект \"{0}\", на который указывает ссылка, не может отключить порождение.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Указанный в ссылке проект \"{0}\" должен иметь следующее значение параметра composite: true.", "Referenced_via_0_from_file_1_1400": "Ссылка с помощью \"{0}\" из файла \"{1}\"", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Относительные пути импорта требуют явных расширений файлов в импорте EcmaScript, когда ''--moduleResolution'' имеет значение ''node16'' или ''nodenext''. Рассмотрите возможность добавления расширения к пути импорта.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Относительные пути импорта требуют явных расширений файлов в импорте EcmaScript, когда ''--moduleResolution'' имеет значение ''node16'' или ''nodenext''. Вы имеете в виду '{0}''?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если '--moduleResolution' имеет значение 'node16' или 'nodenext'. Рассмотрите возможность добавления расширения к пути импорта.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если \"--moduleResolution\" имеет значение \"node16\" или \"nodenext\". Вы хотели использовать \"{0}\"?", "Remove_a_list_of_directories_from_the_watch_process_6628": "Удалить список каталогов из процесса просмотра.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Удалить список файлов из обработки в режиме просмотра.", "Remove_all_unnecessary_override_modifiers_95163": "Удалите все ненужные модификаторы \"override\".", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "Сообщать об ошибках в JS-файлах.", "Report_errors_on_unused_locals_6134": "Сообщать об ошибках в неиспользованных локальных переменных.", "Report_errors_on_unused_parameters_6135": "Сообщать об ошибках в неиспользованных параметрах.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Требовать достаточных аннотаций при экспорте, чтобы другие инструменты могли легко создавать файлы объявлений.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Требовать необъявленные свойства из сигнатур индекса для использования доступа к элементам.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Обязательные параметры типа не могут следовать за необязательными параметрами типа.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Разрешение для модуля \"{0}\" найдено в кэше из расположения \"{1}\".", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Разрешение для директивы ссылки на тип \"{0}\" обнаружено в кэше из расположения \"{1}\".", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Разрешение неродственного имени не удалось; пытаюсь отключить современные функции разрешения узлов, чтобы узнать, нуждается ли библиотека npm в обновлении конфигурации.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Не удалось выполнить разрешение относительного имени; выполняется попытка с помощью \"--moduleResolution bundler\", чтобы узнать, требуется ли для проекта обновление конфигурации.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Разрешать \"keyof\" только в имена свойств со строковым значением (не числа и не символы).", + "Resolved_under_condition_0_6414": "Разрешено в условии \"{0}\".", "Resolving_in_0_mode_with_conditions_1_6402": "Разрешение в режиме {0} с условиями {1}.", "Resolving_module_0_from_1_6086": "======== Идет разрешение модуля \"{0}\" из \"{1}\". ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Идет разрешение имени модуля \"{0}\" относительного к базовому URL-адресу \"{1}\" — \"{2}\".", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог не задан. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог \"{1}\". ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог не задан. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Разрешение директивы ссылки на тип для программы, которая указывает собственный типRoots, пропуская поиск в папке \"node_modules\".", "Resolving_with_primary_search_path_0_6121": "Разрешается с помощью первичного пути поиска \"{0}\".", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Параметр rest \"{0}\" неявно имеет тип any[].", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Параметр rest \"{0}\" неявно имеет тип \"any[]\", но из использования можно определить более подходящий тип.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".", "Rewrite_all_as_indexed_access_types_95034": "Перезаписать все как типы с индексным доступом", "Rewrite_as_the_indexed_access_type_0_90026": "Перезапишите как тип с индексным доступом \"{0}\"", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Правый операнд ?? недоступен, поскольку левый операнд никогда не имеет значения NULL.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Корневой каталог невозможно определить, идет пропуск первичных путей поиска.", "Root_file_specified_for_compilation_1427": "Корневой файл, указанный для компиляции", "STRATEGY_6039": "СТРАТЕГИЯ", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Сохраните файлы .tsbuildinfo, чтобы обеспечить возможность добавочной компиляции проектов.", "Saw_non_matching_condition_0_6405": "Обнаружено несоответствующее условие \"{0}\".", "Scoped_package_detected_looking_in_0_6182": "Обнаружен пакет, относящийся к области; поиск в \"{0}\"", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Поиск во всех родительских каталогах node_modules резервных расширений: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Поиск предпочтительных расширений во всех родительских каталогах node_modules: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "Выделенный фрагмент не является допустимым оператором или операторами.", "Selection_is_not_a_valid_type_node_95133": "Выбранный элемент не является допустимым узлом типа.", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Задать версию языка файла JavaScript для создаваемого файла JavaScript и включения объявлений совместимых библиотек.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Отображение подробных сведений диагностики.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Показать компоненты, которые будут собраны (или удалены, если дополнительно указан параметр \"--clean\")", "Signature_0_must_be_a_type_predicate_1224": "Сигнатура \"{0}\" должна быть предикатом типа.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Объявления подписей можно использовать только в файлах TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Пропустить создание нижестоящих проектов при ошибке в вышестоящем проекте.", "Skip_type_checking_all_d_ts_files_6693": "Пропустить проверку типа всех файлов .d.ts", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Пропуск проверки типа файлов D.ts, включенных в файл TypeScript.", "Skip_type_checking_of_declaration_files_6012": "Пропустить проверку типа файлов объявления.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" содержит ошибки", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" не была собрана", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Пропуск модуля \"{0}\", который выглядит как абсолютный URI, целевые типы файлов: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как указан \"{1}\".", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как для параметра \"--module\" указано значение \"none\".", "Source_has_0_element_s_but_target_allows_only_1_2619": "Число элементов в источнике — {0}, но целевой объект разрешает только {1}.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "Укажите, как работает режим отслеживания TypeScript.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Укажите файлы библиотек для включения в компиляцию.", "Specify_module_code_generation_6016": "Укажите способ создания кода модуля.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Укажите стратегию разрешения модуля: node (Node.js) или classic (TypeScript pre-1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Укажите спецификатор модуля, используемый для импорта функций множителя JSX при использовании \"jsx: react-jsx*\".", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Укажите несколько папок, которые действуют как \"./node_modules/@types\".", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Укажите один или несколько путей или ссылок на модуль узла для файлов базовой конфигурации, от которых наследуются параметры.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Статические элементы не могут ссылаться на параметры типов класса.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Статическое свойство \"{0}\" конфликтует со встроенным свойством \"Function.{0}\" функции-конструктора \"{1}\".", "String_literal_expected_1141": "Ожидался строковый литерал.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Имена импорта и экспорта строковых литералов не поддерживаются, если для флага \"--module\" установлено значение \"es2015\" или \"es2020\".", "String_literal_with_double_quotes_expected_1327": "Ожидается строковый литерал с двойными кавычками.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Стилизовать ошибки и сообщения с помощью цвета и контекста (экспериментальная функция).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Флаги подшаблонов должны присутствовать при наличии знака минус.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Последовательные объявления свойств должны иметь один и тот же тип. Свойство \"{0}\" должно иметь тип \"{1}\", но имеет здесь тип \"{2}\".", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Последующие объявления переменных должны иметь тот же тип. Переменная \"{0}\" должна иметь тип \"{1}\", однако имеет тип \"{2}\".", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Подстановка \"{0}\" для шаблона \"{1}\" содержит неправильный тип, ожидается string, получен \"{2}\".", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Выражения шаблона с тегами запрещено использовать в необязательной цепочке.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Целевой объект разрешает только следующее число элементов — {0}, но источник может иметь больше.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Целевой объект требует следующего числа элементов — {0}, но источник может иметь меньше.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Целевая подпись предоставляет слишком мало аргументов. Ожидал {0} или больше, но получил {1} .", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Модификатор \"{0}\" можно использовать только в файлах TypeScript.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Оператор \"{0}\" невозможно применить к типу Symbol.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Оператор \"{0}\" не разрешен для логических типов. Попробуйте использовать \"{1}\" вместо него.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Свойство \"{0}\" асинхронного итератора должно быть методом.", "The_0_property_of_an_iterator_must_be_a_method_2767": "Свойство \"{0}\" итератора должно быть методом.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Тип Object можно назначить малому количеству других типов. Возможно, вы хотели использовать тип any?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Нельзя ссылаться на объект типа arguments в стрелочной функции ES3 и ES5. Используйте стандартное выражение функции.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "На объект arguments невозможно указать ссылку в асинхронной функции или методе в ES3 и ES5. Попробуйте использовать стандартную функцию или метод.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Флаг Unicode (u) и флаг наборов Unicode (v) не могут быть установлены одновременно.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "На объект 'arguments' нельзя ссылаться в стрелочной функции в ES5. Используйте стандартное выражение функции.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "На объект 'arguments' нельзя ссылаться в асинхронной функции или методе в ES5. Попробуйте использовать стандартную функцию или метод.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Текст оператора if не может быть пустым.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Вызов для этой реализации был выполнен успешно, но сигнатуры реализации перегрузок не видны извне.", "The_character_set_of_the_input_files_6163": "Кодировка входных файлов.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Выводимый тип \"{0}\" ссылается на тип с циклической структурой, которая не может быть элементарно сериализована. Требуется заметка с типом.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Выведенный тип \"{0}\" ссылается на недоступный тип \"{1}\". Требуется аннотация типа.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Выведенный тип этого узла превышает максимальную длину, которую будет сериализовывать компилятор. Требуется указать заметку явного типа.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Инициализатор объявления \"using\" должен быть либо объектом с методом \"[Symbol.dispose]()\", либо иметь значение \"null\" или \"undef\".", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Инициализатор объявления \"await using\" должен быть либо объектом с методом \"[Symbol.asyncDispose]()\" или \"[Symbol.dispose]5D;()\", либо быть \"нулевым\" или \"неопределенным\".", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" существует в нескольких составляющих и является частным в некоторых из них.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" имеет конфликтующие типы в некоторых составляющих.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Ключевое слово intrinsic можно использовать только для объявления внутренних типов, предоставляемых компилятором.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "Последняя перегрузка возвратила следующую ошибку.", "The_last_overload_is_declared_here_2771": "Здесь объявлена последняя перегрузка.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Левый операнд оператора for...in не может быть шаблоном деструктурирования.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Левая часть оператора 'for...in' не может быть объявлением 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Левая часть оператора \"for...in\" не может быть объявлением \"await using\".", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Левый операнд оператора for...in не может использовать аннотацию типа.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Левая часть оператора \"for...in\" не может быть обращением к необязательному свойству.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "В левой части оператора \"for...in\" должна быть переменная или доступ к свойству.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Левый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Левая часть выражения присваивания не может быть обращением к необязательному свойству.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "В левой части выражения назначения должна быть переменная или доступ к свойству.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Левая часть выражения \"instanceof\" должна быть назначена первому аргументу метода \"[Symbol.hasInstance]\" правой части.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Левый операнд выражения instanceof должен иметь тип any, тип объекта или параметр типа.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Языковой стандарт, который используется при отображении сообщений пользователю (например, en-us)", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Максимальная глубина зависимостей для поиска в папке node_modules и загрузки файлов JavaScript.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Корень проекта неоднозначен, но требуется для разрешения записи карты экспорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Корень проекта неоднозначен, но требуется для разрешения записи карты импорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Невозможно обратиться к свойству \"{0}\" в типе \"{1}\" внутри этого класса, так как он затемнен другим закрытым идентификатором с таким же написанием.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Тип возвращаемого значения метода доступа \"get\" должен быть назначен его типу метода доступа \"set\"", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Тип возвращаемого значения функции декоратора параметра должен быть либо void, либо any.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Тип возвращаемого значения функции декоратора свойства должен быть либо void, либо any.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Тип возвращаемого значения асинхронной функции должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Тип возвращаемого значения асинхронной функции или метода должен быть глобальным типом Promise.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Возвращаемое значение асинхронной функции или метода должно иметь глобальный тип Promise. Вы имели в виду \"Promise<{0}>\"?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Правая часть оператора \"for…in\" должна иметь тип \"any\", тип объекта или быть параметром типа, однако указан тип \"{0}\".", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Правый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Правый операнд выражения instanceof должен иметь тип any или тип, который можно назначить типу интерфейса Function.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Правая часть выражения \"instanceof\" должна иметь тип \"любой\", класс, функцию или другой тип, назначаемый типу интерфейса \"Функция\", или тип объекта с методом \"Symbol.hasInstance\".", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Правая часть выражения \"instanceof\" не должна быть выражением экземпляра.", "The_root_value_of_a_0_file_must_be_an_object_5092": "Корневое значение файла \"{0}\" должно быть объектом.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает {0} .", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает как минимум {0} .", "The_shadowing_declaration_of_0_is_defined_here_18017": "Здесь определено объявление затемнения \"{0}\"", "The_signature_0_of_1_is_deprecated_6387": "Сигнатура \"{0}\" \"{1}\" устарела.", "The_specified_path_does_not_exist_Colon_0_5058": "Указанный путь не существует: \"{0}\".", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Невозможно использовать модификатор \"type\" в именованном экпорте, когда в инструкции экспорта используется \"export type\".", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Невозможно использовать модификатор \"type\" в именованном импорте, когда в инструкции импорта используется \"import type\".", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Тип объявления функции должен соответствовать сигнатуре этой функции.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Тип этого выражения не может быть назван без утверждения \"режим разрешения\", что является нестабильной функцией. Используйте ночной TypeScript, чтобы отключить эту ошибку. Попробуйте обновить с помощью \"npm install -D typescript@next\".", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Невозможно сериализовать тип этого узла, поскольку его свойство \"{0}\" не может быть сериализовано.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Возвращаемый тип метода \"{0}()\" асинхронного итератора должен быть обещанием для типа со свойством \"value\".", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Тип, возвращаемый методом \"{0}()\" итератора, должен содержать свойство \"value\".", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Объявление переменной оператора for...in не может содержать инициализатор.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Объявление переменной оператора for...of не может содержать инициализатор.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Оператор with не поддерживается. Все символы в блоке with получат тип any.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Существуют типы в ' {0} ', но этот результат не удалось разрешить с помощью текущей настройки 'moduleResolution'. Рассмотрите возможность обновления до \"node16\", \"nodenext\" или \"bundler\".", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Существуют типы в ' {0} ', но этот результат не удалось разрешить при соблюдении \"экспорта\" package.json. ' {1} ' может потребоваться обновить свой package.json или типизацию.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "В этом регулярном выражении нет группы захвата с именем \" {0} \".", + "There_is_nothing_available_for_repetition_1507": "Нет ничего, что можно было бы повторить.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Свойство \"{0}\" этого тега JSX ожидает один дочерний объект типа \"{1}\", однако было предоставлено несколько дочерних объектов.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Свойство \"{0}\" этого тега JSX ожидает тип \"{1}\", требующий несколько дочерних объектов, однако был предоставлен только один дочерний объект.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении нет групп захвата.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении есть только {0} групп захвата.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Это двоичное выражение никогда не имеет нулевого значения. Вам не хватает скобок?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Этот символ нельзя экранировать в регулярном выражении.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Это сравнение кажется непреднамеренным, поскольку типы \"{0}\" и \"{1}\" не перекрываются.", "This_condition_will_always_return_0_2845": "Это условие всегда возвращает \"{0}\".", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Это условие всегда будет возвращать ''{0}'', так как JavaScript сравнивает объекты по ссылке, а не по значению.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Это условие всегда будет возвращать значение true, поскольку функция \"{0}\" всегда определена.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Это условие будет всегда возвращать значение true, поскольку функция всегда определена. Возможно, вы хотите вызвать ее?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Эту функцию конструктора можно преобразовать в объявление класса.", + "This_expression_is_always_nullish_2871": "Это выражение всегда равно нулю.", "This_expression_is_not_callable_2349": "Это выражение не является вызываемым.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Это выражение не может быть вызвано, так как оно является методом доступа get. Вы хотели использовать его без \"()\"?", "This_expression_is_not_constructable_2351": "Это выражение не может быть построено.", "This_file_already_has_a_default_export_95130": "Этот файл уже имеет экспорт по умолчанию.", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Этот импорт никогда не используется в качестве значения и должен использовать \"import type\", так как для \"importsNotUsedAsValues\" задано значение \"error\".", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Это объявление дополняется другим объявлением. Попробуйте переместить дополняющее объявление в тот же файл.", + "This_kind_of_expression_is_always_falsy_2873": "Подобные выражения всегда ложны.", + "This_kind_of_expression_is_always_truthy_2872": "Такое выражение всегда правдиво.", "This_may_be_converted_to_an_async_function_80006": "Это можно преобразовать в асинхронную функцию.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Этот элемент не может иметь комментарий JSDoc с тегом \"@override\", так как он не объявлен в базовом классе \"{0}\".", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Этот элемент не может иметь комментарий JSDoc с тегом \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет абстрактный метод, объявленный в базовом классе \"{0}\".", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "На этот модуль можно ссылаться только с помощью импортов/экспортов ECMAScript, включив флаг \"{0}\" и сославшись на его экспорт по умолчанию.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Этот модуль объявлен с помощью оператора \"export =\" и может использоваться только с импортом по умолчанию при использовании флажка \"{0}\".", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Эту операцию можно упростить. Эта смена идентична «{0} {1} {2}».", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Эта перегрузка неявно возвращает тип ' {0} ', поскольку в ней отсутствует аннотация типа возвращаемого значения.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Сигнатура перегрузки несовместима с ее сигнатурой реализации.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Этот параметр запрещено использовать с директивой \"use strict\".", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Это свойство параметра должно иметь комментарий JSDoc с тегом \"@override\", так как он переопределяет элемент в базовом классе \"{0}\".", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Это свойство параметра должно иметь модификатор \"override\", так как он переопределяет элемент базового класса \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Этот флаг регулярного выражения нельзя переключить внутри подшаблона.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Этот флаг регулярного выражения доступен только при таргетинге \" {0} \" или более поздней версии.", "This_spread_always_overwrites_this_property_2785": "Это распространение всегда перезаписывает данное свойство.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Добавьте конечную запятую или явное ограничение.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Вместо этого используйте выражение \"AS\".", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или добавьте поле \"type\": \"module\" в \"{1}\".", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Чтобы преобразовать этот файл в модуль ECMAScript, создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Выражения ожидания верхнего уровня разрешены только в том случае, если для параметра \"module\" установлено значение \"es2022\", \"esnext\", \"system\", \"node16\" или \"nodenext\", а для параметра \"цель\" установлено значение \"es2017\" или выше.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Выражения верхнего уровня \"await\" разрешены только в том случае, если для параметра \"module\" установлено значение \"es2022\", \"esnext\", \"system\", \"node16\", \"nodenext\" или \"preserve\", а также для параметра \"target\". установлено значение \"es2017\" или выше.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Операторы верхнего уровня \"await using\" разрешены только в том случае, если для параметра \"module\" установлено значение \"es2022\", \"esnext\", \"system\", \"node16\", \"nodenext\" или \"preserve\", а параметр \"target\" для параметра установлено значение \"es2017\" или выше.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Объявления верхнего уровня в файлах .d.ts должны начинаться с модификатора \"declare\" или \"export\".", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Выражения ожидания верхнего уровня разрешены, только если для параметра \"module\" установлено значение \"es2022\", \"esnext\", \"system\", \"node16\" или \"nodenext\", а для параметра \"target\" установлено значение \"es2017\" или выше.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Циклы верхнего уровня \"for await\" разрешены только в том случае, если для параметра \"module\" установлено значение \"es2022\", \"esnext\", \"system\", \"node16\", \"nodenext\" или \"preserve\", а для параметра \"target\" для параметра установлено значение \"es2017\" или выше.", "Trailing_comma_not_allowed_1009": "Завершающая запятая запрещена.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Транскомпиляция каждого файла как отдельного модуля (аналогично ts.transpileModule).", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Попробуйте использовать команду \"npm i --save-dev @types/{1}\", если он существует, или добавьте новый файл объявления (.d.ts), содержащий \"declare module '{0}';\".", "Trying_other_entries_in_rootDirs_6110": "Попытка использовать другие записи в \"rootDirs\".", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Выполняется попытка замены \"{0}\", расположение модуля кандидата: \"{1}\".", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Имена должны быть заданы для всех членов кортежа или не должны быть заданы ни для одного из членов кортежа.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Тип кортежа \"{0}\" длиной \"{1}\" не имеет элемент с индексом \"{2}\".", "Tuple_type_arguments_circularly_reference_themselves_4110": "Аргументы типа кортежа циклически ссылаются сами на себя.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Итерация типа \"{0}\" может осуществляться только с использованием флага \"--downlevelIteration\" или с параметром \"--target\" \"es2015\" или выше.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "Тип \"{0}\" не содержит соответствующую сигнатуру индекса для типа \"{1}\".", "Type_0_has_no_properties_in_common_with_type_1_2559": "У типа \"{0}\" нет общих свойств с типом \"{1}\".", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Тип \"{0}\" не содержит подписей, к которым применим список аргументов типа.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Тип ' {0} ' является универсальным и может индексироваться только для чтения.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2} и еще {3}.", "Type_0_is_not_a_constructor_function_type_2507": "Тип \"{0}\" не является типом функции конструктора.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "Тип \"{0}\" не является допустимым типом возвращаемого значения асинхронной функции в ES5/ES3, так как он не ссылается на значение конструктора, совместимое с Promise.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Тип ' {0} ' не является допустимым типом возвращаемого значения асинхронной функции в ES5, поскольку он не ссылается на значение конструктора, совместимого с Promise.", "Type_0_is_not_an_array_type_2461": "Тип \"{0}\" не является типом массива.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "Тип \"{0}\" не является типом массива или типом строки.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "{0} не является типом массива или строки или в нем нет метода [Symbol.iterator](), который возвращает итератор.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Вы имели в виду \"{2}\"?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Существует два разных типа с таким именем, но они не связаны.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Тип \"{0}\" не может назначаться типу \"{1}\", как подразумевается заметкой о вариантности.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Тип ' {0} ' не может быть назначен типу ' {1} ', как это требуется для вычисленных значений элементов перечисления.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типу цели.", "Type_0_is_not_comparable_to_type_1_2678": "Тип \"{0}\" невозможно сравнить с типом \"{1}\".", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Ожидался аргумент типа.", "Type_argument_list_cannot_be_empty_1099": "Список аргументов типа не может быть пустым.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Аргументы типа можно использовать только в файлах TypeScript.", - "Type_arguments_cannot_be_used_here_1342": "Использовать аргументы типа здесь недопустимо.", "Type_arguments_for_0_circularly_reference_themselves_4109": "Аргументы типа для \"{0}\" циклически ссылаются сами на себя.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Выражения утверждения типа можно использовать только в файлах TypeScript.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Тип в позиции {0} в источнике не совместим с типом в позиции {1} в целевом объекте.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Типы в позициях {0}–{1} в источнике не совместимы с типом в позиции {2} в целевом объекте.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Тип, содержащий частное имя \" {0} \", нельзя использовать с --isolatedDeclarations.", "Type_declaration_files_to_be_included_in_compilation_6124": "Файлы объявления типа, включаемые в компиляцию.", "Type_expected_1110": "Ожидался тип.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Утверждения импорта типа должны иметь ровно один ключ \"resolution-mode\" со значением \"import\" или \"require\".", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Атрибуты импорта типа должны иметь ровно один ключ — \"режим разрешения\" — со значением \"импорт\" или \"требовать\".", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Создание экземпляра типа является слишком глубоким и, возможно, бесконечным.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "На тип есть прямые или непрямые ссылки в обратном вызове выполнения собственного метода then.", "Type_library_referenced_via_0_from_file_1_1402": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Не удается разрешить сигнатуру декоратора метода при вызове в качестве выражения.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Не удается разрешить сигнатуру декоратора параметра при вызове в качестве выражения.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Не удается разрешить сигнатуру декоратора свойства при вызове в качестве выражения.", + "Undetermined_character_escape_1513": "Неопределенная escape-последовательность.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Неожиданный ' {0} '. Вы хотели избежать этого с помощью обратной косой черты?", "Unexpected_end_of_text_1126": "Неожиданный конец текста.", "Unexpected_keyword_or_identifier_1434": "Непредвиденное ключевое слово или идентификатор.", "Unexpected_token_1012": "Неожиданный токен.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Непредвиденный токен. Возможно, вы хотели использовать \"{'>'}\" или \">\"?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Непредвиденный токен. Возможно, вы хотели использовать \"{'}'}\" или \"}\"?", "Unexpected_token_expected_1179": "Неожиданный токен. Ожидался символ \"{\".", + "Unicode_escape_sequence_cannot_appear_here_17021": "Escape-последовательность Юникода здесь не может присутствовать.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Escape-последовательности Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Выражения значений свойств Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", + "Unknown_Unicode_property_name_1524": "Неизвестное имя свойства Юникода.", + "Unknown_Unicode_property_name_or_value_1529": "Неизвестное имя или значение свойства Юникода.", + "Unknown_Unicode_property_value_1526": "Неизвестное значение свойства Юникода.", "Unknown_build_option_0_5072": "Неизвестный параметр сборки \"{0}\".", "Unknown_build_option_0_Did_you_mean_1_5077": "Неизвестный параметр сборки \"{0}\". Возможно, вы хотели использовать \"{1}\"?", "Unknown_compiler_option_0_5023": "Неизвестный параметр компилятора \"{0}\".", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Неизвестный параметр компилятора \"{0}\". Возможно, вы хотели использовать \"{1}\"?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Неизвестное ключевое слово или идентификатор. Вы имели в виду \"{0}\"?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "Неизвестный параметр excludes. Возможно, вы имели в виду exclude?", + "Unknown_regular_expression_flag_1499": "Неизвестный флаг регулярного выражения.", "Unknown_type_acquisition_option_0_17010": "Неизвестный параметр получения типа, \"{0}\".", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Неизвестный параметр получения типа \"{0}\". Возможно, вы хотели использовать \"{1}\"?", "Unknown_watch_option_0_5078": "Неизвестный параметр контрольного значения \"{0}\".", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Неиспользуемая метка.", "Unused_ts_expect_error_directive_2578": "Неиспользуемая директива \"@ts-expect-error\".", "Update_import_from_0_90058": "Обновить импорт из \"{0}\"", - "Updating_output_of_project_0_6373": "Обновление выходных данных проекта \"{0}\"...", + "Update_modifiers_of_0_90061": "Обновить модификаторы ' {0} '", "Updating_output_timestamps_of_project_0_6359": "Обновление меток времени в выходных данных проекта \"{0}\"...", "Updating_unchanged_output_timestamps_of_project_0_6371": "Обновление меток времени в неизменившихся выходных данных проекта \"{0}\"...", "Use_0_95174": "Использовать \"{0}\".", + "Use_0_instead_5106": "Вместо него используйте '{0}'.", "Use_Number_isNaN_in_all_conditions_95175": "Использовать \"Number.isNaN\" во всех условиях.", "Use_element_access_for_0_95145": "Использовать доступ к элементам для \"{0}\".", "Use_element_access_for_all_undeclared_properties_95146": "Использовать доступ к элементам для всех необъявленных свойств.", + "Use_import_type_95180": "Используйте \"тип импорта\"", "Use_synthetic_default_member_95016": "Используйте искусственный элемент \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Используйте поле \"экспорт\" package.json при разрешении импорта пакетов.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Используйте поле \"импорт\" package.json при разрешении импорта.", + "Use_type_0_95181": "Используйте 'type {0}'", "Using_0_subpath_1_with_target_2_6404": "Использование \"{0}\", вложенный путь: \"{1}\", целевой объект: \"{2}\".", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Использование строки для оператора for...of поддерживается только в ECMAScript 5 и более поздних версиях.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Использование --build,-b заставит TSC вести себя больше как оркестратор сборки, чем как компилятор. Это используется для запуска создания составных проектов, о которых можно узнать больше на {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Ожидалось объявление переменной.", "Variable_declaration_list_cannot_be_empty_1123": "Список объявлений переменной не может быть пустым.", "Variable_declaration_not_allowed_at_this_location_1440": "Объявление переменной в этом расположении запрещено.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Переменная должна иметь явную аннотацию типа с --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Переменные с несколькими объявлениями не могут быть встроены.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Элемент с переменным числом аргументов в позиции {0} в источнике не соответствует элементу в позиции {1} в целевом объекте.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Заметки вариантности поддерживаются только в псевдонимах типов для объектов, функций, конструкторов и сопоставленных типов.", "Version_0_6029": "Версия {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "При проверке типа учитывайте параметры \"null\" и \"undefined\".", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Сохранять ли устаревшие выходные данные консоли в режиме просмотра вместо очистки экрана.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Заключение всех недопустимых символов в контейнер выражений", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Заключите все недопустимые выражения декоратора в круглые скобки.", "Wrap_all_object_literal_with_parentheses_95116": "Заключить все литералы объектов в круглые скобки", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Перенос всех элементов JSX без родительских элементов во фрагмент JSX", "Wrap_in_JSX_fragment_95120": "Перенос во фрагмент JSX", + "Wrap_in_parentheses_95194": "Заключить в круглые скобки", "Wrap_invalid_character_in_an_expression_container_95108": "Заключение недопустимого знака в контейнер выражений", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Заключить следующий текст в круглые скобки, которые должны быть литералом объекта", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Вы можете узнать обо всех параметрах компилятора на {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "Сигнатуры индекса \"{0}\" и \"{1}\" несовместимы.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Операции \"{0}\" и \"{1}\" невозможно использовать одновременно без скобок.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" указаны дважды. Атрибут \"{0}\" будет перезаписан.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "' {0} ' в конце типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "' {0} ' в начале типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Для импорта \"{0}\" необходимо установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", "_0_can_only_be_imported_by_using_a_default_import_2595": "Для импорта \"{0}\" необходимо использовать импорт по умолчанию.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или импорт по умолчанию.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или импорт по умолчанию.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "\"{0}\" не может быть скомпилирован с параметром \"--isolatedModules\", так как он считается глобальным файлом сценария. Добавьте оператор для импорта, экспорта или пустой оператор \"export {}\", чтобы сделать его модулем.", "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" невозможно использовать как компонент JSX.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" невозможно использовать как значение, так как он был экспортирован с помощью \"export type\".", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" невозможно использовать как значение, так как он был импортирован с помощью \"import type\".", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Компоненты \"{0}\" не принимают текст в виде дочерних элементов. Текст в JSX-файле имеет тип \"string\", однако для \"{1}\" ожидается тип \"{2}\".", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Возможно создание экземпляра \"{0}\" с произвольным типом, который может быть не связан с \"{1}\".", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "' {0} ' могут быть объявлены только внутри блока.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Объявления \"{0}\" можно использовать только в файлах TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "' {0} ' могут не иметь шаблонов привязки.", + "_0_declarations_must_be_initialized_1155": "' {0} ' должны быть инициализированы.", "_0_expected_1005": "Ожидалось \"{0}\".", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "' {0} ' имеет строковый тип, но должен иметь синтаксически распознаваемый строковый синтаксис, если включен 'isolatedModules'.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "В \"{0}\" нет экспортированного элемента \"{1}\". Вы имели в виду \"{2}\"?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" неявно имеет тип возвращаемого значения \"{1}\", но из использования можно определить более подходящий тип.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" неявно имеет тип возвращаемого значения any, так как у него нет заметки с типом возвращаемого значения, а также на него прямо или косвенно указана ссылка в одном из его выражений return.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Тип индекса \"{0}\" \"{1}\" не может быть назначен типу индекса \"{2}\" \"{3}\".", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" является примитивом, но \"{1}\" — объект оболочки. Предпочтительно использовать \"{0}\" по мере возможности.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" является типом и не может импортироваться в файлы JavaScript. Используйте \"{1}\" в заметке типа JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "\"{0}\" является типом. Чтобы импортировать его, необходимо использовать импорт, распространяющийся только на тип, если включены параметры \"preserveValueImports\" и \"isolatedModules\".", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "' {0} ' является типом и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "\"{0}\" является неиспользуемым переименованием \"{1}\". Возможно, это должна была быть заметка для типа?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" может быть назначен ограничению типа \"{1}\", но можно создать экземпляр \"{1}\" с другим подтипом ограничения \"{2}\".", "_0_is_automatically_exported_here_18044": "\"{0}\" экспортирован автоматически.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "Список \"{0}\" не может быть пустым.", "_0_modifier_already_seen_1030": "Модификатор \"{0}\" уже встречался.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Модификатор \"{0}\" может присутствовать только в параметре типа у класса, интерфейса или псевдонима типа.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "' {0} ' может появляться только в параметре типа функции, метода или класса.", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Модификатор \"{0}\" не может содержаться в объявлении конструктора.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Модификатор \"{0}\" не может отображаться в модуле или элементе пространства имен.", "_0_modifier_cannot_appear_on_a_parameter_1090": "Модификатор \"{0}\" не может содержаться в параметре.", "_0_modifier_cannot_appear_on_a_type_member_1070": "Модификатор \"{0}\" не может отображаться в элементе типа.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Модификатор \"{0}\" не может присутствовать в параметре типа.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "' {0} ' не может присутствовать в объявлении 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "' {0} ' не может присутствовать в объявлении 'await using' .", "_0_modifier_cannot_appear_on_an_index_signature_1071": "Модификатор \"{0}\" не может отображаться в сигнатуре индекса.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Модификатор \"{0}\" не может использоваться для элементов класса этого типа.", "_0_modifier_cannot_be_used_here_1042": "Модификатор \"{0}\" не может использоваться здесь.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "Модификатор \"{0}\" не может использоваться с модификатором \"{1}\".", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Модификатор \"{0}\" не может использоваться с закрытым идентификатором.", "_0_modifier_must_precede_1_modifier_1029": "Модификатор \"{0}\" должен предшествовать модификатору \"{1}\".", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "За '\\ {0} ' должно следовать выражение значения свойства Unicode, заключенное в фигурные скобки.", "_0_needs_an_explicit_type_annotation_2782": "Для \"{0}\" требуется явная заметка с типом.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" относится только к типу, а здесь используется как пространство имен.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" относится только к типу, но используется здесь как значение.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" относится только к типу, но здесь используется как значение. Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на ES2015 или более поздней версии.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" ссылается на глобальную переменную UMD, но текущий файл является модулем. Рекомендуется добавить импорт.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" относится к значению, но здесь используется как тип. Возможно, вы имели в виду \"typeof {0}\"?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "\"{0}\" разрешается в объявление, распространяющееся только на тип. Чтобы импортировать его, необходимо использовать импорт, распространяющийся только на тип, если включены параметры \"preserveValueImports\" и \"isolatedModules\".", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "\"{0}\" разрешается в объявление, распространяющееся только на тип. Чтобы повторно его экспортировать, необходимо использовать повторный экспорт, распространяющийся только на тип, если включен параметр \"isolatedModules\".", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "' {0} ' разрешается в объявление только типа и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "' {0} ' разрешается в объявление только типа и должен быть реэкспортирован с использованием реэкспорта только типа, если включено ' {1} '.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Значение \"{0}\" должно быть задано внутри объекта \"compilerOptions\" файла конфигурации JSON", "_0_tag_already_specified_1223": "Тег \"{0}\" уже указан.", "_0_was_also_declared_here_6203": "Здесь также был объявлен \"{0}\".", @@ -1780,19 +1981,22 @@ "and_here_6204": "и здесь.", "arguments_cannot_be_referenced_in_property_initializers_2815": "Ссылка на \"arguments\" в инициализаторах свойств невозможна.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": обрабатывать файлы с импортом, экспортом, import.meta, jsx (с jsx: react-jsx) или форматом esm (с модулем: node16+) как файлы с модулями.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Выражение \"await\" нельзя использовать внутри статического блока класса.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Выражения \"await\" допускаются только на верхнем уровне файла, если он является модулем, но не имеет импортов и экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Выражения \"await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Выражения await не могут быть использованы в инициализаторе параметра.", "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" не влияет на тип этого выражения.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Операторы 'await using' разрешены только на верхнем уровне файла, если этот файл является модулем, но этот файл не имеет импорта или экспорта. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Операторы 'await using' разрешены только в асинхронных функциях и на верхних уровнях модулей.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Операторы 'await using' нельзя использовать внутри статического блока класса.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Параметр \"baseUrl\" имеет значение \"{0}\", это значение используется для разрешения безотносительного имени модуля \"{1}\".", + "c_must_be_followed_by_an_ASCII_letter_1512": "За '\\c' должна следовать буква ASCII.", "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" можно использовать только в начале файла.", "case_or_default_expected_1130": "Ожидалось case или default.", "catch_or_finally_expected_1472": "Ожидается \"catch\" или \"finally\".", - "const_declarations_can_only_be_declared_inside_a_block_1156": "Объявления const можно задать только в блоке.", - "const_declarations_must_be_initialized_1155": "Объявления \"const\" должны быть инициализированы.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Инициализатор элементов перечисления const был вычислен в неконечное значение.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Инициализатор элементов перечисления const был вычислен в запрещенное значение NaN.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "Инициализаторы членов перечисления констант могут содержать только литеральные значения и другие вычисляемые значения перечисления.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Инициализаторы членов перечисления const должны быть константными выражениями.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Перечисления const можно использовать только в выражениях доступа к свойству или индексу, а также в правой части объявления импорта, назначения экспорта или запроса типа.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Недопустимо использовать constructor как имя свойства параметра.", "constructor_is_a_reserved_word_18012": "\"#constructor\" является зарезервированным словом.", @@ -1811,13 +2015,14 @@ "file_6025": "файл", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Циклы \"for await\" допускаются только на верхнем уровне файла, если он является модулем, но этот файл не содержит импортов или экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Циклы \"for await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Циклы 'for await' нельзя использовать внутри статического блока класса.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "Методы доступа \"get\" и \"set\" не могут объявлять параметры \"this\".", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", если указаны \"files\", в противном случае \"[\"**/*\"]5D;\"", "implements_clause_already_seen_1175": "Предложение implements уже существует.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Предложения \"implements\" можно использовать только в файлах TypeScript.", "import_can_only_be_used_in_TypeScript_files_8002": "Элемент \"import ... =\" можно использовать только в файлах TypeScript.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Объявления \"infer\" допустимы только в предложении \"extends\" условного типа.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "Объявления let можно задать только в блоке.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "За '\\k' должно следовать имя группы захвата, заключенное в угловые скобки.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Не допускается использование let в качестве имени в объявлениях let или const.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "модуль === \"AMD\" или \"UMD\" или \"Система\" или \"ES6\", затем \"Классический\", или \"Узел\"", "module_system_or_esModuleInterop_6904": "модуль === \"system\" или \"esModuleInterop\"", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "В файле \"package.json\" отсутствует запись \"typesVersions\", соответствующая версии \"{0}\".", "package_json_had_a_falsy_0_field_6220": "Файл \"package.json\" содержит поле \"{0}\" со значением false.", "package_json_has_0_field_1_that_references_2_6101": "package.json содержит поле \"{0}\" \"{1}\", которое ссылается на \"{2}\".", + "package_json_has_a_peerDependencies_field_6281": "\"package.json\" имеет поле \"peerDependities\".", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая не является допустимым диапазоном semver.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая соответствует версии компилятора \"{1}\", выполняется поиск шаблона для сопоставления имени модуля \"{2}\".", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Файл \"package.json\" содержит поле \"typesVersions\" с сопоставлениями путей, зависящих от версии.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Область package.json \"{0}\" имеет недопустимый тип для целевого объекта описателя \"{1}\"", "package_json_scope_0_has_no_imports_defined_6273": "Для области package.json \"{0}\" не определены операции импорта.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Параметр paths указан, идет поиск шаблона, соответствующего имени модуля \"{0}\".", + "q_is_only_available_inside_character_class_1511": "'\\q' доступен только внутри класса символов.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "За '\\q' должны следовать строковые альтернативы, заключенные в фигурные скобки.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Модификатор readonly может отображаться только в объявлении свойства или сигнатуре индекса.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Модификатор типа \"readonly\" допускается только для типов литерала массива и кортежа.", "require_call_may_be_converted_to_an_import_80005": "Вызов \"require\" можно преобразовать в \"import\".", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "Утверждения \"режим разрешения\" поддерживаются только тогда, когда \"moduleResolution\" имеет значение \"node16\" или \"nodenext\".", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "Утверждения ''режима разрешения'' нестабильны. Используйте ночной TypeScript, чтобы отключить эту ошибку. Попробуйте обновить с помощью ''npm install -D typescript@next''.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" можно задать лишь для импорта, распространяющегося только на тип.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" является единственным допустимым ключом для утверждений импорта типа.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "\"режим разрешения\" — единственный допустимый ключ для атрибутов импорта типа.", "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" должен иметь значение \"require\" или \"import\".", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Параметр \"rootDirs\" задан; он используется для разрешения относительного имени модуля \"{0}\".", "super_can_only_be_referenced_in_a_derived_class_2335": "Ссылка на super может указываться только в производном классе.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "На this не может указывать ссылка в имени вычисляемого свойства.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "На this не могут указывать ссылки в теле модуля или пространства имен.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "На this не могут указывать ссылки в инициализаторе статического свойства.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "На this не могут указывать ссылки в аргументах конструктора.", "this_cannot_be_referenced_in_current_location_2332": "На this не могут указывать ссылки в текущем расположении.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "this неявно содержит тип any, так как он не имеет аннотации типа.", "true_for_ES2022_and_above_including_ESNext_6930": "true для ES2022 и выше, включая ESNext.", "true_if_composite_false_otherwise_6909": "\"true\", если \"composite\", \"false\" в противном случае", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "`true`, когда moduleResolution — это node16, nodenext или Bundler; в противном случае `false`.", "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: компилятор TypeScript", "type_Colon_6902": "тип:", "unique_symbol_types_are_not_allowed_here_1335": "Типы \"unique symbol\" здесь запрещены.", diff --git a/node_modules/typescript/lib/tr/diagnosticMessages.generated.json b/node_modules/typescript/lib/tr/diagnosticMessages.generated.json index 36a7594ca5..112675d80b 100644 --- a/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/tr/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "TÜM DERLEYİCİ SEÇENEKLERİ", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Bir '{0}' değiştiricisi, içeri aktarma bildirimiyle birlikte kullanılamaz.", "A_0_parameter_must_be_the_first_parameter_2680": "Bir '{0}' parametresi ilk parametre olmalıdır.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' etiketi, '@typedef', '@callback' veya '@overload' etiketini takip edemez", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' açıklaması, birden çok '@type' etiketi içeremez.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' sabit değeri, özellik adı olarak kullanılamaz.", "A_bigint_literal_cannot_use_exponential_notation_1352": "Bir büyük tamsayı sabit değerinde üstel gösterim kullanılamaz.", "A_bigint_literal_must_be_an_integer_1353": "Büyük tamsayı sabit değeri bir tamsayı olmalıdır.", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Uygulama imzasındaki bir bağlama deseni parametresi isteğe bağlı olamaz.", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' deyimi yalnızca bir kapsayan yineleme veya switch deyimi içinde kullanılabilir.", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' deyimi, yalnızca kapsayan deyimin etiketine atlayabilir.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Karakter sınıfı ayrılmış bir çift noktalayıcı içermemelidir. Ters eğik çizgiyle bundan kaçmak mı istediniz?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Bir karakter sınıfı aralığı başka bir karakter sınıfı tarafından sınırlanmamalıdır.", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Bir sınıf, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı uygulayabilir.", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Bir sınıf, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini uygulayabilir.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Bir sınıf '{0}' gibi ilkel bir türü genişletemez. Sınıflar yalnızca oluşturulabilen değerleri genişletebilir.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Bir sınıf '{0}' gibi ilkel bir türü uygulayamaz. Yalnızca diğer adlandırılmış nesne türlerini uygulayabilir.", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' değiştiricisi olmayan bir sınıf bildiriminin adı olmalıdır.", "A_class_member_cannot_have_the_0_keyword_1248": "Bir sınıf üyesi '{0}' anahtar kelimesini içeremez.", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Hesaplanan özellik adında virgül ifadesine izin verilmez.", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "Bir oluşturucu 'this' parametresini içeremez.", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' deyimi yalnızca bir kapsayan yineleme deyimi içinde kullanılabilir.", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' deyimi, yalnızca kapsayan yineleme deyiminin etiketine atlayabilir.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Bir beyan dosyası 'import type' olmadan içe aktarılamaz. Bunun yerine '{0}' uygulama dosyasını mı içe aktarmak istediniz?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Çevresel bağlamda 'declare' değiştiricisi kullanılamaz.", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekoratörler yalnızca metot uygulaması dekore edebilir; aşırı yüklemeleri dekore edemez.", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' yan tümcesi, 'switch' deyiminde birden fazla kez bulunamaz.", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Varsayılan dışarı aktarma, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Bu bağlamda '!' belirli atama onayına izin verilmez.", "A_destructuring_declaration_must_have_an_initializer_1182": "Yok etme bildiriminin bir başlatıcısı olmalıdır.", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 içindeki dinamik içeri aktarma çağrısı, 'Promise' oluşturucusunu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5'teki dinamik içe aktarma çağrısı 'Promise' oluşturucusu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", "A_file_cannot_have_a_reference_to_itself_1006": "Bir dosya kendine başvuramaz.", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' döndüren bir işlev, erişilebilir bir uç noktaya sahip olamaz.", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'New' anahtar kelimesiyle çağrılan bir işlev, 'void' olan bir 'this' türüne sahip olamaz.", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'void' veya 'any' olmayan işlevin bir değer döndürmesi gerekir.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'undefined', 'void' veya 'any' olmayan bir işlev bir değer döndürmelidir.", "A_generator_cannot_have_a_void_type_annotation_2505": "Bir oluşturucu 'void' türündeki bir ek açıklamaya sahip olamaz.", "A_get_accessor_cannot_have_parameters_1054": "Bir 'get' erişimcisi parametrelere sahip olamaz.", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get erişimcisi en az ayarlayıcı kadar erişilebilir olmalıdır", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden farklı bir dosyada olamaz.", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden önce gelemez.", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Ad alanı bildirimine yalnızca bir ad alanının veya modülün en üst düzeyinde izin verilir.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' anahtar sözcüğü kullanılarak 'namespace' bildirimi bildirilmez. Lütfen bunun yerine 'namespace' anahtar sözcüğünü kullanın.", "A_non_dry_build_would_build_project_0_6357": "-dry bayrağı kullanılmayan bir derleme '{0}' projesini derler", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry bayrağı kullanılmayan bir derleme şu dosyaları siler: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "DRY dışı bir derleme, '{0}' projesinin çıkışını güncelleştirir", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY dışı bir derleme, '{0}' projesinin çıkışı için zaman damgalarını güncelleştirir", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Parametre başlatıcısına yalnızca bir işlevde veya oluşturucu uygulamasında izin verilir.", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Parametre özelliği, rest parametresi kullanılarak bildirilemez.", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Bir türetilmiş sınıf başlatılmış özellikler, parametre özellikleri veya özel tanımlayıcılar içerdiğinde 'super' çağrısı, 'super' veya 'this' öğesine başvurmak için oluşturucudaki ilk deyim olmalıdır.", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'This' tabanlı tür koruması, parametre tabanlı tür koruması ile uyumlu değildir.", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' türü, yalnızca bir sınıfın veya arabirimin statik olmayan bir üyesinde kullanılabilir.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' etkinleştirildiğinde, CommonJS modülündeki değer bildirimlerinde üst düzey bir 'export' değiştiricisi kullanılamaz.", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' dosyası şu konumda zaten tanımlanmış: '{0}'.", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Demet üyesi hem isteğe bağlı hem de diğerleri olamaz.", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Bir demet türünün negatif bir değerle dizini oluşturulamaz.", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Bir 'yield' ifadesine yalnızca oluşturucu gövdesinde izin verilir.", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "'{1}' sınıfındaki '{0}' soyut metoduna super ifadesi ile erişilemez.", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "'{1}' sınıfındaki '{0}' soyut özelliğine oluşturucuda erişilemiyor.", "Accessibility_modifier_already_seen_1028": "Erişilebilirlik değiştiricisi zaten görüldü.", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Erişimciler yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", "Accessors_must_both_be_abstract_or_non_abstract_2676": "İki erişimci de soyut veya soyut olmayan olmalıdır.", "Add_0_to_unresolved_variable_90008": "Çözümlenmemiş değişkene '{0}.' ekle", "Add_a_return_statement_95111": "Return deyimi ekleyin", + "Add_a_return_type_to_the_function_declaration_9031": "İşlev bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_function_expression_9030": "İşlev ifadesine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Get erişimcisi bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_method_9034": "Yönteme bir dönüş türü ekleyin", + "Add_a_type_annotation_to_the_parameter_0_9028": "{0} parametresine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_property_0_9029": "{0} özelliğine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_variable_0_9027": "{0} değişkenine bir tür ek açıklaması ekleyin.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ayarlanmış erişimci bildiriminin parametresine bir tür ekleyin.", "Add_all_missing_async_modifiers_95041": "Tüm eksik 'async' değiştiricileri ekle", "Add_all_missing_attributes_95168": "Tüm eksik öznitelikleri ekleyin", "Add_all_missing_call_parentheses_95068": "Eksik tüm çağrı parantezlerini ekle", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "Tüm eksik içeri aktarmaları ekleyin", "Add_all_missing_members_95022": "Tüm eksik üyeleri ekle", "Add_all_missing_override_modifiers_95162": "Tüm eksik 'override' değiştiricilerini ekle", + "Add_all_missing_parameters_95190": "Tüm eksik parametreleri ekleyin", "Add_all_missing_properties_95166": "Tüm eksik özellikleri ekleyin", "Add_all_missing_return_statement_95114": "Tüm eksik return deyimlerini ekleyin", "Add_all_missing_super_calls_95039": "Tüm eksik süper çağrıları ekle", + "Add_all_missing_type_annotations_90067": "Eksik olan tüm tür ek açıklamalarını ekleyin", + "Add_all_optional_parameters_95193": "Tüm isteğe bağlı parametreleri ekleyin", + "Add_annotation_of_type_0_90062": "'{0}' türünde ek açıklama ekleyin", "Add_async_modifier_to_containing_function_90029": "İçeren işleve zaman uyumsuz değiştirici ekle", "Add_await_95083": "'await' ekleyin", "Add_await_to_initializer_for_0_95084": "'{0}' için başlatıcıya 'await' ekleyin", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle", "Add_missing_attributes_95167": "Eksik öznitelikleri ekleyin", "Add_missing_call_parentheses_95067": "Eksik çağrı parantezlerini ekle", + "Add_missing_comma_for_object_member_completion_0_95187": "'{0}' nesne üyesinin tamamlanması için eksik virgülü ekleyin.", "Add_missing_enum_member_0_95063": "Eksik '{0}' sabit listesi üyesini ekleyin", "Add_missing_function_declaration_0_95156": "Eksik '{0}' işlev bildirimini ekle", "Add_missing_new_operator_to_all_calls_95072": "Tüm çağrılara eksik 'new' işlecini ekleyin", "Add_missing_new_operator_to_call_95071": "Çağrıya eksik 'new' işlecini ekleyin", + "Add_missing_parameter_to_0_95188": "'{0}' öğesine eksik parametreyi ekleyin", + "Add_missing_parameters_to_0_95189": "'{0}' öğesine eksik parametreleri ekleyin", "Add_missing_properties_95165": "Eksik özellikleri ekleyin", "Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle", "Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle", "Add_names_to_all_parameters_without_names_95073": "Adları olmayan tüm parametrelere ad ekleyin", + "Add_optional_parameter_to_0_95191": "'{0}' öğesine isteğe bağlı parametre ekleme", + "Add_optional_parameters_to_0_95192": "'{0}' öğesine isteğe bağlı parametreler ekle", "Add_or_remove_braces_in_an_arrow_function_95058": "Ok işlevine küme ayracı ekle veya kaldır", "Add_override_modifier_95160": "'override' değiştiricisi ekle", "Add_parameter_name_90034": "Parametre adı ekleyin", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle", + "Add_return_type_0_90063": "'{0}' dönüş tipi ekleyin", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Türü açık hale getirmek için bu ifadeye satisfies operatörü ve bir tür iddiası ekleyin (satisfies T as T).", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Satisfies operatörü ve '{0}' içeren satır içi tip iddiası ekleyin", "Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle", "Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "İndis kullanılarak erişildiğinde türe 'undefined' ekle.", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Bir modülün varsayılan dışarı aktarması olmadığında 'import x from y' öğesine izin verin.", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib’den yardımcı işlevlerin her dosya başına eklenmesi yerine proje başına bir kez içeri aktarılmasına izin verin.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "İçe aktarma işlemlerinin TypeScript dosya uzantılarını içermesine izin verin. '--moduleResolution bundler' ve '--noEmit' veya '--emitDeclarationOnly' ayarını gerektirir.", "Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Modüller çözümlenirken birden çok klasörün tek bir klasör olarak işlenmesine izin verin.", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Zaten eklenmiş olan '{0}' dosya adı, '{1}' dosya adından yalnızca büyük/küçük harf yönünden farklıdır.", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Bu bağlama deseniyle eşleşen bağımsız değişken sağlanmadı.", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetik işlenen 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", "An_arrow_function_cannot_have_a_this_parameter_2730": "Ok işlevi 'this' parametresine sahip olamaz.", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 içindeki zaman uyumsuz bir işlev veya metot, 'Promise' oluşturucusunu gerektiriyor. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5'teki eşzamansız bir işlev veya yöntem, 'Promise' yapıcısını gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", "An_async_iterator_must_have_a_next_method_2519": "Zaman uyumsuz yineleyicinin bir 'next()' metodu olmalıdır.", "An_element_access_expression_should_take_an_argument_1011": "Bir öğe erişimi ifadesi bir bağımsız değişken almalıdır.", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Dışarı aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Dışarı aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", "An_export_declaration_cannot_have_modifiers_1193": "Dışarı aktarma bildirimi, değiştiricilere sahip olamaz.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export default' gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'VerbatimModuleSyntax' etkinleştirildiğinde 'dışa aktarma varsayılanı' bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' türünde bir ifade doğruluk bakımından test edilemiyor.", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Genişletilmiş Unicode kaçış değeri, 0x0 ve 0x10FFFF dahil olmak üzere bu değerler arasında olmalıdır.", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Tanımlayıcı veya anahtar sözcük, sayısal bir sabit değerden hemen sonra gelemez.", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uygulama, çevresel bağlamda bildirilemez.", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "İçeri aktarma diğer adı, 'export type' kullanılarak dışarı aktarılan bir bildirime başvuramaz.", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "İçeri aktarma diğer adı, 'import type' kullanılarak içeri aktarılan bir bildirime başvuramaz.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Bir içe aktarma takma adı, 'verbatimModuleSyntax' etkinleştirildiğinde bir türe veya yalnızca tür bildirimine çözümlenemez.", "An_import_alias_cannot_use_import_type_1392": "İçeri aktarma diğer adı, 'import type' kullanamaz", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "İçeri aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "İçeri aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", "An_import_declaration_cannot_have_modifiers_1191": "İçeri aktarma bildirimi, değiştiricilere sahip olamaz.", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "İçeri aktarma yolu '{0}' uzantısıyla bitemez. Bunun yerine '{1}' öğesini içeri aktarmayı deneyin.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Bir içe aktarma yolu yalnızca 'allowImportingTsExtensions' etkinleştirildiğinde '{0}' uzantısıyla bitebilir.", "An_index_signature_cannot_have_a_rest_parameter_1017": "Dizin imzası bir rest parametresine sahip olamaz.", "An_index_signature_cannot_have_a_trailing_comma_1025": "Dizin imzasının sonunda virgül olamaz.", "An_index_signature_must_have_a_type_annotation_1021": "Dizin imzası bir tür açıklamasına sahip olmalıdır.", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Bir örnek oluşturma ifadesinin ardından özellik erişimi gelemez.", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Bir arabirim, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı genişletebilir.", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Arabirim, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini genişletebilir.", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "Arabirim, '{0}' gibi temel bir türü genişletemez; arabirim yalnızca adlandırılmış türleri ve sınıfları genişletilebilir", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Bir arayüz '{0}' gibi ilkel bir türü genişletemez. Yalnızca diğer adlandırılmış nesne türlerini genişletebilir.", "An_interface_property_cannot_have_an_initializer_1246": "Arabirim özelliği bir başlatıcıya sahip olamaz.", "An_iterator_must_have_a_next_method_2489": "Bir yineleyici 'next()' metoduna sahip olmalıdır.", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "JSX parçalarıyla @jsx pragması kullanılırken bir @jsxFrag pragması gerekir.", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Nesne sabit değerinin aynı ada sahip birden fazla özelliği olamaz.", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Nesne sabit değeri, aynı ada sahip bir özellik ve erişimciye sahip olamaz.", "An_object_member_cannot_be_declared_optional_1162": "Nesne üyesi, isteğe bağlı olarak bildirilemez.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Bir nesnenin '[Symbol.hasInstance]' yönteminin, bir 'instanceof' ifadesinin sağ tarafında kullanılabilmesi için bir boole değeri döndürmesi gereklidir.", "An_optional_chain_cannot_contain_private_identifiers_18030": "İsteğe bağlı bir zincir, özel tanımlayıcı içeremez.", "An_optional_element_cannot_follow_a_rest_element_1266": "İsteğe bağlı bir öğe, REST öğesini izleyemez.", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' öğesinin dış değeri bu kapsayıcı tarafından gölgelenir.", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Aşırı yükleme imzası, bir oluşturucu olarak bildirilemez.", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Üs ifadesinin sol tarafında '{0}' işlecine sahip bir tek terimli ifadeye izin verilmez. İfadeyi parantez içine yazmayı düşünün.", "Annotate_everything_with_types_from_JSDoc_95043": "Her şeye JSDoc'tan türler ile not ekle", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Ad alanındaki expando fonksiyonunun özellik türlerine not ekleyin", "Annotate_with_type_from_JSDoc_95009": "JSDoc türü ile not ekle", "Another_export_default_is_here_2753": "Başka bir dışarı aktarma varsayılanını burada bulabilirsiniz.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Tek bir karakterden daha fazlasıyla eşleşebilecek herhangi bir Unicode özelliği, yalnızca Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tek bir karakterden fazlasıyla eşleşmesi muhtemel olan herhangi bir şey, negatif karakter sınıfı içinde geçersizdir.", "Are_you_missing_a_semicolon_2734": "Noktalı virgülünüz eksik mi?", "Argument_expression_expected_1135": "Bağımsız değişken ifadesi bekleniyor.", "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' seçeneğinin bağımsız değişkeni {1} olmalıdır.", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' türü bağımsız değişkeni 'exactOptionalPropertyTypes: true' ile '{1}' türündeki parametreye atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "'{0}' rest parametresinin bağımsız değişkenleri sağlanmadı.", "Array_element_destructuring_pattern_expected_1181": "Dizi öğesi yok etme deseni bekleniyor.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Yayılma öğelerine sahip diziler --isolatedDeclarations ile çıkarsanamaz.", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Onaylamalar, çağrı hedefindeki her adın açık bir tür ek açıklaması ile bildirilmesini gerektirir.", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Onaylamalar, çağrı hedefinin bir tanımlayıcı veya tam ad olmasını gerektirir.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Özelliklerin işlevlere bildirilmeden atanması --isolatedDeclarations ile desteklenmez. Bu işleve atanan özellikler için açık bir bildirim ekleyin.", "Asterisk_Slash_expected_1010": "'*/' bekleniyor.", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "En az bir erişimcinin --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gereklidir.", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Genel kapsam genişletmeleri yalnızca dış modüllerde ya da çevresel modül bildirimlerinde doğrudan yuvalanabilir.", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Genel kapsam genişletmeleri, zaten çevresel olan bir bağlamda göründükleri durumlar dışında 'declare' değiştiricisine sahip olmalıdır.", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "'{0}' projesinde otomatik tür bulma etkinleştirildi. '{2}' önbellek konumu kullanılarak '{1}' modülü için ek çözümleme geçişi çalıştırılıyor.", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘Await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.", "BUILD_OPTIONS_6919": "DERLEME SEÇENEKLERİ", "Backwards_Compatibility_6253": "Geriye Doğru Uyumluluk", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Temel sınıf ifadelerinde sınıf türü parametrelerine başvuruda bulunulamaz.", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020'den düşük değerler hedeflendiğinde büyük tamsayı sabit değerleri kullanılamıyor.", "Binary_digit_expected_1177": "İkili sayı bekleniyor.", "Binding_element_0_implicitly_has_an_1_type_7031": "'{0}' bağlama öğesi, örtük olarak '{1}' türü içeriyor.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Bağlama öğeleri doğrudan --isolatedDeclarations ile dışa aktarılamaz.", "Block_scoped_variable_0_used_before_its_declaration_2448": "Blok kapsamlı değişken '{0}', bildirilmeden önce kullanıldı.", "Build_a_composite_project_in_the_working_directory_6925": "Çalışma dizininde kompozit proje oluşturun.", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin.", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Eskiyse, bir veya daha fazla projeyi ve bağımlılıklarını derleyin", "Build_option_0_requires_a_value_of_type_1_5073": "'{0}' derleme seçeneği, {1} türünde bir değer gerektiriyor.", "Building_project_0_6358": "'{0}' projesi derleniyor...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Yerleşik yineleyiciler, 'any' yerine 'undefined' 'TReturn' türü ile örnekleniyor.", "COMMAND_LINE_FLAGS_6921": "KOMUT SATIRI BAYRAKLARI", "COMMON_COMMANDS_6916": "ORTAK KOMUTLAR", "COMMON_COMPILER_OPTIONS_6920": "ORTAK DERLEYİCİ SEÇENEKLERI", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "'{0}' ve '{1}' çağrı imzası dönüş türleri uyumsuz.", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dönüş türü ek açıklaması bulunmayan çağrı imzası, örtük olarak 'any' dönüş türüne sahip.", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Bağımsız değişken içermeyen çağrı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", - "Call_target_does_not_contain_any_signatures_2346": "Çağrı hedefi imza içermiyor.", "Can_only_convert_logical_AND_access_chains_95142": "Yalnızca mantıksal zincirler VE erişim zincirleri dönüştürülebilir", "Can_only_convert_named_export_95164": "Yalnızca adı belirtilen dışarı aktarma dönüştürülebilir", "Can_only_convert_property_with_modifier_95137": "Yalnızca değiştirici içeren özellik dönüştürülebilir", - "Can_only_convert_string_concatenation_95154": "Yalnızca dize birleştirmesi dönüştürülebilir", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Yalnızca dize birleştirmelerini ve dize değişmezlerini dönüştürebilir", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}' bir ad alanı değil tür olduğundan '{0}.{1}' erişimi sağlanamıyor. '{0}[\"{1}\"]' değerini belirterek '{0}' içindeki '{1}' özelliğinin türünü almak mı istediniz?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' bayrağı sağlandığında çevresel const sabit listelerine erişilemiyor.", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' etkinleştirildiğinde başka bir dosyadan '{0}' öğesine niteleme olmadan erişilemez. Bunun yerine '{2}' kullanın.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' etkinleştirildiğinde ortam sabit listelerine erişilemiyor.", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' oluşturucu türüne '{1}' oluşturucu türü atanamaz.", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Bir soyut oluşturucu türü, soyut olmayan bir oluşturucu türüne atanamaz.", "Cannot_assign_to_0_because_it_is_a_class_2629": "Sınıf olduğundan '{0}' özelliğine atama yapılamıyor.", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "'{0}' için kitaplık tanımı bulunamıyor.", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' için kitaplık tanımı bulunamıyor. Şunu mu demek istediniz: '{1}'?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' modülü bulunamıyor. Modülü '.json' uzantısıyla içeri aktarmak için '--resolveJsonModule' kullanmayı deneyin.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "'{0}' modülü bulunamıyor. 'moduleResolution' seçeneğini 'node' olarak ayarlamak veya 'paths' seçeneğine diğer adlar eklemek mi istediniz?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' modülü bulunamıyor. 'moduleResolution' seçeneğini 'nodenext' olarak ayarlamak veya 'paths' seçeneğine diğer adlar eklemek mi istediniz?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' modülü veya karşılık gelen tür bildirimleri bulunamıyor.", "Cannot_find_name_0_2304": "'{0}' adı bulunamıyor.", "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' adı bulunamıyor. Bunu mu demek istediniz: '{1}'?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "'{0}' adı bulunamadı. Bunu zaman uyumsuz bir işleve mi yazmak istediniz?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? `npm i --save-dev @types/bun` deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? 'npm i --save-dev @types/bun' komutunu deneyin ve ardından tsconfig dosyanızdaki type alanına 'bun' ekleyin.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki türler alanına 'jest' veya 'mocha' ekleyin.", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`.", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi bozma her zaman '{0}' gönderdiğinden değer yinelenemiyor.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi yayılması her zaman '{0}' gönderdiğinden değer yinelenemiyor.", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen for-of her zaman '{0}' gönderdiğinden değer yinelenemiyor.", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "{0}' projesi için 'outFile' ayarlanmadığından başa eklenemiyor", + "Cannot_move_statements_to_the_selected_file_95183": "İfadeler seçilen dosyaya taşınamıyor", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Dosyaya taşınamıyor, seçili dosya geçersiz", "Cannot_read_file_0_5083": "'{0}' dosyası okunamıyor.", "Cannot_read_file_0_Colon_1_5012": "'{0}' dosyası okunamıyor: {1}.", "Cannot_redeclare_block_scoped_variable_0_2451": "Blok kapsamlı değişken '{0}', yeniden bildirilemiyor.", "Cannot_redeclare_exported_variable_0_2323": "Dışarı aktarılan '{0}' değişkeni yeniden bildirilemiyor.", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Catch yan tümcesindeki '{0}' tanımlayıcısı yeniden bildirilemiyor.", "Cannot_start_a_function_call_in_a_type_annotation_1441": "Bir tür ek açıklamasında bir işlev çağrısı başlatılamıyor.", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "'{1}' dosyası okunurken hata oluştuğundan '{0}' projesinin çıkışı güncelleştirilemiyor", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' bayrağı sağlanmazsa JSX kullanılamaz.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "'--isolatedModules' bayrağı sağlandığında, bir tür veya yalnızca tür ad alanında 'export import' kullanılamaz.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' etkinleştirildiğinde, yalnızca tür veya tür ad alanında 'export import' kullanılamaz.", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' değeri 'none' olduğunda içeri aktarma, dışarı aktarma veya modül genişletme kullanılamaz.", "Cannot_use_namespace_0_as_a_type_2709": "'{0}' ad alanı, tür olarak kullanılamaz.", "Cannot_use_namespace_0_as_a_value_2708": "'{0}' ad alanı, değer olarak kullanılamaz.", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "'extends' ifadesini 'implements' olarak değiştirin", "Change_spelling_to_0_90022": "Yazımı '{0}' olarak değiştir", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Bildirilen ancak oluşturucuda ayarlanmamış sınıf özelliklerini denetleyin.", + "Check_side_effect_imports_6806": "Yan etki içeri aktarmalarını denetleyin.", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' ve 'apply' yöntemlerinin bağımsız değişkenlerinin özgün işlevle eşleşip eşleşmediğini denetle.", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' ön ekinin '{1}' - '{2}' için eşleşen en uzun ön ek olup olmadığı denetleniyor.", "Circular_definition_of_import_alias_0_2303": "'{0}' içeri aktarma diğer adının döngüsel tanımı.", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "Sınıf bildirimi, '{0}' için aşırı yükleme listesi uygulayamaz.", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla '@augments' veya '@extends' etiketi olamaz.", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Sınıf dekoratörleri statik özel tanımlayıcıyla kullanılamaz. Deneysel dekoratörü kaldırmayı düşünün.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Ana sınıf tarafından tanımlanan '{0}' sınıf alanına, alt sınıftan super aracılığıyla erişilemez.", "Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Modül {0} ile ES5 hedeflendiğinde sınıf adı 'Object' olamaz.", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "Komut Satırı Seçenekleri", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Yapılandırma dosyasının yolu veya 'tsconfig.json' dosyasını içeren klasörün yolu belirtilen projeyi derleyin.", "Compiler_Diagnostics_6251": "Derleyici Tanılaması", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' derleyici seçeneğine boş bir dize verilemez.", "Compiler_option_0_expects_an_argument_6044": "'{0}' derleyici seçeneği, bağımsız değişken bekliyor.", "Compiler_option_0_may_not_be_used_with_build_5094": "'--{0}' derleyici seçeneği, '--build' ile kullanılamaz.", "Compiler_option_0_may_only_be_used_with_build_5093": "'--{0}' derleyici seçeneği, yalnızca '--build' ile kullanılabilir.", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "Bileşik projeler, bildirim gösterimini devre dışı bırakamaz.", "Composite_projects_may_not_disable_incremental_compilation_6379": "Bileşik projeler artımlı derlemeyi devre dışı bırakamayabilir.", "Computed_from_the_list_of_input_files_6911": "Giriş dosyaları listesinden hesaplanır", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Hesaplanan özellikler sayı veya dize değişmezleri, değişkenler veya --isolatedDeclarations içeren noktalı ifadeler olmalıdır.", "Computed_property_names_are_not_allowed_in_enums_1164": "Sabit listelerinde hesaplanan özellik adına izin verilmiyor.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Sınıf veya nesne değişmezlerindeki hesaplanan özellik adları --isolatedDeclarations ile çıkarsanamaz.", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Dize değeri içeren üyelerin bulunduğu bir sabit listesinde hesaplanan değerlere izin verilmez.", "Concatenate_and_emit_output_to_single_file_6001": "Çıktıyı tek dosyaya birleştirin ve yayın.", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{1}' ve '{2}' içinde '{0}' için çakışan tanımlar bulundu. Çakışmayı çözmek için bu kitaplığın belirli bir versiyonunu yüklemeniz önerilir.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "İçe aktarmaları çözümlerken çözümleyiciye özgü varsayılanlara ek olarak ayarlanacak koşullar.", "Conflicts_are_in_this_file_6201": "Çakışmalar bu dosyada bulunuyor.", "Consider_adding_a_declare_modifier_to_this_class_6506": "Bu sınıfa 'declare' değiştiricisi eklemeyi düşünün.", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "'{0}' ve '{1}' yapı imzası dönüş türleri uyumlu değil.", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "'{0}' öğesini eşlenen nesne türüne dönüştür", "Convert_all_const_to_let_95102": "Tüm 'const' ifadelerini 'let' ifadesine dönüştürün", "Convert_all_constructor_functions_to_classes_95045": "Tüm oluşturucu işlevleri sınıflara dönüştür", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "Bir değer olarak kullanılmayan tüm içeri aktarmaları yalnızca tür içeri aktarmalarına dönüştürün", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Tüm geçersiz karakterleri HTML varlık koduna dönüştür", "Convert_all_re_exported_types_to_type_only_exports_1365": "Yeniden dışarı aktarılan tüm türleri yalnızca tür dışarı aktarmalarına dönüştürün", "Convert_all_require_to_import_95048": "Tüm 'require' öğelerini 'import' olarak dönüştür", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "Tümünü büyük tamsayı sayısal sabit değerlerine dönüştürün", "Convert_all_to_default_imports_95035": "Tümünü varsayılan içeri aktarmalara dönüştür", "Convert_all_type_literals_to_mapped_type_95021": "Tüm tür sabit değerlerini eşlenmiş türe dönüştür", + "Convert_all_typedef_to_TypeScript_types_95177": "Tüm typedef'leri TypeScript türüne dönüştür.", "Convert_arrow_function_or_function_expression_95122": "Ok işlevini veya işlev ifadesini dönüştür", "Convert_const_to_let_95093": "'const' ifadesini 'let' ifadesine dönüştürün", "Convert_default_export_to_named_export_95061": "Varsayılan dışarı aktarmayı adlandırılmış dışarı aktarmaya dönüştürün", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "İsteğe bağlı zincir ifadesine dönüştür", "Convert_to_template_string_95096": "Şablon dizesine dönüştürün", "Convert_to_type_only_export_1364": "Yalnızca tür dışarı aktarmaya dönüştürün", - "Convert_to_type_only_import_1373": "Yalnızca tür içeri aktarmaya dönüştürün", + "Convert_typedef_to_TypeScript_type_95176": "typedef'i TypeScript türüne dönüştürün.", "Corrupted_locale_file_0_6051": "{0} yerel ayar dosyası bozuk.", "Could_not_convert_to_anonymous_function_95153": "Anonim işleve dönüştürülemedi", "Could_not_convert_to_arrow_function_95151": "Arrow işlevine dönüştürülemedi", @@ -480,19 +530,24 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' adı bulunamıyor. Şunu mu demek istediniz: '{1}'?", "Could_not_find_namespace_import_or_named_imports_95132": "Ad alanı içeri aktarması veya adlandırılmış içeri aktarmalar bulunamadı", "Could_not_find_property_for_which_to_generate_accessor_95135": "Erişimcinin oluşturulacağı özellik bulunamadı", + "Could_not_find_variable_to_inline_95185": "Satır içi değişken bulunamadı.", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Uzantılara sahip '{0}' yolu çözümlenemedi: {1}.", "Could_not_write_file_0_Colon_1_5033": "'{0}' dosyası yazılamadı: {1}.", "Create_source_map_files_for_emitted_JavaScript_files_6694": "Yayılan JavaScript dosyaları için kaynak eşleme dosyaları oluşturun.", "Create_sourcemaps_for_d_ts_files_6614": "d.ts dosyaları için kaynak eşlemeleri oluşturun.", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Çalışma dizininde önerilen ayarlarla ilgili bir tsconfig.js oluşturur.", "DIRECTORY_6038": "DİZİN", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Bir karakter sınıfında ondalık kaçış dizilerine ve geri referanslara izin verilmez.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Başında sıfır bulunan ondalık sayılara izin verilmez.", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Bildirim başka bir dosyadaki bildirimi genişlettiğinden serileştirilemez.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Bu dosyaya ilişkin bildirim, bu içe aktarmanın genişletmeler için korunmasını gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Bu dosya için bildirim gösterme, '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Bu dosya için bildirim gösterme, '{1}' modülündeki '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "Bu parametrenin bildirimi, türüne örtülü olarak tanımsız eklenmesini gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", "Declaration_expected_1146": "Bildirim bekleniyor.", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Bildirim adı, yerleşik genel tanımlayıcı '{0}' ile çakışıyor.", "Declaration_or_statement_expected_1128": "Bildirim veya deyim bekleniyor.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir deyim bloğunu izlediğinden yok etme ataması yazmak istiyorsanız tüm atamayı parantez içine almanız gerekebilir.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir ifade bloğunun ardından geldiğinden yapı çözümlü bir atama yazmayı düşünüyorsanız, tüm atamayı parantez içine almanız gerekebilir.", "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Kesin atama onaylamaları olan bildirimlerde tür ek açıklamaları da olmalıdır.", "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Başlatıcılara sahip bildirimlerde kesin atama onaylamaları olamaz.", "Declare_a_private_field_named_0_90053": "'{0}' adlı bir özel alan bildirin.", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "'{0}' statik özelliğini bildir", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "'{0}' dekoratör işlevi dönüş türü, '{1}' türüne atanamıyor.", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Dekoratör işlevi dönüş türü '{0}', ancak 'void' veya 'any' olması bekleniyor.", + "Decorator_used_before_export_here_1486": "Dekoratör burada 'export' öğesinden önce kullanıldı.", "Decorators_are_not_valid_here_1206": "Buradaki dekoratörler geçerli değil.", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekoratörler aynı ada sahip birden fazla get/set erişimcisine uygulanamaz.", - "Decorators_may_not_be_applied_to_this_parameters_1433": "Dekoratörler 'this' parametrelerine uygulanamaz.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratörler 'export' öncesinde de görünüyorlarsa, 'export' veya 'default export' sonrasında görünmeyebilirler.", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratörler, özellik bildirimlerinin adından ve tüm anahtar sözcüklerinden önce gelmelidir.", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Catch yan tümcesi değişkenlerini varsayılan olarak 'any' yerine 'unknown' olarak kabul et.", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Modülün varsayılan dışarı aktarımı '{0}' özel adına sahip veya bu adı kullanıyor.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Varsayılan dışa aktarımlar --isolatedDeclarations ile çıkarsanamaz.", "Default_library_1424": "Varsayılan kitaplık", "Default_library_for_target_0_1425": "'{0}' hedefi için varsayılan kitaplık", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Şu tanımlayıcıların tanımları başka bir dosyadaki tanımlarla çakışıyor: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Oluşturulan kodda 'const enum' bildirimlerinin silinmesini devre dışı bırak.", "Disable_error_reporting_for_unreachable_code_6603": "Ulaşılamaz kod için hata raporlamayı devre dışı bırakın.", "Disable_error_reporting_for_unused_labels_6604": "Kullanılmayan etiketler için hata raporlamayı devre dışı bırakın.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Tam tür denetimini devre dışı bırakın (yalnızca kritik ayrıştırma ve yayma hataları rapor edilecektir).", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Derlenen çıktıda '__extends' gibi özel yardımcı işlevler oluşturmayı devre dışı bırak.", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Varsayılan lib.d.ts dahil olmak üzere kitaplık dosyalarının dahil edilmesini devre dışı bırakın.", "Disable_loading_referenced_projects_6235": "Başvurulan projelerin yüklenmesini devre dışı bırakın.", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "Erişilemeyen kod ile ilgili hataları bildirme.", "Do_not_report_errors_on_unused_labels_6074": "Kullanılmayan etiketler ile ilgili hataları bildirme.", "Do_not_resolve_the_real_path_of_symlinks_6013": "Simgesel bağlantıların gerçek yolunu çözümlemeyin.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' ayarına göre çıktı dosyasının formatında yazılmalarını sağlayarak, yalnızca tür olarak işaretlenmemiş hiçbir bir içe aktarma veya dışa aktarma işlemini dönüştürmeyin veya silmeyin.", "Do_not_truncate_error_messages_6165": "Hata iletilerini kesmeyin.", "Duplicate_function_implementation_2393": "Yinelenen işlev uygulaması.", "Duplicate_identifier_0_2300": "Yinelenen tanımlayıcı: '{0}'.", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "'{0}' türü için yinelenen dizin imzası var.", "Duplicate_label_0_1114": "'{0}' etiketi yineleniyor.", "Duplicate_property_0_2718": "'{0}' özelliğini yineleyin.", + "Duplicate_regular_expression_flag_1500": "Yinelenen normal ifade bayrağı.", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Dinamik içeri aktarmanın tanımlayıcısı 'string' türünde olmalıdır, ancak buradaki tür: '{0}'.", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dinamik içe aktarma yalnızca '--module' bayrağı 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16' veya 'nodenext' olarak ayarlandığında desteklenir.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "Dinamik içeri aktarmalar, bağımsız değişken olarak yalnızca bir modül tanımlayıcısı ve isteğe bağlı bir onay kabul edebilir", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "Dinamik içe aktarma, yalnızca '--module' seçeneği 'esnext', 'node16' veya 'nodenext' olarak ayarlandığında ikinci bir argümanı destekler.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dinamik içe aktarmalar yalnızca bir modül belirticiyi ve isteğe bağlı bir dizi özniteliği bağımsız değişken olarak kabul edebilir", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "Dinamik içe aktarmalar yalnızca '--module' seçeneği; 'esnext', 'node16', 'nodenext' veya 'preserve' olarak ayarlandığında ikinci bir argümanı destekler.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'Module', 'preserve' olarak ayarlandığında CommonJS modülünde ESM sözdizimine izin verilmez.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "'verbatimModuleSyntax' etkinleştirildiğinde CommonJS modülünde ESM söz dizimi kullanılamaz.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' için yapılan her bildirim, değerinde farklılık gösteriyor, '{2}' beklenirken '{3}' verildi.", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "'{0}' birleşim türünün her bir üyesi yapı imzalarına sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "'{0}' birleşim türünün her bir üyesi imzalara sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", "Editor_Support_6249": "Düzenleyici Desteği", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Tür denetimli JavaScript dosyalarında hata raporlamayı etkinleştirin.", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Yerel değişkenler okunmadığında hata raporlamayı etkinleştir.", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' için 'any' türü verildiğinde hata raporlamayı etkinleştir.", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 aşama 2 taslak dekoratörleri için deneysel desteği etkinleştirin.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Eski deneysel dekoratörler için deneysel desteği etkinleştirin.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Bir bildirim dosyasının mevcut olması koşuluyla, herhangi bir uzantıya sahip dosyaların içe aktarılmasını etkinleştirin.", "Enable_importing_json_files_6689": ".json dosyalarını içeri aktarmayı etkinleştirin.", "Enable_project_compilation_6302": "Proje derlemeyi etkinleştir", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "İşlevlerde katı 'bind', 'call' ve 'apply' metotlarını etkinleştirin.", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "İçeri aktarmalarda büyük harfe çevirmenin doğru olduğundan emin olun.", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Her dosyanın diğer içeri aktarmalara bağlı olmadan güvenli bir şekilde kaynaktan kaynağa derlenebildiğinden emin olun.", "Ensure_use_strict_is_always_emitted_6605": "'use strict' öğesinin her zaman yayıldığından emin olun.", + "Entering_conditional_exports_6413": "Koşullu dışarı aktarmalara giriliyor.", "Entry_point_for_implicit_type_library_0_1420": "'{0}' örtük tür kitaplığı için giriş noktası", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "'{1}' paket kimliğine sahip '{0}' örtük tür kitaplığı için giriş noktası", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Sabit listesi bildirimleri yalnızca ad alanı veya diğer sabit listesi bildirimleri ile birleştirilebilir.", "Enum_declarations_must_all_be_const_or_non_const_2473": "Sabit listesi bildirimlerinin tümü const veya const olmayan değerler olmalıdır.", "Enum_member_expected_1132": "Sabit listesi üyesi bekleniyor.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Değişmez sayısal bir üyeyi takip eden numaralandırma üyesi, 'isolatedModules' etkinleştirildiğinde bir başlatıcıya sahip olmalıdır.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Sabit listesi üyesi başlatıcıları, --isolatedDeclarations ile dış simgelere başvurular olmadan hesaplanabilir olmalıdır.", "Enum_member_must_have_initializer_1061": "Sabit listesi üyesi bir başlatıcıya sahip olmalıdır.", "Enum_name_cannot_be_0_2431": "Sabit listesi adı '{0}' olamaz.", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "Sabit listesi türü '{0}', sabit değer olmayan başlatıcılara sahip üyeler içeriyor.", "Errors_Files_6041": "Hata Dosyaları", + "Escape_sequence_0_is_not_allowed_1488": "'{0}' kaçış dizisine izin verilmiyor.", "Examples_Colon_0_6026": "Örnekler: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' ve '{1}' türlerini karşılaştırırken aşırı karmaşıklık.", "Excessive_stack_depth_comparing_types_0_and_1_2321": "Aşırı yığın derinliği, '{0}' ve '{1}' türlerini karşılaştırıyor.", + "Exiting_conditional_exports_6416": "Koşullu dışarı aktarmalardan çıkılıyor.", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", "Expected_0_arguments_but_got_1_2554": "{0} bağımsız değişken bekleniyordu ancak {1} alındı.", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} bağımsız değişken bekleniyordu ancak {1} bağımsız değişken alındı. Tür bağımsız değişkeninizdeki 'void' operatörünü 'Promise'e eklemeyi mi unuttunuz?", "Expected_0_type_arguments_but_got_1_2558": "{0} tür bağımsız değişkeni bekleniyordu ancak {1} alındı.", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 bağımsız değişken bekleniyordu ancak 0 bağımsız değişken var. Bağımsız değişkenler olmadan çağrılabilen bir 'resolve' oluşturmak için 'new Promise()' çağrısında bir JSDoc ipucu bulunması gerekir.", + "Expected_a_Unicode_property_name_1523": "Unicode özellik adı bekleniyordu.", + "Expected_a_Unicode_property_name_or_value_1527": "Unicode özellik adı veya değeri bekleniyordu.", + "Expected_a_Unicode_property_value_1525": "Bir Unicode özellik değeri bekleniyordu.", + "Expected_a_capturing_group_name_1514": "Yakalama grubu adı bekleniyordu.", + "Expected_a_class_set_operand_1520": "Bir sınıf kümesi işleneni bekleniyordu.", "Expected_at_least_0_arguments_but_got_1_2555": "En az {0} bağımsız değişken bekleniyordu ancak {1} alındı.", "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' için ilgili JSX kapanış etiketi bekleniyor.", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX parçasına karşılık gelen kapanış etiketi bekleniyordu.", "Expected_for_property_initializer_1442": "Özellik başlatıcısı için '=' bekleniyor.", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' dosyasındaki '{0}' alanının '{1}' türünde olması bekleniyordu ancak '{2}' alındı.", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Dekoratörler için sunulan deneysel destek özelliği, sonraki sürümlerde değiştirilebilir. Bu uyarıyı kaldırmak için 'tsconfig' veya 'jsconfig' dosyanızdaki 'experimentalDecorators' seçeneğini ayarlayın.", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Açık olarak belirtilen modül çözümleme türü: '{0}'.", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' seçeneği 'es2016' veya üzeri olarak belirlenmedikçe 'bigint' değerlerinde üs olarak gösterme yapılamaz.", "Export_0_from_module_1_90059": "'{1}' modülünden '{0}' öğesini dışarı aktar", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "Dışarı aktarılan '{0}' değişkeni, '{1}' özel adına sahip veya bu adı kullanıyor.", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Modül genişletmelerinde dışarı aktarmalara ve dışarı aktarma atamalarına izin verilmez.", "Expression_expected_1109": "İfade bekleniyor.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "İfadenin dekoratör olarak kullanılabilmesi için parantez içine alınması gereklidir.", "Expression_or_comma_expected_1137": "İfade veya virgül bekleniyor.", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "İfade, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "İfade, temsili çok karmaşık olan bir birleşim türü oluşturuyor.", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "İfade, derleyicinin temel sınıf başvurusunu yakalamak için kullandığı '_super' öğesi olarak çözümleniyor.", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "İfade, derleyicinin 'new.target' meta-özellik başvurusu yakalamak için kullandığı '_newTarget' değişken bildirimi olarak çözümleniyor.", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "İfade, derleyicinin 'this' başvurusunu yakalamak için kullandığı '_this' değişken bildirimi olarak çözümleniyor.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "İfade türü --isolatedDeclarations ile çıkarsanamaz.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends yan tümcesi --isolatedDeclarations içeren bir ifade içeremez.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Çıkarsanan '{0}' türü için Extends yan tümcesi '{1}' özel adı içeriyor veya kullanıyor.", + "Extract_base_class_to_variable_90064": "Temel sınıfı değişken olarak ayıkla", + "Extract_binding_expressions_to_variable_90066": "Bağlayıcı ifadeleri değişkene ayıkla", "Extract_constant_95006": "Sabiti ayıkla", + "Extract_default_export_to_variable_90065": "Varsayılan dışarı aktarmayı değişken olarak ayıkla", "Extract_function_95005": "İşlevi ayıkla", "Extract_to_0_in_1_95004": "{1} içindeki {0} konumuna ayıkla", "Extract_to_0_in_1_scope_95008": "{1} kapsamındaki {0} konumuna ayıkla", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "Arabirime ayıkla", "Extract_to_type_alias_95078": "Tür diğer adına ayıkla", "Extract_to_typedef_95079": "typedef'e ayıkla", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Değişken olarak ayıkla ve 'typeof {0} olarak {0}' ile değiştir", "Extract_type_95077": "Türü ayıkla", "FILE_6035": "DOSYA", "FILE_OR_DIRECTORY_6040": "DOSYA VEYA DİZİN", - "Failed_to_parse_file_0_Colon_1_5014": "'{0}' dosyası ayrıştırılamadı: {1}.", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' bulunamadı.", + "Failed_to_resolve_under_condition_0_6415": "'{0}' koşulu altında çözümlenemedi.", "Fallthrough_case_in_switch_7029": "switch deyiminde sonraki ifadeye geçiş.", "File_0_does_not_exist_6096": "'{0}' adlı dosya yok.", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut değil.", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya yok; bunu bir çözümleme sonucu olarak kullanın.", "File_0_exists_according_to_earlier_cached_lookups_6239": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya var; bunu bir çözümleme sonucu olarak kullanın.", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' dosyası desteklenmeyen uzantıya sahip. Yalnızca şu uzantılar desteklenir: {1}.", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "'{0}' dosyasının desteklenmeyen bir uzantısı olduğundan dosya atlanıyor.", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' dosyası bir JavaScript dosyasıdır. 'allowJs' seçeneğini mi etkinleştirmek istediniz?", "File_0_is_not_a_module_2306": "'{0}' dosyası bir modül değil.", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' dosyası, '{1}' projesinin dosya listesinde değil. Projelerin tüm dosyaları listelemesi veya bir 'include' deseni kullanması gerekir.", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' dosyası, 'rootDir' '{1}' dizininde değil. 'rootDir' dizininin tüm kaynak dosyalarını içermesi bekleniyor.", "File_0_not_found_6053": "'{0}' dosyası bulunamadı.", "File_Management_6245": "Dosya Yönetimi", + "File_appears_to_be_binary_1490": "Dosya ikili gibi görünüyor.", "File_change_detected_Starting_incremental_compilation_6032": "Dosya değişikliği algılandı. Artımlı derleme başlatılıyor...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}', \"type\" alanına sahip olmadığından dosya CommonJS modülüdür", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}', değeri \"module\" olmayan \"type\" alanına sahip olduğundan dosya CommonJS modülüdür", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "Dosya, '{0}' proje başvuru kaynağının çıkışıdır", "File_is_source_from_referenced_project_specified_here_1416": "Burada dosya, belirtilmiş başvurulan projenin kaynağıdır.", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' dosya adının, zaten eklenmiş olan '{1}' dosya adından tek farkı, büyük/küçük harf kullanımı.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Dosya adı '{0}', '{1}' uzantısına sahip - bunun yerine '{2}' aranıyor.", "File_name_0_has_a_1_extension_stripping_it_6132": "'{0}' dosya adında '{1}' uzantısı var; uzantı ayrılıyor.", "File_redirects_to_file_0_1429": "Dosya, '{0}' dosyasına yeniden yönlendiriyor", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Dosya belirtimi, özyinelemeli dizin joker karakterinden ('**') sonra görünen bir üst dizin ('..') içeremez: '{0}'.", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "'await' deyiminin eksik olabileceği tüm ifadeleri düzeltin", "Fix_all_implicit_this_errors_95107": "Tüm örtük 'this' hatalarını onar", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Asenkron işlevlerin tüm hatalı dönüş türlerini onar", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.", + "Fix_all_with_type_only_imports_95182": "Tümünü yalnızca tür içeri aktarmaları ile düzelt", "Found_0_errors_6217": "{0} hata bulundu.", "Found_0_errors_Watching_for_file_changes_6194": "{0} hata bulundu. Dosya değişiklikleri izleniyor.", "Found_0_errors_in_1_files_6261": "{1} dosyada {0} hata bulundu.", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Aynı dosyada {0} hata bulundu, başlangıç: {1}", "Found_1_error_6216": "1 hata bulundu.", "Found_1_error_Watching_for_file_changes_6193": "1 hata bulundu. Dosya değişiklikleri izleniyor.", - "Found_1_error_in_1_6259": "Şurada 1 hata bulundu: {1}", + "Found_1_error_in_0_6259": "Şurada 1 hata bulundu: {0}", "Found_package_json_at_0_6099": "'{0}' içinde 'package.json' bulundu.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "Katı modda 'ES3' veya 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmez.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "Katı modda 'ES3' veya 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmez. Sınıf tanımları otomatik olarak katı moddadır.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "Katı modda 'ES3' veya 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmez. Modüller otomatik olarak katı moddadır.", + "Found_peerDependency_0_with_1_version_6282": "'{1}' sürümüne sahip peerDependency '{0}' bulundu.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Sınıf tanımları otomatik olarak katı moddadır.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Modüller otomatik olarak katı moddadır.", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dönüş türü ek açıklaması bulunmayan işlev ifadesi, örtük olarak '{0}' dönüş türüne sahip.", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "İşlev uygulaması yok veya bildirimden hemen sonra gelmiyor.", "Function_implementation_name_must_be_0_2389": "İşlev uygulamasının adı '{0}' olmalıdır.", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan işlev, örtük olarak 'any' türüne sahiptir.", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "İşlevin sonunda return deyimi eksik ve dönüş türü 'undefined' içermiyor.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "İşlevin --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", "Function_not_implemented_95159": "İşlev uygulanmadı.", "Function_overload_must_be_static_2387": "İşlev aşırı yüklemesi statik olmalıdır.", "Function_overload_must_not_be_static_2388": "İşlev aşırı yüklemesi statik olmamalıdır.", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "Tanımlayıcı bekleniyor.", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Tanımlayıcı bekleniyor. '__esModule', ECMAScript modülleri dönüştürülürken, dışarı aktarılan bir işaretçi olarak ayrılmış.", "Identifier_or_string_literal_expected_1478": "Tanımlayıcı veya sabit değerli dize bekleniyor.", + "Identifier_string_literal_or_number_literal_expected_1496": "Tanımlayıcı, sabit değerli dize veya sabit değerli sayı bekleniyor.", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' öğesini düzeltmek için bir çekme isteği göndermeyi deneyin", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "‘{0}’ paketi bu modülü fiili olarak kullanıma sunuyorsa `'{1}' modülünü bildir;` ifadesini içeren yeni bir bildirim (.d.ts) dosyası eklemeyi deneyin", "Ignore_this_error_message_90019": "Bu hata iletisini yoksay", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "'{0}' arabirimini uygula", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "'{1}' özel adına sahip veya bu adı kullanan '{0}' dışarı aktarılan sınıfının yan tümcesini uygular.", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol' öğesinin örtük olarak 'string' türüne dönüştürülmesi işlemi çalışma zamanında başarısız olur. Bu ifadeyi 'String(...)' içinde sarmalamayı düşünün.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' içeri aktarması bu dosyada kullanılan genel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' içeri aktarması yerel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", "Import_0_from_1_90013": "'{0}' öğesini \"{1}\" kaynağından içeri aktar", "Import_assertion_values_must_be_string_literal_expressions_2837": "İçeri aktarma onaylama değerleri, dize sabit ifadeleri olmalıdır.", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "Commonjs 'require' çağrılarına çevrilen deyimler için içeri aktarma onaylamalarına izin verilmez.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "İçeri aktarma onayları, yalnızca '--module' seçeneği 'esnext' veya 'nodenext' olarak ayarlandığında desteklenir.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' çağrılarına derlenen deyimler için içeri aktarma onaylamalarına izin verilmiyor.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "İçeri aktarma onayları, yalnızca '--module' seçeneği 'esnext' veya 'nodenext' olarak ayarlandığında desteklenir.", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "İçeri aktarma onayları, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript modülleri hedeflenirken içeri aktarma ataması kullanılamaz. Bunun yerine 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' veya başka bir modül biçimi kullanmayı deneyin.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "İçeri aktarma öznitelik değerleri, sabit değerli dize ifadeleri olmalıdır.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' çağrılarına derlenen deyimler üzerinde içeri aktarma özniteliklerine izin verilmiyor.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "İçeri aktarma öznitelikleri, yalnızca '--module' seçeneği 'esnext', 'nodenext' veya 'preserve' olarak ayarlandığında desteklenir.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "İçeri aktarma öznitelikleri, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", "Import_declaration_0_is_using_private_name_1_4000": "'{0}' içeri aktarma bildirimi, '{1}' özel adına sahip veya bu adı kullanıyor.", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "İçeri aktarma bildirimi, yerel '{0}' bildirimiyle çakışıyor.", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Ad alanındaki içeri aktarma bildirimleri bir modüle başvuramaz.", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Yayılan JavaScript içine kaynak eşleme dosyalarını ekleyin.", "Includes_imports_of_types_referenced_by_0_90054": "'{0}' tarafından başvurulan türlerin içeri aktarmalarını içerir", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch dahil olmak üzere -w, dosya değişiklikleri için geçerli projeyi izlemeye başlayacak. Bir kez ayarlandıktan sonra, izleme modunu şununla yapılandırabilirsiniz:", + "Incomplete_quantifier_Digit_expected_1505": "Eksik niceleyici. Sayı bekleniyordu.", "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{0}' türündeki dizin imzası '{1}' türünde yok.", "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' türündeki dizin imzası yalnızca okumaya izin veriyor.", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "'{0}' birleştirilmiş bildirimindeki bildirimlerin tümü dışarı aktarılmış veya yerel olmalıdır.", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "Parametre türleri için kullanımdan çıkarım yap", "Infer_this_type_of_0_from_usage_95080": "Kullanımdan '{0}' öğesinin 'this' türünü çıkarsa", "Infer_type_of_0_from_usage_95011": "'{0}' türü için kullanımdan çıkarım yap", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Sınıf ifadelerinden çıkarım, --isolatedDeclarations ile desteklenmiyor.", "Initialize_property_0_in_the_constructor_90020": "Oluşturucu içinde '{0}' özelliğini başlat", "Initialize_static_property_0_90021": "'{0}' statik özelliğini başlat", "Initializer_for_property_0_2811": "'{0}' özelliği için başlatıcı", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "'{0}' örnek üyesi değişkeninin başlatıcısı, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Başlatıcı bu bağlama öğesi için bir değer sağlamıyor ve bağlama öğesi varsayılan değere sahip değil.", "Initializers_are_not_allowed_in_ambient_contexts_1039": "Çevresel bağlamlarda başlatıcılara izin verilmez.", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Bir TypeScript projesi başlatır ve bir tsconfig.json dosyası oluşturur.", + "Inline_variable_95184": "Satır içi değişken", "Insert_command_line_options_and_files_from_a_file_6030": "Dosyadaki komut satırı seçeneklerini ve dosyaları ekleyin.", "Install_0_95014": "'{0}' yükle", "Install_all_missing_types_packages_95033": "Tüm eksik tür paketlerini yükle", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Genişletmedeki modül adı geçersiz; '{0}' adlı modül bulunamıyor.", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Yeni ifadeden geçersiz isteğe bağlı zincir. '{0}()' çağrısı mı yapmak istediniz?", "Invalid_reference_directive_syntax_1084": "Geçersiz 'reference' yönergesi söz dizimi.", + "Invalid_syntax_in_decorator_1498": "Dekoratörde geçersiz söz dizimi.", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Geçersiz '{0}' kullanımı. Bu ifade bir sınıf statik bloğu içinde kullanılamaz.", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Geçersiz '{0}' kullanımı. Modüller otomatik olarak katı moddadır.", "Invalid_use_of_0_in_strict_mode_1100": "Katı modda geçersiz '{0}' kullanımı.", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' için geçersiz değer.", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' için geçersiz değer. '{0}' geçerli bir tanımlayıcı değil.", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "'{0}' öğe türü geçerli bir JSX öğesi değil.", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "'{0}' örnek türü geçerli bir JSX öğesi değil.", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "'{0}' dönüş türü geçerli bir JSX öğesi değil.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "'{0}' türü geçerli bir JSX öğe türü değil.", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}', 'extends {2}' yan tümcesiyle eşleşmiyor.", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' bir sınıfa eklenmemiş.", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' yalnızca bir imzanın son parametresi içinde görünebilir.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' etiketinin adı '{0}' ancak bu ada sahip bir parametre yok.", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' etiketi '{0}' adına sahip ancak bu ada sahip bir parametre yok. Bir dizi türü olsaydı 'arguments' ile eşleşirdi.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef, TypeScript türüne dönüştürülmüş olabilir.", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' etiketi bir tür ek açıklamasına sahip olmalıdır veya sonrasında '@property' ya da '@member' etiketlerinden biri gelmelidir.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef’leri, TypeScript türlerine dönüştürülmüş olabilir.", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc türleri yalnızca belge açıklamalarının içinde kullanılabilir.", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc türleri TypeScript türlerine taşınabilir.", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX özniteliklerine yalnızca boş olmayan 'expression' ifadesi atanabilir.", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "Eklenecek tür tanımlarının alınacağı klasörlerin listesi.", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Birleştirilmiş içerikleri, çalışma zamanında proje yapısını temsil eden kök klasörlerin listesi.", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "'{1}' kök dizininden '{0}' yükleniyor; aday konumu: '{2}'.", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türü '{1}'.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türü '{1}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türleri: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türleri: {1}.", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Yerel ayar, veya - biçiminde olmalıdır. Örneğin, '{0}' veya '{1}'.", "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' işlemi sırasında kullanılan yolları günlüğe kaydet.", "Longest_matching_prefix_for_0_is_1_6108": "'{0}' için eşleşen en uzun ön ek: '{1}'.", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Dize, sayı veya simge yerine yalnızca dönüş dizelerinin anahtarını oluşturun. Eski seçenek.", "Make_super_call_the_first_statement_in_the_constructor_90002": "Oluşturucudaki ilk deyime 'super()' tarafından çağrı yapılmasını sağla", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Eşleştirilmiş nesne türü örtük olarak 'any' şablon türüne sahip.", + "Mark_array_literal_as_const_90070": "Sabit değerli dizileri const olarak işaretle", "Matched_0_condition_1_6403": "'{0}' koşulu '{1}' eşleşti.", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Varsayılan '**/*' ekleme deseniyle eşleşti", "Matched_by_include_pattern_0_in_1_1407": "'{1}' içindeki '{0}' ekleme desenine göre eşleştirildi", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' metodu abstract olarak işaretlendiğinden bir uygulamaya sahip olamaz.", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Dışarı aktarılan arabirimin '{0}' metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Dışarı aktarılan arabirimin '{0}' metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metodun --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", "Method_not_implemented_95158": "Metot uygulanmadı.", "Modifiers_cannot_appear_here_1184": "Değiştiriciler burada görüntülenemez.", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' modülü yalnızca varsayılan olarak '{1}' bayrağı kullanılarak içeri aktarılabilir", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' modülünün dışarı aktarılmış '{1}' üyesi yok. Bunun yerine 'import {1} from {0}' kullanmak mı istediniz?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' modülü, aynı ada sahip bir yerel bildirim tarafından gizleniyor.", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "'{0}' modülü 'export =' kullanıyor ve 'export *' ile birlikte kullanılamaz.", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "'{1}' dosyası değiştirilmediğinden '{0}' modülü, bu dosyada bildirilen çevresel modül olarak çözümlendi.", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' modülü, '{1}' dosyasında yerel olarak bildirilmiş çevresel modül olarak çözümlendi.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' modülü '{1}' olarak çözümlendi, ancak '--allowArbitraryExtensions' ayarlanmadı.", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "'{0}' modülü '{1}' olarak çözüldü ancak '--jsx' ayarlanmadı.", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' modülü '{1}' olarak çözümlendi ancak '--resolveJsonModule' kullanılmadı.", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Modül bildirim adları yalnızca ' veya \" tırnak içine alınmış dizeleri kullanabilir.", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' kullanarak modül çözümleme başarısız oldu.", "Modules_6244": "Modüller", "Move_labeled_tuple_element_modifiers_to_labels_95117": "Etiketlenmiş demet öğesi değiştiricilerini etiketlere taşı", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Varsayılan dışarı aktarmadaki ifadeyi bir değişkene taşıyın ve bir tür ek açıklaması ekleyin.", "Move_to_a_new_file_95049": "Yeni bir dosyaya taşı", + "Move_to_file_95178": "Dosyaya taşı", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Birbirini izleyen birden çok sayısal ayırıcıya izin verilmez.", "Multiple_constructor_implementations_are_not_allowed_2392": "Birden çok oluşturucu uygulamasına izin verilmez.", "NEWLINE_6061": "YENİ SATIR", "Name_is_not_valid_95136": "Ad geçerli değil", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Adlandırılmış yakalama grupları yalnızca 'ES2018' veya üzeri hedeflenirken kullanılabilir.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Aynı ada sahip adlandırılmış yakalama grupları birbirini dışlamalıdır.", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' ve '{2}' türündeki '{0}' adlı özellikler aynı değil.", "Namespace_0_has_no_exported_member_1_2694": "'{0}' ad alanında dışarı aktarılan '{1}' üyesi yok.", "Namespace_must_be_given_a_name_1437": "Ad alanına bir ad verilmesi gerekir.", "Namespace_name_cannot_be_0_2819": "Ad alanı “{0}” olamaz.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' etkinken genel betik dosyalarında ad alanlarına izin verilmiyor. Bu dosyanın genel bir betik olması amaçlanmamışsa, 'moduleDetection'i 'force' olarak ayarlayın veya boş bir 'export {}' deyimi ekleyin.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "'this' parametrelerine ne dekoratörler ne de değiştiriciler uygulanamaz.", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Hiçbir temel oluşturucu, belirtilen tür bağımsız değişkeni sayısına sahip değil.", "No_constituent_of_type_0_is_callable_2755": "'{0}' türünde çağrılabilir bileşen yok.", "No_constituent_of_type_0_is_constructable_2759": "'{0}' türünde oluşturulabilir bileşen yok.", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "Bu çağrıyla eşleşen aşırı yükleme yok.", "No_type_could_be_extracted_from_this_type_node_95134": "Bu tür düğümünden tür ayıklanamadı", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "'{0}' toplu özelliği için kapsamda değer yok. Bir değer tanımlayın ya da bir başlatıcı sağlayın.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Soyut olmayan '{0}' sınıfı, '{2}' sınıfından devralınan '{1}' soyut üyesini uygulamıyor.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Soyut olmayan '{0}' sınıfı, '{2}' sınıfından devralınan {1} soyut üyesini uygulamaz.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2} ve {3} tane daha.", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Soyut olmayan sınıf ifadesi, '{1}' sınıfından devralınan '{0}' soyut üyesini uygulamıyor.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinin uygulamaları eksik: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinde uygulamalar eksik: {1} ve {2} tane daha.", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Null olmayan onaylamalar yalnızca TypeScript dosyalarında kullanılabilir.", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "'baseUrl' ayarlanmadığında göreli olmayan yollara izin verilmez. Başına './' koymayı deneyin", "Non_simple_parameter_declared_here_1348": "Basit olmayan parametre burada bildirildi.", "Not_all_code_paths_return_a_value_7030": "Tüm kod yolları bir değer döndürmez.", "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' türündeki tüm bileşenler çağrılabilir değil.", "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' türündeki tüm bileşenler oluşturulabilir değil.", + "Numbers_out_of_order_in_quantifier_1506": "Sayılar niceleyicide sıranın dışında.", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "2^53 veya üzeri mutlak değerlere sahip sayısal sabit değerler, tamsayı olarak doğru bir şekilde temsil edilemeyecek kadar büyüktür.", "Numeric_separators_are_not_allowed_here_6188": "Burada sayısal ayırıcılara izin verilmez.", "Object_is_of_type_unknown_2571": "Nesne 'unknown' türünde.", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Nesne sabit değeri yalnızca bilinen özellikleri belirtebilir ve '{0}', '{1}' türünde değil.", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Nesne sabit değerinde yalnızca bilinen özellikler belirtilebilir, ancak '{0}', '{1}' türünde yok. '{2}' yazmak mı istediniz?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "'{0}' nesne sabit değeri özelliği, örtük olarak '{1}' türüne sahip.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Toplu özellikler içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Yayma atamaları içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", "Octal_digit_expected_1178": "Sekizli basamak bekleniyor.", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "Sekizlik sabit değerli türlerde ES2015 söz dizimi kullanılmalıdır. '{0}' söz dizimini kullanın.", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "Sabit listesi üyelerinin başlatıcısında sekizlik sabit değerlere izin verilmez. '{0}' söz dizimini kullanın.", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "Katı modda sekizlik sabit değerlere izin verilmez.", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "ECMAScript 5 ve üzeri hedeflenirken sekizlik sabit değerler kullanılamaz. '{0}' söz dizimini kullanın.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Karakter sınıfında sekizli kaçış dizilerine ve geri başvurulara izin verilmiyor. Bu bir kaçış dizisi olarak amaçlandıysa, yerine '{0}' kullanın.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sekizli kaçış dizilerine izin verilmiyor. '{0}' söz dizimini kullanın.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Sabit değerli sekizliklere izin verilmiyor. '{0}' söz dizimini kullanın.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' değerlerinden biri '{2}' dizesidir ve diğer değerin bilinmeyen bir sayısal değer olduğu varsayılır.", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' anahtar sözcüğüyle yalnızca void işlevi çağrılabilir.", "Only_ambient_modules_can_use_quoted_names_1035": "Yalnızca çevresel modüller tırnak içinde ad kullanabilir.", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} ile birlikte yalnızca 'amd' ve 'system' modülleri desteklenir.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Yalnızca const dizileri --isolatedDeclarations ile çıkarsanabilir.", "Only_emit_d_ts_declaration_files_6014": "Yalnızca '.d.ts' bildirim dosyalarını yayımla.", - "Only_named_exports_may_use_export_type_1383": "Yalnızca adlandırılmış dışarı aktarmalarda 'export type' kullanılabilir.", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Yalnızca sayısal sabit listelerinde hesaplanmış üyeler olabilir ancak bu ifadede '{0}' türü var. Kapsamlılık denetimleri gerekmiyorsa bunun yerine bir nesne sabit değeri kullanmayı düşünebilirsiniz.", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript dosyalarının değil yalnızca d.ts dosyalarının çıkışını alın.", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' anahtar sözcüğüyle yalnızca temel sınıfa ait ortak ve korunan metotlara erişilebilir.", "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' işleci '{1}' türüne uygulanamıyor.", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' işleci, '{1}' ve '{2}' türüne uygulanamaz.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "İşleçler bir karakter sınıfı içinde karıştırılmamalıdır. Bunun yerine iç içe bir sınıfta sarmalayın.", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Düzenleme sırasında bir projeyi çok projeli başvuru denetiminin dışında tutun.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' seçeneği kullanım dışı bırakıldı ve TypeScript {2} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{3}\"' olarak belirtin.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'false' veya 'null' olarak ayarlanabilir.", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'null' olarak ayarlanabilir.", + "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' seçeneği yalnızca komut satırında belirtilebilir.", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0} seçeneği yalnızca '--inlineSourceMap' veya '--sourceMap' seçeneği sağlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Seçenek '{0}' yalnızca 'moduleResolution' değeri 'node16', 'nodenext' veya 'bundler' olarak ayarlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "'{0}' seçeneği, yalnızca 'module' değeri 'preserve', 'es2015' veya üzeri olarak ayarlandığında kullanılabilir.", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' seçeneği '{1}' olduğunda '{0}' seçeneği belirtilemez.", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "'target' seçeneği 'ES3' olduğunda '{0}' seçeneği belirtilemiyor.", "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' seçeneği, '{1}' seçeneği ile belirtilemez.", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{0}' seçeneği, '{1}' seçeneği belirtilmeden belirtilemez.", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' seçeneği veya '{2}' seçeneği belirtilmeden '{0}' seçeneği belirtilemez.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "'{0}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}' seçeneği kullanım dışı bırakıldı ve TypeScript {1} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{2}\"' olarak belirtin.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' seçeneği gereksiz ve '{1}' seçeneği ile belirtilemez.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "'allowImportingTsExtensions' seçeneği, yalnızca 'noEmit' veya 'emitDeclarationOnly' ayarlandığında kullanılabilir.", "Option_build_must_be_the_first_command_line_argument_6369": "'--build' seçeneği ilk komut satırı bağımsız değişkeni olmalıdır.", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' seçeneği yalnızca tsconfig kullanılarak, tek bir dosyada gösterilerek veya '--tsBuildInfoFile' seçeneği sağlandığında belirtilebilir.", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' seçeneği, yalnızca '--module' sağlandığında veya 'target' seçeneği 'ES2015' veya daha yüksek bir sürüm değerine sahip olduğunda kullanılabilir.", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "'preserveValueImports' seçeneği, yalnızca 'module' değeri 'es2015' veya üzeri olarak ayarlandığında kullanılabilir.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' seçeneği '{1}' olarak ayarlandığında 'moduleResolution' seçeneği '{0}' olarak ayarlanmalıdır (veya belirtilmemiş olarak bırakılmalıdır).", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' seçeneği '{1}' olarak ayarlandığında 'module' seçeneği '{0}' olarak ayarlanmalıdır.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "'project' seçeneği, komut satırındaki kaynak dosyalarıyla karıştırılamaz.", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "'--resolveJsonModule' seçeneği yalnızca modül kodu oluşturma 'commonjs', 'amd', 'es2015' veya 'esNext' olduğunda belirtilebilir.", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' modül çözümleme stratejisi olmadan '--resolveJsonModule' seçeneği belirtilemez.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' 'classic' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' 'none', 'classic' veya 'umd' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "'tsBuildInfoFile' seçeneği, 'incremental' veya 'composite' seçeneği belirtilmeden veya 'tsc -b' çalıştırmadan belirtilemez.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' değeri 'UMD', 'AMD' veya 'System' olarak ayarlandığında 'verbatimModuleSyntax' seçeneği kullanılamaz.", "Options_0_and_1_cannot_be_combined_6370": "'{0}' ve '{1}' seçenekleri birleştirilemez.", "Options_Colon_6027": "Seçenekler:", "Output_Formatting_6256": "Çıkış Biçimlendirmesi", "Output_compiler_performance_information_after_building_6615": "Derleme sonrasında derleyici performans bilgilerinin çıkışını alın.", "Output_directory_for_generated_declaration_files_6166": "Oluşturulan bildirim dosyaları için çıkış dizini.", - "Output_file_0_from_project_1_does_not_exist_6309": "'{1}' projesinden '{0}' çıkış dosyası yok", "Output_file_0_has_not_been_built_from_source_file_1_6305": "Çıkış dosyası '{0}' '{1}' kaynak dosyasından oluşturulmamış.", "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "Parametre bildirimi bekleniyor.", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametrenin adı var ancak türü yok. Şunu mu demek istediniz: '{0}: {1}'?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametre değiştiricileri yalnızca TypeScript dosyalarında kullanılabilir.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametrenin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "Derleme sonrasında yayılan dosyaların adlarını yazdırın.", "Print_this_message_6017": "Bu iletiyi yazdır.", "Private_accessor_was_defined_without_a_getter_2806": "Özel erişimci bir alıcı olmadan tanımlandı.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Özel alan '{0}' kapsayan sınıfta bildirilmelidir.", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Değişken bildirimlerinde özel tanımlayıcılara izin verilmiyor.", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Sınıf gövdelerinin dışında özel tanımlayıcılara izin verilmiyor.", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Özel tanımlayıcılara yalnızca sınıf gövdelerinde izin verilir ve yalnızca bir sınıf üyesi bildiriminin parçası olarak, özellik erişimi olarak veya ‘in’ ifadesinin sol tarafında kullanılabilirler.", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Özel tanımlayıcılar yalnızca ECMAScript 2015 veya üzeri hedeflenirken kullanılabilir.", "Private_identifiers_cannot_be_used_as_parameters_18009": "Özel tanımlayıcılar parametre olarak kullanılamaz.", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Özel veya korumalı '{0}' üyesine bir tür parametresinde erişilemiyor.", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan proje derlenemiyor", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden proje derlenemiyor", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' projesi zorla yeniden oluşturuluyor", + "Project_0_is_out_of_date_because_1_6420": "Proje '{0}' güncel değil çünkü {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Buildinfo dosyası '{1}', '{2}' dosyasının derlemenin kök dosyası iken artık öyle olmadığını belirttiğinden '{0}' projesi güncel değil.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Buildinfo dosyası '{1}' programın hataları bildirmesi gerektiğini belirttiğinden '{0}' projesi güncel değil.", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "'{1}' buildinfo dosyası bazı değişikliklerin gösterilmediğini belirttiğinden '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Buildinfo dosyası '{1}' compilerOptions içinde değişiklik olduğunu belirttiğinden '{0}' proje adı güncel değil", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "'{0}' projesinin '{1}' bağımlılığı güncel olmadığından proje güncel değil", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "'{1}' çıkışı '{2}' girişinden daha eski olduğundan '{0}' projesi güncel değil", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Çıkış dosyası '{1}' mevcut olmadığından '{0}' projesi güncel değil", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' projesinin çıkışı geçerli '{2}' sürümünden farklı olan '{1}' sürümü ile oluşturulduğundan proje güncel değil", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "'{0}' projesinin '{1}' bağımlılığı değiştirildiğinden proje güncel değil", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "'{1}' dosyası okunurken hata oluştuğu için '{0}' projesi güncel değil", "Project_0_is_up_to_date_6361": "'{0}' projesi güncel", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "En yeni '{1}' girişi '{2}' çıkışından daha eski olduğundan '{0}' projesi güncel", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "'{0}' özelliği başlatılmadan önce kullanılıyor.", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' özelliği '{1}' türü üzerinde olamaz. Şunu mu demek istediniz: '{2}'?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX yayılma özniteliğine ait '{0}' özelliği, hedef özelliğe atanamaz.", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Dışarı aktarılan sınıf ifadesinin '{0}' özelliği, özel veya korumalı olmayabilir.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Dışarı aktarılan anonim sınıf türünün '{0}' özelliği, özel veya korumalı olmayabilir.", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Dışarı aktarılan arabirimin '{0}' özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Dışarı aktarılan arabirimin '{0}' özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{1}' türündeki '{0}' özelliği '{2}' dizin türüne '{3}' atanamaz.", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' özelliği '{1}' içindeki temel özelliğin üzerine yazacak. Bu bilerek yapılıyorsa bir başlatıcı ekleyin. Aksi takdirde, bir 'declare' değiştiricisi ekleyin veya gereksiz bildirimi kaldırın.", "Property_assignment_expected_1136": "Özellik ataması bekleniyor.", "Property_destructuring_pattern_expected_1180": "Özellik yok etme deseni bekleniyor.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Özelliğin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", "Property_or_signature_expected_1131": "Özellik veya imza bekleniyor.", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Özellik değeri yalnızca, dize sabit değeri, sayısal sabit değer, 'true', 'false', 'null', nesne sabit değeri veya dizi sabit değeri olabilir.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "'ES5' veya 'ES3' hedefleniyorsa, 'for-of' içindeki yinelenebilir öğeler için yayılma ve yok etmeye yönelik tam destek sağlayın.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5' hedeflenirken, 'for-of' içindeki yinelenebilir öğeler için yayılma ve yok etmeye yönelik tam destek sağlayın.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Dışarı aktarılan sınıfın '{0}' genel metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "İşlev parametresi okunmadığında hata oluştur.", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Belirtilen 'any' türüne sahip ifade ve bildirimlerde hata oluştur.", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Örtük olarak 'any' türü içeren 'this' ifadelerinde hata tetikle.", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--isolatedModules' bayrağı sağlandığında bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.", + "Range_out_of_order_in_character_class_1517": "Aralık karakter sınıfında sıranın dışında.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' etkinken bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.", + "React_components_cannot_include_JSX_namespace_names_2639": "React bileşenleri JSX ad alanı adlarını içeremez", "Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript tarafından otomatik olarak yüklenen projelerin sayısını azaltın.", "Referenced_project_0_may_not_disable_emit_6310": "Başvurulan '{0}' projesi, yayma özelliğini devre dışı bırakamaz.", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.", "Referenced_via_0_from_file_1_1400": "'{1}' dosyasından '{0}' aracılığıyla başvuruldu", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda EcmaScript içe aktarmalarında açık dosya uzantılarına ihtiyaç duyar. İçe aktarma yoluna bir uzantı eklemeyi düşünün.", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda EcmaScript içe aktarmalarında açık dosya uzantılarına ihtiyaç duyar. Şunu mu demek istediniz: '{0}'?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution' 'node16' veya 'nodenext' olduğunda, bağıl içe aktarma yollarının ECMAScript içe aktarmalarında açık dosya uzantılarına ihtiyacı vardır. İçe aktarma yoluna bir uzantı eklemeyi düşünün.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda ECMAScript içeri aktarmalarında açık dosya uzantılarına ihtiyaç duyar. Şunu mu demek istediniz: '{0}'?", "Remove_a_list_of_directories_from_the_watch_process_6628": "İzleme işleminden dizinlerin listesini kaldırın.", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "İzleme modu işlemesinden bir dosya listesini kaldırın.", "Remove_all_unnecessary_override_modifiers_95163": "Tüm gereksiz 'override' değiştiricilerini kaldır", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": ".js dosyalarındaki hataları bildirin.", "Report_errors_on_unused_locals_6134": "Kullanılmayan yerel öğelerdeki hataları bildirin.", "Report_errors_on_unused_parameters_6135": "Kullanılmayan parametrelerdeki hataları bildirin.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Diğer araçların geçici olarak bildirim dosyaları oluşturabilmesi için dışarı aktarmalarda yeterli ek açıklama gerektir.", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Gerekli tür parametreleri, isteğe bağlı tür parametrelerini takip edemez.", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' modülünün çözümü '{1}' konumundaki önbellekte bulundu.", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{0}' tür başvurusu yönergesinin çözümlemesi '{1}' konumundaki önbellekte bulundu.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Göreli olmayan ad çözümlenemedi; npm kitaplığı için yapılandırma güncelleştirmesi gerektirip gerekmediğini görmek için modern Düğüm çözümleme özellikleri ile deneniyor.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Göreli olmayan ad çözümlenemedi; projenin yapılandırma güncelleştirmesi gerektirip gerektirmediğini görmek için '--moduleResolution bundler' ile deneniyor.", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'Keyof' değerini yalnızca dize değerli özellik adlarına (sayılar veya simgeler olmadan) çözümleyin.", + "Resolved_under_condition_0_6414": "'{0}' koşulu altında çözümlendi.", "Resolving_in_0_mode_with_conditions_1_6402": "{0} modunda {1} koşullarıyla çözümleniyor.", "Resolving_module_0_from_1_6086": "======== '{0}' modülü '{1}' öğesinden çözümleniyor. ========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "'{0}' modül adı, '{1}' - '{2}' temel url'sine göre çözümleniyor.", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== '{0}' tür başvuru yönergesi çözümleniyor, içeren dosya '{1}', kök dizin ayarlanmadı. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin: '{1}'. ========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin ayarlanmadı. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Özel typeRoots belirten program için tür başvurusu yönergesi çözümleniyor, 'node_modules' klasöründe arama atlanıyor.", "Resolving_with_primary_search_path_0_6121": "Birincil arama yolu '{0}' kullanılarak çözümleniyor.", "Rest_parameter_0_implicitly_has_an_any_type_7019": "'{0}' rest parametresi, örtük olarak 'any[]' türüne sahip.", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "'{0}' REST parametresi örtük olarak 'any[]' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", "Rewrite_all_as_indexed_access_types_95034": "Tümünü dizinlenmiş erişim türleri olarak yeniden yaz", "Rewrite_as_the_indexed_access_type_0_90026": "Dizine eklenmiş erişim türü '{0}' olarak yeniden yaz", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Sol işlenen hiçbir zaman null olmadığından ?? sağ işlenenine ulaşılamıyor.", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Kök dizin belirlenemiyor, birincil arama yolları atlanıyor.", "Root_file_specified_for_compilation_1427": "Derleme için belirtilen kök dosyası", "STRATEGY_6039": "STRATEJİ", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Projelerin artımlı derlenmesini sağlamak için .tsbuildinfo dosyalarını kaydedin.", "Saw_non_matching_condition_0_6405": "Eşleşmeyen koşul '{0}' görüldü.", "Scoped_package_detected_looking_in_0_6182": "Kapsamlı paket algılandı, '{0}' içinde aranıyor", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Geri dönüş uzantıları için tüm üst node_modules dizinleri aranıyor: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Tercih edilen uzantılar için tüm üst node_modules dizinleri aranıyor: {0}.", "Selection_is_not_a_valid_statement_or_statements_95155": "Seçim geçerli bir veya daha fazla deyim değil", "Selection_is_not_a_valid_type_node_95133": "Seçim geçerli bir tür düğümü değil", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Yayılan JavaScript için JavaScript dil sürümünü ayarlayın ve uyumlu kitaplık bildirimlerini ekleyin.", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "Ayrıntılı tanılama bilgilerini gösterin.", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Nelerin derleneceğini (veya '--clean' ile belirtilmişse silineceğini) göster", "Signature_0_must_be_a_type_predicate_1224": "'{0}' imzası bir tür koşulu olmalıdır.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "İmza bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Yukarı akış projesinde hata nedeniyle aşağı akış projelerini derlemeyi atla.", "Skip_type_checking_all_d_ts_files_6693": "Tüm .d.ts dosyalarında tür denetimini atlayın.", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript ile birlikte gelen .d.ts dosyaları için tür denetimini atlayın.", "Skip_type_checking_of_declaration_files_6012": "Bildirim dosyalarının tür denetimini atla.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan projenin derlenmesi atlanıyor", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden projenin derlenmesi atlanıyor", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Mutlak bir URI gibi görünen '{0}' modül türü atlanıyor, hedef dosya türleri: {1}.", "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", "Source_has_0_element_s_but_target_allows_only_1_2619": "Kaynakta {0} öğe var ancak hedef yalnızca {1} öğeye izin veriyor.", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript izleme modunun nasıl çalıştığını belirtin.", "Specify_library_files_to_be_included_in_the_compilation_6079": "Derlemeye dahil edilecek kitaplık dosyalarını belirtin.", "Specify_module_code_generation_6016": "Modül kodu oluşturmayı belirtin.", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Modül çözümleme stratejisini belirtin: 'Node' (Node.js) veya 'classic' (TypeScript pre-1.6).", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' kullanırken JSX fabrika işlevlerini içeri aktarmak için kullanılan modül belirticisini belirt.", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' gibi davranan birden çok klasör belirt.", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Ayarlarının devralındığı temel yapılandırma dosyalarına yönelik bir veya daha fazla yol ya da düğüm modülü başvurusu belirtin.", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "Statik üyeler sınıf türündeki parametrelere başvuramaz.", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "'{0}' statik özelliği, '{1}' oluşturucu işlevinin yerleşik özelliği olan 'Function.{0}' ile çakışıyor.", "String_literal_expected_1141": "Dize sabit değeri bekleniyor.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' bayrağı 'es2015' veya 'es2020' olarak ayarlandığında, sabit değerli dize içeri ve dışarı aktarma adları desteklenmez.", "String_literal_with_double_quotes_expected_1327": "Çift tırnak içine alınmış bir dize sabit değeri bekleniyor.", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Renk ve bağlam kullanarak hataların ve iletilerin stilini belirleyin (deneysel).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Eksi işareti varken alt sayfa bayrakları bulunmalıdır.", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Ardışık özellik bildirimleri aynı türe sahip olmalıdır. '{0}' özelliği '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Ardışık değişken bildirimleri aynı türe sahip olmalıdır. '{0}' değişkeni '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' deseni için '{0}' alternatifinin türü hatalı; beklenen: 'string' alınan: '{2}'.", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "İsteğe bağlı bir zincirde etiketli şablon ifadelerine izin verilmiyor.", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Hedef yalnızca {0} öğeye izin veriyor ancak kaynakta daha fazlası olabilir.", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Hedef {0} öğe gerektiriyor ancak kaynakta daha az sayıda öğe olabilir.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Hedef imza çok az bağımsız değişken sağlıyor. {0} veya daha fazla bekleniyordu ancak {1} alındı.", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' değiştiricisi yalnızca TypeScript dosyalarında kullanılabilir.", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' işleci, 'symbol' türüne uygulanamaz.", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' işlecine boole türü için izin verilmez. Bunun yerine '{1}' kullanmayı göz önünde bulundurun.", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Asenkron bir yineleyicinin '{0}' özelliği bir metot olmalıdır.", "The_0_property_of_an_iterator_must_be_a_method_2767": "Yineleyicinin '{0}' özelliği bir metot olmalıdır.", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' türü başka çok az sayıda türe atanabilir. Bunun yerine 'any' türünü mü kullanmak istemiştiniz?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "ES3 ve ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvuru yapılamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "ES3 ve ES5'te 'arguments' nesnesine zaman uyumsuz bir işlev veya metot içinde başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) bayrağı ve Unicode Kümeleri (v) bayrağı aynı anda ayarlanamaz.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvurulamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' nesnesine ES5'teki asenkron bir işlev veya metotta başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' deyiminin gövdesi boş deyim olamaz.", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Çağrı, bu uygulamada başarılı olabilirdi, ancak aşırı yüklemelerin uygulama imzaları dışarıdan görünmüyor.", "The_character_set_of_the_input_files_6163": "Giriş dosyalarının karakter kümesi.", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Çıkarsanan '{0}' türü, önemsiz olarak seri hale getirilemeyen döngüsel yapıya sahip bir türe başvurur. Tür ek açıklaması gerekir.", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Çıkarsanan '{0}' türü, erişilemeyen bir '{1}' türüne başvuruyor. Tür ek açıklaması gereklidir.", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Bu düğümün çıkarsanan türü, derleyicinin seri hale getireceği maksimum uzunluğu aşıyor. Açık tür ek açıklaması gerekiyor.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' bildiriminin başlatıcısı ya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' bildiriminin başlatıcısı ya '[Symbol.asyncDispose]()' veya '[Symbol.dispose]5D;()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "'{1}' özelliği birden çok destekçide bulunduğundan ve bazılarında özel olduğundan, '{0}' kesişimi 'never' değerine düşürüldü.", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "'{1}' özelliği bazı bileşenlerde çakışan türlere sahip olduğundan '{0}' kesişimi 'never' değerine düşürüldü.", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' anahtar sözcüğü, yalnızca derleyicinin sağladığı iç türleri bildirmek için kullanılabilir.", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "Son aşırı yükleme aşağıdaki hatayı verdi.", "The_last_overload_is_declared_here_2771": "Son aşırı yükleme burada bildirilir.", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' deyiminin sol tarafı yok etme deseni olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ifadesinin sol tarafı 'using' bildirimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ifadesinin sol tarafı 'await using' bildirimi olamaz.", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Aritmetik işlemin sol tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Atama ifadesinin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Atama ifadesinin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Bir 'instanceof' ifadesinin sol tarafı, sağ tarafın '[Symbol.hasInstance]' metodunun ilk bağımsız değişkenine atanabilir olmalıdır.", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' ifadesinin sol tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır.", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Kullanıcıya ileti görüntülenirken kullanılacak yerel ayar (örn. 'tr-tr')", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules altında arama yapmak ve JavaScript dosyalarını yüklemek için en yüksek bağımlılık derinliği.", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' dışa aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleyici seçeneğini sağlayın.", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' içe aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleme seçeneğini sağlayın.", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "'{0}' özelliği aynı yazımı içeren başka bir özel tanımlayıcı tarafından gölgelendiğinden bu sınıf içindeki '{1}' türü üzerinde bu özelliğe erişilemiyor.", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' erişimcisinin dönüş türü, 'set' erişimcisinin türüne atanabilmelidir", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Parametre dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Özellik dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zaman uyumsuz bir işlevin dönüş türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zaman uyumsuz bir işlevin ya da metodun döndürme türü, genel Promise türü olmalıdır.", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Asenkron bir işlevin ya da metodun dönüş türü, genel Promise türü olmalıdır. 'Promise<{0}>' yazmak mı istediniz?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' deyiminin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır ancak burada '{0}' türüne sahip.", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Aritmetik işlemin sağ tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' ifadesinin sağ tarafı 'any' türünde veya 'Function' arabirim türüne atanabilir bir türde olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' ifadesinin sağ tarafı ya 'any' türünde, bir sınıf, işlev veya 'Function' arayüz türüne atanabilir başka bir tür ya da 'Symbol.hasInstance' metoduna sahip bir nesne türü olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' ifadesinin sağ tarafı bir örnek oluşturma ifadesi olmamalıdır.", "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' dosyasının kök değeri bir nesne olmalıdır.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör {0} bekliyor.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör en azından {0} bekliyor.", "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' için gölgeleme bildirimi burada tanımlanır", "The_signature_0_of_1_is_deprecated_6387": "'{1}' öğesinin '{0}' imzası kullanım dışı bırakıldı.", "The_specified_path_does_not_exist_Colon_0_5058": "Belirtilen yol yok: '{0}'.", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Dışarı aktarma deyimindeki 'dışarı aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir dışarı aktarma üzerinde kullanılamaz.", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "İçeri aktarma deyimindeki 'içeri aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir içeri aktarma üzerinde kullanılamaz.", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "İşlev bildiriminin türü işlevin imzasıyla eşleşmelidir.", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "Bu ifadenin türü kararsız bir özellik olan 'resolution-mode' onaylaması olmadan adlandırılamaz. Bu hatayı sessize almak için gece TypeScript kullanın. 'npm install -D typescript@next' ile güncelleştirmeyi deneyin.", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "'{0}' özelliği seri hale getirilemediğinden bu düğüm türü seri hale getirilemiyor.", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Asenkron yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip bir tür için promise olmalıdır.", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Bir yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip olmalıdır.", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ifadesi desteklenmiyor. 'with' bloklarındaki tüm simgeler 'any' türüne sahip olacaktır.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' konumunda türler var, ancak bu sonuç geçerli 'moduleResolution' ayarınız altında çözümlenemiyor. 'node16', 'nodenext' veya 'bundler' öğesine güncelleştirmeyi düşünün.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' konumunda türler var ancak package.json \"exports\" dikkate alındığında bu sonuç çözümlenemedi. '{1}' kitaplığının package.json dosyasını veya türlerini güncelleştirmesi gerekiyor olabilir.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Bu normal ifadede '{0}' adlı yakalama grubu yok.", + "There_is_nothing_available_for_repetition_1507": "Yineleme için kullanılabilecek bir şey yok.", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Bu JSX etiketinin '{0}' özelliği, '{1}' türünde tek bir alt öğe bekliyor ancak birden çok alt öğe sağlandı.", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Bu JSX etiketinin '{0}' özelliği, birden çok alt öğe gerektiren '{1}' türünü bekliyor ancak yalnızca tek bir alt öğe sağlandı.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca yakalama grupları yok.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca {0} yakalama grubu var.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Bu ikili ifade hiçbir zaman boş değerli değildir. Parantezler mi eksik?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Bu karakter düzenli bir ifadede kaçış işareti ile kullanılamaz.", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' ve '{1}' türlerinde çakışma olmadığından bu karşılaştırma yanlışlıkla yapılmış gibi görünüyor.", "This_condition_will_always_return_0_2845": "Bu koşul her zaman '{0}' döndürür.", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript nesneleri değer göre değil başvuruya göre karşılaştırdığından bu koşul her zaman '{0}' değerini döndürür.", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Bu '{0}' her zaman tanımlandığı için bu koşul her zaman doğru olacaktır.", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Bu oluşturucu işlevi bir sınıf bildirimine dönüştürülebilir.", + "This_expression_is_always_nullish_2871": "Bu ifade her zaman boş değerlidir.", "This_expression_is_not_callable_2349": "Bu ifade çağrılabilir değil.", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Bu ifade 'get' erişimcisi olduğundan çağrılamaz. Bunu '()' olmadan mı kullanmak istiyorsunuz?", "This_expression_is_not_constructable_2351": "Bu ifade oluşturulabilir değil.", "This_file_already_has_a_default_export_95130": "Bu dosyanın zaten varsayılan bir dışarı aktarması var", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "'importsNotUsedAsValues' 'error' olarak ayarlandığından, bu içeri aktarma hiçbir zaman değer olarak kullanılmaz ve 'import type' kullanmalıdır.", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Bu, genişletilmekte olan bildirimdir. Genişleten bildirimi aynı dosyaya taşımayı düşünün.", + "This_kind_of_expression_is_always_falsy_2873": "Bu ifade türü her zaman yanlıştır.", + "This_kind_of_expression_is_always_truthy_2872": "Bu ifade türü her zaman doğrudur.", "This_may_be_converted_to_an_async_function_80006": "Bu, asenkron bir işleve dönüştürülebilir.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Bu üye, '{0}' temel sınıfında bildirilmediğinden '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' etiketi olan bir JSDoc yorumuna sahip olamaz. '{1}' öğesini mi kastettiniz?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Bu üye, '{0}' temel sınıfında bildirilen soyut bir metodu geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Bu modüle yalnızca '{0}' bayrağını açıp modülün varsayılan dışarı aktarma işlemine başvurarak ECMAScript içeri/dışarı aktarma işlemleri ile başvurulabilir.", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Bu modül, 'export =' ile bildirildi ve yalnızca '{0}' bayrağı kullanılırken varsayılan bir içeri aktarmayla kullanılabilir.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Bu işlem basitleştirilebilir. Bu vardiya `{0} {1} {2}` ile aynı.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Bu aşırı yükleme, dönüş türü ek açıklaması içermediğinden '{0}' türünü örtük olarak döndürür.", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Bu aşırı yükleme imzası, uygulama imzasıyla uyumlu değil.", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Bu parametreye 'use strict' yönergesi ile izin verilmiyor.", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu parametre özelliğinin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Bu parametre özelliği, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından bir 'override' değiştiricisi içermelidir.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Bu normal ifade bayrağı bir alt örüntü içinde değiştirilemez.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Bu normal ifade bayrağı, yalnızca '{0}' veya üzeri hedeflenirken kullanılabilir.", "This_spread_always_overwrites_this_property_2785": "Bu yayılma her zaman bu özelliğin üzerine yazar.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Sonuna virgül veya açık kısıtlama ekleyin.", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Bunun yerine `as` ifadesi kullanın.", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya '{1}' dizinine ''type': 'module'' alanı ekleyin.", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Üst düzey 'await' ifadelerine yalnızca 'module' seçeneği 'es2022', 'esnext', 'system', 'node16' veya 'nodenext' olarak ayarlandığında ve 'target' seçeneği 'es2017' veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Üst düzey 'await' ifadelerine yalnızca 'module' seçeneği; 'es2022', 'esnext', 'system', 'node16', 'nodenext' veya 'preserve' olarak ayarlandığında ve 'target' seçeneği; 'es2017' veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Üst düzey 'await using' ifadelerine yalnızca 'module' seçeneği; 'es2022', 'esnext', 'system', 'node16', 'nodenext' veya 'preserve' olarak ayarlandığında ve 'target' seçeneği; 'es2017' veya üzeri olarak ayarlandığında izin verilir.", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts dosyalarındaki üst düzey bildirimler bir 'declare' veya 'export' değiştiricisi ile başlamalıdır.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Üst düzey 'bekleme için' döngülerine yalnızca 'modül' seçeneği 'es2022', 'esnext', 'system', 'node16' veya 'nodenext' olarak ayarlandığında ve 'target' seçeneği 'es2017' veya üstü olarak ayarlandığında izin verilir.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Üst düzey 'for await' döngülerine yalnızca 'module' seçeneği; 'es2022', 'esnext', 'system', 'node16', 'nodenext' veya 'preserve' olarak ayarlandığında ve 'target' seçeneği; 'es2017' veya üzeri olarak ayarlandığında izin verilir.", "Trailing_comma_not_allowed_1009": "Sona eklenen virgüle izin verilmez.", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Her dosyayı ayrı bir modül olarak derleyin ('ts.transpileModule' gibi).", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Varsa `npm i --save-dev @types/{1}` deneyin veya `declare module '{0}';` deyimini içeren yeni bir bildirim (.d.ts) dosyası ekleyin", "Trying_other_entries_in_rootDirs_6110": "'rootDirs' içindeki diğer girişler deneniyor.", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' alternatifi deneniyor, aday modül konumu: '{1}'.", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Tüm demet üyelerinin adı olmalı veya hiçbirinin adı olmamalıdır.", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "'{1}' uzunluğundaki '{0}' demet türü, '{2}' dizininde öğe içermiyor.", "Tuple_type_arguments_circularly_reference_themselves_4110": "Demet türü bağımsız değişkenleri döngüsel olarak kendisine başvuruyor.", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' türü yalnızca '--downlevelIteration' bayrağı kullanılarak veya '--target' için 'es2015' ya da üzeri kullanıldığında yinelenebilir.", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' türü, '{1}' türüyle eşleşen dizin imzasına sahip değil.", "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' türünün '{1}' türüyle ortak özelliği yok.", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "'{0}' türü, tür bağımsız değişkeni listesi için geçerli imzalar içermiyor.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Tür '{0}' geneldir ve yalnızca okuma için dizini oluşturulabilir.", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2} ve diğer {3} özellik.", "Type_0_is_not_a_constructor_function_type_2507": "'{0}' türü bir oluşturucu işlevi türü değil.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "ES5/ES3 içindeki '{0}' türü, Promise ile uyumlu bir oluşturucu değerine başvurmadığından geçerli bir zaman uyumsuz işlev dönüş türü değil.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "ES5 içindeki '{0}' türü, Promise ile uyumlu bir oluşturucu değerine başvurmadığından geçerli bir zaman uyumsuz işlev dönüş türü değil.", "Type_0_is_not_an_array_type_2461": "'{0}' türü bir dizi türü değil.", "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' türü, bir dizi türü veya dize türü değil.", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' türü, bir dizi türü veya dize türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' türü '{1}' türüne atanamaz. '{2}' mi demek istediniz?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' türü '{1}' türüne atanamaz. Bu ada sahip iki farklı tür mevcut, ancak bu türler birbiriyle ilişkisiz.", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Varyans ek açıklaması tarafından belirtildiği gibi '{0}' türü '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Hesaplanan sabit listesi üye değerleri gereğince, '{0}' türü '{1}' türüne atanamaz.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef türüne 'undefined' eklemeyi deneyin.", "Type_0_is_not_comparable_to_type_1_2678": "'{0}' türü '{1}' türüyle karşılaştırılamaz.", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "Tür bağımsız değişkeni bekleniyor.", "Type_argument_list_cannot_be_empty_1099": "Tür bağımsız değişkeni listesi boş olamaz.", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Tür bağımsız değişkenleri yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_arguments_cannot_be_used_here_1342": "Tür bağımsız değişkenleri burada kullanılamaz.", "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' için tür bağımsız değişkenleri, döngüsel olarak kendisine başvuruyor.", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Tür onaylama ifadeleri, yalnızca TypeScript dosyalarında kullanılabilir.", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Kaynaktaki {0} konumunda bulunan tür, hedefteki {1} konumunda bulunan türle uyumlu değil.", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Kaynaktaki {0} ile {1} arasındaki konumlarda bulunan tür, hedefteki {2} konumunda bulunan türle uyumlu değil.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' özel adını içeren tür, --isolatedDeclarations ile kullanılamaz.", "Type_declaration_files_to_be_included_in_compilation_6124": "Derlemeye eklenecek tür bildirim dosyaları.", "Type_expected_1110": "Tür bekleniyor.", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Tür içe aktarma iddiaları, `import` veya `require`. değerine sahip tam olarak bir anahtara - `resolution-mode`’na sahip olmalıdır.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Tür içe aktarma öznitelikleri, 'import' veya 'require' değerine sahip, tam olarak tek bir 'resolution-mode' anahtarına sahip olmalıdır.", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tür örneği oluşturma işlemi, fazla ayrıntılı ve büyük olasılıkla sınırsız.", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Türe, kendi 'then' metodunun tamamlama geri aramasında doğrudan veya dolaylı olarak başvuruluyor.", "Type_library_referenced_via_0_from_file_1_1402": "'{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Bir ifade olarak çağrıldığında metot dekoratörünün imzası çözümlenemez.", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Bir ifade olarak çağrıldığında parametre dekoratörünün imzası çözümlenemez.", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Bir ifade olarak çağrıldığında özellik dekoratörünün imzası çözümlenemez.", + "Undetermined_character_escape_1513": "Belirlenmemiş karakter kaçışı.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Beklenmeyen '{0}'. Ters eğik çizgiyle bundan kaçmak mı istediniz?", "Unexpected_end_of_text_1126": "Beklenmeyen metin sonu.", "Unexpected_keyword_or_identifier_1434": "Beklenmeyen anahtar kelime veya tanımlayıcı.", "Unexpected_token_1012": "Beklenmeyen belirteç.", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'>'}` veya `>`?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'}'}` veya `}`?", "Unexpected_token_expected_1179": "Beklenmeyen belirteç. '{' bekleniyordu.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode kaçış dizisi burada görünemez.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode kaçış dizileri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode özellik değeri ifadeleri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unknown_Unicode_property_name_1524": "Bilinmeyen Unicode özelliği adı.", + "Unknown_Unicode_property_name_or_value_1529": "Bilinmeyen Unicode özelliği adı veya değeri.", + "Unknown_Unicode_property_value_1526": "Bilinmeyen Unicode özelliği değeri.", "Unknown_build_option_0_5072": "Bilinmeyen '{0}' derleme seçeneği.", "Unknown_build_option_0_Did_you_mean_1_5077": "Bilinmeyen '{0}' derleme seçeneği. Şunu mu demek istediniz: '{1}'?", "Unknown_compiler_option_0_5023": "Bilinmeyen '{0}' derleyici seçeneği.", "Unknown_compiler_option_0_Did_you_mean_1_5025": "Bilinmeyen '{0}' derleyici seçeneği. Şunu mu demek istediniz: '{1}'?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Bilinmeyen anahtar sözcük veya tanımlayıcı. “{0}” mi demek istediniz?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "'Excludes' seçeneği bilinmiyor. 'Exclude' seçeneğini mi belirtmek istediniz?", + "Unknown_regular_expression_flag_1499": "Bilinmeyen normal ifade bayrağı.", "Unknown_type_acquisition_option_0_17010": "Bilinmeyen '{0}' tür alımı seçeneği.", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Bilinmeyen '{0}' tür alma seçeneği. Şunu mu demek istediniz: '{1}'?", "Unknown_watch_option_0_5078": "Bilinmeyen '{0}' izleme seçeneği.", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "Kullanılmayan etiket.", "Unused_ts_expect_error_directive_2578": "Kullanılmayan '@ts-expect-error' yönergesi.", "Update_import_from_0_90058": "\"{0}\" kaynağından içeri aktarmayı güncelleştir", - "Updating_output_of_project_0_6373": "'{0}' projesinin çıkışı güncelleştiriliyor...", + "Update_modifiers_of_0_90061": "'{0}' değiştiricilerini güncelleştirin", "Updating_output_timestamps_of_project_0_6359": "'{0}' projesinin çıkış zaman damgaları güncelleştiriliyor...", "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' projesinin değiştirilmemiş çıkış zaman damgaları güncelleştiriliyor...", "Use_0_95174": "`{0}` kullanın.", + "Use_0_instead_5106": "Bunun yerine '{0}' kullanın.", "Use_Number_isNaN_in_all_conditions_95175": "Tüm koşullarda `Number.isNaN` kullanın.", "Use_element_access_for_0_95145": "'{0}' için öğe erişimi kullan", "Use_element_access_for_all_undeclared_properties_95146": "Tüm bildirilmemiş özellikler için öğe erişimi kullanın.", + "Use_import_type_95180": "'İçeri aktarma türü' kullanın", "Use_synthetic_default_member_95016": "Yapay 'default' üyesini kullanın.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Paket içe aktarmalarını çözümlerken package.json 'exports' alanını kullanın.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "İçeri aktarmaları çözümlerken package.json dosyasındaki 'imports' alanını kullanın.", + "Use_type_0_95181": "'type {0}' kullanın", "Using_0_subpath_1_with_target_2_6404": "Hedef '{2}' ile '{0}' alt yol '{1}' kullanılıyor.", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' deyiminde dize kullanma yalnızca ECMAScript 5 veya üzerinde desteklenir.", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build kullanarak -b, tsc’nin derleyici yerine derleme düzenleyici gibi davranmasına yol açar. Bu, kompozit projeler oluşturmayı tetiklemek için kullanılır. Daha fazla bilgi edinmek için bkz. {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "Değişken bildirimi bekleniyor.", "Variable_declaration_list_cannot_be_empty_1123": "Değişken bildirim listesi boş olamaz.", "Variable_declaration_not_allowed_at_this_location_1440": "Bu konumda değişken bildirimine izin verilmiyor.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Değişkende --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Birden çok bildirimi olan değişkenler satır içine alınamaz.", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Kaynaktaki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe, hedefteki {1} konumunda bulunan öğeyle eşleşmiyor.", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Varyans ek açıklamaları yalnızca nesne, işlev, oluşturucu ve eşlenen türler için tür diğer adlarında desteklenir.", "Version_0_6029": "Sürüm {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "Tür denetimi sırasında 'null' ve 'undefined' öğelerini hesaba kat.", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Eski konsol çıktısının ekrandan kaldırılmak yerine izleme modunda tutulup tutulmayacağı.", "Wrap_all_invalid_characters_in_an_expression_container_95109": "Geçersiz tüm karakterleri bir ifade kapsayıcısında sarmalayın", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Tüm geçersiz dekoratör ifadelerini parantez içine alın", "Wrap_all_object_literal_with_parentheses_95116": "Tüm nesne sabit değerini parantez içine alın", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX parçasındaki tüm ana öğesiz JSX'leri sarmala", "Wrap_in_JSX_fragment_95120": "JSX parçasında sarmala", + "Wrap_in_parentheses_95194": "Parantez içine alın", "Wrap_invalid_character_in_an_expression_container_95108": "Geçersiz karakteri bir ifade kapsayıcısında sarmalayın", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Nesne sabit değeri olması gereken aşağıdaki gövdeyi parantez içine alın", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Tüm derleyici seçenekleri hakkında bilgi edinmek için bkz. {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' ve '{1}' dizin imzaları uyumsuz.", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' ve '{1}' işlemleri ayraç olmadan karıştırılamaz.", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' iki kez belirtildi. '{0}' özniteliğinin üzerine yazılacak.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' bir türün sonunda geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' bir türün başlangıcında geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' yalnızca 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' yalnızca varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' yalnızca 'require' çağrısı kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' yalnızca 'require' çağrısı veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' yalnızca 'import {1} = require({2})' veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' yalnızca 'import {1} = require({2})' kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "'{0}', genel betik dosyası olarak kabul edildiğinden '--isolatedModules' altında derlenemiyor. Bunu bir modül haline getirmek için içeri aktarma, dışarı aktarma veya boş 'export {}' deyimi ekleyin.", "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}', JSX bileşeni olarak kullanılamaz.", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}', 'export type' kullanılarak dışarı aktarıldığından değer olarak kullanılamaz.", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}', 'import type' kullanılarak içeri aktarıldığından değer olarak kullanılamaz.", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' bileşenleri, alt öğe olarak metin kabul etmez. JSX'teki metin 'string' türünde ancak beklenen '{1}' türü: '{2}'.", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' örneği, '{1}' ile ilişkili olmayan rastgele bir türle oluşturulabilir.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' bildirimleri yalnızca bir bloğun içinde bildirilebilir.", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' bildirimlerinde bağlama desenleri olamaz.", + "_0_declarations_must_be_initialized_1155": "'{0}' bildirimleri başlatılmalıdır.", "_0_expected_1005": "'{0}' bekleniyor.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' bir dize türüne sahip ancak 'isolatedModules' etkinleştirildiğinde sözdizimsel olarak tanınabilir dize sözdizimi olmalıdır.", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' öğesinin dışarı aktarılan '{1}' adlı bir üyesi yok. '{2}' demek mi istediniz?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' örtük olarak bir '{1}' dönüş türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' dizin türü '{1}' ' {2}' dizin türüne '{3}' atanamaz.", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' temel elemandır ancak '{1}' sarmalayıcı nesnedir. Mümkün olduğunda '{0}' kullanmayı tercih edin.", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' bir tür ve JavaScript dosyalarında içeri aktarılamaz. Bir JSDoc türü ek açıklamasında '{1}' kullanın.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "'{0}' bir türdür ve 'preserveValueImports' ve 'isolatedModules' seçeneklerinin her ikisi de etkin olduğunda yalnızca türü içeri aktarma kullanılarak içeri aktarılmalıdır.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' bir türdür ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}', '{1}' türünün kullanılmayan bir yeniden adlandırması. Tür ek açıklaması olarak mı kullanmak istediniz?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}', '{1}' türündeki kısıtlamaya atanabilir ancak '{1}' örneği, '{2}' kısıtlamasının farklı bir alt türüyle oluşturulabilir.", "_0_is_automatically_exported_here_18044": "'{0}' burada otomatik olarak dışarı aktarılır.", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "'{0}' listesi boş olamaz.", "_0_modifier_already_seen_1030": "'{0}' değiştiricisi zaten görüldü.", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' değiştiricisi yalnızca bir sınıfın, arabirimin veya tür diğer adının tür parametresinde görünebilir", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' değiştiricisi yalnızca bir işlevin, metodun veya sınıfın tür parametresinde görünebilir", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' değiştiricisi bir oluşturucu bildiriminde görüntülenemez.", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' değiştiricisi, bir modülde veya ad alanı öğesinde görünemez.", "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' değiştiricisi bir parametrede görüntülenemez.", "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' değiştiricisi, bir tür üyesinde görünemez.", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' değiştiricisi, bir tür parametresinde görünemez", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' değiştiricisi bir 'using' bildiriminde görünemez.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' değiştiricisi bir 'await using' bildiriminde görünemez.", "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' değiştiricisi, bir dizin imzasında görünemez.", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' değiştiricisi bu tip sınıf öğelerinde görünemez.", "_0_modifier_cannot_be_used_here_1042": "'{0}' değiştiricisi burada kullanılamaz.", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' değiştiricisi, '{1}' değiştiricisi ile birlikte kullanılamaz.", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' değiştiricisi özel bir tanımlayıcıyla birlikte kullanılamaz.", "_0_modifier_must_precede_1_modifier_1029": "'{0}' değiştiricisi, '{1}' değiştiricisinden önce gelmelidir.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' ifadesinden sonra küme ayraçları içine alınmış bir Unicode özellik değeri ifadesi gelmelidir.", "_0_needs_an_explicit_type_annotation_2782": "'{0}' açık bir tür ek açıklamasına ihtiyaç duyuyor.", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir ad alanı olarak kullanılıyor.", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor.", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' bir UMD genel öğesine başvuruyor, ancak geçerli dosya bir modül. Bunun yerine bir içeri aktarma eklemeyi deneyin.", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' bir değere başvuruyor ancak burada tür olarak kullanılıyor. 'typeof {0}' kullanmak mı istediniz?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'preserveValueImports' ve 'isolatedModules' seçeneklerinin her ikisi de etkin olduğunda yalnızca türü içeri aktarma kullanılarak içeri aktarılmalıdır.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'isolatedModules' etkin olduğunda yalnızca türü yeniden dışarı aktarma kullanılarak yeniden dışarı aktarılmalıdır.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkin olduğunda yalnızca türü yeniden dışarı aktarma kullanılarak yeniden dışarı aktarılmalıdır.", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}', config.json dosyasının 'compilerOptions' nesnesi içinden ayarlanmalıdır", "_0_tag_already_specified_1223": "'{0}' etiketi zaten belirtildi.", "_0_was_also_declared_here_6203": "'{0}' öğesi de burada bildirildi.", @@ -1780,19 +1981,22 @@ "and_here_6204": "ve buraya.", "arguments_cannot_be_referenced_in_property_initializers_2815": "Özellik başlatıcılarda 'arguments' öğesine başvurulamaz.", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": İçe aktarma, dışa aktarma, import.meta, jsx (jsx: react-jsx ile) veya esm biçimi (modül: node16+ ile) içeren dosyaları modül olarak ele alın.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' ifadeleri bir parametre başlatıcısında kullanılamaz.", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' öğesinin bu ifadenin türü üzerinde etkisi yoktur.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ifadeleri bir sınıf statik bloğu içinde kullanılamaz.", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' seçeneği '{0}' olarak ayarlandı; göreli olmayan '{1}' modül adını çözümlemek için bu değer kullanılıyor.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' ardından bir ASCII harfi gelmelidir.", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' yalnızca dosyanın başlangıcında kullanılabilir.", "case_or_default_expected_1130": "'case' veya 'default' ifadeleri bekleniyor.", "catch_or_finally_expected_1472": "'catch' veya 'finally' bekleniyor.", - "const_declarations_can_only_be_declared_inside_a_block_1156": "'const' bildirimleri yalnızca bir bloğun içinde bildirilebilir.", - "const_declarations_must_be_initialized_1155": "'const' bildirimlerinin başlatılması gerekiyor.", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' sabit listesi üyesi başlatıcısı, sonlu olmayan bir değer olarak hesaplandı.", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' sabit listesi üyesi başlatıcısı, izin verilmeyen 'NaN' değeri olarak hesaplandı.", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "const sabit listesi üyesi başlatıcıları yalnızca sabit değerleri ve diğer hesaplanan sabit listesi değerlerini içerebilir.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const sabit listesi üye başlatıcıları sabit ifadeler olmalıdır.", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' sabit listeleri yalnızca bir özellikte, dizin erişim ifadelerinde, içeri aktarma bildiriminin veya dışarı aktarma atamasının sağ tarafında ya da tür sorgusunda kullanılabilir.", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor', parametre özellik adı olarak kullanılamaz.", "constructor_is_a_reserved_word_18012": "'#constructor' ayrılmış bir sözcüktür.", @@ -1811,13 +2015,14 @@ "file_6025": "dosya", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' döngülerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' döngülerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.", "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' ve 'set' erişimcileri 'this' parametreleri bildiremez.", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'Files' ayarlanmışsa ‘[]', aksi takdirde `[\"**/*\"]5D;`", "implements_clause_already_seen_1175": "'implements' yan tümcesi zaten görüldü.", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' yan tümceleri yalnızca TypeScript dosyalarında kullanılabilir.", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' yalnızca TypeScript dosyalarında kullanılabilir.", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' bildirimlerine yalnızca bir koşullu türün 'extends' yan tümcesinde izin verilir.", - "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' bildirimleri yalnızca bu bloğun içinde bildirilebilir.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' ifadesinden sonra açılı ayraçlar içine alınmış bir yakalama grubu adı gelmelidir.", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ifadesi, 'let' veya 'const' bildirimlerinde ad olarak kullanılamaz.", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === 'AMD' veya 'UMD' veya 'Sistem' veya 'ES6' ve ardından 'Klasik', aksi durumda 'Node'", "module_system_or_esModuleInterop_6904": "module === \"sistem\" veya esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json', '{0}' sürümüyle eşleşen bir 'typesVersions' girdisine sahip değil.", "package_json_had_a_falsy_0_field_6220": "'package.json' hatalı bir '{0}' alanı içeriyordu.", "package_json_has_0_field_1_that_references_2_6101": "'package.json', '{2}' öğesine başvuruda bulunan '{1}' adlı '{0}' alanını içeriyor.", + "package_json_has_a_peerDependencies_field_6281": "'package.json', 'peerDependencies' alanı içeriyor.", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json', geçerli bir semver aralığı olmayan '{0}' 'typesVersions' girdisine sahip.", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json', '{2}' modül adıyla eşleşen bir desen arayan '{1}' derleyici sürümüyle eşleşen '{0}' 'typesVersions' girdisine sahip.", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json', sürüme özgü yol eşlemeleri olan bir 'typesVersions' alanına sahip.", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "'{0}' package.json kapsamı, '{1}' tanımlayıcısının hedefi için geçersiz türe sahip", "package_json_scope_0_has_no_imports_defined_6273": "'{0}' package.json kapsamında içeri aktarma tanımlanmadı.", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' seçeneği belirtildi, '{0}' modül adıyla eşleşen bir desen aranıyor.", + "q_is_only_available_inside_character_class_1511": "'\\q' yalnızca karakter sınıfının içinde kullanılabilir.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' ardından küme ayraçları içine alınmış dize alternatifleri gelmelidir.", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' değiştiricisi yalnızca özellik bildiriminde ya da dizin imzasında görünebilir.", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' tür değiştiricisine yalnızca dizide ve demet sabit değeri türlerinde izin verilir.", "require_call_may_be_converted_to_an_import_80005": "'require' çağrısı bir import olarak dönüştürülebilir.", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "'resolution-mode' onaylamaları yalnızca 'moduleResolution' değeri 'node16' veya 'nodenext' olduğunda desteklenir.", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "'resolution-mode' onaylamaları kararlı değil. Bu hatayı sessize almak için gecelik TypeScript kullanın. 'npm install -D typescript@next' ile güncelleştirmeyi deneyin.", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` yalnızca tür içeri aktarmaları için ayarlanabilir.", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode`, tür içe aktarma iddiaları için tek geçerli anahtardır.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "`resolution-mode`, tür içe aktarma öznitelikleri için tek geçerli anahtardır.", "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode`, `require` ya da `import` olmalıdır.", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' seçeneği ayarlandı, '{0}' göreli modül adını çözümlemek için bu değer kullanılıyor.", "super_can_only_be_referenced_in_a_derived_class_2335": "'super' öğesine yalnızca bir türetilmiş sınıfta başvurulabilir.", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' öğesine hesaplanan bir özellik adında başvurulamaz.", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' öğesine bir modülde veya ad alanı gövdesinde başvurulamaz.", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' öğesine statik özellik başlatıcısında başvurulamaz.", - "this_cannot_be_referenced_in_constructor_arguments_2333": "'super' öğesine oluşturucu bağımsız değişkenlerinde başvurulamaz.", "this_cannot_be_referenced_in_current_location_2332": "'this' öğesine geçerli konumda başvurulamaz.", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this', tür ek açıklamasına sahip olmadığından örtük olarak 'any' türü içeriyor", "true_for_ES2022_and_above_including_ESNext_6930": "ESNext dahil olmak üzere ES2022 ve üzeri için `true` olarak ayarlanır.", "true_if_composite_false_otherwise_6909": "'Kompozit' ayarlanmışsa 'true', değilse 'false'", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'; 'node16', 'nodenext' veya 'bundler' olduğunda `true`, aksi halde `false`.", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: The TypeScript Derleyicisi", "type_Colon_6902": "tür:", "unique_symbol_types_are_not_allowed_here_1335": "Burada 'unique symbol' türlerine izin verilmez.", diff --git a/node_modules/typescript/lib/tsc.js b/node_modules/typescript/lib/tsc.js index 29d5dbb786..37e7f28602 100644 --- a/node_modules/typescript/lib/tsc.js +++ b/node_modules/typescript/lib/tsc.js @@ -17,17 +17,17 @@ and limitations under the License. "use strict"; // src/compiler/corePublic.ts -var versionMajorMinor = "5.5"; -var version = "5.5.4"; +var versionMajorMinor = "5.6"; +var version = "5.6.2"; // src/compiler/core.ts var emptyArray = []; var emptyMap = /* @__PURE__ */ new Map(); function length(array) { - return array ? array.length : 0; + return array !== void 0 ? array.length : 0; } function forEach(array, callback) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const result = callback(array[i], i); if (result) { @@ -78,7 +78,7 @@ function zipWith(arrayA, arrayB, callback) { return result; } function every(array, callback) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { if (!callback(array[i], i)) { return false; @@ -126,20 +126,17 @@ function findLastIndex(array, predicate, startIndex) { return -1; } function contains(array, value, equalityComparer = equateValues) { - if (array) { - for (const v of array) { - if (equalityComparer(v, value)) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + if (equalityComparer(array[i], value)) { return true; } } } return false; } -function arraysEqual(a, b, equalityComparer = equateValues) { - return a.length === b.length && a.every((x, i) => equalityComparer(x, b[i])); -} function indexOfAnyCharCode(text, charCodes, start) { - for (let i = start || 0; i < text.length; i++) { + for (let i = start ?? 0; i < text.length; i++) { if (contains(charCodes, text.charCodeAt(i))) { return i; } @@ -148,7 +145,7 @@ function indexOfAnyCharCode(text, charCodes, start) { } function countWhere(array, predicate) { let count = 0; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = array[i]; if (predicate(v, i)) { @@ -159,7 +156,7 @@ function countWhere(array, predicate) { return count; } function filter(array, f) { - if (array) { + if (array !== void 0) { const len = array.length; let i = 0; while (i < len && f(array[i])) i++; @@ -193,7 +190,7 @@ function clear(array) { } function map(array, f) { let result; - if (array) { + if (array !== void 0) { result = []; for (let i = 0; i < array.length; i++) { result.push(f(array[i], i)); @@ -207,7 +204,7 @@ function* mapIterator(iter, mapFn) { } } function sameMap(array, f) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const item = array[i]; const mapped = f(item, i); @@ -225,7 +222,8 @@ function sameMap(array, f) { } function flatten(array) { const result = []; - for (const v of array) { + for (let i = 0; i < array.length; i++) { + const v = array[i]; if (v) { if (isArray(v)) { addRange(result, v); @@ -238,7 +236,7 @@ function flatten(array) { } function flatMap(array, mapfn) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = mapfn(array[i], i); if (v) { @@ -250,11 +248,11 @@ function flatMap(array, mapfn) { } } } - return result || emptyArray; + return result ?? emptyArray; } function flatMapToMutable(array, mapfn) { const result = []; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = mapfn(array[i], i); if (v) { @@ -270,7 +268,7 @@ function flatMapToMutable(array, mapfn) { } function sameFlatMap(array, mapfn) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const item = array[i]; const mapped = mapfn(item, i); @@ -286,11 +284,11 @@ function sameFlatMap(array, mapfn) { } } } - return result || array; + return result ?? array; } function mapDefined(array, mapFn) { const result = []; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const mapped = mapFn(array[i], i); if (mapped !== void 0) { @@ -325,7 +323,7 @@ function tryAddToSet(set, value) { } function spanMap(array, keyfn, mapfn) { let result; - if (array) { + if (array !== void 0) { result = []; const len = array.length; let previousKey; @@ -357,10 +355,10 @@ function spanMap(array, keyfn, mapfn) { return result; } function some(array, predicate) { - if (array) { - if (predicate) { - for (const v of array) { - if (predicate(v)) { + if (array !== void 0) { + if (predicate !== void 0) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { return true; } } @@ -385,8 +383,8 @@ function getRangesWhere(arr, pred, cb) { if (start !== void 0) cb(start, arr.length); } function concatenate(array1, array2) { - if (!some(array2)) return array1; - if (!some(array1)) return array2; + if (array2 === void 0 || array2.length === 0) return array1; + if (array1 === void 0 || array1.length === 0) return array2; return [...array1, ...array2]; } function selectIndex(_, i) { @@ -413,8 +411,8 @@ function deduplicateRelational(array, equalityComparer, comparer) { } function deduplicateEquality(array, equalityComparer) { const result = []; - for (const item of array) { - pushIfUnique(result, item, equalityComparer); + for (let i = 0; i < array.length; i++) { + pushIfUnique(result, array[i], equalityComparer); } return result; } @@ -465,10 +463,10 @@ function insertSorted(array, insert, compare, equalityComparer, allowDuplicates) return false; } function sortAndDeduplicate(array, comparer, equalityComparer) { - return deduplicateSorted(sort(array, comparer), equalityComparer || comparer || compareStringsCaseSensitive); + return deduplicateSorted(toSorted(array, comparer), equalityComparer ?? comparer ?? compareStringsCaseSensitive); } function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) { - if (!array1 || !array2) { + if (array1 === void 0 || array2 === void 0) { return array1 === array2; } if (array1.length !== array2.length) { @@ -483,20 +481,18 @@ function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) { } function compact(array) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = array[i]; - if (result || !v) { - if (!result) { - result = array.slice(0, i); - } + if (result ?? !v) { + result ?? (result = array.slice(0, i)); if (v) { result.push(v); } } } } - return result || array; + return result ?? array; } function relativeComplement(arrayA, arrayB, comparer) { if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0) return arrayB; @@ -554,7 +550,7 @@ function pushIfUnique(array, toAdd, equalityComparer) { } } function appendIfUnique(array, toAdd, equalityComparer) { - if (array) { + if (array !== void 0) { pushIfUnique(array, toAdd, equalityComparer); return array; } else { @@ -564,13 +560,8 @@ function appendIfUnique(array, toAdd, equalityComparer) { function stableSortIndices(array, indices, comparer) { indices.sort((x, y) => comparer(array[x], array[y]) || compareValues(x, y)); } -function sort(array, comparer) { - return array.length === 0 ? array : array.slice().sort(comparer); -} -function stableSort(array, comparer) { - const indices = indicesOf(array); - stableSortIndices(array, indices, comparer); - return indices.map((i) => array[i]); +function toSorted(array, comparer) { + return array.length === 0 ? emptyArray : array.slice().sort(comparer); } function rangeEquals(array1, array2, pos, end) { while (pos < end) { @@ -582,7 +573,7 @@ function rangeEquals(array1, array2, pos, end) { return true; } var elementAt = !!Array.prototype.at ? (array, offset) => array == null ? void 0 : array.at(offset) : (array, offset) => { - if (array) { + if (array !== void 0) { offset = toOffset(array, offset); if (offset < array.length) { return array[offset]; @@ -594,7 +585,7 @@ function firstOrUndefined(array) { return array === void 0 || array.length === 0 ? void 0 : array[0]; } function firstOrUndefinedIterator(iter) { - if (iter) { + if (iter !== void 0) { for (const value of iter) { return value; } @@ -619,10 +610,10 @@ function last(array) { return array[array.length - 1]; } function singleOrUndefined(array) { - return array && array.length === 1 ? array[0] : void 0; + return array !== void 0 && array.length === 1 ? array[0] : void 0; } function singleOrMany(array) { - return array && array.length === 1 ? array[0] : array; + return array !== void 0 && array.length === 1 ? array[0] : array; } function replaceElement(array, index, value) { const result = array.slice(0); @@ -636,7 +627,7 @@ function binarySearchKey(array, key, keySelector, keyComparer, offset) { if (!some(array)) { return -1; } - let low = offset || 0; + let low = offset ?? 0; let high = array.length - 1; while (low <= high) { const middle = low + (high - low >> 1); @@ -741,7 +732,8 @@ function equalOwnProperties(left, right, equalityComparer = equateValues) { } function arrayToMap(array, makeKey, makeValue = identity) { const result = /* @__PURE__ */ new Map(); - for (const value of array) { + for (let i = 0; i < array.length; i++) { + const value = array[i]; const key = makeKey(value); if (key !== void 0) result.set(key, makeValue(value)); } @@ -749,7 +741,8 @@ function arrayToMap(array, makeKey, makeValue = identity) { } function arrayToMultiMap(values, makeKey, makeValue = identity) { const result = createMultiMap(); - for (const value of values) { + for (let i = 0; i < values.length; i++) { + const value = values[i]; result.add(makeKey(value), makeValue(value)); } return result; @@ -759,8 +752,9 @@ function group(values, getGroupId, resultSelector = identity) { } function groupBy(values, keySelector) { const result = {}; - if (values) { - for (const value of values) { + if (values !== void 0) { + for (let i = 0; i < values.length; i++) { + const value = values[i]; const key = `${keySelector(value)}`; const array = result[key] ?? (result[key] = []); array.push(value); @@ -790,7 +784,7 @@ function copyProperties(first2, second) { } } function maybeBind(obj, fn) { - return fn ? fn.bind(obj) : void 0; + return fn == null ? void 0 : fn.bind(obj); } function createMultiMap() { const map2 = /* @__PURE__ */ new Map(); @@ -800,7 +794,7 @@ function createMultiMap() { } function multiMapAdd(key, value) { let values = this.get(key); - if (values) { + if (values !== void 0) { values.push(value); } else { this.set(key, values = [value]); @@ -809,7 +803,7 @@ function multiMapAdd(key, value) { } function multiMapRemove(key, value) { const values = this.get(key); - if (values) { + if (values !== void 0) { unorderedRemoveItem(values, value); if (!values.length) { this.delete(key); @@ -817,7 +811,7 @@ function multiMapRemove(key, value) { } } function createQueue(items) { - const elements = (items == null ? void 0 : items.slice()) || []; + const elements = (items == null ? void 0 : items.slice()) ?? []; let headIndex = 0; function isEmpty() { return headIndex === elements.length; @@ -931,6 +925,12 @@ function compareComparableValues(a, b) { function compareValues(a, b) { return compareComparableValues(a, b); } +function maxBy(arr, init, mapper) { + for (let i = 0; i < arr.length; i++) { + init = Math.max(init, mapper(arr[i])); + } + return init; +} function min(items, compare) { return reduceLeft(items, (x, y) => compare(x, y) === -1 /* LessThan */ ? x : y); } @@ -1076,7 +1076,8 @@ function matchedText(pattern, candidate) { function findBestPatternMatch(values, getPattern, candidate) { let matchedValue; let longestMatchPrefixLength = -1; - for (const v of values) { + for (let i = 0; i < values.length; i++) { + const v = values[i]; const pattern = getPattern(v); if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) { longestMatchPrefixLength = pattern.prefix.length; @@ -1118,7 +1119,7 @@ function singleElementArray(t) { return t === void 0 ? void 0 : [t]; } function enumerateInsertsAndDeletes(newItems, oldItems, comparer, inserted, deleted, unchanged) { - unchanged = unchanged || noop; + unchanged ?? (unchanged = noop); let newIndex = 0; let oldIndex = 0; const newLen = newItems.length; @@ -1180,7 +1181,7 @@ function cartesianProductWorker(arrays, result, outer, index) { } } function takeWhile(array, predicate) { - if (array) { + if (array !== void 0) { const len = array.length; let index = 0; while (index < len && predicate(array[index])) { @@ -1190,7 +1191,7 @@ function takeWhile(array, predicate) { } } function skipWhile(array, predicate) { - if (array) { + if (array !== void 0) { const len = array.length; let index = 0; while (index < len && predicate(array[index])) { @@ -1478,7 +1479,7 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, result.push([value, name]); } } - const sorted = stableSort(result, (x, y) => compareValues(x[0], y[0])); + const sorted = toSorted(result, (x, y) => compareValues(x[0], y[0])); enumMemberCache.set(enumObject, sorted); return sorted; } @@ -1687,7 +1688,7 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, Object.defineProperties(array, { __tsDebuggerDisplay: { value(defaultValue) { - defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]"); + defaultValue = String(defaultValue).replace(/(?:,[\s\w]+:[^,]+)+\]$/, "]"); return `NodeArray ${defaultValue}`; } } @@ -2107,7 +2108,7 @@ m2: ${this.mapper2.__debugToString().split("\n").join("\n ")}`; } function renderGraph() { const columnCount = columnWidths.length; - const laneCount = nodes.reduce((x, n) => Math.max(x, n.lane), 0) + 1; + const laneCount = maxBy(nodes, 0, (n) => n.lane) + 1; const lanes = fill(Array(laneCount), ""); const grid = columnWidths.map(() => Array(laneCount)); const connectors = columnWidths.map(() => fill(Array(laneCount), 0)); @@ -2230,7 +2231,7 @@ var prereleaseRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)(?:\.(?:0|[1-9]\d*|[a-z- var prereleasePartRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)$/i; var buildRegExp = /^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/i; var buildPartRegExp = /^[a-z0-9-]+$/i; -var numericIdentifierRegExp = /^(0|[1-9]\d*)$/; +var numericIdentifierRegExp = /^(?:0|[1-9]\d*)$/; var _Version = class _Version { constructor(major, minor = 0, patch = 0, prerelease = "", build2 = "") { if (typeof major === "string") { @@ -2353,11 +2354,11 @@ var VersionRange = class _VersionRange { return formatDisjunction(this._alternatives); } }; -var logicalOrRegExp = /\|\|/g; -var whitespaceRegExp = /\s+/g; -var partialRegExp = /^([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; +var logicalOrRegExp = /\|\|/; +var whitespaceRegExp = /\s+/; +var partialRegExp = /^([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; var hyphenRegExp = /^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i; -var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i; +var rangeRegExp = /^([~^<>=]|<=|>=)?\s*([a-z0-9-+.*]+)$/i; function parseRange(text) { const alternatives = []; for (let range of text.trim().split(logicalOrRegExp)) { @@ -2550,16 +2551,6 @@ function tryGetNativePerformanceHooks() { } var timestamp = nativePerformanceTime ? () => nativePerformanceTime.now() : Date.now; -// src/compiler/perfLogger.ts -var etwModule; -try { - const etwModulePath = process.env.TS_ETW_MODULE_PATH ?? "./node_modules/@microsoft/typescript-etw"; - etwModule = require(etwModulePath); -} catch (e) { - etwModule = void 0; -} -var perfLogger = (etwModule == null ? void 0 : etwModule.logEvent) ? etwModule : void 0; - // src/compiler/performance.ts var perfHooks; var performanceImpl; @@ -3422,10 +3413,12 @@ var RelationComparisonResult = /* @__PURE__ */ ((RelationComparisonResult3) => { RelationComparisonResult3[RelationComparisonResult3["None"] = 0] = "None"; RelationComparisonResult3[RelationComparisonResult3["Succeeded"] = 1] = "Succeeded"; RelationComparisonResult3[RelationComparisonResult3["Failed"] = 2] = "Failed"; - RelationComparisonResult3[RelationComparisonResult3["Reported"] = 4] = "Reported"; RelationComparisonResult3[RelationComparisonResult3["ReportsUnmeasurable"] = 8] = "ReportsUnmeasurable"; RelationComparisonResult3[RelationComparisonResult3["ReportsUnreliable"] = 16] = "ReportsUnreliable"; RelationComparisonResult3[RelationComparisonResult3["ReportsMask"] = 24] = "ReportsMask"; + RelationComparisonResult3[RelationComparisonResult3["ComplexityOverflow"] = 32] = "ComplexityOverflow"; + RelationComparisonResult3[RelationComparisonResult3["StackDepthOverflow"] = 64] = "StackDepthOverflow"; + RelationComparisonResult3[RelationComparisonResult3["Overflow"] = 96] = "Overflow"; return RelationComparisonResult3; })(RelationComparisonResult || {}); var GeneratedIdentifierFlags = /* @__PURE__ */ ((GeneratedIdentifierFlags2) => { @@ -3566,6 +3559,7 @@ var NodeCheckFlags = /* @__PURE__ */ ((NodeCheckFlags3) => { NodeCheckFlags3[NodeCheckFlags3["ContainsClassWithPrivateIdentifiers"] = 1048576] = "ContainsClassWithPrivateIdentifiers"; NodeCheckFlags3[NodeCheckFlags3["ContainsSuperPropertyInStaticInitializer"] = 2097152] = "ContainsSuperPropertyInStaticInitializer"; NodeCheckFlags3[NodeCheckFlags3["InCheckIdentifier"] = 4194304] = "InCheckIdentifier"; + NodeCheckFlags3[NodeCheckFlags3["PartiallyTypeChecked"] = 8388608] = "PartiallyTypeChecked"; NodeCheckFlags3[NodeCheckFlags3["LazyFlags"] = 539358128] = "LazyFlags"; return NodeCheckFlags3; })(NodeCheckFlags || {}); @@ -4849,7 +4843,7 @@ function patchWriteFileEnsuringDirectory(sys2) { var sys = (() => { const byteOrderMarkIndicator = "\uFEFF"; function getNodeSystem() { - const nativePattern = /^native |^\([^)]+\)$|^(internal[\\/]|[a-zA-Z0-9_\s]+(\.js)?$)/; + const nativePattern = /^native |^\([^)]+\)$|^(?:internal[\\/]|[\w\s]+(?:\.js)?$)/; const _fs = require("fs"); const _path = require("path"); const _os = require("os"); @@ -4907,6 +4901,7 @@ var sys = (() => { writeFile: writeFile2, watchFile: watchFile2, watchDirectory, + preferNonRecursiveWatch: !fsSupportsRecursiveFsWatch, resolvePath: (path) => _path.resolve(path), fileExists, directoryExists, @@ -4959,7 +4954,7 @@ var sys = (() => { disableCPUProfiler, cpuProfilingEnabled: () => !!activeSession || contains(process.execArgv, "--cpu-prof") || contains(process.execArgv, "--prof"), realpath, - debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || some(process.execArgv, (arg) => /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(arg)) || !!process.recordreplay, + debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || some(process.execArgv, (arg) => /^--(?:inspect|debug)(?:-brk)?(?:=\d+)?$/i.test(arg)) || !!process.recordreplay, tryEnableSourceMapsForHost() { try { require("source-map-support").install(); @@ -4969,7 +4964,7 @@ var sys = (() => { setTimeout, clearTimeout, clearScreen: () => { - process.stdout.write("\x1Bc"); + process.stdout.write("\x1B[2J\x1B[3J\x1B[H"); }, setBlocking: () => { var _a; @@ -5110,11 +5105,11 @@ var sys = (() => { callback ); } - function readFileWorker(fileName, _encoding) { + function readFile(fileName, _encoding) { let buffer; try { buffer = _fs.readFileSync(fileName); - } catch (e) { + } catch { return void 0; } let len = buffer.length; @@ -5135,16 +5130,7 @@ var sys = (() => { } return buffer.toString("utf8"); } - function readFile(fileName, _encoding) { - var _a, _b; - (_a = perfLogger) == null ? void 0 : _a.logStartReadFile(fileName); - const file = readFileWorker(fileName, _encoding); - (_b = perfLogger) == null ? void 0 : _b.logStopReadFile(); - return file; - } function writeFile2(fileName, data, writeByteOrderMark) { - var _a; - (_a = perfLogger) == null ? void 0 : _a.logEvent("WriteFile: " + fileName); if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } @@ -5165,8 +5151,6 @@ var sys = (() => { } } function getAccessibleFileSystemEntries(path) { - var _a; - (_a = perfLogger) == null ? void 0 : _a.logEvent("ReadDir: " + (path || ".")); try { const entries = _fs.readdirSync(path || ".", { withFileTypes: true }); const files = []; @@ -5184,7 +5168,7 @@ var sys = (() => { if (!stat) { continue; } - } catch (e) { + } catch { continue; } } else { @@ -5199,7 +5183,7 @@ var sys = (() => { files.sort(); directories.sort(); return { files, directories }; - } catch (e) { + } catch { return emptyFileSystemEntries; } } @@ -5222,7 +5206,7 @@ var sys = (() => { default: return false; } - } catch (e) { + } catch { return false; } finally { Error.stackTraceLimit = originalStackTraceLimit; @@ -5253,7 +5237,7 @@ var sys = (() => { Error.stackTraceLimit = 0; try { return (_a = statSync(path)) == null ? void 0 : _a.mtime; - } catch (e) { + } catch { return void 0; } finally { Error.stackTraceLimit = originalStackTraceLimit; @@ -5262,14 +5246,14 @@ var sys = (() => { function setModifiedTime(path, time) { try { _fs.utimesSync(path, time, time); - } catch (e) { + } catch { return; } } function deleteFile(path) { try { return _fs.unlinkSync(path); - } catch (e) { + } catch { return; } } @@ -5317,7 +5301,7 @@ function pathIsAbsolute(path) { return getEncodedRootLength(path) !== 0; } function pathIsRelative(path) { - return /^\.\.?($|[\\/])/.test(path); + return /^\.\.?(?:$|[\\/])/.test(path); } function pathIsBareSpecifier(path) { return !pathIsAbsolute(path) && !pathIsRelative(path); @@ -5543,7 +5527,14 @@ function changeAnyExtension(path, ext, extensions, ignoreCase) { const pathext = extensions !== void 0 && ignoreCase !== void 0 ? getAnyExtensionFromPath(path, extensions, ignoreCase) : getAnyExtensionFromPath(path); return pathext ? path.slice(0, path.length - pathext.length) + (startsWith(ext, ".") ? ext : "." + ext) : path; } -var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/; +function changeFullExtension(path, newExtension) { + const declarationExtension = getDeclarationFileExtension(path); + if (declarationExtension) { + return path.slice(0, path.length - declarationExtension.length) + (startsWith(newExtension, ".") ? newExtension : "." + newExtension); + } + return changeAnyExtension(path, newExtension); +} +var relativePathSegmentRegExp = /\/\/|(?:^|\/)\.\.?(?:$|\/)/; function comparePathsWorker(a, b, componentComparer) { if (a === b) return 0 /* EqualTo */; if (a === void 0) return -1 /* LessThan */; @@ -5925,6 +5916,7 @@ var Diagnostics = { _0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1290, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290", "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported: diag(1291, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported."), _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1292, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), + ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve: diag(1293, 1 /* Error */, "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293", "ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'."), with_statements_are_not_allowed_in_an_async_function_block: diag(1300, 1 /* Error */, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."), await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, 1 /* Error */, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."), The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level: diag(1309, 1 /* Error */, "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309", "The current file is a CommonJS module and cannot use 'await' at the top level."), @@ -5940,7 +5932,7 @@ var Diagnostics = { Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, 1 /* Error */, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."), Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, 1 /* Error */, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."), Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext: diag(1323, 1 /* Error */, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'."), - Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', or 'nodenext'."), + Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'nodenext', or 'preserve'."), Argument_of_dynamic_import_cannot_be_spread_element: diag(1325, 1 /* Error */, "Argument_of_dynamic_import_cannot_be_spread_element_1325", "Argument of dynamic import cannot be spread element."), This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments: diag(1326, 1 /* Error */, "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326", "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments."), String_literal_with_double_quotes_expected: diag(1327, 1 /* Error */, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."), @@ -6133,6 +6125,20 @@ var Diagnostics = { This_character_cannot_be_escaped_in_a_regular_expression: diag(1535, 1 /* Error */, "This_character_cannot_be_escaped_in_a_regular_expression_1535", "This character cannot be escaped in a regular expression."), Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended_as_an_escape_sequence_use_the_syntax_0_instead: diag(1536, 1 /* Error */, "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536", "Octal escape sequences and backreferences are not allowed in a character class. If this was intended as an escape sequence, use the syntax '{0}' instead."), Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class: diag(1537, 1 /* Error */, "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537", "Decimal escape sequences and backreferences are not allowed in a character class."), + Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1538, 1 /* Error */, "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538", "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."), + A_bigint_literal_cannot_be_used_as_a_property_name: diag(1539, 1 /* Error */, "A_bigint_literal_cannot_be_used_as_a_property_name_1539", "A 'bigint' literal cannot be used as a property name."), + A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead: diag( + 1540, + 2 /* Suggestion */, + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540", + "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + void 0, + /*reportsDeprecated*/ + true + ), The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."), The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."), Call_signature_return_types_0_and_1_are_incompatible: diag( @@ -6387,7 +6393,6 @@ var Diagnostics = { The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_standard_function_or_method: diag(2522, 1 /* Error */, "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522", "The 'arguments' object cannot be referenced in an async function or method in ES5. Consider using a standard function or method."), yield_expressions_cannot_be_used_in_a_parameter_initializer: diag(2523, 1 /* Error */, "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", "'yield' expressions cannot be used in a parameter initializer."), await_expressions_cannot_be_used_in_a_parameter_initializer: diag(2524, 1 /* Error */, "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", "'await' expressions cannot be used in a parameter initializer."), - Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: diag(2525, 1 /* Error */, "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", "Initializer provides no value for this binding element and the binding element has no default value."), A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: diag(2526, 1 /* Error */, "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", "A 'this' type is available only in a non-static member of a class or interface."), The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary: diag(2527, 1 /* Error */, "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527", "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary."), A_module_cannot_have_multiple_default_exports: diag(2528, 1 /* Error */, "A_module_cannot_have_multiple_default_exports_2528", "A module cannot have multiple default exports."), @@ -6700,6 +6705,11 @@ var Diagnostics = { Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled: diag(2866, 1 /* Error */, "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866", "Import '{0}' conflicts with global value used in this file, so must be declared with a type-only import when 'isolatedModules' is enabled."), Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun: diag(2867, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun`."), Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig: diag(2868, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun` and then add 'bun' to the types field in your tsconfig."), + Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish: diag(2869, 1 /* Error */, "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869", "Right operand of ?? is unreachable because the left operand is never nullish."), + This_binary_expression_is_never_nullish_Are_you_missing_parentheses: diag(2870, 1 /* Error */, "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870", "This binary expression is never nullish. Are you missing parentheses?"), + This_expression_is_always_nullish: diag(2871, 1 /* Error */, "This_expression_is_always_nullish_2871", "This expression is always nullish."), + This_kind_of_expression_is_always_truthy: diag(2872, 1 /* Error */, "This_kind_of_expression_is_always_truthy_2872", "This kind of expression is always truthy."), + This_kind_of_expression_is_always_falsy: diag(2873, 1 /* Error */, "This_kind_of_expression_is_always_falsy_2873", "This kind of expression is always falsy."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -6776,7 +6786,7 @@ var Diagnostics = { Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1: diag(4085, 1 /* Error */, "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085", "Extends clause for inferred type '{0}' has or is using private name '{1}'."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4091, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091", "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4092, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092", "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."), - Property_0_of_exported_class_expression_may_not_be_private_or_protected: diag(4094, 1 /* Error */, "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094", "Property '{0}' of exported class expression may not be private or protected."), + Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected: diag(4094, 1 /* Error */, "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", "Property '{0}' of exported anonymous class type may not be private or protected."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4095, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095", "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4096, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096", "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_static_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4097, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097", "Public static method '{0}' of exported class has or is using private name '{1}'."), @@ -6813,7 +6823,6 @@ var Diagnostics = { Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, 1 /* Error */, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, 1 /* Error */, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), Cannot_read_file_0_Colon_1: diag(5012, 1 /* Error */, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."), - Failed_to_parse_file_0_Colon_1: diag(5014, 1 /* Error */, "Failed_to_parse_file_0_Colon_1_5014", "Failed to parse file '{0}': {1}."), Unknown_compiler_option_0: diag(5023, 1 /* Error */, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."), Compiler_option_0_requires_a_value_of_type_1: diag(5024, 1 /* Error */, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."), Unknown_compiler_option_0_Did_you_mean_1: diag(5025, 1 /* Error */, "Unknown_compiler_option_0_Did_you_mean_1_5025", "Unknown compiler option '{0}'. Did you mean '{1}'?"), @@ -6876,6 +6885,7 @@ var Diagnostics = { Option_0_1_has_been_removed_Please_remove_it_from_your_configuration: diag(5108, 1 /* Error */, "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108", "Option '{0}={1}' has been removed. Please remove it from your configuration."), Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1: diag(5109, 1 /* Error */, "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109", "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'."), Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1: diag(5110, 1 /* Error */, "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110", "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'."), + Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if_not_running_tsc_b: diag(5111, 1 /* Error */, "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111", "Option 'tsBuildInfoFile' cannot be specified without specifying option 'incremental' or 'composite' or if not running 'tsc -b'."), Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6e3, 3 /* Message */, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."), Concatenate_and_emit_output_to_single_file: diag(6001, 3 /* Message */, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."), Generates_corresponding_d_ts_file: diag(6002, 3 /* Message */, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."), @@ -7014,7 +7024,6 @@ var Diagnostics = { Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: diag(6141, 3 /* Message */, "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", 'Parse in strict mode and emit "use strict" for each source file.'), Module_0_was_resolved_to_1_but_jsx_is_not_set: diag(6142, 1 /* Error */, "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142", "Module '{0}' was resolved to '{1}', but '--jsx' is not set."), Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1: diag(6144, 3 /* Message */, "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144", "Module '{0}' was resolved as locally declared ambient module in file '{1}'."), - Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified: diag(6145, 3 /* Message */, "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145", "Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified."), Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h: diag(6146, 3 /* Message */, "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146", "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."), Resolution_for_module_0_was_found_in_cache_from_location_1: diag(6147, 3 /* Message */, "Resolution_for_module_0_was_found_in_cache_from_location_1_6147", "Resolution for module '{0}' was found in cache from location '{1}'."), Directory_0_does_not_exist_skipping_all_lookups_in_it: diag(6148, 3 /* Message */, "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148", "Directory '{0}' does not exist, skipping all lookups in it."), @@ -7256,6 +7265,8 @@ var Diagnostics = { Exiting_conditional_exports: diag(6416, 3 /* Message */, "Exiting_conditional_exports_6416", "Exiting conditional exports."), Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0: diag(6417, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417", "Searching all ancestor node_modules directories for preferred extensions: {0}."), Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0: diag(6418, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418", "Searching all ancestor node_modules directories for fallback extensions: {0}."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors: diag(6419, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419", "Project '{0}' is out of date because buildinfo file '{1}' indicates that program needs to report errors."), + Project_0_is_out_of_date_because_1: diag(6420, 3 /* Message */, "Project_0_is_out_of_date_because_1_6420", "Project '{0}' is out of date because {1}."), The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, 3 /* Message */, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"), The_expected_type_comes_from_this_index_signature: diag(6501, 3 /* Message */, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."), The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, 3 /* Message */, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."), @@ -7302,6 +7313,7 @@ var Diagnostics = { Ensure_that_casing_is_correct_in_imports: diag(6637, 3 /* Message */, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."), Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, 3 /* Message */, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."), Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, 3 /* Message */, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."), + Skip_building_downstream_projects_on_error_in_upstream_project: diag(6640, 3 /* Message */, "Skip_building_downstream_projects_on_error_in_upstream_project_6640", "Skip building downstream projects on error in upstream project."), Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, 3 /* Message */, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."), Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, 3 /* Message */, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."), Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, 3 /* Message */, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."), @@ -7378,9 +7390,12 @@ var Diagnostics = { Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, 3 /* Message */, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."), Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, 3 /* Message */, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types."), Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files: diag(6719, 3 /* Message */, "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719", "Require sufficient annotation on exports so other tools can trivially generate declaration files."), + Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any: diag(6720, 3 /* Message */, "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720", "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), Default_catch_clause_variables_as_unknown_instead_of_any: diag(6803, 3 /* Message */, "Default_catch_clause_variables_as_unknown_instead_of_any_6803", "Default catch clause variables as 'unknown' instead of 'any'."), Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting: diag(6804, 3 /* Message */, "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804", "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported: diag(6805, 3 /* Message */, "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805", "Disable full type checking (only critical parse and emit errors will be reported)."), + Check_side_effect_imports: diag(6806, 3 /* Message */, "Check_side_effect_imports_6806", "Check side effect imports."), + This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2: diag(6807, 1 /* Error */, "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807", "This operation can be simplified. This shift is identical to `{0} {1} {2}`."), one_of_Colon: diag(6900, 3 /* Message */, "one_of_Colon_6900", "one of:"), one_or_more_Colon: diag(6901, 3 /* Message */, "one_or_more_Colon_6901", "one or more:"), type_Colon: diag(6902, 3 /* Message */, "type_Colon_6902", "type:"), @@ -7874,7 +7889,8 @@ var Diagnostics = { Its_type_0_is_not_a_valid_JSX_element_type: diag(18053, 1 /* Error */, "Its_type_0_is_not_a_valid_JSX_element_type_18053", "Its type '{0}' is not a valid JSX element type."), await_using_statements_cannot_be_used_inside_a_class_static_block: diag(18054, 1 /* Error */, "await_using_statements_cannot_be_used_inside_a_class_static_block_18054", "'await using' statements cannot be used inside a class static block."), _0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled: diag(18055, 1 /* Error */, "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055", "'{0}' has a string type, but must have syntactically recognizable string syntax when 'isolatedModules' is enabled."), - Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled: diag(18056, 1 /* Error */, "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056", "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled.") + Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled: diag(18056, 1 /* Error */, "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056", "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled."), + String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020: diag(18057, 1 /* Error */, "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057", "String literal import and export names are not supported when the '--module' flag is set to 'es2015' or 'es2020'.") }; // src/compiler/scanner.ts @@ -8034,16 +8050,16 @@ var textToToken = new Map(Object.entries({ "#": 63 /* HashToken */, "`": 62 /* BacktickToken */ })); -var charToRegExpFlag = new Map(Object.entries({ - d: 1 /* HasIndices */, - g: 2 /* Global */, - i: 4 /* IgnoreCase */, - m: 8 /* Multiline */, - s: 16 /* DotAll */, - u: 32 /* Unicode */, - v: 64 /* UnicodeSets */, - y: 128 /* Sticky */ -})); +var charCodeToRegExpFlag = /* @__PURE__ */ new Map([ + [100 /* d */, 1 /* HasIndices */], + [103 /* g */, 2 /* Global */], + [105 /* i */, 4 /* IgnoreCase */], + [109 /* m */, 8 /* Multiline */], + [115 /* s */, 16 /* DotAll */], + [117 /* u */, 32 /* Unicode */], + [118 /* v */, 64 /* UnicodeSets */], + [121 /* y */, 128 /* Sticky */] +]); var regExpFlagToFirstAvailableLanguageVersion = /* @__PURE__ */ new Map([ [1 /* HasIndices */, 9 /* RegularExpressionFlagsHasIndices */], [16 /* DotAll */, 5 /* RegularExpressionFlagsDotAll */], @@ -8099,9 +8115,9 @@ function tokenToString(t) { function stringToToken(s) { return textToToken.get(s); } -var regExpFlagChars = makeReverseMap(charToRegExpFlag); -function characterToRegularExpressionFlag(c) { - return charToRegExpFlag.get(c); +var regExpFlagCharCodes = makeReverseMap(charCodeToRegExpFlag); +function characterCodeToRegularExpressionFlag(ch) { + return charCodeToRegExpFlag.get(ch); } function computeLineStarts(text) { const result = []; @@ -8138,7 +8154,7 @@ function computePositionOfLineAndCharacter(lineStarts, line, character, debugTex if (allowEdits) { line = line < 0 ? 0 : line >= lineStarts.length ? lineStarts.length - 1 : line; } else { - Debug.fail(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length} , line map is correct? ${debugText !== void 0 ? arraysEqual(lineStarts, computeLineStarts(debugText)) : "unknown"}`); + Debug.fail(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length} , line map is correct? ${debugText !== void 0 ? arrayIsEqualTo(lineStarts, computeLineStarts(debugText)) : "unknown"}`); } } const res = lineStarts[line] + character; @@ -8549,7 +8565,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan var tokenFlags; var commentDirectives; var skipJsDocLeadingAsterisks = 0; - var asteriskSeen = false; var scriptKind = 0 /* Unknown */; var jsDocParsingMode = 0 /* ParseAll */; setText(text, start, length2); @@ -8567,6 +8582,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan hasExtendedUnicodeEscape: () => (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0, hasPrecedingLineBreak: () => (tokenFlags & 1 /* PrecedingLineBreak */) !== 0, hasPrecedingJSDocComment: () => (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0, + hasPrecedingJSDocLeadingAsterisks: () => (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) !== 0, isIdentifier: () => token === 80 /* Identifier */ || token > 118 /* LastReservedWord */, isReservedWord: () => token >= 83 /* FirstReservedWord */ && token <= 118 /* LastReservedWord */, isUnterminated: () => (tokenFlags & 4 /* Unterminated */) !== 0, @@ -8601,7 +8617,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan resetTokenState, setTextPos: resetTokenState, setSkipJsDocLeadingAsterisks, - hasLeadingAsterisks, tryScan, lookAhead, scanRange @@ -8984,9 +8999,16 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan case 34 /* doubleQuote */: return '"'; case 117 /* u */: - if (flags & 17 /* ScanExtendedUnicodeEscape */ && pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) { + if (pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) { pos -= 2; - return scanExtendedUnicodeEscape(!!(flags & 6 /* ReportInvalidEscapeErrors */)); + const result = scanExtendedUnicodeEscape(!!(flags & 6 /* ReportInvalidEscapeErrors */)); + if (!(flags & 17 /* AllowExtendedUnicodeEscape */)) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + error(Diagnostics.Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2); + } + } + return result; } for (; pos < start2 + 6; pos++) { if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { @@ -9004,7 +9026,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan const nextStart = pos; let nextPos = pos + 2; for (; nextPos < nextStart + 6; nextPos++) { - if (!isHexDigit(charCodeUnchecked(pos))) { + if (!isHexDigit(charCodeUnchecked(nextPos))) { return escapedValueString; } } @@ -9208,7 +9230,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan function scan() { fullStartPos = pos; tokenFlags = 0 /* None */; - asteriskSeen = false; while (true) { tokenStart = pos; if (pos >= end) { @@ -9324,8 +9345,8 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan return pos += 2, token = 43 /* AsteriskAsteriskToken */; } pos++; - if (skipJsDocLeadingAsterisks && !asteriskSeen && tokenFlags & 1 /* PrecedingLineBreak */) { - asteriskSeen = true; + if (skipJsDocLeadingAsterisks && (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) === 0 && tokenFlags & 1 /* PrecedingLineBreak */) { + tokenFlags |= 32768 /* PrecedingJSDocLeadingAsterisks */; continue; } return token = 42 /* AsteriskToken */; @@ -9798,24 +9819,25 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan pos++; let regExpFlags = 0 /* None */; while (true) { - const ch = charCodeChecked(pos); + const ch = codePointChecked(pos); if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { break; } + const size = charSize(ch); if (reportErrors2) { - const flag = characterToRegularExpressionFlag(String.fromCharCode(ch)); + const flag = characterCodeToRegularExpressionFlag(ch); if (flag === void 0) { - error(Diagnostics.Unknown_regular_expression_flag, pos, 1); + error(Diagnostics.Unknown_regular_expression_flag, pos, size); } else if (regExpFlags & flag) { - error(Diagnostics.Duplicate_regular_expression_flag, pos, 1); + error(Diagnostics.Duplicate_regular_expression_flag, pos, size); } else if (((regExpFlags | flag) & 96 /* AnyUnicodeMode */) === 96 /* AnyUnicodeMode */) { - error(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, pos, 1); + error(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, pos, size); } else { regExpFlags |= flag; - checkRegularExpressionFlagAvailable(flag, pos); + checkRegularExpressionFlagAvailability(flag, size); } } - pos++; + pos += size; } if (reportErrors2) { scanRange(startOfRegExpBody, endOfRegExpBody - startOfRegExpBody, () => { @@ -10030,22 +10052,23 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan } function scanPatternModifiers(currFlags) { while (true) { - const ch = charCodeChecked(pos); + const ch = codePointChecked(pos); if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { break; } - const flag = characterToRegularExpressionFlag(String.fromCharCode(ch)); + const size = charSize(ch); + const flag = characterCodeToRegularExpressionFlag(ch); if (flag === void 0) { - error(Diagnostics.Unknown_regular_expression_flag, pos, 1); + error(Diagnostics.Unknown_regular_expression_flag, pos, size); } else if (currFlags & flag) { - error(Diagnostics.Duplicate_regular_expression_flag, pos, 1); + error(Diagnostics.Duplicate_regular_expression_flag, pos, size); } else if (!(flag & 28 /* Modifiers */)) { - error(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, 1); + error(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, size); } else { currFlags |= flag; - checkRegularExpressionFlagAvailable(flag, pos); + checkRegularExpressionFlagAvailability(flag, size); } - pos++; + pos += size; } return currFlags; } @@ -10631,7 +10654,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan return value; } function scanSourceCharacter() { - const size = anyUnicodeMode ? charSize(charCodeChecked(pos)) : 1; + const size = anyUnicodeMode ? charSize(codePointChecked(pos)) : 1; pos += size; return size > 0 ? text.substring(pos - size, pos) : ""; } @@ -10649,6 +10672,12 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan forEach(groupNameReferences, (reference) => { if (!(groupSpecifiers == null ? void 0 : groupSpecifiers.has(reference.name))) { error(Diagnostics.There_is_no_capturing_group_named_0_in_this_regular_expression, reference.pos, reference.end - reference.pos, reference.name); + if (groupSpecifiers) { + const suggestion = getSpellingSuggestion(reference.name, groupSpecifiers, identity); + if (suggestion) { + error(Diagnostics.Did_you_mean_0, reference.pos, reference.end - reference.pos, suggestion); + } + } } }); forEach(decimalEscapes, (escape) => { @@ -10661,10 +10690,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan } }); } - function checkRegularExpressionFlagAvailable(flag, pos2) { + function checkRegularExpressionFlagAvailability(flag, size) { const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag); if (availableFrom && languageVersion < availableFrom) { - error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos2, 1, getNameOfScriptTarget(availableFrom)); + error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos, size, getNameOfScriptTarget(availableFrom)); } } function appendIfCommentDirective(commentDirectives2, text2, commentDirectiveRegEx, lineStart) { @@ -11011,9 +11040,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan function setSkipJsDocLeadingAsterisks(skip) { skipJsDocLeadingAsterisks += skip ? 1 : -1; } - function hasLeadingAsterisks() { - return asteriskSeen; - } } function codePointAt(s, i) { return s.codePointAt(i); @@ -11099,8 +11125,8 @@ function textSpanIsEmpty(span) { function textSpanContainsPosition(span, position) { return position >= span.start && position < textSpanEnd(span); } -function textRangeContainsPositionInclusive(span, position) { - return position >= span.pos && position <= span.end; +function textRangeContainsPositionInclusive(range, position) { + return position >= range.pos && position <= range.end; } function createTextSpan(start, length2) { if (start < 0) { @@ -11166,7 +11192,7 @@ function getNodeFlags(node) { var supportedLocaleDirectories = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-br", "ru", "tr", "zh-cn", "zh-tw"]; function validateLocaleAndSetLanguage(locale, sys2, errors) { const lowerCaseLocale = locale.toLowerCase(); - const matchResult = /^([a-z]+)([_-]([a-z]+))?$/.exec(lowerCaseLocale); + const matchResult = /^([a-z]+)(?:[_-]([a-z]+))?$/.exec(lowerCaseLocale); if (!matchResult) { if (errors) { errors.push(createCompilerDiagnostic(Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp")); @@ -11174,7 +11200,7 @@ function validateLocaleAndSetLanguage(locale, sys2, errors) { return; } const language = matchResult[1]; - const territory = matchResult[3]; + const territory = matchResult[2]; if (contains(supportedLocaleDirectories, lowerCaseLocale) && !trySetLanguageAndTerritory(language, territory, errors)) { trySetLanguageAndTerritory( language, @@ -11198,7 +11224,7 @@ function validateLocaleAndSetLanguage(locale, sys2, errors) { let fileContents = ""; try { fileContents = sys2.readFile(filePath); - } catch (e) { + } catch { if (errors2) { errors2.push(createCompilerDiagnostic(Diagnostics.Unable_to_open_file_0, filePath)); } @@ -12558,6 +12584,12 @@ function projectReferenceIsEqualTo(oldRef, newRef) { function moduleResolutionIsEqualTo(oldResolution, newResolution) { return oldResolution === newResolution || oldResolution.resolvedModule === newResolution.resolvedModule || !!oldResolution.resolvedModule && !!newResolution.resolvedModule && oldResolution.resolvedModule.isExternalLibraryImport === newResolution.resolvedModule.isExternalLibraryImport && oldResolution.resolvedModule.extension === newResolution.resolvedModule.extension && oldResolution.resolvedModule.resolvedFileName === newResolution.resolvedModule.resolvedFileName && oldResolution.resolvedModule.originalPath === newResolution.resolvedModule.originalPath && packageIdIsEqual(oldResolution.resolvedModule.packageId, newResolution.resolvedModule.packageId) && oldResolution.alternateResult === newResolution.alternateResult; } +function getResolvedModuleFromResolution(resolution) { + return resolution.resolvedModule; +} +function getResolvedTypeReferenceDirectiveFromResolution(resolution) { + return resolution.resolvedTypeReferenceDirective; +} function createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageName) { var _a; const alternateResult = (_a = host.getResolvedModule(sourceFile, moduleReference, mode)) == null ? void 0 : _a.alternateResult; @@ -12592,6 +12624,34 @@ function createModuleNotFoundChain(sourceFile, host, moduleReference, mode, pack if (result) result.repopulateInfo = () => ({ moduleReference, mode, packageName: packageName === moduleReference ? void 0 : packageName }); return result; } +function createModeMismatchDetails(currentSourceFile) { + const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); + const scope = currentSourceFile.packageJsonScope; + const targetExt = ext === ".ts" /* Ts */ ? ".mts" /* Mts */ : ext === ".js" /* Js */ ? ".mjs" /* Mjs */ : void 0; + const result = scope && !scope.contents.packageJsonContent.type ? targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, + targetExt, + combinePaths(scope.packageDirectory, "package.json") + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, + combinePaths(scope.packageDirectory, "package.json") + ) : targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, + targetExt + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module + ); + result.repopulateInfo = () => true; + return result; +} function packageIdIsEqual(a, b) { return a === b || !!a && !!b && a.name === b.name && a.subModuleName === b.subModuleName && a.version === b.version && a.peerDependencies === b.peerDependencies; } @@ -12780,6 +12840,13 @@ function getTokenPosOfNode(node, sourceFile, includeJsDoc) { isInJSDoc(node) ); } +function getNonModifierTokenPosOfNode(node, sourceFile) { + const lastModifier = !nodeIsMissing(node) && canHaveModifiers(node) && node.modifiers ? last(node.modifiers) : void 0; + if (!lastModifier) { + return getTokenPosOfNode(node, sourceFile); + } + return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastModifier.end); +} function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) { return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia); } @@ -12787,7 +12854,16 @@ function isJSDocTypeExpressionOrChild(node) { return !!findAncestor(node, isJSDocTypeExpression); } function isExportNamespaceAsDefaultDeclaration(node) { - return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && node.exportClause.name.escapedText === "default"); + return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && moduleExportNameIsDefault(node.exportClause.name)); +} +function moduleExportNameTextUnescaped(node) { + return node.kind === 11 /* StringLiteral */ ? node.text : unescapeLeadingUnderscores(node.escapedText); +} +function moduleExportNameTextEscaped(node) { + return node.kind === 11 /* StringLiteral */ ? escapeLeadingUnderscores(node.text) : node.escapedText; +} +function moduleExportNameIsDefault(node) { + return (node.kind === 11 /* StringLiteral */ ? node.text : node.escapedText) === "default" /* Default */; } function getTextOfNodeFromSourceText(sourceText, node, includeTrivia = false) { if (nodeIsMissing(node)) { @@ -12840,7 +12916,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Iterator: new Map(Object.entries({ @@ -13117,7 +13197,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint8Array: new Map(Object.entries({ @@ -13126,7 +13210,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint8ClampedArray: new Map(Object.entries({ @@ -13135,7 +13223,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Int16Array: new Map(Object.entries({ @@ -13144,7 +13236,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint16Array: new Map(Object.entries({ @@ -13153,7 +13249,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Int32Array: new Map(Object.entries({ @@ -13162,7 +13262,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint32Array: new Map(Object.entries({ @@ -13171,7 +13275,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Float32Array: new Map(Object.entries({ @@ -13180,7 +13288,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Float64Array: new Map(Object.entries({ @@ -13189,7 +13301,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), BigInt64Array: new Map(Object.entries({ @@ -13199,7 +13315,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), BigUint64Array: new Map(Object.entries({ @@ -13209,7 +13329,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Error: new Map(Object.entries({ @@ -13443,6 +13567,7 @@ function tryGetTextOfPropertyName(name) { return ((_a = name.emitNode) == null ? void 0 : _a.autoGenerate) ? void 0 : name.escapedText; case 11 /* StringLiteral */: case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: case 15 /* NoSubstitutionTemplateLiteral */: return escapeLeadingUnderscores(name.text); case 167 /* ComputedPropertyName */: @@ -13751,12 +13876,12 @@ function getJSDocCommentRanges(node, text) { return filter(commentRanges, (comment) => comment.end <= node.end && // Due to parse errors sometime empty parameter may get comments assigned to it that end up not in parameter range text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 3) !== 47 /* slash */); } -var fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; -var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; -var fullTripleSlashLibReferenceRegEx = /^(\/\/\/\s*/; -var fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; -var fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; -var defaultLibReferenceRegEx = /^(\/\/\/\s*/; +var fullTripleSlashReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^\/\/\/\s*/; +var fullTripleSlashLibReferenceRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; +var defaultLibReferenceRegEx = /^\/\/\/\s*/; function isPartOfTypeNode(node) { if (182 /* FirstTypeNode */ <= node.kind && node.kind <= 205 /* LastTypeNode */) { return true; @@ -14746,6 +14871,23 @@ function isFunctionSymbol(symbol) { const decl = symbol.valueDeclaration; return decl.kind === 262 /* FunctionDeclaration */ || isVariableDeclaration(decl) && decl.initializer && isFunctionLike(decl.initializer); } +function canHaveModuleSpecifier(node) { + switch (node == null ? void 0 : node.kind) { + case 260 /* VariableDeclaration */: + case 208 /* BindingElement */: + case 272 /* ImportDeclaration */: + case 278 /* ExportDeclaration */: + case 271 /* ImportEqualsDeclaration */: + case 273 /* ImportClause */: + case 280 /* NamespaceExport */: + case 274 /* NamespaceImport */: + case 281 /* ExportSpecifier */: + case 276 /* ImportSpecifier */: + case 205 /* ImportType */: + return true; + } + return false; +} function tryGetModuleSpecifierFromDeclaration(node) { var _a, _b; switch (node.kind) { @@ -15184,7 +15326,7 @@ function skipTypeParentheses(node) { return node; } function skipParentheses(node, excludeJSDocTypeAssertions) { - const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | 16 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */; + const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | -2147483648 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */; return skipOuterExpressions(node, flags); } function isDeleteTarget(node) { @@ -15390,6 +15532,7 @@ function getPropertyNameForPropertyNameNode(name) { case 11 /* StringLiteral */: case 15 /* NoSubstitutionTemplateLiteral */: case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: return escapeLeadingUnderscores(name.text); case 167 /* ComputedPropertyName */: const nameExpression = name.expression; @@ -15789,9 +15932,9 @@ function containsInvalidEscapeFlag(node) { function hasInvalidEscape(template) { return template && !!(isNoSubstitutionTemplateLiteral(template) ? containsInvalidEscapeFlag(template) : containsInvalidEscapeFlag(template.head) || some(template.templateSpans, (span) => containsInvalidEscapeFlag(span.literal))); } -var doubleQuoteEscapedCharsRegExp = /[\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; -var singleQuoteEscapedCharsRegExp = /[\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; -var backtickQuoteEscapedCharsRegExp = /\r\n|[\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g; +var doubleQuoteEscapedCharsRegExp = /[\\"\u0000-\u001f\u2028\u2029\u0085]/g; +var singleQuoteEscapedCharsRegExp = /[\\'\u0000-\u001f\u2028\u2029\u0085]/g; +var backtickQuoteEscapedCharsRegExp = /\r\n|[\\`\u0000-\u001f\u2028\u2029\u0085]/g; var escapedCharsMap = new Map(Object.entries({ " ": "\\t", "\v": "\\v", @@ -17194,7 +17337,7 @@ var objectAllocator = { getSourceMapSourceConstructor: () => SourceMapSource }; function formatStringFromArgs(text, args) { - return text.replace(/{(\d+)}/g, (_match, index) => "" + Debug.checkDefined(args[+index])); + return text.replace(/\{(\d+)\}/g, (_match, index) => "" + Debug.checkDefined(args[+index])); } var localizedDiagnosticMessages; function setLocalizedDiagnosticMessages(messages) { @@ -17463,8 +17606,8 @@ function walkTreeForJSXTags(node) { function isFileModuleFromUsingJSXTag(file) { return !file.isDeclarationFile ? walkTreeForJSXTags(file) : void 0; } -function isFileForcedToBeModuleByFormat(file) { - return (file.impliedNodeFormat === 99 /* ESNext */ || fileExtensionIsOneOf(file.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */, ".mjs" /* Mjs */, ".mts" /* Mts */])) && !file.isDeclarationFile ? true : void 0; +function isFileForcedToBeModuleByFormat(file, options) { + return (getImpliedNodeFormatForEmitWorker(file, options) === 99 /* ESNext */ || fileExtensionIsOneOf(file.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */, ".mjs" /* Mjs */, ".mts" /* Mts */])) && !file.isDeclarationFile ? true : void 0; } function getSetExternalModuleIndicator(options) { switch (getEmitModuleDetectionKind(options)) { @@ -17483,10 +17626,14 @@ function getSetExternalModuleIndicator(options) { } checks.push(isFileForcedToBeModuleByFormat); const combined = or(...checks); - const callback = (file) => void (file.externalModuleIndicator = combined(file)); + const callback = (file) => void (file.externalModuleIndicator = combined(file, options)); return callback; } } +function importSyntaxAffectsModuleResolution(options) { + const moduleResolution = getEmitModuleResolutionKind(options); + return 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || getResolvePackageJsonExports(options) || getResolvePackageJsonImports(options); +} function createComputedCompilerOptions(options) { return options; } @@ -17685,6 +17832,12 @@ var computedOptions = createComputedCompilerOptions({ return getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); } }, + strictBuiltinIteratorReturn: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); + } + }, alwaysStrict: { dependencies: ["strict"], computeValue: (compilerOptions) => { @@ -17763,7 +17916,12 @@ function getJSXTransformEnabled(options) { function getJSXImplicitImportBase(compilerOptions, file) { const jsxImportSourcePragmas = file == null ? void 0 : file.pragmas.get("jsximportsource"); const jsxImportSourcePragma = isArray(jsxImportSourcePragmas) ? jsxImportSourcePragmas[jsxImportSourcePragmas.length - 1] : jsxImportSourcePragmas; - return compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */ || compilerOptions.jsxImportSource || jsxImportSourcePragma ? (jsxImportSourcePragma == null ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" : void 0; + const jsxRuntimePragmas = file == null ? void 0 : file.pragmas.get("jsxruntime"); + const jsxRuntimePragma = isArray(jsxRuntimePragmas) ? jsxRuntimePragmas[jsxRuntimePragmas.length - 1] : jsxRuntimePragmas; + if ((jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "classic") { + return void 0; + } + return compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */ || compilerOptions.jsxImportSource || jsxImportSourcePragma || (jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "automatic" ? (jsxImportSourcePragma == null ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" : void 0; } function getJSXRuntimeImport(base, options) { return base ? `${base}/${options.jsx === 5 /* ReactJSXDev */ ? "jsx-dev-runtime" : "jsx-runtime"}` : void 0; @@ -17994,7 +18152,7 @@ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNa if (visited.has(canonicalPath)) return; visited.set(canonicalPath, true); const { files, directories } = getFileSystemEntries(path2); - for (const current of sort(files, compareStringsCaseSensitive)) { + for (const current of toSorted(files, compareStringsCaseSensitive)) { const name = combinePaths(path2, current); const absoluteName = combinePaths(absolutePath, current); if (extensions && !fileExtensionIsOneOf(name, extensions)) continue; @@ -18014,7 +18172,7 @@ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNa return; } } - for (const current of sort(directories, compareStringsCaseSensitive)) { + for (const current of toSorted(directories, compareStringsCaseSensitive)) { const name = combinePaths(path2, current); const absoluteName = combinePaths(absolutePath, current); if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && (!excludeRegex || !excludeRegex.test(absoluteName))) { @@ -18110,6 +18268,9 @@ function hasJSFileExtension(fileName) { function hasTSFileExtension(fileName) { return some(supportedTSExtensionsFlat, (extension) => fileExtensionIs(fileName, extension)); } +function hasImplementationTSFileExtension(fileName) { + return some(supportedTSImplementationExtensions, (extension) => fileExtensionIs(fileName, extension)) && !isDeclarationFileName(fileName); +} function usesExtensionsOnImports({ imports }, hasExtension2 = or(hasJSFileExtension, hasTSFileExtension)) { return firstDefined(imports, ({ text }) => pathIsRelative(text) && !fileExtensionIsOneOf(text, extensionsNotSupportingExtensionlessResolution) ? hasExtension2(text) : void 0) || false; } @@ -18307,9 +18468,27 @@ function rangeOfTypeParameters(sourceFile, typeParameters) { return { pos, end }; } function skipTypeChecking(sourceFile, options, host) { - return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnsotics(sourceFile, options); + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + false + ); +} +function skipTypeCheckingIgnoringNoCheck(sourceFile, options, host) { + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + true + ); } -function canIncludeBindAndCheckDiagnsotics(sourceFile, options) { +function skipTypeCheckingWorker(sourceFile, options, host, ignoreNoCheck) { + return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || !ignoreNoCheck && options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnostics(sourceFile, options); +} +function canIncludeBindAndCheckDiagnostics(sourceFile, options) { if (!!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false) return false; if (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ || sourceFile.scriptKind === 5 /* External */) return true; const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; @@ -19339,6 +19518,10 @@ function hasInferredType(node) { return false; } } +function isSideEffectImport(node) { + const ancestor = findAncestor(node, isImportDeclaration); + return !!ancestor && !ancestor.importClause; +} // src/compiler/factory/baseNodeFactory.ts function createBaseNodeFactory() { @@ -21104,7 +21287,11 @@ function createNodeFactory(flags, baseFactory2) { node.modifiers = asNodeArray(modifiers); node.parameters = createNodeArray(parameters); node.body = body; - node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | 1024 /* ContainsES2015 */; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | 1024 /* ContainsES2015 */; + } node.typeParameters = void 0; node.type = void 0; node.typeArguments = void 0; @@ -23730,6 +23917,8 @@ function createNodeFactory(flags, baseFactory2) { return updateSatisfiesExpression(outerExpression, expression, outerExpression.type); case 235 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression); + case 233 /* ExpressionWithTypeArguments */: + return updateExpressionWithTypeArguments(outerExpression, expression, outerExpression.typeArguments); case 354 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression); } @@ -23737,7 +23926,7 @@ function createNodeFactory(flags, baseFactory2) { function isIgnorableParen(node) { return isParenthesizedExpression(node) && nodeIsSynthesized(node) && nodeIsSynthesized(getSourceMapRange(node)) && nodeIsSynthesized(getCommentRange(node)) && !some(getSyntheticLeadingComments(node)) && !some(getSyntheticTrailingComments(node)); } - function restoreOuterExpressions(outerExpression, innerExpression, kinds = 15 /* All */) { + function restoreOuterExpressions(outerExpression, innerExpression, kinds = 31 /* All */) { if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { return updateOuterExpression( outerExpression, @@ -23783,7 +23972,7 @@ function createNodeFactory(flags, baseFactory2) { } } function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers = false) { - const callee = skipOuterExpressions(expression, 15 /* All */); + const callee = skipOuterExpressions(expression, 31 /* All */); let thisArg; let target; if (isSuperProperty(callee)) { @@ -25236,7 +25425,7 @@ var asyncGeneratorHelper = { var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; + return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } @@ -25418,8 +25607,8 @@ var generatorHelper = { priority: 6, text: ` var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); @@ -25582,17 +25771,22 @@ var disposeResourcesHelper = { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } + var r, s = 0; function next() { - while (env.stack.length) { - var rec = env.stack.pop(); + while (r = env.stack.pop()) { try { - var result = rec.dispose && rec.dispose.call(rec.value); - if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); + if (r.dispose) { + var result = r.dispose.call(r.value); + if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + else s |= 1; } catch (e) { fail(e); } } + if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); @@ -26036,6 +26230,9 @@ function isNamedExports(node) { function isExportSpecifier(node) { return node.kind === 281 /* ExportSpecifier */; } +function isModuleExportName(node) { + return node.kind === 80 /* Identifier */ || node.kind === 11 /* StringLiteral */; +} function isNotEmittedStatement(node) { return node.kind === 353 /* NotEmittedStatement */; } @@ -26606,18 +26803,19 @@ function getJSDocTypeAssertionType(node) { Debug.assertIsDefined(type); return type; } -function isOuterExpression(node, kinds = 15 /* All */) { +function isOuterExpression(node, kinds = 31 /* All */) { switch (node.kind) { case 217 /* ParenthesizedExpression */: - if (kinds & 16 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { + if (kinds & -2147483648 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { return false; } return (kinds & 1 /* Parentheses */) !== 0; case 216 /* TypeAssertionExpression */: case 234 /* AsExpression */: - case 233 /* ExpressionWithTypeArguments */: case 238 /* SatisfiesExpression */: return (kinds & 2 /* TypeAssertions */) !== 0; + case 233 /* ExpressionWithTypeArguments */: + return (kinds & 16 /* ExpressionsWithTypeArguments */) !== 0; case 235 /* NonNullExpression */: return (kinds & 4 /* NonNullAssertions */) !== 0; case 354 /* PartiallyEmittedExpression */: @@ -26625,13 +26823,13 @@ function isOuterExpression(node, kinds = 15 /* All */) { } return false; } -function skipOuterExpressions(node, kinds = 15 /* All */) { +function skipOuterExpressions(node, kinds = 31 /* All */) { while (isOuterExpression(node, kinds)) { node = node.expression; } return node; } -function walkUpOuterExpressions(node, kinds = 15 /* All */) { +function walkUpOuterExpressions(node, kinds = 31 /* All */) { let parent = node.parent; while (isOuterExpression(parent, kinds)) { parent = parent.parent; @@ -26660,7 +26858,7 @@ function createExternalHelpersImportDeclarationIfNeeded(nodeFactory, helperFacto if (compilerOptions.importHelpers && isEffectiveExternalModule(sourceFile, compilerOptions)) { let namedBindings; const moduleKind = getEmitModuleKind(compilerOptions); - if (moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */ || sourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */ || getImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions) === 99 /* ESNext */) { const helpers = getEmitHelpers(sourceFile); if (helpers) { const helperNames = []; @@ -26725,8 +26923,7 @@ function getOrCreateExternalHelpersModuleNameIfNeeded(factory2, node, compilerOp if (externalHelpersModuleName) { return externalHelpersModuleName; } - const moduleKind = getEmitModuleKind(compilerOptions); - let create = (hasExportStarsToExportValues || getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || node.impliedNodeFormat === 1 /* CommonJS */); + let create = (hasExportStarsToExportValues || getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault) && getEmitModuleFormatOfFileWorker(node, compilerOptions) < 4 /* System */; if (!create) { const helpers = getEmitHelpers(node); if (helpers) { @@ -26749,6 +26946,9 @@ function getLocalNameForExternalImport(factory2, node, sourceFile) { const namespaceDeclaration = getNamespaceDeclarationNode(node); if (namespaceDeclaration && !isDefaultImport(node) && !isExportNamespaceAsDefaultDeclaration(node)) { const name = namespaceDeclaration.name; + if (name.kind === 11 /* StringLiteral */) { + return factory2.getGeneratedNameForNode(node); + } return isGeneratedIdentifier(name) ? name : factory2.createIdentifier(getSourceTextOfNodeFromSourceFile(sourceFile, name) || idText(name)); } if (node.kind === 272 /* ImportDeclaration */ && node.importClause) { @@ -27897,7 +28097,7 @@ function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); } function createSourceFile(fileName, sourceText, languageVersionOrOptions, setParentNodes = false, scriptKind) { - var _a, _b, _c, _d; + var _a, _b; (_a = tracing) == null ? void 0 : _a.push( tracing.Phase.Parse, "createSourceFile", @@ -27907,7 +28107,6 @@ function createSourceFile(fileName, sourceText, languageVersionOrOptions, setPar ); mark("beforeParse"); let result; - (_b = perfLogger) == null ? void 0 : _b.logStartParseSourceFile(fileName); const { languageVersion, setExternalModuleIndicator: overrideSetExternalModuleIndicator, @@ -27943,10 +28142,9 @@ function createSourceFile(fileName, sourceText, languageVersionOrOptions, setPar jsDocParsingMode ); } - (_c = perfLogger) == null ? void 0 : _c.logStopParseSourceFile(); mark("afterParse"); measure("Parse", "beforeParse", "afterParse"); - (_d = tracing) == null ? void 0 : _d.pop(); + (_b = tracing) == null ? void 0 : _b.pop(); return result; } function parseIsolatedEntityName(text, languageVersion) { @@ -28871,7 +29069,7 @@ var Parser; function createIdentifier(isIdentifier3, diagnosticMessage, privateIdentifierDiagnosticMessage) { if (isIdentifier3) { identifierCount++; - const pos = scanner.hasLeadingAsterisks() ? scanner.getTokenStart() : getNodePos(); + const pos = scanner.hasPrecedingJSDocLeadingAsterisks() ? scanner.getTokenStart() : getNodePos(); const originalKeywordKind = token(); const text = internIdentifier(scanner.getTokenValue()); const hasExtendedUnicodeEscape = scanner.hasExtendedUnicodeEscape(); @@ -28919,13 +29117,13 @@ var Parser; return createIdentifier(tokenIsIdentifierOrKeyword(token())); } function isLiteralPropertyName() { - return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */; + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */; } function isImportAttributeName2() { return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; } function parsePropertyNameWorker(allowComputedPropertyNames) { - if (token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */) { + if (token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */) { const node = parseLiteralNode(); node.text = internIdentifier(node.text); return node; @@ -29084,6 +29282,9 @@ var Parser; if (token() === 161 /* FromKeyword */ && lookAhead(nextTokenIsStringLiteral)) { return false; } + if (token() === 11 /* StringLiteral */) { + return true; + } return tokenIsIdentifierOrKeyword(token()); case 13 /* JsxAttributes */: return tokenIsIdentifierOrKeyword(token()) || token() === 19 /* OpenBraceToken */; @@ -33149,7 +33350,7 @@ var Parser; if (isIndexSignature()) { return parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers); } - if (tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 42 /* AsteriskToken */ || token() === 23 /* OpenBracketToken */) { + if (tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */ || token() === 42 /* AsteriskToken */ || token() === 23 /* OpenBracketToken */) { const isAmbient = some(modifiers, isDeclareModifier); if (isAmbient) { for (const m of modifiers) { @@ -33532,6 +33733,12 @@ var Parser; const name = parseIdentifier(); return finishNode(factory2.createNamespaceImport(name), pos); } + function canParseModuleExportName() { + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; + } + function parseModuleExportName(parseName) { + return token() === 11 /* StringLiteral */ ? parseLiteralNode() : parseName(); + } function parseNamedImportsOrExports(kind) { const pos = getNodePos(); const node = kind === 275 /* NamedImports */ ? factory2.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)) : factory2.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)); @@ -33552,42 +33759,51 @@ var Parser; let isTypeOnly = false; let propertyName; let canParseAsKeyword = true; - let name = parseIdentifierName(); - if (name.escapedText === "type") { + let name = parseModuleExportName(parseIdentifierName); + if (name.kind === 80 /* Identifier */ && name.escapedText === "type") { if (token() === 130 /* AsKeyword */) { const firstAs = parseIdentifierName(); if (token() === 130 /* AsKeyword */) { const secondAs = parseIdentifierName(); - if (tokenIsIdentifierOrKeyword(token())) { + if (canParseModuleExportName()) { isTypeOnly = true; propertyName = firstAs; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); canParseAsKeyword = false; } else { propertyName = name; name = secondAs; canParseAsKeyword = false; } - } else if (tokenIsIdentifierOrKeyword(token())) { + } else if (canParseModuleExportName()) { propertyName = name; canParseAsKeyword = false; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } else { isTypeOnly = true; name = firstAs; } - } else if (tokenIsIdentifierOrKeyword(token())) { + } else if (canParseModuleExportName()) { isTypeOnly = true; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } } if (canParseAsKeyword && token() === 130 /* AsKeyword */) { propertyName = name; parseExpected(130 /* AsKeyword */); - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } - if (kind === 276 /* ImportSpecifier */ && checkIdentifierIsKeyword) { - parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected); + if (kind === 276 /* ImportSpecifier */) { + if (name.kind !== 80 /* Identifier */) { + parseErrorAt(skipTrivia(sourceText, name.pos), name.end, Diagnostics.Identifier_expected); + name = setTextRangePosEnd(createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false + ), name.pos, name.pos); + } else if (checkIdentifierIsKeyword) { + parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected); + } } const node = kind === 276 /* ImportSpecifier */ ? factory2.createImportSpecifier(isTypeOnly, propertyName, name) : factory2.createExportSpecifier(isTypeOnly, propertyName, name); return finishNode(node, pos); @@ -33599,7 +33815,7 @@ var Parser; } } function parseNamespaceExport(pos) { - return finishNode(factory2.createNamespaceExport(parseIdentifierName()), pos); + return finishNode(factory2.createNamespaceExport(parseModuleExportName(parseIdentifierName)), pos); } function parseExportDeclaration(pos, hasJSDoc, modifiers) { const savedAwaitContext = inAwaitContext(); @@ -35252,8 +35468,8 @@ function getNamedArgRegEx(name) { namedArgRegExCache.set(name, result); return result; } -var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im; -var singleLinePragmaRegEx = /^\/\/\/?\s*@([^\s:]+)(.*)\s*$/im; +var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/m; +var singleLinePragmaRegEx = /^\/\/\/?\s*@([^\s:]+)((?:[^\S\r\n]|:).*)?$/m; function extractPragmas(pragmas, range, text) { const tripleSlash = range.kind === 2 /* SingleLineCommentTrivia */ && tripleSlashXMLCommentStartRegEx.exec(text); if (tripleSlash) { @@ -35294,7 +35510,7 @@ function extractPragmas(pragmas, range, text) { return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine); } if (range.kind === 3 /* MultiLineCommentTrivia */) { - const multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; + const multiLinePragmaRegEx = /@(\S+)(\s+(?:\S.*)?)?$/gm; let multiLineMatch; while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch); @@ -35450,6 +35666,7 @@ var libEntries = [ ["esnext.array", "lib.esnext.array.d.ts"], ["esnext.regexp", "lib.esnext.regexp.d.ts"], ["esnext.string", "lib.esnext.string.d.ts"], + ["esnext.iterator", "lib.esnext.iterator.d.ts"], ["decorators", "lib.decorators.d.ts"], ["decorators.legacy", "lib.decorators.legacy.d.ts"] ]; @@ -35628,7 +35845,6 @@ var commonOptionsWithBuild = [ name: "generateTrace", type: "string", isFilePath: true, - isCommandLineOnly: true, paramType: Diagnostics.DIRECTORY, category: Diagnostics.Compiler_Diagnostics, description: Diagnostics.Generates_an_event_trace_and_a_list_of_types @@ -35694,6 +35910,25 @@ var commonOptionsWithBuild = [ description: Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript, defaultValueDescription: false }, + { + name: "noCheck", + type: "boolean", + showInSimplifiedHelpView: false, + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported, + transpileOptionValue: true, + defaultValueDescription: false + // Not setting affectsSemanticDiagnostics or affectsBuildInfo because we dont want all diagnostics to go away, its handled in builder + }, + { + name: "noEmit", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_emitting_files_from_a_compilation, + transpileOptionValue: void 0, + defaultValueDescription: false + }, { name: "assumeChangesOnlyAffectDirectDependencies", type: "boolean", @@ -35958,29 +36193,6 @@ var commandOptionsWithoutBuild = [ defaultValueDescription: false, description: Diagnostics.Disable_emitting_comments }, - { - name: "noCheck", - type: "boolean", - showInSimplifiedHelpView: false, - category: Diagnostics.Compiler_Diagnostics, - description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported, - transpileOptionValue: true, - defaultValueDescription: false, - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - extraValidation() { - return [Diagnostics.Unknown_compiler_option_0, "noCheck"]; - } - }, - { - name: "noEmit", - type: "boolean", - showInSimplifiedHelpView: true, - category: Diagnostics.Emit, - description: Diagnostics.Disable_emitting_files_from_a_compilation, - transpileOptionValue: void 0, - defaultValueDescription: false - }, { name: "importHelpers", type: "boolean", @@ -36105,6 +36317,16 @@ var commandOptionsWithoutBuild = [ description: Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor, defaultValueDescription: Diagnostics.false_unless_strict_is_set }, + { + name: "strictBuiltinIteratorReturn", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, { name: "noImplicitThis", type: "boolean", @@ -36380,6 +36602,15 @@ var commandOptionsWithoutBuild = [ category: Diagnostics.Modules, description: Diagnostics.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports }, + { + name: "noUncheckedSideEffectImports", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Check_side_effect_imports, + defaultValueDescription: false + }, // Source Maps { name: "sourceRoot", @@ -36835,6 +37066,13 @@ var optionsForBuild = [ description: Diagnostics.Delete_the_outputs_of_all_projects, type: "boolean", defaultValueDescription: false + }, + { + name: "stopBuildOnErrors", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Skip_building_downstream_projects_on_error_in_upstream_project, + type: "boolean", + defaultValueDescription: false } ]; var buildOpts = [ @@ -37507,9 +37745,7 @@ function convertToTSConfig(configParseResult, configFileName, host) { return config; } function optionMapToObject(optionMap) { - return { - ...arrayFrom(optionMap.entries()).reduce((prev, cur) => ({ ...prev, [cur[0]]: cur[1] }), {}) - }; + return Object.fromEntries(optionMap); } function filterSameAsDefaultInclude(specs) { if (!length(specs)) return void 0; @@ -38352,7 +38588,7 @@ function convertJsonOptionOfCustomType(opt, value, errors, valueExpression, sour function convertJsonOptionOfListType(option, values, basePath, errors, propertyAssignment, valueExpression, sourceFile) { return filter(map(values, (v, index) => convertJsonOption(option.element, v, basePath, errors, propertyAssignment, valueExpression == null ? void 0 : valueExpression.elements[index], sourceFile)), (v) => option.listPreserveFalsyValues ? true : !!v); } -var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; +var invalidTrailingRecursionPattern = /(?:^|\/)\*\*\/?$/; var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; function getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions = emptyArray) { basePath = normalizePath(basePath); @@ -39417,7 +39653,6 @@ function resolveLibrary(libraryName, resolveFrom, compilerOptions, host, cache) return resolveModuleName(libraryName, resolveFrom, getOptionsForLibraryResolution(compilerOptions), host, cache); } function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { - var _a, _b, _c; const traceEnabled = isTraceEnabled(compilerOptions, host); if (redirectedReference) { compilerOptions = redirectedReference.commandLine.options; @@ -39446,7 +39681,6 @@ function resolveModuleName(moduleName, containingFile, compilerOptions, host, ca trace(host, Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, ModuleResolutionKind[moduleResolution]); } } - (_a = perfLogger) == null ? void 0 : _a.logStartResolveModule(moduleName); switch (moduleResolution) { case 3 /* Node16 */: result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode); @@ -39466,8 +39700,6 @@ function resolveModuleName(moduleName, containingFile, compilerOptions, host, ca default: return Debug.fail(`Unexpected moduleResolution: ${moduleResolution}`); } - if (result && result.resolvedModule) (_b = perfLogger) == null ? void 0 : _b.logInfoEvent(`Module "${moduleName}" resolved to "${result.resolvedModule.resolvedFileName}"`); - (_c = perfLogger) == null ? void 0 : _c.logStopResolveModule(result && result.resolvedModule ? "" + result.resolvedModule.resolvedFileName : "null"); if (cache && !cache.isReadonly) { cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set(moduleName, resolutionMode, result); if (!isExternalModuleNameRelative(moduleName)) { @@ -40047,22 +40279,16 @@ function getTemporaryModuleResolutionState(packageJsonInfoCache, host, options) resolvedPackageDirectory: false }; } -function getPackageScopeForPath(fileName, state) { - const parts = getPathComponents(fileName); - parts.pop(); - while (parts.length > 0) { - const pkg = getPackageJsonInfo( - getPathFromPathComponents(parts), +function getPackageScopeForPath(directory, state) { + return forEachAncestorDirectory( + directory, + (dir) => getPackageJsonInfo( + dir, /*onlyRecordFailures*/ false, state - ); - if (pkg) { - return pkg; - } - parts.pop(); - } - return void 0; + ) + ); } function getVersionPathsOfPackageJsonInfo(packageJsonInfo, state) { if (packageJsonInfo.contents.versionPaths === void 0) { @@ -40225,7 +40451,7 @@ function noKeyStartsWithDot(obj) { } function loadModuleFromSelfNameReference(extensions, moduleName, directory, state, cache, redirectedReference) { var _a, _b; - const directoryPath = getNormalizedAbsolutePath(combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); const scope = getPackageScopeForPath(directoryPath, state); if (!scope || !scope.contents.packageJsonContent.exports) { return void 0; @@ -40321,7 +40547,7 @@ function loadModuleFromImports(extensions, moduleName, directory, state, cache, void 0 ); } - const directoryPath = getNormalizedAbsolutePath(combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); const scope = getPackageScopeForPath(directoryPath, state); if (!scope) { if (state.traceEnabled) { @@ -40389,7 +40615,7 @@ function loadModuleFromImportsOrExports(extensions, state, cache, redirectedRefe moduleName ); } - const expandingKeys = sort(filter(getOwnKeys(lookupTable), (k) => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys); + const expandingKeys = toSorted(filter(getOwnKeys(lookupTable), (k) => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys); for (const potentialTarget of expandingKeys) { if (state.features & 16 /* ExportsPatternTrailers */ && matchesPatternWithTrailer(potentialTarget, moduleName)) { const target = lookupTable[potentialTarget]; @@ -41127,6 +41353,9 @@ function getModuleInstanceStateWorker(node, visited) { } function getModuleInstanceStateForAliasTarget(specifier, visited) { const name = specifier.propertyName || specifier.name; + if (name.kind !== 80 /* Identifier */) { + return 1 /* Instantiated */; + } let p = specifier.parent; while (p) { if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) { @@ -41167,11 +41396,8 @@ function createFlowNode(flags, node, antecedent) { } var binder = /* @__PURE__ */ createBinder(); function bindSourceFile(file, options) { - var _a, _b; mark("beforeBind"); - (_a = perfLogger) == null ? void 0 : _a.logStartBindFile("" + file.fileName); binder(file, options); - (_b = perfLogger) == null ? void 0 : _b.logStopBindFile(); mark("afterBind"); measure("Bind", "beforeBind", "afterBind"); } @@ -41371,7 +41597,7 @@ function createBinder() { } function declareSymbol(symbolTable, parent2, node, includes, excludes, isReplaceableByMethod, isComputedName) { Debug.assert(isComputedName || !hasDynamicName(node)); - const isDefaultExport = hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) && node.name.escapedText === "default"; + const isDefaultExport = hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) && moduleExportNameIsDefault(node.name); const name = isComputedName ? "__computed" /* Computed */ : isDefaultExport && parent2 ? "default" /* Default */ : getDeclarationName(node); let symbol; if (name === void 0) { @@ -42468,6 +42694,8 @@ function createBinder() { } function bindJSDocImportTag(node) { bind(node.tagName); + bind(node.moduleSpecifier); + bind(node.attributes); if (typeof node.comment !== "string") { bindEach(node.comment); } @@ -43851,21 +44079,25 @@ function createBinder() { const reportError = ( // report error on all statements except empty ones isStatementButNotDeclaration(node) && node.kind !== 242 /* EmptyStatement */ || // report error on class declarations - node.kind === 263 /* ClassDeclaration */ || // report error on instantiated modules or const-enums only modules if preserveConstEnums is set + node.kind === 263 /* ClassDeclaration */ || // report errors on enums with preserved emit + isEnumDeclarationWithPreservedEmit(node, options) || // report error on instantiated modules node.kind === 267 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node) ); if (reportError) { currentFlow = reportedUnreachableFlow; if (!options.allowUnreachableCode) { const isError = unreachableCodeIsError(options) && !(node.flags & 33554432 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 7 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer)); - eachUnreachableRange(node, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); + eachUnreachableRange(node, options, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); } } } return true; } } -function eachUnreachableRange(node, cb) { +function isEnumDeclarationWithPreservedEmit(node, options) { + return node.kind === 266 /* EnumDeclaration */ && (!isEnumConst(node) || shouldPreserveConstEnums(options)); +} +function eachUnreachableRange(node, options, cb) { if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) { const { statements } = node.parent; const slice = sliceAfter(statements, node); @@ -43873,22 +44105,22 @@ function eachUnreachableRange(node, cb) { } else { cb(node, node); } -} -function isExecutableStatement(s) { - return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !isEnumDeclaration(s) && // `var x;` may declare a variable used above - !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); -} -function isPurelyTypeDeclaration(s) { - switch (s.kind) { - case 264 /* InterfaceDeclaration */: - case 265 /* TypeAliasDeclaration */: - return true; - case 267 /* ModuleDeclaration */: - return getModuleInstanceState(s) !== 1 /* Instantiated */; - case 266 /* EnumDeclaration */: - return hasSyntacticModifier(s, 4096 /* Const */); - default: - return false; + function isExecutableStatement(s) { + return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && // `var x;` may declare a variable used above + !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); + } + function isPurelyTypeDeclaration(s) { + switch (s.kind) { + case 264 /* InterfaceDeclaration */: + case 265 /* TypeAliasDeclaration */: + return true; + case 267 /* ModuleDeclaration */: + return getModuleInstanceState(s) !== 1 /* Instantiated */; + case 266 /* EnumDeclaration */: + return !isEnumDeclarationWithPreservedEmit(s, options); + default: + return false; + } } } function isExportsOrModuleExportsOrAlias(sourceFile, node) { @@ -44139,13 +44371,38 @@ function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignatu } // src/compiler/moduleSpecifiers.ts -function getModuleSpecifierPreferences({ importModuleSpecifierPreference, importModuleSpecifierEnding }, compilerOptions, importingSourceFile, oldImportSpecifier) { +var stringToRegex = memoizeOne((pattern) => { + try { + let slash = pattern.indexOf("/"); + if (slash !== 0) { + return new RegExp(pattern); + } + const lastSlash = pattern.lastIndexOf("/"); + if (slash === lastSlash) { + return new RegExp(pattern); + } + while ((slash = pattern.indexOf("/", slash + 1)) !== lastSlash) { + if (pattern[slash - 1] !== "\\") { + return new RegExp(pattern); + } + } + const flags = pattern.substring(lastSlash + 1).replace(/[^iu]/g, ""); + pattern = pattern.substring(1, lastSlash); + return new RegExp(pattern, flags); + } catch { + return void 0; + } +}); +function getModuleSpecifierPreferences({ importModuleSpecifierPreference, importModuleSpecifierEnding, autoImportSpecifierExcludeRegexes }, host, compilerOptions, importingSourceFile, oldImportSpecifier) { const filePreferredEnding = getPreferredEnding(); return { + excludeRegexes: autoImportSpecifierExcludeRegexes, relativePreference: oldImportSpecifier !== void 0 ? isExternalModuleNameRelative(oldImportSpecifier) ? 0 /* Relative */ : 1 /* NonRelative */ : importModuleSpecifierPreference === "relative" ? 0 /* Relative */ : importModuleSpecifierPreference === "non-relative" ? 1 /* NonRelative */ : importModuleSpecifierPreference === "project-relative" ? 3 /* ExternalNonRelative */ : 2 /* Shortest */, getAllowedEndingsInPreferredOrder: (syntaxImpliedNodeFormat) => { - const preferredEnding = syntaxImpliedNodeFormat !== importingSourceFile.impliedNodeFormat ? getPreferredEnding(syntaxImpliedNodeFormat) : filePreferredEnding; - if ((syntaxImpliedNodeFormat ?? importingSourceFile.impliedNodeFormat) === 99 /* ESNext */) { + const impliedNodeFormat = getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions); + const preferredEnding = syntaxImpliedNodeFormat !== impliedNodeFormat ? getPreferredEnding(syntaxImpliedNodeFormat) : filePreferredEnding; + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + if ((syntaxImpliedNodeFormat ?? impliedNodeFormat) === 99 /* ESNext */ && 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */) { if (shouldAllowImportingTsExtension(compilerOptions, importingSourceFile.fileName)) { return [3 /* TsExtension */, 2 /* JsExtension */]; } @@ -44176,7 +44433,7 @@ function getModuleSpecifierPreferences({ importModuleSpecifierPreference, import } return getModuleSpecifierEndingPreference( importModuleSpecifierEnding, - resolutionMode ?? importingSourceFile.impliedNodeFormat, + resolutionMode ?? getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions), compilerOptions, isFullSourceFile(importingSourceFile) ? importingSourceFile : void 0 ); @@ -44208,7 +44465,13 @@ function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSo function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { let computedWithoutCache = false; const ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker); - if (ambient) return { kind: "ambient", moduleSpecifiers: [ambient], computedWithoutCache }; + if (ambient) { + return { + kind: "ambient", + moduleSpecifiers: !(forAutoImport && isExcludedByRegex(ambient, userPreferences.autoImportSpecifierExcludeRegexes)) ? [ambient] : emptyArray, + computedWithoutCache + }; + } let [kind, specifiers, moduleSourceFile, modulePaths, cache] = tryGetModuleSpecifiersFromCacheWorker( moduleSymbol, importingSourceFile, @@ -44234,12 +44497,16 @@ function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions } function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { const info = getInfo(importingSourceFile.fileName, host); - const preferences = getModuleSpecifierPreferences(userPreferences, compilerOptions, importingSourceFile); + const preferences = getModuleSpecifierPreferences(userPreferences, host, compilerOptions, importingSourceFile); const existingSpecifier = isFullSourceFile(importingSourceFile) && forEach(modulePaths, (modulePath) => forEach( host.getFileIncludeReasons().get(toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), (reason) => { if (reason.kind !== 3 /* Import */ || reason.file !== importingSourceFile.path) return void 0; - if (importingSourceFile.impliedNodeFormat && importingSourceFile.impliedNodeFormat !== getModeForResolutionAtIndex(importingSourceFile, reason.index, compilerOptions)) return void 0; + const existingMode = host.getModeForResolutionAtIndex(importingSourceFile, reason.index); + const targetMode = options.overrideImportMode ?? host.getDefaultResolutionModeForFile(importingSourceFile); + if (existingMode !== targetMode && existingMode !== void 0 && targetMode !== void 0) { + return void 0; + } const specifier = getModuleNameStringLiteralAt(importingSourceFile, reason.index).text; return preferences.relativePreference !== 1 /* NonRelative */ || !pathIsRelative(specifier) ? specifier : void 0; } @@ -44264,9 +44531,11 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi void 0, options.overrideImportMode ) : void 0; - nodeModulesSpecifiers = append(nodeModulesSpecifiers, specifier); - if (specifier && modulePath.isRedirect) { - return { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true }; + if (specifier && !(forAutoImport && isExcludedByRegex(specifier, preferences.excludeRegexes))) { + nodeModulesSpecifiers = append(nodeModulesSpecifiers, specifier); + if (modulePath.isRedirect) { + return { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true }; + } } if (!specifier) { const local = getLocalModuleSpecifier( @@ -44279,7 +44548,7 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi /*pathsOnly*/ modulePath.isRedirect ); - if (!local) { + if (!local || forAutoImport && isExcludedByRegex(local, preferences.excludeRegexes)) { continue; } if (modulePath.isRedirect) { @@ -44295,7 +44564,13 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi } } } - return (pathsSpecifiers == null ? void 0 : pathsSpecifiers.length) ? { kind: "paths", moduleSpecifiers: pathsSpecifiers, computedWithoutCache: true } : (redirectPathsSpecifiers == null ? void 0 : redirectPathsSpecifiers.length) ? { kind: "redirect", moduleSpecifiers: redirectPathsSpecifiers, computedWithoutCache: true } : (nodeModulesSpecifiers == null ? void 0 : nodeModulesSpecifiers.length) ? { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true } : { kind: "relative", moduleSpecifiers: Debug.checkDefined(relativeSpecifiers), computedWithoutCache: true }; + return (pathsSpecifiers == null ? void 0 : pathsSpecifiers.length) ? { kind: "paths", moduleSpecifiers: pathsSpecifiers, computedWithoutCache: true } : (redirectPathsSpecifiers == null ? void 0 : redirectPathsSpecifiers.length) ? { kind: "redirect", moduleSpecifiers: redirectPathsSpecifiers, computedWithoutCache: true } : (nodeModulesSpecifiers == null ? void 0 : nodeModulesSpecifiers.length) ? { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true } : { kind: "relative", moduleSpecifiers: relativeSpecifiers ?? emptyArray, computedWithoutCache: true }; +} +function isExcludedByRegex(moduleSpecifier, excludeRegexes) { + return some(excludeRegexes, (pattern) => { + var _a; + return !!((_a = stringToRegex(pattern)) == null ? void 0 : _a.test(moduleSpecifier)); + }); } function getInfo(importingSourceFileName, host) { importingSourceFileName = getNormalizedAbsolutePath(importingSourceFileName, host.getCurrentDirectory()); @@ -44308,7 +44583,7 @@ function getInfo(importingSourceFileName, host) { canonicalSourceDirectory: getCanonicalFileName(sourceDirectory) }; } -function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, { getAllowedEndingsInPreferredOrder: getAllowedEndingsInPrefererredOrder, relativePreference }, pathsOnly) { +function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, { getAllowedEndingsInPreferredOrder: getAllowedEndingsInPrefererredOrder, relativePreference, excludeRegexes }, pathsOnly) { const { baseUrl, paths, rootDirs } = compilerOptions; if (pathsOnly && !paths) { return void 0; @@ -44324,7 +44599,14 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im if (!relativeToBaseUrl) { return pathsOnly ? void 0 : relativePath; } - const fromPackageJsonImports = pathsOnly ? void 0 : tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, compilerOptions, host, importMode); + const fromPackageJsonImports = pathsOnly ? void 0 : tryGetModuleNameFromPackageJsonImports( + moduleFileName, + sourceDirectory, + compilerOptions, + host, + importMode, + prefersTsExtension(allowedEndings) + ); const fromPaths = pathsOnly || fromPackageJsonImports === void 0 ? paths && tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, host, compilerOptions) : void 0; if (pathsOnly) { return fromPaths; @@ -44333,6 +44615,14 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im if (!maybeNonRelative) { return relativePath; } + const relativeIsExcluded = isExcludedByRegex(relativePath, excludeRegexes); + const nonRelativeIsExcluded = isExcludedByRegex(maybeNonRelative, excludeRegexes); + if (!relativeIsExcluded && nonRelativeIsExcluded) { + return relativePath; + } + if (relativeIsExcluded && !nonRelativeIsExcluded) { + return maybeNonRelative; + } if (relativePreference === 1 /* NonRelative */ && !pathIsRelative(maybeNonRelative)) { return maybeNonRelative; } @@ -44432,7 +44722,7 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, if (cache && links && host.readFile && !pathContainsNodeModules(info.importingSourceFileName)) { Debug.type(host); const state = getTemporaryModuleResolutionState(cache.getPackageJsonInfoCache(), host, {}); - const packageJson = getPackageScopeForPath(info.importingSourceFileName, state); + const packageJson = getPackageScopeForPath(getDirectoryPath(info.importingSourceFileName), state); if (packageJson) { const toResolve = getAllRuntimeDependencies(packageJson.contents.packageJsonContent); for (const depName of toResolve || emptyArray) { @@ -44557,7 +44847,7 @@ function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, hos return ending !== 0 /* Minimal */ || value === processEnding(relativeToBaseUrl, [ending], compilerOptions, host); } } -function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions, mode, isImports) { +function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions, mode, isImports, preferTsExtension) { if (typeof exports2 === "string") { const ignoreCase = !hostUsesCaseSensitiveFileNames(host); const getCommonSourceDirectory2 = () => host.getCommonSourceDirectory(); @@ -44569,6 +44859,7 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac void 0 ); const extensionSwappedTarget = hasTSFileExtension(targetFilePath) ? removeFileExtension(targetFilePath) + tryGetJSExtensionForFile(targetFilePath, options) : void 0; + const canTryTsExtension = preferTsExtension && hasImplementationTSFileExtension(targetFilePath); switch (mode) { case 0 /* Exact */: if (extensionSwappedTarget && comparePaths(extensionSwappedTarget, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || comparePaths(targetFilePath, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || outputFile && comparePaths(outputFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || declarationFile && comparePaths(declarationFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */) { @@ -44576,6 +44867,19 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac } break; case 1 /* Directory */: + if (canTryTsExtension && containsPath(targetFilePath, pathOrPattern, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + targetFilePath, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: getNormalizedAbsolutePath( + combinePaths(combinePaths(packageName, exports2), fragment), + /*currentDirectory*/ + void 0 + ) }; + } if (extensionSwappedTarget && containsPath(pathOrPattern, extensionSwappedTarget, ignoreCase)) { const fragment = getRelativePathFromDirectory( pathOrPattern, @@ -44589,7 +44893,7 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac void 0 ) }; } - if (containsPath(pathOrPattern, targetFilePath, ignoreCase)) { + if (!canTryTsExtension && containsPath(pathOrPattern, targetFilePath, ignoreCase)) { const fragment = getRelativePathFromDirectory( pathOrPattern, targetFilePath, @@ -44612,12 +44916,12 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac return { moduleFileToTry: combinePaths(packageName, fragment) }; } if (declarationFile && containsPath(pathOrPattern, declarationFile, ignoreCase)) { - const fragment = getRelativePathFromDirectory( + const fragment = changeFullExtension(getRelativePathFromDirectory( pathOrPattern, declarationFile, /*ignoreCase*/ false - ); + ), getJSExtensionForFile(declarationFile, options)); return { moduleFileToTry: combinePaths(packageName, fragment) }; } break; @@ -44625,11 +44929,15 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac const starPos = pathOrPattern.indexOf("*"); const leadingSlice = pathOrPattern.slice(0, starPos); const trailingSlice = pathOrPattern.slice(starPos + 1); + if (canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } if (extensionSwappedTarget && startsWith(extensionSwappedTarget, leadingSlice, ignoreCase) && endsWith(extensionSwappedTarget, trailingSlice, ignoreCase)) { const starReplacement = extensionSwappedTarget.slice(leadingSlice.length, extensionSwappedTarget.length - trailingSlice.length); return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; } - if (startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + if (!canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; } @@ -44639,17 +44947,19 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac } if (declarationFile && startsWith(declarationFile, leadingSlice, ignoreCase) && endsWith(declarationFile, trailingSlice, ignoreCase)) { const starReplacement = declarationFile.slice(leadingSlice.length, declarationFile.length - trailingSlice.length); - return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + const substituted = replaceFirstStar(packageName, starReplacement); + const jsExtension = tryGetJSExtensionForFile(declarationFile, options); + return jsExtension ? { moduleFileToTry: changeFullExtension(substituted, jsExtension) } : void 0; } break; } } else if (Array.isArray(exports2)) { - return forEach(exports2, (e) => tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, e, conditions, mode, isImports)); + return forEach(exports2, (e) => tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, e, conditions, mode, isImports, preferTsExtension)); } else if (typeof exports2 === "object" && exports2 !== null) { for (const key of getOwnKeys(exports2)) { if (key === "default" || conditions.indexOf(key) >= 0 || isApplicableVersionedTypesKey(conditions, key)) { const subTarget = exports2[key]; - const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports); + const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports, preferTsExtension); if (result) { return result; } @@ -44677,6 +44987,8 @@ function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirec conditions, mode, /*isImports*/ + false, + /*preferTsExtension*/ false ); }); @@ -44691,10 +45003,12 @@ function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirec conditions, 0 /* Exact */, /*isImports*/ + false, + /*preferTsExtension*/ false ); } -function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode) { +function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode, preferTsExtension) { var _a, _b, _c; if (!host.readFile || !getResolvePackageJsonImports(options)) { return void 0; @@ -44727,7 +45041,8 @@ function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, conditions, mode, /*isImports*/ - true + true, + preferTsExtension ); })) == null ? void 0 : _c.moduleFileToTry; } @@ -44754,7 +45069,7 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!parts) { return void 0; } - const preferences = getModuleSpecifierPreferences(userPreferences, options, importingSourceFile); + const preferences = getModuleSpecifierPreferences(userPreferences, host, options, importingSourceFile); const allowedEndings = preferences.getAllowedEndingsInPreferredOrder(); let moduleSpecifier = path; let isPackageRootPath = false; @@ -44804,12 +45119,20 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const cachedPackageJson = (_b = (_a = host.getPackageJsonInfoCache) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getPackageJsonInfo(packageJsonPath); if (isPackageJsonInfo(cachedPackageJson) || cachedPackageJson === void 0 && host.fileExists(packageJsonPath)) { const packageJsonContent = (cachedPackageJson == null ? void 0 : cachedPackageJson.contents.packageJsonContent) || tryParseJson(host.readFile(packageJsonPath)); - const importMode = overrideMode || importingSourceFile.impliedNodeFormat; + const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); const packageName2 = getPackageNameFromTypesPackageName(nodeModulesDirectoryName2); const conditions = getConditions(options, importMode); - const fromExports = (packageJsonContent == null ? void 0 : packageJsonContent.exports) ? tryGetModuleNameFromExports(options, host, path, packageRootPath, packageName2, packageJsonContent.exports, conditions) : void 0; + const fromExports = (packageJsonContent == null ? void 0 : packageJsonContent.exports) ? tryGetModuleNameFromExports( + options, + host, + path, + packageRootPath, + packageName2, + packageJsonContent.exports, + conditions + ) : void 0; if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } @@ -44954,6 +45277,13 @@ function getRelativePathIfInSameVolume(path, directoryPath, getCanonicalFileName function isPathRelativeToParent(path) { return startsWith(path, ".."); } +function getDefaultResolutionModeForFile(file, host, compilerOptions) { + return isFullSourceFile(file) ? host.getDefaultResolutionModeForFile(file) : getDefaultResolutionModeForFileWorker(file, compilerOptions); +} +function prefersTsExtension(allowedEndings) { + const tsPriority = allowedEndings.indexOf(3 /* TsExtension */); + return tsPriority > -1 && tsPriority < allowedEndings.indexOf(2 /* JsExtension */); +} // src/compiler/checker.ts var ambientModuleSymbolRegex = /^".+"$/; @@ -45135,10 +45465,12 @@ function createTypeChecker(host) { var strictFunctionTypes = getStrictOptionValue(compilerOptions, "strictFunctionTypes"); var strictBindCallApply = getStrictOptionValue(compilerOptions, "strictBindCallApply"); var strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); + var strictBuiltinIteratorReturn = getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); var noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); var noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); var useUnknownInCatchVariables = getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes; + var noUncheckedSideEffectImports = !!compilerOptions.noUncheckedSideEffectImports; var checkBinaryExpression = createCheckBinaryExpression(); var emitResolver = createResolver(); var nodeBuilder = createNodeBuilder(); @@ -45268,6 +45600,7 @@ function createTypeChecker(host) { getNonOptionalType: removeOptionalTypeMarker, getTypeArguments, typeToTypeNode: nodeBuilder.typeToTypeNode, + typePredicateToTypePredicateNode: nodeBuilder.typePredicateToTypePredicateNode, indexInfoToIndexSignatureDeclaration: nodeBuilder.indexInfoToIndexSignatureDeclaration, signatureToSignatureDeclaration: nodeBuilder.signatureToSignatureDeclaration, symbolToEntityName: nodeBuilder.symbolToEntityName, @@ -45433,13 +45766,6 @@ function createTypeChecker(host) { /*withAugmentations*/ true ), - tryFindAmbientModuleWithoutAugmentations: (moduleName) => { - return tryFindAmbientModule( - moduleName, - /*withAugmentations*/ - false - ); - }, getApparentType, getUnionType, isTypeAssignableTo, @@ -45453,6 +45779,7 @@ function createTypeChecker(host) { getNumberType: () => numberType, getNumberLiteralType, getBigIntType: () => bigintType, + getBigIntLiteralType, createPromiseType, createArrayType, getElementTypeOfArrayType, @@ -45473,13 +45800,13 @@ function createTypeChecker(host) { /*reportErrors*/ false ), - getAsyncIterableType: () => { + getAnyAsyncIterableType: () => { const type = getGlobalAsyncIterableType( /*reportErrors*/ false ); if (type === emptyGenericType) return void 0; - return type; + return createTypeReference(type, [anyType, anyType, anyType]); }, isSymbolAccessible, isArrayType, @@ -45951,8 +46278,6 @@ function createTypeChecker(host) { } }; var anyIterationTypes = createIterationTypes(anyType, anyType, anyType); - var anyIterationTypesExceptNext = createIterationTypes(anyType, anyType, unknownType); - var defaultIterationTypes = createIterationTypes(neverType, anyType, undefinedType); var asyncIterationTypesResolver = { iterableCacheKey: "iterationTypesOfAsyncIterable", iteratorCacheKey: "iterationTypesOfAsyncIterator", @@ -45960,7 +46285,9 @@ function createTypeChecker(host) { getGlobalIteratorType: getGlobalAsyncIteratorType, getGlobalIterableType: getGlobalAsyncIterableType, getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType, + getGlobalIteratorObjectType: getGlobalAsyncIteratorObjectType, getGlobalGeneratorType: getGlobalAsyncGeneratorType, + getGlobalBuiltinIteratorTypes: getGlobalBuiltinAsyncIteratorTypes, resolveIterationType: (type, errorNode) => getAwaitedType(type, errorNode, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member), mustHaveANextMethodDiagnostic: Diagnostics.An_async_iterator_must_have_a_next_method, mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method, @@ -45973,7 +46300,9 @@ function createTypeChecker(host) { getGlobalIteratorType, getGlobalIterableType, getGlobalIterableIteratorType, + getGlobalIteratorObjectType, getGlobalGeneratorType, + getGlobalBuiltinIteratorTypes, resolveIterationType: (type, _errorNode) => type, mustHaveANextMethodDiagnostic: Diagnostics.An_iterator_must_have_a_next_method, mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_iterator_must_be_a_method, @@ -46011,12 +46340,16 @@ function createTypeChecker(host) { var deferredGlobalIterableType; var deferredGlobalIteratorType; var deferredGlobalIterableIteratorType; + var deferredGlobalIteratorObjectType; var deferredGlobalGeneratorType; var deferredGlobalIteratorYieldResultType; var deferredGlobalIteratorReturnResultType; var deferredGlobalAsyncIterableType; var deferredGlobalAsyncIteratorType; var deferredGlobalAsyncIterableIteratorType; + var deferredGlobalBuiltinIteratorTypes; + var deferredGlobalBuiltinAsyncIteratorTypes; + var deferredGlobalAsyncIteratorObjectType; var deferredGlobalAsyncGeneratorType; var deferredGlobalTemplateStringsArrayType; var deferredGlobalImportMetaType; @@ -46052,6 +46385,7 @@ function createTypeChecker(host) { var contextualTypes = []; var contextualIsCache = []; var contextualTypeCount = 0; + var contextualBindingPatterns = []; var inferenceContextNodes = []; var inferenceContexts = []; var inferenceContextCount = 0; @@ -46369,7 +46703,7 @@ function createTypeChecker(host) { } if (source.exports) { if (!target.exports) target.exports = createSymbolTable(); - mergeSymbolTable(target.exports, source.exports, unidirectional); + mergeSymbolTable(target.exports, source.exports, unidirectional, target); } if (!unidirectional) { recordMergedSymbol(target, source); @@ -46449,10 +46783,14 @@ function createTypeChecker(host) { mergeSymbolTable(combined, second); return combined; } - function mergeSymbolTable(target, source, unidirectional = false) { + function mergeSymbolTable(target, source, unidirectional = false, mergedParent) { source.forEach((sourceSymbol, id) => { const targetSymbol = target.get(id); - target.set(id, targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol)); + const merged = targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol); + if (mergedParent && targetSymbol) { + merged.parent = mergedParent; + } + target.set(id, merged); }); } function mergeModuleAugmentation(moduleName) { @@ -46470,6 +46808,8 @@ function createTypeChecker(host) { moduleName, moduleName, moduleNotFoundError, + /*ignoreErrors*/ + false, /*isForAugmentation*/ true ); @@ -47152,7 +47492,7 @@ function createTypeChecker(host) { const isExport = typeOnlyDeclaration.kind === 281 /* ExportSpecifier */ || typeOnlyDeclaration.kind === 278 /* ExportDeclaration */; const message = isExport ? Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type : Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type; const relatedMessage = isExport ? Diagnostics._0_was_exported_here : Diagnostics._0_was_imported_here; - const name = typeOnlyDeclaration.kind === 278 /* ExportDeclaration */ ? "*" : unescapeLeadingUnderscores(typeOnlyDeclaration.name.escapedText); + const name = typeOnlyDeclaration.kind === 278 /* ExportDeclaration */ ? "*" : moduleExportNameTextUnescaped(typeOnlyDeclaration.name); addRelatedInfo(error(node.moduleReference, message), createDiagnosticForNode(typeOnlyDeclaration, relatedMessage, name)); } } @@ -47177,22 +47517,28 @@ function createTypeChecker(host) { function isSyntacticDefault(node) { return isExportAssignment(node) && !node.isExportEquals || hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) || isNamespaceExport(node); } - function getUsageModeForExpression(usage) { - return isStringLiteralLike(usage) ? host.getModeForUsageLocation(getSourceFileOfNode(usage), usage) : void 0; + function getEmitSyntaxForModuleSpecifierExpression(usage) { + return isStringLiteralLike(usage) ? host.getEmitSyntaxForUsageLocation(getSourceFileOfNode(usage), usage) : void 0; } function isESMFormatImportImportingCommonjsFormatFile(usageMode, targetMode) { return usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */; } - function isOnlyImportedAsDefault(usage) { - const usageMode = getUsageModeForExpression(usage); - return usageMode === 99 /* ESNext */ && endsWith(usage.text, ".json" /* Json */); + function isOnlyImportableAsDefault(usage) { + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + const usageMode = getEmitSyntaxForModuleSpecifierExpression(usage); + return usageMode === 99 /* ESNext */ && endsWith(usage.text, ".json" /* Json */); + } + return false; } function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, usage) { - const usageMode = file && getUsageModeForExpression(usage); - if (file && usageMode !== void 0 && 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { - const result = isESMFormatImportImportingCommonjsFormatFile(usageMode, file.impliedNodeFormat); - if (usageMode === 99 /* ESNext */ || result) { - return result; + const usageMode = file && getEmitSyntaxForModuleSpecifierExpression(usage); + if (file && usageMode !== void 0) { + const targetMode = host.getImpliedNodeFormatForEmit(file); + if (usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */ && 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return true; + } + if (usageMode === 99 /* ESNext */ && targetMode === 99 /* ESNext */) { + return false; } } if (!allowSyntheticDefaultImports) { @@ -47251,7 +47597,7 @@ function createTypeChecker(host) { if (!specifier) { return exportDefaultSymbol; } - const hasDefaultOnly = isOnlyImportedAsDefault(specifier); + const hasDefaultOnly = isOnlyImportableAsDefault(specifier); const hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, specifier); if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) { if (hasExportAssignmentSymbol(moduleSymbol) && !allowSyntheticDefaultImports) { @@ -47390,12 +47736,12 @@ function createTypeChecker(host) { if (valueSymbol.exports) result.exports = new Map(valueSymbol.exports); return result; } - function getExportOfModule(symbol, name, specifier, dontResolveAlias) { + function getExportOfModule(symbol, nameText, specifier, dontResolveAlias) { var _a; if (symbol.flags & 1536 /* Module */) { - const exportSymbol = getExportsOfSymbol(symbol).get(name.escapedText); + const exportSymbol = getExportsOfSymbol(symbol).get(nameText); const resolved = resolveSymbol(exportSymbol, dontResolveAlias); - const exportStarDeclaration = (_a = getSymbolLinks(symbol).typeOnlyExportStarMap) == null ? void 0 : _a.get(name.escapedText); + const exportStarDeclaration = (_a = getSymbolLinks(symbol).typeOnlyExportStarMap) == null ? void 0 : _a.get(nameText); markSymbolOfAliasDeclarationIfTypeOnly( specifier, exportSymbol, @@ -47403,7 +47749,7 @@ function createTypeChecker(host) { /*overwriteEmpty*/ false, exportStarDeclaration, - name.escapedText + nameText ); return resolved; } @@ -47421,10 +47767,11 @@ function createTypeChecker(host) { const moduleSpecifier = getExternalModuleRequireArgument(node) || node.moduleSpecifier; const moduleSymbol = resolveExternalModuleName(node, moduleSpecifier); const name = !isPropertyAccessExpression(specifier) && specifier.propertyName || specifier.name; - if (!isIdentifier(name)) { + if (!isIdentifier(name) && name.kind !== 11 /* StringLiteral */) { return void 0; } - const suppressInteropError = name.escapedText === "default" /* Default */ && allowSyntheticDefaultImports; + const nameText = moduleExportNameTextEscaped(name); + const suppressInteropError = nameText === "default" /* Default */ && allowSyntheticDefaultImports; const targetSymbol = resolveESModuleSymbol( moduleSymbol, moduleSpecifier, @@ -47433,7 +47780,7 @@ function createTypeChecker(host) { suppressInteropError ); if (targetSymbol) { - if (name.escapedText) { + if (nameText || name.kind === 11 /* StringLiteral */) { if (isShorthandAmbientModuleSymbol(moduleSymbol)) { return moduleSymbol; } @@ -47441,18 +47788,18 @@ function createTypeChecker(host) { if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=" /* ExportEquals */)) { symbolFromVariable = getPropertyOfType( getTypeOfSymbol(targetSymbol), - name.escapedText, + nameText, /*skipObjectFunctionPropertyAugment*/ true ); } else { - symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText); + symbolFromVariable = getPropertyOfVariable(targetSymbol, nameText); } symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias); - let symbolFromModule = getExportOfModule(targetSymbol, name, specifier, dontResolveAlias); - if (symbolFromModule === void 0 && name.escapedText === "default" /* Default */) { + let symbolFromModule = getExportOfModule(targetSymbol, nameText, specifier, dontResolveAlias); + if (symbolFromModule === void 0 && nameText === "default" /* Default */) { const file = (_a = moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); - if (isOnlyImportedAsDefault(moduleSpecifier) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) { + if (isOnlyImportableAsDefault(moduleSpecifier) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) { symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } } @@ -47468,7 +47815,7 @@ function createTypeChecker(host) { var _a; const moduleName = getFullyQualifiedName(moduleSymbol, node); const declarationName = declarationNameToString(name); - const suggestion = getSuggestedSymbolForNonexistentModule(name, targetSymbol); + const suggestion = isIdentifier(name) ? getSuggestedSymbolForNonexistentModule(name, targetSymbol) : void 0; if (suggestion !== void 0) { const suggestionName = symbolToString(suggestion); const diagnostic = error(name, Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, moduleName, declarationName, suggestionName); @@ -47490,7 +47837,7 @@ function createTypeChecker(host) { } function reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName) { var _a, _b; - const localSymbol = (_b = (_a = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(name.escapedText); + const localSymbol = (_b = (_a = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(moduleExportNameTextEscaped(name)); const exports2 = moduleSymbol.exports; if (localSymbol) { const exportedEqualsSymbol = exports2 == null ? void 0 : exports2.get("export=" /* ExportEquals */); @@ -47522,7 +47869,7 @@ function createTypeChecker(host) { } } function getTargetOfImportSpecifier(node, dontResolveAlias) { - if (isImportSpecifier(node) && idText(node.propertyName || node.name) === "default" /* Default */) { + if (isImportSpecifier(node) && moduleExportNameIsDefault(node.propertyName || node.name)) { const specifier = getModuleSpecifierForImportOrExport(node); const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); if (moduleSymbol) { @@ -47566,19 +47913,23 @@ function createTypeChecker(host) { } } function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) { - if (idText(node.propertyName || node.name) === "default" /* Default */) { + const name = node.propertyName || node.name; + if (moduleExportNameIsDefault(name)) { const specifier = getModuleSpecifierForImportOrExport(node); const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); if (moduleSymbol) { return getTargetofModuleDefault(moduleSymbol, node, !!dontResolveAlias); } } - const resolved = node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : resolveEntityName( - node.propertyName || node.name, - meaning, - /*ignoreErrors*/ - false, - dontResolveAlias + const resolved = node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + false, + dontResolveAlias + ) ); markSymbolOfAliasDeclarationIfTypeOnly( node, @@ -48026,14 +48377,14 @@ function createTypeChecker(host) { function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors) { const isClassic = getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */; const errorMessage = isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations; - return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage); + return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage, ignoreErrors); } - function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, isForAugmentation = false) { - return isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, moduleReferenceExpression, isForAugmentation) : void 0; + function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, ignoreErrors = false, isForAugmentation = false) { + return isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, !ignoreErrors ? moduleReferenceExpression : void 0, isForAugmentation) : void 0; } function resolveExternalModule(location, moduleReference, moduleNotFoundError, errorNode, isForAugmentation = false) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k; - if (startsWith(moduleReference, "@types/")) { + if (errorNode && startsWith(moduleReference, "@types/")) { const diag2 = Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1; const withoutAtTypePrefix = removePrefix(moduleReference, "@types/"); error(errorNode, diag2, withoutAtTypePrefix, moduleReference); @@ -48052,10 +48403,10 @@ function createTypeChecker(host) { /*requireStringLiteralLikeArgument*/ true ) ? location.initializer.arguments[0] : void 0) || ((_c = findAncestor(location, isImportCall)) == null ? void 0 : _c.arguments[0]) || ((_d = findAncestor(location, isImportDeclaration)) == null ? void 0 : _d.moduleSpecifier) || ((_e = findAncestor(location, isExternalModuleImportEqualsDeclaration)) == null ? void 0 : _e.moduleReference.expression) || ((_f = findAncestor(location, isExportDeclaration)) == null ? void 0 : _f.moduleSpecifier); - const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : currentSourceFile.impliedNodeFormat; + const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : host.getDefaultResolutionModeForFile(currentSourceFile); const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions); const resolvedModule = (_g = host.getResolvedModule(currentSourceFile, moduleReference, mode)) == null ? void 0 : _g.resolvedModule; - const resolutionDiagnostic = resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile); + const resolutionDiagnostic = errorNode && resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile); const sourceFile = resolvedModule && (!resolutionDiagnostic || resolutionDiagnostic === Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set) && host.getSourceFile(resolvedModule.resolvedFileName); if (sourceFile) { if (resolutionDiagnostic) { @@ -48063,7 +48414,7 @@ function createTypeChecker(host) { } if (resolvedModule.resolvedUsingTsExtension && isDeclarationFileName(moduleReference)) { const importOrExport = ((_h = findAncestor(location, isImportDeclaration)) == null ? void 0 : _h.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); - if (importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) { + if (errorNode && importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) { error( errorNode, Diagnostics.A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead, @@ -48072,13 +48423,13 @@ function createTypeChecker(host) { } } else if (resolvedModule.resolvedUsingTsExtension && !shouldAllowImportingTsExtension(compilerOptions, currentSourceFile.fileName)) { const importOrExport = ((_i = findAncestor(location, isImportDeclaration)) == null ? void 0 : _i.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); - if (!((importOrExport == null ? void 0 : importOrExport.isTypeOnly) || findAncestor(location, isImportTypeNode))) { + if (errorNode && !((importOrExport == null ? void 0 : importOrExport.isTypeOnly) || findAncestor(location, isImportTypeNode))) { const tsExtension = Debug.checkDefined(tryExtractTSExtension(moduleReference)); error(errorNode, Diagnostics.An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled, tsExtension); } } if (sourceFile.symbol) { - if (resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) { + if (errorNode && resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) { errorOnImplicitAnyModule( /*isError*/ false, @@ -48089,7 +48440,7 @@ function createTypeChecker(host) { moduleReference ); } - if (moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */) { + if (errorNode && (moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */)) { const isSyncImport = currentSourceFile.impliedNodeFormat === 1 /* CommonJS */ && !findAncestor(location, isImportCall) || !!findAncestor(location, isImportEqualsDeclaration); const overrideHost = findAncestor(location, (l) => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l) || isJSDocImportTag(l)); if (isSyncImport && sourceFile.impliedNodeFormat === 99 /* ESNext */ && !hasResolutionModeOverride(overrideHost)) { @@ -48099,41 +48450,7 @@ function createTypeChecker(host) { let diagnosticDetails; const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); if (ext === ".ts" /* Ts */ || ext === ".js" /* Js */ || ext === ".tsx" /* Tsx */ || ext === ".jsx" /* Jsx */) { - const scope = currentSourceFile.packageJsonScope; - const targetExt = ext === ".ts" /* Ts */ ? ".mts" /* Mts */ : ext === ".js" /* Js */ ? ".mjs" /* Mjs */ : void 0; - if (scope && !scope.contents.packageJsonContent.type) { - if (targetExt) { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, - targetExt, - combinePaths(scope.packageDirectory, "package.json") - ); - } else { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, - combinePaths(scope.packageDirectory, "package.json") - ); - } - } else { - if (targetExt) { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, - targetExt - ); - } else { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module - ); - } - } + diagnosticDetails = createModeMismatchDetails(currentSourceFile); } diagnostics.add(createDiagnosticForNodeFromMessageChain( getSourceFileOfNode(errorNode), @@ -48149,7 +48466,7 @@ function createTypeChecker(host) { } return getMergedSymbol(sourceFile.symbol); } - if (moduleNotFoundError) { + if (errorNode && moduleNotFoundError && !isSideEffectImport(errorNode)) { error(errorNode, Diagnostics.File_0_is_not_a_module, sourceFile.fileName); } return void 0; @@ -48164,6 +48481,9 @@ function createTypeChecker(host) { return getMergedSymbol(pattern.symbol); } } + if (!errorNode) { + return void 0; + } if (resolvedModule && !resolutionExtensionIsTSOrJson(resolvedModule.extension) && resolutionDiagnostic === void 0 || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { if (isForAugmentation) { const diag2 = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; @@ -48231,6 +48551,9 @@ function createTypeChecker(host) { } } function errorOnImplicitAnyModule(isError, errorNode, sourceFile, mode, { packageId, resolvedFileName }, moduleReference) { + if (isSideEffectImport(errorNode)) { + return; + } let errorInfo; if (!isExternalModuleNameRelative(moduleReference) && packageId) { errorInfo = createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageId.name); @@ -48296,7 +48619,7 @@ function createTypeChecker(host) { return cloneTypeAsModuleType(symbol, defaultOnlyType, referenceParent); } const targetFile = (_a = moduleSymbol == null ? void 0 : moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); - const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getUsageModeForExpression(reference), targetFile.impliedNodeFormat); + const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getEmitSyntaxForModuleSpecifierExpression(reference), host.getImpliedNodeFormatForEmit(targetFile)); if (getESModuleInterop(compilerOptions) || isEsmCjsRef) { let sigs = getSignaturesOfStructuredType(type, 0 /* Call */); if (!sigs || !sigs.length) { @@ -49159,6 +49482,7 @@ function createTypeChecker(host) { } function symbolToString(symbol, enclosingDeclaration, meaning, flags = 4 /* AllowAnyNodeKind */, writer) { let nodeFlags = 70221824 /* IgnoreErrors */; + let internalNodeFlags = 0 /* None */; if (flags & 2 /* UseOnlyExternalAliasing */) { nodeFlags |= 128 /* UseOnlyExternalAliasing */; } @@ -49169,15 +49493,15 @@ function createTypeChecker(host) { nodeFlags |= 16384 /* UseAliasDefinedOutsideCurrentScope */; } if (flags & 32 /* DoNotIncludeSymbolChain */) { - nodeFlags |= 134217728 /* DoNotIncludeSymbolChain */; + internalNodeFlags |= 4 /* DoNotIncludeSymbolChain */; } if (flags & 16 /* WriteComputedProps */) { - nodeFlags |= 1073741824 /* WriteComputedProps */; + internalNodeFlags |= 1 /* WriteComputedProps */; } const builder = flags & 4 /* AllowAnyNodeKind */ ? nodeBuilder.symbolToNode : nodeBuilder.symbolToEntityName; return writer ? symbolToStringWorker(writer).getText() : usingSingleLineStringWriter(symbolToStringWorker); function symbolToStringWorker(writer2) { - const entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); + const entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags); const printer = (enclosingDeclaration == null ? void 0 : enclosingDeclaration.kind) === 307 /* SourceFile */ ? createPrinterWithRemoveCommentsNeverAsciiEscape() : createPrinterWithRemoveComments(); const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); printer.writeNode( @@ -49214,7 +49538,13 @@ function createTypeChecker(host) { } function typeToString(type, enclosingDeclaration, flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer = createTextWriter("")) { const noTruncation = compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */; - const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0)); + const typeNode = nodeBuilder.typeToTypeNode( + type, + enclosingDeclaration, + toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0 /* None */), + /*internalFlags*/ + void 0 + ); if (typeNode === void 0) return Debug.fail("should always get typenode"); const printer = type !== unresolvedType ? createPrinterWithRemoveComments() : createPrinterWithDefaults(); const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); @@ -49263,31 +49593,31 @@ function createTypeChecker(host) { } function createNodeBuilder() { return { - typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)), - typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)), - expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)), - serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)), - serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)), - indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper( + typeToTypeNode: (type, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeToTypeNodeHelper(type, context)), + typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)), + expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)), + serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)), + serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => serializeReturnTypeForSignature(context, signature)), + indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper( indexInfo, context, /*typeNode*/ void 0 )), - signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => signatureToSignatureDeclarationHelper(signature, kind, context)), - symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToName( + signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => signatureToSignatureDeclarationHelper(signature, kind, context)), + symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToName( symbol, context, meaning, /*expectsIdentifier*/ false )), - symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToExpression(symbol, context, meaning)), - symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeParametersToTypeParameterDeclarations(symbol, context)), - symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToParameterDeclaration(symbol, context)), - typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => typeParameterToDeclaration(parameter, context)), - symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)), - symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning)) + symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToExpression(symbol, context, meaning)), + symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParametersToTypeParameterDeclarations(symbol, context)), + symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToParameterDeclaration(symbol, context)), + typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParameterToDeclaration(parameter, context)), + symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)), + symbolToNode: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToNode(symbol, context, meaning)) }; function getTypeFromTypeNode2(context, node, noMappedTypes) { const type = getTypeFromTypeNodeWithoutContext(node); @@ -49303,19 +49633,26 @@ function createTypeChecker(host) { if (!location) { return range; } - if (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(getOriginalNode(location))) { - return setOriginalNode(range, location); + let original = range.original; + while (original && original !== location) { + original = original.original; + } + if (!original) { + setOriginalNode(range, location); } - return setTextRange(setOriginalNode(range, location), location); + if (context.enclosingFile && context.enclosingFile === getSourceFileOfNode(getOriginalNode(location))) { + return setTextRange(range, location); + } + return range; } function expressionOrTypeToTypeNode(context, expr, type, addUndefined) { - const oldFlags = context.flags; - if (expr && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + const restoreFlags = saveRestoreFlags(context); + if (expr && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeTypeOfExpression(expr, context, addUndefined); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; + context.internalFlags |= 2 /* NoSyntacticPrinter */; const result = expressionOrTypeToTypeNodeHelper(context, expr, type, addUndefined); - context.flags = oldFlags; + restoreFlags(); return result; } function expressionOrTypeToTypeNodeHelper(context, expr, type, addUndefined) { @@ -49368,7 +49705,7 @@ function createTypeChecker(host) { return void 0; } function symbolToNode(symbol, context, meaning) { - if (context.flags & 1073741824 /* WriteComputedProps */) { + if (context.internalFlags & 1 /* WriteComputedProps */) { if (symbol.valueDeclaration) { const name = getNameOfDeclaration(symbol.valueDeclaration); if (name && isComputedPropertyName(name)) return name; @@ -49381,12 +49718,13 @@ function createTypeChecker(host) { } return symbolToExpression(symbol, context, meaning); } - function withContext(enclosingDeclaration, flags, tracker, cb) { - const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; + function withContext(enclosingDeclaration, flags, internalFlags, tracker, cb) { + const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : (internalFlags || 0 /* None */) & 4 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; const context = { enclosingDeclaration, enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration), flags: flags || 0 /* None */, + internalFlags: internalFlags || 0 /* None */, tracker: void 0, encounteredError: false, reportedDiagnostic: false, @@ -49416,14 +49754,23 @@ function createTypeChecker(host) { } return context.encounteredError ? void 0 : resultingNode; } + function saveRestoreFlags(context) { + const flags = context.flags; + const internalFlags = context.internalFlags; + return restore; + function restore() { + context.flags = flags; + context.internalFlags = internalFlags; + } + } function checkTruncationLength(context) { if (context.truncating) return context.truncating; return context.truncating = context.approximateLength > (context.flags & 1 /* NoTruncation */ ? noTruncationMaximumTruncationLength : defaultMaximumTruncationLength); } function typeToTypeNodeHelper(type, context) { - const savedFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); const typeNode = typeToTypeNodeWorker(type, context); - context.flags = savedFlags; + restoreFlags(); return typeNode; } function typeToTypeNodeWorker(type, context) { @@ -49877,7 +50224,7 @@ function createTypeChecker(host) { context.symbolDepth = /* @__PURE__ */ new Map(); } const links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration); - const key = `${getTypeId(type2)}|${context.flags}`; + const key = `${getTypeId(type2)}|${context.flags}|${context.internalFlags}`; if (links) { links.serializedTypes || (links.serializedTypes = /* @__PURE__ */ new Map()); } @@ -49983,10 +50330,10 @@ function createTypeChecker(host) { } return typeToTypeNodeHelper(getIntersectionType(types), context); } - const savedFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 4194304 /* InObjectTypeLiteral */; const members = createTypeNodesFromResolvedType(resolved); - context.flags = savedFlags; + restoreFlags(); const typeLiteralNode = factory.createTypeLiteralNode(members); context.approximateLength += 2; setEmitFlags(typeLiteralNode, context.flags & 1024 /* MultilineObjectLiterals */ ? 0 : 1 /* SingleLine */); @@ -50049,23 +50396,51 @@ function createTypeChecker(host) { } while (i < length2 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent); if (!rangeEquals(outerTypeParameters, typeArguments, start, i)) { const typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context); - const flags2 = context.flags; + const restoreFlags2 = saveRestoreFlags(context); context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; const ref = symbolToTypeNode(parent, context, 788968 /* Type */, typeArgumentSlice); - context.flags = flags2; + restoreFlags2(); resultType = !resultType ? ref : appendReferenceToType(resultType, ref); } } } let typeArgumentNodes; if (typeArguments.length > 0) { - const typeParameterCount = (type2.target.typeParameters || emptyArray).length; + let typeParameterCount = 0; + if (type2.target.typeParameters) { + typeParameterCount = Math.min(type2.target.typeParameters.length, typeArguments.length); + if (isReferenceToType(type2, getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType(type2, getGlobalIterableIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType(type2, getGlobalAsyncIterableType( + /*reportErrors*/ + false + )) || isReferenceToType(type2, getGlobalAsyncIterableIteratorType( + /*reportErrors*/ + false + ))) { + if (!type2.node || !isTypeReferenceNode(type2.node) || !type2.node.typeArguments || type2.node.typeArguments.length < typeParameterCount) { + while (typeParameterCount > 0) { + const typeArgument = typeArguments[typeParameterCount - 1]; + const typeParameter = type2.target.typeParameters[typeParameterCount - 1]; + const defaultType = getDefaultFromTypeParameter(typeParameter); + if (!defaultType || !isTypeIdenticalTo(typeArgument, defaultType)) { + break; + } + typeParameterCount--; + } + } + } + } typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); } - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; const finalRef = symbolToTypeNode(type2.symbol, context, 788968 /* Type */, typeArgumentNodes); - context.flags = flags; + restoreFlags(); return !resultType ? finalRef : appendReferenceToType(resultType, finalRef); } } @@ -50377,7 +50752,7 @@ function createTypeChecker(host) { } } if (seenNames) { - const saveContextFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 64 /* UseFullyQualifiedType */; seenNames.forEach((types2) => { if (!arrayIsHomogeneous(types2, ([a], [b]) => typesAreSameReference(a, b))) { @@ -50386,7 +50761,7 @@ function createTypeChecker(host) { } } }); - context.flags = saveContextFlags; + restoreFlags(); } return result; } @@ -50438,19 +50813,19 @@ function createTypeChecker(host) { } else { typeParameters = signature.typeParameters && signature.typeParameters.map((parameter) => typeParameterToDeclaration(parameter, context)); } - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags &= ~256 /* SuppressAnyReturnType */; const parameters = (some(expandedParams, (p) => p !== expandedParams[expandedParams.length - 1] && !!(getCheckFlags(p) & 32768 /* RestParameter */)) ? signature.parameters : expandedParams).map((parameter) => symbolToParameterDeclaration(parameter, context, kind === 176 /* Constructor */)); const thisParameter = context.flags & 33554432 /* OmitThisParameter */ ? void 0 : tryGetThisParameterDeclaration(signature, context); if (thisParameter) { parameters.unshift(thisParameter); } - context.flags = flags; + restoreFlags(); const returnTypeNode = serializeReturnTypeForSignature(context, signature); let modifiers = options == null ? void 0 : options.modifiers; if (kind === 185 /* ConstructorType */ && signature.flags & 4 /* Abstract */) { - const flags2 = modifiersToFlags(modifiers); - modifiers = factory.createModifiersFromModifierFlags(flags2 | 64 /* Abstract */); + const flags = modifiersToFlags(modifiers); + modifiers = factory.createModifiersFromModifierFlags(flags | 64 /* Abstract */); } const node = kind === 179 /* CallSignature */ ? factory.createCallSignature(typeParameters, parameters, returnTypeNode) : kind === 180 /* ConstructSignature */ ? factory.createConstructSignature(typeParameters, parameters, returnTypeNode) : kind === 173 /* MethodSignature */ ? factory.createMethodSignature(modifiers, (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), options == null ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) : kind === 174 /* MethodDeclaration */ ? factory.createMethodDeclaration( modifiers, @@ -50670,13 +51045,13 @@ function createTypeChecker(host) { } } function typeParameterToDeclarationWithConstraint(type, context, constraintNode) { - const savedContextFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags &= ~512 /* WriteTypeParametersInQualifiedName */; const modifiers = factory.createModifiersFromModifierFlags(getTypeParameterModifiers(type)); const name = typeParameterToName(type, context); const defaultParameter = getDefaultFromTypeParameter(type); const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context); - context.flags = savedContextFlags; + restoreFlags(); return factory.createTypeParameterDeclaration(modifiers, name, constraintNode, defaultParameterNode); } function typeToTypeNodeHelperWithPossibleReusableTypeNode(type, typeNode, context) { @@ -50780,7 +51155,7 @@ function createTypeChecker(host) { function lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol) { let chain; const isTypeParameter = symbol.flags & 262144 /* TypeParameter */; - if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */) && !(context.flags & 134217728 /* DoNotIncludeSymbolChain */)) { + if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */) && !(context.internalFlags & 4 /* DoNotIncludeSymbolChain */)) { chain = Debug.checkDefined(getSymbolChain( symbol, meaning, @@ -50916,8 +51291,10 @@ function createTypeChecker(host) { } return getSourceFileOfNode(getNonAugmentationDeclaration(symbol)).fileName; } + const enclosingDeclaration = getOriginalNode(context.enclosingDeclaration); + const originalModuleSpecifier = canHaveModuleSpecifier(enclosingDeclaration) ? tryGetModuleSpecifierFromDeclaration(enclosingDeclaration) : void 0; const contextFile = context.enclosingFile; - const resolutionMode = overrideImportMode || (contextFile == null ? void 0 : contextFile.impliedNodeFormat); + const resolutionMode = overrideImportMode || originalModuleSpecifier && host.getModeForUsageLocation(contextFile, originalModuleSpecifier) || contextFile && host.getDefaultResolutionModeForFile(contextFile); const cacheKey = createModeAwareCacheKey(contextFile.path, resolutionMode); const links = getSymbolLinks(symbol); let specifier = links.specifierCache && links.specifierCache.get(cacheKey); @@ -51302,21 +51679,21 @@ function createTypeChecker(host) { } function serializeTypeForDeclaration(context, declaration, type, symbol) { var _a, _b; - const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration); + const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration); const enclosingDeclaration = context.enclosingDeclaration; - const oldFlags = context.flags; - if (declaration && hasInferredType(declaration) && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + const restoreFlags = saveRestoreFlags(context); + if (declaration && hasInferredType(declaration) && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeTypeOfDeclaration(declaration, context); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; - if (enclosingDeclaration && (!isErrorType(type) || context.flags & 1 /* AllowUnresolvedNames */)) { + context.internalFlags |= 2 /* NoSyntacticPrinter */; + if (enclosingDeclaration && (!isErrorType(type) || context.internalFlags & 8 /* AllowUnresolvedNames */)) { const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol); if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) { const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation); const addUndefined = addUndefinedForParameter || !!(symbol.flags & 4 /* Property */ && symbol.flags & 16777216 /* Optional */ && isOptionalDeclaration(declWithExistingAnnotation) && ((_a = symbol.links) == null ? void 0 : _a.mappedType) && containsNonMissingUndefinedType(type)); const result2 = !isTypePredicateNode(existing) && tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined); if (result2) { - context.flags = oldFlags; + restoreFlags(); return result2; } } @@ -51327,7 +51704,7 @@ function createTypeChecker(host) { const decl = declaration ?? symbol.valueDeclaration ?? ((_b = symbol.declarations) == null ? void 0 : _b[0]); const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0; const result = expressionOrTypeToTypeNode(context, expr, type, addUndefinedForParameter); - context.flags = oldFlags; + restoreFlags(); return result; } function typeNodeIsEquivalentToType(annotatedDeclaration, type, typeFromTypeNode) { @@ -51341,26 +51718,26 @@ function createTypeChecker(host) { } function serializeReturnTypeForSignature(context, signature) { const suppressAny = context.flags & 256 /* SuppressAnyReturnType */; - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); if (suppressAny) context.flags &= ~256 /* SuppressAnyReturnType */; let returnTypeNode; const returnType = getReturnTypeOfSignature(signature); if (returnType && !(suppressAny && isTypeAny(returnType))) { - if (signature.declaration && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + if (signature.declaration && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeReturnTypeForSignature(signature.declaration, context); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; + context.internalFlags |= 2 /* NoSyntacticPrinter */; returnTypeNode = serializeReturnTypeForSignatureWorker(context, signature); } else if (!suppressAny) { returnTypeNode = factory.createKeywordTypeNode(133 /* AnyKeyword */); } - context.flags = flags; + restoreFlags(); return returnTypeNode; } function serializeReturnTypeForSignatureWorker(context, signature) { const typePredicate = getTypePredicateOfSignature(signature); const type = getReturnTypeOfSignature(signature); - if (context.enclosingDeclaration && (!isErrorType(type) || context.flags & 1 /* AllowUnresolvedNames */) && signature.declaration && !nodeIsSynthesized(signature.declaration)) { + if (context.enclosingDeclaration && (!isErrorType(type) || context.internalFlags & 8 /* AllowUnresolvedNames */) && signature.declaration && !nodeIsSynthesized(signature.declaration)) { const annotation = getNonlocalEffectiveReturnTypeAnnotationNode(signature.declaration); if (annotation) { const result = tryReuseExistingTypeNode(context, annotation, type, context.enclosingDeclaration); @@ -51434,6 +51811,8 @@ function createTypeChecker(host) { } introducesError = true; return { introducesError, node, sym }; + } else { + sym = symAtLocation; } } if (sym) { @@ -51860,7 +52239,7 @@ function createTypeChecker(host) { if (!hasDynamicName(node)) { return visitEachChild2(node, visitExistingNodeTreeSymbols); } - if (!(context.flags & 1 /* AllowUnresolvedNames */ && isEntityNameExpression(node.name.expression) && checkComputedPropertyName(node.name).flags & 1 /* Any */)) { + if (!(context.internalFlags & 8 /* AllowUnresolvedNames */ && isEntityNameExpression(node.name.expression) && checkComputedPropertyName(node.name).flags & 1 /* Any */)) { return void 0; } } @@ -52211,9 +52590,10 @@ function createTypeChecker(host) { if (index >= 0) { const exportDecl = statements[index]; const replacements = mapDefined(exportDecl.exportClause.elements, (e) => { - if (!e.propertyName) { + if (!e.propertyName && e.name.kind !== 11 /* StringLiteral */) { + const name = e.name; const indices = indicesOf(statements); - const associatedIndices = filter(indices, (i) => nodeHasName(statements[i], e.name)); + const associatedIndices = filter(indices, (i) => nodeHasName(statements[i], name)); if (length(associatedIndices) && every(associatedIndices, (i) => canHaveExportModifier(statements[i]))) { for (const index2 of associatedIndices) { statements[index2] = addExportModifier(statements[index2]); @@ -52511,7 +52891,7 @@ function createTypeChecker(host) { const typeParamDecls = map(typeParams, (p) => typeParameterToDeclaration(p, context)); const jsdocAliasDecl = (_a2 = symbol.declarations) == null ? void 0 : _a2.find(isJSDocTypeAlias); const commentText = getTextOfJSDocComment(jsdocAliasDecl ? jsdocAliasDecl.comment || jsdocAliasDecl.parent.comment : void 0); - const oldFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 8388608 /* InTypeAlias */; const oldEnclosingDecl = context.enclosingDeclaration; context.enclosingDeclaration = jsdocAliasDecl; @@ -52535,7 +52915,7 @@ function createTypeChecker(host) { ), modifierFlags ); - context.flags = oldFlags; + restoreFlags(); context.enclosingDeclaration = oldEnclosingDecl; } function serializeInterface(symbol, symbolName2, modifierFlags) { @@ -52847,7 +53227,7 @@ function createTypeChecker(host) { function getSomeTargetNameFromDeclarations(declarations) { return firstDefined(declarations, (d) => { if (isImportSpecifier(d) || isExportSpecifier(d)) { - return idText(d.propertyName || d.name); + return moduleExportNameTextUnescaped(d.propertyName || d.name); } if (isBinaryExpression(d) || isExportAssignment(d)) { const expression = isExportAssignment(d) ? d.expression : d.right; @@ -52865,7 +53245,7 @@ function createTypeChecker(host) { }); } function serializeAsAlias(symbol, localName, modifierFlags) { - var _a2, _b, _c, _d, _e, _f; + var _a2, _b, _c, _d, _e; const node = getDeclarationOfAliasSymbol(symbol); if (!node) return Debug.fail(); const target = getMergedSymbol(getTargetOfAliasDeclaration( @@ -53063,8 +53443,11 @@ function createTypeChecker(host) { } case 281 /* ExportSpecifier */: const specifier = node.parent.parent.moduleSpecifier; - if (specifier && ((_f = node.propertyName) == null ? void 0 : _f.escapedText) === "default" /* Default */) { - verbatimTargetName = "default" /* Default */; + if (specifier) { + const propertyName = node.propertyName; + if (propertyName && moduleExportNameIsDefault(propertyName)) { + verbatimTargetName = "default" /* Default */; + } } serializeExportSpecifier( unescapeLeadingUnderscores(symbol.escapedName), @@ -53541,10 +53924,10 @@ function createTypeChecker(host) { } function getNameCandidateWorker(symbol, localName) { if (localName === "default" /* Default */ || localName === "__class" /* Class */ || localName === "__function" /* Function */) { - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 16777216 /* InInitialEntityName */; const nameCandidate = getNameOfSymbolAsWritten(symbol, context); - context.flags = flags; + restoreFlags(); localName = nameCandidate.length > 0 && isSingleOrDoubleQuote(nameCandidate.charCodeAt(0)) ? stripQuotes(nameCandidate) : nameCandidate; } if (localName === "default" /* Default */) { @@ -53552,7 +53935,7 @@ function createTypeChecker(host) { } else if (localName === "export=" /* ExportEquals */) { localName = "_exports"; } - localName = isIdentifierText(localName, languageVersion) && !isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-zA-Z0-9]/g, "_"); + localName = isIdentifierText(localName, languageVersion) && !isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-z0-9]/gi, "_"); return localName; } function getInternalSymbolName(symbol, localName) { @@ -53777,7 +54160,7 @@ function createTypeChecker(host) { } function collectLinkedAliases(node, setVisibility) { let exportSymbol; - if (node.parent && node.parent.kind === 277 /* ExportAssignment */) { + if (node.kind !== 11 /* StringLiteral */ && node.parent && node.parent.kind === 277 /* ExportAssignment */) { exportSymbol = resolveName( node, node, @@ -54062,6 +54445,7 @@ function createTypeChecker(host) { } else if (strictNullChecks && pattern.parent.initializer && !hasTypeFacts(getTypeOfInitializer(pattern.parent.initializer), 65536 /* EQUndefined */)) { parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */); } + const accessFlags = 32 /* ExpressionPosition */ | (noTupleBoundsCheck || hasDefaultValue(declaration) ? 16 /* AllowMissing */ : 0); let type; if (pattern.kind === 206 /* ObjectBindingPattern */) { if (declaration.dotDotDotToken) { @@ -54080,7 +54464,7 @@ function createTypeChecker(host) { } else { const name = declaration.propertyName || declaration.name; const indexType = getLiteralTypeFromPropertyName(name); - const declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name); + const declaredType = getIndexedAccessType(parentType, indexType, accessFlags, name); type = getFlowTypeOfDestructuring(declaration, declaredType); } } else { @@ -54091,7 +54475,6 @@ function createTypeChecker(host) { type = everyType(baseConstraint, isTupleType) ? mapType(baseConstraint, (t) => sliceTupleType(t, index)) : createArrayType(elementType); } else if (isArrayLikeType(parentType)) { const indexType = getNumberLiteralType(index); - const accessFlags = 32 /* ExpressionPosition */ | (noTupleBoundsCheck || hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0); const declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType; type = getFlowTypeOfDestructuring(declaration, declaredType); } else { @@ -54577,7 +54960,7 @@ function createTypeChecker(host) { /*reportErrors*/ false ) : unknownType; - return addOptionality(widenTypeInferredFromInitializer(element, checkDeclarationInitializer(element, reportErrors2 ? 0 /* Normal */ : 1 /* Contextual */, contextualType))); + return addOptionality(widenTypeInferredFromInitializer(element, checkDeclarationInitializer(element, 0 /* Normal */, contextualType))); } if (isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors2); @@ -54648,7 +55031,10 @@ function createTypeChecker(host) { return result; } function getTypeFromBindingPattern(pattern, includePatternInType = false, reportErrors2 = false) { - return pattern.kind === 206 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2); + if (includePatternInType) contextualBindingPatterns.push(pattern); + const result = pattern.kind === 206 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2); + if (includePatternInType) contextualBindingPatterns.pop(); + return result; } function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors2) { return widenTypeForVariableLikeDeclaration(getTypeForVariableLikeDeclaration( @@ -54729,18 +55115,18 @@ function createTypeChecker(host) { } return false; } - function getTypeOfVariableOrParameterOrProperty(symbol, checkMode) { + function getTypeOfVariableOrParameterOrProperty(symbol) { const links = getSymbolLinks(symbol); if (!links.type) { - const type = getTypeOfVariableOrParameterOrPropertyWorker(symbol, checkMode); - if (!links.type && !isParameterOfContextSensitiveSignature(symbol) && !checkMode) { + const type = getTypeOfVariableOrParameterOrPropertyWorker(symbol); + if (!links.type && !isParameterOfContextSensitiveSignature(symbol)) { links.type = type; } return type; } return links.type; } - function getTypeOfVariableOrParameterOrPropertyWorker(symbol, checkMode) { + function getTypeOfVariableOrParameterOrPropertyWorker(symbol) { if (symbol.flags & 4194304 /* Prototype */) { return getTypeOfPrototypeProperty(symbol); } @@ -54775,9 +55161,6 @@ function createTypeChecker(host) { if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { return getTypeOfFuncClassEnumModule(symbol); } - if (isBindingElement(declaration) && checkMode === 1 /* Contextual */) { - return errorType; - } return reportCircularityError(symbol); } let type; @@ -54815,9 +55198,6 @@ function createTypeChecker(host) { if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { return getTypeOfFuncClassEnumModule(symbol); } - if (isBindingElement(declaration) && checkMode === 1 /* Contextual */) { - return type; - } return reportCircularityError(symbol); } return type; @@ -55046,7 +55426,7 @@ function createTypeChecker(host) { } return getTypeOfSymbol(symbol); } - function getTypeOfSymbol(symbol, checkMode) { + function getTypeOfSymbol(symbol) { const checkFlags = getCheckFlags(symbol); if (checkFlags & 65536 /* DeferredType */) { return getTypeOfSymbolWithDeferredType(symbol); @@ -55061,7 +55441,7 @@ function createTypeChecker(host) { return getTypeOfReverseMappedSymbol(symbol); } if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { - return getTypeOfVariableOrParameterOrProperty(symbol, checkMode); + return getTypeOfVariableOrParameterOrProperty(symbol); } if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { return getTypeOfFuncClassEnumModule(symbol); @@ -55080,6 +55460,17 @@ function createTypeChecker(host) { function getNonMissingTypeOfSymbol(symbol) { return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */)); } + function isReferenceToSomeType(type, targets) { + if (type === void 0 || (getObjectFlags(type) & 4 /* Reference */) === 0) { + return false; + } + for (const target of targets) { + if (type.target === target) { + return true; + } + } + return false; + } function isReferenceToType(type, target) { return type !== void 0 && target !== void 0 && (getObjectFlags(type) & 4 /* Reference */) !== 0 && type.target === target; } @@ -55119,7 +55510,8 @@ function createTypeChecker(host) { if (!node) { return void 0; } - switch (node.kind) { + const kind = node.kind; + switch (kind) { case 263 /* ClassDeclaration */: case 231 /* ClassExpression */: case 264 /* InterfaceDeclaration */: @@ -55141,13 +55533,19 @@ function createTypeChecker(host) { case 200 /* MappedType */: case 194 /* ConditionalType */: { const outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); - if (node.kind === 200 /* MappedType */) { + if ((kind === 218 /* FunctionExpression */ || kind === 219 /* ArrowFunction */ || isObjectLiteralMethod(node)) && isContextSensitive(node)) { + const signature = firstOrUndefined(getSignaturesOfType(getTypeOfSymbol(getSymbolOfDeclaration(node)), 0 /* Call */)); + if (signature && signature.typeParameters) { + return [...outerTypeParameters || emptyArray, ...signature.typeParameters]; + } + } + if (kind === 200 /* MappedType */) { return append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter))); - } else if (node.kind === 194 /* ConditionalType */) { + } else if (kind === 194 /* ConditionalType */) { return concatenate(outerTypeParameters, getInferTypeParameters(node)); } const outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, getEffectiveTypeParameterDeclarations(node)); - const thisType = includeThisTypes && (node.kind === 263 /* ClassDeclaration */ || node.kind === 231 /* ClassExpression */ || node.kind === 264 /* InterfaceDeclaration */ || isJSConstructor(node)) && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node)).thisType; + const thisType = includeThisTypes && (kind === 263 /* ClassDeclaration */ || kind === 231 /* ClassExpression */ || kind === 264 /* InterfaceDeclaration */ || isJSConstructor(node)) && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node)).thisType; return thisType ? append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters; } case 341 /* JSDocParameterTag */: @@ -55501,6 +55899,9 @@ function createTypeChecker(host) { links.instantiations = /* @__PURE__ */ new Map(); links.instantiations.set(getTypeListId(typeParameters), type); } + if (type === intrinsicMarkerType && symbol.escapedName === "BuiltinIteratorReturn") { + type = getBuiltinIteratorReturnType(); + } } else { type = errorType; if (declaration.kind === 340 /* JSDocEnumTag */) { @@ -55965,18 +56366,18 @@ function createTypeChecker(host) { function getExpandedParameters(sig, skipUnionExpanding) { if (signatureHasRestParameter(sig)) { const restIndex = sig.parameters.length - 1; - const restName = sig.parameters[restIndex].escapedName; - const restType = getTypeOfSymbol(sig.parameters[restIndex]); + const restSymbol = sig.parameters[restIndex]; + const restType = getTypeOfSymbol(restSymbol); if (isTupleType(restType)) { - return [expandSignatureParametersWithTupleMembers(restType, restIndex, restName)]; + return [expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol)]; } else if (!skipUnionExpanding && restType.flags & 1048576 /* Union */ && every(restType.types, isTupleType)) { - return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restName)); + return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restSymbol)); } } return [sig.parameters]; - function expandSignatureParametersWithTupleMembers(restType, restIndex, restName) { + function expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol) { const elementTypes = getTypeArguments(restType); - const associatedNames = getUniqAssociatedNamesFromTupleType(restType, restName); + const associatedNames = getUniqAssociatedNamesFromTupleType(restType, restSymbol); const restParams = map(elementTypes, (t, i) => { const name = associatedNames && associatedNames[i] ? associatedNames[i] : getParameterNameAtPosition(sig, restIndex + i, restType); const flags = restType.target.elementFlags[i]; @@ -55987,19 +56388,29 @@ function createTypeChecker(host) { }); return concatenate(sig.parameters.slice(0, restIndex), restParams); } - function getUniqAssociatedNamesFromTupleType(type, restName) { - const associatedNamesMap = /* @__PURE__ */ new Map(); - return map(type.target.labeledElementDeclarations, (labeledElement, i) => { - const name = getTupleElementLabel(labeledElement, i, restName); - const prevCounter = associatedNamesMap.get(name); - if (prevCounter === void 0) { - associatedNamesMap.set(name, 1); - return name; - } else { - associatedNamesMap.set(name, prevCounter + 1); - return `${name}_${prevCounter}`; + function getUniqAssociatedNamesFromTupleType(type, restSymbol) { + const names = map(type.target.labeledElementDeclarations, (labeledElement, i) => getTupleElementLabel(labeledElement, i, type.target.elementFlags[i], restSymbol)); + if (names) { + const duplicates = []; + const uniqueNames = /* @__PURE__ */ new Set(); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + if (!tryAddToSet(uniqueNames, name)) { + duplicates.push(i); + } } - }); + const counters = /* @__PURE__ */ new Map(); + for (const i of duplicates) { + let counter = counters.get(names[i]) ?? 1; + let name; + while (!tryAddToSet(uniqueNames, name = `${names[i]}_${counter}`)) { + counter++; + } + names[i] = name; + counters.set(names[i], counter + 1); + } + } + return names; } } function getDefaultConstructSignatures(classType) { @@ -57946,8 +58357,11 @@ function createTypeChecker(host) { true ); } + function getTypeParametersForMapper(signature) { + return sameMap(signature.typeParameters, (tp) => tp.mapper ? instantiateType(tp, tp.mapper) : tp); + } function createSignatureTypeMapper(signature, typeArguments) { - return createTypeMapper(sameMap(signature.typeParameters, (tp) => tp.mapper ? instantiateType(tp, tp.mapper) : tp), typeArguments); + return createTypeMapper(getTypeParametersForMapper(signature), typeArguments); } function getErasedSignature(signature) { return signature.typeParameters ? signature.erasedSignatureCache || (signature.erasedSignatureCache = createErasedSignature(signature)) : signature; @@ -58208,14 +58622,14 @@ function createTypeChecker(host) { var _a, _b; if (!type.resolvedTypeArguments) { if (!pushTypeResolution(type, 5 /* ResolvedTypeArguments */)) { - return ((_a = type.target.localTypeParameters) == null ? void 0 : _a.map(() => errorType)) || emptyArray; + return concatenate(type.target.outerTypeParameters, (_a = type.target.localTypeParameters) == null ? void 0 : _a.map(() => errorType)) || emptyArray; } const node = type.node; const typeArguments = !node ? emptyArray : node.kind === 183 /* TypeReference */ ? concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) : node.kind === 188 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode); if (popTypeResolution()) { type.resolvedTypeArguments ?? (type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments); } else { - type.resolvedTypeArguments ?? (type.resolvedTypeArguments = ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray); + type.resolvedTypeArguments ?? (type.resolvedTypeArguments = concatenate(type.target.outerTypeParameters, ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray)); error( type.node || currentNode, type.target.symbol ? Diagnostics.Type_arguments_for_0_circularly_reference_themselves : Diagnostics.Tuple_type_arguments_circularly_reference_themselves, @@ -58666,6 +59080,18 @@ function createTypeChecker(host) { const symbol = getGlobalTypeSymbol(name, reportErrors2); return symbol || reportErrors2 ? getTypeOfGlobalSymbol(symbol, arity) : void 0; } + function getGlobalBuiltinTypes(typeNames, arity) { + let types; + for (const typeName of typeNames) { + types = append(types, getGlobalType( + typeName, + arity, + /*reportErrors*/ + false + )); + } + return types ?? emptyArray; + } function getGlobalTypedPropertyDescriptorType() { return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType( "TypedPropertyDescriptor", @@ -58768,7 +59194,7 @@ function createTypeChecker(host) { return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType( "AsyncIterable", /*arity*/ - 1, + 3, reportErrors2 )) || emptyGenericType; } @@ -58784,7 +59210,18 @@ function createTypeChecker(host) { return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType( "AsyncIterableIterator", /*arity*/ - 1, + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalBuiltinAsyncIteratorTypes() { + return deferredGlobalBuiltinAsyncIteratorTypes ?? (deferredGlobalBuiltinAsyncIteratorTypes = getGlobalBuiltinTypes(["ReadableStreamAsyncIterator"], 1)); + } + function getGlobalAsyncIteratorObjectType(reportErrors2) { + return deferredGlobalAsyncIteratorObjectType || (deferredGlobalAsyncIteratorObjectType = getGlobalType( + "AsyncIteratorObject", + /*arity*/ + 3, reportErrors2 )) || emptyGenericType; } @@ -58800,7 +59237,7 @@ function createTypeChecker(host) { return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType( "Iterable", /*arity*/ - 1, + 3, reportErrors2 )) || emptyGenericType; } @@ -58816,7 +59253,21 @@ function createTypeChecker(host) { return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType( "IterableIterator", /*arity*/ - 1, + 3, + reportErrors2 + )) || emptyGenericType; + } + function getBuiltinIteratorReturnType() { + return strictBuiltinIteratorReturn ? undefinedType : anyType; + } + function getGlobalBuiltinIteratorTypes() { + return deferredGlobalBuiltinIteratorTypes ?? (deferredGlobalBuiltinIteratorTypes = getGlobalBuiltinTypes(["ArrayIterator", "MapIterator", "SetIterator", "StringIterator"], 1)); + } + function getGlobalIteratorObjectType(reportErrors2) { + return deferredGlobalIteratorObjectType || (deferredGlobalIteratorObjectType = getGlobalType( + "IteratorObject", + /*arity*/ + 3, reportErrors2 )) || emptyGenericType; } @@ -58998,7 +59449,7 @@ function createTypeChecker(host) { return createTypeFromGenericGlobalType(getGlobalIterableType( /*reportErrors*/ true - ), [iteratedType]); + ), [iteratedType, voidType, undefinedType]); } function createArrayType(elementType, readonly) { return createTypeFromGenericGlobalType(readonly ? globalReadonlyArrayType : globalArrayType, [elementType]); @@ -59662,6 +60113,12 @@ function createTypeChecker(host) { function eachUnionContains(unionTypes2, type) { for (const u of unionTypes2) { if (!containsType(u.types, type)) { + if (type === missingType) { + return containsType(u.types, undefinedType); + } + if (type === undefinedType) { + return containsType(u.types, missingType); + } const primitive = type.flags & 128 /* StringLiteral */ ? stringType : type.flags & (32 /* Enum */ | 256 /* NumberLiteral */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : void 0; if (!primitive || !containsType(u.types, primitive)) { return false; @@ -59718,6 +60175,13 @@ function createTypeChecker(host) { for (const t of u.types) { if (insertType(checked, t)) { if (eachUnionContains(unionTypes2, t)) { + if (t === undefinedType && result.length && result[0] === missingType) { + continue; + } + if (t === missingType && result.length && result[0] === undefinedType) { + result[0] = missingType; + continue; + } insertType(result, t); } } @@ -59802,7 +60266,7 @@ function createTypeChecker(host) { } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && (t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) { removeFromEach(typeSet, 65536 /* Null */); result = getUnionType([getIntersectionType(typeSet, flags), nullType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); - } else if (typeSet.length >= 4) { + } else if (typeSet.length >= 3 && types.length > 2) { const middle = Math.floor(typeSet.length / 2); result = getIntersectionType([getIntersectionType(typeSet.slice(0, middle), flags), getIntersectionType(typeSet.slice(middle), flags)], flags, aliasSymbol, aliasTypeArguments); } else { @@ -60198,7 +60662,7 @@ function createTypeChecker(host) { } if (everyType(objectType, isTupleType) && isNumericLiteralName(propName)) { const index = +propName; - if (accessNode && everyType(objectType, (t) => !t.target.hasRestElement) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) { + if (accessNode && everyType(objectType, (t) => !(t.target.combinedFlags & 12 /* Variable */)) && !(accessFlags & 16 /* AllowMissing */)) { const indexNode = getIndexNodeForAccessExpression(accessNode); if (isTupleType(objectType)) { if (index < 0) { @@ -60337,17 +60801,21 @@ function createTypeChecker(host) { return void 0; } } + if (accessFlags & 16 /* AllowMissing */ && isObjectLiteralType(objectType)) { + return undefinedType; + } if (isJSLiteralType(objectType)) { return anyType; } if (accessNode) { const indexNode = getIndexNodeForAccessExpression(accessNode); - if (indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + if (indexNode.kind !== 10 /* BigIntLiteral */ && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { error(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType)); } else if (indexType.flags & (4 /* String */ | 8 /* Number */)) { error(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); } else { - error(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); + const typeString = indexNode.kind === 10 /* BigIntLiteral */ ? "bigint" : typeToString(indexType); + error(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeString); } } if (isTypeAny(indexType)) { @@ -62608,7 +63076,7 @@ function createTypeChecker(host) { } const id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol); const entry = enumRelation.get(id); - if (entry !== void 0 && !(!(entry & 4 /* Reported */) && entry & 2 /* Failed */ && errorReporter)) { + if (entry !== void 0 && !(entry & 2 /* Failed */ && errorReporter)) { return !!(entry & 1 /* Succeeded */); } const targetEnumType = getTypeOfSymbol(targetSymbol); @@ -62623,10 +63091,8 @@ function createTypeChecker(host) { void 0, 64 /* UseFullyQualifiedType */ )); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); - } else { - enumRelation.set(id, 2 /* Failed */); } + enumRelation.set(id, 2 /* Failed */); return false; } const sourceValue = getEnumMemberValue(getDeclarationOfKind(sourceProperty, 306 /* EnumMember */)).value; @@ -62635,26 +63101,22 @@ function createTypeChecker(host) { const sourceIsString = typeof sourceValue === "string"; const targetIsString = typeof targetValue === "string"; if (sourceValue !== void 0 && targetValue !== void 0) { - if (!errorReporter) { - enumRelation.set(id, 2 /* Failed */); - } else { + if (errorReporter) { const escapedSource = sourceIsString ? `"${escapeString(sourceValue)}"` : sourceValue; const escapedTarget = targetIsString ? `"${escapeString(targetValue)}"` : targetValue; errorReporter(Diagnostics.Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given, symbolName(targetSymbol), symbolName(targetProperty), escapedTarget, escapedSource); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); } + enumRelation.set(id, 2 /* Failed */); return false; } if (sourceIsString || targetIsString) { - if (!errorReporter) { - enumRelation.set(id, 2 /* Failed */); - } else { + if (errorReporter) { const knownStringValue = sourceValue ?? targetValue; Debug.assert(typeof knownStringValue === "string"); const escapedValue = `"${escapeString(knownStringValue)}"`; errorReporter(Diagnostics.One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value, symbolName(targetSymbol), symbolName(targetProperty), escapedValue); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); } + enumRelation.set(id, 2 /* Failed */); return false; } } @@ -62812,7 +63274,7 @@ function createTypeChecker(host) { /*ignoreConstraints*/ false ); - relation.set(id, 4 /* Reported */ | 2 /* Failed */); + relation.set(id, 2 /* Failed */ | (relationCount <= 0 ? 32 /* ComplexityOverflow */ : 64 /* StackDepthOverflow */)); (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "checkTypeRelatedTo_DepthLimit", { sourceId: source.id, targetId: target.id, depth: sourceDepth, targetDepth }); const message = relationCount <= 0 ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; const diag2 = error(errorNode || currentNode, message, typeToString(source), typeToString(target)); @@ -63665,7 +64127,7 @@ function createTypeChecker(host) { ); const entry = relation.get(id); if (entry !== void 0) { - if (reportErrors2 && entry & 2 /* Failed */ && !(entry & 4 /* Reported */)) { + if (reportErrors2 && entry & 2 /* Failed */ && !(entry & 96 /* Overflow */)) { } else { if (outofbandVarianceMarkerHandler) { const saved = entry & 24 /* ReportsMask */; @@ -63676,6 +64138,11 @@ function createTypeChecker(host) { instantiateType(source2, reportUnreliableMapper); } } + if (reportErrors2 && entry & 96 /* Overflow */) { + const message = entry & 32 /* ComplexityOverflow */ ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; + reportError(message, typeToString(source2), typeToString(target2)); + overrideNextErrorInfo++; + } return entry & 1 /* Succeeded */ ? -1 /* True */ : 0 /* False */; } } @@ -63773,7 +64240,7 @@ function createTypeChecker(host) { } } } else { - relation.set(id, (reportErrors2 ? 4 /* Reported */ : 0) | 2 /* Failed */ | propagatingVarianceFlags); + relation.set(id, 2 /* Failed */ | propagatingVarianceFlags); relationCount--; resetMaybeStack( /*markAllAsSucceeded*/ @@ -64666,7 +65133,7 @@ function createTypeChecker(host) { const sourceArity = getTypeReferenceArity(source2); const targetArity = getTypeReferenceArity(target2); const sourceRestFlag = isTupleType(source2) ? source2.target.combinedFlags & 4 /* Rest */ : 4 /* Rest */; - const targetRestFlag = target2.target.combinedFlags & 4 /* Rest */; + const targetHasRestElement = !!(target2.target.combinedFlags & 12 /* Variable */); const sourceMinLength = isTupleType(source2) ? source2.target.minLength : 0; const targetMinLength = target2.target.minLength; if (!sourceRestFlag && sourceArity < targetMinLength) { @@ -64675,13 +65142,13 @@ function createTypeChecker(host) { } return 0 /* False */; } - if (!targetRestFlag && targetArity < sourceMinLength) { + if (!targetHasRestElement && targetArity < sourceMinLength) { if (reportErrors2) { reportError(Diagnostics.Source_has_0_element_s_but_target_allows_only_1, sourceMinLength, targetArity); } return 0 /* False */; } - if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) { + if (!targetHasRestElement && (sourceRestFlag || targetArity < sourceArity)) { if (reportErrors2) { if (sourceMinLength < targetMinLength) { reportError(Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength); @@ -64695,7 +65162,6 @@ function createTypeChecker(host) { const targetTypeArguments = getTypeArguments(target2); const targetStartCount = getStartElementCount(target2.target, 11 /* NonRest */); const targetEndCount = getEndElementCount(target2.target, 11 /* NonRest */); - const targetHasRestElement = target2.target.hasRestElement; let canExcludeDiscriminants = !!excludedProperties; for (let sourcePosition = 0; sourcePosition < sourceArity; sourcePosition++) { const sourceFlags = isTupleType(source2) ? source2.target.elementFlags[sourcePosition] : 4 /* Rest */; @@ -65155,7 +65621,7 @@ function createTypeChecker(host) { for (let i = 0; i < types.length; i++) { if (include[i]) { const targetType = getTypeOfPropertyOrIndexSignatureOfType(types[i], propertyName); - if (targetType && related(getDiscriminatingType(), targetType)) { + if (targetType && someType(getDiscriminatingType(), (t) => !!related(t, targetType))) { matched = true; } else { include[i] = 3 /* Maybe */; @@ -65935,6 +66401,7 @@ function createTypeChecker(host) { return type; } function reportWideningErrorsInType(type) { + var _a; let errorReported = false; if (getObjectFlags(type) & 65536 /* ContainsWideningType */) { if (type.flags & 1048576 /* Union */) { @@ -65942,27 +66409,28 @@ function createTypeChecker(host) { errorReported = true; } else { for (const t of type.types) { - if (reportWideningErrorsInType(t)) { - errorReported = true; - } + errorReported || (errorReported = reportWideningErrorsInType(t)); } } - } - if (isArrayOrTupleType(type)) { + } else if (isArrayOrTupleType(type)) { for (const t of getTypeArguments(type)) { - if (reportWideningErrorsInType(t)) { - errorReported = true; - } + errorReported || (errorReported = reportWideningErrorsInType(t)); } - } - if (isObjectLiteralType(type)) { + } else if (isObjectLiteralType(type)) { for (const p of getPropertiesOfObjectType(type)) { const t = getTypeOfSymbol(p); if (getObjectFlags(t) & 65536 /* ContainsWideningType */) { - if (!reportWideningErrorsInType(t)) { - error(p.valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); + errorReported = reportWideningErrorsInType(t); + if (!errorReported) { + const valueDeclaration = (_a = p.declarations) == null ? void 0 : _a.find((d) => { + var _a2; + return ((_a2 = d.symbol.valueDeclaration) == null ? void 0 : _a2.parent) === type.symbol.valueDeclaration; + }); + if (valueDeclaration) { + error(valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); + errorReported = true; + } } - errorReported = true; } } } @@ -66341,7 +66809,7 @@ function createTypeChecker(host) { return firstOrUndefinedIterator(getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties)); } function tupleTypesDefinitelyUnrelated(source, target) { - return !(target.target.combinedFlags & 8 /* Variadic */) && target.target.minLength > source.target.minLength || !target.target.hasRestElement && (source.target.hasRestElement || target.target.fixedLength < source.target.fixedLength); + return !(target.target.combinedFlags & 8 /* Variadic */) && target.target.minLength > source.target.minLength || !(target.target.combinedFlags & 12 /* Variable */) && (!!(source.target.combinedFlags & 12 /* Variable */) || target.target.fixedLength < source.target.fixedLength); } function typesDefinitelyUnrelated(source, target) { return isTupleType(source) && isTupleType(target) ? tupleTypesDefinitelyUnrelated(source, target) : !!getUnmatchedProperty( @@ -66430,7 +66898,7 @@ function createTypeChecker(host) { return false; } function inferTypesFromTemplateLiteralType(source, target) { - return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arraysEqual(source.texts, target.texts) ? map(source.types, (s, i) => { + return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arrayIsEqualTo(source.texts, target.texts) ? map(source.types, (s, i) => { return isTypeAssignableTo(getBaseConstraintOrType(s), getBaseConstraintOrType(target.types[i])) ? s : getStringLikeTypeForType(s); }) : inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) : void 0; } @@ -66959,7 +67427,7 @@ function createTypeChecker(host) { return; } const startLength = isTupleType(source) ? Math.min(source.target.fixedLength, target.target.fixedLength) : 0; - const endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3 /* Fixed */) : 0, target.target.hasRestElement ? getEndElementCount(target.target, 3 /* Fixed */) : 0); + const endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3 /* Fixed */) : 0, target.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(target.target, 3 /* Fixed */) : 0); for (let i = 0; i < startLength; i++) { inferFromTypes(getTypeArguments(source)[i], elementTypes[i]); } @@ -66980,7 +67448,7 @@ function createTypeChecker(host) { } else if (elementFlags[startLength] & 8 /* Variadic */ && elementFlags[startLength + 1] & 4 /* Rest */) { const param = (_a = getInferenceInfoForType(elementTypes[startLength])) == null ? void 0 : _a.typeParameter; const constraint = param && getBaseConstraintOfType(param); - if (constraint && isTupleType(constraint) && !constraint.target.hasRestElement) { + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { const impliedArity = constraint.target.fixedLength; inferFromTypes(sliceTupleType(source, startLength, sourceArity - (startLength + impliedArity)), elementTypes[startLength]); inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength), elementTypes[startLength + 1]); @@ -66988,7 +67456,7 @@ function createTypeChecker(host) { } else if (elementFlags[startLength] & 4 /* Rest */ && elementFlags[startLength + 1] & 8 /* Variadic */) { const param = (_b = getInferenceInfoForType(elementTypes[startLength + 1])) == null ? void 0 : _b.typeParameter; const constraint = param && getBaseConstraintOfType(param); - if (constraint && isTupleType(constraint) && !constraint.target.hasRestElement) { + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { const impliedArity = constraint.target.fixedLength; const endIndex = sourceArity - getEndElementCount(target.target, 3 /* Fixed */); const startIndex = endIndex - impliedArity; @@ -67140,7 +67608,7 @@ function createTypeChecker(host) { const inferredCovariantType = inference.candidates ? getCovariantInference(inference, context.signature) : void 0; const inferredContravariantType = inference.contraCandidates ? getContravariantInference(inference) : void 0; if (inferredCovariantType || inferredContravariantType) { - const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & 131072 /* Never */) && some(inference.contraCandidates, (t) => isTypeSubtypeOf(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeSubtypeOf(t, inferredCovariantType)))); + const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & (131072 /* Never */ | 1 /* Any */)) && some(inference.contraCandidates, (t) => isTypeAssignableTo(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeAssignableTo(t, inferredCovariantType)))); inferredType = preferCovariantType ? inferredCovariantType : inferredContravariantType; fallbackType = preferCovariantType ? inferredContravariantType : inferredCovariantType; } else if (context.flags & 1 /* NoDefault */) { @@ -67527,6 +67995,9 @@ function createTypeChecker(host) { return isTypeAssignableTo(assignedType, reducedType) ? reducedType : declaredType; } function isFunctionObjectType(type) { + if (getObjectFlags(type) & 256 /* EvolvingArray */) { + return false; + } const resolved = resolveStructuredTypeMembers(type); return !!(resolved.callSignatures.length || resolved.constructSignatures.length || resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType)); } @@ -68594,7 +69065,7 @@ function createTypeChecker(host) { return getEvolvingArrayType(getUnionType(map(types, getElementTypeOfEvolvingArrayType))); } const result = recombineUnknownType(getUnionType(sameMap(types, finalizeEvolvingArrayType), subtypeReduction)); - if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arraysEqual(result.types, declaredType.types)) { + if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arrayIsEqualTo(result.types, declaredType.types)) { return declaredType; } return result; @@ -69354,9 +69825,10 @@ function createTypeChecker(host) { return; case 281 /* ExportSpecifier */: const exportDeclaration = node.parent.parent; - if (!node.isTypeOnly && !exportDeclaration.isTypeOnly && !exportDeclaration.moduleSpecifier) { + const name = node.propertyName || node.name; + if (!node.isTypeOnly && !exportDeclaration.isTypeOnly && !exportDeclaration.moduleSpecifier && name.kind !== 11 /* StringLiteral */) { const symbol = resolveEntityName( - node.propertyName || node.name, + name, 111551 /* Value */, /*ignoreErrors*/ true, @@ -69650,6 +70122,9 @@ function createTypeChecker(host) { function markExportSpecifierAliasReferenced(location) { if (!location.parent.parent.moduleSpecifier && !location.isTypeOnly && !location.parent.parent.isTypeOnly) { const exportedName = location.propertyName || location.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } const symbol = resolveName( exportedName, exportedName.escapedText, @@ -69664,7 +70139,7 @@ function createTypeChecker(host) { const target = symbol && (symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol); if (!target || getSymbolFlags(target) & 111551 /* Value */) { markExportAsReferenced(location); - markIdentifierAliasReferenced(location.propertyName || location.name); + markIdentifierAliasReferenced(exportedName); } } return; @@ -69804,9 +70279,9 @@ function createTypeChecker(host) { ); } } - function getNarrowedTypeOfSymbol(symbol, location, checkMode) { + function getNarrowedTypeOfSymbol(symbol, location) { var _a; - const type = getTypeOfSymbol(symbol, checkMode); + const type = getTypeOfSymbol(symbol); const declaration = symbol.valueDeclaration; if (declaration) { if (isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) { @@ -69945,7 +70420,10 @@ function createTypeChecker(host) { } const localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); let declaration = localOrExportSymbol.valueDeclaration; - let type = getNarrowedTypeOfSymbol(localOrExportSymbol, node, checkMode); + if (declaration && declaration.kind === 208 /* BindingElement */ && contains(contextualBindingPatterns, declaration.parent) && findAncestor(node, (parent) => parent === declaration.parent)) { + return nonInferrableAnyType; + } + let type = getNarrowedTypeOfSymbol(localOrExportSymbol, node); const assignmentKind = getAssignmentTargetKind(node); if (assignmentKind) { if (!(localOrExportSymbol.flags & 3 /* Variable */) && !(isInJSFile(node) && localOrExportSymbol.flags & 512 /* ValueModule */)) { @@ -70897,7 +71375,7 @@ function createTypeChecker(host) { type, (t) => { var _a; - if (isGenericMappedType(t) && !t.declaration.nameType) { + if (isGenericMappedType(t) && getMappedTypeNameTypeKind(t) !== 2 /* Remapping */) { const constraint = getConstraintTypeFromMappedType(t); const constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; const propertyNameType = nameType || getStringLiteralType(unescapeLeadingUnderscores(name)); @@ -70995,7 +71473,7 @@ function createTypeChecker(host) { return removeMissingType(getTypeArguments(t)[index], !!(t.target.elementFlags[index] && 2 /* Optional */)); } const offset = length2 !== void 0 && (lastSpreadIndex === void 0 || index > lastSpreadIndex) ? length2 - index : 0; - const fixedEndLength = offset > 0 && t.target.hasRestElement ? getEndElementCount(t.target, 3 /* Fixed */) : 0; + const fixedEndLength = offset > 0 && t.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(t.target, 3 /* Fixed */) : 0; if (offset > 0 && offset <= fixedEndLength) { return getTypeArguments(t)[getTypeReferenceArity(t) - offset]; } @@ -71638,7 +72116,7 @@ function createTypeChecker(host) { return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type; } function hasDefaultValue(node) { - return node.kind === 208 /* BindingElement */ && !!node.initializer || node.kind === 226 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */; + return node.kind === 208 /* BindingElement */ && !!node.initializer || node.kind === 303 /* PropertyAssignment */ && hasDefaultValue(node.initializer) || node.kind === 304 /* ShorthandPropertyAssignment */ && !!node.objectAssignmentInitializer || node.kind === 226 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */; } function isSpreadIntoCallOrNew(node) { const parent = walkUpParenthesizedExpressions(node.parent); @@ -71807,7 +72285,6 @@ function createTypeChecker(host) { return links.immediateTarget; } function checkObjectLiteral(node, checkMode = 0 /* Normal */) { - var _a; const inDestructuringPattern = isAssignmentTarget(node); checkGrammarObjectLiteralExpression(node, inDestructuringPattern); const allPropertiesTable = strictNullChecks ? createSymbolTable() : void 0; @@ -71862,11 +72339,8 @@ function createTypeChecker(host) { if (nameType) { prop.links.nameType = nameType; } - if (inDestructuringPattern) { - const isOptional = memberDecl.kind === 303 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer) || memberDecl.kind === 304 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer; - if (isOptional) { - prop.flags |= 16777216 /* Optional */; - } + if (inDestructuringPattern && hasDefaultValue(memberDecl)) { + prop.flags |= 16777216 /* Optional */; } else if (contextualTypeHasPattern && !(getObjectFlags(contextualType) & 512 /* ObjectLiteralPatternWithComputedProperties */)) { const impliedProp = getPropertyOfType(contextualType, member.escapedName); if (impliedProp) { @@ -71941,21 +72415,6 @@ function createTypeChecker(host) { propertiesArray.push(member); } popContextualType(); - if (contextualTypeHasPattern) { - const rootPatternParent = findAncestor(contextualType.pattern.parent, (n) => n.kind === 260 /* VariableDeclaration */ || n.kind === 226 /* BinaryExpression */ || n.kind === 169 /* Parameter */); - const spreadOrOutsideRootObject = findAncestor(node, (n) => n === rootPatternParent || n.kind === 305 /* SpreadAssignment */); - if (spreadOrOutsideRootObject.kind !== 305 /* SpreadAssignment */) { - for (const prop of getPropertiesOfType(contextualType)) { - if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) { - if (!(prop.flags & 16777216 /* Optional */)) { - error(prop.valueDeclaration || ((_a = tryCast(prop, isTransientSymbol)) == null ? void 0 : _a.links.bindingElement), Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); - } - propertiesTable.set(prop.escapedName, prop); - propertiesArray.push(prop); - } - } - } - } if (isErrorType(spread)) { return errorType; } @@ -72631,8 +73090,21 @@ function createTypeChecker(host) { function getEnclosingClassFromThisParameter(node) { const thisParameter = getThisParameterFromNodeContext(node); let thisType = (thisParameter == null ? void 0 : thisParameter.type) && getTypeFromTypeNode(thisParameter.type); - if (thisType && thisType.flags & 262144 /* TypeParameter */) { - thisType = getConstraintOfTypeParameter(thisType); + if (thisType) { + if (thisType.flags & 262144 /* TypeParameter */) { + thisType = getConstraintOfTypeParameter(thisType); + } + } else { + const thisContainer = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(thisContainer)) { + thisType = getContextualThisParameterType(thisContainer); + } } if (thisType && getObjectFlags(thisType) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { return getTargetType(thisType); @@ -73148,7 +73620,7 @@ function createTypeChecker(host) { addErrorOrSuggestion(!isUncheckedJS || errorInfo.code !== Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code, resultDiagnostic); } function containerSeemsToBeEmptyDomElement(containingType) { - return compilerOptions.lib && !compilerOptions.lib.includes("dom") && everyContainedType(containingType, (type) => type.symbol && /^(EventTarget|Node|((HTML[a-zA-Z]*)?Element))$/.test(unescapeLeadingUnderscores(type.symbol.escapedName))) && isEmptyObjectType(containingType); + return compilerOptions.lib && !compilerOptions.lib.includes("dom") && everyContainedType(containingType, (type) => type.symbol && /^(?:EventTarget|Node|(?:HTML[a-zA-Z]*)?Element)$/.test(unescapeLeadingUnderscores(type.symbol.escapedName))) && isEmptyObjectType(containingType); } function typeHasStaticProperty(propName, containingType) { const prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName); @@ -73589,7 +74061,7 @@ function createTypeChecker(host) { return void 0; } function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes) { - const context = createInferenceContext(signature.typeParameters, signature, 0 /* None */, compareTypes); + const context = createInferenceContext(getTypeParametersForMapper(signature), signature, 0 /* None */, compareTypes); const restType = getEffectiveRestType(contextualSignature); const mapper = inferenceContext && (restType && restType.flags & 262144 /* TypeParameter */ ? inferenceContext.nonFixingMapper : inferenceContext.mapper); const sourceSignature = mapper ? instantiateSignature(contextualSignature, mapper) : contextualSignature; @@ -75409,7 +75881,7 @@ function createTypeChecker(host) { return createAnonymousType(anonymousSymbol, memberTable, emptyArray, emptyArray, emptyArray); } function getTypeWithSyntheticDefaultOnly(type, symbol, originalSymbol, moduleSpecifier) { - const hasDefaultOnly = isOnlyImportedAsDefault(moduleSpecifier); + const hasDefaultOnly = isOnlyImportableAsDefault(moduleSpecifier); if (hasDefaultOnly && type && !isErrorType(type)) { const synthType = type; if (!synthType.defaultOnlyType) { @@ -75735,14 +76207,45 @@ function createTypeChecker(host) { !!declaration && (hasInitializer(declaration) || isOptionalDeclaration(declaration)) ); } - function getTupleElementLabel(d, index, restParameterName = "arg") { + function getTupleElementLabelFromBindingElement(node, index, elementFlags) { + switch (node.name.kind) { + case 80 /* Identifier */: { + const name = node.name.escapedText; + if (node.dotDotDotToken) { + return elementFlags & 12 /* Variable */ ? name : `${name}_${index}`; + } else { + return elementFlags & 3 /* Fixed */ ? name : `${name}_n`; + } + } + case 207 /* ArrayBindingPattern */: { + if (node.dotDotDotToken) { + const elements = node.name.elements; + const lastElement = tryCast(lastOrUndefined(elements), isBindingElement); + const elementCount = elements.length - ((lastElement == null ? void 0 : lastElement.dotDotDotToken) ? 1 : 0); + if (index < elementCount) { + const element = elements[index]; + if (isBindingElement(element)) { + return getTupleElementLabelFromBindingElement(element, index, elementFlags); + } + } else if (lastElement == null ? void 0 : lastElement.dotDotDotToken) { + return getTupleElementLabelFromBindingElement(lastElement, index - elementCount, elementFlags); + } + } + break; + } + } + return `arg_${index}`; + } + function getTupleElementLabel(d, index = 0, elementFlags = 3 /* Fixed */, restSymbol) { if (!d) { - return `${restParameterName}_${index}`; + const restParameter = tryCast(restSymbol == null ? void 0 : restSymbol.valueDeclaration, isParameter); + return restParameter ? getTupleElementLabelFromBindingElement(restParameter, index, elementFlags) : `${(restSymbol == null ? void 0 : restSymbol.escapedName) ?? "arg"}_${index}`; } Debug.assert(isIdentifier(d.name)); return d.name.escapedText; } function getParameterNameAtPosition(signature, pos, overrideRestType) { + var _a; const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); if (pos < paramCount) { return signature.parameters[pos].escapedName; @@ -75750,9 +76253,11 @@ function createTypeChecker(host) { const restParameter = signature.parameters[paramCount] || unknownSymbol; const restType = overrideRestType || getTypeOfSymbol(restParameter); if (isTupleType(restType)) { - const associatedNames = restType.target.labeledElementDeclarations; + const tupleType = restType.target; const index = pos - paramCount; - return getTupleElementLabel(associatedNames == null ? void 0 : associatedNames[index], index, restParameter.escapedName); + const associatedName = (_a = tupleType.labeledElementDeclarations) == null ? void 0 : _a[index]; + const elementFlags = tupleType.elementFlags[index]; + return getTupleElementLabel(associatedName, index, elementFlags, restParameter); } return restParameter.escapedName; } @@ -75825,7 +76330,7 @@ function createTypeChecker(host) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[paramCount]); const index = pos - paramCount; - if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) { + if (!isTupleType(restType) || restType.target.combinedFlags & 12 /* Variable */ || index < restType.target.fixedLength) { return getIndexedAccessType(restType, getNumberLiteralType(index)); } } @@ -75863,7 +76368,7 @@ function createTypeChecker(host) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[length2 - 1]); if (isTupleType(restType)) { - return length2 + restType.target.fixedLength - (restType.target.hasRestElement ? 0 : 1); + return length2 + restType.target.fixedLength - (restType.target.combinedFlags & 12 /* Variable */ ? 0 : 1); } } return length2; @@ -75906,7 +76411,7 @@ function createTypeChecker(host) { function hasEffectiveRestParameter(signature) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); - return !isTupleType(restType) || restType.target.hasRestElement; + return !isTupleType(restType) || !!(restType.target.combinedFlags & 12 /* Variable */); } return false; } @@ -75916,7 +76421,7 @@ function createTypeChecker(host) { if (!isTupleType(restType)) { return isTypeAny(restType) ? anyArrayType : restType; } - if (restType.target.hasRestElement) { + if (restType.target.combinedFlags & 12 /* Variable */) { return sliceTupleType(restType, restType.target.fixedLength); } } @@ -76430,30 +76935,15 @@ function createTypeChecker(host) { /*errorNode*/ void 0 ) || unknownType; - nextType = resolver.resolveIterationType( - nextType, - /*errorNode*/ - void 0 - ) || unknownType; if (globalGeneratorType === emptyGenericType) { - const globalType = resolver.getGlobalIterableIteratorType( + const globalIterableIteratorType = resolver.getGlobalIterableIteratorType( /*reportErrors*/ false ); - const iterationTypes = globalType !== emptyGenericType ? getIterationTypesOfGlobalIterableType(globalType, resolver) : void 0; - const iterableIteratorReturnType = iterationTypes ? iterationTypes.returnType : anyType; - const iterableIteratorNextType = iterationTypes ? iterationTypes.nextType : undefinedType; - if (isTypeAssignableTo(returnType, iterableIteratorReturnType) && isTypeAssignableTo(iterableIteratorNextType, nextType)) { - if (globalType !== emptyGenericType) { - return createTypeFromGenericGlobalType(globalType, [yieldType]); - } - resolver.getGlobalIterableIteratorType( - /*reportErrors*/ - true - ); - return emptyObjectType; + if (globalIterableIteratorType !== emptyGenericType) { + return createTypeFromGenericGlobalType(globalIterableIteratorType, [yieldType, returnType, nextType]); } - resolver.getGlobalGeneratorType( + resolver.getGlobalIterableIteratorType( /*reportErrors*/ true ); @@ -77233,7 +77723,7 @@ function createTypeChecker(host) { ); } } - const elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name); + const elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */ | (hasDefaultValue(property) ? 16 /* AllowMissing */ : 0), name); const type = getFlowTypeOfDestructuring(property, elementType); return checkDestructuringAssignment(property.kind === 304 /* ShorthandPropertyAssignment */ ? property : property.initializer, type); } else if (property.kind === 305 /* SpreadAssignment */) { @@ -77282,7 +77772,7 @@ function createTypeChecker(host) { if (element.kind !== 230 /* SpreadElement */) { const indexType = getNumberLiteralType(elementIndex); if (isArrayLikeType(sourceType)) { - const accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0); + const accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* AllowMissing */ : 0); const elementType2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType; const assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType2, 524288 /* NEUndefined */) : elementType2; const type = getFlowTypeOfDestructuring(element, assignedType); @@ -77432,7 +77922,7 @@ function createTypeChecker(host) { setLastResult(state, checkExpression(node.right, checkMode)); return state; } - checkGrammarNullishCoalesceWithLogicalExpression(node); + checkNullishCoalesceOperands(node); const operator = node.operatorToken.kind; if (operator === 64 /* EqualsToken */ && (node.left.kind === 210 /* ObjectLiteralExpression */ || node.left.kind === 209 /* ArrayLiteralExpression */)) { state.skip = true; @@ -77465,7 +77955,9 @@ function createTypeChecker(host) { if (operator === 56 /* AmpersandAmpersandToken */ || isIfStatement(parent)) { checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.left, leftType, isIfStatement(parent) ? parent.thenStatement : void 0); } - checkTruthinessOfType(leftType, node.left); + if (isBinaryLogicalOperator(operator)) { + checkTruthinessOfType(leftType, node.left); + } } } } @@ -77522,7 +78014,7 @@ function createTypeChecker(host) { state.typeStack[state.stackIndex + 1] = type; } } - function checkGrammarNullishCoalesceWithLogicalExpression(node) { + function checkNullishCoalesceOperands(node) { const { left, operatorToken, right } = node; if (operatorToken.kind === 61 /* QuestionQuestionToken */) { if (isBinaryExpression(left) && (left.operatorToken.kind === 57 /* BarBarToken */ || left.operatorToken.kind === 56 /* AmpersandAmpersandToken */)) { @@ -77531,7 +78023,55 @@ function createTypeChecker(host) { if (isBinaryExpression(right) && (right.operatorToken.kind === 57 /* BarBarToken */ || right.operatorToken.kind === 56 /* AmpersandAmpersandToken */)) { grammarErrorOnNode(right, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(right.operatorToken.kind), tokenToString(operatorToken.kind)); } + const leftTarget = skipOuterExpressions(left, 31 /* All */); + const nullishSemantics = getSyntacticNullishnessSemantics(leftTarget); + if (nullishSemantics !== 3 /* Sometimes */) { + if (node.parent.kind === 226 /* BinaryExpression */) { + error(leftTarget, Diagnostics.This_binary_expression_is_never_nullish_Are_you_missing_parentheses); + } else { + if (nullishSemantics === 1 /* Always */) { + error(leftTarget, Diagnostics.This_expression_is_always_nullish); + } else { + error(leftTarget, Diagnostics.Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish); + } + } + } + } + } + function getSyntacticNullishnessSemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 223 /* AwaitExpression */: + case 213 /* CallExpression */: + case 212 /* ElementAccessExpression */: + case 214 /* NewExpression */: + case 211 /* PropertyAccessExpression */: + case 229 /* YieldExpression */: + case 110 /* ThisKeyword */: + return 3 /* Sometimes */; + case 226 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 61 /* QuestionQuestionToken */: + case 78 /* QuestionQuestionEqualsToken */: + case 57 /* BarBarToken */: + case 76 /* BarBarEqualsToken */: + case 56 /* AmpersandAmpersandToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + return 3 /* Sometimes */; + } + return 2 /* Never */; + case 227 /* ConditionalExpression */: + return getSyntacticNullishnessSemantics(node.whenTrue) | getSyntacticNullishnessSemantics(node.whenFalse); + case 106 /* NullKeyword */: + return 1 /* Always */; + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 1 /* Always */; + } + return 3 /* Sometimes */; } + return 2 /* Never */; } function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) { const operator = operatorToken.kind; @@ -77539,7 +78079,7 @@ function createTypeChecker(host) { return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 110 /* ThisKeyword */); } let leftType; - if (isLogicalOrCoalescingBinaryOperator(operator)) { + if (isBinaryLogicalOperator(operator)) { leftType = checkTruthinessExpression(left, checkMode); } else { leftType = checkExpression(left, checkMode); @@ -77619,6 +78159,29 @@ function createTypeChecker(host) { } if (leftOk && rightOk) { checkAssignmentOperator(resultType2); + switch (operator) { + case 48 /* LessThanLessThanToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + const rhsEval = evaluate(right); + if (typeof rhsEval.value === "number" && Math.abs(rhsEval.value) >= 32) { + errorOrSuggestion( + isEnumMember(walkUpParenthesizedExpressions(right.parent.parent)), + // elevate from suggestion to error within an enum member + errorNode || operatorToken, + Diagnostics.This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2, + getTextOfNode(left), + tokenToString(operator), + rhsEval.value % 32 + ); + } + break; + default: + break; + } } return resultType2; } @@ -77977,9 +78540,8 @@ function createTypeChecker(host) { const iterationTypes = returnType && getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsync); const signatureYieldType = iterationTypes && iterationTypes.yieldType || anyType; const signatureNextType = iterationTypes && iterationTypes.nextType || anyType; - const resolvedSignatureNextType = isAsync ? getAwaitedType(signatureNextType) || anyType : signatureNextType; const yieldExpressionType = node.expression ? checkExpression(node.expression) : undefinedWideningType; - const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, resolvedSignatureNextType, isAsync); + const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, signatureNextType, isAsync); if (returnType && yieldedType) { checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureYieldType, node.expression || node, node.expression); } @@ -78121,9 +78683,56 @@ function createTypeChecker(host) { void 0, checkMode || 0 /* Normal */ ) : checkExpressionCached(initializer, checkMode)); - return isParameter(declaration) && declaration.name.kind === 207 /* ArrayBindingPattern */ && isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ? padTupleType(type, declaration.name) : type; + if (isParameter(isBindingElement(declaration) ? walkUpBindingElementsAndPatterns(declaration) : declaration)) { + if (declaration.name.kind === 206 /* ObjectBindingPattern */ && isObjectLiteralType(type)) { + return padObjectLiteralType(type, declaration.name); + } + if (declaration.name.kind === 207 /* ArrayBindingPattern */ && isTupleType(type)) { + return padTupleType(type, declaration.name); + } + } + return type; + } + function padObjectLiteralType(type, pattern) { + let missingElements; + for (const e of pattern.elements) { + if (e.initializer) { + const name = getPropertyNameFromBindingElement(e); + if (name && !getPropertyOfType(type, name)) { + missingElements = append(missingElements, e); + } + } + } + if (!missingElements) { + return type; + } + const members = createSymbolTable(); + for (const prop of getPropertiesOfObjectType(type)) { + members.set(prop.escapedName, prop); + } + for (const e of missingElements) { + const symbol = createSymbol(4 /* Property */ | 16777216 /* Optional */, getPropertyNameFromBindingElement(e)); + symbol.links.type = getTypeFromBindingElement( + e, + /*includePatternInType*/ + false, + /*reportErrors*/ + false + ); + members.set(symbol.escapedName, symbol); + } + const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, getIndexInfosOfType(type)); + result.objectFlags = type.objectFlags; + return result; + } + function getPropertyNameFromBindingElement(e) { + const exprType = getLiteralTypeFromPropertyName(e.propertyName || e.name); + return isTypeUsableAsPropertyName(exprType) ? getPropertyNameFromType(exprType) : void 0; } function padTupleType(type, pattern) { + if (type.target.combinedFlags & 12 /* Variable */ || getTypeReferenceArity(type) >= pattern.elements.length) { + return type; + } const patternElements = pattern.elements; const elementTypes = getElementTypes(type).slice(); const elementFlags = type.target.elementFlags.slice(); @@ -78432,7 +79041,17 @@ function createTypeChecker(host) { if (!ok) { error(node, Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query); } - if (getIsolatedModules(compilerOptions)) { + if (compilerOptions.isolatedModules || compilerOptions.verbatimModuleSyntax && ok && !resolveName( + node, + getFirstIdentifier(node), + 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false, + /*excludeGlobals*/ + true + )) { Debug.assert(!!(type.symbol.flags & 128 /* ConstEnum */)); const constEnumDeclaration = type.symbol.valueDeclaration; const redirect = host.getRedirectReferenceForResolutionFromSourceOfProject(getSourceFileOfNode(constEnumDeclaration).resolvedPath); @@ -78656,9 +79275,7 @@ function createTypeChecker(host) { } checkSourceElement(node.type); const { parameterName } = node; - if (typePredicate.kind === 0 /* This */ || typePredicate.kind === 2 /* AssertsThis */) { - getTypeFromThisTypeNode(parameterName); - } else { + if (typePredicate.kind !== 0 /* This */ && typePredicate.kind !== 2 /* AssertsThis */) { if (typePredicate.parameterIndex >= 0) { if (signatureHasRestParameter(signature) && typePredicate.parameterIndex === signature.parameters.length - 1) { error(parameterName, Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); @@ -79393,16 +80010,20 @@ function createTypeChecker(host) { const someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; if (someButNotAllOverloadFlags !== 0) { const canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck2); - forEach(overloads, (o) => { - const deviation = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlags; - if (deviation & 32 /* Export */) { - error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); - } else if (deviation & 128 /* Ambient */) { - error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); - } else if (deviation & (2 /* Private */ | 4 /* Protected */)) { - error(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); - } else if (deviation & 64 /* Abstract */) { - error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + group(overloads, (o) => getSourceFileOfNode(o).fileName).forEach((overloadsInFile) => { + const canonicalFlagsForFile = getEffectiveDeclarationFlags(getCanonicalOverload(overloadsInFile, implementation), flagsToCheck2); + for (const o of overloadsInFile) { + const deviation = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlags; + const deviationInFile = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlagsForFile; + if (deviationInFile & 32 /* Export */) { + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); + } else if (deviationInFile & 128 /* Ambient */) { + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } else if (deviation & (2 /* Private */ | 4 /* Protected */)) { + error(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); + } else if (deviation & 64 /* Abstract */) { + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + } } }); } @@ -80537,7 +81158,7 @@ function createTypeChecker(host) { if (!wrappingDeclaration.type) { addRelatedInfo( diagnostic, - createFileDiagnostic(getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 1, Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, declarationNameToString(node.propertyName)) + createFileDiagnostic(getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 0, Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, declarationNameToString(node.propertyName)) ); } diagnostics.add(diagnostic); @@ -80636,7 +81257,7 @@ function createTypeChecker(host) { }); } function checkCollisionWithRequireExportsInGeneratedCode(node, name) { - if (moduleKind >= 5 /* ES2015 */ && !(moduleKind >= 100 /* Node16 */ && getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) >= 5 /* ES2015 */) { return; } if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { @@ -80846,6 +81467,9 @@ function createTypeChecker(host) { checkAliasSymbol(node); return; } + if (node.name.kind === 10 /* BigIntLiteral */) { + error(node.name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name); + } const type = convertAutoToAny(getTypeOfSymbol(symbol)); if (node === symbol.valueDeclaration) { const initializer = hasOnlyExpressionInitializer(node) && getEffectiveInitializer(node); @@ -80873,7 +81497,7 @@ function createTypeChecker(host) { ); if (globalAsyncDisposableType !== emptyObjectType && globalDisposableType !== emptyObjectType) { const optionalDisposableType = getUnionType([globalAsyncDisposableType, globalDisposableType, nullType, undefinedType]); - checkTypeAssignableTo(initializerType, optionalDisposableType, initializer, Diagnostics.The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined); } } else if (blockScopeKind === 4 /* Using */) { const globalDisposableType = getGlobalDisposableType( @@ -80882,7 +81506,7 @@ function createTypeChecker(host) { ); if (globalDisposableType !== emptyObjectType) { const optionalDisposableType = getUnionType([globalDisposableType, nullType, undefinedType]); - checkTypeAssignableTo(initializerType, optionalDisposableType, initializer, Diagnostics.The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined); } } } @@ -81000,7 +81624,7 @@ function createTypeChecker(host) { bothHelper(location, body2); return; } - const type = location === condExpr2 ? condType : checkTruthinessExpression(location); + const type = location === condExpr2 ? condType : checkExpression(location); if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) { error(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false"); return; @@ -81095,9 +81719,51 @@ function createTypeChecker(host) { function checkTruthinessOfType(type, node) { if (type.flags & 16384 /* Void */) { error(node, Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness); + } else { + const semantics = getSyntacticTruthySemantics(node); + if (semantics !== 3 /* Sometimes */) { + error( + node, + semantics === 1 /* Always */ ? Diagnostics.This_kind_of_expression_is_always_truthy : Diagnostics.This_kind_of_expression_is_always_falsy + ); + } } return type; } + function getSyntacticTruthySemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 9 /* NumericLiteral */: + if (node.text === "0" || node.text === "1") { + return 3 /* Sometimes */; + } + return 1 /* Always */; + case 209 /* ArrayLiteralExpression */: + case 219 /* ArrowFunction */: + case 10 /* BigIntLiteral */: + case 231 /* ClassExpression */: + case 218 /* FunctionExpression */: + case 284 /* JsxElement */: + case 285 /* JsxSelfClosingElement */: + case 210 /* ObjectLiteralExpression */: + case 14 /* RegularExpressionLiteral */: + return 1 /* Always */; + case 222 /* VoidExpression */: + case 106 /* NullKeyword */: + return 2 /* Never */; + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + return !!node.text ? 1 /* Always */ : 2 /* Never */; + case 227 /* ConditionalExpression */: + return getSyntacticTruthySemantics(node.whenTrue) | getSyntacticTruthySemantics(node.whenFalse); + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 2 /* Never */; + } + return 3 /* Sometimes */; + } + return 3 /* Sometimes */; + } function checkTruthinessExpression(node, checkMode) { return checkTruthinessOfType(checkExpression(node, checkMode), node); } @@ -81480,30 +82146,21 @@ function createTypeChecker(host) { function getIterationTypesOfIterableCached(type, resolver) { return getCachedIterationTypes(type, resolver.iterableCacheKey); } - function getIterationTypesOfGlobalIterableType(globalType, resolver) { - const globalIterationTypes = getIterationTypesOfIterableCached(globalType, resolver) || getIterationTypesOfIterableSlow( - globalType, - resolver, - /*errorNode*/ - void 0, - /*errorOutputContainer*/ - void 0, - /*noCache*/ - false - ); - return globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - } function getIterationTypesOfIterableFast(type, resolver) { - let globalType; - if (isReferenceToType(type, globalType = resolver.getGlobalIterableType( + if (isReferenceToType(type, resolver.getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType(type, resolver.getGlobalIteratorObjectType( + /*reportErrors*/ + false + )) || isReferenceToType(type, resolver.getGlobalIterableIteratorType( /*reportErrors*/ false - )) || isReferenceToType(type, globalType = resolver.getGlobalIterableIteratorType( + )) || isReferenceToType(type, resolver.getGlobalGeneratorType( /*reportErrors*/ false ))) { - const [yieldType] = getTypeArguments(type); - const { returnType, nextType } = getIterationTypesOfGlobalIterableType(globalType, resolver); + const [yieldType, returnType, nextType] = getTypeArguments(type); return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( yieldType, /*errorNode*/ @@ -81514,11 +82171,10 @@ function createTypeChecker(host) { void 0 ) || returnType, nextType)); } - if (isReferenceToType(type, resolver.getGlobalGeneratorType( - /*reportErrors*/ - false - ))) { - const [yieldType, returnType, nextType] = getTypeArguments(type); + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( yieldType, /*errorNode*/ @@ -81559,10 +82215,10 @@ function createTypeChecker(host) { !!getAwaitedTypeOfPromise(type) || !allowAsyncIterables && isForOfStatement(errorNode.parent) && errorNode.parent.expression === errorNode && getGlobalAsyncIterableType( /*reportErrors*/ false - ) !== emptyGenericType && isTypeAssignableTo(type, getGlobalAsyncIterableType( + ) !== emptyGenericType && isTypeAssignableTo(type, createTypeFromGenericGlobalType(getGlobalAsyncIterableType( /*reportErrors*/ false - )) + ), [anyType, anyType, anyType])) ); return errorAndMaybeSuggestAwait(errorNode, suggestAwait, message, typeToString(type)); } @@ -81592,26 +82248,13 @@ function createTypeChecker(host) { return getCachedIterationTypes(type, resolver.iteratorCacheKey); } function getIterationTypesOfIteratorFast(type, resolver) { - const globalType = resolver.getGlobalIterableIteratorType( + if (isReferenceToType(type, resolver.getGlobalIterableIteratorType( /*reportErrors*/ false - ); - if (isReferenceToType(type, globalType)) { - const [yieldType] = getTypeArguments(type); - const globalIterationTypes = getIterationTypesOfIteratorCached(globalType, resolver) || getIterationTypesOfIteratorSlow( - globalType, - resolver, - /*errorNode*/ - void 0, - /*errorOutputContainer*/ - void 0, - /*noCache*/ - false - ); - const { returnType, nextType } = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); - } - if (isReferenceToType(type, resolver.getGlobalIteratorType( + )) || isReferenceToType(type, resolver.getGlobalIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType(type, resolver.getGlobalIteratorObjectType( /*reportErrors*/ false )) || isReferenceToType(type, resolver.getGlobalGeneratorType( @@ -81621,6 +82264,12 @@ function createTypeChecker(host) { const [yieldType, returnType, nextType] = getTypeArguments(type); return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); } + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; + return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); + } } function isIteratorResult(type, kind) { const doneType = getTypeOfPropertyOfType(type, "done") || falseType; @@ -81688,7 +82337,7 @@ function createTypeChecker(host) { } const methodType = method && !(methodName === "next" && method.flags & 16777216 /* Optional */) ? methodName === "next" ? getTypeOfSymbol(method) : getTypeWithFacts(getTypeOfSymbol(method), 2097152 /* NEUndefinedOrNull */) : void 0; if (isTypeAny(methodType)) { - return methodName === "next" ? anyIterationTypes : anyIterationTypesExceptNext; + return anyIterationTypes; } const methodSignatures = methodType ? getSignaturesOfType(methodType, 0 /* Call */) : emptyArray; if (methodSignatures.length === 0) { @@ -82057,7 +82706,7 @@ function createTypeChecker(host) { } } function checkClassNameCollisionWithObject(name) { - if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(name).impliedNodeFormat === 1 /* CommonJS */)) { + if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < 5 /* ES2015 */) { error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); } } @@ -82436,23 +83085,22 @@ function createTypeChecker(host) { hasAbstractModifier(member), isStatic(member), memberIsParameterProperty, - symbolName(declaredProp), + declaredProp, reportErrors2 ? member : void 0 ); } - function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, memberName, errorNode) { + function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, member, errorNode) { const isJs = isInJSFile(node); const nodeInAmbientContext = !!(node.flags & 33554432 /* Ambient */); if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) { - const memberEscapedName = escapeLeadingUnderscores(memberName); const thisType = memberIsStatic ? staticType : typeWithThis; const baseType = memberIsStatic ? baseStaticType : baseWithThis; - const prop = getPropertyOfType(thisType, memberEscapedName); - const baseProp = getPropertyOfType(baseType, memberEscapedName); + const prop = getPropertyOfType(thisType, member.escapedName); + const baseProp = getPropertyOfType(baseType, member.escapedName); const baseClassName = typeToString(baseWithThis); if (prop && !baseProp && memberHasOverrideModifier) { if (errorNode) { - const suggestion = getSuggestedSymbolForNonexistentClassMember(memberName, baseType); + const suggestion = getSuggestedSymbolForNonexistentClassMember(symbolName(member), baseType); suggestion ? error( errorNode, isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 : Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, @@ -82569,7 +83217,7 @@ function createTypeChecker(host) { isStatic(member), /*memberIsParameterProperty*/ false, - symbolName(memberSymbol) + memberSymbol ); } function getTargetSymbol(s) { @@ -82827,7 +83475,9 @@ function createTypeChecker(host) { checkExportsOnMergedDeclarations(node); checkTypeParameters(node.typeParameters); if (node.type.kind === 141 /* IntrinsicKeyword */) { - if (!intrinsicTypeKinds.has(node.name.escapedText) || length(node.typeParameters) !== 1) { + const typeParameterCount = length(node.typeParameters); + const valid = typeParameterCount === 0 ? node.name.escapedText === "BuiltinIteratorReturn" : typeParameterCount === 1 && intrinsicTypeKinds.has(node.name.escapedText); + if (!valid) { error(node.type, Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types); } } else { @@ -83117,6 +83767,14 @@ function createTypeChecker(host) { } if (isIdentifier(node.name)) { checkCollisionsForDeclarationName(node, node.name); + if (!(node.flags & (32 /* Namespace */ | 2048 /* GlobalAugmentation */))) { + const sourceFile = getSourceFileOfNode(node); + const pos = getNonModifierTokenPosOfNode(node); + const span = getSpanOfTokenAtPosition(sourceFile, pos); + suggestionDiagnostics.add( + createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead) + ); + } } checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfDeclaration(node); @@ -83138,7 +83796,7 @@ function createTypeChecker(host) { getNodeLinks(node).flags |= 2048 /* LexicalModuleMergesWithClass */; } } - if (compilerOptions.verbatimModuleSyntax && node.parent.kind === 307 /* SourceFile */ && (moduleKind === 1 /* CommonJS */ || node.parent.impliedNodeFormat === 1 /* CommonJS */)) { + if (compilerOptions.verbatimModuleSyntax && node.parent.kind === 307 /* SourceFile */ && host.getEmitModuleFormatOfFile(node.parent) === 1 /* CommonJS */) { const exportModifier = (_b = node.modifiers) == null ? void 0 : _b.find((m) => m.kind === 95 /* ExportKeyword */); if (exportModifier) { error(exportModifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); @@ -83181,6 +83839,7 @@ function createTypeChecker(host) { grammarErrorOnFirstToken(node, Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; case 271 /* ImportEqualsDeclaration */: + if (isInternalModuleImportEqualsDeclaration(node)) break; case 272 /* ImportDeclaration */: grammarErrorOnFirstToken(node, Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; @@ -83260,6 +83919,16 @@ function createTypeChecker(host) { } return true; } + function checkModuleExportName(name, allowStringLiteral = true) { + if (name === void 0 || name.kind !== 11 /* StringLiteral */) { + return; + } + if (!allowStringLiteral) { + grammarErrorOnNode(name, Diagnostics.Identifier_expected); + } else if (moduleKind === 5 /* ES2015 */ || moduleKind === 6 /* ES2020 */) { + grammarErrorOnNode(name, Diagnostics.String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020); + } + } function checkAliasSymbol(node) { var _a, _b, _c, _d; let symbol = getSymbolOfDeclaration(node); @@ -83271,7 +83940,7 @@ function createTypeChecker(host) { Debug.assert(node.kind !== 280 /* NamespaceExport */); if (node.kind === 281 /* ExportSpecifier */) { const diag2 = error(errorNode, Diagnostics.Types_cannot_appear_in_export_declarations_in_JavaScript_files); - const alreadyExportedSymbol = (_b = (_a = getSourceFileOfNode(node).symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.get((node.propertyName || node.name).escapedText); + const alreadyExportedSymbol = (_b = (_a = getSourceFileOfNode(node).symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.get(moduleExportNameTextEscaped(node.propertyName || node.name)); if (alreadyExportedSymbol === target) { const exportingDeclaration = (_c = alreadyExportedSymbol.declarations) == null ? void 0 : _c.find(isJSDocNode); if (exportingDeclaration) { @@ -83326,7 +83995,7 @@ function createTypeChecker(host) { if (compilerOptions.verbatimModuleSyntax) { Debug.assertIsDefined(node.name, "An ImportClause with a symbol should have a name"); const message = compilerOptions.verbatimModuleSyntax && isInternalModuleImportEqualsDeclaration(node) ? Diagnostics.An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled : isType ? Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled : Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled; - const name = idText(node.kind === 276 /* ImportSpecifier */ ? node.propertyName || node.name : node.name); + const name = moduleExportNameTextUnescaped(node.kind === 276 /* ImportSpecifier */ ? node.propertyName || node.name : node.name); addTypeOnlyDeclarationRelatedInfo( error(node, message, name), isType ? void 0 : typeOnlyAlias, @@ -83340,7 +84009,7 @@ function createTypeChecker(host) { } case 281 /* ExportSpecifier */: { if (compilerOptions.verbatimModuleSyntax || getSourceFileOfNode(typeOnlyAlias) !== getSourceFileOfNode(node)) { - const name = idText(node.propertyName || node.name); + const name = moduleExportNameTextUnescaped(node.propertyName || node.name); const diagnostic = isType ? error(node, Diagnostics.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type, isolatedModulesLikeFlagName) : error(node, Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled, name, isolatedModulesLikeFlagName); addTypeOnlyDeclarationRelatedInfo(diagnostic, isType ? void 0 : typeOnlyAlias, name); break; @@ -83348,8 +84017,17 @@ function createTypeChecker(host) { } } } - if (compilerOptions.verbatimModuleSyntax && node.kind !== 271 /* ImportEqualsDeclaration */ && !isInJSFile(node) && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (compilerOptions.verbatimModuleSyntax && node.kind !== 271 /* ImportEqualsDeclaration */ && !isInJSFile(node) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { error(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); + } else if (moduleKind === 200 /* Preserve */ && node.kind !== 271 /* ImportEqualsDeclaration */ && node.kind !== 260 /* VariableDeclaration */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { + error(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve); + } + if (compilerOptions.verbatimModuleSyntax && !isTypeOnlyImportOrExportDeclaration(node) && !(node.flags & 33554432 /* Ambient */) && targetFlags & 128 /* ConstEnum */) { + const constEnumDeclaration = target.valueDeclaration; + const redirect = host.getRedirectReferenceForResolutionFromSourceOfProject(getSourceFileOfNode(constEnumDeclaration).resolvedPath); + if (constEnumDeclaration.flags & 33554432 /* Ambient */ && (!redirect || !shouldPreserveConstEnums(redirect.commandLine.options))) { + error(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName); + } } } if (isImportSpecifier(node)) { @@ -83388,8 +84066,11 @@ function createTypeChecker(host) { function checkImportBinding(node) { checkCollisionsForDeclarationName(node, node.name); checkAliasSymbol(node); - if (node.kind === 276 /* ImportSpecifier */ && idText(node.propertyName || node.name) === "default" && getESModuleInterop(compilerOptions) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { - checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + if (node.kind === 276 /* ImportSpecifier */) { + checkModuleExportName(node.propertyName); + if (moduleExportNameIsDefault(node.propertyName || node.name) && getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { + checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + } } } function checkImportAttributes(declaration) { @@ -83409,7 +84090,7 @@ function createTypeChecker(host) { if (validForTypeAttributes && override) { return; } - const mode = moduleKind === 199 /* NodeNext */ && declaration.moduleSpecifier && getUsageModeForExpression(declaration.moduleSpecifier); + const mode = moduleKind === 199 /* NodeNext */ && declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier); if (mode !== 99 /* ESNext */ && moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { const message = isImportAttributes2 ? moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve : moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve; return grammarErrorOnNode(node, message); @@ -83442,7 +84123,7 @@ function createTypeChecker(host) { if (importClause.namedBindings) { if (importClause.namedBindings.kind === 274 /* NamespaceImport */) { checkImportBinding(importClause.namedBindings); - if (moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && getESModuleInterop(compilerOptions)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && getESModuleInterop(compilerOptions)) { checkExternalEmitHelpers(node, 65536 /* ImportStar */); } } else { @@ -83452,6 +84133,8 @@ function createTypeChecker(host) { } } } + } else if (noUncheckedSideEffectImports && !importClause) { + void resolveExternalModuleName(node, node.moduleSpecifier); } } checkImportAttributes(node); @@ -83482,7 +84165,7 @@ function createTypeChecker(host) { grammarErrorOnNode(node, Diagnostics.An_import_alias_cannot_use_import_type); } } else { - if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && getSourceFileOfNode(node).impliedNodeFormat === void 0 && !node.isTypeOnly && !(node.flags & 33554432 /* Ambient */)) { + if (5 /* ES2015 */ <= moduleKind && moduleKind <= 99 /* ESNext */ && !node.isTypeOnly && !(node.flags & 33554432 /* Ambient */)) { grammarErrorOnNode(node, Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead); } } @@ -83510,8 +84193,9 @@ function createTypeChecker(host) { error(node.moduleSpecifier, Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol)); } else if (node.exportClause) { checkAliasSymbol(node.exportClause); + checkModuleExportName(node.exportClause.name); } - if (moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { if (node.exportClause) { if (getESModuleInterop(compilerOptions)) { checkExternalEmitHelpers(node, 65536 /* ImportStar */); @@ -83540,6 +84224,9 @@ function createTypeChecker(host) { } function checkExportSpecifier(node) { checkAliasSymbol(node); + const hasModuleSpecifier = node.parent.parent.moduleSpecifier !== void 0; + checkModuleExportName(node.propertyName, hasModuleSpecifier); + checkModuleExportName(node.name); if (getEmitDeclarations(compilerOptions)) { collectLinkedAliases( node.propertyName || node.name, @@ -83547,8 +84234,11 @@ function createTypeChecker(host) { true ); } - if (!node.parent.parent.moduleSpecifier) { + if (!hasModuleSpecifier) { const exportedName = node.propertyName || node.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } const symbol = resolveName( exportedName, exportedName.escapedText, @@ -83564,7 +84254,7 @@ function createTypeChecker(host) { markLinkedReferences(node, 7 /* ExportSpecifier */); } } else { - if (getESModuleInterop(compilerOptions) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && idText(node.propertyName || node.name) === "default") { + if (getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && moduleExportNameIsDefault(node.propertyName || node.name)) { checkExternalEmitHelpers(node, 131072 /* ImportDefault */); } } @@ -83590,7 +84280,7 @@ function createTypeChecker(host) { if (typeAnnotationNode) { checkTypeAssignableTo(checkExpressionCached(node.expression), getTypeFromTypeNode(typeAnnotationNode), node.expression); } - const isIllegalExportDefaultInCJS = !node.isExportEquals && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */); + const isIllegalExportDefaultInCJS = !node.isExportEquals && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */; if (node.expression.kind === 80 /* Identifier */) { const id = node.expression; const sym = getExportSymbolOfValueSymbolIfExported(resolveEntityName( @@ -83670,7 +84360,7 @@ function createTypeChecker(host) { grammarErrorOnNode(node.expression, Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context); } if (node.isExportEquals) { - if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && (node.flags & 33554432 /* Ambient */ && getSourceFileOfNode(node).impliedNodeFormat === 99 /* ESNext */ || !(node.flags & 33554432 /* Ambient */) && getSourceFileOfNode(node).impliedNodeFormat !== 1 /* CommonJS */)) { + if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && (node.flags & 33554432 /* Ambient */ && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) === 99 /* ESNext */ || !(node.flags & 33554432 /* Ambient */) && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) !== 1 /* CommonJS */)) { grammarErrorOnNode(node, Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead); } else if (moduleKind === 4 /* System */ && !(node.flags & 33554432 /* Ambient */)) { grammarErrorOnNode(node, Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system); @@ -83731,6 +84421,9 @@ function createTypeChecker(host) { } } function checkSourceElementWorker(node) { + if (getNodeCheckFlags(node) & 8388608 /* PartiallyTypeChecked */) { + return; + } if (canHaveJSDoc(node)) { forEach(node.jsDoc, ({ comment, tags }) => { checkJSDocCommentWorker(comment); @@ -84074,19 +84767,21 @@ function createTypeChecker(host) { currentNode = saveCurrentNode; (_b = tracing) == null ? void 0 : _b.pop(); } - function checkSourceFile(node) { + function checkSourceFile(node, nodesToCheck) { var _a, _b; (_a = tracing) == null ? void 0 : _a.push( tracing.Phase.Check, - "checkSourceFile", + nodesToCheck ? "checkSourceFileNodes" : "checkSourceFile", { path: node.path }, /*separateBeginAndEnd*/ true ); - mark("beforeCheck"); - checkSourceFileWorker(node); - mark("afterCheck"); - measure("Check", "beforeCheck", "afterCheck"); + const beforeMark = nodesToCheck ? "beforeCheckNodes" : "beforeCheck"; + const afterMark = nodesToCheck ? "afterCheckNodes" : "afterCheck"; + mark(beforeMark); + nodesToCheck ? checkSourceFileNodesWorker(node, nodesToCheck) : checkSourceFileWorker(node); + mark(afterMark); + measure("Check", beforeMark, afterMark); (_b = tracing) == null ? void 0 : _b.pop(); } function unusedIsError(kind, isAmbient) { @@ -84117,6 +84812,13 @@ function createTypeChecker(host) { clear(potentialWeakMapSetCollisions); clear(potentialReflectCollisions); clear(potentialUnusedRenamedBindingElementsInTypes); + if (links.flags & 8388608 /* PartiallyTypeChecked */) { + potentialThisCollisions = links.potentialThisCollisions; + potentialNewTargetCollisions = links.potentialNewTargetCollisions; + potentialWeakMapSetCollisions = links.potentialWeakMapSetCollisions; + potentialReflectCollisions = links.potentialReflectCollisions; + potentialUnusedRenamedBindingElementsInTypes = links.potentialUnusedRenamedBindingElementsInTypes; + } forEach(node.statements, checkSourceElement); checkSourceElement(node.endOfFileToken); checkDeferredNodes(node); @@ -84157,10 +84859,38 @@ function createTypeChecker(host) { links.flags |= 1 /* TypeChecked */; } } - function getDiagnostics(sourceFile, ct) { + function checkSourceFileNodesWorker(file, nodes) { + const links = getNodeLinks(file); + if (!(links.flags & 1 /* TypeChecked */)) { + if (skipTypeChecking(file, compilerOptions, host)) { + return; + } + checkGrammarSourceFile(file); + clear(potentialThisCollisions); + clear(potentialNewTargetCollisions); + clear(potentialWeakMapSetCollisions); + clear(potentialReflectCollisions); + clear(potentialUnusedRenamedBindingElementsInTypes); + forEach(nodes, checkSourceElement); + checkDeferredNodes(file); + (links.potentialThisCollisions || (links.potentialThisCollisions = [])).push(...potentialThisCollisions); + (links.potentialNewTargetCollisions || (links.potentialNewTargetCollisions = [])).push(...potentialNewTargetCollisions); + (links.potentialWeakMapSetCollisions || (links.potentialWeakMapSetCollisions = [])).push(...potentialWeakMapSetCollisions); + (links.potentialReflectCollisions || (links.potentialReflectCollisions = [])).push(...potentialReflectCollisions); + (links.potentialUnusedRenamedBindingElementsInTypes || (links.potentialUnusedRenamedBindingElementsInTypes = [])).push( + ...potentialUnusedRenamedBindingElementsInTypes + ); + links.flags |= 8388608 /* PartiallyTypeChecked */; + for (const node of nodes) { + const nodeLinks2 = getNodeLinks(node); + nodeLinks2.flags |= 8388608 /* PartiallyTypeChecked */; + } + } + } + function getDiagnostics(sourceFile, ct, nodesToCheck) { try { cancellationToken = ct; - return getDiagnosticsWorker(sourceFile); + return getDiagnosticsWorker(sourceFile, nodesToCheck); } finally { cancellationToken = void 0; } @@ -84171,20 +84901,23 @@ function createTypeChecker(host) { } deferredDiagnosticsCallbacks = []; } - function checkSourceFileWithEagerDiagnostics(sourceFile) { + function checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck) { ensurePendingDiagnosticWorkComplete(); const oldAddLazyDiagnostics = addLazyDiagnostic; addLazyDiagnostic = (cb) => cb(); - checkSourceFile(sourceFile); + checkSourceFile(sourceFile, nodesToCheck); addLazyDiagnostic = oldAddLazyDiagnostics; } - function getDiagnosticsWorker(sourceFile) { + function getDiagnosticsWorker(sourceFile, nodesToCheck) { if (sourceFile) { ensurePendingDiagnosticWorkComplete(); const previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); const previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length; - checkSourceFileWithEagerDiagnostics(sourceFile); + checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck); const semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + if (nodesToCheck) { + return semanticDiagnostics; + } const currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); if (currentGlobalDiagnostics !== previousGlobalDiagnostics) { const deferredGlobalDiagnostics = relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, compareDiagnostics); @@ -84194,7 +84927,7 @@ function createTypeChecker(host) { } return semanticDiagnostics; } - forEach(host.getSourceFiles(), checkSourceFileWithEagerDiagnostics); + forEach(host.getSourceFiles(), (file) => checkSourceFileWithEagerDiagnostics(file)); return diagnostics.getDiagnostics(); } function getGlobalDiagnostics() { @@ -84719,7 +85452,11 @@ function createTypeChecker(host) { } function getExportSpecifierLocalTargetSymbol(node) { if (isExportSpecifier(node)) { - return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : resolveEntityName(node.propertyName || node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); + const name = node.propertyName || node.name; + return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName(name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */) + ); } else { return resolveEntityName(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); } @@ -85101,11 +85838,17 @@ function createTypeChecker(host) { const type = getTypeFromTypeNode(typeNode); return containsUndefinedType(type); } - function requiresAddingImplicitUndefined(parameter) { - return (isRequiredInitializedParameter(parameter) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter); + function requiresAddingImplicitUndefined(parameter, enclosingDeclaration) { + return (isRequiredInitializedParameter(parameter, enclosingDeclaration) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter); } - function isRequiredInitializedParameter(parameter) { - return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */); + function isRequiredInitializedParameter(parameter, enclosingDeclaration) { + if (!strictNullChecks || isOptionalParameter(parameter) || isJSDocParameterTag(parameter) || !parameter.initializer) { + return false; + } + if (hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */)) { + return !!enclosingDeclaration && isFunctionLikeDeclaration(enclosingDeclaration); + } + return true; } function isOptionalUninitializedParameterProperty(parameter) { return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */); @@ -85152,7 +85895,7 @@ function createTypeChecker(host) { return !!(getNodeCheckFlags(node) & flag); } function calculateNodeCheckFlagWorker(node, flag) { - if (!compilerOptions.noCheck && canIncludeBindAndCheckDiagnsotics(getSourceFileOfNode(node), compilerOptions)) { + if (!compilerOptions.noCheck && canIncludeBindAndCheckDiagnostics(getSourceFileOfNode(node), compilerOptions)) { return; } const links = getNodeLinks(node); @@ -85219,11 +85962,14 @@ function createTypeChecker(host) { } function checkSingleIdentifier(node2) { const nodeLinks2 = getNodeLinks(node2); - nodeLinks2.calculatedFlags |= 536870912 /* ConstructorReference */ | 16384 /* CapturedBlockScopedBinding */ | 32768 /* BlockScopedBindingInLoop */; - if (isIdentifier(node2) && isExpressionNodeOrShorthandPropertyAssignmentName(node2) && !(isPropertyAccessExpression(node2.parent) && node2.parent.name === node2)) { - const s = getResolvedSymbol(node2); - if (s && s !== unknownSymbol) { - checkIdentifierCalculateNodeCheckFlags(node2, s); + nodeLinks2.calculatedFlags |= 536870912 /* ConstructorReference */; + if (isIdentifier(node2)) { + nodeLinks2.calculatedFlags |= 32768 /* BlockScopedBindingInLoop */ | 16384 /* CapturedBlockScopedBinding */; + if (isExpressionNodeOrShorthandPropertyAssignmentName(node2) && !(isPropertyAccessExpression(node2.parent) && node2.parent.name === node2)) { + const s = getResolvedSymbol(node2); + if (s && s !== unknownSymbol) { + checkIdentifierCalculateNodeCheckFlags(node2, s); + } } } } @@ -85376,14 +86122,14 @@ function createTypeChecker(host) { return 11 /* ObjectType */; } } - function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) { + function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, internalFlags, tracker) { const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor); if (!declaration) { return factory.createToken(133 /* AnyKeyword */); } const symbol = getSymbolOfDeclaration(declaration); const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType; - return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); } function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) { return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration); @@ -85426,14 +86172,14 @@ function createTypeChecker(host) { } return candidateExpr; } - function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) { + function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, internalFlags, tracker) { const signatureDeclaration = getParseTreeNode(signatureDeclarationIn, isFunctionLike); if (!signatureDeclaration) { return factory.createToken(133 /* AnyKeyword */); } - return nodeBuilder.serializeReturnTypeForSignature(getSignatureFromDeclaration(signatureDeclaration), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.serializeReturnTypeForSignature(getSignatureFromDeclaration(signatureDeclaration), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); } - function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) { + function createTypeOfExpression(exprIn, enclosingDeclaration, flags, internalFlags, tracker) { const expr = getParseTreeNode(exprIn, isExpression); if (!expr) { return factory.createToken(133 /* AnyKeyword */); @@ -85446,6 +86192,7 @@ function createTypeChecker(host) { void 0, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, + internalFlags, tracker ); } @@ -85551,6 +86298,8 @@ function createTypeChecker(host) { enclosing, /*flags*/ void 0, + /*internalFlags*/ + void 0, tracker ) : type === trueType ? factory.createTrue() : type === falseType && factory.createFalse(); if (enumResult) return enumResult; @@ -85679,15 +86428,15 @@ function createTypeChecker(host) { const parseDecl = getParseTreeNode(decl); return !!parseNode && !!parseDecl && (isVariableDeclaration(parseDecl) || isBindingElement(parseDecl)) && isBindingCapturedByNode(parseNode, parseDecl); }, - getDeclarationStatementsForSourceFile: (node, flags, tracker) => { + getDeclarationStatementsForSourceFile: (node, flags, internalFlags, tracker) => { const n = getParseTreeNode(node); Debug.assert(n && n.kind === 307 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile"); const sym = getSymbolOfDeclaration(node); if (!sym) { - return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker); + return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, internalFlags, tracker); } resolveExternalModuleSymbol(sym); - return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, tracker); + return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, internalFlags, tracker); }, isImportRequiredByAugmentation, isDefinitelyReferenceToGlobalSymbolObject @@ -86168,7 +86917,7 @@ function createTypeChecker(host) { break; case 95 /* ExportKeyword */: if (compilerOptions.verbatimModuleSyntax && !(node.flags & 33554432 /* Ambient */) && node.kind !== 265 /* TypeAliasDeclaration */ && node.kind !== 264 /* InterfaceDeclaration */ && // ModuleDeclaration needs to be checked that it is uninstantiated later - node.kind !== 267 /* ModuleDeclaration */ && node.parent.kind === 307 /* SourceFile */ && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + node.kind !== 267 /* ModuleDeclaration */ && node.parent.kind === 307 /* SourceFile */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { return grammarErrorOnNode(modifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); } if (flags & 32 /* Export */) { @@ -86675,6 +87424,13 @@ function createTypeChecker(host) { if (name.kind === 9 /* NumericLiteral */) { checkGrammarNumericLiteral(name); } + if (name.kind === 10 /* BigIntLiteral */) { + addErrorOrSuggestion( + /*isError*/ + true, + createDiagnosticForNode(name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name) + ); + } currentKind = 4 /* PropertyAssignment */; break; case 174 /* MethodDeclaration */: @@ -86771,6 +87527,7 @@ function createTypeChecker(host) { } case 7 /* ES2022 */: case 99 /* ESNext */: + case 200 /* Preserve */: case 4 /* System */: if (languageVersion >= 4 /* ES2017 */) { break; @@ -87077,7 +87834,7 @@ function createTypeChecker(host) { const message = node.initializer ? Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions : !node.type ? Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations : Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context; return grammarErrorOnNode(node.exclamationToken, message); } - if ((moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && moduleKind !== 4 /* System */ && !(node.parent.parent.flags & 33554432 /* Ambient */) && hasSyntacticModifier(node.parent.parent, 32 /* Export */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && !(node.parent.parent.flags & 33554432 /* Ambient */) && hasSyntacticModifier(node.parent.parent, 32 /* Export */)) { checkESModuleMarker(node.name); } return !!blockScopeKind && checkGrammarNameInLetOrConstDeclarations(node.name); @@ -87386,11 +88143,11 @@ function createTypeChecker(host) { return grammarErrorOnNode(node, Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments); } const nodeArguments = node.arguments; - if (moduleKind !== 99 /* ESNext */ && moduleKind !== 199 /* NodeNext */ && moduleKind !== 100 /* Node16 */) { + if (moduleKind !== 99 /* ESNext */ && moduleKind !== 199 /* NodeNext */ && moduleKind !== 100 /* Node16 */ && moduleKind !== 200 /* Preserve */) { checkGrammarForDisallowedTrailingComma(nodeArguments); if (nodeArguments.length > 1) { const importAttributesArgument = nodeArguments[1]; - return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext); + return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve); } } if (nodeArguments.length === 0 || nodeArguments.length > 2) { @@ -87529,7 +88286,7 @@ function isDeclarationNameOrImportPropertyName(name) { switch (name.parent.kind) { case 276 /* ImportSpecifier */: case 281 /* ExportSpecifier */: - return isIdentifier(name); + return isIdentifier(name) || name.kind === 11 /* StringLiteral */; default: return isDeclarationName(name); } @@ -87578,7 +88335,9 @@ function createBasicNodeBuilderModuleSpecifierResolutionHost(host) { isSourceOfProjectReferenceRedirect: (fileName) => host.isSourceOfProjectReferenceRedirect(fileName), fileExists: (fileName) => host.fileExists(fileName), getFileIncludeReasons: () => host.getFileIncludeReasons(), - readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0 + readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0, + getDefaultResolutionModeForFile: (file) => host.getDefaultResolutionModeForFile(file), + getModeForResolutionAtIndex: (file, index) => host.getModeForResolutionAtIndex(file, index) }; } var SymbolTrackerImpl = class _SymbolTrackerImpl { @@ -88772,7 +89531,7 @@ var visitEachChildTable = { return context.factory.updateImportSpecifier( node, node.isTypeOnly, - nodeVisitor(node.propertyName, visitor, isIdentifier), + nodeVisitor(node.propertyName, visitor, isModuleExportName), Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) ); }, @@ -88803,8 +89562,8 @@ var visitEachChildTable = { return context.factory.updateExportSpecifier( node, node.isTypeOnly, - nodeVisitor(node.propertyName, visitor, isIdentifier), - Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + nodeVisitor(node.propertyName, visitor, isModuleExportName), + Debug.checkDefined(nodeVisitor(node.name, visitor, isModuleExportName)) ); }, // Module references @@ -89348,7 +90107,7 @@ function containsDefaultReference(node) { return some(node.elements, isNamedDefaultReference); } function isNamedDefaultReference(e) { - return e.propertyName !== void 0 ? e.propertyName.escapedText === "default" /* Default */ : e.name.escapedText === "default" /* Default */; + return moduleExportNameIsDefault(e.propertyName || e.name); } function chainBundle(context, transformSourceFile) { return transformSourceFileOrBundle; @@ -89424,9 +90183,10 @@ function collectExternalModuleInfo(context, sourceFile) { hasImportDefault || (hasImportDefault = containsDefaultReference(node.exportClause)); } else { const name = node.exportClause.name; - if (!uniqueExports.get(idText(name))) { + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); - uniqueExports.set(idText(name), true); + uniqueExports.set(nameText, true); exportedNames = append(exportedNames, name); } hasImportStar = true; @@ -89484,26 +90244,29 @@ function collectExternalModuleInfo(context, sourceFile) { return { externalImports, exportSpecifiers, exportEquals, hasExportStarsToExportValues, exportedBindings, exportedNames, exportedFunctions, externalHelpersImportDeclaration }; function addExportedNamesForExportDeclaration(node) { for (const specifier of cast(node.exportClause, isNamedExports).elements) { - if (!uniqueExports.get(idText(specifier.name))) { + const specifierNameText = moduleExportNameTextUnescaped(specifier.name); + if (!uniqueExports.get(specifierNameText)) { const name = specifier.propertyName || specifier.name; - if (!node.moduleSpecifier) { - exportSpecifiers.add(name, specifier); - } - const decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); - if (decl) { - if (decl.kind === 262 /* FunctionDeclaration */) { - addExportedFunctionDeclaration(decl, specifier.name, specifier.name.escapedText === "default" /* Default */); - continue; + if (name.kind !== 11 /* StringLiteral */) { + if (!node.moduleSpecifier) { + exportSpecifiers.add(name, specifier); + } + const decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); + if (decl) { + if (decl.kind === 262 /* FunctionDeclaration */) { + addExportedFunctionDeclaration(decl, specifier.name, moduleExportNameIsDefault(specifier.name)); + continue; + } + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); } - multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); } - uniqueExports.set(idText(specifier.name), true); + uniqueExports.set(specifierNameText, true); exportedNames = append(exportedNames, specifier.name); } } } function addExportedFunctionDeclaration(node, name, isDefault) { - exportedFunctions.add(node); + exportedFunctions.add(getOriginalNode(node, isFunctionDeclaration)); if (isDefault) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name ?? context.factory.getDeclarationName(node)); @@ -89511,9 +90274,10 @@ function collectExternalModuleInfo(context, sourceFile) { } } else { name ?? (name = node.name); - if (!uniqueExports.get(idText(name))) { + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); - uniqueExports.set(idText(name), true); + uniqueExports.set(nameText, true); } } } @@ -90224,7 +90988,7 @@ function createDestructuringPropertyAccess(flattenContext, value, propertyName) propertyName ); return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); - } else if (isStringOrNumericLiteralLike(propertyName)) { + } else if (isStringOrNumericLiteralLike(propertyName) || isBigIntLiteral(propertyName)) { const argumentExpression = factory2.cloneNode(propertyName); return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); } else { @@ -90644,7 +91408,6 @@ function transformTypeScript(context) { let currentNamespaceContainerName; let currentLexicalScope; let currentScopeFirstDeclarationsOfName; - let currentClassHasParameterProperties; let enabledSubstitutions; let applicableSubstitutions; return transformSourceFileOrBundle; @@ -90672,14 +91435,12 @@ function transformTypeScript(context) { function saveStateAndInvoke(node, f) { const savedCurrentScope = currentLexicalScope; const savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; - const savedCurrentClassHasParameterProperties = currentClassHasParameterProperties; onBeforeVisitNode(node); const visited = f(node); if (currentLexicalScope !== savedCurrentScope) { currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; } currentLexicalScope = savedCurrentScope; - currentClassHasParameterProperties = savedCurrentClassHasParameterProperties; return visited; } function onBeforeVisitNode(node) { @@ -91312,7 +92073,7 @@ function transformTypeScript(context) { } function visitPropertyNameOfClassElement(member) { const name = member.name; - if (isComputedPropertyName(name) && (!hasStaticModifier(member) && currentClassHasParameterProperties || hasDecorators(member) && legacyDecorators)) { + if (legacyDecorators && isComputedPropertyName(name) && hasDecorators(member)) { const expression = visitNode(name.expression, visitor, isExpression); Debug.assert(expression); const innerExpression = skipPartiallyEmittedExpressions(expression); @@ -91687,7 +92448,7 @@ function transformTypeScript(context) { return updated; } function visitParenthesizedExpression(node) { - const innerExpression = skipOuterExpressions(node.expression, ~6 /* Assertions */); + const innerExpression = skipOuterExpressions(node.expression, ~(6 /* Assertions */ | 16 /* ExpressionsWithTypeArguments */)); if (isAssertionExpression(innerExpression) || isSatisfiesExpression(innerExpression)) { const expression = visitNode(node.expression, visitor, isExpression); Debug.assert(expression); @@ -92493,8 +93254,6 @@ function transformClassFields(context) { return node; } switch (node.kind) { - case 129 /* AccessorKeyword */: - return Debug.fail("Use `modifierVisitor` instead."); case 263 /* ClassDeclaration */: return visitClassDeclaration(node); case 231 /* ClassExpression */: @@ -93907,6 +94666,7 @@ function transformClassFields(context) { addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset)); } function transformConstructorBody(node, constructor, isDerivedClass) { + var _a; const instanceProperties = getProperties( node, /*requireInitializer*/ @@ -94000,12 +94760,12 @@ function transformClassFields(context) { setTextRange( factory2.createNodeArray(statements), /*location*/ - constructor ? constructor.body.statements : node.members + ((_a = constructor == null ? void 0 : constructor.body) == null ? void 0 : _a.statements) ?? node.members ), multiLine ), /*location*/ - constructor ? constructor.body : void 0 + constructor == null ? void 0 : constructor.body ); } function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) { @@ -101009,7 +101769,7 @@ function transformJsx(context) { const name = node.name; if (isIdentifier(name)) { const text = idText(name); - return /^[A-Za-z_]\w*$/.test(text) ? name : factory2.createStringLiteral(text); + return /^[A-Z_]\w*$/i.test(text) ? name : factory2.createStringLiteral(text); } return factory2.createStringLiteral(idText(name.namespace) + ":" + idText(name.name)); } @@ -103133,7 +103893,7 @@ function transformES2015(context) { statement, /*outermostLabeledStatement*/ node - ) : factory2.restoreEnclosingLabel(Debug.checkDefined(visitNode(statement, visitor, isStatement, factory2.liftToBlock)), node, convertedLoopState && resetLabel); + ) : factory2.restoreEnclosingLabel(visitNode(statement, visitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), statement), node, convertedLoopState && resetLabel); } function visitIterationStatement(node, outermostLabeledStatement) { switch (node.kind) { @@ -106790,7 +107550,7 @@ function transformModule(context) { factory2.createExpressionStatement( reduceLeft( currentModuleInfo.exportedNames.slice(i, i + chunkSize), - (prev, nextId) => factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), + (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero() ) ) @@ -107113,7 +107873,10 @@ function transformModule(context) { append(statements, createUnderscoreUnderscoreESModule()); } if (some(currentModuleInfo.exportedNames)) { - append(statements, factory2.createExpressionStatement(reduceLeft(currentModuleInfo.exportedNames, (prev, nextId) => factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero()))); + append( + statements, + factory2.createExpressionStatement(reduceLeft(currentModuleInfo.exportedNames, (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero())) + ); } for (const f of currentModuleInfo.exportedFunctions) { appendExportsOfHoistedDeclaration(statements, f); @@ -107243,7 +108006,7 @@ function transformModule(context) { case 354 /* PartiallyEmittedExpression */: return visitPartiallyEmittedExpression(node, valueIsDiscarded); case 213 /* CallExpression */: - if (isImportCall(node) && currentSourceFile.impliedNodeFormat === void 0) { + if (isImportCall(node) && host.shouldTransformImportCall(currentSourceFile)) { return visitImportCallExpression(node); } break; @@ -107436,7 +108199,7 @@ function transformModule(context) { return factory2.updateLabeledStatement( node, node.label, - Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), node.statement) ); } function visitWithStatement(node) { @@ -107450,7 +108213,7 @@ function transformModule(context) { return factory2.updateIfStatement( node, visitNode(node.expression, visitor, isExpression), - Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ); } @@ -107984,17 +108747,16 @@ function transformModule(context) { ); } for (const specifier of node.exportClause.elements) { - const exportNeedsImportDefault = !!getESModuleInterop(compilerOptions) && !(getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) && idText(specifier.propertyName || specifier.name) === "default"; - const exportedValue = factory2.createPropertyAccessExpression( - exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName, - specifier.propertyName || specifier.name - ); + const specifierName = specifier.propertyName || specifier.name; + const exportNeedsImportDefault = !!getESModuleInterop(compilerOptions) && !(getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) && moduleExportNameIsDefault(specifierName); + const target = exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName; + const exportedValue = specifierName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, specifierName) : factory2.createPropertyAccessExpression(target, specifierName); statements.push( setOriginalNode( setTextRange( factory2.createExpressionStatement( createExportExpression( - factory2.getExportName(specifier), + specifier.name.kind === 11 /* StringLiteral */ ? factory2.cloneNode(specifier.name) : factory2.getExportName(specifier), exportedValue, /*location*/ void 0, @@ -108019,7 +108781,7 @@ function transformModule(context) { factory2.cloneNode(node.exportClause.name), getHelperExpressionForExport( node, - moduleKind !== 2 /* AMD */ ? createRequireCall(node) : isExportNamespaceAsDefaultDeclaration(node) ? generatedName : factory2.createIdentifier(idText(node.exportClause.name)) + moduleKind !== 2 /* AMD */ ? createRequireCall(node) : isExportNamespaceAsDefaultDeclaration(node) ? generatedName : node.exportClause.name.kind === 11 /* StringLiteral */ ? generatedName : factory2.createIdentifier(idText(node.exportClause.name)) ) ) ), @@ -108349,10 +109111,13 @@ function transformModule(context) { return statements; } function appendExportStatement(statements, seen, exportName, expression, location, allowComments, liveBinding) { - if (!seen.has(exportName)) { + if (exportName.kind !== 11 /* StringLiteral */) { + if (seen.has(exportName)) { + return statements; + } seen.set(exportName, true); - statements = append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding)); } + statements = append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding)); return statements; } function createUnderscoreUnderscoreESModule() { @@ -108422,7 +109187,10 @@ function transformModule(context) { ]) ] ) : factory2.createAssignment( - factory2.createPropertyAccessExpression( + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression( + factory2.createIdentifier("exports"), + factory2.cloneNode(name) + ) : factory2.createPropertyAccessExpression( factory2.createIdentifier("exports"), factory2.cloneNode(name) ), @@ -108558,11 +109326,9 @@ function transformModule(context) { ); } else if (isImportSpecifier(importDeclaration)) { const name = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(name) - ), + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(name)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(name)), /*location*/ node ); @@ -108850,7 +109616,7 @@ function transformSystemModule(context) { const exportedNames = []; if (moduleInfo.exportedNames) { for (const exportedLocalName of moduleInfo.exportedNames) { - if (exportedLocalName.escapedText === "default") { + if (moduleExportNameIsDefault(exportedLocalName)) { continue; } exportedNames.push( @@ -109028,10 +109794,10 @@ function transformSystemModule(context) { for (const e of entry.exportClause.elements) { properties.push( factory2.createPropertyAssignment( - factory2.createStringLiteral(idText(e.name)), + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.name)), factory2.createElementAccessExpression( parameterName, - factory2.createStringLiteral(idText(e.propertyName || e.name)) + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.propertyName || e.name)) ) ) ); @@ -109058,7 +109824,7 @@ function transformSystemModule(context) { /*typeArguments*/ void 0, [ - factory2.createStringLiteral(idText(entry.exportClause.name)), + factory2.createStringLiteral(moduleExportNameTextUnescaped(entry.exportClause.name)), parameterName ] ) @@ -109398,7 +110164,7 @@ function transformSystemModule(context) { const exportSpecifiers = moduleInfo.exportSpecifiers.get(name); if (exportSpecifiers) { for (const exportSpecifier of exportSpecifiers) { - if (exportSpecifier.name.escapedText !== excludeName) { + if (moduleExportNameTextUnescaped(exportSpecifier.name) !== excludeName) { statements = appendExportStatement(statements, exportSpecifier.name, name); } } @@ -109550,7 +110316,7 @@ function transformSystemModule(context) { return factory2.updateLabeledStatement( node, node.label, - Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createExpressionStatement(factory2.createIdentifier("")) ); } function visitWithStatement(node) { @@ -109564,7 +110330,7 @@ function transformSystemModule(context) { return factory2.updateIfStatement( node, visitNode(node.expression, visitor, isExpression), - Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ); } @@ -109819,13 +110585,12 @@ function transformSystemModule(context) { node ); } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( factory2.createPropertyAssignment( factory2.cloneNode(name), - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(importDeclaration.propertyName || importDeclaration.name) - ) + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)) ), /*location*/ node @@ -109868,11 +110633,10 @@ function transformSystemModule(context) { node ); } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(importDeclaration.propertyName || importDeclaration.name) - ), + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)), /*location*/ node ); @@ -110238,8 +111002,8 @@ function transformECMAScriptModule(context) { } } -// src/compiler/transformers/module/node.ts -function transformNodeModule(context) { +// src/compiler/transformers/module/impliedNodeFormatDependent.ts +function transformImpliedNodeFormatDependentModule(context) { const previousOnSubstituteNode = context.onSubstituteNode; const previousOnEmitNode = context.onEmitNode; const esmTransform = transformECMAScriptModule(context); @@ -110250,6 +111014,7 @@ function transformNodeModule(context) { const cjsTransform = transformModule(context); const cjsOnSubstituteNode = context.onSubstituteNode; const cjsOnEmitNode = context.onEmitNode; + const getEmitModuleFormatOfFile = (file) => context.getEmitHost().getEmitModuleFormatOfFile(file); context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; context.enableSubstitution(307 /* SourceFile */); @@ -110264,7 +111029,7 @@ function transformNodeModule(context) { if (!currentSourceFile) { return previousOnSubstituteNode(hint, node); } - if (currentSourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (getEmitModuleFormatOfFile(currentSourceFile) >= 5 /* ES2015 */) { return esmOnSubstituteNode(hint, node); } return cjsOnSubstituteNode(hint, node); @@ -110277,13 +111042,13 @@ function transformNodeModule(context) { if (!currentSourceFile) { return previousOnEmitNode(hint, node, emitCallback); } - if (currentSourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (getEmitModuleFormatOfFile(currentSourceFile) >= 5 /* ES2015 */) { return esmOnEmitNode(hint, node, emitCallback); } return cjsOnEmitNode(hint, node, emitCallback); } function getModuleTransformForFile(file) { - return file.impliedNodeFormat === 99 /* ESNext */ ? esmTransform : cjsTransform; + return getEmitModuleFormatOfFile(file) >= 5 /* ES2015 */ ? esmTransform : cjsTransform; } function transformSourceFile(node) { if (node.isDeclarationFile) { @@ -110705,7 +111470,11 @@ function createGetIsolatedDeclarationErrors(resolver) { if (isSetAccessor(node.parent)) { return createAccessorTypeError(node.parent); } - const addUndefined = resolver.requiresAddingImplicitUndefined(node); + const addUndefined = resolver.requiresAddingImplicitUndefined( + node, + /*enclosingDeclaration*/ + void 0 + ); if (!addUndefined && node.initializer) { return createExpressionError(node.initializer); } @@ -110760,19 +111529,19 @@ function createGetIsolatedDeclarationErrors(resolver) { function getDeclarationDiagnostics(host, resolver, file) { const compilerOptions = host.getCompilerOptions(); const files = filter(getSourceFilesToEmit(host, file), isSourceFileNotJson); - const result = transformNodes( + return contains(files, file) ? transformNodes( resolver, host, factory, compilerOptions, - file ? contains(files, file) ? [file] : emptyArray : files, + [file], [transformDeclarations], /*allowDtsFiles*/ false - ); - return result.diagnostics; + ).diagnostics : void 0; } -var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 1 /* AllowUnresolvedNames */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitInternalNodeBuilderFlags = 8 /* AllowUnresolvedNames */; function transformDeclarations(context) { const throwDiagnostic = () => Debug.fail("Diagnostic emitted without context"); let getSymbolAccessibilityDiagnostic = throwDiagnostic; @@ -110869,7 +111638,10 @@ function transformDeclarations(context) { function reportPrivateInBaseOfClassExpression(propertyName) { if (errorNameNode || errorFallbackNode) { context.addDiagnostic( - createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName) + addRelatedInfo( + createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected, propertyName), + ...isVariableDeclaration((errorNameNode || errorFallbackNode).parent) ? [createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Add_a_type_annotation_to_the_variable_0, errorDeclarationNameWithFallback())] : [] + ) ); } } @@ -110925,7 +111697,7 @@ function transformDeclarations(context) { diagnosticMessage: s.errorModuleName ? Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit : Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit, errorNode: s.errorNode || sourceFile }; - const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, symbolTracker); + const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); getSymbolAccessibilityDiagnostic = oldDiag; return result; } @@ -111178,7 +111950,7 @@ function transformDeclarations(context) { if (shouldPrintWithInitializer(node)) { return; } - const shouldAddImplicitUndefined = node.kind === 169 /* Parameter */ && resolver.requiresAddingImplicitUndefined(node); + const shouldAddImplicitUndefined = node.kind === 169 /* Parameter */ && resolver.requiresAddingImplicitUndefined(node, enclosingDeclaration); if (type && !shouldAddImplicitUndefined) { return visitNode(type, visitDeclarationSubtree, isTypeNode); } @@ -111195,7 +111967,7 @@ function transformDeclarations(context) { case 172 /* PropertyDeclaration */: case 208 /* BindingElement */: case 260 /* VariableDeclaration */: - typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker); + typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); break; case 262 /* FunctionDeclaration */: case 180 /* ConstructSignature */: @@ -111203,7 +111975,7 @@ function transformDeclarations(context) { case 174 /* MethodDeclaration */: case 177 /* GetAccessor */: case 179 /* CallSignature */: - typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker); + typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); break; default: Debug.assertNever(node); @@ -111804,7 +112576,7 @@ function transformDeclarations(context) { newId, /*exclamationToken*/ void 0, - resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), + resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ void 0 ); @@ -111930,7 +112702,7 @@ function transformDeclarations(context) { return void 0; } getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(p.valueDeclaration); - const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags | -2147483648 /* NoSyntacticPrinter */, symbolTracker); + const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags | 2 /* NoSyntacticPrinter */, symbolTracker); getSymbolAccessibilityDiagnostic = oldDiag; const isNonContextualKeywordName = isStringANonContextualKeyword(nameStr); const name = isNonContextualKeywordName ? factory2.getGeneratedNameForNode(p.valueDeclaration) : factory2.createIdentifier(nameStr); @@ -112133,7 +112905,7 @@ function transformDeclarations(context) { newId, /*exclamationToken*/ void 0, - resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), + resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ void 0 ); @@ -112406,17 +113178,18 @@ function isProcessedComponent(node) { // src/compiler/transformer.ts function getModuleTransformer(moduleKind) { switch (moduleKind) { + case 200 /* Preserve */: + return transformECMAScriptModule; case 99 /* ESNext */: case 7 /* ES2022 */: case 6 /* ES2020 */: case 5 /* ES2015 */: - case 200 /* Preserve */: - return transformECMAScriptModule; - case 4 /* System */: - return transformSystemModule; case 100 /* Node16 */: case 199 /* NodeNext */: - return transformNodeModule; + case 1 /* CommonJS */: + return transformImpliedNodeFormatDependentModule; + case 4 /* System */: + return transformSystemModule; default: return transformModule; } @@ -112840,16 +113613,16 @@ function isBuildInfoFile(file) { function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDtsEmit = false, onlyBuildInfo, includeBuildInfo) { const sourceFiles = isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile, forceDtsEmit); const options = host.getCompilerOptions(); - if (options.outFile) { - if (sourceFiles.length) { - const bundle = factory.createBundle(sourceFiles); - const result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle); - if (result) { - return result; + if (!onlyBuildInfo) { + if (options.outFile) { + if (sourceFiles.length) { + const bundle = factory.createBundle(sourceFiles); + const result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle); + if (result) { + return result; + } } - } - } else { - if (!onlyBuildInfo) { + } else { for (const sourceFile of sourceFiles) { const result = action(getOutputPathsFor(sourceFile, host, forceDtsEmit), sourceFile); if (result) { @@ -112857,19 +113630,19 @@ function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDt } } } - if (includeBuildInfo) { - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - if (buildInfoPath) return action( - { buildInfoPath }, - /*sourceFileOrBundle*/ - void 0 - ); - } + } + if (includeBuildInfo) { + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); + if (buildInfoPath) return action( + { buildInfoPath }, + /*sourceFileOrBundle*/ + void 0 + ); } } function getTsBuildInfoEmitOutputFilePath(options) { const configFile = options.configFilePath; - if (!isIncrementalCompilation(options)) return void 0; + if (!canEmitTsBuildInfo(options)) return void 0; if (options.tsBuildInfoFile) return options.tsBuildInfoFile; const outPath = options.outFile; let buildInfoExtensionLess; @@ -112887,14 +113660,16 @@ function getTsBuildInfoEmitOutputFilePath(options) { } return buildInfoExtensionLess + ".tsbuildinfo" /* TsBuildInfo */; } +function canEmitTsBuildInfo(options) { + return isIncrementalCompilation(options) || !!options.tscBuild; +} function getOutputPathsForBundle(options, forceDtsPaths) { const outPath = options.outFile; const jsFilePath = options.emitDeclarationOnly ? void 0 : outPath; const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) ? removeFileExtension(outPath) + ".d.ts" /* Dts */ : void 0; const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath }; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; } function getOutputPathsFor(sourceFile, host, forceDtsPaths) { const options = host.getCompilerOptions(); @@ -112908,7 +113683,7 @@ function getOutputPathsFor(sourceFile, host, forceDtsPaths) { const sourceMapFilePath = !jsFilePath || isJsonSourceFile(sourceFile) ? void 0 : getSourceMapFilePath(jsFilePath, options); const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) && !isJsonFile ? getDeclarationEmitOutputFilePath(sourceFile.fileName, host) : void 0; const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; - return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath: void 0 }; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; } } function getSourceMapFilePath(jsFilePath, options) { @@ -112957,7 +113732,7 @@ function createAddOutput() { } } function getSingleOutputFileNames(configFile, addOutput) { - const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath } = getOutputPathsForBundle( + const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle( configFile.options, /*forceDtsPaths*/ false @@ -112966,7 +113741,6 @@ function getSingleOutputFileNames(configFile, addOutput) { addOutput(sourceMapFilePath); addOutput(declarationFilePath); addOutput(declarationMapPath); - addOutput(buildInfoPath); } function getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2) { if (isDeclarationFileName(inputFileName)) return; @@ -113017,8 +113791,8 @@ function getAllProjectOutputs(configFile, ignoreCase) { for (const inputFileName of configFile.fileNames) { getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2); } - addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options)); } + addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options)); return getOutputs(); } function getFirstProjectOutput(configFile, ignoreCase) { @@ -113047,7 +113821,7 @@ function getFirstProjectOutput(configFile, ignoreCase) { function emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) { return !!forceDtsEmit && !!emitOnly; } -function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, declarationTransformers }, emitOnly, onlyBuildInfo, forceDtsEmit) { +function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, declarationTransformers }, emitOnly, onlyBuildInfo, forceDtsEmit, skipBuildInfo) { var compilerOptions = host.getCompilerOptions(); var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap || getAreDeclarationMapsEnabled(compilerOptions) ? [] : void 0; var emittedFilesList = compilerOptions.listEmittedFiles ? [] : void 0; @@ -113063,7 +113837,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit), forceDtsEmit, onlyBuildInfo, - !targetSourceFile + !targetSourceFile && !skipBuildInfo ); exit(); return { @@ -113085,15 +113859,12 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla (_f = tracing) == null ? void 0 : _f.pop(); } function emitBuildInfo(buildInfoPath) { - if (!buildInfoPath || targetSourceFile || emitSkipped) return; + if (!buildInfoPath || targetSourceFile) return; if (host.isEmitBlocked(buildInfoPath)) { emitSkipped = true; return; } - const buildInfo = host.getBuildInfo() || createBuildInfo( - /*program*/ - void 0 - ); + const buildInfo = host.getBuildInfo() || { version }; writeFile( host, emitterDiagnostics, @@ -113117,7 +113888,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla } (isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : filter(sourceFileOrBundle.sourceFiles, isSourceFileNotJson)).forEach( (sourceFile) => { - if (compilerOptions.noCheck || !canIncludeBindAndCheckDiagnsotics(sourceFile, compilerOptions)) markLinkedReferences(sourceFile); + if (compilerOptions.noCheck || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) markLinkedReferences(sourceFile); } ); const transform = transformNodes( @@ -113135,6 +113906,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla newLine: compilerOptions.newLine, noEmitHelpers: compilerOptions.noEmitHelpers, module: getEmitModuleKind(compilerOptions), + moduleResolution: getEmitModuleResolutionKind(compilerOptions), target: getEmitScriptTarget(compilerOptions), sourceMap: compilerOptions.sourceMap, inlineSourceMap: compilerOptions.inlineSourceMap, @@ -113169,7 +113941,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla const filesForEmit = forceDtsEmit ? sourceFiles : filter(sourceFiles, isSourceFileNotJson); const inputListOrBundle = compilerOptions.outFile ? [factory.createBundle(filesForEmit)] : filesForEmit; filesForEmit.forEach((sourceFile) => { - if (emitOnly && !getEmitDeclarations(compilerOptions) || compilerOptions.noCheck || emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) || !canIncludeBindAndCheckDiagnsotics(sourceFile, compilerOptions)) { + if (emitOnly && !getEmitDeclarations(compilerOptions) || compilerOptions.noCheck || emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) { collectLinkedAliases(sourceFile); } }); @@ -113197,6 +113969,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla newLine: compilerOptions.newLine, noEmitHelpers: true, module: compilerOptions.module, + moduleResolution: compilerOptions.moduleResolution, target: compilerOptions.target, sourceMap: emitOnly !== 2 /* BuilderSignature */ && compilerOptions.declarationMap, inlineSourceMap: compilerOptions.inlineSourceMap, @@ -113212,7 +113985,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla isEmitNotificationEnabled: declarationTransform.isEmitNotificationEnabled, substituteNode: declarationTransform.substituteNode }); - printSourceFileOrBundle( + const dtsWritten = printSourceFileOrBundle( declarationFilePath, declarationMapPath, declarationTransform, @@ -113226,7 +113999,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla } ); if (emittedFilesList) { - emittedFilesList.push(declarationFilePath); + if (dtsWritten) emittedFilesList.push(declarationFilePath); if (declarationMapPath) { emittedFilesList.push(declarationMapPath); } @@ -113255,6 +114028,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla forEachChild(node, collectLinkedAliases); } function markLinkedReferences(file) { + if (isSourceFileJS(file)) return; forEachChildRecursively(file, (n) => { if (isImportEqualsDeclaration(n) && !(getSyntacticModifierFlags(n) & 32 /* Export */)) return "skip"; if (isImportDeclaration(n)) return "skip"; @@ -113317,8 +114091,10 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla writer.writeLine(); } const text = writer.getText(); - writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, { sourceMapUrlPos, diagnostics: transform.diagnostics }); + const data = { sourceMapUrlPos, diagnostics: transform.diagnostics }; + writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, data); writer.clear(); + return !data.skippedDtsWrite; } function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) { return (mapOptions.sourceMap || mapOptions.inlineSourceMap) && (sourceFileOrBundle.kind !== 307 /* SourceFile */ || !fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */)); @@ -113374,9 +114150,6 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla return encodeURI(sourceMapFile); } } -function createBuildInfo(program) { - return { program, version }; -} function getBuildInfoText(buildInfo) { return JSON.stringify(buildInfo); } @@ -114239,7 +115012,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { } function getSortedEmitHelpers(node) { const helpers = getEmitHelpers(node); - return helpers && stableSort(helpers, compareEmitHelpers); + return helpers && toSorted(helpers, compareEmitHelpers); } function emitNumericOrBigIntLiteral(node) { emitLiteral( @@ -114249,7 +115022,13 @@ function createPrinter(printerOptions = {}, handlers = {}) { ); } function emitLiteral(node, jsxAttributeEscape) { - const text = getLiteralTextOfNode(node, printerOptions.neverAsciiEscape, jsxAttributeEscape); + const text = getLiteralTextOfNode( + node, + /*sourceFile*/ + void 0, + printerOptions.neverAsciiEscape, + jsxAttributeEscape + ); if ((printerOptions.sourceMap || printerOptions.inlineSourceMap) && (node.kind === 11 /* StringLiteral */ || isTemplateLiteralKind(node.kind))) { writeLiteral(text); } else { @@ -114730,6 +115509,8 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (isNumericLiteral(expression)) { const text = getLiteralTextOfNode( expression, + /*sourceFile*/ + void 0, /*neverAsciiEscape*/ true, /*jsxAttributeEscape*/ @@ -115951,7 +116732,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (node.comment) { const text = getTextOfJSDocComment(node.comment); if (text) { - const lines = text.split(/\r\n?|\n/g); + const lines = text.split(/\r\n?|\n/); for (const line of lines) { writeLine(); writeSpace(); @@ -116378,7 +117159,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (isFunctionLike(parentNode) && parentNode.typeArguments) { return emitTypeArguments(parentNode, parentNode.typeArguments); } - emitList(parentNode, typeParameters, 53776 /* TypeParameters */); + emitList(parentNode, typeParameters, 53776 /* TypeParameters */ | (isArrowFunction(parentNode) ? 64 /* AllowTrailingComma */ : 0 /* None */)); } function emitParameters(parentNode, parameters) { emitList(parentNode, parameters, 2576 /* Parameters */); @@ -116646,7 +117427,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { } } function writeLines(text) { - const lines = text.split(/\r\n?|\n/g); + const lines = text.split(/\r\n?|\n/); const indentation = guessIndentation(lines); for (const lineText of lines) { const line = indentation ? lineText.slice(indentation) : lineText; @@ -116871,18 +117652,18 @@ function createPrinter(printerOptions = {}, handlers = {}) { } return getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia); } - function getLiteralTextOfNode(node, neverAsciiEscape, jsxAttributeEscape) { + function getLiteralTextOfNode(node, sourceFile = currentSourceFile, neverAsciiEscape, jsxAttributeEscape) { if (node.kind === 11 /* StringLiteral */ && node.textSourceNode) { const textSourceNode = node.textSourceNode; if (isIdentifier(textSourceNode) || isPrivateIdentifier(textSourceNode) || isNumericLiteral(textSourceNode) || isJsxNamespacedName(textSourceNode)) { const text = isNumericLiteral(textSourceNode) ? textSourceNode.text : getTextOfNode2(textSourceNode); return jsxAttributeEscape ? `"${escapeJsxAttributeString(text)}"` : neverAsciiEscape || getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? `"${escapeString(text)}"` : `"${escapeNonAsciiString(text)}"`; } else { - return getLiteralTextOfNode(textSourceNode, neverAsciiEscape, jsxAttributeEscape); + return getLiteralTextOfNode(textSourceNode, getSourceFileOfNode(textSourceNode), neverAsciiEscape, jsxAttributeEscape); } } const flags = (neverAsciiEscape ? 1 /* NeverAsciiEscape */ : 0) | (jsxAttributeEscape ? 2 /* JsxAttributeEscape */ : 0) | (printerOptions.terminateUnterminatedLiterals ? 4 /* TerminateUnterminatedLiterals */ : 0) | (printerOptions.target && printerOptions.target >= 8 /* ES2021 */ ? 8 /* AllowNumericSeparator */ : 0); - return getLiteralText(node, currentSourceFile, flags); + return getLiteralText(node, sourceFile, flags); } function pushNameGenerationScope(node) { privateNameTempFlagsStack.push(privateNameTempFlags); @@ -117883,7 +118664,7 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi } try { return createCachedFileSystemEntries(rootDir, rootDirPath); - } catch (_e) { + } catch { Debug.assert(!cachedReadDirectoryResult.has(ensureTrailingDirectorySeparator(rootDirPath))); return void 0; } @@ -117972,6 +118753,12 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi function realpath(s) { return host.realpath ? host.realpath(s) : s; } + function clearFirstAncestorEntry(fileOrDirectoryPath) { + forEachAncestorDirectory( + getDirectoryPath(fileOrDirectoryPath), + (ancestor) => cachedReadDirectoryResult.delete(ensureTrailingDirectorySeparator(ancestor)) ? true : void 0 + ); + } function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) { const existingResult = getCachedFileSystemEntries(fileOrDirectoryPath); if (existingResult !== void 0) { @@ -117980,6 +118767,7 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi } const parentResult = getCachedFileSystemEntriesForBaseDir(fileOrDirectoryPath); if (!parentResult) { + clearFirstAncestorEntry(fileOrDirectoryPath); return void 0; } if (!host.directoryExists) { @@ -118005,6 +118793,8 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi const parentResult = getCachedFileSystemEntriesForBaseDir(filePath); if (parentResult) { updateFilesOfFileSystemEntry(parentResult, getBaseNameOfFileName(fileName), eventKind === 0 /* Created */); + } else { + clearFirstAncestorEntry(filePath); } } function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists2) { @@ -118157,7 +118947,7 @@ function isIgnoredFileFromWildCardWatching({ } return false; function hasSourceFile(file) { - return realProgram ? !!realProgram.getSourceFileByPath(file) : builderProgram ? builderProgram.getState().fileInfos.has(file) : !!find(program, (rootFile) => toPath3(rootFile) === file); + return realProgram ? !!realProgram.getSourceFileByPath(file) : builderProgram ? builderProgram.state.fileInfos.has(file) : !!find(program, (rootFile) => toPath3(rootFile) === file); } function isSupportedScriptKind() { if (!getScriptKind) return false; @@ -118178,9 +118968,6 @@ function isIgnoredFileFromWildCardWatching({ } } } -function isBuilderProgram(program) { - return !!program.getState; -} function isEmittedFileOfProgram(program, file) { if (!program) { return false; @@ -118655,9 +119442,6 @@ function flattenDiagnosticMessageText(diag2, newLine, indent2 = 0) { function getModeForFileReference(ref, containingFileMode) { return (isString(ref) ? containingFileMode : ref.resolutionMode) || containingFileMode; } -function getModeForResolutionAtIndex(file, index, compilerOptions) { - return getModeForUsageLocationWorker(file, getModuleNameStringLiteralAt(file, index), compilerOptions); -} function isExclusivelyTypeOnlyImportOrExport(decl) { var _a; if (isExportDeclaration(decl)) { @@ -118672,7 +119456,6 @@ function getModeForUsageLocation(file, usage, compilerOptions) { return getModeForUsageLocationWorker(file, usage, compilerOptions); } function getModeForUsageLocationWorker(file, usage, compilerOptions) { - var _a; if (isImportDeclaration(usage.parent) || isExportDeclaration(usage.parent) || isJSDocImportTag(usage.parent)) { const isTypeOnly = isExclusivelyTypeOnlyImportOrExport(usage.parent); if (isTypeOnly) { @@ -118688,19 +119471,28 @@ function getModeForUsageLocationWorker(file, usage, compilerOptions) { return override; } } - if (compilerOptions && getEmitModuleKind(compilerOptions) === 200 /* Preserve */) { - return usage.parent.parent && isImportEqualsDeclaration(usage.parent.parent) || isRequireCall( - usage.parent, - /*requireStringLiteralLikeArgument*/ - false - ) ? 1 /* CommonJS */ : 99 /* ESNext */; + if (compilerOptions && importSyntaxAffectsModuleResolution(compilerOptions)) { + return getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions); } - if (file.impliedNodeFormat === void 0) return void 0; - if (file.impliedNodeFormat !== 99 /* ESNext */) { - return isImportCall(walkUpParenthesizedExpressions(usage.parent)) ? 99 /* ESNext */ : 1 /* CommonJS */; +} +function getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions) { + var _a; + if (!compilerOptions) { + return void 0; } const exprParentParent = (_a = walkUpParenthesizedExpressions(usage.parent)) == null ? void 0 : _a.parent; - return exprParentParent && isImportEqualsDeclaration(exprParentParent) ? 1 /* CommonJS */ : 99 /* ESNext */; + if (exprParentParent && isImportEqualsDeclaration(exprParentParent) || isRequireCall( + usage.parent, + /*requireStringLiteralLikeArgument*/ + false + )) { + return 1 /* CommonJS */; + } + if (isImportCall(walkUpParenthesizedExpressions(usage.parent))) { + return shouldTransformImportCallWorker(file, compilerOptions) ? 1 /* CommonJS */ : 99 /* ESNext */; + } + const fileEmitMode = getEmitModuleFormatOfFileWorker(file, compilerOptions); + return fileEmitMode === 1 /* CommonJS */ ? 1 /* CommonJS */ : emitModuleKindIsNonNodeESM(fileEmitMode) || fileEmitMode === 200 /* Preserve */ ? 99 /* ESNext */ : void 0; } function getResolutionModeOverride(node, grammarErrorOnNode) { if (!node) return void 0; @@ -118757,7 +119549,7 @@ function getTypeReferenceResolutionName(entry) { } var typeReferenceResolutionNameAndModeGetter = { getName: getTypeReferenceResolutionName, - getMode: (entry, file) => getModeForFileReference(entry, file == null ? void 0 : file.impliedNodeFormat) + getMode: (entry, file, compilerOptions) => getModeForFileReference(entry, file && getDefaultResolutionModeForFileWorker(file, compilerOptions)) }; function createTypeReferenceResolutionLoader(containingFile, redirectedReference, options, host, cache) { return { @@ -118927,19 +119719,15 @@ function getConfigFileParsingDiagnostics(configFileParseResult) { return configFileParseResult.options.configFile ? [...configFileParseResult.options.configFile.parseDiagnostics, ...configFileParseResult.errors] : configFileParseResult.errors; } function getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options) { - switch (getEmitModuleResolutionKind(options)) { - case 3 /* Node16 */: - case 99 /* NodeNext */: - return fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".mjs" /* Mjs */]) ? 99 /* ESNext */ : fileExtensionIsOneOf(fileName, [".d.cts" /* Dcts */, ".cts" /* Cts */, ".cjs" /* Cjs */]) ? 1 /* CommonJS */ : fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */]) ? lookupFromPackageJson() : void 0; - default: - return void 0; - } + const moduleResolution = getEmitModuleResolutionKind(options); + const shouldLookupFromPackageJson = 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || pathContainsNodeModules(fileName); + return fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".mjs" /* Mjs */]) ? 99 /* ESNext */ : fileExtensionIsOneOf(fileName, [".d.cts" /* Dcts */, ".cts" /* Cts */, ".cjs" /* Cjs */]) ? 1 /* CommonJS */ : shouldLookupFromPackageJson && fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */]) ? lookupFromPackageJson() : void 0; function lookupFromPackageJson() { const state = getTemporaryModuleResolutionState(packageJsonInfoCache, host, options); const packageJsonLocations = []; state.failedLookupLocations = packageJsonLocations; state.affectingLocations = packageJsonLocations; - const packageJsonScope = getPackageScopeForPath(fileName, state); + const packageJsonScope = getPackageScopeForPath(getDirectoryPath(fileName), state); const impliedNodeFormat = (packageJsonScope == null ? void 0 : packageJsonScope.contents.packageJsonContent.type) === "module" ? 99 /* ESNext */ : 1 /* CommonJS */; return { impliedNodeFormat, packageJsonLocations, packageJsonScope }; } @@ -119075,13 +119863,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config let commonSourceDirectory; let typeChecker; let classifiableNames; - const ambientModuleNameToUnmodifiedFileName = /* @__PURE__ */ new Map(); let fileReasons = createMultiMap(); let filesWithReferencesProcessed; let fileReasonsToChain; let reasonToRelatedInfo; - const cachedBindAndCheckDiagnosticsForFile = {}; - const cachedDeclarationDiagnosticsForFile = {}; + let cachedBindAndCheckDiagnosticsForFile; + let cachedDeclarationDiagnosticsForFile; let fileProcessingDiagnostics; let automaticTypeDirectiveNames; let automaticTypeDirectiveResolutions; @@ -119313,7 +120100,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config }); } } - files = stableSort(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); + files = toSorted(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); processingDefaultLibFiles = void 0; processingOtherFiles = void 0; filesWithReferencesProcessed = void 0; @@ -119324,7 +120111,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || newFile.impliedNodeFormat !== oldSourceFile.impliedNodeFormat || // old file wasn't redirect but new file is oldSourceFile.resolvedPath === oldSourceFile.path && newFile.resolvedPath !== oldSourceFile.path) { - host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path)); + host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path), newFile); } } if (!host.getParsedCommandLine) { @@ -119334,7 +120121,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config resolvedProjectReference.sourceFile, oldProgram.getCompilerOptions(), /*hasSourceFileByPath*/ - false + false, + /*newSourceFileByResolvedPath*/ + void 0 ); } }); @@ -119392,7 +120181,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config isSourceFileFromExternalLibrary, isSourceFileDefaultLibrary, getModeForUsageLocation: getModeForUsageLocation2, - getModeForResolutionAtIndex: getModeForResolutionAtIndex2, + getEmitSyntaxForUsageLocation, + getModeForResolutionAtIndex, getSourceFileFromReference, getLibFileFromReference, sourceFileToPackageName, @@ -119420,6 +120210,11 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config forEachResolvedProjectReference: forEachResolvedProjectReference2, isSourceOfProjectReferenceRedirect, getRedirectReferenceForResolutionFromSourceOfProject, + getCompilerOptionsForFile, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getEmitModuleFormatOfFile, + getImpliedNodeFormatForEmit, + shouldTransformImportCall, emitBuildInfo, fileExists, readFile, @@ -119551,12 +120346,18 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function resolveModuleNamesWorker(moduleNames, containingFile, reusedNames) { var _a2, _b2; - if (!moduleNames.length) return emptyArray; const containingFileName = getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory); const redirectedReference = getRedirectReferenceForResolution(containingFile); (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveModuleNamesWorker", { containingFileName }); mark("beforeResolveModule"); - const result = actualResolveModuleNamesWorker(moduleNames, containingFileName, redirectedReference, options, containingFile, reusedNames); + const result = actualResolveModuleNamesWorker( + moduleNames, + containingFileName, + redirectedReference, + options, + containingFile, + reusedNames + ); mark("afterResolveModule"); measure("ResolveModule", "beforeResolveModule", "afterResolveModule"); (_b2 = tracing) == null ? void 0 : _b2.pop(); @@ -119564,13 +120365,19 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function resolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFile, reusedNames) { var _a2, _b2; - if (!typeDirectiveNames.length) return []; const containingSourceFile = !isString(containingFile) ? containingFile : void 0; const containingFileName = !isString(containingFile) ? getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile; const redirectedReference = containingSourceFile && getRedirectReferenceForResolution(containingSourceFile); (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveTypeReferenceDirectiveNamesWorker", { containingFileName }); mark("beforeResolveTypeReference"); - const result = actualResolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFileName, redirectedReference, options, containingSourceFile, reusedNames); + const result = actualResolveTypeReferenceDirectiveNamesWorker( + typeDirectiveNames, + containingFileName, + redirectedReference, + options, + containingSourceFile, + reusedNames + ); mark("afterResolveTypeReference"); measure("ResolveTypeReference", "beforeResolveTypeReference", "afterResolveTypeReference"); (_b2 = tracing) == null ? void 0 : _b2.pop(); @@ -119640,144 +120447,108 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } return classifiableNames; } - function resolveModuleNamesReusingOldState(moduleNames, file) { - if (structureIsReused === 0 /* Not */ && !file.ambientModuleNames.length) { - return resolveModuleNamesWorker( - moduleNames, - file, + function resolveModuleNamesReusingOldState(moduleNames, containingFile) { + return resolveNamesReusingOldState({ + entries: moduleNames, + containingFile, + containingSourceFile: containingFile, + redirectedReference: getRedirectReferenceForResolution(containingFile), + nameAndModeGetter: moduleResolutionNameAndModeGetter, + resolutionWorker: resolveModuleNamesWorker, + getResolutionFromOldProgram: (name, mode) => oldProgram == null ? void 0 : oldProgram.getResolvedModule(containingFile, name, mode), + getResolved: getResolvedModuleFromResolution, + canReuseResolutionsInFile: () => containingFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingFile.fileName)) && !hasInvalidatedResolutions(containingFile.path), + resolveToOwnAmbientModule: true + }); + } + function resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectiveNames, containingFile) { + const containingSourceFile = !isString(containingFile) ? containingFile : void 0; + return resolveNamesReusingOldState({ + entries: typeDirectiveNames, + containingFile, + containingSourceFile, + redirectedReference: containingSourceFile && getRedirectReferenceForResolution(containingSourceFile), + nameAndModeGetter: typeReferenceResolutionNameAndModeGetter, + resolutionWorker: resolveTypeReferenceDirectiveNamesWorker, + getResolutionFromOldProgram: (name, mode) => { + var _a2; + return containingSourceFile ? oldProgram == null ? void 0 : oldProgram.getResolvedTypeReferenceDirective(containingSourceFile, name, mode) : (_a2 = oldProgram == null ? void 0 : oldProgram.getAutomaticTypeDirectiveResolutions()) == null ? void 0 : _a2.get(name, mode); + }, + getResolved: getResolvedTypeReferenceDirectiveFromResolution, + canReuseResolutionsInFile: () => containingSourceFile ? containingSourceFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingSourceFile.fileName)) && !hasInvalidatedResolutions(containingSourceFile.path) : !hasInvalidatedResolutions(toPath3(containingFile)) + }); + } + function resolveNamesReusingOldState({ + entries, + containingFile, + containingSourceFile, + redirectedReference, + nameAndModeGetter, + resolutionWorker, + getResolutionFromOldProgram, + getResolved, + canReuseResolutionsInFile, + resolveToOwnAmbientModule + }) { + if (!entries.length) return emptyArray; + if (structureIsReused === 0 /* Not */ && (!resolveToOwnAmbientModule || !containingSourceFile.ambientModuleNames.length)) { + return resolutionWorker( + entries, + containingFile, /*reusedNames*/ void 0 ); } - let unknownModuleNames; + let unknownEntries; + let unknownEntryIndices; let result; let reusedNames; - const predictedToResolveToAmbientModuleMarker = emptyResolution; - const oldSourceFile = oldProgram && oldProgram.getSourceFile(file.fileName); - for (let i = 0; i < moduleNames.length; i++) { - const moduleName = moduleNames[i]; - if (file === oldSourceFile && !hasInvalidatedResolutions(file.path)) { - const oldResolution = oldProgram == null ? void 0 : oldProgram.getResolvedModule(file, moduleName.text, getModeForUsageLocation2(file, moduleName)); - if (oldResolution == null ? void 0 : oldResolution.resolvedModule) { + const reuseResolutions = canReuseResolutionsInFile(); + for (let i = 0; i < entries.length; i++) { + const entry = entries[i]; + if (reuseResolutions) { + const name = nameAndModeGetter.getName(entry); + const mode = nameAndModeGetter.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) ?? options); + const oldResolution = getResolutionFromOldProgram(name, mode); + const oldResolved = oldResolution && getResolved(oldResolution); + if (oldResolved) { if (isTraceEnabled(options, host)) { trace( host, - oldResolution.resolvedModule.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, - moduleName.text, - getNormalizedAbsolutePath(file.originalFileName, currentDirectory), - oldResolution.resolvedModule.resolvedFileName, - oldResolution.resolvedModule.packageId && packageIdToString(oldResolution.resolvedModule.packageId) + resolutionWorker === resolveModuleNamesWorker ? oldResolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : oldResolved.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2, + name, + containingSourceFile ? getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) : containingFile, + oldResolved.resolvedFileName, + oldResolved.packageId && packageIdToString(oldResolved.packageId) ); } - (result ?? (result = new Array(moduleNames.length)))[i] = oldResolution; - (reusedNames ?? (reusedNames = [])).push(moduleName); + (result ?? (result = new Array(entries.length)))[i] = oldResolution; + (reusedNames ?? (reusedNames = [])).push(entry); continue; } } - let resolvesToAmbientModuleInNonModifiedFile = false; - if (contains(file.ambientModuleNames, moduleName.text)) { - resolvesToAmbientModuleInNonModifiedFile = true; - if (isTraceEnabled(options, host)) { - trace(host, Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, moduleName.text, getNormalizedAbsolutePath(file.originalFileName, currentDirectory)); - } - } else { - resolvesToAmbientModuleInNonModifiedFile = moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName); - } - if (resolvesToAmbientModuleInNonModifiedFile) { - (result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker; - } else { - (unknownModuleNames ?? (unknownModuleNames = [])).push(moduleName); - } - } - const resolutions = unknownModuleNames && unknownModuleNames.length ? resolveModuleNamesWorker(unknownModuleNames, file, reusedNames) : emptyArray; - if (!result) { - Debug.assert(resolutions.length === moduleNames.length); - return resolutions; - } - let j = 0; - for (let i = 0; i < result.length; i++) { - if (!result[i]) { - result[i] = resolutions[j]; - j++; - } - } - Debug.assert(j === resolutions.length); - return result; - function moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName) { - var _a2; - const resolutionToFile = (_a2 = oldProgram == null ? void 0 : oldProgram.getResolvedModule(file, moduleName.text, getModeForUsageLocation2(file, moduleName))) == null ? void 0 : _a2.resolvedModule; - const resolvedFile = resolutionToFile && oldProgram.getSourceFile(resolutionToFile.resolvedFileName); - if (resolutionToFile && resolvedFile) { - return false; - } - const unmodifiedFile = ambientModuleNameToUnmodifiedFileName.get(moduleName.text); - if (!unmodifiedFile) { - return false; - } - if (isTraceEnabled(options, host)) { - trace(host, Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified, moduleName.text, unmodifiedFile); - } - return true; - } - } - function resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectiveNames, containingFile) { - var _a2; - if (structureIsReused === 0 /* Not */) { - return resolveTypeReferenceDirectiveNamesWorker( - typeDirectiveNames, - containingFile, - /*reusedNames*/ - void 0 - ); - } - let unknownTypeReferenceDirectiveNames; - let result; - let reusedNames; - const containingSourceFile = !isString(containingFile) ? containingFile : void 0; - const oldSourceFile = !isString(containingFile) ? oldProgram && oldProgram.getSourceFile(containingFile.fileName) : void 0; - const canReuseResolutions = !isString(containingFile) ? containingFile === oldSourceFile && !hasInvalidatedResolutions(containingFile.path) : !hasInvalidatedResolutions(toPath3(containingFile)); - for (let i = 0; i < typeDirectiveNames.length; i++) { - const entry = typeDirectiveNames[i]; - if (canReuseResolutions) { - const typeDirectiveName = getTypeReferenceResolutionName(entry); - const mode = getModeForFileReference(entry, containingSourceFile == null ? void 0 : containingSourceFile.impliedNodeFormat); - const oldResolution = !isString(containingFile) ? oldProgram == null ? void 0 : oldProgram.getResolvedTypeReferenceDirective(containingFile, typeDirectiveName, mode) : (_a2 = oldProgram == null ? void 0 : oldProgram.getAutomaticTypeDirectiveResolutions()) == null ? void 0 : _a2.get(typeDirectiveName, mode); - if (oldResolution == null ? void 0 : oldResolution.resolvedTypeReferenceDirective) { + if (resolveToOwnAmbientModule) { + const name = nameAndModeGetter.getName(entry); + if (contains(containingSourceFile.ambientModuleNames, name)) { if (isTraceEnabled(options, host)) { trace( host, - oldResolution.resolvedTypeReferenceDirective.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2, - typeDirectiveName, - !isString(containingFile) ? getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile, - oldResolution.resolvedTypeReferenceDirective.resolvedFileName, - oldResolution.resolvedTypeReferenceDirective.packageId && packageIdToString(oldResolution.resolvedTypeReferenceDirective.packageId) + Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, + name, + getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) ); } - (result ?? (result = new Array(typeDirectiveNames.length)))[i] = oldResolution; - (reusedNames ?? (reusedNames = [])).push(entry); + (result ?? (result = new Array(entries.length)))[i] = emptyResolution; continue; } } - (unknownTypeReferenceDirectiveNames ?? (unknownTypeReferenceDirectiveNames = [])).push(entry); - } - if (!unknownTypeReferenceDirectiveNames) return result || emptyArray; - const resolutions = resolveTypeReferenceDirectiveNamesWorker( - unknownTypeReferenceDirectiveNames, - containingFile, - reusedNames - ); - if (!result) { - Debug.assert(resolutions.length === typeDirectiveNames.length); - return resolutions; - } - let j = 0; - for (let i = 0; i < result.length; i++) { - if (!result[i]) { - result[i] = resolutions[j]; - j++; - } + (unknownEntries ?? (unknownEntries = [])).push(entry); + (unknownEntryIndices ?? (unknownEntryIndices = [])).push(i); } - Debug.assert(j === resolutions.length); + if (!unknownEntries) return result; + const resolutions = resolutionWorker(unknownEntries, containingFile, reusedNames); + if (!result) return resolutions; + resolutions.forEach((resolution, index) => result[unknownEntryIndices[index]] = resolution); return result; } function canReuseProjectReferences() { @@ -119906,10 +120677,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } else if (hasInvalidatedResolutions(oldSourceFile.path)) { structureIsReused = 1 /* SafeModules */; modifiedSourceFiles.push(newSourceFile); - } else { - for (const moduleName of oldSourceFile.ambientModuleNames) { - ambientModuleNameToUnmodifiedFileName.set(moduleName, oldSourceFile.fileName); - } } newSourceFiles.push(newSourceFile); } @@ -120002,6 +120769,10 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config getSymlinkCache, writeFile: writeFileCallback || writeFile2, isEmitBlocked, + shouldTransformImportCall, + getEmitModuleFormatOfFile, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getModeForResolutionAtIndex, readFile: (f) => host.readFile(f), fileExists: (f) => { const path = toPath3(f); @@ -120028,7 +120799,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function emitBuildInfo(writeFileCallback) { var _a2, _b2; - Debug.assert(!options.outFile); (_a2 = tracing) == null ? void 0 : _a2.push( tracing.Phase.Emit, "emitBuildInfo", @@ -120070,20 +120840,23 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (file.hasNoDefaultLib) { return true; } - if (!options.noLib) { + if (options.noLib) { return false; } const equalityComparer = host.useCaseSensitiveFileNames() ? equateStringsCaseSensitive : equateStringsCaseInsensitive; if (!options.lib) { return equalityComparer(file.fileName, getDefaultLibraryFileName()); } else { - return some(options.lib, (libFileName) => equalityComparer(file.fileName, resolvedLibReferences.get(libFileName).actual)); + return some(options.lib, (libFileName) => { + const resolvedLib = resolvedLibReferences.get(libFileName); + return !!resolvedLib && equalityComparer(file.fileName, resolvedLib.actual); + }); } } function getTypeChecker() { return typeChecker || (typeChecker = createTypeChecker(program)); } - function emit(sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit) { + function emit(sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit, skipBuildInfo) { var _a2, _b2; (_a2 = tracing) == null ? void 0 : _a2.push( tracing.Phase.Emit, @@ -120092,14 +120865,25 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config /*separateBeginAndEnd*/ true ); - const result = runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit)); + const result = runWithCancellationToken( + () => emitWorker( + program, + sourceFile, + writeFileCallback, + cancellationToken, + emitOnly, + transformers, + forceDtsEmit, + skipBuildInfo + ) + ); (_b2 = tracing) == null ? void 0 : _b2.pop(); return result; } function isEmitBlocked(emitFileName) { return hasEmitBlockingDiagnostics.has(toPath3(emitFileName)); } - function emitWorker(program2, sourceFile, writeFileCallback, cancellationToken, emitOnly, customTransformers, forceDtsEmit) { + function emitWorker(program2, sourceFile, writeFileCallback, cancellationToken, emitOnly, customTransformers, forceDtsEmit, skipBuildInfo) { if (!forceDtsEmit) { const result = handleNoEmitOptions(program2, sourceFile, writeFileCallback, cancellationToken); if (result) return result; @@ -120121,7 +120905,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config emitOnly, /*onlyBuildInfo*/ false, - forceDtsEmit + forceDtsEmit, + skipBuildInfo ) ); mark("afterEmit"); @@ -120148,15 +120933,23 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function getSyntacticDiagnostics(sourceFile, cancellationToken) { return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken); } - function getSemanticDiagnostics(sourceFile, cancellationToken) { - return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile, cancellationToken); + function getSemanticDiagnostics(sourceFile, cancellationToken, nodesToCheck) { + return getDiagnosticsHelper( + sourceFile, + (sourceFile2, cancellationToken2) => getSemanticDiagnosticsForFile(sourceFile2, cancellationToken2, nodesToCheck), + cancellationToken + ); } function getCachedSemanticDiagnostics(sourceFile) { - var _a2; - return sourceFile ? (_a2 = cachedBindAndCheckDiagnosticsForFile.perFile) == null ? void 0 : _a2.get(sourceFile.path) : cachedBindAndCheckDiagnosticsForFile.allDiagnostics; + return cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); } function getBindAndCheckDiagnostics(sourceFile, cancellationToken) { - return getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken); + return getBindAndCheckDiagnosticsForFile( + sourceFile, + cancellationToken, + /*nodesToCheck*/ + void 0 + ); } function getProgramDiagnostics(sourceFile) { var _a2; @@ -120170,12 +120963,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, programDiagnosticsInFile).diagnostics; } function getDeclarationDiagnostics2(sourceFile, cancellationToken) { - const options2 = program.getCompilerOptions(); - if (!sourceFile || options2.outFile) { - return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); - } else { - return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); - } + return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); } function getSyntacticDiagnosticsForFile(sourceFile) { if (isSourceFileJS(sourceFile)) { @@ -120196,16 +120984,26 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config throw e; } } - function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) { + function getSemanticDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { return concatenate( - filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), + filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck), options), getProgramDiagnostics(sourceFile) ); } - function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) { - return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache); + function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { + if (nodesToCheck) { + return getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck); + } + let result = cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedBindAndCheckDiagnosticsForFile ?? (cachedBindAndCheckDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; } - function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) { + function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck) { return runWithCancellationToken(() => { if (skipTypeChecking(sourceFile, options, program)) { return emptyArray; @@ -120213,24 +121011,34 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const typeChecker2 = getTypeChecker(); Debug.assert(!!sourceFile.bindDiagnostics); const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; - const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); const isPlainJs = isPlainJsFile(sourceFile, options.checkJs); + const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); let bindDiagnostics = sourceFile.bindDiagnostics; - let checkDiagnostics = typeChecker2.getDiagnostics(sourceFile, cancellationToken); + let checkDiagnostics = typeChecker2.getDiagnostics(sourceFile, cancellationToken, nodesToCheck); if (isPlainJs) { bindDiagnostics = filter(bindDiagnostics, (d) => plainJSErrors.has(d.code)); checkDiagnostics = filter(checkDiagnostics, (d) => plainJSErrors.has(d.code)); } - return getMergedBindAndCheckDiagnostics(sourceFile, !isPlainJs, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : void 0); + return getMergedBindAndCheckDiagnostics( + sourceFile, + !isPlainJs, + !!nodesToCheck, + bindDiagnostics, + checkDiagnostics, + isCheckJs ? sourceFile.jsDocDiagnostics : void 0 + ); }); } - function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, ...allDiagnostics) { + function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, partialCheck, ...allDiagnostics) { var _a2; const flatDiagnostics = flatten(allDiagnostics); if (!includeBindAndCheckDiagnostics || !((_a2 = sourceFile.commentDirectives) == null ? void 0 : _a2.length)) { return flatDiagnostics; } const { diagnostics, directives } = getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, flatDiagnostics); + if (partialCheck) { + return diagnostics; + } for (const errorExpectation of directives.getUnusedExpectations()) { diagnostics.push(createDiagnosticForRange(sourceFile, errorExpectation.range, Diagnostics.Unused_ts_expect_error_directive)); } @@ -120258,7 +121066,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return line; } const lineText = file.text.slice(lineStarts[line], lineStarts[line + 1]).trim(); - if (lineText !== "" && !/^(\s*)\/\/(.*)$/.test(lineText)) { + if (lineText !== "" && !/^\s*\/\/.*$/.test(lineText)) { return -1; } line--; @@ -120481,7 +121289,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config }); } function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) { - return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedDeclarationDiagnosticsForFile, getDeclarationDiagnosticsForFileNoCache); + let result = cachedDeclarationDiagnosticsForFile == null ? void 0 : cachedDeclarationDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedDeclarationDiagnosticsForFile ?? (cachedDeclarationDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; } function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(() => { @@ -120489,22 +121304,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return getDeclarationDiagnostics(getEmitHost(noop), resolver, sourceFile) || emptyArray; }); } - function getAndCacheDiagnostics(sourceFile, cancellationToken, cache, getDiagnostics) { - var _a2; - const cachedResult = sourceFile ? (_a2 = cache.perFile) == null ? void 0 : _a2.get(sourceFile.path) : cache.allDiagnostics; - if (cachedResult) { - return cachedResult; - } - const result = getDiagnostics(sourceFile, cancellationToken); - if (sourceFile) { - (cache.perFile || (cache.perFile = /* @__PURE__ */ new Map())).set(sourceFile.path, result); - } else { - cache.allDiagnostics = result; - } - return result; - } function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) { - return sourceFile.isDeclarationFile ? [] : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); + return sourceFile.isDeclarationFile ? emptyArray : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); } function getOptionsDiagnostics() { return sortAndDeduplicateDiagnostics(concatenate( @@ -121051,10 +121852,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const resolvedTypeReferenceDirective = resolutions[index]; const fileName = ref.fileName; resolutionsInFile.set(fileName, getModeForFileReference(ref, file.impliedNodeFormat), resolvedTypeReferenceDirective); - const mode = ref.resolutionMode || file.impliedNodeFormat; + const mode = ref.resolutionMode || getDefaultResolutionModeForFile2(file); processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: 5 /* TypeReferenceDirective */, file: file.path, index }); } } + function getCompilerOptionsForFile(file) { + var _a2; + return ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; + } function processTypeReferenceDirective(typeReferenceDirective, mode, resolution, reason) { var _a2, _b2; (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "processTypeReferenceDirective", { directive: typeReferenceDirective, hasResolved: !!resolution.resolvedTypeReferenceDirective, refKind: reason.kind, refPath: isReferencedFile(reason) ? reason.file : void 0 }); @@ -121155,13 +121960,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return host.getCanonicalFileName(fileName); } function processImportedModules(file) { - var _a2; collectExternalModuleReferences(file); if (file.imports.length || file.moduleAugmentations.length) { const moduleNames = getModuleNames(file); const resolutions = (resolvedModulesProcessing == null ? void 0 : resolvedModulesProcessing.get(file.path)) || resolveModuleNamesReusingOldState(moduleNames, file); Debug.assert(resolutions.length === moduleNames.length); - const optionsForFile = ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; + const optionsForFile = getCompilerOptionsForFile(file); const resolutionsInFile = createModeAwareCache(); (resolvedModules ?? (resolvedModules = /* @__PURE__ */ new Map())).set(file.path, resolutionsInFile); for (let index = 0; index < moduleNames.length; index++) { @@ -121326,8 +122130,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } const outputFile = options.outFile; if (options.tsBuildInfoFile) { - if (!isIncrementalCompilation(options)) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "tsBuildInfoFile", "incremental", "composite"); + if (!canEmitTsBuildInfo(options)) { + createDiagnosticForOptionName(Diagnostics.Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if_not_running_tsc_b, "tsBuildInfoFile"); } } else if (options.incremental && !outputFile && !options.configFilePath) { programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)); @@ -121466,14 +122270,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (!getEmitDeclarations(options)) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "emitDeclarationOnly", "declaration", "composite"); } - if (options.noEmit) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "emitDeclarationOnly", "noEmit"); - } - } - if (options.noCheck) { - if (options.noEmit) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "noCheck", "noEmit"); - } } if (options.emitDecoratorMetadata && !options.experimentalDecorators) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"); @@ -121585,7 +122381,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } return Version.zero; } - function checkDeprecations(deprecatedIn, stopsWorkingIn, removedIn, createDiagnostic, fn) { + function checkDeprecations(deprecatedIn, removedIn, createDiagnostic, fn) { const deprecatedInVersion = new Version(deprecatedIn); const removedInVersion = new Version(removedIn); const typescriptVersion = new Version(typeScriptVersion2 || versionMajorMinor); @@ -121602,9 +122398,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } } else { if (value === void 0) { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, stopsWorkingIn, deprecatedIn); + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn); } else { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, stopsWorkingIn, deprecatedIn); + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn); } } }); @@ -121640,7 +122436,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config ); } } - checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => { + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { if (options.target === 0 /* ES3 */) { createDeprecatedDiagnostic("target", "ES3"); } @@ -121692,7 +122488,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function createDiagnostic(_name, _value, _useInstead, message, ...args) { createDiagnosticForReference(parentFile, index, message, ...args); } - checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => { + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { if (ref.prepend) { createDeprecatedDiagnostic("prepend"); } @@ -121718,7 +122514,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config redirectInfo = cachedChain.redirectInfo; } else { reasons == null ? void 0 : reasons.forEach(processReason); - redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file); + redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file, getCompilerOptionsForFile(file)); } if (fileProcessingReason) processReason(fileProcessingReason); const processedExtraReason = (seenReasons == null ? void 0 : seenReasons.size) !== (reasons == null ? void 0 : reasons.length); @@ -122076,13 +122872,53 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return symlinks; } function getModeForUsageLocation2(file, usage) { - var _a2; - const optionsForFile = ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; - return getModeForUsageLocationWorker(file, usage, optionsForFile); + return getModeForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); } - function getModeForResolutionAtIndex2(file, index) { + function getEmitSyntaxForUsageLocation(file, usage) { + return getEmitSyntaxForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); + } + function getModeForResolutionAtIndex(file, index) { return getModeForUsageLocation2(file, getModuleNameStringLiteralAt(file, index)); } + function getDefaultResolutionModeForFile2(sourceFile) { + return getDefaultResolutionModeForFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getImpliedNodeFormatForEmit(sourceFile) { + return getImpliedNodeFormatForEmitWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getEmitModuleFormatOfFile(sourceFile) { + return getEmitModuleFormatOfFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function shouldTransformImportCall(sourceFile) { + return shouldTransformImportCallWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } +} +function shouldTransformImportCallWorker(sourceFile, options) { + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */) { + return false; + } + return getEmitModuleFormatOfFileWorker(sourceFile, options) < 5 /* ES2015 */; +} +function getEmitModuleFormatOfFileWorker(sourceFile, options) { + return getImpliedNodeFormatForEmitWorker(sourceFile, options) ?? getEmitModuleKind(options); +} +function getImpliedNodeFormatForEmitWorker(sourceFile, options) { + var _a, _b; + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return sourceFile.impliedNodeFormat; + } + if (sourceFile.impliedNodeFormat === 1 /* CommonJS */ && (((_a = sourceFile.packageJsonScope) == null ? void 0 : _a.contents.packageJsonContent.type) === "commonjs" || fileExtensionIsOneOf(sourceFile.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */]))) { + return 1 /* CommonJS */; + } + if (sourceFile.impliedNodeFormat === 99 /* ESNext */ && (((_b = sourceFile.packageJsonScope) == null ? void 0 : _b.contents.packageJsonContent.type) === "module" || fileExtensionIsOneOf(sourceFile.fileName, [".mjs" /* Mjs */, ".mts" /* Mts */]))) { + return 99 /* ESNext */; + } + return void 0; +} +function getDefaultResolutionModeForFileWorker(sourceFile, options) { + return importSyntaxAffectsModuleResolution(options) ? getImpliedNodeFormatForEmitWorker(sourceFile, options) : void 0; } function updateHostForUseSourceOfProjectReferenceRedirect(host) { let setOfDeclarationDirectories; @@ -122210,8 +123046,7 @@ var emitSkippedWithNoDiagnostics = { diagnostics: emptyArray, sourceMaps: void 0 function handleNoEmitOptions(program, sourceFile, writeFile2, cancellationToken) { const options = program.getCompilerOptions(); if (options.noEmit) { - program.getSemanticDiagnostics(sourceFile, cancellationToken); - return sourceFile || options.outFile ? emitSkippedWithNoDiagnostics : program.emitBuildInfo(writeFile2, cancellationToken); + return sourceFile ? emitSkippedWithNoDiagnostics : program.emitBuildInfo(writeFile2, cancellationToken); } if (!options.noEmitOnError) return void 0; let diagnostics = [ @@ -122229,7 +123064,7 @@ function handleNoEmitOptions(program, sourceFile, writeFile2, cancellationToken) } if (!diagnostics.length) return void 0; let emittedFiles; - if (!sourceFile && !options.outFile) { + if (!sourceFile) { const emitResult = program.emitBuildInfo(writeFile2, cancellationToken); if (emitResult.diagnostics) diagnostics = [...diagnostics, ...emitResult.diagnostics]; emittedFiles = emitResult.emittedFiles; @@ -122675,13 +123510,20 @@ var BuilderState; })(BuilderState || (BuilderState = {})); // src/compiler/builder.ts +function isBuilderProgramStateWithDefinedProgram(state) { + return state.program !== void 0; +} +function toBuilderProgramStateWithDefinedProgram(state) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + return state; +} function getBuilderFileEmit(options) { let result = 1 /* Js */; if (options.sourceMap) result = result | 2 /* JsMap */; if (options.inlineSourceMap) result = result | 4 /* JsInlineMap */; - if (getEmitDeclarations(options)) result = result | 8 /* Dts */; - if (options.declarationMap) result = result | 16 /* DtsMap */; - if (options.emitDeclarationOnly) result = result & 24 /* AllDts */; + if (getEmitDeclarations(options)) result = result | 24 /* Dts */; + if (options.declarationMap) result = result | 32 /* DtsMap */; + if (options.emitDeclarationOnly) result = result & 56 /* AllDts */; return result; } function getPendingEmitKind(optionsOrEmitKind, oldOptionsOrEmitKind) { @@ -122692,7 +123534,8 @@ function getPendingEmitKind(optionsOrEmitKind, oldOptionsOrEmitKind) { const diff = oldEmitKind ^ emitKind; let result = 0 /* None */; if (diff & 7 /* AllJs */) result = emitKind & 7 /* AllJs */; - if (diff & 24 /* AllDts */) result = result | emitKind & 24 /* AllDts */; + if (diff & 8 /* DtsErrors */) result = result | emitKind & 8 /* DtsErrors */; + if (diff & 48 /* AllDtsEmit */) result = result | emitKind & 48 /* AllDtsEmit */; return result; } function hasSameKeys(map1, map2) { @@ -122710,17 +123553,18 @@ function createBuilderProgramState(newProgram, oldState) { const compilerOptions = newProgram.getCompilerOptions(); state.compilerOptions = compilerOptions; const outFilePath = compilerOptions.outFile; - if (!outFilePath) { - state.semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); - } else if (compilerOptions.composite && (oldState == null ? void 0 : oldState.outSignature) && outFilePath === oldState.compilerOptions.outFile) { + state.semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + if (outFilePath && compilerOptions.composite && (oldState == null ? void 0 : oldState.outSignature) && outFilePath === oldState.compilerOptions.outFile) { state.outSignature = oldState.outSignature && getEmitSignatureFromOldSignature(compilerOptions, oldState.compilerOptions, oldState.outSignature); } state.changedFilesSet = /* @__PURE__ */ new Set(); state.latestChangedDtsFile = compilerOptions.composite ? oldState == null ? void 0 : oldState.latestChangedDtsFile : void 0; + state.checkPending = state.compilerOptions.noCheck ? true : void 0; const useOldState = BuilderState.canReuseOldState(state.referencedMap, oldState); const oldCompilerOptions = useOldState ? oldState.compilerOptions : void 0; - const canCopySemanticDiagnostics = useOldState && oldState.semanticDiagnosticsPerFile && !!state.semanticDiagnosticsPerFile && !compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions); + let canCopySemanticDiagnostics = useOldState && !compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions); const canCopyEmitSignatures = compilerOptions.composite && (oldState == null ? void 0 : oldState.emitSignatures) && !outFilePath && !compilerOptionsAffectDeclarationPath(compilerOptions, oldState.compilerOptions); + let canCopyEmitDiagnostics = true; if (useOldState) { (_a = oldState.changedFilesSet) == null ? void 0 : _a.forEach((value) => state.changedFilesSet.add(value)); if (!outFilePath && ((_b = oldState.affectedFilesPendingEmit) == null ? void 0 : _b.size)) { @@ -122728,8 +123572,13 @@ function createBuilderProgramState(newProgram, oldState) { state.seenAffectedFiles = /* @__PURE__ */ new Set(); } state.programEmitPending = oldState.programEmitPending; + if (outFilePath && state.changedFilesSet.size) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + } + state.hasErrorsFromOldState = oldState.hasErrors; } else { - state.buildInfoEmitPending = true; + state.buildInfoEmitPending = isIncrementalCompilation(compilerOptions); } const referencedMap = state.referencedMap; const oldReferencedMap = useOldState ? oldState.referencedMap : void 0; @@ -122745,10 +123594,10 @@ function createBuilderProgramState(newProgram, oldState) { oldInfo.impliedFormat !== info.impliedFormat || // Referenced files changed !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) || // Referenced file was deleted in the new program newReferences && forEachKey(newReferences, (path) => !state.fileInfos.has(path) && oldState.fileInfos.has(path))) { - addFileToChangeSet(state, sourceFilePath); + addFileToChangeSet(sourceFilePath); } else { const sourceFile = newProgram.getSourceFileByPath(sourceFilePath); - const emitDiagnostics = (_a2 = oldState.emitDiagnosticsPerFile) == null ? void 0 : _a2.get(sourceFilePath); + const emitDiagnostics = canCopyEmitDiagnostics ? (_a2 = oldState.emitDiagnosticsPerFile) == null ? void 0 : _a2.get(sourceFilePath) : void 0; if (emitDiagnostics) { (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set( sourceFilePath, @@ -122777,16 +123626,16 @@ function createBuilderProgramState(newProgram, oldState) { }); if (useOldState && forEachEntry(oldState.fileInfos, (info, sourceFilePath) => { if (state.fileInfos.has(sourceFilePath)) return false; - if (outFilePath || info.affectsGlobalScope) return true; + if (info.affectsGlobalScope) return true; state.buildInfoEmitPending = true; - return false; + return !!outFilePath; })) { BuilderState.getAllFilesExcludingDefaultLibraryFile( state, newProgram, /*firstSourceFile*/ void 0 - ).forEach((file) => addFileToChangeSet(state, file.resolvedPath)); + ).forEach((file) => addFileToChangeSet(file.resolvedPath)); } else if (oldCompilerOptions) { const pendingEmitKind = compilerOptionsAffectEmit(compilerOptions, oldCompilerOptions) ? getBuilderFileEmit(compilerOptions) : getPendingEmitKind(compilerOptions, oldCompilerOptions); if (pendingEmitKind !== 0 /* None */) { @@ -122802,18 +123651,26 @@ function createBuilderProgramState(newProgram, oldState) { }); Debug.assert(!state.seenAffectedFiles || !state.seenAffectedFiles.size); state.seenAffectedFiles = state.seenAffectedFiles || /* @__PURE__ */ new Set(); - state.buildInfoEmitPending = true; - } else { + } else if (!state.changedFilesSet.size) { state.programEmitPending = state.programEmitPending ? state.programEmitPending | pendingEmitKind : pendingEmitKind; } + state.buildInfoEmitPending = true; } } + if (useOldState && state.semanticDiagnosticsPerFile.size !== state.fileInfos.size && oldState.checkPending !== state.checkPending) state.buildInfoEmitPending = true; return state; -} -function addFileToChangeSet(state, path) { - state.changedFilesSet.add(path); - state.buildInfoEmitPending = true; - state.programEmitPending = void 0; + function addFileToChangeSet(path) { + state.changedFilesSet.add(path); + if (outFilePath) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + state.semanticDiagnosticsFromOldState = void 0; + state.semanticDiagnosticsPerFile.clear(); + state.emitDiagnosticsPerFile = void 0; + } + state.buildInfoEmitPending = true; + state.programEmitPending = void 0; + } } function getEmitSignatureFromOldSignature(options, oldOptions, oldEmitSignature) { return !!options.declarationMap === !!oldOptions.declarationMap ? ( @@ -122837,7 +123694,12 @@ function repopulateDiagnostics(diagnostics, newProgram) { } function convertOrRepopulateDiagnosticMessageChain(chain, sourceFile, newProgram, repopulateInfo) { const info = repopulateInfo(chain); - if (info) { + if (info === true) { + return { + ...createModeMismatchDetails(sourceFile), + next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) + }; + } else if (info) { return { ...createModuleNotFoundChain(sourceFile, newProgram, info.moduleReference, info.mode, info.packageName || info.moduleReference), next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) @@ -122880,34 +123742,6 @@ function releaseCache(state) { BuilderState.releaseCache(state); state.program = void 0; } -function backupBuilderProgramEmitState(state) { - const outFilePath = state.compilerOptions.outFile; - Debug.assert(!state.changedFilesSet.size || outFilePath); - return { - affectedFilesPendingEmit: state.affectedFilesPendingEmit && new Map(state.affectedFilesPendingEmit), - seenEmittedFiles: state.seenEmittedFiles && new Map(state.seenEmittedFiles), - programEmitPending: state.programEmitPending, - emitSignatures: state.emitSignatures && new Map(state.emitSignatures), - outSignature: state.outSignature, - latestChangedDtsFile: state.latestChangedDtsFile, - hasChangedEmitSignature: state.hasChangedEmitSignature, - changedFilesSet: outFilePath ? new Set(state.changedFilesSet) : void 0, - buildInfoEmitPending: state.buildInfoEmitPending, - emitDiagnosticsPerFile: state.emitDiagnosticsPerFile && new Map(state.emitDiagnosticsPerFile) - }; -} -function restoreBuilderProgramEmitState(state, savedEmitState) { - state.affectedFilesPendingEmit = savedEmitState.affectedFilesPendingEmit; - state.seenEmittedFiles = savedEmitState.seenEmittedFiles; - state.programEmitPending = savedEmitState.programEmitPending; - state.emitSignatures = savedEmitState.emitSignatures; - state.outSignature = savedEmitState.outSignature; - state.latestChangedDtsFile = savedEmitState.latestChangedDtsFile; - state.hasChangedEmitSignature = savedEmitState.hasChangedEmitSignature; - state.buildInfoEmitPending = savedEmitState.buildInfoEmitPending; - state.emitDiagnosticsPerFile = savedEmitState.emitDiagnosticsPerFile; - if (savedEmitState.changedFilesSet) state.changedFilesSet = savedEmitState.changedFilesSet; -} function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) { Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.resolvedPath)); } @@ -122922,7 +123756,11 @@ function getNextAffectedFile(state, cancellationToken, host) { const affectedFile = affectedFiles[affectedFilesIndex]; if (!seenAffectedFiles.has(affectedFile.resolvedPath)) { state.affectedFilesIndex = affectedFilesIndex; - addToAffectedFilesPendingEmit(state, affectedFile.resolvedPath, getBuilderFileEmit(state.compilerOptions)); + addToAffectedFilesPendingEmit( + state, + affectedFile.resolvedPath, + getBuilderFileEmit(state.compilerOptions) + ); handleDtsMayChangeOfAffectedFile( state, affectedFile, @@ -122942,15 +123780,11 @@ function getNextAffectedFile(state, cancellationToken, host) { if (nextKey.done) { return void 0; } - const program = Debug.checkDefined(state.program); - const compilerOptions = program.getCompilerOptions(); - if (compilerOptions.outFile) { - Debug.assert(!state.semanticDiagnosticsPerFile); - return program; - } + const compilerOptions = state.program.getCompilerOptions(); + if (compilerOptions.outFile) return state.program; state.affectedFiles = BuilderState.getFilesAffectedByWithOldState( state, - program, + state.program, nextKey.value, cancellationToken, host @@ -122960,17 +123794,34 @@ function getNextAffectedFile(state, cancellationToken, host) { if (!state.seenAffectedFiles) state.seenAffectedFiles = /* @__PURE__ */ new Set(); } } -function clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles) { - var _a; - if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size)) return; - if (!emitOnlyDtsFiles) return state.affectedFilesPendingEmit = void 0; - state.affectedFilesPendingEmit.forEach((emitKind, path) => { - const pending = emitKind & 7 /* AllJs */; +function clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { + var _a, _b; + if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size) && !state.programEmitPending) return; + if (!emitOnlyDtsFiles && !isForDtsErrors) { + state.affectedFilesPendingEmit = void 0; + state.programEmitPending = void 0; + } + (_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.forEach((emitKind, path) => { + const pending = !isForDtsErrors ? emitKind & 7 /* AllJs */ : emitKind & (7 /* AllJs */ | 48 /* AllDtsEmit */); if (!pending) state.affectedFilesPendingEmit.delete(path); else state.affectedFilesPendingEmit.set(path, pending); }); + if (state.programEmitPending) { + const pending = !isForDtsErrors ? state.programEmitPending & 7 /* AllJs */ : state.programEmitPending & (7 /* AllJs */ | 48 /* AllDtsEmit */); + if (!pending) state.programEmitPending = void 0; + else state.programEmitPending = pending; + } +} +function getPendingEmitKindWithSeen(optionsOrEmitKind, seenOldOptionsOrEmitKind, emitOnlyDtsFiles, isForDtsErrors) { + let pendingKind = getPendingEmitKind(optionsOrEmitKind, seenOldOptionsOrEmitKind); + if (emitOnlyDtsFiles) pendingKind = pendingKind & 56 /* AllDts */; + if (isForDtsErrors) pendingKind = pendingKind & 8 /* DtsErrors */; + return pendingKind; } -function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles) { +function getBuilderFileEmitAllDts(isForDtsErrors) { + return !isForDtsErrors ? 56 /* AllDts */ : 8 /* DtsErrors */; +} +function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { var _a; if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size)) return void 0; return forEachEntry(state.affectedFilesPendingEmit, (emitKind, path) => { @@ -122981,12 +123832,16 @@ function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles) { return void 0; } const seenKind = (_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath); - let pendingKind = getPendingEmitKind(emitKind, seenKind); - if (emitOnlyDtsFiles) pendingKind = pendingKind & 24 /* AllDts */; + const pendingKind = getPendingEmitKindWithSeen( + emitKind, + seenKind, + emitOnlyDtsFiles, + isForDtsErrors + ); if (pendingKind) return { affectedFile, emitKind: pendingKind }; }); } -function getNextPendingEmitDiagnosticsFile(state) { +function getNextPendingEmitDiagnosticsFile(state, isForDtsErrors) { var _a; if (!((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) return void 0; return forEachEntry(state.emitDiagnosticsPerFile, (diagnostics, path) => { @@ -122997,15 +123852,14 @@ function getNextPendingEmitDiagnosticsFile(state) { return void 0; } const seenKind = ((_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath)) || 0 /* None */; - if (!(seenKind & 24 /* AllDts */)) return { affectedFile, diagnostics, seenKind }; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) return { affectedFile, diagnostics, seenKind }; }); } function removeDiagnosticsOfLibraryFiles(state) { if (!state.cleanedDiagnosticsOfLibFiles) { state.cleanedDiagnosticsOfLibFiles = true; - const program = Debug.checkDefined(state.program); - const options = program.getCompilerOptions(); - forEach(program.getSourceFiles(), (f) => program.isSourceFileDefaultLibrary(f) && !skipTypeChecking(f, options, program) && removeSemanticDiagnosticsOf(state, f.resolvedPath)); + const options = state.program.getCompilerOptions(); + forEach(state.program.getSourceFiles(), (f) => state.program.isSourceFileDefaultLibrary(f) && !skipTypeCheckingIgnoringNoCheck(f, options, state.program) && removeSemanticDiagnosticsOf(state, f.resolvedPath)); } } function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken, host) { @@ -123014,7 +123868,7 @@ function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken removeDiagnosticsOfLibraryFiles(state); BuilderState.updateShapeSignature( state, - Debug.checkDefined(state.program), + state.program, affectedFile, cancellationToken, host @@ -123032,12 +123886,11 @@ function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken function handleDtsMayChangeOf(state, path, invalidateJsFiles, cancellationToken, host) { removeSemanticDiagnosticsOf(state, path); if (!state.changedFilesSet.has(path)) { - const program = Debug.checkDefined(state.program); - const sourceFile = program.getSourceFileByPath(path); + const sourceFile = state.program.getSourceFileByPath(path); if (sourceFile) { BuilderState.updateShapeSignature( state, - program, + state.program, sourceFile, cancellationToken, host, @@ -123045,9 +123898,17 @@ function handleDtsMayChangeOf(state, path, invalidateJsFiles, cancellationToken, true ); if (invalidateJsFiles) { - addToAffectedFilesPendingEmit(state, path, getBuilderFileEmit(state.compilerOptions)); + addToAffectedFilesPendingEmit( + state, + path, + getBuilderFileEmit(state.compilerOptions) + ); } else if (getEmitDeclarations(state.compilerOptions)) { - addToAffectedFilesPendingEmit(state, path, state.compilerOptions.declarationMap ? 24 /* AllDts */ : 8 /* Dts */); + addToAffectedFilesPendingEmit( + state, + path, + state.compilerOptions.declarationMap ? 56 /* AllDts */ : 24 /* Dts */ + ); } } } @@ -123114,7 +123975,7 @@ function handleDtsMayChangeOfReferencingExportOfAffectedFile(state, affectedFile host ); if (isChangedSignature(state, currentPath)) { - const currentSourceFile = Debug.checkDefined(state.program).getSourceFileByPath(currentPath); + const currentSourceFile = state.program.getSourceFileByPath(currentPath); queue.push(...BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath)); } } @@ -123160,38 +124021,79 @@ function handleDtsMayChangeOfFileAndExportsOfFile(state, filePath, invalidateJsF ); return void 0; } -function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken) { +function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + if (state.compilerOptions.noCheck) return emptyArray; return concatenate( - getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken), - Debug.checkDefined(state.program).getProgramDiagnostics(sourceFile) + getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile), + state.program.getProgramDiagnostics(sourceFile) ); } -function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken) { +function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + semanticDiagnosticsPerFile ?? (semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile); const path = sourceFile.resolvedPath; - if (state.semanticDiagnosticsPerFile) { - const cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path); - if (cachedDiagnostics) { - return filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions); - } - } - const diagnostics = Debug.checkDefined(state.program).getBindAndCheckDiagnostics(sourceFile, cancellationToken); - if (state.semanticDiagnosticsPerFile) { - state.semanticDiagnosticsPerFile.set(path, diagnostics); + const cachedDiagnostics = semanticDiagnosticsPerFile.get(path); + if (cachedDiagnostics) { + return filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions); } + const diagnostics = state.program.getBindAndCheckDiagnostics(sourceFile, cancellationToken); + semanticDiagnosticsPerFile.set(path, diagnostics); + state.buildInfoEmitPending = true; return filterSemanticDiagnostics(diagnostics, state.compilerOptions); } -function isProgramBundleEmitBuildInfo(info) { +function isIncrementalBundleEmitBuildInfo(info) { var _a; return !!((_a = info.options) == null ? void 0 : _a.outFile); } +function isIncrementalBuildInfo(info) { + return !!info.fileNames; +} +function isNonIncrementalBuildInfo(info) { + return !isIncrementalBuildInfo(info) && !!info.root; +} +function ensureHasErrorsForState(state) { + if (state.hasErrors !== void 0) return; + if (isIncrementalCompilation(state.compilerOptions)) { + state.hasErrors = !some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return bindAndCheckDiagnostics === void 0 || // Missing semantic diagnostics in cache will be encoded in buildInfo + !!bindAndCheckDiagnostics.length || // cached semantic diagnostics will be encoded in buildInfo + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) && (hasSyntaxOrGlobalErrors(state) || some(state.program.getSourceFiles(), (f) => !!state.program.getProgramDiagnostics(f).length)); + } else { + state.hasErrors = some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return !!(bindAndCheckDiagnostics == null ? void 0 : bindAndCheckDiagnostics.length) || // If has semantic diagnostics + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) || hasSyntaxOrGlobalErrors(state); + } +} +function hasSyntaxOrGlobalErrors(state) { + return !!state.program.getConfigFileParsingDiagnostics().length || !!state.program.getSyntacticDiagnostics().length || !!state.program.getOptionsDiagnostics().length || !!state.program.getGlobalDiagnostics().length; +} +function getBuildInfoEmitPending(state) { + ensureHasErrorsForState(state); + return state.buildInfoEmitPending ?? (state.buildInfoEmitPending = !!state.hasErrorsFromOldState !== !!state.hasErrors); +} function getBuildInfo2(state) { var _a, _b; - const currentDirectory = Debug.checkDefined(state.program).getCurrentDirectory(); + const currentDirectory = state.program.getCurrentDirectory(); const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(getTsBuildInfoEmitOutputFilePath(state.compilerOptions), currentDirectory)); const latestChangedDtsFile = state.latestChangedDtsFile ? relativeToBuildInfoEnsuringAbsolutePath(state.latestChangedDtsFile) : void 0; const fileNames = []; const fileNameToFileId = /* @__PURE__ */ new Map(); const rootFileNames = new Set(state.program.getRootFileNames().map((f) => toPath(f, currentDirectory, state.program.getCanonicalFileName))); + ensureHasErrorsForState(state); + if (!isIncrementalCompilation(state.compilerOptions)) { + const buildInfo2 = { + root: arrayFrom(rootFileNames, (r) => relativeToBuildInfo(r)), + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version + }; + return buildInfo2; + } const root = []; if (state.compilerOptions.outFile) { const fileInfos2 = arrayFrom(state.fileInfos.entries(), ([key, value]) => { @@ -123199,12 +124101,15 @@ function getBuildInfo2(state) { tryAddRoot(key, fileId); return value.impliedFormat ? { version: value.version, impliedFormat: value.impliedFormat, signature: void 0, affectsGlobalScope: void 0 } : value.version; }); - const program2 = { + const buildInfo2 = { fileNames, fileInfos: fileInfos2, root, resolvedRoot: toResolvedRoot(), - options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions), + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), + semanticDiagnosticsPerFile: !state.changedFilesSet.size ? toIncrementalBuildInfoDiagnostics() : void 0, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), outSignature: state.outSignature, latestChangedDtsFile, pendingEmit: !state.programEmitPending ? void 0 : ( @@ -123213,10 +124118,13 @@ function getBuildInfo2(state) { // Pending emit is same as deteremined by compilerOptions state.programEmitPending ) - ) + ), // Actual value + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version }; - return createBuildInfo(program2); + return buildInfo2; } let fileIdsList; let fileNamesToFileIdListId; @@ -123271,7 +124179,7 @@ function getBuildInfo2(state) { toFileIdListId(state.referencedMap.getValues(key)) ]); } - const semanticDiagnosticsPerFile = convertToProgramBuildInfoDiagnostics(); + const semanticDiagnosticsPerFile = toIncrementalBuildInfoDiagnostics(); let affectedFilesPendingEmit; if ((_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.size) { const fullEmitForOptions = getBuilderFileEmit(state.compilerOptions); @@ -123285,7 +124193,7 @@ function getBuildInfo2(state) { affectedFilesPendingEmit, pendingEmit === fullEmitForOptions ? fileId : ( // Pending full emit per options - pendingEmit === 8 /* Dts */ ? [fileId] : ( + pendingEmit === 24 /* Dts */ ? [fileId] : ( // Pending on Dts only [fileId, pendingEmit] ) @@ -123295,29 +124203,25 @@ function getBuildInfo2(state) { } } } - let changeFileSet; - if (state.changedFilesSet.size) { - for (const path of arrayFrom(state.changedFilesSet.keys()).sort(compareStringsCaseSensitive)) { - changeFileSet = append(changeFileSet, toFileId(path)); - } - } - const emitDiagnosticsPerFile = convertToProgramBuildInfoEmitDiagnostics(); - const program = { + const buildInfo = { fileNames, + fileIdsList, fileInfos, root, resolvedRoot: toResolvedRoot(), - options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions), - fileIdsList, + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), referencedMap, semanticDiagnosticsPerFile, - emitDiagnosticsPerFile, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), affectedFilesPendingEmit, - changeFileSet, emitSignatures, - latestChangedDtsFile + latestChangedDtsFile, + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version }; - return createBuildInfo(program); + return buildInfo; function relativeToBuildInfoEnsuringAbsolutePath(path) { return relativeToBuildInfo(getNormalizedAbsolutePath(path, currentDirectory)); } @@ -123365,13 +124269,13 @@ function getBuildInfo2(state) { }); return result; } - function convertToProgramBuildInfoCompilerOptions(options) { + function toIncrementalBuildInfoCompilerOptions(options) { let result; const { optionsNameMap } = getOptionsNameMap(); for (const name of getOwnKeys(options).sort(compareStringsCaseSensitive)) { const optionInfo = optionsNameMap.get(name.toLowerCase()); if (optionInfo == null ? void 0 : optionInfo.affectsBuildInfo) { - (result || (result = {}))[name] = convertToReusableCompilerOptionValue( + (result || (result = {}))[name] = toReusableCompilerOptionValue( optionInfo, options[name] ); @@ -123379,7 +124283,7 @@ function getBuildInfo2(state) { } return result; } - function convertToReusableCompilerOptionValue(option, value) { + function toReusableCompilerOptionValue(option, value) { if (option) { Debug.assert(option.type !== "listOrElement"); if (option.type === "list") { @@ -123393,23 +124297,22 @@ function getBuildInfo2(state) { } return value; } - function convertToProgramBuildInfoDiagnostics() { + function toIncrementalBuildInfoDiagnostics() { let result; state.fileInfos.forEach((_value, key) => { - var _a2; - const value = (_a2 = state.semanticDiagnosticsPerFile) == null ? void 0 : _a2.get(key); + const value = state.semanticDiagnosticsPerFile.get(key); if (!value) { if (!state.changedFilesSet.has(key)) result = append(result, toFileId(key)); } else if (value.length) { result = append(result, [ toFileId(key), - convertToReusableDiagnostics(value, key) + toReusableDiagnostic(value, key) ]); } }); return result; } - function convertToProgramBuildInfoEmitDiagnostics() { + function toIncrementalBuildInfoEmitDiagnostics() { var _a2; let result; if (!((_a2 = state.emitDiagnosticsPerFile) == null ? void 0 : _a2.size)) return result; @@ -123417,55 +124320,64 @@ function getBuildInfo2(state) { const value = state.emitDiagnosticsPerFile.get(key); result = append(result, [ toFileId(key), - convertToReusableDiagnostics(value, key) + toReusableDiagnostic(value, key) ]); } return result; } - function convertToReusableDiagnostics(diagnostics, diagnosticFilePath) { + function toReusableDiagnostic(diagnostics, diagnosticFilePath) { Debug.assert(!!diagnostics.length); return diagnostics.map((diagnostic) => { - const result = convertToReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath); + const result = toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath); result.reportsUnnecessary = diagnostic.reportsUnnecessary; result.reportDeprecated = diagnostic.reportsDeprecated; result.source = diagnostic.source; result.skippedOn = diagnostic.skippedOn; const { relatedInformation } = diagnostic; - result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => convertToReusableDiagnosticRelatedInformation(r, diagnosticFilePath)) : [] : void 0; + result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => toReusableDiagnosticRelatedInformation(r, diagnosticFilePath)) : [] : void 0; return result; }); } - function convertToReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath) { + function toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath) { const { file } = diagnostic; return { ...diagnostic, file: file ? file.resolvedPath === diagnosticFilePath ? void 0 : relativeToBuildInfo(file.resolvedPath) : false, - messageText: isString(diagnostic.messageText) ? diagnostic.messageText : convertToReusableDiagnosticMessageChain(diagnostic.messageText) + messageText: isString(diagnostic.messageText) ? diagnostic.messageText : toReusableDiagnosticMessageChain(diagnostic.messageText) }; } - function convertToReusableDiagnosticMessageChain(chain) { + function toReusableDiagnosticMessageChain(chain) { if (chain.repopulateInfo) { return { info: chain.repopulateInfo(), - next: convertToReusableDiagnosticMessageChainArray(chain.next) + next: toReusableDiagnosticMessageChainArray(chain.next) }; } - const next = convertToReusableDiagnosticMessageChainArray(chain.next); + const next = toReusableDiagnosticMessageChainArray(chain.next); return next === chain.next ? chain : { ...chain, next }; } - function convertToReusableDiagnosticMessageChainArray(array) { + function toReusableDiagnosticMessageChainArray(array) { if (!array) return array; return forEach(array, (chain, index) => { - const reusable = convertToReusableDiagnosticMessageChain(chain); + const reusable = toReusableDiagnosticMessageChain(chain); if (chain === reusable) return void 0; const result = index > 0 ? array.slice(0, index - 1) : []; result.push(reusable); for (let i = index + 1; i < array.length; i++) { - result.push(convertToReusableDiagnosticMessageChain(array[i])); + result.push(toReusableDiagnosticMessageChain(array[i])); } return result; }) || array; } + function toChangeFileSet() { + let changeFileSet; + if (state.changedFilesSet.size) { + for (const path of arrayFrom(state.changedFilesSet.keys()).sort(compareStringsCaseSensitive)) { + changeFileSet = append(changeFileSet, toFileId(path)); + } + } + return changeFileSet; + } } function getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { let host; @@ -123524,25 +124436,27 @@ function computeSignature(text, host, data) { return (host.createHash ?? generateDjb2Hash)(getTextHandlingSourceMapForSignature(text, data)); } function createBuilderProgram(kind, { newProgram, host, oldProgram, configFileParsingDiagnostics }) { - let oldState = oldProgram && oldProgram.getState(); + let oldState = oldProgram && oldProgram.state; if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { newProgram = void 0; oldState = void 0; return oldProgram; } const state = createBuilderProgramState(newProgram, oldState); - newProgram.getBuildInfo = () => getBuildInfo2(state); + newProgram.getBuildInfo = () => getBuildInfo2(toBuilderProgramStateWithDefinedProgram(state)); newProgram = void 0; oldProgram = void 0; oldState = void 0; - const getState = () => state; - const builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics); - builderProgram.getState = getState; - builderProgram.saveEmitState = () => backupBuilderProgramEmitState(state); - builderProgram.restoreEmitState = (saved) => restoreBuilderProgramEmitState(state, saved); + const builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics); + builderProgram.state = state; builderProgram.hasChangedEmitSignature = () => !!state.hasChangedEmitSignature; - builderProgram.getAllDependencies = (sourceFile) => BuilderState.getAllDependencies(state, Debug.checkDefined(state.program), sourceFile); + builderProgram.getAllDependencies = (sourceFile) => BuilderState.getAllDependencies( + state, + Debug.checkDefined(state.program), + sourceFile + ); builderProgram.getSemanticDiagnostics = getSemanticDiagnostics; + builderProgram.getDeclarationDiagnostics = getDeclarationDiagnostics2; builderProgram.emit = emit; builderProgram.releaseProgram = () => releaseCache(state); if (kind === 0 /* SemanticDiagnosticsBuilderProgram */) { @@ -123556,76 +124470,145 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa } return builderProgram; function emitBuildInfo(writeFile2, cancellationToken) { - if (state.buildInfoEmitPending) { - const result = Debug.checkDefined(state.program).emitBuildInfo(writeFile2 || maybeBind(host, host.writeFile), cancellationToken); + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (getBuildInfoEmitPending(state)) { + const result = state.program.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); state.buildInfoEmitPending = false; return result; } return emitSkippedWithNoDiagnostics; } - function emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { - var _a, _b, _c; + function emitNextAffectedFileOrDtsErrors(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers, isForDtsErrors) { + var _a, _b, _c, _d; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); let affected = getNextAffectedFile(state, cancellationToken, host); const programEmitKind = getBuilderFileEmit(state.compilerOptions); - let emitKind = emitOnlyDtsFiles ? programEmitKind & 24 /* AllDts */ : programEmitKind; + let emitKind = !isForDtsErrors ? emitOnlyDtsFiles ? programEmitKind & 56 /* AllDts */ : programEmitKind : 8 /* DtsErrors */; if (!affected) { if (!state.compilerOptions.outFile) { - const pendingAffectedFile = getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles); - if (!pendingAffectedFile) { - const pendingForDiagnostics = getNextPendingEmitDiagnosticsFile(state); + const pendingAffectedFile = getNextAffectedFilePendingEmit( + state, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (pendingAffectedFile) { + ({ affectedFile: affected, emitKind } = pendingAffectedFile); + } else { + const pendingForDiagnostics = getNextPendingEmitDiagnosticsFile( + state, + isForDtsErrors + ); if (pendingForDiagnostics) { - (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set(pendingForDiagnostics.affectedFile.resolvedPath, pendingForDiagnostics.seenKind | 24 /* AllDts */); + (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set( + pendingForDiagnostics.affectedFile.resolvedPath, + pendingForDiagnostics.seenKind | getBuilderFileEmitAllDts(isForDtsErrors) + ); return { result: { emitSkipped: true, diagnostics: pendingForDiagnostics.diagnostics }, affected: pendingForDiagnostics.affectedFile }; } - if (!state.buildInfoEmitPending) return void 0; - const affected2 = state.program; - const result2 = affected2.emitBuildInfo(writeFile2 || maybeBind(host, host.writeFile), cancellationToken); - state.buildInfoEmitPending = false; - return { result: result2, affected: affected2 }; } - ({ affectedFile: affected, emitKind } = pendingAffectedFile); } else { - if (!state.programEmitPending) return void 0; - emitKind = state.programEmitPending; - if (emitOnlyDtsFiles) emitKind = emitKind & 24 /* AllDts */; - if (!emitKind) return void 0; - affected = state.program; + if (state.programEmitPending) { + emitKind = getPendingEmitKindWithSeen( + state.programEmitPending, + state.seenProgramEmit, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (emitKind) affected = state.program; + } + if (!affected && ((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) { + const seenKind = state.seenProgramEmit || 0 /* None */; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) { + state.seenProgramEmit = getBuilderFileEmitAllDts(isForDtsErrors) | seenKind; + const diagnostics = []; + state.emitDiagnosticsPerFile.forEach((d) => addRange(diagnostics, d)); + return { + result: { emitSkipped: true, diagnostics }, + affected: state.program + }; + } + } + } + if (!affected) { + if (isForDtsErrors || !getBuildInfoEmitPending(state)) return void 0; + const affected2 = state.program; + const result2 = affected2.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); + state.buildInfoEmitPending = false; + return { result: result2, affected: affected2 }; } } let emitOnly; if (emitKind & 7 /* AllJs */) emitOnly = 0 /* Js */; - if (emitKind & 24 /* AllDts */) emitOnly = emitOnly === void 0 ? 1 /* Dts */ : void 0; - if (affected === state.program) { - state.programEmitPending = state.changedFilesSet.size ? getPendingEmitKind(programEmitKind, emitKind) : state.programEmitPending ? getPendingEmitKind(state.programEmitPending, emitKind) : void 0; - } - const result = state.program.emit( + if (emitKind & 56 /* AllDts */) emitOnly = emitOnly === void 0 ? 1 /* Dts */ : void 0; + const result = !isForDtsErrors ? state.program.emit( affected === state.program ? void 0 : affected, getWriteFileCallback(writeFile2, customTransformers), cancellationToken, emitOnly, - customTransformers - ); + customTransformers, + /*forceDtsEmit*/ + void 0, + /*skipBuildInfo*/ + true + ) : { + emitSkipped: true, + diagnostics: state.program.getDeclarationDiagnostics( + affected === state.program ? void 0 : affected, + cancellationToken + ) + }; if (affected !== state.program) { const affectedSourceFile = affected; state.seenAffectedFiles.add(affectedSourceFile.resolvedPath); if (state.affectedFilesIndex !== void 0) state.affectedFilesIndex++; state.buildInfoEmitPending = true; - const existing = ((_a = state.seenEmittedFiles) == null ? void 0 : _a.get(affectedSourceFile.resolvedPath)) || 0 /* None */; + const existing = ((_b = state.seenEmittedFiles) == null ? void 0 : _b.get(affectedSourceFile.resolvedPath)) || 0 /* None */; (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, emitKind | existing); - const existingPending = ((_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.get(affectedSourceFile.resolvedPath)) || programEmitKind; + const existingPending = ((_c = state.affectedFilesPendingEmit) == null ? void 0 : _c.get(affectedSourceFile.resolvedPath)) || programEmitKind; const pendingKind = getPendingEmitKind(existingPending, emitKind | existing); if (pendingKind) (state.affectedFilesPendingEmit ?? (state.affectedFilesPendingEmit = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, pendingKind); - else (_c = state.affectedFilesPendingEmit) == null ? void 0 : _c.delete(affectedSourceFile.resolvedPath); + else (_d = state.affectedFilesPendingEmit) == null ? void 0 : _d.delete(affectedSourceFile.resolvedPath); if (result.diagnostics.length) (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, result.diagnostics); } else { state.changedFilesSet.clear(); + state.programEmitPending = state.changedFilesSet.size ? getPendingEmitKind(programEmitKind, emitKind) : state.programEmitPending ? getPendingEmitKind(state.programEmitPending, emitKind) : void 0; + state.seenProgramEmit = emitKind | (state.seenProgramEmit || 0 /* None */); + setEmitDiagnosticsPerFile(result.diagnostics); + state.buildInfoEmitPending = true; } return { result, affected }; } + function setEmitDiagnosticsPerFile(diagnostics) { + let emitDiagnosticsPerFile; + diagnostics.forEach((d) => { + if (!d.file) return; + let diagnostics2 = emitDiagnosticsPerFile == null ? void 0 : emitDiagnosticsPerFile.get(d.file.resolvedPath); + if (!diagnostics2) (emitDiagnosticsPerFile ?? (emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(d.file.resolvedPath, diagnostics2 = []); + diagnostics2.push(d); + }); + if (emitDiagnosticsPerFile) state.emitDiagnosticsPerFile = emitDiagnosticsPerFile; + } + function emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + return emitNextAffectedFileOrDtsErrors( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers, + /*isForDtsErrors*/ + false + ); + } function getWriteFileCallback(writeFile2, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); if (!getEmitDeclarations(state.compilerOptions)) return writeFile2 || maybeBind(host, host.writeFile); return (fileName, text, writeByteOrderMark, onError, sourceFiles, data) => { var _a, _b, _c; @@ -123660,7 +124643,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa if (state.compilerOptions.composite) { const filePath = sourceFiles[0].resolvedPath; emitSignature = handleNewSignature((_c = state.emitSignatures) == null ? void 0 : _c.get(filePath), emitSignature); - if (!emitSignature) return; + if (!emitSignature) return data.skippedDtsWrite = true; (state.emitSignatures ?? (state.emitSignatures = /* @__PURE__ */ new Map())).set(filePath, emitSignature); } } else if (state.compilerOptions.composite) { @@ -123669,7 +124652,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa /*newSignature*/ void 0 ); - if (!newSignature) return; + if (!newSignature) return data.skippedDtsWrite = true; state.outSignature = newSignature; } } @@ -123692,6 +124675,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa }; } function emit(targetSourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile); } @@ -123704,7 +124688,12 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa let diagnostics; let emittedFiles = []; let affectedEmitResult; - while (affectedEmitResult = emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers)) { + while (affectedEmitResult = emitNextAffectedFile( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers + )) { emitSkipped = emitSkipped || affectedEmitResult.result.emitSkipped; diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); emittedFiles = addRange(emittedFiles, affectedEmitResult.result.emittedFiles); @@ -123717,23 +124706,82 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa sourceMaps }; } else { - clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles); + clearAffectedFilesPendingEmit( + state, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false + ); } } - return Debug.checkDefined(state.program).emit( + const emitResult = state.program.emit( targetSourceFile, getWriteFileCallback(writeFile2, customTransformers), cancellationToken, emitOnlyDtsFiles, customTransformers ); + handleNonEmitBuilderWithEmitOrDtsErrors( + targetSourceFile, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false, + emitResult.diagnostics + ); + return emitResult; + } + function handleNonEmitBuilderWithEmitOrDtsErrors(targetSourceFile, emitOnlyDtsFiles, isForDtsErrors, diagnostics) { + if (!targetSourceFile && kind !== 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors); + setEmitDiagnosticsPerFile(diagnostics); + } + } + function getDeclarationDiagnostics2(sourceFile, cancellationToken) { + var _a; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); + let affectedEmitResult; + let diagnostics; + while (affectedEmitResult = emitNextAffectedFileOrDtsErrors( + /*writeFile*/ + void 0, + cancellationToken, + /*emitOnlyDtsFiles*/ + void 0, + /*customTransformers*/ + void 0, + /*isForDtsErrors*/ + true + )) { + if (!sourceFile) diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); + } + return (!sourceFile ? diagnostics : (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(sourceFile.resolvedPath)) || emptyArray; + } else { + const result = state.program.getDeclarationDiagnostics(sourceFile, cancellationToken); + handleNonEmitBuilderWithEmitOrDtsErrors( + sourceFile, + /*emitOnlyDtsFiles*/ + void 0, + /*isForDtsErrors*/ + true, + result + ); + return result; + } } function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); while (true) { const affected = getNextAffectedFile(state, cancellationToken, host); let result; - if (!affected) return void 0; - else if (affected !== state.program) { + if (!affected) { + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } + return void 0; + } else if (affected !== state.program) { const affectedSourceFile = affected; if (!ignoreSourceFile || !ignoreSourceFile(affectedSourceFile)) { result = getSemanticDiagnosticsOfFile(state, affectedSourceFile, cancellationToken); @@ -123743,33 +124791,48 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa state.buildInfoEmitPending = true; if (!result) continue; } else { - result = state.program.getSemanticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken + let diagnostics; + const semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + state.program.getSourceFiles().forEach( + (sourceFile) => diagnostics = addRange( + diagnostics, + getSemanticDiagnosticsOfFile( + state, + sourceFile, + cancellationToken, + semanticDiagnosticsPerFile + ) + ) ); + state.semanticDiagnosticsPerFile = semanticDiagnosticsPerFile; + result = diagnostics || emptyArray; state.changedFilesSet.clear(); state.programEmitPending = getBuilderFileEmit(state.compilerOptions); + if (!state.compilerOptions.noCheck) state.checkPending = void 0; + state.buildInfoEmitPending = true; } return { result, affected }; } } function getSemanticDiagnostics(sourceFile, cancellationToken) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); - const compilerOptions = Debug.checkDefined(state.program).getCompilerOptions(); - if (compilerOptions.outFile) { - Debug.assert(!state.semanticDiagnosticsPerFile); - return Debug.checkDefined(state.program).getSemanticDiagnostics(sourceFile, cancellationToken); - } if (sourceFile) { return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken); } - while (getSemanticDiagnosticsOfNextAffectedFile(cancellationToken)) { + while (true) { + const affectedResult = getSemanticDiagnosticsOfNextAffectedFile(cancellationToken); + if (!affectedResult) break; + if (affectedResult.affected === state.program) return affectedResult.result; } let diagnostics; - for (const sourceFile2 of Debug.checkDefined(state.program).getSourceFiles()) { + for (const sourceFile2 of state.program.getSourceFiles()) { diagnostics = addRange(diagnostics, getSemanticDiagnosticsOfFile(state, sourceFile2, cancellationToken)); } + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } return diagnostics || emptyArray; } } @@ -123783,44 +124846,49 @@ function toBuilderStateFileInfoForMultiEmit(fileInfo) { return isString(fileInfo) ? { version: fileInfo, signature: fileInfo, affectsGlobalScope: void 0, impliedFormat: void 0 } : isString(fileInfo.signature) ? fileInfo : { version: fileInfo.version, signature: fileInfo.signature === false ? void 0 : fileInfo.version, affectsGlobalScope: fileInfo.affectsGlobalScope, impliedFormat: fileInfo.impliedFormat }; } function toBuilderFileEmit(value, fullEmitForOptions) { - return isNumber(value) ? fullEmitForOptions : value[1] || 8 /* Dts */; + return isNumber(value) ? fullEmitForOptions : value[1] || 24 /* Dts */; } function toProgramEmitPending(value, options) { return !value ? getBuilderFileEmit(options || {}) : value; } -function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host) { +function createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host) { var _a, _b, _c, _d; - const program = buildInfo.program; const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); let state; - const filePaths = (_a = program.fileNames) == null ? void 0 : _a.map(toPathInBuildInfoDirectory); + const filePaths = (_a = buildInfo.fileNames) == null ? void 0 : _a.map(toPathInBuildInfoDirectory); let filePathsSetList; - const latestChangedDtsFile = program.latestChangedDtsFile ? toAbsolutePath(program.latestChangedDtsFile) : void 0; - if (isProgramBundleEmitBuildInfo(program)) { - const fileInfos = /* @__PURE__ */ new Map(); - program.fileInfos.forEach((fileInfo, index) => { + const latestChangedDtsFile = buildInfo.latestChangedDtsFile ? toAbsolutePath(buildInfo.latestChangedDtsFile) : void 0; + const fileInfos = /* @__PURE__ */ new Map(); + const changedFilesSet = new Set(map(buildInfo.changeFileSet, toFilePath)); + if (isIncrementalBundleEmitBuildInfo(buildInfo)) { + buildInfo.fileInfos.forEach((fileInfo, index) => { const path = toFilePath(index + 1); fileInfos.set(path, isString(fileInfo) ? { version: fileInfo, signature: void 0, affectsGlobalScope: void 0, impliedFormat: void 0 } : fileInfo); }); state = { fileInfos, - compilerOptions: program.options ? convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {}, + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), + hasReusableDiagnostic: true, + changedFilesSet, latestChangedDtsFile, - outSignature: program.outSignature, - programEmitPending: program.pendingEmit === void 0 ? void 0 : toProgramEmitPending(program.pendingEmit, program.options) + outSignature: buildInfo.outSignature, + programEmitPending: buildInfo.pendingEmit === void 0 ? void 0 : toProgramEmitPending(buildInfo.pendingEmit, buildInfo.options), + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending }; } else { - filePathsSetList = (_b = program.fileIdsList) == null ? void 0 : _b.map((fileIds) => new Set(fileIds.map(toFilePath))); - const fileInfos = /* @__PURE__ */ new Map(); - const emitSignatures = ((_c = program.options) == null ? void 0 : _c.composite) && !program.options.outFile ? /* @__PURE__ */ new Map() : void 0; - program.fileInfos.forEach((fileInfo, index) => { + filePathsSetList = (_b = buildInfo.fileIdsList) == null ? void 0 : _b.map((fileIds) => new Set(fileIds.map(toFilePath))); + const emitSignatures = ((_c = buildInfo.options) == null ? void 0 : _c.composite) && !buildInfo.options.outFile ? /* @__PURE__ */ new Map() : void 0; + buildInfo.fileInfos.forEach((fileInfo, index) => { const path = toFilePath(index + 1); const stateFileInfo = toBuilderStateFileInfoForMultiEmit(fileInfo); fileInfos.set(path, stateFileInfo); if (emitSignatures && stateFileInfo.signature) emitSignatures.set(path, stateFileInfo.signature); }); - (_d = program.emitSignatures) == null ? void 0 : _d.forEach((value) => { + (_d = buildInfo.emitSignatures) == null ? void 0 : _d.forEach((value) => { if (isNumber(value)) emitSignatures.delete(toFilePath(value)); else { const key = toFilePath(value[0]); @@ -123833,25 +124901,24 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos ); } }); - const changedFilesSet = new Set(map(program.changeFileSet, toFilePath)); - const fullEmitForOptions = program.affectedFilesPendingEmit ? getBuilderFileEmit(program.options || {}) : void 0; + const fullEmitForOptions = buildInfo.affectedFilesPendingEmit ? getBuilderFileEmit(buildInfo.options || {}) : void 0; state = { fileInfos, - compilerOptions: program.options ? convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {}, - referencedMap: toManyToManyPathMap(program.referencedMap, program.options ?? {}), - semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(program.semanticDiagnosticsPerFile, fileInfos, changedFilesSet), - emitDiagnosticsPerFile: toPerFileEmitDiagnostics(program.emitDiagnosticsPerFile), + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + referencedMap: toManyToManyPathMap(buildInfo.referencedMap, buildInfo.options ?? {}), + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), hasReusableDiagnostic: true, - affectedFilesPendingEmit: program.affectedFilesPendingEmit && arrayToMap(program.affectedFilesPendingEmit, (value) => toFilePath(isNumber(value) ? value : value[0]), (value) => toBuilderFileEmit(value, fullEmitForOptions)), changedFilesSet, + affectedFilesPendingEmit: buildInfo.affectedFilesPendingEmit && arrayToMap(buildInfo.affectedFilesPendingEmit, (value) => toFilePath(isNumber(value) ? value : value[0]), (value) => toBuilderFileEmit(value, fullEmitForOptions)), latestChangedDtsFile, - emitSignatures: (emitSignatures == null ? void 0 : emitSignatures.size) ? emitSignatures : void 0 + emitSignatures: (emitSignatures == null ? void 0 : emitSignatures.size) ? emitSignatures : void 0, + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending }; } return { - getState: () => state, - saveEmitState: noop, - restoreEmitState: noop, + state, getProgram: notImplemented, getProgramOrUndefined: returnUndefined, releaseProgram: noop, @@ -123891,7 +124958,7 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos referenceMap.forEach(([fileId, fileIdListId]) => map2.set(toFilePath(fileId), toFilePathsSet(fileIdListId))); return map2; } - function toPerFileSemanticDiagnostics(diagnostics, fileInfos, changedFilesSet) { + function toPerFileSemanticDiagnostics(diagnostics) { const semanticDiagnostics = new Map( mapDefinedIterator( fileInfos.keys(), @@ -123902,7 +124969,7 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos if (isNumber(value)) semanticDiagnostics.delete(toFilePath(value)); else semanticDiagnostics.set(toFilePath(value[0]), value[1]); }); - return semanticDiagnostics.size ? semanticDiagnostics : void 0; + return semanticDiagnostics; } function toPerFileEmitDiagnostics(diagnostics) { return diagnostics && arrayToMap(diagnostics, (value) => toFilePath(value[0]), (value) => value[1]); @@ -123943,15 +125010,19 @@ function getBuildInfoFileVersionMap(program, buildInfoPath, host) { } } } -function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) { +function getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host) { + if (!isNonIncrementalBuildInfo(buildInfo)) return void 0; + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + return buildInfo.root.map((r) => toPath(r, buildInfoDirectory, getCanonicalFileName)); +} +function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) { return { - getState: notImplemented, - saveEmitState: noop, - restoreEmitState: noop, + state: void 0, getProgram, - getProgramOrUndefined: () => getState().program, - releaseProgram: () => getState().program = void 0, - getCompilerOptions: () => getState().compilerOptions, + getProgramOrUndefined: () => state.program, + releaseProgram: () => state.program = void 0, + getCompilerOptions: () => state.compilerOptions, getSourceFile: (fileName) => getProgram().getSourceFile(fileName), getSourceFiles: () => getProgram().getSourceFiles(), getOptionsDiagnostics: (cancellationToken) => getProgram().getOptionsDiagnostics(cancellationToken), @@ -123967,13 +125038,23 @@ function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) close: noop }; function getProgram() { - return Debug.checkDefined(getState().program); + return Debug.checkDefined(state.program); } } // src/compiler/builderPublic.ts function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { - return createBuilderProgram(1 /* EmitAndSemanticDiagnosticsBuilderProgram */, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences)); + return createBuilderProgram( + 1 /* EmitAndSemanticDiagnosticsBuilderProgram */, + getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ) + ); } // src/compiler/resolutionCache.ts @@ -123986,9 +125067,9 @@ function removeIgnoredPath(path) { function perceivedOsRootLengthForWatching(pathComponents2, length2) { if (length2 <= 1) return 1; let indexAfterOsRoot = 1; - let isDosStyle = pathComponents2[0].search(/[a-zA-Z]:/) === 0; + let isDosStyle = pathComponents2[0].search(/[a-z]:/i) === 0; if (pathComponents2[0] !== directorySeparator && !isDosStyle && // Non dos style paths - pathComponents2[1].search(/[a-zA-Z]\$$/) === 0) { + pathComponents2[1].search(/[a-z]\$$/i) === 0) { if (length2 === 2) return 2; indexAfterOsRoot = 2; isDosStyle = true; @@ -124023,7 +125104,7 @@ function canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(fileOrDirPath) { function canWatchAffectingLocation(filePath) { return canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(filePath); } -function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath, rootDir, rootPath, rootPathComponents, getCurrentDirectory) { +function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath, rootDir, rootPath, rootPathComponents, getCurrentDirectory, preferNonRecursiveWatch) { const failedLookupPathComponents = getPathComponents(failedLookupLocationPath); failedLookupLocation = isRootedDiskPath(failedLookupLocation) ? normalizePath(failedLookupLocation) : getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory()); const failedLookupComponents = getPathComponents(failedLookupLocation); @@ -124055,10 +125136,11 @@ function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLoo perceivedOsRootLength, nodeModulesIndex, rootPathComponents, - lastNodeModulesIndex + lastNodeModulesIndex, + preferNonRecursiveWatch ); } -function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dirPathComponents, dirPathComponentsLength, perceivedOsRootLength, nodeModulesIndex, rootPathComponents, lastNodeModulesIndex) { +function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dirPathComponents, dirPathComponentsLength, perceivedOsRootLength, nodeModulesIndex, rootPathComponents, lastNodeModulesIndex, preferNonRecursiveWatch) { if (nodeModulesIndex !== -1) { return getDirectoryOfFailedLookupWatch( dirComponents, @@ -124069,11 +125151,13 @@ function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dir } let nonRecursive = true; let length2 = dirPathComponentsLength; - for (let i = 0; i < dirPathComponentsLength; i++) { - if (dirPathComponents[i] !== rootPathComponents[i]) { - nonRecursive = false; - length2 = Math.max(i + 1, perceivedOsRootLength + 1); - break; + if (!preferNonRecursiveWatch) { + for (let i = 0; i < dirPathComponentsLength; i++) { + if (dirPathComponents[i] !== rootPathComponents[i]) { + nonRecursive = false; + length2 = Math.max(i + 1, perceivedOsRootLength + 1); + break; + } } } return getDirectoryOfFailedLookupWatch( @@ -124101,7 +125185,7 @@ function getDirectoryOfFailedLookupWatch(dirComponents, dirPathComponents, lengt packageDirPath: packageDirLength !== void 0 ? getPathFromPathComponents(dirPathComponents, packageDirLength) : void 0 }; } -function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath, rootPath, rootPathComponents, getCurrentDirectory, filterCustomPath) { +function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath, rootPath, rootPathComponents, getCurrentDirectory, preferNonRecursiveWatch, filterCustomPath) { const typeRootPathComponents = getPathComponents(typeRootPath); if (isInDirectoryPath(rootPathComponents, typeRootPathComponents)) { return rootPath; @@ -124114,7 +125198,8 @@ function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootP perceivedOsRootLengthForWatching(typeRootPathComponents, typeRootPathComponents.length), typeRootPathComponents.indexOf("node_modules"), rootPathComponents, - typeRootPathComponents.lastIndexOf("node_modules") + typeRootPathComponents.lastIndexOf("node_modules"), + preferNonRecursiveWatch ); return toWatch && filterCustomPath(toWatch.dirPath) ? toWatch.dirPath : void 0; } @@ -124170,7 +125255,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW let filesWithChangedSetOfUnresolvedImports; let filesWithInvalidatedResolutions; let filesWithInvalidatedNonRelativeUnresolvedImports; - const nonRelativeExternalModuleResolutions = createMultiMap(); + const nonRelativeExternalModuleResolutions = /* @__PURE__ */ new Set(); const resolutionsWithFailedLookups = /* @__PURE__ */ new Set(); const resolutionsWithOnlyAffectingLocations = /* @__PURE__ */ new Set(); const resolvedFileToResolution = /* @__PURE__ */ new Map(); @@ -124251,12 +125336,6 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW clear: clear2, onChangesAffectModuleResolution }; - function getResolvedModule(resolution) { - return resolution.resolvedModule; - } - function getResolvedTypeReferenceDirective(resolution) { - return resolution.resolvedTypeReferenceDirective; - } function clear2() { clearMap(directoryWatchesOfFailedLookups, closeFileWatcherOf); clearMap(fileWatchesOfAffectingLocations, closeFileWatcherOf); @@ -124327,8 +125406,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW moduleResolutionCache.clearAllExceptPackageJsonInfoCache(); typeReferenceDirectiveResolutionCache.clearAllExceptPackageJsonInfoCache(); libraryResolutionCache.clearAllExceptPackageJsonInfoCache(); - nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions); - nonRelativeExternalModuleResolutions.clear(); + watchFailedLookupLocationOfNonRelativeModuleResolutions(); isSymlinkCache.clear(); } function cleanupLibResolutionWatching(newProgram) { @@ -124338,7 +125416,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW stopWatchFailedLookupLocationOfResolution( resolution, resolutionHost.toPath(getInferredLibraryNameResolveFrom(resolutionHost.getCompilationSettings(), getCurrentDirectory(), libFileName)), - getResolvedModule + getResolvedModuleFromResolution ); resolvedLibraries.delete(libFileName); } @@ -124347,13 +125425,12 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW function finishCachingPerDirectoryResolution(newProgram, oldProgram) { filesWithInvalidatedNonRelativeUnresolvedImports = void 0; allModuleAndTypeResolutionsAreInvalidated = false; - nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions); - nonRelativeExternalModuleResolutions.clear(); + watchFailedLookupLocationOfNonRelativeModuleResolutions(); if (newProgram !== oldProgram) { cleanupLibResolutionWatching(newProgram); newProgram == null ? void 0 : newProgram.getSourceFiles().forEach((newFile) => { var _a; - const expected = isExternalOrCommonJsModule(newFile) ? ((_a = newFile.packageJsonLocations) == null ? void 0 : _a.length) ?? 0 : 0; + const expected = ((_a = newFile.packageJsonLocations) == null ? void 0 : _a.length) ?? 0; const existing = impliedFormatPackageJsons.get(newFile.resolvedPath) ?? emptyArray; for (let i = existing.length; i < expected; i++) { createFileWatcherOfAffectingLocation( @@ -124518,7 +125595,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW getModuleResolutionHost(resolutionHost), typeReferenceDirectiveResolutionCache ), - getResolutionWithResolvedFileName: getResolvedTypeReferenceDirective, + getResolutionWithResolvedFileName: getResolvedTypeReferenceDirectiveFromResolution, shouldRetryResolution: (resolution) => resolution.resolvedTypeReferenceDirective === void 0, deferWatchingNonRelativeResolution: false }); @@ -124539,7 +125616,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW resolutionHost, moduleResolutionCache ), - getResolutionWithResolvedFileName: getResolvedModule, + getResolutionWithResolvedFileName: getResolvedModuleFromResolution, shouldRetryResolution: (resolution) => !resolution.resolvedModule || !resolutionExtensionIsTSOrJson(resolution.resolvedModule.extension), logChanges: logChangesWhenResolvingModule, deferWatchingNonRelativeResolution: true @@ -124557,17 +125634,17 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW libraryName, resolution, path, - getResolvedModule, + getResolvedModuleFromResolution, /*deferWatchingNonRelativeResolution*/ false ); resolvedLibraries.set(libFileName, resolution); if (existingResolution) { - stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolvedModule); + stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolvedModuleFromResolution); } } else { if (isTraceEnabled(options, host)) { - const resolved = getResolvedModule(resolution); + const resolved = getResolvedModuleFromResolution(resolution); trace( host, (resolved == null ? void 0 : resolved.resolvedFileName) ? resolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved, @@ -124606,27 +125683,20 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW return endsWith(dirPath, "/node_modules/@types"); } function watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, filePath, getResolutionWithResolvedFileName, deferWatchingNonRelativeResolution) { - var _a; - if (resolution.refCount) { - resolution.refCount++; - Debug.assertIsDefined(resolution.files); + (resolution.files ?? (resolution.files = /* @__PURE__ */ new Set())).add(filePath); + if (resolution.files.size !== 1) return; + if (!deferWatchingNonRelativeResolution || isExternalModuleNameRelative(name)) { + watchFailedLookupLocationOfResolution(resolution); } else { - resolution.refCount = 1; - Debug.assert(!((_a = resolution.files) == null ? void 0 : _a.size)); - if (!deferWatchingNonRelativeResolution || isExternalModuleNameRelative(name)) { - watchFailedLookupLocationOfResolution(resolution); - } else { - nonRelativeExternalModuleResolutions.add(name, resolution); - } - const resolved = getResolutionWithResolvedFileName(resolution); - if (resolved && resolved.resolvedFileName) { - const key = resolutionHost.toPath(resolved.resolvedFileName); - let resolutions = resolvedFileToResolution.get(key); - if (!resolutions) resolvedFileToResolution.set(key, resolutions = /* @__PURE__ */ new Set()); - resolutions.add(resolution); - } + nonRelativeExternalModuleResolutions.add(resolution); + } + const resolved = getResolutionWithResolvedFileName(resolution); + if (resolved && resolved.resolvedFileName) { + const key = resolutionHost.toPath(resolved.resolvedFileName); + let resolutions = resolvedFileToResolution.get(key); + if (!resolutions) resolvedFileToResolution.set(key, resolutions = /* @__PURE__ */ new Set()); + resolutions.add(resolution); } - (resolution.files ?? (resolution.files = /* @__PURE__ */ new Set())).add(filePath); } function watchFailedLookupLocation(failedLookupLocation, setAtRoot) { const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); @@ -124636,7 +125706,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootDir, rootPath, rootPathComponents, - getCurrentDirectory + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch ); if (toWatch) { const { dir, dirPath, nonRecursive, packageDir, packageDirPath } = toWatch; @@ -124651,7 +125722,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW return setAtRoot; } function watchFailedLookupLocationOfResolution(resolution) { - Debug.assert(!!resolution.refCount); + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); const { failedLookupLocations, affectingLocations, alternateResult } = resolution; if (!(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !(affectingLocations == null ? void 0 : affectingLocations.length) && !alternateResult) return; if ((failedLookupLocations == null ? void 0 : failedLookupLocations.length) || alternateResult) resolutionsWithFailedLookups.add(resolution); @@ -124677,7 +125749,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW watchAffectingLocationsOfResolution(resolution, !(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !alternateResult); } function watchAffectingLocationsOfResolution(resolution, addToResolutionsWithOnlyAffectingLocations) { - Debug.assert(!!resolution.refCount); + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); const { affectingLocations } = resolution; if (!(affectingLocations == null ? void 0 : affectingLocations.length)) return; if (addToResolutionsWithOnlyAffectingLocations) resolutionsWithOnlyAffectingLocations.add(resolution); @@ -124751,17 +125824,9 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW (_a = watcher == null ? void 0 : watcher.symlinks) == null ? void 0 : _a.forEach((path2) => invalidateAffectingFileWatcher(path2, packageJsonMap)); packageJsonMap == null ? void 0 : packageJsonMap.delete(resolutionHost.toPath(path)); } - function watchFailedLookupLocationOfNonRelativeModuleResolutions(resolutions, name) { - const program = resolutionHost.getCurrentProgram(); - if (!program || !program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(name)) { - resolutions.forEach(watchFailedLookupLocationOfResolution); - } else { - resolutions.forEach((resolution) => watchAffectingLocationsOfResolution( - resolution, - /*addToResolutionsWithOnlyAffectingLocations*/ - true - )); - } + function watchFailedLookupLocationOfNonRelativeModuleResolutions() { + nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfResolution); + nonRelativeExternalModuleResolutions.clear(); } function createDirectoryWatcherForPackageDir(dir, dirPath, packageDir, packageDirPath, nonRecursive) { Debug.assert(!nonRecursive); @@ -124781,11 +125846,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW ); } else if (packageDirWatcher.isSymlink !== isSymlink) { packageDirWatcher.dirPathToWatcher.forEach((watcher) => { - removeDirectoryWatcher( - packageDirWatcher.isSymlink ? packageDirPath : dirPath, - /*syncDirWatcherRemove*/ - false - ); + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); watcher.watcher = createDirPathToWatcher(); }); packageDirWatcher.isSymlink = isSymlink; @@ -124825,7 +125886,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW } return dirWatcher; } - function stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot, syncDirWatcherRemove) { + function stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot) { const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); const toWatch = getDirectoryToWatchFailedLookupLocation( failedLookupLocation, @@ -124833,7 +125894,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootDir, rootPath, rootPathComponents, - getCurrentDirectory + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch ); if (toWatch) { const { dirPath, packageDirPath } = toWatch; @@ -124844,7 +125906,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW const forDirPath = packageDirWatcher.dirPathToWatcher.get(dirPath); forDirPath.refCount--; if (forDirPath.refCount === 0) { - removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath, syncDirWatcherRemove); + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); packageDirWatcher.dirPathToWatcher.delete(dirPath); if (packageDirWatcher.isSymlink) { const refCount = dirPathToSymlinkPackageRefCount.get(dirPath) - 1; @@ -124854,20 +125916,17 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW dirPathToSymlinkPackageRefCount.set(dirPath, refCount); } } - if (syncDirWatcherRemove) closePackageDirWatcher(packageDirWatcher, packageDirPath); } } else { - removeDirectoryWatcher(dirPath, syncDirWatcherRemove); + removeDirectoryWatcher(dirPath); } } return removeAtRoot; } - function stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName, syncDirWatcherRemove) { + function stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName) { Debug.checkDefined(resolution.files).delete(filePath); - resolution.refCount--; - if (resolution.refCount) { - return; - } + if (resolution.files.size) return; + resolution.files = void 0; const resolved = getResolutionWithResolvedFileName(resolution); if (resolved && resolved.resolvedFileName) { const key = resolutionHost.toPath(resolved.resolvedFileName); @@ -124879,11 +125938,11 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW let removeAtRoot = false; if (failedLookupLocations) { for (const failedLookupLocation of failedLookupLocations) { - removeAtRoot = stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot, syncDirWatcherRemove); + removeAtRoot = stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot); } } - if (alternateResult) removeAtRoot = stopWatchFailedLookupLocation(alternateResult, removeAtRoot, syncDirWatcherRemove); - if (removeAtRoot) removeDirectoryWatcher(rootPath, syncDirWatcherRemove); + if (alternateResult) removeAtRoot = stopWatchFailedLookupLocation(alternateResult, removeAtRoot); + if (removeAtRoot) removeDirectoryWatcher(rootPath); } else if (affectingLocations == null ? void 0 : affectingLocations.length) { resolutionsWithOnlyAffectingLocations.delete(resolution); } @@ -124891,14 +125950,12 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW for (const affectingLocation of affectingLocations) { const watcher = fileWatchesOfAffectingLocations.get(affectingLocation); watcher.resolutions--; - if (syncDirWatcherRemove) closeFileWatcherOfAffectingLocation(watcher, affectingLocation); } } } - function removeDirectoryWatcher(dirPath, syncDirWatcherRemove) { + function removeDirectoryWatcher(dirPath) { const dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); dirWatcher.refCount--; - if (syncDirWatcherRemove) closeDirectoryWatchesOfFailedLookup(dirWatcher, dirPath); } function createDirectoryWatcher(directory, dirPath, nonRecursive) { return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, (fileOrDirectory) => { @@ -124909,15 +125966,14 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath); }, nonRecursive ? 0 /* None */ : 1 /* Recursive */); } - function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName, syncDirWatcherRemove) { + function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName) { const resolutions = cache.get(filePath); if (resolutions) { resolutions.forEach( (resolution) => stopWatchFailedLookupLocationOfResolution( resolution, filePath, - getResolutionWithResolvedFileName, - syncDirWatcherRemove + getResolutionWithResolvedFileName ) ); cache.delete(filePath); @@ -124931,9 +125987,9 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW if (!resolvedProjectReference) return; resolvedProjectReference.commandLine.fileNames.forEach((f) => removeResolutionsOfFile(resolutionHost.toPath(f))); } - function removeResolutionsOfFile(filePath, syncDirWatcherRemove) { - removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModule, syncDirWatcherRemove); - removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirective, syncDirWatcherRemove); + function removeResolutionsOfFile(filePath) { + removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModuleFromResolution); + removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirectiveFromResolution); } function invalidateResolutions(resolutions, canInvalidate) { if (!resolutions) return false; @@ -125063,6 +126119,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootPath, rootPathComponents, getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch, (dirPath2) => directoryWatchesOfFailedLookups.has(dirPath2) || dirPathToSymlinkPackageRefCount.has(dirPath2) ); if (dirPath) { @@ -125228,7 +126285,7 @@ function createTabularErrorsDisplay(filesInError, host) { if (distinctFiles.length === 0) return ""; const numberLength = (num) => Math.log(num) * Math.LOG10E + 1; const fileToErrorCount = distinctFiles.map((file) => [file, countWhere(filesInError, (fileInError) => fileInError.fileName === file.fileName)]); - const maxErrors = fileToErrorCount.reduce((acc, value) => Math.max(acc, value[1] || 0), 0); + const maxErrors = maxBy(fileToErrorCount, 0, (value) => value[1]); const headerRow = Diagnostics.Errors_Files.message; const leftColumnHeadingLength = headerRow.split(" ")[0].length; const leftPaddingGoal = Math.max(leftColumnHeadingLength, numberLength(maxErrors)); @@ -125245,13 +126302,13 @@ function createTabularErrorsDisplay(filesInError, host) { }); return tabularData; } -function isBuilderProgram2(program) { - return !!program.getState; +function isBuilderProgram(program) { + return !!program.state; } function listFiles(program, write) { const options = program.getCompilerOptions(); if (options.explainFiles) { - explainFiles(isBuilderProgram2(program) ? program.getProgram() : program, write); + explainFiles(isBuilderProgram(program) ? program.getProgram() : program, write); } else if (options.listFiles || options.listFilesOnly) { forEach(program.getSourceFiles(), (file) => { write(file.fileName); @@ -125265,10 +126322,10 @@ function explainFiles(program, write) { for (const file of program.getSourceFiles()) { write(`${toFileName(file, relativeFileName)}`); (_a = reasons.get(file.path)) == null ? void 0 : _a.forEach((reason) => write(` ${fileIncludeReasonToDiagnostics(program, reason, relativeFileName).messageText}`)); - (_b = explainIfFileIsRedirectAndImpliedFormat(file, relativeFileName)) == null ? void 0 : _b.forEach((d) => write(` ${d.messageText}`)); + (_b = explainIfFileIsRedirectAndImpliedFormat(file, program.getCompilerOptionsForFile(file), relativeFileName)) == null ? void 0 : _b.forEach((d) => write(` ${d.messageText}`)); } } -function explainIfFileIsRedirectAndImpliedFormat(file, fileNameConvertor) { +function explainIfFileIsRedirectAndImpliedFormat(file, options, fileNameConvertor) { var _a; let result; if (file.path !== file.resolvedPath) { @@ -125288,7 +126345,7 @@ function explainIfFileIsRedirectAndImpliedFormat(file, fileNameConvertor) { )); } if (isExternalOrCommonJsModule(file)) { - switch (file.impliedNodeFormat) { + switch (getImpliedNodeFormatForEmitWorker(file, options)) { case 99 /* ESNext */: if (file.packageJsonScope) { (result ?? (result = [])).push(chainDiagnosticMessages( @@ -125456,7 +126513,7 @@ function toFileName(file, fileNameConvertor) { return fileNameConvertor ? fileNameConvertor(fileName) : fileName; } function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummary, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { - const isListFilesOnly = !!program.getCompilerOptions().listFilesOnly; + const options = program.getCompilerOptions(); const allDiagnostics = program.getConfigFileParsingDiagnostics().slice(); const configFileParsingDiagnosticsLength = allDiagnostics.length; addRange(allDiagnostics, program.getSyntacticDiagnostics( @@ -125466,7 +126523,7 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar )); if (allDiagnostics.length === configFileParsingDiagnosticsLength) { addRange(allDiagnostics, program.getOptionsDiagnostics(cancellationToken)); - if (!isListFilesOnly) { + if (!options.listFilesOnly) { addRange(allDiagnostics, program.getGlobalDiagnostics(cancellationToken)); if (allDiagnostics.length === configFileParsingDiagnosticsLength) { addRange(allDiagnostics, program.getSemanticDiagnostics( @@ -125475,9 +126532,16 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar cancellationToken )); } + if (options.noEmit && getEmitDeclarations(options) && allDiagnostics.length === configFileParsingDiagnosticsLength) { + addRange(allDiagnostics, program.getDeclarationDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + )); + } } } - const emitResult = isListFilesOnly ? { emitSkipped: true, diagnostics: emptyArray } : program.emit( + const emitResult = options.listFilesOnly ? { emitSkipped: true, diagnostics: emptyArray } : program.emit( /*targetSourceFile*/ void 0, writeFile2, @@ -125485,13 +126549,12 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar emitOnlyDtsFiles, customTransformers ); - const { emittedFiles, diagnostics: emitDiagnostics } = emitResult; - addRange(allDiagnostics, emitDiagnostics); + addRange(allDiagnostics, emitResult.diagnostics); const diagnostics = sortAndDeduplicateDiagnostics(allDiagnostics); diagnostics.forEach(reportDiagnostic); if (write) { const currentDir = program.getCurrentDirectory(); - forEach(emittedFiles, (file) => { + forEach(emitResult.emittedFiles, (file) => { const filepath = getNormalizedAbsolutePath(file, currentDir); write(`TSFILE: ${filepath}`); }); @@ -125532,7 +126595,8 @@ function createWatchHost(system = sys, reportWatchStatus2) { watchFile: maybeBind(system, system.watchFile) || returnNoopFileWatcher, watchDirectory: maybeBind(system, system.watchDirectory) || returnNoopFileWatcher, setTimeout: maybeBind(system, system.setTimeout) || noop, - clearTimeout: maybeBind(system, system.clearTimeout) || noop + clearTimeout: maybeBind(system, system.clearTimeout) || noop, + preferNonRecursiveWatch: system.preferNonRecursiveWatch }; } var WatchType = { @@ -125751,8 +126815,8 @@ function readBuilderProgram(compilerOptions, host) { if (!content) return void 0; buildInfo = getBuildInfo(buildInfoPath, content); } - if (!buildInfo || buildInfo.version !== version || !buildInfo.program) return void 0; - return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); + if (!buildInfo || buildInfo.version !== version || !isIncrementalBuildInfo(buildInfo)) return void 0; + return createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host); } function createIncrementalCompilerHost(options, system = sys) { const host = createCompilerHostWorker( @@ -125838,6 +126902,7 @@ function createWatchProgram(host) { compilerHost.toPath = toPath3; compilerHost.getCompilationSettings = () => compilerOptions; compilerHost.useSourceOfProjectReferenceRedirect = maybeBind(host, host.useSourceOfProjectReferenceRedirect); + compilerHost.preferNonRecursiveWatch = host.preferNonRecursiveWatch; compilerHost.watchDirectoryOfFailedLookupLocation = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.FailedLookupLocations); compilerHost.watchAffectingFileLocation = (file, cb) => watchFile2(file, cb, 2e3 /* High */, watchOptions, WatchType.AffectingFileLocation); compilerHost.watchTypeRootsDirectory = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.TypeRoots); @@ -126149,22 +127214,17 @@ function createWatchProgram(host) { updateProgram(); } function updateProgram() { - var _a, _b, _c, _d; switch (updateLevel) { case 1 /* RootNamesAndUpdate */: - (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); reloadFileNamesFromConfigFile(); break; case 2 /* Full */: - (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; default: - (_c = perfLogger) == null ? void 0 : _c.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); break; } - (_d = perfLogger) == null ? void 0 : _d.logStopUpdateProgram("Done"); return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { @@ -126447,7 +127507,6 @@ function resolveConfigFileProjectName(project) { // src/compiler/tsbuildPublic.ts var minimumDate = /* @__PURE__ */ new Date(-864e13); -var maximumDate = /* @__PURE__ */ new Date(864e13); function getOrCreateValueFromConfigFileMap(configFileMap, resolved, createT) { const existingValue = configFileMap.get(resolved); let newValue; @@ -126502,6 +127561,7 @@ function getCompilerOptionsOfBuildOptions(buildOptions) { commonOptionsWithBuild.forEach((option) => { if (hasProperty(buildOptions, option.name)) result[option.name] = buildOptions[option.name]; }); + result.tscBuild = true; return result; } function createSolutionBuilder(host, rootNames, defaultOptions) { @@ -126900,7 +127960,7 @@ function createUpdateOutputFileStampsProject(state, project, projectPath, config } }; } -function createBuildOrUpdateInvalidedProject(state, project, projectPath, projectIndex, config, buildOrder) { +function createBuildOrUpdateInvalidedProject(state, project, projectPath, projectIndex, config, status, buildOrder) { let step = 0 /* CreateProgram */; let program; let buildResult; @@ -126951,17 +128011,13 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec } ); } - executeSteps(2 /* SemanticDiagnostics */, cancellationToken); - if (step === 4 /* EmitBuildInfo */) { - return emitBuildInfo(writeFile2, cancellationToken); - } - if (step !== 3 /* Emit */) return void 0; + executeSteps(0 /* CreateProgram */, cancellationToken); return emit(writeFile2, cancellationToken, customTransformers); }, done }; function done(cancellationToken, writeFile2, customTransformers) { - executeSteps(6 /* Done */, cancellationToken, writeFile2, customTransformers); + executeSteps(3 /* Done */, cancellationToken, writeFile2, customTransformers); mark("SolutionBuilder::Projects built"); return doneInvalidatedProject(state, projectPath); } @@ -126978,14 +128034,14 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec if (state.options.dry) { reportStatus(state, Diagnostics.A_non_dry_build_would_build_project_0, project); buildResult = 1 /* Success */; - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return; } if (state.options.verbose) reportStatus(state, Diagnostics.Building_project_0, project); if (config.fileNames.length === 0) { reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); buildResult = 0 /* None */; - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return; } const { host, compilerHost } = state; @@ -127013,185 +128069,97 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec } step++; } - function handleDiagnostics(diagnostics, errorFlags, errorType) { - if (diagnostics.length) { - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - diagnostics, - errorFlags, - errorType - )); - } else { - step++; - } - } - function getSyntaxDiagnostics(cancellationToken) { - Debug.assertIsDefined(program); - handleDiagnostics( - [ - ...program.getConfigFileParsingDiagnostics(), - ...program.getOptionsDiagnostics(cancellationToken), - ...program.getGlobalDiagnostics(cancellationToken), - ...program.getSyntacticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken - ) - ], - 8 /* SyntaxErrors */, - "Syntactic" - ); - } - function getSemanticDiagnostics(cancellationToken) { - handleDiagnostics( - Debug.checkDefined(program).getSemanticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken - ), - 16 /* TypeErrors */, - "Semantic" - ); - } function emit(writeFileCallback, cancellationToken, customTransformers) { var _a, _b, _c; Debug.assertIsDefined(program); - Debug.assert(step === 3 /* Emit */); - const saved = program.saveEmitState(); - let declDiagnostics; - const reportDeclarationDiagnostics = (d) => (declDiagnostics || (declDiagnostics = [])).push(d); - const outputFiles = []; - const { emitResult } = emitFilesAndReportErrors( + Debug.assert(step === 1 /* Emit */); + const { host, compilerHost } = state; + const emittedOutputs = /* @__PURE__ */ new Map(); + const options = program.getCompilerOptions(); + const isIncremental = isIncrementalCompilation(options); + let outputTimeStampMap; + let now; + const { emitResult, diagnostics } = emitFilesAndReportErrors( program, - reportDeclarationDiagnostics, - /*write*/ - void 0, + (d) => host.reportDiagnostic(d), + state.write, /*reportSummary*/ void 0, - (name, text, writeByteOrderMark, _onError, _sourceFiles, data) => outputFiles.push({ name, text, writeByteOrderMark, data }), + (name, text, writeByteOrderMark, onError, sourceFiles, data) => { + var _a2; + const path = toPath2(state, name); + emittedOutputs.set(toPath2(state, name), name); + if (data == null ? void 0 : data.buildInfo) { + now || (now = getCurrentTime(state.host)); + const isChangedSignature2 = (_a2 = program.hasChangedEmitSignature) == null ? void 0 : _a2.call(program); + const existing = getBuildInfoCacheEntry(state, name, projectPath); + if (existing) { + existing.buildInfo = data.buildInfo; + existing.modifiedTime = now; + if (isChangedSignature2) existing.latestChangedDtsTime = now; + } else { + state.buildInfoCache.set(projectPath, { + path: toPath2(state, name), + buildInfo: data.buildInfo, + modifiedTime: now, + latestChangedDtsTime: isChangedSignature2 ? now : void 0 + }); + } + } + const modifiedTime = (data == null ? void 0 : data.differsOnlyInMap) ? getModifiedTime(state.host, name) : void 0; + (writeFileCallback || compilerHost.writeFile)( + name, + text, + writeByteOrderMark, + onError, + sourceFiles, + data + ); + if (data == null ? void 0 : data.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime); + else if (!isIncremental && state.watch) { + (outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host))); + } + }, cancellationToken, /*emitOnlyDtsFiles*/ - false, + void 0, customTransformers || ((_b = (_a = state.host).getCustomTransformers) == null ? void 0 : _b.call(_a, project)) ); - if (declDiagnostics) { - program.restoreEmitState(saved); - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - declDiagnostics, - 32 /* DeclarationEmitErrors */, - "Declaration file" - )); - return { - emitSkipped: true, - diagnostics: emitResult.diagnostics - }; + if ((!options.noEmitOnError || !diagnostics.length) && (emittedOutputs.size || status.type !== 8 /* OutOfDateBuildInfoWithErrors */)) { + updateOutputTimestampsWorker(state, config, projectPath, Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs); } - const { host, compilerHost } = state; - const resultFlags = ((_c = program.hasChangedEmitSignature) == null ? void 0 : _c.call(program)) ? 0 /* None */ : 2 /* DeclarationOutputUnchanged */; - const emitterDiagnostics = createDiagnosticCollection(); - const emittedOutputs = /* @__PURE__ */ new Map(); - const options = program.getCompilerOptions(); - const isIncremental = isIncrementalCompilation(options); - let outputTimeStampMap; - let now; - outputFiles.forEach(({ name, text, writeByteOrderMark, data }) => { - const path = toPath2(state, name); - emittedOutputs.set(toPath2(state, name), name); - if (data == null ? void 0 : data.buildInfo) setBuildInfo(state, data.buildInfo, projectPath, options, resultFlags); - const modifiedTime = (data == null ? void 0 : data.differsOnlyInMap) ? getModifiedTime(state.host, name) : void 0; - writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark); - if (data == null ? void 0 : data.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime); - else if (!isIncremental && state.watch) { - (outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host))); - } - }); - finishEmit( - emitterDiagnostics, - emittedOutputs, - outputFiles.length ? outputFiles[0].name : getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()), - resultFlags - ); - return emitResult; - } - function emitBuildInfo(writeFileCallback, cancellationToken) { - Debug.assertIsDefined(program); - Debug.assert(step === 4 /* EmitBuildInfo */); - const emitResult = program.emitBuildInfo((name, text, writeByteOrderMark, onError, sourceFiles, data) => { - if (data == null ? void 0 : data.buildInfo) setBuildInfo(state, data.buildInfo, projectPath, program.getCompilerOptions(), 2 /* DeclarationOutputUnchanged */); - if (writeFileCallback) writeFileCallback(name, text, writeByteOrderMark, onError, sourceFiles, data); - else state.compilerHost.writeFile(name, text, writeByteOrderMark, onError, sourceFiles, data); - }, cancellationToken); - if (emitResult.diagnostics.length) { - reportErrors(state, emitResult.diagnostics); - state.diagnostics.set(projectPath, [...state.diagnostics.get(projectPath), ...emitResult.diagnostics]); - buildResult = 64 /* EmitErrors */ & buildResult; - } - if (emitResult.emittedFiles && state.write) { - emitResult.emittedFiles.forEach((name) => listEmittedFile(state, config, name)); + state.projectErrorsReported.set(projectPath, true); + buildResult = ((_c = program.hasChangedEmitSignature) == null ? void 0 : _c.call(program)) ? 0 /* None */ : 2 /* DeclarationOutputUnchanged */; + if (!diagnostics.length) { + state.diagnostics.delete(projectPath); + state.projectStatus.set(projectPath, { + type: 1 /* UpToDate */, + oldestOutputFileName: firstOrUndefinedIterator(emittedOutputs.values()) ?? getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()) + }); + } else { + state.diagnostics.set(projectPath, diagnostics); + state.projectStatus.set(projectPath, { type: 0 /* Unbuildable */, reason: `it had errors` }); + buildResult |= 4 /* AnyErrors */; } afterProgramDone(state, program); - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return emitResult; } - function finishEmit(emitterDiagnostics, emittedOutputs, oldestOutputFileName, resultFlags) { - const emitDiagnostics = emitterDiagnostics.getDiagnostics(); - if (emitDiagnostics.length) { - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - emitDiagnostics, - 64 /* EmitErrors */, - "Emit" - )); - return emitDiagnostics; - } - if (state.write) { - emittedOutputs.forEach((name) => listEmittedFile(state, config, name)); - } - updateOutputTimestampsWorker(state, config, projectPath, Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs); - state.diagnostics.delete(projectPath); - state.projectStatus.set(projectPath, { - type: 1 /* UpToDate */, - oldestOutputFileName - }); - afterProgramDone(state, program); - step = 5 /* QueueReferencingProjects */; - buildResult = resultFlags; - return emitDiagnostics; - } function executeSteps(till, cancellationToken, writeFile2, customTransformers) { - while (step <= till && step < 6 /* Done */) { + while (step <= till && step < 3 /* Done */) { const currentStep = step; switch (step) { case 0 /* CreateProgram */: createProgram2(); break; - case 1 /* SyntaxDiagnostics */: - getSyntaxDiagnostics(cancellationToken); - break; - case 2 /* SemanticDiagnostics */: - getSemanticDiagnostics(cancellationToken); - break; - case 3 /* Emit */: + case 1 /* Emit */: emit(writeFile2, cancellationToken, customTransformers); break; - case 4 /* EmitBuildInfo */: - emitBuildInfo(writeFile2, cancellationToken); - break; - case 5 /* QueueReferencingProjects */: + case 2 /* QueueReferencingProjects */: queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, Debug.checkDefined(buildResult)); step++; break; - case 6 /* Done */: + case 3 /* Done */: default: assertType(step); } @@ -127241,7 +128209,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { } continue; } - if (status.type === 2 /* UpToDateWithUpstreamTypes */ || status.type === 14 /* UpToDateWithInputFileText */) { + if (status.type === 2 /* UpToDateWithUpstreamTypes */ || status.type === 15 /* UpToDateWithInputFileText */) { reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); return { kind: 1 /* UpdateOutputFileStamps */, @@ -127253,7 +128221,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { }; } } - if (status.type === 11 /* UpstreamBlocked */) { + if (status.type === 12 /* UpstreamBlocked */) { verboseReportProjectStatus(state, project, status); reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); projectPendingBuild.delete(projectPath); @@ -127267,7 +128235,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { } continue; } - if (status.type === 15 /* ContainerOnly */) { + if (status.type === 16 /* ContainerOnly */) { verboseReportProjectStatus(state, project, status); reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); projectPendingBuild.delete(projectPath); @@ -127292,6 +128260,7 @@ function createInvalidatedProjectWithInfo(state, info, buildOrder) { info.projectPath, info.projectIndex, info.config, + info.status, buildOrder ) : createUpdateOutputFileStampsProject( state, @@ -127306,11 +128275,6 @@ function getNextInvalidatedProject(state, buildOrder, reportQueue) { if (!info) return info; return createInvalidatedProjectWithInfo(state, info, buildOrder); } -function listEmittedFile({ write }, proj, file) { - if (write && proj.options.listEmittedFiles) { - write(`TSFILE: ${file}`); - } -} function getOldProgram({ options, builderPrograms, compilerHost }, proj, parsed) { if (options.force) return void 0; const value = builderPrograms.get(proj); @@ -127319,7 +128283,6 @@ function getOldProgram({ options, builderPrograms, compilerHost }, proj, parsed) } function afterProgramDone(state, program) { if (program) { - if (state.write) listFiles(program, state.write); if (state.host.afterProgramEmitAndDiagnostics) { state.host.afterProgramEmitAndDiagnostics(program); } @@ -127327,14 +128290,6 @@ function afterProgramDone(state, program) { } state.projectCompilerOptions = state.baseCompilerOptions; } -function buildErrors(state, resolvedPath, program, config, diagnostics, buildResult, errorType) { - const canEmitBuildInfo = program && !program.getCompilerOptions().outFile; - reportAndStoreErrors(state, resolvedPath, diagnostics); - state.projectStatus.set(resolvedPath, { type: 0 /* Unbuildable */, reason: `${errorType} errors` }); - if (canEmitBuildInfo) return { buildResult, step: 4 /* EmitBuildInfo */ }; - afterProgramDone(state, program); - return { buildResult, step: 5 /* QueueReferencingProjects */ }; -} function isFileWatcherWithModifiedTime(value) { return !!value.watcher; } @@ -127392,23 +128347,6 @@ function getOutputTimeStampMap(state, resolvedConfigFilePath) { if (!result) state.outputTimeStamps.set(resolvedConfigFilePath, result = /* @__PURE__ */ new Map()); return result; } -function setBuildInfo(state, buildInfo, resolvedConfigPath, options, resultFlags) { - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - const existing = getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath); - const modifiedTime = getCurrentTime(state.host); - if (existing) { - existing.buildInfo = buildInfo; - existing.modifiedTime = modifiedTime; - if (!(resultFlags & 2 /* DeclarationOutputUnchanged */)) existing.latestChangedDtsTime = modifiedTime; - } else { - state.buildInfoCache.set(resolvedConfigPath, { - path: toPath2(state, buildInfoPath), - buildInfo, - modifiedTime, - latestChangedDtsTime: resultFlags & 2 /* DeclarationOutputUnchanged */ ? void 0 : modifiedTime - }); - } -} function getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath) { const path = toPath2(state, buildInfoPath); const existing = state.buildInfoCache.get(resolvedConfigPath); @@ -127436,99 +128374,107 @@ function checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, } } function getUpToDateStatusWorker(state, project, resolvedPath) { - var _a, _b, _c, _d; + var _a, _b, _c, _d, _e; if (!project.fileNames.length && !canJsonReportNoInputFiles(project.raw)) { return { - type: 15 /* ContainerOnly */ + type: 16 /* ContainerOnly */ }; } let referenceStatuses; const force = !!state.options.force; if (project.projectReferences) { - state.projectStatus.set(resolvedPath, { type: 12 /* ComputingUpstream */ }); + state.projectStatus.set(resolvedPath, { type: 13 /* ComputingUpstream */ }); for (const ref of project.projectReferences) { const resolvedRef = resolveProjectReferencePath(ref); const resolvedRefPath = toResolvedConfigFilePath(state, resolvedRef); const resolvedConfig = parseConfigFile(state, resolvedRef, resolvedRefPath); const refStatus = getUpToDateStatus(state, resolvedConfig, resolvedRefPath); - if (refStatus.type === 12 /* ComputingUpstream */ || refStatus.type === 15 /* ContainerOnly */) { + if (refStatus.type === 13 /* ComputingUpstream */ || refStatus.type === 16 /* ContainerOnly */) { continue; } - if (refStatus.type === 0 /* Unbuildable */ || refStatus.type === 11 /* UpstreamBlocked */) { + if (state.options.stopBuildOnErrors && (refStatus.type === 0 /* Unbuildable */ || refStatus.type === 12 /* UpstreamBlocked */)) { return { - type: 11 /* UpstreamBlocked */, + type: 12 /* UpstreamBlocked */, upstreamProjectName: ref.path, - upstreamProjectBlocked: refStatus.type === 11 /* UpstreamBlocked */ - }; - } - if (refStatus.type !== 1 /* UpToDate */) { - return { - type: 10 /* UpstreamOutOfDate */, - upstreamProjectName: ref.path + upstreamProjectBlocked: refStatus.type === 12 /* UpstreamBlocked */ }; } if (!force) (referenceStatuses || (referenceStatuses = [])).push({ ref, refStatus, resolvedRefPath, resolvedConfig }); } } - if (force) return { type: 16 /* ForceBuild */ }; + if (force) return { type: 17 /* ForceBuild */ }; const { host } = state; const buildInfoPath = getTsBuildInfoEmitOutputFilePath(project.options); - let oldestOutputFileName; - let oldestOutputFileTime = maximumDate; - let buildInfoTime; - let buildInfoProgram; - let buildInfoVersionMap; - if (buildInfoPath) { - const buildInfoCacheEntry2 = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath); - buildInfoTime = (buildInfoCacheEntry2 == null ? void 0 : buildInfoCacheEntry2.modifiedTime) || getModifiedTime(host, buildInfoPath); - if (buildInfoTime === missingFileModifiedTime) { - if (!buildInfoCacheEntry2) { - state.buildInfoCache.set(resolvedPath, { - path: toPath2(state, buildInfoPath), - buildInfo: false, - modifiedTime: buildInfoTime - }); - } + const isIncremental = isIncrementalCompilation(project.options); + let buildInfoCacheEntry = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath); + const buildInfoTime = (buildInfoCacheEntry == null ? void 0 : buildInfoCacheEntry.modifiedTime) || getModifiedTime(host, buildInfoPath); + if (buildInfoTime === missingFileModifiedTime) { + if (!buildInfoCacheEntry) { + state.buildInfoCache.set(resolvedPath, { + path: toPath2(state, buildInfoPath), + buildInfo: false, + modifiedTime: buildInfoTime + }); + } + return { + type: 3 /* OutputMissing */, + missingOutputFileName: buildInfoPath + }; + } + const buildInfo = getBuildInfo3(state, buildInfoPath, resolvedPath, buildInfoTime); + if (!buildInfo) { + return { + type: 4 /* ErrorReadingFile */, + fileName: buildInfoPath + }; + } + const incrementalBuildInfo = isIncremental && isIncrementalBuildInfo(buildInfo) ? buildInfo : void 0; + if ((incrementalBuildInfo || !isIncremental) && buildInfo.version !== version) { + return { + type: 14 /* TsVersionOutputOfDate */, + version: buildInfo.version + }; + } + if (!project.options.noCheck && (buildInfo.errors || // TODO: syntax errors???? + buildInfo.checkPending)) { + return { + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath + }; + } + if (incrementalBuildInfo) { + if (!project.options.noCheck && (((_a = incrementalBuildInfo.changeFileSet) == null ? void 0 : _a.length) || ((_b = incrementalBuildInfo.semanticDiagnosticsPerFile) == null ? void 0 : _b.length) || getEmitDeclarations(project.options) && ((_c = incrementalBuildInfo.emitDiagnosticsPerFile) == null ? void 0 : _c.length))) { return { - type: 3 /* OutputMissing */, - missingOutputFileName: buildInfoPath + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath }; } - const buildInfo = getBuildInfo3(state, buildInfoPath, resolvedPath, buildInfoTime); - if (!buildInfo) { + if (!project.options.noEmit && (((_d = incrementalBuildInfo.changeFileSet) == null ? void 0 : _d.length) || ((_e = incrementalBuildInfo.affectedFilesPendingEmit) == null ? void 0 : _e.length) || incrementalBuildInfo.pendingEmit !== void 0)) { return { - type: 4 /* ErrorReadingFile */, - fileName: buildInfoPath + type: 7 /* OutOfDateBuildInfoWithPendingEmit */, + buildInfoFile: buildInfoPath }; } - if (buildInfo.program && buildInfo.version !== version) { + if ((!project.options.noEmit || project.options.noEmit && getEmitDeclarations(project.options)) && getPendingEmitKindWithSeen( + project.options, + incrementalBuildInfo.options || {}, + /*emitOnlyDtsFiles*/ + void 0, + !!project.options.noEmit + )) { return { - type: 13 /* TsVersionOutputOfDate */, - version: buildInfo.version + type: 9 /* OutOfDateOptions */, + buildInfoFile: buildInfoPath }; } - if (buildInfo.program) { - if (((_a = buildInfo.program.changeFileSet) == null ? void 0 : _a.length) || (!project.options.noEmit ? ((_b = buildInfo.program.affectedFilesPendingEmit) == null ? void 0 : _b.length) || ((_c = buildInfo.program.emitDiagnosticsPerFile) == null ? void 0 : _c.length) : (_d = buildInfo.program.semanticDiagnosticsPerFile) == null ? void 0 : _d.length)) { - return { - type: 7 /* OutOfDateBuildInfo */, - buildInfoFile: buildInfoPath - }; - } - if (!project.options.noEmit && getPendingEmitKind(project.options, buildInfo.program.options || {})) { - return { - type: 8 /* OutOfDateOptions */, - buildInfoFile: buildInfoPath - }; - } - buildInfoProgram = buildInfo.program; - } - oldestOutputFileTime = buildInfoTime; - oldestOutputFileName = buildInfoPath; } + let oldestOutputFileTime = buildInfoTime; + let oldestOutputFileName = buildInfoPath; let newestInputFileName = void 0; let newestInputFileTime = minimumDate; let pseudoInputUpToDate = false; const seenRoots = /* @__PURE__ */ new Set(); + let buildInfoVersionMap; for (const inputFile of project.fileNames) { const inputTime = getModifiedTime2(state, inputFile); if (inputTime === missingFileModifiedTime) { @@ -127537,12 +128483,12 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { reason: `${inputFile} does not exist` }; } - const inputPath = buildInfoProgram ? toPath2(state, inputFile) : void 0; - if (buildInfoTime && buildInfoTime < inputTime) { + const inputPath = toPath2(state, inputFile); + if (buildInfoTime < inputTime) { let version2; let currentVersion; - if (buildInfoProgram) { - if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(buildInfoProgram, buildInfoPath, host); + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); const resolvedInputPath = buildInfoVersionMap.roots.get(inputPath); version2 = buildInfoVersionMap.fileInfos.get(resolvedInputPath ?? inputPath); const text = version2 ? state.readFileWithCache(resolvedInputPath ?? inputFile) : void 0; @@ -127561,27 +128507,34 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { newestInputFileName = inputFile; newestInputFileTime = inputTime; } - if (buildInfoProgram) seenRoots.add(inputPath); + seenRoots.add(inputPath); } - if (buildInfoProgram) { - if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(buildInfoProgram, buildInfoPath, host); - const existingRoot = forEachEntry( + let existingRoot; + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); + existingRoot = forEachEntry( buildInfoVersionMap.roots, // File was root file when project was built but its not any more (_resolved, existingRoot2) => !seenRoots.has(existingRoot2) ? existingRoot2 : void 0 ); - if (existingRoot) { - return { - type: 9 /* OutOfDateRoots */, - buildInfoFile: buildInfoPath, - inputFile: existingRoot - }; - } + } else { + existingRoot = forEach( + getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host), + (root) => !seenRoots.has(root) ? root : void 0 + ); } - if (!buildInfoPath) { + if (existingRoot) { + return { + type: 10 /* OutOfDateRoots */, + buildInfoFile: buildInfoPath, + inputFile: existingRoot + }; + } + if (!isIncremental) { const outputs = getAllProjectOutputs(project, !host.useCaseSensitiveFileNames()); const outputTimeStampMap = getOutputTimeStampMap(state, resolvedPath); for (const output of outputs) { + if (output === buildInfoPath) continue; const path = toPath2(state, output); let outputTime = outputTimeStampMap == null ? void 0 : outputTimeStampMap.get(path); if (!outputTime) { @@ -127607,14 +128560,13 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { } } } - const buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath); let pseudoUpToDate = false; if (referenceStatuses) { for (const { ref, refStatus, resolvedConfig, resolvedRefPath } of referenceStatuses) { if (refStatus.newestInputFileTime && refStatus.newestInputFileTime <= oldestOutputFileTime) { continue; } - if (buildInfoCacheEntry && hasSameBuildInfo(state, buildInfoCacheEntry, resolvedRefPath)) { + if (hasSameBuildInfo(state, buildInfoCacheEntry ?? (buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath)), resolvedRefPath)) { return { type: 6 /* OutOfDateWithUpstream */, outOfDateOutputFileName: buildInfoPath, @@ -127645,7 +128597,7 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { ); if (dependentPackageFileStatus) return dependentPackageFileStatus; return { - type: pseudoUpToDate ? 2 /* UpToDateWithUpstreamTypes */ : pseudoInputUpToDate ? 14 /* UpToDateWithInputFileText */ : 1 /* UpToDate */, + type: pseudoUpToDate ? 2 /* UpToDateWithUpstreamTypes */ : pseudoInputUpToDate ? 15 /* UpToDateWithInputFileText */ : 1 /* UpToDate */, newestInputFileTime, newestInputFileName, oldestOutputFileName @@ -127657,7 +128609,7 @@ function hasSameBuildInfo(state, buildInfoCacheEntry, resolvedRefPath) { } function getUpToDateStatus(state, project, resolvedPath) { if (project === void 0) { - return { type: 0 /* Unbuildable */, reason: "File deleted mid-build" }; + return { type: 0 /* Unbuildable */, reason: "config file deleted mid-build" }; } const prior = state.projectStatus.get(resolvedPath); if (prior !== void 0) { @@ -127674,7 +128626,8 @@ function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, if (proj.options.noEmit) return; let now; const buildInfoPath = getTsBuildInfoEmitOutputFilePath(proj.options); - if (buildInfoPath) { + const isIncremental = isIncrementalCompilation(proj.options); + if (buildInfoPath && isIncremental) { if (!(skipOutputs == null ? void 0 : skipOutputs.has(toPath2(state, buildInfoPath)))) { if (!!state.options.verbose) reportStatus(state, verboseMessage, proj.options.configFilePath); state.host.setModifiedTime(buildInfoPath, now = getCurrentTime(state.host)); @@ -127697,7 +128650,8 @@ function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, reportStatus(state, verboseMessage, proj.options.configFilePath); } host.setModifiedTime(file, now || (now = getCurrentTime(state.host))); - if (outputTimeStampMap) { + if (file === buildInfoPath) getBuildInfoCacheEntry(state, buildInfoPath, projectPath).modifiedTime = now; + else if (outputTimeStampMap) { outputTimeStampMap.set(path, now); modifiedOutputs.add(path); } @@ -127711,7 +128665,7 @@ function getLatestChangedDtsTime(state, options, resolvedConfigPath) { if (!options.composite) return void 0; const entry = Debug.checkDefined(state.buildInfoCache.get(resolvedConfigPath)); if (entry.latestChangedDtsTime !== void 0) return entry.latestChangedDtsTime || void 0; - const latestChangedDtsTime = entry.buildInfo && entry.buildInfo.program && entry.buildInfo.program.latestChangedDtsFile ? state.host.getModifiedTime(getNormalizedAbsolutePath(entry.buildInfo.program.latestChangedDtsFile, getDirectoryPath(entry.path))) : void 0; + const latestChangedDtsTime = entry.buildInfo && isIncrementalBuildInfo(entry.buildInfo) && entry.buildInfo.latestChangedDtsFile ? state.host.getModifiedTime(getNormalizedAbsolutePath(entry.buildInfo.latestChangedDtsFile, getDirectoryPath(entry.path))) : void 0; entry.latestChangedDtsTime = latestChangedDtsTime || false; return latestChangedDtsTime; } @@ -127726,7 +128680,7 @@ function updateOutputTimestamps(state, proj, resolvedPath) { }); } function queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, buildResult) { - if (buildResult & 124 /* AnyErrors */) return; + if (state.options.stopBuildOnErrors && buildResult & 4 /* AnyErrors */) return; if (!config.options.composite) return; for (let index = projectIndex + 1; index < buildOrder.length; index++) { const nextProject = buildOrder[index]; @@ -127745,7 +128699,7 @@ function queueReferencingProjects(state, project, projectPath, projectIndex, con status.type = 2 /* UpToDateWithUpstreamTypes */; break; } - case 14 /* UpToDateWithInputFileText */: + case 15 /* UpToDateWithInputFileText */: case 2 /* UpToDateWithUpstreamTypes */: if (!(buildResult & 2 /* DeclarationOutputUnchanged */)) { state.projectStatus.set(nextProjectPath, { @@ -127755,7 +128709,7 @@ function queueReferencingProjects(state, project, projectPath, projectIndex, con }); } break; - case 11 /* UpstreamBlocked */: + case 12 /* UpstreamBlocked */: if (toResolvedConfigFilePath(state, resolveProjectName(state, status.upstreamProjectName)) === projectPath) { clearProjectStatus(state, nextProjectPath); } @@ -128174,21 +129128,28 @@ function reportUpToDateStatus(state, configFileName, status) { relName(state, configFileName), relName(state, status.fileName) ); - case 7 /* OutOfDateBuildInfo */: + case 7 /* OutOfDateBuildInfoWithPendingEmit */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted, relName(state, configFileName), relName(state, status.buildInfoFile) ); - case 8 /* OutOfDateOptions */: + case 8 /* OutOfDateBuildInfoWithErrors */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors, + relName(state, configFileName), + relName(state, status.buildInfoFile) + ); + case 9 /* OutOfDateOptions */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions, relName(state, configFileName), relName(state, status.buildInfoFile) ); - case 9 /* OutOfDateRoots */: + case 10 /* OutOfDateRoots */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more, @@ -128213,20 +129174,20 @@ function reportUpToDateStatus(state, configFileName, status) { Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, relName(state, configFileName) ); - case 14 /* UpToDateWithInputFileText */: + case 15 /* UpToDateWithInputFileText */: return reportStatus( state, Diagnostics.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files, relName(state, configFileName) ); - case 10 /* UpstreamOutOfDate */: + case 11 /* UpstreamOutOfDate */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date, relName(state, configFileName), relName(state, status.upstreamProjectName) ); - case 11 /* UpstreamBlocked */: + case 12 /* UpstreamBlocked */: return reportStatus( state, status.upstreamProjectBlocked ? Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_was_not_built : Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors, @@ -128236,11 +129197,11 @@ function reportUpToDateStatus(state, configFileName, status) { case 0 /* Unbuildable */: return reportStatus( state, - Diagnostics.Failed_to_parse_file_0_Colon_1, + Diagnostics.Project_0_is_out_of_date_because_1, relName(state, configFileName), status.reason ); - case 13 /* TsVersionOutputOfDate */: + case 14 /* TsVersionOutputOfDate */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2, @@ -128248,14 +129209,14 @@ function reportUpToDateStatus(state, configFileName, status) { status.version, version ); - case 16 /* ForceBuild */: + case 17 /* ForceBuild */: return reportStatus( state, Diagnostics.Project_0_is_being_forcibly_rebuilt, relName(state, configFileName) ); - case 15 /* ContainerOnly */: - case 12 /* ComputingUpstream */: + case 16 /* ContainerOnly */: + case 13 /* ComputingUpstream */: break; default: assertType(status); @@ -128321,7 +129282,7 @@ function shouldBePretty(sys2, options) { return options.pretty; } function getOptionsForHelp(commandLine) { - return !!commandLine.options.all ? sort(optionDeclarations, (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.slice(), (v) => !!v.showInSimplifiedHelpView); + return !!commandLine.options.all ? toSorted(optionDeclarations, (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.slice(), (v) => !!v.showInSimplifiedHelpView); } function printVersion(sys2) { sys2.write(getDiagnosticText(Diagnostics.Version_0, version) + sys2.newLine); @@ -129494,7 +130455,7 @@ function createSyntacticTypeNodeBuilder(options, resolver) { return typeFromAccessor(parent, context); } const declaredType = getEffectiveTypeAnnotationNode(node); - const addUndefined = resolver.requiresAddingImplicitUndefined(node); + const addUndefined = resolver.requiresAddingImplicitUndefined(node, context.enclosingDeclaration); let resultType; if (declaredType) { resultType = serializeExistingTypeAnnotation(declaredType, addUndefined); diff --git a/node_modules/typescript/lib/tsserver.js b/node_modules/typescript/lib/tsserver.js index 398a3a1eda..f382665614 100644 --- a/node_modules/typescript/lib/tsserver.js +++ b/node_modules/typescript/lib/tsserver.js @@ -15,9 +15,11 @@ and limitations under the License. "use strict"; +var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { @@ -28,11 +30,29 @@ var __copyProps = (to, from, except, desc) => { return to; }; var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// src/tsserver/server.ts +var import_os2 = __toESM(require("os")); // src/typescript/typescript.ts var typescript_exports = {}; __reExport(typescript_exports, require("./typescript.js")); +// src/tsserver/nodeServer.ts +var import_child_process = __toESM(require("child_process")); +var import_fs = __toESM(require("fs")); +var import_net = __toESM(require("net")); +var import_os = __toESM(require("os")); +var import_readline = __toESM(require("readline")); + // src/tsserver/common.ts function getLogLevel(level) { if (level) { @@ -107,8 +127,6 @@ function parseServerMode() { } function initializeNodeSystem() { const sys4 = typescript_exports.Debug.checkDefined(typescript_exports.sys); - const childProcess = require("child_process"); - const fs = require("fs"); class Logger { constructor(logFilename, traceToConsole, level) { this.logFilename = logFilename; @@ -120,8 +138,8 @@ function initializeNodeSystem() { this.fd = -1; if (this.logFilename) { try { - this.fd = fs.openSync(this.logFilename, "w"); - } catch (_) { + this.fd = import_fs.default.openSync(this.logFilename, "w"); + } catch { } } } @@ -130,7 +148,7 @@ function initializeNodeSystem() { } close() { if (this.fd >= 0) { - fs.close(this.fd, typescript_exports.noop); + import_fs.default.close(this.fd, typescript_exports.noop); } } getLogFileName() { @@ -159,18 +177,6 @@ function initializeNodeSystem() { return this.loggingEnabled() && this.level >= level; } msg(s, type = typescript_exports.server.Msg.Err) { - var _a, _b, _c; - switch (type) { - case typescript_exports.server.Msg.Info: - (_a = typescript_exports.perfLogger) == null ? void 0 : _a.logInfoEvent(s); - break; - case typescript_exports.server.Msg.Perf: - (_b = typescript_exports.perfLogger) == null ? void 0 : _b.logPerfEvent(s); - break; - default: - (_c = typescript_exports.perfLogger) == null ? void 0 : _c.logErrEvent(s); - break; - } if (!this.canWrite()) return; s = `[${typescript_exports.server.nowString()}] ${s} `; @@ -189,7 +195,7 @@ function initializeNodeSystem() { write(s, _type) { if (this.fd >= 0) { const buf = Buffer.from(s); - fs.writeSync( + import_fs.default.writeSync( this.fd, buf, 0, @@ -240,7 +246,7 @@ function initializeNodeSystem() { if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } - childProcess.execFileSync(process.execPath, args, { stdio: "ignore", env: { ELECTRON_RUN_AS_NODE: "1" } }); + import_child_process.default.execFileSync(process.execPath, args, { stdio: "ignore", env: { ELECTRON_RUN_AS_NODE: "1" } }); status = true; if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`WatchGuard for path ${path} returned: OK`); @@ -279,9 +285,9 @@ function initializeNodeSystem() { } let cancellationToken; try { - const factory = require("./cancellationToken"); + const factory = require("./cancellationToken.js"); cancellationToken = factory(sys4.args); - } catch (e) { + } catch { cancellationToken = typescript_exports.server.nullCancellationToken; } const localeStr = typescript_exports.server.findArgument("--locale"); @@ -361,11 +367,7 @@ function parseEventPort(eventPortStr) { return eventPort !== void 0 && !isNaN(eventPort) ? eventPort : void 0; } function startNodeSession(options, logger, cancellationToken) { - const childProcess = require("child_process"); - const os = require("os"); - const net = require("net"); - const readline = require("readline"); - const rl = readline.createInterface({ + const rl = import_readline.default.createInterface({ input: process.stdin, output: process.stdout, terminal: false @@ -418,7 +420,7 @@ function startNodeSession(options, logger, cancellationToken) { } } const typingsInstaller = (0, typescript_exports.combinePaths)((0, typescript_exports.getDirectoryPath)(typescript_exports.sys.getExecutingFilePath()), "typingsInstaller.js"); - this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); + this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); this.host.setImmediate(() => this.event({ pid: this.installer.pid }, "typingsInstallerPid")); process.on("exit", () => { @@ -454,7 +456,7 @@ function startNodeSession(options, logger, cancellationToken) { }); this.eventPort = eventPort; if (this.canUseEvents && this.eventPort) { - const s = net.connect({ port: this.eventPort }, () => { + const s = import_net.default.connect({ port: this.eventPort }, () => { this.eventSocket = s; if (this.socketEventQueue) { for (const event2 of this.socketEventQueue) { @@ -549,7 +551,7 @@ function startNodeSession(options, logger, cancellationToken) { function getGlobalTypingsCacheLocation() { switch (process.platform) { case "win32": { - const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || os.homedir && os.homedir() || process.env.USERPROFILE || process.env.HOMEDRIVE && process.env.HOMEPATH && (0, typescript_exports.normalizeSlashes)(process.env.HOMEDRIVE + process.env.HOMEPATH) || os.tmpdir(); + const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || import_os.default.homedir && import_os.default.homedir() || process.env.USERPROFILE || process.env.HOMEDRIVE && process.env.HOMEPATH && (0, typescript_exports.normalizeSlashes)(process.env.HOMEDRIVE + process.env.HOMEPATH) || import_os.default.tmpdir(); return (0, typescript_exports.combinePaths)((0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(basePath), "Microsoft/TypeScript"), typescript_exports.versionMajorMinor); } case "openbsd": @@ -570,7 +572,7 @@ function startNodeSession(options, logger, cancellationToken) { return process.env.XDG_CACHE_HOME; } const usersDir = platformIsDarwin ? "Users" : "home"; - const homePath = os.homedir && os.homedir() || process.env.HOME || (process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}` || os.tmpdir(); + const homePath = import_os.default.homedir && import_os.default.homedir() || process.env.HOME || (process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}` || import_os.default.tmpdir(); const cacheFolder = platformIsDarwin ? "Library/Caches" : ".cache"; return (0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(homePath), cacheFolder); } @@ -617,5 +619,5 @@ function start({ args, logger, cancellationToken, serverMode, unknownServerMode, ); } typescript_exports.setStackTraceLimit(); -start(initializeNodeSystem(), require("os").platform()); +start(initializeNodeSystem(), import_os2.default.platform()); //# sourceMappingURL=tsserver.js.map diff --git a/node_modules/typescript/lib/typescript.d.ts b/node_modules/typescript/lib/typescript.d.ts index fbb3e4912f..963c5732b9 100644 --- a/node_modules/typescript/lib/typescript.d.ts +++ b/node_modules/typescript/lib/typescript.d.ts @@ -214,6 +214,22 @@ declare namespace ts { * The time spent creating or updating the auto-import program, in milliseconds. */ createAutoImportProviderProgramDurationMs?: number; + /** + * The time spent computing diagnostics, in milliseconds. + */ + diagnosticsDuration?: FileDiagnosticPerformanceData[]; + } + /** + * Time spent computing each kind of diagnostics, in milliseconds. + */ + export type DiagnosticPerformanceData = { + [Kind in DiagnosticEventKind]?: number; + }; + export interface FileDiagnosticPerformanceData extends DiagnosticPerformanceData { + /** + * The file for which the performance data is reported. + */ + file: string; } /** * Arguments for FileRequest messages. @@ -584,23 +600,7 @@ declare namespace ts { } export interface ApplyCodeActionCommandResponse extends Response { } - export interface FileRangeRequestArgs extends FileRequestArgs { - /** - * The line number for the request (1-based). - */ - startLine: number; - /** - * The character offset (on the line) for the request (1-based). - */ - startOffset: number; - /** - * The line number for the request (1-based). - */ - endLine: number; - /** - * The character offset (on the line) for the request (1-based). - */ - endOffset: number; + export interface FileRangeRequestArgs extends FileRequestArgs, FileRange { } /** * Instances of this interface specify errorcodes on a specific location in a sourcefile. @@ -1866,7 +1866,7 @@ declare namespace ts { * List of file names for which to compute compiler errors. * The files will be checked in list order. */ - files: string[]; + files: (string | FileRangesRequestArgs)[]; /** * Delay in milliseconds to wait before starting to compute * errors for the files in the file list @@ -1887,6 +1887,27 @@ declare namespace ts { command: CommandTypes.Geterr; arguments: GeterrRequestArgs; } + export interface FileRange { + /** + * The line number for the request (1-based). + */ + startLine: number; + /** + * The character offset (on the line) for the request (1-based). + */ + startOffset: number; + /** + * The line number for the request (1-based). + */ + endLine: number; + /** + * The character offset (on the line) for the request (1-based). + */ + endOffset: number; + } + export interface FileRangesRequestArgs extends Pick { + ranges: FileRange[]; + } export type RequestCompletedEventName = "requestCompleted"; /** * Event that is sent when server have finished processing request with specified id. @@ -1897,6 +1918,7 @@ declare namespace ts { } export interface RequestCompletedEventBody { request_seq: number; + performanceData?: PerformanceData; } /** * Item of diagnostic information found in a DiagnosticEvent message. @@ -1969,8 +1991,12 @@ declare namespace ts { * An array of diagnostic information items. */ diagnostics: Diagnostic[]; + /** + * Spans where the region diagnostic was requested, if this is a region semantic diagnostic event. + */ + spans?: TextSpan[]; } - export type DiagnosticEventKind = "semanticDiag" | "syntaxDiag" | "suggestionDiag"; + export type DiagnosticEventKind = "semanticDiag" | "syntaxDiag" | "suggestionDiag" | "regionSemanticDiag"; /** * Event message for DiagnosticEventKind event types. * These events provide syntactic and semantic errors for a file. @@ -2510,6 +2536,7 @@ declare namespace ts { private readonly knownCachesSet; private readonly projectWatchers; private safeList; + private pendingRunRequests; private installRunCount; private inFlightRequestCount; abstract readonly typesRegistry: Map>; @@ -2636,6 +2663,7 @@ declare namespace ts { interface ServerHost extends System { watchFile(path: string, callback: FileWatcherCallback, pollingInterval?: number, options?: WatchOptions): FileWatcher; watchDirectory(path: string, callback: DirectoryWatcherCallback, recursive?: boolean, options?: WatchOptions): FileWatcher; + preferNonRecursiveWatch?: boolean; setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; clearTimeout(timeoutId: any): void; setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; @@ -2644,6 +2672,18 @@ declare namespace ts { trace?(s: string): void; require?(initialPath: string, moduleName: string): ModuleImportResult; } + interface InstallPackageOptionsWithProject extends InstallPackageOptions { + projectName: string; + projectRootPath: Path; + } + interface ITypingsInstaller { + isKnownTypesPackageName(name: string): boolean; + installPackage(options: InstallPackageOptionsWithProject): Promise; + enqueueInstallTypingsRequest(p: Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray | undefined): void; + attach(projectService: ProjectService): void; + onProjectClosed(p: Project): void; + readonly globalTypingsCacheLocation: string | undefined; + } function createInstallTypingsRequest(project: Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray, cachePath?: string): DiscoverTypings; function toNormalizedPath(fileName: string): NormalizedPath; function normalizedPathToPath(normalizedPath: NormalizedPath, currentDirectory: string, getCanonicalFileName: (f: string) => string): Path; @@ -2702,6 +2742,7 @@ declare namespace ts { readonly containingProjects: Project[]; private formatSettings; private preferences; + private realpath; constructor(host: ServerHost, fileName: NormalizedPath, scriptKind: ScriptKind, hasMixedContent: boolean, path: Path, initialVersion?: number); isScriptOpen(): boolean; open(newText: string | undefined): void; @@ -2735,19 +2776,6 @@ declare namespace ts { positionToLineOffset(position: number): protocol.Location; isJavaScript(): boolean; } - interface InstallPackageOptionsWithProject extends InstallPackageOptions { - projectName: string; - projectRootPath: Path; - } - interface ITypingsInstaller { - isKnownTypesPackageName(name: string): boolean; - installPackage(options: InstallPackageOptionsWithProject): Promise; - enqueueInstallTypingsRequest(p: Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray | undefined): void; - attach(projectService: ProjectService): void; - onProjectClosed(p: Project): void; - readonly globalTypingsCacheLocation: string | undefined; - } - const nullTypingsInstaller: ITypingsInstaller; function allRootFilesAreJsOrDts(project: Project): boolean; function allFilesAreJsOrDts(project: Project): boolean; enum ProjectKind { @@ -2789,33 +2817,31 @@ declare namespace ts { private externalFiles; private missingFilesMap; private generatedFilesMap; + private hasAddedorRemovedFiles; + private hasAddedOrRemovedSymlinks; protected languageService: LanguageService; languageServiceEnabled: boolean; readonly trace?: (s: string) => void; readonly realpath?: (path: string) => string; private builderState; - /** - * Set of files names that were updated since the last call to getChangesSinceVersion. - */ private updatedFileNames; - /** - * Set of files that was returned from the last call to getChangesSinceVersion. - */ private lastReportedFileNames; - /** - * Last version that was reported. - */ private lastReportedVersion; protected projectErrors: Diagnostic[] | undefined; protected isInitialLoadPending: () => boolean; + private typingsCache; + private typingWatchers; private readonly cancellationToken; isNonTsProject(): boolean; isJsOnlyProject(): boolean; static resolveModule(moduleName: string, initialDir: string, host: ServerHost, log: (message: string) => void): {} | undefined; + private exportMapCache; + private changedFilesForExportMapCache; + private moduleSpecifierCache; + private symlinks; readonly jsDocParsingMode: JSDocParsingMode | undefined; isKnownTypesPackageName(name: string): boolean; installPackage(options: InstallPackageOptions): Promise; - private get typingsCache(); getCompilationSettings(): ts.CompilerOptions; getCompilerOptions(): ts.CompilerOptions; getNewLine(): string; @@ -2882,6 +2908,8 @@ declare namespace ts { * @returns: true if set of files in the project stays the same and false - otherwise. */ updateGraph(): boolean; + private closeWatchingTypingLocations; + private onTypingInstallerWatchInvoke; protected removeExistingTypings(include: string[]): string[]; private updateGraphWorker; private detachScriptInfoFromProject; @@ -2893,6 +2921,7 @@ declare namespace ts { getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined; getScriptInfo(uncheckedFileName: string): ts.server.ScriptInfo | undefined; filesToString(writeProjectFileNames: boolean): string; + private filesToStringWorker; setCompilerOptions(compilerOptions: CompilerOptions): void; setTypeAcquisition(newTypeAcquisition: TypeAcquisition | undefined): void; getTypeAcquisition(): ts.TypeAcquisition; @@ -2901,6 +2930,8 @@ declare namespace ts { protected enablePlugin(pluginConfigEntry: PluginImport, searchPaths: string[]): void; /** Starts a new check for diagnostics. Call this if some file has updated that would cause diagnostics to be changed. */ refreshDiagnostics(): void; + private isDefaultProjectForOpenFiles; + private getCompilerOptionsForNoDtsResolutionProject; } /** * If a file is opened and no tsconfig (or jsconfig) is found, @@ -2920,6 +2951,7 @@ declare namespace ts { } class AutoImportProviderProject extends Project { private hostProject; + private static readonly maxDependencies; private rootFileNames; updateGraph(): boolean; hasRoots(): boolean; @@ -2936,6 +2968,8 @@ declare namespace ts { class ConfiguredProject extends Project { readonly canonicalConfigFilePath: NormalizedPath; private projectReferences; + private compilerHost?; + private releaseParsedConfig; /** * If the project has reload from disk pending, it reloads (and then updates graph as part of that) instead of just updating the graph * @returns: true if set of files in the project stays the same and false - otherwise. @@ -3126,6 +3160,7 @@ declare namespace ts { configFileName?: NormalizedPath; configFileErrors?: readonly Diagnostic[]; } + const nullTypingsInstaller: ITypingsInstaller; interface ProjectServiceOptions { host: ServerHost; logger: Logger; @@ -3151,16 +3186,8 @@ declare namespace ts { } class ProjectService { private readonly nodeModulesWatchers; - /** - * Contains all the deleted script info's version information so that - * it does not reset when creating script info again - * (and could have potentially collided with version where contents mismatch) - */ private readonly filenameToScriptInfoVersion; private readonly allJsFilesForOpenFileTelemetry; - /** - * maps external project file name to list of config files that were the part of this project - */ private readonly externalProjectToConfiguredProjectMap; /** * external projects (configuration and list of root files is not controlled by tsserver) @@ -3178,13 +3205,8 @@ declare namespace ts { * Open files: with value being project root path, and key being Path of the file that is open */ readonly openFiles: Map; - /** Config files looked up and cached config files for open script info */ private readonly configFileForOpenFiles; - /** Set of open script infos that are root of inferred project */ private rootOfInferredProjects; - /** - * Map of open files that are opened without complete path but have projectRoot as current directory - */ private readonly openFilesWithNonRootedDiskPath; private compilerOptionsForInferredProjects; private compilerOptionsForInferredProjectsPerProjectRoot; @@ -3192,18 +3214,11 @@ declare namespace ts { private watchOptionsForInferredProjectsPerProjectRoot; private typeAcquisitionForInferredProjects; private typeAcquisitionForInferredProjectsPerProjectRoot; - /** - * Project size for configured or external projects - */ private readonly projectToSizeMap; private readonly hostConfiguration; private safelist; private readonly legacySafelist; private pendingProjectUpdates; - /** - * All the open script info that needs recalculation of the default project, - * this also caches config file info before config file change was detected to use it in case projects are not updated yet - */ private pendingOpenFileProjectUpdates?; readonly currentDirectory: NormalizedPath; readonly toCanonicalFileName: (f: string) => string; @@ -3221,8 +3236,11 @@ declare namespace ts { readonly allowLocalPluginLoads: boolean; readonly typesMapLocation: string | undefined; readonly serverMode: LanguageServiceMode; - /** Tracks projects that we have already sent telemetry for. */ private readonly seenProjects; + private readonly sharedExtendedConfigFileWatchers; + private readonly extendedConfigCache; + private packageJsonFilesMap; + private incompleteCompletionsCache; private performanceEventHandler?; private pendingPluginEnablements?; private currentPluginEnablementPromise?; @@ -3236,20 +3254,9 @@ declare namespace ts { setCompilerOptionsForInferredProjects(projectCompilerOptions: protocol.InferredProjectCompilerOptions, projectRootPath?: string): void; findProject(projectName: string): Project | undefined; getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined; - /** - * If there is default project calculation pending for this file, - * then it completes that calculation so that correct default project is used for the project - */ private tryGetDefaultProjectForEnsuringConfiguredProjectForFile; private doEnsureDefaultProjectForFile; getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string): ScriptInfo | undefined; - /** - * Ensures the project structures are upto date - * This means, - * - we go through all the projects and update them if they are dirty - * - if updates reflect some change in structure or there was pending request to ensure projects for open files - * ensure that each open script info has project - */ private ensureProjectStructuresUptoDate; getFormatCodeOptions(file: NormalizedPath): FormatCodeSettings; getPreferences(file: NormalizedPath): protocol.UserPreferences; @@ -3260,37 +3267,30 @@ declare namespace ts { private delayUpdateSourceInfoProjects; private delayUpdateProjectsOfScriptInfoPath; private handleDeletedFile; + private watchWildcardDirectory; + private onWildCardDirectoryWatcherInvoke; + private delayUpdateProjectsFromParsedConfigOnConfigFileChange; + private onConfigFileChanged; private removeProject; private assignOrphanScriptInfosToInferredProject; - /** - * Remove this file from the set of open, non-configured files. - * @param info The file that has been closed or newly configured - */ private closeOpenFile; private deleteScriptInfo; private configFileExists; - /** - * This function tries to search for a tsconfig.json for the given file. - * This is different from the method the compiler uses because - * the compiler can assume it will always start searching in the - * current directory (the directory in which tsc was invoked). - * The server must start searching from the directory containing - * the newly opened file. - */ + private createConfigFileWatcherForParsedConfig; private forEachConfigFileLocation; - /** Get cached configFileName for scriptInfo or ancestor of open script info */ private getConfigFileNameForFileFromCache; - /** Caches the configFilename for script info or ancestor of open script info */ private setConfigFileNameForFileInCache; private printProjects; private getConfiguredProjectByCanonicalConfigFilePath; private findExternalProjectByProjectName; - /** Get a filename if the language service exceeds the maximum allowed program size; otherwise returns undefined. */ private getFilenameForExceededTotalSizeLimitForNonTsFiles; private createExternalProject; private addFilesToNonInferredProject; + private loadConfiguredProject; private updateNonInferredProjectFiles; private updateRootAndOptionsOfNonInferredProject; + private reloadFileNamesOfParsedConfig; + private clearSemanticCache; private getOrCreateInferredProjectForProjectRootPathIfEnabled; private getOrCreateSingleInferredProjectIfEnabled; private getOrCreateSingleInferredWithoutProjectRoot; @@ -3316,23 +3316,15 @@ declare namespace ts { private addSourceInfoToSourceMap; private addMissingSourceMapFile; setHostConfiguration(args: protocol.ConfigureRequestArguments): void; + private getWatchOptionsFromProjectWatchOptions; closeLog(): void; + private sendSourceFileChange; /** * This function rebuilds the project for every file opened by the client * This does not reload contents of open files from disk. But we could do that if needed */ reloadProjects(): void; - /** - * Remove the root of inferred project if script info is part of another project - */ private removeRootOfInferredProjectIfNowPartOfOtherProject; - /** - * This function is to update the project structure for every inferred project. - * It is called on the premise that all the configured projects are - * up to date. - * This will go through open files and assign them to inferred project if open file is not part of any other project - * After that all the inferred project graphs are updated - */ private ensureProjectForOpenFiles; /** * Open file whose contents is managed by the client @@ -3343,20 +3335,12 @@ declare namespace ts { private findExternalProjectContainingOpenScriptInfo; private getOrCreateOpenScriptInfo; private assignProjectToOpenedScriptInfo; - /** - * Finds the default configured project for given info - * For any tsconfig found, it looks into that project, if not then all its references, - * The search happens for all tsconfigs till projectRootPath - */ private tryFindDefaultConfiguredProjectForOpenScriptInfo; - /** - * Finds the default configured project, if found, it creates the solution projects (does not load them right away) - * with Find: finds the projects even if the project is deferredClosed - */ private tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo; private ensureProjectChildren; private cleanupConfiguredProjects; private cleanupProjectsAndScriptInfos; + private tryInvokeWildCardDirectories; openClientFileWithNormalizedPath(fileName: NormalizedPath, fileContent?: string, scriptKind?: ScriptKind, hasMixedContent?: boolean, projectRootPath?: NormalizedPath): OpenConfiguredProjectResult; private removeOrphanScriptInfos; private telemetryOnOpenFile; @@ -3368,7 +3352,6 @@ declare namespace ts { private collectChanges; closeExternalProject(uncheckedFileName: string): void; openExternalProjects(projects: protocol.ExternalProject[]): void; - /** Makes a filename safe to insert in a RegExp */ private static readonly filenameEscapeRegexp; private static escapeFilenameForRegex; resetSafeList(): void; @@ -3376,9 +3359,12 @@ declare namespace ts { private applySafeListWorker; openExternalProject(proj: protocol.ExternalProject): void; hasDeferredExtension(): boolean; + private endEnablePlugin; private enableRequestedPluginsAsync; private enableRequestedPluginsWorker; configurePlugin(args: protocol.ConfigurePluginRequestArguments): void; + private watchPackageJsonFile; + private onPackageJsonChange; } function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: BufferEncoding) => number, newLine: string): string; interface ServerCancellationToken extends HostCancellationToken { @@ -3386,10 +3372,6 @@ declare namespace ts { resetRequest(requestId: number): void; } const nullCancellationToken: ServerCancellationToken; - interface PendingErrorCheck { - fileName: NormalizedPath; - project: Project; - } /** @deprecated use ts.server.protocol.CommandTypes */ type CommandNames = protocol.CommandTypes; /** @deprecated use ts.server.protocol.CommandTypes */ @@ -3449,6 +3431,7 @@ declare namespace ts { constructor(opts: SessionOptions); private sendRequestCompletedEvent; private addPerformanceData; + private addDiagnosticsPerformanceData; private performanceEventHandler; private defaultEventHandler; private projectsUpdatedInBackgroundEvent; @@ -3460,8 +3443,8 @@ declare namespace ts { private semanticCheck; private syntacticCheck; private suggestionCheck; + private regionSemanticCheck; private sendDiagnosticsEvent; - /** It is the caller's responsibility to verify that `!this.suppressDiagnosticEvents`. */ private updateErrorCheck; private cleanProjects; private cleanup; @@ -3508,10 +3491,6 @@ declare namespace ts { private toSpanGroups; private getReferences; private getFileReferences; - /** - * @param fileName is the name of the file to be opened - * @param fileContent is a version of the file content that is known to be more up to date than the one on disk - */ private openClientFile; private getPosition; private getPositionInFile; @@ -3616,7 +3595,7 @@ declare namespace ts { readDirectory(rootDir: string, extensions: readonly string[], excludes: readonly string[] | undefined, includes: readonly string[] | undefined, depth?: number): string[]; } } - const versionMajorMinor = "5.5"; + const versionMajorMinor = "5.6"; /** The version of the TypeScript compiler release */ const version: string; /** @@ -4446,7 +4425,7 @@ declare namespace ts { readonly right: Identifier; } type EntityName = Identifier | QualifiedName; - type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier; + type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier | BigIntLiteral; type MemberName = Identifier | PrivateIdentifier; type DeclarationName = PropertyName | JsxAttributeName | StringLiteralLike | ElementAccessExpression | BindingPattern | EntityNameExpression; interface Declaration extends Node { @@ -4797,7 +4776,7 @@ declare namespace ts { readonly kind: SyntaxKind.StringLiteral; } type StringLiteralLike = StringLiteral | NoSubstitutionTemplateLiteral; - type PropertyNameLiteral = Identifier | StringLiteralLike | NumericLiteral | JsxNamespacedName; + type PropertyNameLiteral = Identifier | StringLiteralLike | NumericLiteral | JsxNamespacedName | BigIntLiteral; interface TemplateLiteralTypeNode extends TypeNode { kind: SyntaxKind.TemplateLiteralType; readonly head: TemplateHead; @@ -5517,7 +5496,7 @@ declare namespace ts { interface NamespaceExport extends NamedDeclaration { readonly kind: SyntaxKind.NamespaceExport; readonly parent: ExportDeclaration; - readonly name: Identifier; + readonly name: ModuleExportName; } interface NamespaceExportDeclaration extends DeclarationStatement, JSDocContainer { readonly kind: SyntaxKind.NamespaceExportDeclaration; @@ -5549,7 +5528,7 @@ declare namespace ts { interface ImportSpecifier extends NamedDeclaration { readonly kind: SyntaxKind.ImportSpecifier; readonly parent: NamedImports; - readonly propertyName?: Identifier; + readonly propertyName?: ModuleExportName; readonly name: Identifier; readonly isTypeOnly: boolean; } @@ -5557,9 +5536,10 @@ declare namespace ts { readonly kind: SyntaxKind.ExportSpecifier; readonly parent: NamedExports; readonly isTypeOnly: boolean; - readonly propertyName?: Identifier; - readonly name: Identifier; + readonly propertyName?: ModuleExportName; + readonly name: ModuleExportName; } + type ModuleExportName = Identifier | StringLiteral; type ImportOrExportSpecifier = ImportSpecifier | ExportSpecifier; type TypeOnlyCompatibleAliasDeclaration = ImportClause | ImportEqualsDeclaration | NamespaceImport | ImportOrExportSpecifier | ExportDeclaration | NamespaceExport; type TypeOnlyImportDeclaration = @@ -6014,19 +5994,67 @@ declare namespace ts { isSourceFileFromExternalLibrary(file: SourceFile): boolean; isSourceFileDefaultLibrary(file: SourceFile): boolean; /** - * Calculates the final resolution mode for a given module reference node. This is the resolution mode explicitly provided via import - * attributes, if present, or the syntax the usage would have if emitted to JavaScript. In `--module node16` or `nodenext`, this may - * depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the input syntax of the reference. In other - * `module` modes, when overriding import attributes are not provided, this function returns `undefined`, as the result would have no - * impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for a given module reference node. This function only returns a result when module resolution + * settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided via import attributes, + * which cause an `import` or `require` condition to be used during resolution regardless of module resolution settings. In absence of + * overriding attributes, and in modes that support differing resolution, the result indicates the syntax the usage would emit to JavaScript. + * Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` */ getModeForUsageLocation(file: SourceFile, usage: StringLiteralLike): ResolutionMode; /** - * Calculates the final resolution mode for an import at some index within a file's `imports` list. This is the resolution mode - * explicitly provided via import attributes, if present, or the syntax the usage would have if emitted to JavaScript. In - * `--module node16` or `nodenext`, this may depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the - * input syntax of the reference. In other `module` modes, when overriding import attributes are not provided, this function returns - * `undefined`, as the result would have no impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for an import at some index within a file's `imports` list. This function only returns a result + * when module resolution settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided + * via import attributes, which cause an `import` or `require` condition to be used during resolution regardless of module resolution + * settings. In absence of overriding attributes, and in modes that support differing resolution, the result indicates the syntax the + * usage would emit to JavaScript. Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` */ getModeForResolutionAtIndex(file: SourceFile, index: number): ResolutionMode; getProjectReferences(): readonly ProjectReference[] | undefined; @@ -6093,6 +6121,27 @@ declare namespace ts { getBaseTypes(type: InterfaceType): BaseType[]; getBaseTypeOfLiteralType(type: Type): Type; getWidenedType(type: Type): Type; + /** + * Gets the "awaited type" of a type. + * + * If an expression has a Promise-like type, the "awaited type" of the expression is + * derived from the type of the first argument of the fulfillment callback for that + * Promise's `then` method. If the "awaited type" is itself a Promise-like, it is + * recursively unwrapped in the same manner until a non-promise type is found. + * + * If an expression does not have a Promise-like type, its "awaited type" is the type + * of the expression. + * + * If the resulting "awaited type" is a generic object type, then it is wrapped in + * an `Awaited`. + * + * In the event the "awaited type" circularly references itself, or is a non-Promise + * object-type with a callable `then()` method, an "awaited type" cannot be determined + * and the value `undefined` will be returned. + * + * This is used to reflect the runtime behavior of the `await` keyword. + */ + getAwaitedType(type: Type): Type | undefined; getReturnTypeOfSignature(signature: Signature): Type; getNullableType(type: Type, flags: TypeFlags): Type; getNonNullableType(type: Type): Type; @@ -6185,6 +6234,7 @@ declare namespace ts { getNumberType(): Type; getNumberLiteralType(value: number): NumberLiteralType; getBigIntType(): Type; + getBigIntLiteralType(value: PseudoBigInt): BigIntLiteralType; getBooleanType(): Type; getFalseType(): Type; getTrueType(): Type; @@ -6654,7 +6704,11 @@ declare namespace ts { minLength: number; /** Number of initial required or optional elements */ fixedLength: number; - /** True if tuple has any rest or variadic elements */ + /** + * True if tuple has any rest or variadic elements + * + * @deprecated Use `.combinedFlags & ElementFlags.Variable` instead + */ hasRestElement: boolean; combinedFlags: ElementFlags; readonly: boolean; @@ -6978,6 +7032,7 @@ declare namespace ts { strictBindCallApply?: boolean; strictNullChecks?: boolean; strictPropertyInitialization?: boolean; + strictBuiltinIteratorReturn?: boolean; stripInternal?: boolean; /** @deprecated */ suppressExcessPropertyErrors?: boolean; @@ -6986,6 +7041,7 @@ declare namespace ts { target?: ScriptTarget; traceResolution?: boolean; useUnknownInCatchVariables?: boolean; + noUncheckedSideEffectImports?: boolean; resolveJsonModule?: boolean; types?: string[]; /** Paths used to compute primary types search locations */ @@ -7312,9 +7368,10 @@ declare namespace ts { TypeAssertions = 2, NonNullAssertions = 4, PartiallyEmittedExpressions = 8, + ExpressionsWithTypeArguments = 16, Assertions = 6, - All = 15, - ExcludeJSDocTypeAssertion = 16, + All = 31, + ExcludeJSDocTypeAssertion = -2147483648, } type ImmediatelyInvokedFunctionExpression = CallExpression & { readonly expression: FunctionExpression; @@ -7613,20 +7670,20 @@ declare namespace ts { updateImportAttribute(node: ImportAttribute, name: ImportAttributeName, value: Expression): ImportAttribute; createNamespaceImport(name: Identifier): NamespaceImport; updateNamespaceImport(node: NamespaceImport, name: Identifier): NamespaceImport; - createNamespaceExport(name: Identifier): NamespaceExport; - updateNamespaceExport(node: NamespaceExport, name: Identifier): NamespaceExport; + createNamespaceExport(name: ModuleExportName): NamespaceExport; + updateNamespaceExport(node: NamespaceExport, name: ModuleExportName): NamespaceExport; createNamedImports(elements: readonly ImportSpecifier[]): NamedImports; updateNamedImports(node: NamedImports, elements: readonly ImportSpecifier[]): NamedImports; - createImportSpecifier(isTypeOnly: boolean, propertyName: Identifier | undefined, name: Identifier): ImportSpecifier; - updateImportSpecifier(node: ImportSpecifier, isTypeOnly: boolean, propertyName: Identifier | undefined, name: Identifier): ImportSpecifier; + createImportSpecifier(isTypeOnly: boolean, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier; + updateImportSpecifier(node: ImportSpecifier, isTypeOnly: boolean, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier; createExportAssignment(modifiers: readonly ModifierLike[] | undefined, isExportEquals: boolean | undefined, expression: Expression): ExportAssignment; updateExportAssignment(node: ExportAssignment, modifiers: readonly ModifierLike[] | undefined, expression: Expression): ExportAssignment; createExportDeclaration(modifiers: readonly ModifierLike[] | undefined, isTypeOnly: boolean, exportClause: NamedExportBindings | undefined, moduleSpecifier?: Expression, attributes?: ImportAttributes): ExportDeclaration; updateExportDeclaration(node: ExportDeclaration, modifiers: readonly ModifierLike[] | undefined, isTypeOnly: boolean, exportClause: NamedExportBindings | undefined, moduleSpecifier: Expression | undefined, attributes: ImportAttributes | undefined): ExportDeclaration; createNamedExports(elements: readonly ExportSpecifier[]): NamedExports; updateNamedExports(node: NamedExports, elements: readonly ExportSpecifier[]): NamedExports; - createExportSpecifier(isTypeOnly: boolean, propertyName: string | Identifier | undefined, name: string | Identifier): ExportSpecifier; - updateExportSpecifier(node: ExportSpecifier, isTypeOnly: boolean, propertyName: Identifier | undefined, name: Identifier): ExportSpecifier; + createExportSpecifier(isTypeOnly: boolean, propertyName: string | ModuleExportName | undefined, name: string | ModuleExportName): ExportSpecifier; + updateExportSpecifier(node: ExportSpecifier, isTypeOnly: boolean, propertyName: ModuleExportName | undefined, name: ModuleExportName): ExportSpecifier; createExternalModuleReference(expression: Expression): ExternalModuleReference; updateExternalModuleReference(node: ExternalModuleReference, expression: Expression): ExternalModuleReference; createJSDocAllType(): JSDocAllType; @@ -8206,6 +8263,7 @@ declare namespace ts { readonly interactiveInlayHints?: boolean; readonly allowRenameOfImportPath?: boolean; readonly autoImportFileExcludePatterns?: string[]; + readonly autoImportSpecifierExcludeRegexes?: string[]; readonly preferTypeOnlyAutoImports?: boolean; /** * Indicates whether imports should be organized in a case-insensitive manner. @@ -8944,6 +9002,7 @@ declare namespace ts { function isExportDeclaration(node: Node): node is ExportDeclaration; function isNamedExports(node: Node): node is NamedExports; function isExportSpecifier(node: Node): node is ExportSpecifier; + function isModuleExportName(node: Node): node is ModuleExportName; function isMissingDeclaration(node: Node): node is MissingDeclaration; function isNotEmittedStatement(node: Node): node is NotEmittedStatement; function isExternalModuleReference(node: Node): node is ExternalModuleReference; @@ -9379,24 +9438,43 @@ declare namespace ts { function getModeForResolutionAtIndex(file: SourceFile, index: number, compilerOptions: CompilerOptions): ResolutionMode; /** * Use `program.getModeForUsageLocation`, which retrieves the correct `compilerOptions`, instead of this function whenever possible. - * Calculates the final resolution mode for a given module reference node. This is the resolution mode explicitly provided via import - * attributes, if present, or the syntax the usage would have if emitted to JavaScript. In `--module node16` or `nodenext`, this may - * depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the input syntax of the reference. In other - * `module` modes, when overriding import attributes are not provided, this function returns `undefined`, as the result would have no - * impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for a given module reference node. This function only returns a result when module resolution + * settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided via import attributes, + * which cause an `import` or `require` condition to be used during resolution regardless of module resolution settings. In absence of + * overriding attributes, and in modes that support differing resolution, the result indicates the syntax the usage would emit to JavaScript. + * Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` + * * @param file The file the import or import-like reference is contained within * @param usage The module reference string * @param compilerOptions The compiler options for the program that owns the file. If the file belongs to a referenced project, the compiler options * should be the options of the referenced project, not the referencing project. * @returns The final resolution mode of the import */ - function getModeForUsageLocation( - file: { - impliedNodeFormat?: ResolutionMode; - }, - usage: StringLiteralLike, - compilerOptions: CompilerOptions, - ): ModuleKind.CommonJS | ModuleKind.ESNext | undefined; + function getModeForUsageLocation(file: SourceFile, usage: StringLiteralLike, compilerOptions: CompilerOptions): ResolutionMode; function getConfigFileParsingDiagnostics(configFileParseResult: ParsedCommandLine): readonly Diagnostic[]; /** * A function for determining if a given file is esm or cjs format, assuming modern node module resolution rules, as configured by the @@ -9622,6 +9700,7 @@ declare namespace ts { setTimeout?(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; /** If provided, will be used to reset existing delayed compilation */ clearTimeout?(timeoutId: any): void; + preferNonRecursiveWatch?: boolean; } interface ProgramHost { /** @@ -9744,6 +9823,7 @@ declare namespace ts { dry?: boolean; force?: boolean; verbose?: boolean; + stopBuildOnErrors?: boolean; incremental?: boolean; assumeChangesOnlyAffectDirectDependencies?: boolean; declaration?: boolean; @@ -10711,6 +10791,10 @@ declare namespace ts { */ isIncomplete?: true; entries: CompletionEntry[]; + /** + * Default commit characters for the completion entries. + */ + defaultCommitCharacters?: string[]; } interface CompletionEntryDataAutoImport { /** @@ -10817,6 +10901,10 @@ declare namespace ts { * is an auto-import. */ data?: CompletionEntryData; + /** + * If this completion entry is selected, typing a commit character will cause the entry to be accepted. + */ + commitCharacters?: string[]; } interface CompletionEntryLabelDetails { /** diff --git a/node_modules/typescript/lib/typescript.js b/node_modules/typescript/lib/typescript.js index 74ad448c62..90f3266ee6 100644 --- a/node_modules/typescript/lib/typescript.js +++ b/node_modules/typescript/lib/typescript.js @@ -86,7 +86,6 @@ __export(typescript_exports, { GoToDefinition: () => ts_GoToDefinition_exports, HighlightSpanKind: () => HighlightSpanKind, IdentifierNameMap: () => IdentifierNameMap, - IdentifierNameMultiMap: () => IdentifierNameMultiMap, ImportKind: () => ImportKind, ImportsNotUsedAsValues: () => ImportsNotUsedAsValues, IndentStyle: () => IndentStyle, @@ -97,6 +96,7 @@ __export(typescript_exports, { InlayHintKind: () => InlayHintKind2, InlayHints: () => ts_InlayHints_exports, InternalEmitFlags: () => InternalEmitFlags, + InternalNodeBuilderFlags: () => InternalNodeBuilderFlags, InternalSymbolName: () => InternalSymbolName, IntersectionFlags: () => IntersectionFlags, InvalidatedProjectKind: () => InvalidatedProjectKind, @@ -143,6 +143,7 @@ __export(typescript_exports, { PollingInterval: () => PollingInterval, PollingWatchKind: () => PollingWatchKind, PragmaKindFlags: () => PragmaKindFlags, + PredicateSemantics: () => PredicateSemantics, PrivateIdentifierKind: () => PrivateIdentifierKind, ProcessLevel: () => ProcessLevel, ProgramUpdateLevel: () => ProgramUpdateLevel, @@ -173,7 +174,6 @@ __export(typescript_exports, { SymbolFlags: () => SymbolFlags, SymbolFormatFlags: () => SymbolFormatFlags, SyntaxKind: () => SyntaxKind, - SyntheticSymbolKind: () => SyntheticSymbolKind, Ternary: () => Ternary, ThrottledCancellationToken: () => ThrottledCancellationToken, TokenClass: () => TokenClass, @@ -196,7 +196,6 @@ __export(typescript_exports, { WatchLogLevel: () => WatchLogLevel, WatchType: () => WatchType, accessPrivateIdentifier: () => accessPrivateIdentifier, - addDisposableResourceHelper: () => addDisposableResourceHelper, addEmitFlags: () => addEmitFlags, addEmitHelper: () => addEmitHelper, addEmitHelpers: () => addEmitHelpers, @@ -219,23 +218,15 @@ __export(typescript_exports, { arrayFrom: () => arrayFrom, arrayIsEqualTo: () => arrayIsEqualTo, arrayIsHomogeneous: () => arrayIsHomogeneous, - arrayIsSorted: () => arrayIsSorted, arrayOf: () => arrayOf, arrayReverseIterator: () => arrayReverseIterator, arrayToMap: () => arrayToMap, arrayToMultiMap: () => arrayToMultiMap, arrayToNumericMap: () => arrayToNumericMap, - arraysEqual: () => arraysEqual, assertType: () => assertType, assign: () => assign, - assignHelper: () => assignHelper, - asyncDelegator: () => asyncDelegator, - asyncGeneratorHelper: () => asyncGeneratorHelper, asyncSuperHelper: () => asyncSuperHelper, - asyncValues: () => asyncValues, attachFileToDiagnostics: () => attachFileToDiagnostics, - awaitHelper: () => awaitHelper, - awaiterHelper: () => awaiterHelper, base64decode: () => base64decode, base64encode: () => base64encode, binarySearch: () => binarySearch, @@ -248,6 +239,7 @@ __export(typescript_exports, { buildOverload: () => buildOverload, bundlerModuleNameResolver: () => bundlerModuleNameResolver, canBeConvertedToAsync: () => canBeConvertedToAsync, + canEmitTsBuildInfo: () => canEmitTsBuildInfo, canHaveDecorators: () => canHaveDecorators, canHaveExportModifier: () => canHaveExportModifier, canHaveFlowNode: () => canHaveFlowNode, @@ -258,8 +250,9 @@ __export(typescript_exports, { canHaveJSDoc: () => canHaveJSDoc, canHaveLocals: () => canHaveLocals, canHaveModifiers: () => canHaveModifiers, + canHaveModuleSpecifier: () => canHaveModuleSpecifier, canHaveSymbol: () => canHaveSymbol, - canIncludeBindAndCheckDiagnsotics: () => canIncludeBindAndCheckDiagnsotics, + canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, canProduceDiagnostics: () => canProduceDiagnostics, canUsePropertyAccess: () => canUsePropertyAccess, @@ -276,16 +269,13 @@ __export(typescript_exports, { changeFullExtension: () => changeFullExtension, changesAffectModuleResolution: () => changesAffectModuleResolution, changesAffectingProgramStructure: () => changesAffectingProgramStructure, - characterToRegularExpressionFlag: () => characterToRegularExpressionFlag, + characterCodeToRegularExpressionFlag: () => characterCodeToRegularExpressionFlag, childIsDecorated: () => childIsDecorated, classElementOrClassElementParameterIsDecorated: () => classElementOrClassElementParameterIsDecorated, classHasClassThisAssignment: () => classHasClassThisAssignment, classHasDeclaredOrExplicitlyAssignedName: () => classHasDeclaredOrExplicitlyAssignedName, classHasExplicitlyAssignedName: () => classHasExplicitlyAssignedName, classOrConstructorParameterIsDecorated: () => classOrConstructorParameterIsDecorated, - classPrivateFieldGetHelper: () => classPrivateFieldGetHelper, - classPrivateFieldInHelper: () => classPrivateFieldInHelper, - classPrivateFieldSetHelper: () => classPrivateFieldSetHelper, classicNameResolver: () => classicNameResolver, classifier: () => ts_classifier_exports, cleanExtendedConfigCache: () => cleanExtendedConfigCache, @@ -293,7 +283,6 @@ __export(typescript_exports, { clearMap: () => clearMap, clearSharedExtendedConfigFileWatcher: () => clearSharedExtendedConfigFileWatcher, climbPastPropertyAccess: () => climbPastPropertyAccess, - climbPastPropertyOrElementAccess: () => climbPastPropertyOrElementAccess, clone: () => clone, cloneCompilerOptions: () => cloneCompilerOptions, closeFileWatcher: () => closeFileWatcher, @@ -306,12 +295,10 @@ __export(typescript_exports, { commandLineOptionOfCustomType: () => commandLineOptionOfCustomType, commentPragmas: () => commentPragmas, commonOptionsWithBuild: () => commonOptionsWithBuild, - commonPackageFolders: () => commonPackageFolders, compact: () => compact, compareBooleans: () => compareBooleans, compareDataObjects: () => compareDataObjects, compareDiagnostics: () => compareDiagnostics, - compareDiagnosticsSkipRelatedInformation: () => compareDiagnosticsSkipRelatedInformation, compareEmitHelpers: () => compareEmitHelpers, compareNumberOfDirectorySeparators: () => compareNumberOfDirectorySeparators, comparePaths: () => comparePaths, @@ -325,26 +312,21 @@ __export(typescript_exports, { compareStringsCaseSensitiveUI: () => compareStringsCaseSensitiveUI, compareTextSpans: () => compareTextSpans, compareValues: () => compareValues, - compileOnSaveCommandLineOption: () => compileOnSaveCommandLineOption, compilerOptionsAffectDeclarationPath: () => compilerOptionsAffectDeclarationPath, compilerOptionsAffectEmit: () => compilerOptionsAffectEmit, compilerOptionsAffectSemanticDiagnostics: () => compilerOptionsAffectSemanticDiagnostics, compilerOptionsDidYouMeanDiagnostics: () => compilerOptionsDidYouMeanDiagnostics, compilerOptionsIndicateEsModules: () => compilerOptionsIndicateEsModules, - compose: () => compose, computeCommonSourceDirectoryOfFilenames: () => computeCommonSourceDirectoryOfFilenames, computeLineAndCharacterOfPosition: () => computeLineAndCharacterOfPosition, computeLineOfPosition: () => computeLineOfPosition, computeLineStarts: () => computeLineStarts, computePositionOfLineAndCharacter: () => computePositionOfLineAndCharacter, - computeSignature: () => computeSignature, computeSignatureWithDiagnostics: () => computeSignatureWithDiagnostics, computeSuggestionDiagnostics: () => computeSuggestionDiagnostics, computedOptions: () => computedOptions, concatenate: () => concatenate, concatenateDiagnosticMessageChains: () => concatenateDiagnosticMessageChains, - configDirTemplateSubstitutionOptions: () => configDirTemplateSubstitutionOptions, - configDirTemplateSubstitutionWatchOptions: () => configDirTemplateSubstitutionWatchOptions, consumesNodeCoreModules: () => consumesNodeCoreModules, contains: () => contains, containsIgnoredPath: () => containsIgnoredPath, @@ -375,16 +357,11 @@ __export(typescript_exports, { createAccessorPropertySetRedirector: () => createAccessorPropertySetRedirector, createBaseNodeFactory: () => createBaseNodeFactory, createBinaryExpressionTrampoline: () => createBinaryExpressionTrampoline, - createBindingHelper: () => createBindingHelper, - createBuildInfo: () => createBuildInfo, createBuilderProgram: () => createBuilderProgram, - createBuilderProgramUsingProgramBuildInfo: () => createBuilderProgramUsingProgramBuildInfo, + createBuilderProgramUsingIncrementalBuildInfo: () => createBuilderProgramUsingIncrementalBuildInfo, createBuilderStatusReporter: () => createBuilderStatusReporter, - createCacheWithRedirects: () => createCacheWithRedirects, createCacheableExportInfoMap: () => createCacheableExportInfoMap, createCachedDirectoryStructureHost: () => createCachedDirectoryStructureHost, - createClassNamedEvaluationHelperBlock: () => createClassNamedEvaluationHelperBlock, - createClassThisAssignmentBlock: () => createClassThisAssignmentBlock, createClassifier: () => createClassifier, createCommentDirectivesMap: () => createCommentDirectivesMap, createCompilerDiagnostic: () => createCompilerDiagnostic, @@ -436,6 +413,7 @@ __export(typescript_exports, { createMemberAccessForPropertyName: () => createMemberAccessForPropertyName, createModeAwareCache: () => createModeAwareCache, createModeAwareCacheKey: () => createModeAwareCacheKey, + createModeMismatchDetails: () => createModeMismatchDetails, createModuleNotFoundChain: () => createModuleNotFoundChain, createModuleResolutionCache: () => createModuleResolutionCache, createModuleResolutionLoader: () => createModuleResolutionLoader, @@ -506,9 +484,7 @@ __export(typescript_exports, { declarationNameToString: () => declarationNameToString, decodeMappings: () => decodeMappings, decodedTextSpanIntersectsWith: () => decodedTextSpanIntersectsWith, - decorateHelper: () => decorateHelper, deduplicate: () => deduplicate, - defaultIncludeSpec: () => defaultIncludeSpec, defaultInitCompilerOptions: () => defaultInitCompilerOptions, defaultMaximumTruncationLength: () => defaultMaximumTruncationLength, diagnosticCategoryName: () => diagnosticCategoryName, @@ -519,27 +495,22 @@ __export(typescript_exports, { displayPart: () => displayPart, displayPartsToString: () => displayPartsToString, disposeEmitNodes: () => disposeEmitNodes, - disposeResourcesHelper: () => disposeResourcesHelper, documentSpansEqual: () => documentSpansEqual, dumpTracingLegend: () => dumpTracingLegend, elementAt: () => elementAt, elideNodes: () => elideNodes, - emitComments: () => emitComments, emitDetachedComments: () => emitDetachedComments, emitFiles: () => emitFiles, emitFilesAndReportErrors: () => emitFilesAndReportErrors, emitFilesAndReportErrorsAndGetExitStatus: () => emitFilesAndReportErrorsAndGetExitStatus, emitModuleKindIsNonNodeESM: () => emitModuleKindIsNonNodeESM, emitNewLineBeforeLeadingCommentOfPosition: () => emitNewLineBeforeLeadingCommentOfPosition, - emitNewLineBeforeLeadingComments: () => emitNewLineBeforeLeadingComments, - emitNewLineBeforeLeadingCommentsOfPosition: () => emitNewLineBeforeLeadingCommentsOfPosition, emitResolverSkipsTypeChecking: () => emitResolverSkipsTypeChecking, emitSkippedWithNoDiagnostics: () => emitSkippedWithNoDiagnostics, emptyArray: () => emptyArray, emptyFileSystemEntries: () => emptyFileSystemEntries, emptyMap: () => emptyMap, emptyOptions: () => emptyOptions, - emptySet: () => emptySet, endsWith: () => endsWith, ensurePathIsNonModuleName: () => ensurePathIsNonModuleName, ensureScriptKind: () => ensureScriptKind, @@ -550,7 +521,6 @@ __export(typescript_exports, { equateStringsCaseInsensitive: () => equateStringsCaseInsensitive, equateStringsCaseSensitive: () => equateStringsCaseSensitive, equateValues: () => equateValues, - esDecorateHelper: () => esDecorateHelper, escapeJsxAttributeString: () => escapeJsxAttributeString, escapeLeadingUnderscores: () => escapeLeadingUnderscores, escapeNonAsciiString: () => escapeNonAsciiString, @@ -564,15 +534,14 @@ __export(typescript_exports, { explainFiles: () => explainFiles, explainIfFileIsRedirectAndImpliedFormat: () => explainIfFileIsRedirectAndImpliedFormat, exportAssignmentIsAlias: () => exportAssignmentIsAlias, - exportStarHelper: () => exportStarHelper, expressionResultIsUnused: () => expressionResultIsUnused, extend: () => extend, - extendsHelper: () => extendsHelper, extensionFromPath: () => extensionFromPath, extensionIsTS: () => extensionIsTS, extensionsNotSupportingExtensionlessResolution: () => extensionsNotSupportingExtensionlessResolution, externalHelpersModuleNameText: () => externalHelpersModuleNameText, factory: () => factory, + fileContainsPackageImport: () => fileContainsPackageImport, fileExtensionIs: () => fileExtensionIs, fileExtensionIsOneOf: () => fileExtensionIsOneOf, fileIncludeReasonToDiagnostics: () => fileIncludeReasonToDiagnostics, @@ -594,7 +563,6 @@ __export(typescript_exports, { findLast: () => findLast, findLastIndex: () => findLastIndex, findListItemInfo: () => findListItemInfo, - findMap: () => findMap, findModifier: () => findModifier, findNextToken: () => findNextToken, findPackageJson: () => findPackageJson, @@ -642,7 +610,6 @@ __export(typescript_exports, { forEachTsConfigPropArray: () => forEachTsConfigPropArray, forEachUnique: () => forEachUnique, forEachYieldExpression: () => forEachYieldExpression, - forSomeAncestorDirectory: () => forSomeAncestorDirectory, formatColorAndReset: () => formatColorAndReset, formatDiagnostic: () => formatDiagnostic, formatDiagnostics: () => formatDiagnostics, @@ -653,11 +620,8 @@ __export(typescript_exports, { formatMessage: () => formatMessage, formatStringFromArgs: () => formatStringFromArgs, formatting: () => ts_formatting_exports, - fullTripleSlashAMDReferencePathRegEx: () => fullTripleSlashAMDReferencePathRegEx, - fullTripleSlashReferencePathRegEx: () => fullTripleSlashReferencePathRegEx, generateDjb2Hash: () => generateDjb2Hash, generateTSConfig: () => generateTSConfig, - generatorHelper: () => generatorHelper, getAdjustedReferenceLocation: () => getAdjustedReferenceLocation, getAdjustedRenameLocation: () => getAdjustedRenameLocation, getAliasDeclarationFromName: () => getAliasDeclarationFromName, @@ -676,7 +640,6 @@ __export(typescript_exports, { getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, getAssignedExpandoInitializer: () => getAssignedExpandoInitializer, getAssignedName: () => getAssignedName, - getAssignedNameOfIdentifier: () => getAssignedNameOfIdentifier, getAssignmentDeclarationKind: () => getAssignmentDeclarationKind, getAssignmentDeclarationPropertyAccessKind: () => getAssignmentDeclarationPropertyAccessKind, getAssignmentTargetKind: () => getAssignmentTargetKind, @@ -717,7 +680,6 @@ __export(typescript_exports, { getContainingObjectLiteralElement: () => getContainingObjectLiteralElement, getContextualTypeFromParent: () => getContextualTypeFromParent, getContextualTypeFromParentOrAncestorTypeNode: () => getContextualTypeFromParentOrAncestorTypeNode, - getCurrentTime: () => getCurrentTime, getDeclarationDiagnostics: () => getDeclarationDiagnostics, getDeclarationEmitExtensionForPath: () => getDeclarationEmitExtensionForPath, getDeclarationEmitOutputFilePath: () => getDeclarationEmitOutputFilePath, @@ -735,6 +697,7 @@ __export(typescript_exports, { getDefaultLibFilePath: () => getDefaultLibFilePath, getDefaultLikeExportInfo: () => getDefaultLikeExportInfo, getDefaultLikeExportNameFromDeclaration: () => getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker: () => getDefaultResolutionModeForFileWorker, getDiagnosticText: () => getDiagnosticText, getDiagnosticsWithinSpan: () => getDiagnosticsWithinSpan, getDirectoryPath: () => getDirectoryPath, @@ -765,6 +728,7 @@ __export(typescript_exports, { getEmitFlags: () => getEmitFlags, getEmitHelpers: () => getEmitHelpers, getEmitModuleDetectionKind: () => getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker: () => getEmitModuleFormatOfFileWorker, getEmitModuleKind: () => getEmitModuleKind, getEmitModuleResolutionKind: () => getEmitModuleResolutionKind, getEmitScriptTarget: () => getEmitScriptTarget, @@ -815,11 +779,11 @@ __export(typescript_exports, { getIdentifierGeneratedImportReference: () => getIdentifierGeneratedImportReference, getIdentifierTypeArguments: () => getIdentifierTypeArguments, getImmediatelyInvokedFunctionExpression: () => getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker: () => getImpliedNodeFormatForEmitWorker, getImpliedNodeFormatForFile: () => getImpliedNodeFormatForFile, getImpliedNodeFormatForFileWorker: () => getImpliedNodeFormatForFileWorker, getImportNeedsImportDefaultHelper: () => getImportNeedsImportDefaultHelper, getImportNeedsImportStarHelper: () => getImportNeedsImportStarHelper, - getIndentSize: () => getIndentSize, getIndentString: () => getIndentString, getInferredLibraryNameResolveFrom: () => getInferredLibraryNameResolveFrom, getInitializedVariables: () => getInitializedVariables, @@ -828,6 +792,7 @@ __export(typescript_exports, { getInterfaceBaseTypeNodes: () => getInterfaceBaseTypeNodes, getInternalEmitFlags: () => getInternalEmitFlags, getInvokedExpression: () => getInvokedExpression, + getIsFileExcluded: () => getIsFileExcluded, getIsolatedModules: () => getIsolatedModules, getJSDocAugmentsTag: () => getJSDocAugmentsTag, getJSDocClassTag: () => getJSDocClassTag, @@ -856,7 +821,6 @@ __export(typescript_exports, { getJSDocSatisfiesExpressionType: () => getJSDocSatisfiesExpressionType, getJSDocSatisfiesTag: () => getJSDocSatisfiesTag, getJSDocTags: () => getJSDocTags, - getJSDocTagsNoCache: () => getJSDocTagsNoCache, getJSDocTemplateTag: () => getJSDocTemplateTag, getJSDocThisTag: () => getJSDocThisTag, getJSDocType: () => getJSDocType, @@ -880,7 +844,6 @@ __export(typescript_exports, { getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, getLineInfo: () => getLineInfo, getLineOfLocalPosition: () => getLineOfLocalPosition, - getLineOfLocalPositionFromLineMap: () => getLineOfLocalPositionFromLineMap, getLineStartPositionForPosition: () => getLineStartPositionForPosition, getLineStarts: () => getLineStarts, getLinesBetweenPositionAndNextNonWhitespaceCharacter: () => getLinesBetweenPositionAndNextNonWhitespaceCharacter, @@ -922,7 +885,6 @@ __export(typescript_exports, { getNameOfScriptTarget: () => getNameOfScriptTarget, getNameOrArgument: () => getNameOrArgument, getNameTable: () => getNameTable, - getNamesForExportedSymbol: () => getNamesForExportedSymbol, getNamespaceDeclarationNode: () => getNamespaceDeclarationNode, getNewLineCharacter: () => getNewLineCharacter, getNewLineKind: () => getNewLineKind, @@ -939,49 +901,43 @@ __export(typescript_exports, { getNonAssignmentOperatorForCompoundAssignment: () => getNonAssignmentOperatorForCompoundAssignment, getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents: () => getNormalizedPathComponents, getObjectFlags: () => getObjectFlags, - getOperator: () => getOperator, getOperatorAssociativity: () => getOperatorAssociativity, getOperatorPrecedence: () => getOperatorPrecedence, getOptionFromName: () => getOptionFromName, getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, getOptionsNameMap: () => getOptionsNameMap, getOrCreateEmitNode: () => getOrCreateEmitNode, - getOrCreateExternalHelpersModuleNameIfNeeded: () => getOrCreateExternalHelpersModuleNameIfNeeded, getOrUpdate: () => getOrUpdate, getOriginalNode: () => getOriginalNode, getOriginalNodeId: () => getOriginalNodeId, - getOriginalSourceFile: () => getOriginalSourceFile, getOutputDeclarationFileName: () => getOutputDeclarationFileName, getOutputDeclarationFileNameWorker: () => getOutputDeclarationFileNameWorker, getOutputExtension: () => getOutputExtension, getOutputFileNames: () => getOutputFileNames, getOutputJSFileNameWorker: () => getOutputJSFileNameWorker, getOutputPathsFor: () => getOutputPathsFor, - getOutputPathsForBundle: () => getOutputPathsForBundle, getOwnEmitOutputFilePath: () => getOwnEmitOutputFilePath, getOwnKeys: () => getOwnKeys, getOwnValues: () => getOwnValues, - getPackageJsonInfo: () => getPackageJsonInfo, getPackageJsonTypesVersionsPaths: () => getPackageJsonTypesVersionsPaths, - getPackageJsonsVisibleToFile: () => getPackageJsonsVisibleToFile, getPackageNameFromTypesPackageName: () => getPackageNameFromTypesPackageName, getPackageScopeForPath: () => getPackageScopeForPath, getParameterSymbolFromJSDoc: () => getParameterSymbolFromJSDoc, - getParameterTypeNode: () => getParameterTypeNode, getParentNodeInSpan: () => getParentNodeInSpan, getParseTreeNode: () => getParseTreeNode, getParsedCommandLineOfConfigFile: () => getParsedCommandLineOfConfigFile, getPathComponents: () => getPathComponents, - getPathComponentsRelativeTo: () => getPathComponentsRelativeTo, getPathFromPathComponents: () => getPathFromPathComponents, getPathUpdater: () => getPathUpdater, getPathsBasePath: () => getPathsBasePath, getPatternFromSpec: () => getPatternFromSpec, - getPendingEmitKind: () => getPendingEmitKind, + getPendingEmitKindWithSeen: () => getPendingEmitKindWithSeen, getPositionOfLineAndCharacter: () => getPositionOfLineAndCharacter, getPossibleGenericSignatures: () => getPossibleGenericSignatures, getPossibleOriginalInputExtensionForExtension: () => getPossibleOriginalInputExtensionForExtension, @@ -994,7 +950,6 @@ __export(typescript_exports, { getPropertyArrayElementValue: () => getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, - getPropertyNameForUniqueESSymbol: () => getPropertyNameForUniqueESSymbol, getPropertyNameFromType: () => getPropertyNameFromType, getPropertyNameOfBindingOrAssignmentElement: () => getPropertyNameOfBindingOrAssignmentElement, getPropertySymbolFromBindingElement: () => getPropertySymbolFromBindingElement, @@ -1018,13 +973,14 @@ __export(typescript_exports, { getResolvePackageJsonExports: () => getResolvePackageJsonExports, getResolvePackageJsonImports: () => getResolvePackageJsonImports, getResolvedExternalModuleName: () => getResolvedExternalModuleName, + getResolvedModuleFromResolution: () => getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution: () => getResolvedTypeReferenceDirectiveFromResolution, getRestIndicatorOfBindingOrAssignmentElement: () => getRestIndicatorOfBindingOrAssignmentElement, getRestParameterElementType: () => getRestParameterElementType, getRightMostAssignedExpression: () => getRightMostAssignedExpression, getRootDeclaration: () => getRootDeclaration, getRootDirectoryOfResolutionCache: () => getRootDirectoryOfResolutionCache, getRootLength: () => getRootLength, - getRootPathSplitLength: () => getRootPathSplitLength, getScriptKind: () => getScriptKind, getScriptKindFromFileName: () => getScriptKindFromFileName, getScriptTargetFeatures: () => getScriptTargetFeatures, @@ -1036,14 +992,12 @@ __export(typescript_exports, { getSetAccessorValueParameter: () => getSetAccessorValueParameter, getSetExternalModuleIndicator: () => getSetExternalModuleIndicator, getShebang: () => getShebang, - getSingleInitializerOfVariableStatementOrPropertyDeclaration: () => getSingleInitializerOfVariableStatementOrPropertyDeclaration, getSingleVariableOfVariableStatement: () => getSingleVariableOfVariableStatement, getSnapshotText: () => getSnapshotText, getSnippetElement: () => getSnippetElement, getSourceFileOfModule: () => getSourceFileOfModule, getSourceFileOfNode: () => getSourceFileOfNode, getSourceFilePathInNewDir: () => getSourceFilePathInNewDir, - getSourceFilePathInNewDirWorker: () => getSourceFilePathInNewDirWorker, getSourceFileVersionAsHashFromText: () => getSourceFileVersionAsHashFromText, getSourceFilesToEmit: () => getSourceFilesToEmit, getSourceMapRange: () => getSourceMapRange, @@ -1066,7 +1020,6 @@ __export(typescript_exports, { getSwitchedType: () => getSwitchedType, getSymbolId: () => getSymbolId, getSymbolNameForPrivateIdentifier: () => getSymbolNameForPrivateIdentifier, - getSymbolParentOrFail: () => getSymbolParentOrFail, getSymbolTarget: () => getSymbolTarget, getSyntacticClassifications: () => getSyntacticClassifications, getSyntacticModifierFlags: () => getSyntacticModifierFlags, @@ -1097,7 +1050,6 @@ __export(typescript_exports, { getTouchingToken: () => getTouchingToken, getTrailingCommentRanges: () => getTrailingCommentRanges, getTrailingSemicolonDeferringWriter: () => getTrailingSemicolonDeferringWriter, - getTransformFlagsSubtreeExclusions: () => getTransformFlagsSubtreeExclusions, getTransformers: () => getTransformers, getTsBuildInfoEmitOutputFilePath: () => getTsBuildInfoEmitOutputFilePath, getTsConfigObjectLiteralExpression: () => getTsConfigObjectLiteralExpression, @@ -1125,7 +1077,6 @@ __export(typescript_exports, { hasAccessorModifier: () => hasAccessorModifier, hasAmbientModifier: () => hasAmbientModifier, hasChangesInResolutions: () => hasChangesInResolutions, - hasChildOfKind: () => hasChildOfKind, hasContextSensitiveParameters: () => hasContextSensitiveParameters, hasDecorators: () => hasDecorators, hasDocComment: () => hasDocComment, @@ -1134,6 +1085,7 @@ __export(typescript_exports, { hasEffectiveModifiers: () => hasEffectiveModifiers, hasEffectiveReadonlyModifier: () => hasEffectiveReadonlyModifier, hasExtension: () => hasExtension, + hasImplementationTSFileExtension: () => hasImplementationTSFileExtension, hasIndexSignature: () => hasIndexSignature, hasInferredType: () => hasInferredType, hasInitializer: () => hasInitializer, @@ -1161,7 +1113,6 @@ __export(typescript_exports, { hasType: () => hasType, hasTypeArguments: () => hasTypeArguments, hasZeroOrOneAsteriskCharacter: () => hasZeroOrOneAsteriskCharacter, - helperString: () => helperString, hostGetCanonicalFileName: () => hostGetCanonicalFileName, hostUsesCaseSensitiveFileNames: () => hostUsesCaseSensitiveFileNames, idText: () => idText, @@ -1171,9 +1122,8 @@ __export(typescript_exports, { identitySourceMapConsumer: () => identitySourceMapConsumer, ignoreSourceNewlines: () => ignoreSourceNewlines, ignoredPaths: () => ignoredPaths, - importDefaultHelper: () => importDefaultHelper, importFromModuleSpecifier: () => importFromModuleSpecifier, - importStarHelper: () => importStarHelper, + importSyntaxAffectsModuleResolution: () => importSyntaxAffectsModuleResolution, indexOfAnyCharCode: () => indexOfAnyCharCode, indexOfNode: () => indexOfNode, indicesOf: () => indicesOf, @@ -1181,7 +1131,6 @@ __export(typescript_exports, { injectClassNamedEvaluationHelperBlockIfMissing: () => injectClassNamedEvaluationHelperBlockIfMissing, injectClassThisAssignmentIfMissing: () => injectClassThisAssignmentIfMissing, insertImports: () => insertImports, - insertLeadingStatement: () => insertLeadingStatement, insertSorted: () => insertSorted, insertStatementAfterCustomPrologue: () => insertStatementAfterCustomPrologue, insertStatementAfterStandardPrologue: () => insertStatementAfterStandardPrologue, @@ -1197,11 +1146,9 @@ __export(typescript_exports, { isAccessibilityModifier: () => isAccessibilityModifier, isAccessor: () => isAccessor, isAccessorModifier: () => isAccessorModifier, - isAliasSymbolDeclaration: () => isAliasSymbolDeclaration, isAliasableExpression: () => isAliasableExpression, isAmbientModule: () => isAmbientModule, isAmbientPropertyDeclaration: () => isAmbientPropertyDeclaration, - isAnonymousFunctionDefinition: () => isAnonymousFunctionDefinition, isAnyDirectorySeparator: () => isAnyDirectorySeparator, isAnyImportOrBareOrAccessedRequire: () => isAnyImportOrBareOrAccessedRequire, isAnyImportOrReExport: () => isAnyImportOrReExport, @@ -1237,6 +1184,7 @@ __export(typescript_exports, { isAwaitKeyword: () => isAwaitKeyword, isBigIntLiteral: () => isBigIntLiteral, isBinaryExpression: () => isBinaryExpression, + isBinaryLogicalOperator: () => isBinaryLogicalOperator, isBinaryOperatorToken: () => isBinaryOperatorToken, isBindableObjectDefinePropertyCall: () => isBindableObjectDefinePropertyCall, isBindableStaticAccessExpression: () => isBindableStaticAccessExpression, @@ -1258,7 +1206,7 @@ __export(typescript_exports, { isBreakStatement: () => isBreakStatement, isBuild: () => isBuild, isBuildInfoFile: () => isBuildInfoFile, - isBuilderProgram: () => isBuilderProgram2, + isBuilderProgram: () => isBuilderProgram, isBundle: () => isBundle, isCallChain: () => isCallChain, isCallExpression: () => isCallExpression, @@ -1277,7 +1225,6 @@ __export(typescript_exports, { isCatchClauseVariableDeclaration: () => isCatchClauseVariableDeclaration, isCatchClauseVariableDeclarationOrBindingElement: () => isCatchClauseVariableDeclarationOrBindingElement, isCheckJsEnabledForFile: () => isCheckJsEnabledForFile, - isChildOfNodeWithKind: () => isChildOfNodeWithKind, isCircularBuildOrder: () => isCircularBuildOrder, isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, @@ -1289,7 +1236,6 @@ __export(typescript_exports, { isClassOrTypeElement: () => isClassOrTypeElement, isClassStaticBlockDeclaration: () => isClassStaticBlockDeclaration, isClassThisAssignmentBlock: () => isClassThisAssignmentBlock, - isCollapsedRange: () => isCollapsedRange, isColonToken: () => isColonToken, isCommaExpression: () => isCommaExpression, isCommaListExpression: () => isCommaListExpression, @@ -1332,16 +1278,13 @@ __export(typescript_exports, { isDeleteTarget: () => isDeleteTarget, isDeprecatedDeclaration: () => isDeprecatedDeclaration, isDestructuringAssignment: () => isDestructuringAssignment, - isDiagnosticWithLocation: () => isDiagnosticWithLocation, isDiskPathRoot: () => isDiskPathRoot, isDoStatement: () => isDoStatement, isDocumentRegistryEntry: () => isDocumentRegistryEntry, isDotDotDotToken: () => isDotDotDotToken, isDottedName: () => isDottedName, isDynamicName: () => isDynamicName, - isESSymbolIdentifier: () => isESSymbolIdentifier, isEffectiveExternalModule: () => isEffectiveExternalModule, - isEffectiveModuleDeclaration: () => isEffectiveModuleDeclaration, isEffectiveStrictModeSourceFile: () => isEffectiveStrictModeSourceFile, isElementAccessChain: () => isElementAccessChain, isElementAccessExpression: () => isElementAccessExpression, @@ -1411,13 +1354,11 @@ __export(typescript_exports, { isFunctionOrModuleBlock: () => isFunctionOrModuleBlock, isFunctionSymbol: () => isFunctionSymbol, isFunctionTypeNode: () => isFunctionTypeNode, - isFutureReservedKeyword: () => isFutureReservedKeyword, isGeneratedIdentifier: () => isGeneratedIdentifier, isGeneratedPrivateIdentifier: () => isGeneratedPrivateIdentifier, isGetAccessor: () => isGetAccessor, isGetAccessorDeclaration: () => isGetAccessorDeclaration, isGetOrSetAccessorDeclaration: () => isGetOrSetAccessorDeclaration, - isGlobalDeclaration: () => isGlobalDeclaration, isGlobalScopeAugmentation: () => isGlobalScopeAugmentation, isGlobalSourceFile: () => isGlobalSourceFile, isGrammarError: () => isGrammarError, @@ -1465,6 +1406,8 @@ __export(typescript_exports, { isInTemplateString: () => isInTemplateString, isInTopLevelContext: () => isInTopLevelContext, isInTypeQuery: () => isInTypeQuery, + isIncrementalBuildInfo: () => isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo: () => isIncrementalBundleEmitBuildInfo, isIncrementalCompilation: () => isIncrementalCompilation, isIndexSignatureDeclaration: () => isIndexSignatureDeclaration, isIndexedAccessTypeNode: () => isIndexedAccessTypeNode, @@ -1571,7 +1514,6 @@ __export(typescript_exports, { isLabeledStatement: () => isLabeledStatement, isLateVisibilityPaintedStatement: () => isLateVisibilityPaintedStatement, isLeftHandSideExpression: () => isLeftHandSideExpression, - isLeftHandSideOfAssignment: () => isLeftHandSideOfAssignment, isLet: () => isLet, isLineBreak: () => isLineBreak, isLiteralComputedPropertyDeclarationName: () => isLiteralComputedPropertyDeclarationName, @@ -1579,10 +1521,7 @@ __export(typescript_exports, { isLiteralExpressionOfObject: () => isLiteralExpressionOfObject, isLiteralImportTypeNode: () => isLiteralImportTypeNode, isLiteralKind: () => isLiteralKind, - isLiteralLikeAccess: () => isLiteralLikeAccess, - isLiteralLikeElementAccess: () => isLiteralLikeElementAccess, isLiteralNameOfPropertyDeclarationOrIndexAccess: () => isLiteralNameOfPropertyDeclarationOrIndexAccess, - isLiteralTypeLikeExpression: () => isLiteralTypeLikeExpression, isLiteralTypeLiteral: () => isLiteralTypeLiteral, isLiteralTypeNode: () => isLiteralTypeNode, isLocalName: () => isLocalName, @@ -1607,6 +1546,7 @@ __export(typescript_exports, { isModuleBlock: () => isModuleBlock, isModuleBody: () => isModuleBody, isModuleDeclaration: () => isModuleDeclaration, + isModuleExportName: () => isModuleExportName, isModuleExportsAccessExpression: () => isModuleExportsAccessExpression, isModuleIdentifier: () => isModuleIdentifier, isModuleName: () => isModuleName, @@ -1616,7 +1556,6 @@ __export(typescript_exports, { isModuleWithStringLiteralName: () => isModuleWithStringLiteralName, isNameOfFunctionDeclaration: () => isNameOfFunctionDeclaration, isNameOfModuleDeclaration: () => isNameOfModuleDeclaration, - isNamedClassElement: () => isNamedClassElement, isNamedDeclaration: () => isNamedDeclaration, isNamedEvaluation: () => isNamedEvaluation, isNamedEvaluationSource: () => isNamedEvaluationSource, @@ -1634,7 +1573,6 @@ __export(typescript_exports, { isNewExpression: () => isNewExpression, isNewExpressionTarget: () => isNewExpressionTarget, isNoSubstitutionTemplateLiteral: () => isNoSubstitutionTemplateLiteral, - isNode: () => isNode, isNodeArray: () => isNodeArray, isNodeArrayMultiLine: () => isNodeArrayMultiLine, isNodeDescendantOf: () => isNodeDescendantOf, @@ -1643,14 +1581,11 @@ __export(typescript_exports, { isNodeModulesDirectory: () => isNodeModulesDirectory, isNodeWithPossibleHoistedDeclaration: () => isNodeWithPossibleHoistedDeclaration, isNonContextualKeyword: () => isNonContextualKeyword, - isNonExportDefaultModifier: () => isNonExportDefaultModifier, isNonGlobalAmbientModule: () => isNonGlobalAmbientModule, - isNonGlobalDeclaration: () => isNonGlobalDeclaration, isNonNullAccess: () => isNonNullAccess, isNonNullChain: () => isNonNullChain, isNonNullExpression: () => isNonNullExpression, isNonStaticMethodOrAccessorWithPrivateName: () => isNonStaticMethodOrAccessorWithPrivateName, - isNotEmittedOrPartiallyEmittedNode: () => isNotEmittedOrPartiallyEmittedNode, isNotEmittedStatement: () => isNotEmittedStatement, isNullishCoalesce: () => isNullishCoalesce, isNumber: () => isNumber, @@ -1666,7 +1601,6 @@ __export(typescript_exports, { isObjectLiteralMethod: () => isObjectLiteralMethod, isObjectLiteralOrClassExpressionMethodOrAccessor: () => isObjectLiteralOrClassExpressionMethodOrAccessor, isObjectTypeDeclaration: () => isObjectTypeDeclaration, - isOctalDigit: () => isOctalDigit, isOmittedExpression: () => isOmittedExpression, isOptionalChain: () => isOptionalChain, isOptionalChainRoot: () => isOptionalChainRoot, @@ -1700,7 +1634,6 @@ __export(typescript_exports, { isPrivateIdentifierClassElementDeclaration: () => isPrivateIdentifierClassElementDeclaration, isPrivateIdentifierPropertyAccessExpression: () => isPrivateIdentifierPropertyAccessExpression, isPrivateIdentifierSymbol: () => isPrivateIdentifierSymbol, - isProgramBundleEmitBuildInfo: () => isProgramBundleEmitBuildInfo, isProgramUptoDate: () => isProgramUptoDate, isPrologueDirective: () => isPrologueDirective, isPropertyAccessChain: () => isPropertyAccessChain, @@ -1713,7 +1646,6 @@ __export(typescript_exports, { isPropertyName: () => isPropertyName, isPropertyNameLiteral: () => isPropertyNameLiteral, isPropertySignature: () => isPropertySignature, - isProtoSetter: () => isProtoSetter, isPrototypeAccess: () => isPrototypeAccess, isPrototypePropertyAssignment: () => isPrototypePropertyAssignment, isPunctuation: () => isPunctuation, @@ -1723,7 +1655,6 @@ __export(typescript_exports, { isQuestionOrExclamationToken: () => isQuestionOrExclamationToken, isQuestionOrPlusOrMinusToken: () => isQuestionOrPlusOrMinusToken, isQuestionToken: () => isQuestionToken, - isRawSourceMap: () => isRawSourceMap, isReadonlyKeyword: () => isReadonlyKeyword, isReadonlyKeywordOrPlusOrMinusToken: () => isReadonlyKeywordOrPlusOrMinusToken, isRecognizedTripleSlashComment: () => isRecognizedTripleSlashComment, @@ -1745,24 +1676,22 @@ __export(typescript_exports, { isRootedDiskPath: () => isRootedDiskPath, isSameEntityName: () => isSameEntityName, isSatisfiesExpression: () => isSatisfiesExpression, - isScopeMarker: () => isScopeMarker, isSemicolonClassElement: () => isSemicolonClassElement, isSetAccessor: () => isSetAccessor, isSetAccessorDeclaration: () => isSetAccessorDeclaration, - isShebangTrivia: () => isShebangTrivia, isShiftOperatorOrHigher: () => isShiftOperatorOrHigher, isShorthandAmbientModuleSymbol: () => isShorthandAmbientModuleSymbol, isShorthandPropertyAssignment: () => isShorthandPropertyAssignment, + isSideEffectImport: () => isSideEffectImport, isSignedNumericLiteral: () => isSignedNumericLiteral, isSimpleCopiableExpression: () => isSimpleCopiableExpression, isSimpleInlineableExpression: () => isSimpleInlineableExpression, - isSimpleParameter: () => isSimpleParameter, isSimpleParameterList: () => isSimpleParameterList, isSingleOrDoubleQuote: () => isSingleOrDoubleQuote, + isSourceElement: () => isSourceElement, isSourceFile: () => isSourceFile, isSourceFileFromLibrary: () => isSourceFileFromLibrary, isSourceFileJS: () => isSourceFileJS, - isSourceFileNotJS: () => isSourceFileNotJS, isSourceFileNotJson: () => isSourceFileNotJson, isSourceMapping: () => isSourceMapping, isSpecialPropertyDeclaration: () => isSpecialPropertyDeclaration, @@ -1775,7 +1704,6 @@ __export(typescript_exports, { isStatic: () => isStatic, isStaticModifier: () => isStaticModifier, isString: () => isString, - isStringAKeyword: () => isStringAKeyword, isStringANonContextualKeyword: () => isStringANonContextualKeyword, isStringAndEmptyAnonymousObjectIntersection: () => isStringAndEmptyAnonymousObjectIntersection, isStringDoubleQuoted: () => isStringDoubleQuoted, @@ -1788,7 +1716,6 @@ __export(typescript_exports, { isStringTextContainingNode: () => isStringTextContainingNode, isSuperCall: () => isSuperCall, isSuperKeyword: () => isSuperKeyword, - isSuperOrSuperProperty: () => isSuperOrSuperProperty, isSuperProperty: () => isSuperProperty, isSupportedSourceFileName: () => isSupportedSourceFileName, isSwitchStatement: () => isSwitchStatement, @@ -1834,7 +1761,6 @@ __export(typescript_exports, { isTypeDeclaration: () => isTypeDeclaration, isTypeElement: () => isTypeElement, isTypeKeyword: () => isTypeKeyword, - isTypeKeywordToken: () => isTypeKeywordToken, isTypeKeywordTokenOrIdentifier: () => isTypeKeywordTokenOrIdentifier, isTypeLiteralNode: () => isTypeLiteralNode, isTypeNode: () => isTypeNode, @@ -1889,10 +1815,6 @@ __export(typescript_exports, { libMap: () => libMap, libs: () => libs, lineBreakPart: () => lineBreakPart, - linkNamePart: () => linkNamePart, - linkPart: () => linkPart, - linkTextPart: () => linkTextPart, - listFiles: () => listFiles, loadModuleFromGlobalCache: () => loadModuleFromGlobalCache, loadWithModeAwareCache: () => loadWithModeAwareCache, makeIdentifierFromModuleName: () => makeIdentifierFromModuleName, @@ -1902,7 +1824,6 @@ __export(typescript_exports, { map: () => map, mapAllOrFail: () => mapAllOrFail, mapDefined: () => mapDefined, - mapDefinedEntries: () => mapDefinedEntries, mapDefinedIterator: () => mapDefinedIterator, mapEntries: () => mapEntries, mapIterator: () => mapIterator, @@ -1912,18 +1833,19 @@ __export(typescript_exports, { matchPatternOrExact: () => matchPatternOrExact, matchedText: () => matchedText, matchesExclude: () => matchesExclude, + maxBy: () => maxBy, maybeBind: () => maybeBind, maybeSetLocalizedDiagnosticMessages: () => maybeSetLocalizedDiagnosticMessages, memoize: () => memoize, - memoizeCached: () => memoizeCached, memoizeOne: () => memoizeOne, - memoizeWeak: () => memoizeWeak, - metadataHelper: () => metadataHelper, min: () => min, minAndMax: () => minAndMax, missingFileModifiedTime: () => missingFileModifiedTime, modifierToFlag: () => modifierToFlag, modifiersToFlags: () => modifiersToFlags, + moduleExportNameIsDefault: () => moduleExportNameIsDefault, + moduleExportNameTextEscaped: () => moduleExportNameTextEscaped, + moduleExportNameTextUnescaped: () => moduleExportNameTextUnescaped, moduleOptionDeclaration: () => moduleOptionDeclaration, moduleResolutionIsEqualTo: () => moduleResolutionIsEqualTo, moduleResolutionNameAndModeGetter: () => moduleResolutionNameAndModeGetter, @@ -1963,11 +1885,11 @@ __export(typescript_exports, { nodePosToString: () => nodePosToString, nodeSeenTracker: () => nodeSeenTracker, nodeStartsNewLexicalEnvironment: () => nodeStartsNewLexicalEnvironment, - nodeToDisplayParts: () => nodeToDisplayParts, noop: () => noop, noopFileWatcher: () => noopFileWatcher, normalizePath: () => normalizePath, normalizeSlashes: () => normalizeSlashes, + normalizeSpans: () => normalizeSpans, not: () => not, notImplemented: () => notImplemented, notImplementedResolver: () => notImplementedResolver, @@ -1982,13 +1904,11 @@ __export(typescript_exports, { optionsForBuild: () => optionsForBuild, optionsForWatch: () => optionsForWatch, optionsHaveChanges: () => optionsHaveChanges, - optionsHaveModuleResolutionChanges: () => optionsHaveModuleResolutionChanges, or: () => or, orderedRemoveItem: () => orderedRemoveItem, orderedRemoveItemAt: () => orderedRemoveItemAt, packageIdToPackageName: () => packageIdToPackageName, packageIdToString: () => packageIdToString, - paramHelper: () => paramHelper, parameterIsThisKeyword: () => parameterIsThisKeyword, parameterNamePart: () => parameterNamePart, parseBaseNodeFactory: () => parseBaseNodeFactory, @@ -2019,10 +1939,8 @@ __export(typescript_exports, { pathIsBareSpecifier: () => pathIsBareSpecifier, pathIsRelative: () => pathIsRelative, patternText: () => patternText, - perfLogger: () => perfLogger, performIncrementalCompilation: () => performIncrementalCompilation, performance: () => ts_performance_exports, - plainJSErrors: () => plainJSErrors, positionBelongsToNode: () => positionBelongsToNode, positionIsASICandidate: () => positionIsASICandidate, positionIsSynthesized: () => positionIsSynthesized, @@ -2035,7 +1953,6 @@ __export(typescript_exports, { programContainsEsModules: () => programContainsEsModules, programContainsModules: () => programContainsModules, projectReferenceIsEqualTo: () => projectReferenceIsEqualTo, - propKeyHelper: () => propKeyHelper, propertyNamePart: () => propertyNamePart, pseudoBigIntToString: () => pseudoBigIntToString, punctuationPart: () => punctuationPart, @@ -2058,7 +1975,6 @@ __export(typescript_exports, { rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine, readBuilderProgram: () => readBuilderProgram, readConfigFile: () => readConfigFile, - readHelper: () => readHelper, readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, @@ -2069,7 +1985,7 @@ __export(typescript_exports, { reducePathComponents: () => reducePathComponents, refactor: () => ts_refactor_exports, regExpEscape: () => regExpEscape, - regularExpressionFlagToCharacter: () => regularExpressionFlagToCharacter, + regularExpressionFlagToCharacterCode: () => regularExpressionFlagToCharacterCode, relativeComplement: () => relativeComplement, removeAllComments: () => removeAllComments, removeEmitHelper: () => removeEmitHelper, @@ -2077,7 +1993,6 @@ __export(typescript_exports, { removeFileExtension: () => removeFileExtension, removeIgnoredPath: () => removeIgnoredPath, removeMinAndVersionNumbers: () => removeMinAndVersionNumbers, - removeOptionality: () => removeOptionality, removePrefix: () => removePrefix, removeSuffix: () => removeSuffix, removeTrailingDirectorySeparator: () => removeTrailingDirectorySeparator, @@ -2096,20 +2011,16 @@ __export(typescript_exports, { resolveTripleslashReference: () => resolveTripleslashReference, resolveTypeReferenceDirective: () => resolveTypeReferenceDirective, resolvingEmptyArray: () => resolvingEmptyArray, - restHelper: () => restHelper, returnFalse: () => returnFalse, returnNoopFileWatcher: () => returnNoopFileWatcher, returnTrue: () => returnTrue, returnUndefined: () => returnUndefined, returnsPromise: () => returnsPromise, - runInitializersHelper: () => runInitializersHelper, sameFlatMap: () => sameFlatMap, sameMap: () => sameMap, sameMapping: () => sameMapping, - scanShebangTrivia: () => scanShebangTrivia, scanTokenAtPosition: () => scanTokenAtPosition, scanner: () => scanner, - screenStartingMessageCodes: () => screenStartingMessageCodes, semanticDiagnosticsOptionDeclarations: () => semanticDiagnosticsOptionDeclarations, serializeCompilerOptions: () => serializeCompilerOptions, server: () => ts_server_exports4, @@ -2117,16 +2028,13 @@ __export(typescript_exports, { setCommentRange: () => setCommentRange, setConfigFileInOptions: () => setConfigFileInOptions, setConstantValue: () => setConstantValue, - setEachParent: () => setEachParent, setEmitFlags: () => setEmitFlags, - setFunctionNameHelper: () => setFunctionNameHelper, setGetSourceFileAsHashVersioned: () => setGetSourceFileAsHashVersioned, setIdentifierAutoGenerate: () => setIdentifierAutoGenerate, setIdentifierGeneratedImportReference: () => setIdentifierGeneratedImportReference, setIdentifierTypeArguments: () => setIdentifierTypeArguments, setInternalEmitFlags: () => setInternalEmitFlags, setLocalizedDiagnosticMessages: () => setLocalizedDiagnosticMessages, - setModuleDefaultHelper: () => setModuleDefaultHelper, setNodeChildren: () => setNodeChildren, setNodeFlags: () => setNodeFlags, setObjectAllocator: () => setObjectAllocator, @@ -2155,7 +2063,6 @@ __export(typescript_exports, { shouldPreserveConstEnums: () => shouldPreserveConstEnums, shouldUseUriStyleNodeCoreModules: () => shouldUseUriStyleNodeCoreModules, showModuleSpecifier: () => showModuleSpecifier, - signatureHasLiteralTypes: () => signatureHasLiteralTypes, signatureHasRestParameter: () => signatureHasRestParameter, signatureToDisplayParts: () => signatureToDisplayParts, single: () => single, @@ -2164,18 +2071,17 @@ __export(typescript_exports, { singleOrMany: () => singleOrMany, singleOrUndefined: () => singleOrUndefined, skipAlias: () => skipAlias, - skipAssertions: () => skipAssertions, skipConstraint: () => skipConstraint, skipOuterExpressions: () => skipOuterExpressions, skipParentheses: () => skipParentheses, skipPartiallyEmittedExpressions: () => skipPartiallyEmittedExpressions, skipTrivia: () => skipTrivia, skipTypeChecking: () => skipTypeChecking, + skipTypeCheckingIgnoringNoCheck: () => skipTypeCheckingIgnoringNoCheck, skipTypeParentheses: () => skipTypeParentheses, skipWhile: () => skipWhile, sliceAfter: () => sliceAfter, some: () => some, - sort: () => sort, sortAndDeduplicate: () => sortAndDeduplicate, sortAndDeduplicateDiagnostics: () => sortAndDeduplicateDiagnostics, sourceFileAffectingCompilerOptions: () => sourceFileAffectingCompilerOptions, @@ -2184,8 +2090,6 @@ __export(typescript_exports, { sourceMapCommentRegExpDontCareLineStart: () => sourceMapCommentRegExpDontCareLineStart, spacePart: () => spacePart, spanMap: () => spanMap, - spreadArrayHelper: () => spreadArrayHelper, - stableSort: () => stableSort, startEndContainsRange: () => startEndContainsRange, startEndOverlapsWithStartEnd: () => startEndOverlapsWithStartEnd, startOnNewLine: () => startOnNewLine, @@ -2198,10 +2102,8 @@ __export(typescript_exports, { stringToToken: () => stringToToken, stripQuotes: () => stripQuotes, supportedDeclarationExtensions: () => supportedDeclarationExtensions, - supportedJSExtensions: () => supportedJSExtensions, supportedJSExtensionsFlat: () => supportedJSExtensionsFlat, supportedLocaleDirectories: () => supportedLocaleDirectories, - supportedTSExtensions: () => supportedTSExtensions, supportedTSExtensionsFlat: () => supportedTSExtensionsFlat, supportedTSImplementationExtensions: () => supportedTSImplementationExtensions, suppressLeadingAndTrailingTrivia: () => suppressLeadingAndTrailingTrivia, @@ -2210,16 +2112,12 @@ __export(typescript_exports, { symbolEscapedNameNoDefault: () => symbolEscapedNameNoDefault, symbolName: () => symbolName, symbolNameNoDefault: () => symbolNameNoDefault, - symbolPart: () => symbolPart, symbolToDisplayParts: () => symbolToDisplayParts, - syntaxMayBeASICandidate: () => syntaxMayBeASICandidate, - syntaxRequiresTrailingSemicolonOrASI: () => syntaxRequiresTrailingSemicolonOrASI, sys: () => sys, sysLog: () => sysLog, tagNamesAreEquivalent: () => tagNamesAreEquivalent, takeWhile: () => takeWhile, targetOptionDeclaration: () => targetOptionDeclaration, - templateObjectHelper: () => templateObjectHelper, testFormatSettings: () => testFormatSettings, textChangeRangeIsUnchanged: () => textChangeRangeIsUnchanged, textChangeRangeNewSpan: () => textChangeRangeNewSpan, @@ -2227,7 +2125,10 @@ __export(typescript_exports, { textOrKeywordPart: () => textOrKeywordPart, textPart: () => textPart, textRangeContainsPositionInclusive: () => textRangeContainsPositionInclusive, + textRangeContainsTextSpan: () => textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan: () => textRangeIntersectsWithTextSpan, textSpanContainsPosition: () => textSpanContainsPosition, + textSpanContainsTextRange: () => textSpanContainsTextRange, textSpanContainsTextSpan: () => textSpanContainsTextSpan, textSpanEnd: () => textSpanEnd, textSpanIntersection: () => textSpanIntersection, @@ -2245,9 +2146,9 @@ __export(typescript_exports, { toBuilderStateFileInfoForMultiEmit: () => toBuilderStateFileInfoForMultiEmit, toEditorSettings: () => toEditorSettings, toFileNameLowerCase: () => toFileNameLowerCase, - toLowerCase: () => toLowerCase, toPath: () => toPath, toProgramEmitPending: () => toProgramEmitPending, + toSorted: () => toSorted, tokenIsIdentifierOrKeyword: () => tokenIsIdentifierOrKeyword, tokenIsIdentifierOrKeywordOrGreaterThan: () => tokenIsIdentifierOrKeywordOrGreaterThan, tokenToString: () => tokenToString, @@ -2269,11 +2170,11 @@ __export(typescript_exports, { transformESDecorators: () => transformESDecorators, transformESNext: () => transformESNext, transformGenerators: () => transformGenerators, + transformImpliedNodeFormatDependentModule: () => transformImpliedNodeFormatDependentModule, transformJsx: () => transformJsx, transformLegacyDecorators: () => transformLegacyDecorators, transformModule: () => transformModule, transformNamedEvaluation: () => transformNamedEvaluation, - transformNodeModule: () => transformNodeModule, transformNodes: () => transformNodes, transformSystemModule: () => transformSystemModule, transformTypeScript: () => transformTypeScript, @@ -2300,7 +2201,6 @@ __export(typescript_exports, { tryGetPropertyNameOfBindingOrAssignmentElement: () => tryGetPropertyNameOfBindingOrAssignmentElement, tryGetSourceMappingURL: () => tryGetSourceMappingURL, tryGetTextOfPropertyName: () => tryGetTextOfPropertyName, - tryIOAndConsumeErrors: () => tryIOAndConsumeErrors, tryParseJson: () => tryParseJson, tryParsePattern: () => tryParsePattern, tryParsePatterns: () => tryParsePatterns, @@ -2322,7 +2222,6 @@ __export(typescript_exports, { unescapeLeadingUnderscores: () => unescapeLeadingUnderscores, unmangleScopedPackageName: () => unmangleScopedPackageName, unorderedRemoveItem: () => unorderedRemoveItem, - unorderedRemoveItemAt: () => unorderedRemoveItemAt, unreachableCodeIsError: () => unreachableCodeIsError, unsetNodeChildren: () => unsetNodeChildren, unusedLabelIsError: () => unusedLabelIsError, @@ -2335,11 +2234,9 @@ __export(typescript_exports, { updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, updateSourceFile: () => updateSourceFile, updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, - usesExtensionsOnImports: () => usesExtensionsOnImports, usingSingleLineStringWriter: () => usingSingleLineStringWriter, utf16EncodeAsString: () => utf16EncodeAsString, validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, - valuesHelper: () => valuesHelper, version: () => version, versionMajorMinor: () => versionMajorMinor, visitArray: () => visitArray, @@ -2352,7 +2249,6 @@ __export(typescript_exports, { visitNodes: () => visitNodes2, visitParameterList: () => visitParameterList, walkUpBindingElementsAndPatterns: () => walkUpBindingElementsAndPatterns, - walkUpLexicalEnvironments: () => walkUpLexicalEnvironments, walkUpOuterExpressions: () => walkUpOuterExpressions, walkUpParenthesizedExpressions: () => walkUpParenthesizedExpressions, walkUpParenthesizedTypes: () => walkUpParenthesizedTypes, @@ -2366,8 +2262,8 @@ __export(typescript_exports, { module.exports = __toCommonJS(typescript_exports); // src/compiler/corePublic.ts -var versionMajorMinor = "5.5"; -var version = "5.5.4"; +var versionMajorMinor = "5.6"; +var version = "5.6.2"; var Comparison = /* @__PURE__ */ ((Comparison3) => { Comparison3[Comparison3["LessThan"] = -1] = "LessThan"; Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo"; @@ -2378,12 +2274,11 @@ var Comparison = /* @__PURE__ */ ((Comparison3) => { // src/compiler/core.ts var emptyArray = []; var emptyMap = /* @__PURE__ */ new Map(); -var emptySet = /* @__PURE__ */ new Set(); function length(array) { - return array ? array.length : 0; + return array !== void 0 ? array.length : 0; } function forEach(array, callback) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const result = callback(array[i], i); if (result) { @@ -2394,7 +2289,7 @@ function forEach(array, callback) { return void 0; } function forEachRight(array, callback) { - if (array) { + if (array !== void 0) { for (let i = array.length - 1; i >= 0; i--) { const result = callback(array[i], i); if (result) { @@ -2450,13 +2345,13 @@ function intersperse(input, element) { } const result = []; for (let i = 0, n = input.length; i < n; i++) { - if (i) result.push(element); + if (i !== 0) result.push(element); result.push(input[i]); } return result; } function every(array, callback) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { if (!callback(array[i], i)) { return false; @@ -2503,30 +2398,18 @@ function findLastIndex(array, predicate, startIndex) { } return -1; } -function findMap(array, callback) { - for (let i = 0; i < array.length; i++) { - const result = callback(array[i], i); - if (result) { - return result; - } - } - return Debug.fail(); -} function contains(array, value, equalityComparer = equateValues) { - if (array) { - for (const v of array) { - if (equalityComparer(v, value)) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + if (equalityComparer(array[i], value)) { return true; } } } return false; } -function arraysEqual(a, b, equalityComparer = equateValues) { - return a.length === b.length && a.every((x, i) => equalityComparer(x, b[i])); -} function indexOfAnyCharCode(text, charCodes, start) { - for (let i = start || 0; i < text.length; i++) { + for (let i = start ?? 0; i < text.length; i++) { if (contains(charCodes, text.charCodeAt(i))) { return i; } @@ -2535,7 +2418,7 @@ function indexOfAnyCharCode(text, charCodes, start) { } function countWhere(array, predicate) { let count = 0; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = array[i]; if (predicate(v, i)) { @@ -2546,7 +2429,7 @@ function countWhere(array, predicate) { return count; } function filter(array, f) { - if (array) { + if (array !== void 0) { const len = array.length; let i = 0; while (i < len && f(array[i])) i++; @@ -2580,7 +2463,7 @@ function clear(array) { } function map(array, f) { let result; - if (array) { + if (array !== void 0) { result = []; for (let i = 0; i < array.length; i++) { result.push(f(array[i], i)); @@ -2594,7 +2477,7 @@ function* mapIterator(iter, mapFn) { } } function sameMap(array, f) { - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const item = array[i]; const mapped = f(item, i); @@ -2612,7 +2495,8 @@ function sameMap(array, f) { } function flatten(array) { const result = []; - for (const v of array) { + for (let i = 0; i < array.length; i++) { + const v = array[i]; if (v) { if (isArray(v)) { addRange(result, v); @@ -2625,7 +2509,7 @@ function flatten(array) { } function flatMap(array, mapfn) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = mapfn(array[i], i); if (v) { @@ -2637,11 +2521,11 @@ function flatMap(array, mapfn) { } } } - return result || emptyArray; + return result ?? emptyArray; } function flatMapToMutable(array, mapfn) { const result = []; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = mapfn(array[i], i); if (v) { @@ -2664,7 +2548,7 @@ function* flatMapIterator(iter, mapfn) { } function sameFlatMap(array, mapfn) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const item = array[i]; const mapped = mapfn(item, i); @@ -2680,7 +2564,7 @@ function sameFlatMap(array, mapfn) { } } } - return result || array; + return result ?? array; } function mapAllOrFail(array, mapFn) { const result = []; @@ -2695,7 +2579,7 @@ function mapAllOrFail(array, mapFn) { } function mapDefined(array, mapFn) { const result = []; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const mapped = mapFn(array[i], i); if (mapped !== void 0) { @@ -2713,22 +2597,6 @@ function* mapDefinedIterator(iter, mapFn) { } } } -function mapDefinedEntries(map2, f) { - if (!map2) { - return void 0; - } - const result = /* @__PURE__ */ new Map(); - map2.forEach((value, key) => { - const entry = f(key, value); - if (entry !== void 0) { - const [newKey, newValue] = entry; - if (newKey !== void 0 && newValue !== void 0) { - result.set(newKey, newValue); - } - } - }); - return result; -} function getOrUpdate(map2, key, callback) { if (map2.has(key)) { return map2.get(key); @@ -2749,7 +2617,7 @@ function* singleIterator(value) { } function spanMap(array, keyfn, mapfn) { let result; - if (array) { + if (array !== void 0) { result = []; const len = array.length; let previousKey; @@ -2781,7 +2649,7 @@ function spanMap(array, keyfn, mapfn) { return result; } function mapEntries(map2, f) { - if (!map2) { + if (map2 === void 0) { return void 0; } const result = /* @__PURE__ */ new Map(); @@ -2792,10 +2660,10 @@ function mapEntries(map2, f) { return result; } function some(array, predicate) { - if (array) { - if (predicate) { - for (const v of array) { - if (predicate(v)) { + if (array !== void 0) { + if (predicate !== void 0) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { return true; } } @@ -2820,8 +2688,8 @@ function getRangesWhere(arr, pred, cb) { if (start !== void 0) cb(start, arr.length); } function concatenate(array1, array2) { - if (!some(array2)) return array1; - if (!some(array1)) return array2; + if (array2 === void 0 || array2.length === 0) return array1; + if (array1 === void 0 || array1.length === 0) return array2; return [...array1, ...array2]; } function selectIndex(_, i) { @@ -2848,8 +2716,8 @@ function deduplicateRelational(array, equalityComparer, comparer) { } function deduplicateEquality(array, equalityComparer) { const result = []; - for (const item of array) { - pushIfUnique(result, item, equalityComparer); + for (let i = 0; i < array.length; i++) { + pushIfUnique(result, array[i], equalityComparer); } return result; } @@ -2903,19 +2771,10 @@ function insertSorted(array, insert, compare, equalityComparer, allowDuplicates) return false; } function sortAndDeduplicate(array, comparer, equalityComparer) { - return deduplicateSorted(sort(array, comparer), equalityComparer || comparer || compareStringsCaseSensitive); -} -function arrayIsSorted(array, comparer) { - if (array.length < 2) return true; - for (let i = 1, len = array.length; i < len; i++) { - if (comparer(array[i - 1], array[i]) === 1 /* GreaterThan */) { - return false; - } - } - return true; + return deduplicateSorted(toSorted(array, comparer), equalityComparer ?? comparer ?? compareStringsCaseSensitive); } function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) { - if (!array1 || !array2) { + if (array1 === void 0 || array2 === void 0) { return array1 === array2; } if (array1.length !== array2.length) { @@ -2930,20 +2789,18 @@ function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) { } function compact(array) { let result; - if (array) { + if (array !== void 0) { for (let i = 0; i < array.length; i++) { const v = array[i]; - if (result || !v) { - if (!result) { - result = array.slice(0, i); - } + if (result ?? !v) { + result ?? (result = array.slice(0, i)); if (v) { result.push(v); } } } } - return result || array; + return result ?? array; } function relativeComplement(arrayA, arrayB, comparer) { if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0) return arrayB; @@ -3008,7 +2865,7 @@ function pushIfUnique(array, toAdd, equalityComparer) { } } function appendIfUnique(array, toAdd, equalityComparer) { - if (array) { + if (array !== void 0) { pushIfUnique(array, toAdd, equalityComparer); return array; } else { @@ -3018,19 +2875,14 @@ function appendIfUnique(array, toAdd, equalityComparer) { function stableSortIndices(array, indices, comparer) { indices.sort((x, y) => comparer(array[x], array[y]) || compareValues(x, y)); } -function sort(array, comparer) { - return array.length === 0 ? array : array.slice().sort(comparer); +function toSorted(array, comparer) { + return array.length === 0 ? emptyArray : array.slice().sort(comparer); } function* arrayReverseIterator(array) { for (let i = array.length - 1; i >= 0; i--) { yield array[i]; } } -function stableSort(array, comparer) { - const indices = indicesOf(array); - stableSortIndices(array, indices, comparer); - return indices.map((i) => array[i]); -} function rangeEquals(array1, array2, pos, end) { while (pos < end) { if (array1[pos] !== array2[pos]) { @@ -3041,7 +2893,7 @@ function rangeEquals(array1, array2, pos, end) { return true; } var elementAt = !!Array.prototype.at ? (array, offset) => array == null ? void 0 : array.at(offset) : (array, offset) => { - if (array) { + if (array !== void 0) { offset = toOffset(array, offset); if (offset < array.length) { return array[offset]; @@ -3053,7 +2905,7 @@ function firstOrUndefined(array) { return array === void 0 || array.length === 0 ? void 0 : array[0]; } function firstOrUndefinedIterator(iter) { - if (iter) { + if (iter !== void 0) { for (const value of iter) { return value; } @@ -3078,13 +2930,13 @@ function last(array) { return array[array.length - 1]; } function singleOrUndefined(array) { - return array && array.length === 1 ? array[0] : void 0; + return array !== void 0 && array.length === 1 ? array[0] : void 0; } function single(array) { return Debug.checkDefined(singleOrUndefined(array)); } function singleOrMany(array) { - return array && array.length === 1 ? array[0] : array; + return array !== void 0 && array.length === 1 ? array[0] : array; } function replaceElement(array, index, value) { const result = array.slice(0); @@ -3098,7 +2950,7 @@ function binarySearchKey(array, key, keySelector, keyComparer, offset) { if (!some(array)) { return -1; } - let low = offset || 0; + let low = offset ?? 0; let high = array.length - 1; while (low <= high) { const middle = low + (high - low >> 1); @@ -3216,7 +3068,8 @@ function equalOwnProperties(left, right, equalityComparer = equateValues) { } function arrayToMap(array, makeKey, makeValue = identity) { const result = /* @__PURE__ */ new Map(); - for (const value of array) { + for (let i = 0; i < array.length; i++) { + const value = array[i]; const key = makeKey(value); if (key !== void 0) result.set(key, makeValue(value)); } @@ -3224,14 +3077,16 @@ function arrayToMap(array, makeKey, makeValue = identity) { } function arrayToNumericMap(array, makeKey, makeValue = identity) { const result = []; - for (const value of array) { + for (let i = 0; i < array.length; i++) { + const value = array[i]; result[makeKey(value)] = makeValue(value); } return result; } function arrayToMultiMap(values, makeKey, makeValue = identity) { const result = createMultiMap(); - for (const value of values) { + for (let i = 0; i < values.length; i++) { + const value = values[i]; result.add(makeKey(value), makeValue(value)); } return result; @@ -3241,8 +3096,9 @@ function group(values, getGroupId, resultSelector = identity) { } function groupBy(values, keySelector) { const result = {}; - if (values) { - for (const value of values) { + if (values !== void 0) { + for (let i = 0; i < values.length; i++) { + const value = values[i]; const key = `${keySelector(value)}`; const array = result[key] ?? (result[key] = []); array.push(value); @@ -3281,7 +3137,7 @@ function copyProperties(first2, second) { } } function maybeBind(obj, fn) { - return fn ? fn.bind(obj) : void 0; + return fn == null ? void 0 : fn.bind(obj); } function createMultiMap() { const map2 = /* @__PURE__ */ new Map(); @@ -3291,7 +3147,7 @@ function createMultiMap() { } function multiMapAdd(key, value) { let values = this.get(key); - if (values) { + if (values !== void 0) { values.push(value); } else { this.set(key, values = [value]); @@ -3300,7 +3156,7 @@ function multiMapAdd(key, value) { } function multiMapRemove(key, value) { const values = this.get(key); - if (values) { + if (values !== void 0) { unorderedRemoveItem(values, value); if (!values.length) { this.delete(key); @@ -3308,7 +3164,7 @@ function multiMapRemove(key, value) { } } function createQueue(items) { - const elements = (items == null ? void 0 : items.slice()) || []; + const elements = (items == null ? void 0 : items.slice()) ?? []; let headIndex = 0; function isEmpty() { return headIndex === elements.length; @@ -3359,13 +3215,8 @@ function createSet(getHashCode, equals) { const hash = getHashCode(element); if (!multiMap.has(hash)) return false; const candidates = multiMap.get(hash); - if (!isArray(candidates)) return equals(candidates, element); - for (const candidate of candidates) { - if (equals(candidate, element)) { - return true; - } - } - return false; + if (isArray(candidates)) return contains(candidates, element, equals); + return equals(candidates, element); }, add(element) { const hash = getHashCode(element); @@ -3519,46 +3370,6 @@ function memoizeOne(callback) { return value; }; } -function memoizeWeak(callback) { - const map2 = /* @__PURE__ */ new WeakMap(); - return (arg) => { - let value = map2.get(arg); - if (value === void 0 && !map2.has(arg)) { - value = callback(arg); - map2.set(arg, value); - } - return value; - }; -} -function memoizeCached(callback, cache) { - return (...args) => { - let value = cache.get(args); - if (value === void 0 && !cache.has(args)) { - value = callback(...args); - cache.set(args, value); - } - return value; - }; -} -function compose(a, b, c, d, e) { - if (!!e) { - const args = []; - for (let i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - return (t) => reduceLeft(args, (u, f) => f(u), t); - } else if (d) { - return (t) => d(c(b(a(t)))); - } else if (c) { - return (t) => c(b(a(t))); - } else if (b) { - return (t) => b(a(t)); - } else if (a) { - return (t) => a(t); - } else { - return (t) => t; - } -} var AssertionLevel = /* @__PURE__ */ ((AssertionLevel2) => { AssertionLevel2[AssertionLevel2["None"] = 0] = "None"; AssertionLevel2[AssertionLevel2["Normal"] = 1] = "Normal"; @@ -3584,6 +3395,12 @@ function compareValues(a, b) { function compareTextSpans(a, b) { return compareValues(a == null ? void 0 : a.start, b == null ? void 0 : b.start) || compareValues(a == null ? void 0 : a.length, b == null ? void 0 : b.length); } +function maxBy(arr, init, mapper) { + for (let i = 0; i < arr.length; i++) { + init = Math.max(init, mapper(arr[i])); + } + return init; +} function min(items, compare) { return reduceLeft(items, (x, y) => compare(x, y) === -1 /* LessThan */ ? x : y); } @@ -3635,8 +3452,8 @@ function setUILocale(value) { } } function compareStringsCaseSensitiveUI(a, b) { - const comparer = uiComparerCaseSensitive || (uiComparerCaseSensitive = createUIStringComparer(uiLocale)); - return comparer(a, b); + uiComparerCaseSensitive ?? (uiComparerCaseSensitive = createUIStringComparer(uiLocale)); + return uiComparerCaseSensitive(a, b); } function compareProperties(a, b, key, comparer) { return a === b ? 0 /* EqualTo */ : a === void 0 ? -1 /* LessThan */ : b === void 0 ? 1 /* GreaterThan */ : comparer(a[key], b[key]); @@ -3796,7 +3613,8 @@ function matchedText(pattern, candidate) { function findBestPatternMatch(values, getPattern, candidate) { let matchedValue; let longestMatchPrefixLength = -1; - for (const v of values) { + for (let i = 0; i < values.length; i++) { + const v = values[i]; const pattern = getPattern(v); if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) { longestMatchPrefixLength = pattern.prefix.length; @@ -3841,7 +3659,7 @@ function singleElementArray(t) { return t === void 0 ? void 0 : [t]; } function enumerateInsertsAndDeletes(newItems, oldItems, comparer, inserted, deleted, unchanged) { - unchanged = unchanged || noop; + unchanged ?? (unchanged = noop); let newIndex = 0; let oldIndex = 0; const newLen = newItems.length; @@ -3903,7 +3721,7 @@ function cartesianProductWorker(arrays, result, outer, index) { } } function takeWhile(array, predicate) { - if (array) { + if (array !== void 0) { const len = array.length; let index = 0; while (index < len && predicate(array[index])) { @@ -3913,7 +3731,7 @@ function takeWhile(array, predicate) { } } function skipWhile(array, predicate) { - if (array) { + if (array !== void 0) { const len = array.length; let index = 0; while (index < len && predicate(array[index])) { @@ -4209,7 +4027,7 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, result.push([value, name]); } } - const sorted = stableSort(result, (x, y) => compareValues(x[0], y[0])); + const sorted = toSorted(result, (x, y) => compareValues(x[0], y[0])); enumMemberCache.set(enumObject, sorted); return sorted; } @@ -4418,7 +4236,7 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, Object.defineProperties(array, { __tsDebuggerDisplay: { value(defaultValue) { - defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]"); + defaultValue = String(defaultValue).replace(/(?:,[\s\w]+:[^,]+)+\]$/, "]"); return `NodeArray ${defaultValue}`; } } @@ -4838,7 +4656,7 @@ m2: ${this.mapper2.__debugToString().split("\n").join("\n ")}`; } function renderGraph() { const columnCount = columnWidths.length; - const laneCount = nodes.reduce((x, n) => Math.max(x, n.lane), 0) + 1; + const laneCount = maxBy(nodes, 0, (n) => n.lane) + 1; const lanes = fill(Array(laneCount), ""); const grid = columnWidths.map(() => Array(laneCount)); const connectors = columnWidths.map(() => fill(Array(laneCount), 0)); @@ -4961,7 +4779,7 @@ var prereleaseRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)(?:\.(?:0|[1-9]\d*|[a-z- var prereleasePartRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)$/i; var buildRegExp = /^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/i; var buildPartRegExp = /^[a-z0-9-]+$/i; -var numericIdentifierRegExp = /^(0|[1-9]\d*)$/; +var numericIdentifierRegExp = /^(?:0|[1-9]\d*)$/; var _Version = class _Version { constructor(major, minor = 0, patch = 0, prerelease = "", build2 = "") { if (typeof major === "string") { @@ -5084,11 +4902,11 @@ var VersionRange = class _VersionRange { return formatDisjunction(this._alternatives); } }; -var logicalOrRegExp = /\|\|/g; -var whitespaceRegExp = /\s+/g; -var partialRegExp = /^([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; +var logicalOrRegExp = /\|\|/; +var whitespaceRegExp = /\s+/; +var partialRegExp = /^([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; var hyphenRegExp = /^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i; -var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i; +var rangeRegExp = /^([~^<>=]|<=|>=)?\s*([a-z0-9-+.*]+)$/i; function parseRange(text) { const alternatives = []; for (let range of text.trim().split(logicalOrRegExp)) { @@ -5281,16 +5099,6 @@ function tryGetNativePerformanceHooks() { } var timestamp = nativePerformanceTime ? () => nativePerformanceTime.now() : Date.now; -// src/compiler/perfLogger.ts -var etwModule; -try { - const etwModulePath = process.env.TS_ETW_MODULE_PATH ?? "./node_modules/@microsoft/typescript-etw"; - etwModule = require(etwModulePath); -} catch (e) { - etwModule = void 0; -} -var perfLogger = (etwModule == null ? void 0 : etwModule.logEvent) ? etwModule : void 0; - // src/compiler/_namespaces/ts.performance.ts var ts_performance_exports = {}; __export(ts_performance_exports, { @@ -6179,12 +5987,21 @@ var RelationComparisonResult = /* @__PURE__ */ ((RelationComparisonResult3) => { RelationComparisonResult3[RelationComparisonResult3["None"] = 0] = "None"; RelationComparisonResult3[RelationComparisonResult3["Succeeded"] = 1] = "Succeeded"; RelationComparisonResult3[RelationComparisonResult3["Failed"] = 2] = "Failed"; - RelationComparisonResult3[RelationComparisonResult3["Reported"] = 4] = "Reported"; RelationComparisonResult3[RelationComparisonResult3["ReportsUnmeasurable"] = 8] = "ReportsUnmeasurable"; RelationComparisonResult3[RelationComparisonResult3["ReportsUnreliable"] = 16] = "ReportsUnreliable"; RelationComparisonResult3[RelationComparisonResult3["ReportsMask"] = 24] = "ReportsMask"; + RelationComparisonResult3[RelationComparisonResult3["ComplexityOverflow"] = 32] = "ComplexityOverflow"; + RelationComparisonResult3[RelationComparisonResult3["StackDepthOverflow"] = 64] = "StackDepthOverflow"; + RelationComparisonResult3[RelationComparisonResult3["Overflow"] = 96] = "Overflow"; return RelationComparisonResult3; })(RelationComparisonResult || {}); +var PredicateSemantics = /* @__PURE__ */ ((PredicateSemantics2) => { + PredicateSemantics2[PredicateSemantics2["None"] = 0] = "None"; + PredicateSemantics2[PredicateSemantics2["Always"] = 1] = "Always"; + PredicateSemantics2[PredicateSemantics2["Never"] = 2] = "Never"; + PredicateSemantics2[PredicateSemantics2["Sometimes"] = 3] = "Sometimes"; + return PredicateSemantics2; +})(PredicateSemantics || {}); var GeneratedIdentifierFlags = /* @__PURE__ */ ((GeneratedIdentifierFlags2) => { GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["None"] = 0] = "None"; GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Auto"] = 1] = "Auto"; @@ -6229,6 +6046,7 @@ var TokenFlags = /* @__PURE__ */ ((TokenFlags2) => { TokenFlags2[TokenFlags2["HexEscape"] = 4096] = "HexEscape"; TokenFlags2[TokenFlags2["ContainsLeadingZero"] = 8192] = "ContainsLeadingZero"; TokenFlags2[TokenFlags2["ContainsInvalidSeparator"] = 16384] = "ContainsInvalidSeparator"; + TokenFlags2[TokenFlags2["PrecedingJSDocLeadingAsterisks"] = 32768] = "PrecedingJSDocLeadingAsterisks"; TokenFlags2[TokenFlags2["BinaryOrOctalSpecifier"] = 384] = "BinaryOrOctalSpecifier"; TokenFlags2[TokenFlags2["WithSpecifier"] = 448] = "WithSpecifier"; TokenFlags2[TokenFlags2["StringLiteralFlags"] = 7176] = "StringLiteralFlags"; @@ -6353,17 +6171,21 @@ var NodeBuilderFlags = /* @__PURE__ */ ((NodeBuilderFlags2) => { NodeBuilderFlags2[NodeBuilderFlags2["AllowEmptyTuple"] = 524288] = "AllowEmptyTuple"; NodeBuilderFlags2[NodeBuilderFlags2["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; NodeBuilderFlags2[NodeBuilderFlags2["AllowEmptyIndexInfoType"] = 2097152] = "AllowEmptyIndexInfoType"; - NodeBuilderFlags2[NodeBuilderFlags2["WriteComputedProps"] = 1073741824] = "WriteComputedProps"; - NodeBuilderFlags2[NodeBuilderFlags2["NoSyntacticPrinter"] = -2147483648] = "NoSyntacticPrinter"; NodeBuilderFlags2[NodeBuilderFlags2["AllowNodeModulesRelativePaths"] = 67108864] = "AllowNodeModulesRelativePaths"; - NodeBuilderFlags2[NodeBuilderFlags2["DoNotIncludeSymbolChain"] = 134217728] = "DoNotIncludeSymbolChain"; - NodeBuilderFlags2[NodeBuilderFlags2["AllowUnresolvedNames"] = 1] = "AllowUnresolvedNames"; NodeBuilderFlags2[NodeBuilderFlags2["IgnoreErrors"] = 70221824] = "IgnoreErrors"; NodeBuilderFlags2[NodeBuilderFlags2["InObjectTypeLiteral"] = 4194304] = "InObjectTypeLiteral"; NodeBuilderFlags2[NodeBuilderFlags2["InTypeAlias"] = 8388608] = "InTypeAlias"; NodeBuilderFlags2[NodeBuilderFlags2["InInitialEntityName"] = 16777216] = "InInitialEntityName"; return NodeBuilderFlags2; })(NodeBuilderFlags || {}); +var InternalNodeBuilderFlags = /* @__PURE__ */ ((InternalNodeBuilderFlags2) => { + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["None"] = 0] = "None"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["WriteComputedProps"] = 1] = "WriteComputedProps"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["NoSyntacticPrinter"] = 2] = "NoSyntacticPrinter"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["DoNotIncludeSymbolChain"] = 4] = "DoNotIncludeSymbolChain"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["AllowUnresolvedNames"] = 8] = "AllowUnresolvedNames"; + return InternalNodeBuilderFlags2; +})(InternalNodeBuilderFlags || {}); var TypeFormatFlags = /* @__PURE__ */ ((TypeFormatFlags2) => { TypeFormatFlags2[TypeFormatFlags2["None"] = 0] = "None"; TypeFormatFlags2[TypeFormatFlags2["NoTruncation"] = 1] = "NoTruncation"; @@ -6408,11 +6230,6 @@ var SymbolAccessibility = /* @__PURE__ */ ((SymbolAccessibility2) => { SymbolAccessibility2[SymbolAccessibility2["NotResolved"] = 3] = "NotResolved"; return SymbolAccessibility2; })(SymbolAccessibility || {}); -var SyntheticSymbolKind = /* @__PURE__ */ ((SyntheticSymbolKind2) => { - SyntheticSymbolKind2[SyntheticSymbolKind2["UnionOrIntersection"] = 0] = "UnionOrIntersection"; - SyntheticSymbolKind2[SyntheticSymbolKind2["Spread"] = 1] = "Spread"; - return SyntheticSymbolKind2; -})(SyntheticSymbolKind || {}); var TypePredicateKind = /* @__PURE__ */ ((TypePredicateKind2) => { TypePredicateKind2[TypePredicateKind2["This"] = 0] = "This"; TypePredicateKind2[TypePredicateKind2["Identifier"] = 1] = "Identifier"; @@ -6578,6 +6395,7 @@ var NodeCheckFlags = /* @__PURE__ */ ((NodeCheckFlags3) => { NodeCheckFlags3[NodeCheckFlags3["ContainsClassWithPrivateIdentifiers"] = 1048576] = "ContainsClassWithPrivateIdentifiers"; NodeCheckFlags3[NodeCheckFlags3["ContainsSuperPropertyInStaticInitializer"] = 2097152] = "ContainsSuperPropertyInStaticInitializer"; NodeCheckFlags3[NodeCheckFlags3["InCheckIdentifier"] = 4194304] = "InCheckIdentifier"; + NodeCheckFlags3[NodeCheckFlags3["PartiallyTypeChecked"] = 8388608] = "PartiallyTypeChecked"; NodeCheckFlags3[NodeCheckFlags3["LazyFlags"] = 539358128] = "LazyFlags"; return NodeCheckFlags3; })(NodeCheckFlags || {}); @@ -6731,7 +6549,7 @@ var AccessFlags = /* @__PURE__ */ ((AccessFlags2) => { AccessFlags2[AccessFlags2["NoIndexSignatures"] = 2] = "NoIndexSignatures"; AccessFlags2[AccessFlags2["Writing"] = 4] = "Writing"; AccessFlags2[AccessFlags2["CacheSymbol"] = 8] = "CacheSymbol"; - AccessFlags2[AccessFlags2["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck"; + AccessFlags2[AccessFlags2["AllowMissing"] = 16] = "AllowMissing"; AccessFlags2[AccessFlags2["ExpressionPosition"] = 32] = "ExpressionPosition"; AccessFlags2[AccessFlags2["ReportDeprecated"] = 64] = "ReportDeprecated"; AccessFlags2[AccessFlags2["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError"; @@ -6925,22 +6743,22 @@ var ScriptKind = /* @__PURE__ */ ((ScriptKind7) => { ScriptKind7[ScriptKind7["Deferred"] = 7] = "Deferred"; return ScriptKind7; })(ScriptKind || {}); -var ScriptTarget = /* @__PURE__ */ ((ScriptTarget11) => { - ScriptTarget11[ScriptTarget11["ES3"] = 0] = "ES3"; - ScriptTarget11[ScriptTarget11["ES5"] = 1] = "ES5"; - ScriptTarget11[ScriptTarget11["ES2015"] = 2] = "ES2015"; - ScriptTarget11[ScriptTarget11["ES2016"] = 3] = "ES2016"; - ScriptTarget11[ScriptTarget11["ES2017"] = 4] = "ES2017"; - ScriptTarget11[ScriptTarget11["ES2018"] = 5] = "ES2018"; - ScriptTarget11[ScriptTarget11["ES2019"] = 6] = "ES2019"; - ScriptTarget11[ScriptTarget11["ES2020"] = 7] = "ES2020"; - ScriptTarget11[ScriptTarget11["ES2021"] = 8] = "ES2021"; - ScriptTarget11[ScriptTarget11["ES2022"] = 9] = "ES2022"; - ScriptTarget11[ScriptTarget11["ES2023"] = 10] = "ES2023"; - ScriptTarget11[ScriptTarget11["ESNext"] = 99] = "ESNext"; - ScriptTarget11[ScriptTarget11["JSON"] = 100] = "JSON"; - ScriptTarget11[ScriptTarget11["Latest"] = 99 /* ESNext */] = "Latest"; - return ScriptTarget11; +var ScriptTarget = /* @__PURE__ */ ((ScriptTarget12) => { + ScriptTarget12[ScriptTarget12["ES3"] = 0] = "ES3"; + ScriptTarget12[ScriptTarget12["ES5"] = 1] = "ES5"; + ScriptTarget12[ScriptTarget12["ES2015"] = 2] = "ES2015"; + ScriptTarget12[ScriptTarget12["ES2016"] = 3] = "ES2016"; + ScriptTarget12[ScriptTarget12["ES2017"] = 4] = "ES2017"; + ScriptTarget12[ScriptTarget12["ES2018"] = 5] = "ES2018"; + ScriptTarget12[ScriptTarget12["ES2019"] = 6] = "ES2019"; + ScriptTarget12[ScriptTarget12["ES2020"] = 7] = "ES2020"; + ScriptTarget12[ScriptTarget12["ES2021"] = 8] = "ES2021"; + ScriptTarget12[ScriptTarget12["ES2022"] = 9] = "ES2022"; + ScriptTarget12[ScriptTarget12["ES2023"] = 10] = "ES2023"; + ScriptTarget12[ScriptTarget12["ESNext"] = 99] = "ESNext"; + ScriptTarget12[ScriptTarget12["JSON"] = 100] = "JSON"; + ScriptTarget12[ScriptTarget12["Latest"] = 99 /* ESNext */] = "Latest"; + return ScriptTarget12; })(ScriptTarget || {}); var LanguageVariant = /* @__PURE__ */ ((LanguageVariant4) => { LanguageVariant4[LanguageVariant4["Standard"] = 0] = "Standard"; @@ -7302,9 +7120,10 @@ var OuterExpressionKinds = /* @__PURE__ */ ((OuterExpressionKinds2) => { OuterExpressionKinds2[OuterExpressionKinds2["TypeAssertions"] = 2] = "TypeAssertions"; OuterExpressionKinds2[OuterExpressionKinds2["NonNullAssertions"] = 4] = "NonNullAssertions"; OuterExpressionKinds2[OuterExpressionKinds2["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions"; + OuterExpressionKinds2[OuterExpressionKinds2["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments"; OuterExpressionKinds2[OuterExpressionKinds2["Assertions"] = 6] = "Assertions"; - OuterExpressionKinds2[OuterExpressionKinds2["All"] = 15] = "All"; - OuterExpressionKinds2[OuterExpressionKinds2["ExcludeJSDocTypeAssertion"] = 16] = "ExcludeJSDocTypeAssertion"; + OuterExpressionKinds2[OuterExpressionKinds2["All"] = 31] = "All"; + OuterExpressionKinds2[OuterExpressionKinds2["ExcludeJSDocTypeAssertion"] = -2147483648] = "ExcludeJSDocTypeAssertion"; return OuterExpressionKinds2; })(OuterExpressionKinds || {}); var LexicalEnvironmentFlags = /* @__PURE__ */ ((LexicalEnvironmentFlags2) => { @@ -8410,7 +8229,7 @@ function patchWriteFileEnsuringDirectory(sys2) { var sys = (() => { const byteOrderMarkIndicator = "\uFEFF"; function getNodeSystem() { - const nativePattern = /^native |^\([^)]+\)$|^(internal[\\/]|[a-zA-Z0-9_\s]+(\.js)?$)/; + const nativePattern = /^native |^\([^)]+\)$|^(?:internal[\\/]|[\w\s]+(?:\.js)?$)/; const _fs = require("fs"); const _path = require("path"); const _os = require("os"); @@ -8468,6 +8287,7 @@ var sys = (() => { writeFile: writeFile2, watchFile: watchFile2, watchDirectory, + preferNonRecursiveWatch: !fsSupportsRecursiveFsWatch, resolvePath: (path) => _path.resolve(path), fileExists, directoryExists, @@ -8520,7 +8340,7 @@ var sys = (() => { disableCPUProfiler, cpuProfilingEnabled: () => !!activeSession || contains(process.execArgv, "--cpu-prof") || contains(process.execArgv, "--prof"), realpath, - debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || some(process.execArgv, (arg) => /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(arg)) || !!process.recordreplay, + debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || some(process.execArgv, (arg) => /^--(?:inspect|debug)(?:-brk)?(?:=\d+)?$/i.test(arg)) || !!process.recordreplay, tryEnableSourceMapsForHost() { try { require("source-map-support").install(); @@ -8530,7 +8350,7 @@ var sys = (() => { setTimeout, clearTimeout, clearScreen: () => { - process.stdout.write("\x1Bc"); + process.stdout.write("\x1B[2J\x1B[3J\x1B[H"); }, setBlocking: () => { var _a; @@ -8671,11 +8491,11 @@ var sys = (() => { callback ); } - function readFileWorker(fileName, _encoding) { + function readFile(fileName, _encoding) { let buffer; try { buffer = _fs.readFileSync(fileName); - } catch (e) { + } catch { return void 0; } let len = buffer.length; @@ -8696,16 +8516,7 @@ var sys = (() => { } return buffer.toString("utf8"); } - function readFile(fileName, _encoding) { - var _a, _b; - (_a = perfLogger) == null ? void 0 : _a.logStartReadFile(fileName); - const file = readFileWorker(fileName, _encoding); - (_b = perfLogger) == null ? void 0 : _b.logStopReadFile(); - return file; - } function writeFile2(fileName, data, writeByteOrderMark) { - var _a; - (_a = perfLogger) == null ? void 0 : _a.logEvent("WriteFile: " + fileName); if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } @@ -8726,8 +8537,6 @@ var sys = (() => { } } function getAccessibleFileSystemEntries(path) { - var _a; - (_a = perfLogger) == null ? void 0 : _a.logEvent("ReadDir: " + (path || ".")); try { const entries = _fs.readdirSync(path || ".", { withFileTypes: true }); const files = []; @@ -8745,7 +8554,7 @@ var sys = (() => { if (!stat) { continue; } - } catch (e) { + } catch { continue; } } else { @@ -8760,7 +8569,7 @@ var sys = (() => { files.sort(); directories.sort(); return { files, directories }; - } catch (e) { + } catch { return emptyFileSystemEntries; } } @@ -8783,7 +8592,7 @@ var sys = (() => { default: return false; } - } catch (e) { + } catch { return false; } finally { Error.stackTraceLimit = originalStackTraceLimit; @@ -8814,7 +8623,7 @@ var sys = (() => { Error.stackTraceLimit = 0; try { return (_a = statSync(path)) == null ? void 0 : _a.mtime; - } catch (e) { + } catch { return void 0; } finally { Error.stackTraceLimit = originalStackTraceLimit; @@ -8823,14 +8632,14 @@ var sys = (() => { function setModifiedTime(path, time) { try { _fs.utimesSync(path, time, time); - } catch (e) { + } catch { return; } } function deleteFile(path) { try { return _fs.unlinkSync(path); - } catch (e) { + } catch { return; } } @@ -8884,7 +8693,7 @@ function pathIsAbsolute(path) { return getEncodedRootLength(path) !== 0; } function pathIsRelative(path) { - return /^\.\.?($|[\\/])/.test(path); + return /^\.\.?(?:$|[\\/])/.test(path); } function pathIsBareSpecifier(path) { return !pathIsAbsolute(path) && !pathIsRelative(path); @@ -9117,7 +8926,7 @@ function changeFullExtension(path, newExtension) { } return changeAnyExtension(path, newExtension); } -var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/; +var relativePathSegmentRegExp = /\/\/|(?:^|\/)\.\.?(?:$|\/)/; function comparePathsWorker(a, b, componentComparer) { if (a === b) return 0 /* EqualTo */; if (a === void 0) return -1 /* LessThan */; @@ -9505,6 +9314,7 @@ var Diagnostics = { _0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1290, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290", "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported: diag(1291, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported."), _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1292, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), + ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve: diag(1293, 1 /* Error */, "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293", "ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'."), with_statements_are_not_allowed_in_an_async_function_block: diag(1300, 1 /* Error */, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."), await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, 1 /* Error */, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."), The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level: diag(1309, 1 /* Error */, "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309", "The current file is a CommonJS module and cannot use 'await' at the top level."), @@ -9520,7 +9330,7 @@ var Diagnostics = { Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, 1 /* Error */, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."), Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, 1 /* Error */, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."), Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext: diag(1323, 1 /* Error */, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'."), - Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', or 'nodenext'."), + Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'nodenext', or 'preserve'."), Argument_of_dynamic_import_cannot_be_spread_element: diag(1325, 1 /* Error */, "Argument_of_dynamic_import_cannot_be_spread_element_1325", "Argument of dynamic import cannot be spread element."), This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments: diag(1326, 1 /* Error */, "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326", "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments."), String_literal_with_double_quotes_expected: diag(1327, 1 /* Error */, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."), @@ -9713,6 +9523,20 @@ var Diagnostics = { This_character_cannot_be_escaped_in_a_regular_expression: diag(1535, 1 /* Error */, "This_character_cannot_be_escaped_in_a_regular_expression_1535", "This character cannot be escaped in a regular expression."), Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended_as_an_escape_sequence_use_the_syntax_0_instead: diag(1536, 1 /* Error */, "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536", "Octal escape sequences and backreferences are not allowed in a character class. If this was intended as an escape sequence, use the syntax '{0}' instead."), Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class: diag(1537, 1 /* Error */, "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537", "Decimal escape sequences and backreferences are not allowed in a character class."), + Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1538, 1 /* Error */, "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538", "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."), + A_bigint_literal_cannot_be_used_as_a_property_name: diag(1539, 1 /* Error */, "A_bigint_literal_cannot_be_used_as_a_property_name_1539", "A 'bigint' literal cannot be used as a property name."), + A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead: diag( + 1540, + 2 /* Suggestion */, + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540", + "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + void 0, + /*reportsDeprecated*/ + true + ), The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."), The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."), Call_signature_return_types_0_and_1_are_incompatible: diag( @@ -9967,7 +9791,6 @@ var Diagnostics = { The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_standard_function_or_method: diag(2522, 1 /* Error */, "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522", "The 'arguments' object cannot be referenced in an async function or method in ES5. Consider using a standard function or method."), yield_expressions_cannot_be_used_in_a_parameter_initializer: diag(2523, 1 /* Error */, "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", "'yield' expressions cannot be used in a parameter initializer."), await_expressions_cannot_be_used_in_a_parameter_initializer: diag(2524, 1 /* Error */, "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", "'await' expressions cannot be used in a parameter initializer."), - Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: diag(2525, 1 /* Error */, "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", "Initializer provides no value for this binding element and the binding element has no default value."), A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: diag(2526, 1 /* Error */, "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", "A 'this' type is available only in a non-static member of a class or interface."), The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary: diag(2527, 1 /* Error */, "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527", "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary."), A_module_cannot_have_multiple_default_exports: diag(2528, 1 /* Error */, "A_module_cannot_have_multiple_default_exports_2528", "A module cannot have multiple default exports."), @@ -10280,6 +10103,11 @@ var Diagnostics = { Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled: diag(2866, 1 /* Error */, "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866", "Import '{0}' conflicts with global value used in this file, so must be declared with a type-only import when 'isolatedModules' is enabled."), Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun: diag(2867, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun`."), Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig: diag(2868, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun` and then add 'bun' to the types field in your tsconfig."), + Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish: diag(2869, 1 /* Error */, "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869", "Right operand of ?? is unreachable because the left operand is never nullish."), + This_binary_expression_is_never_nullish_Are_you_missing_parentheses: diag(2870, 1 /* Error */, "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870", "This binary expression is never nullish. Are you missing parentheses?"), + This_expression_is_always_nullish: diag(2871, 1 /* Error */, "This_expression_is_always_nullish_2871", "This expression is always nullish."), + This_kind_of_expression_is_always_truthy: diag(2872, 1 /* Error */, "This_kind_of_expression_is_always_truthy_2872", "This kind of expression is always truthy."), + This_kind_of_expression_is_always_falsy: diag(2873, 1 /* Error */, "This_kind_of_expression_is_always_falsy_2873", "This kind of expression is always falsy."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -10356,7 +10184,7 @@ var Diagnostics = { Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1: diag(4085, 1 /* Error */, "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085", "Extends clause for inferred type '{0}' has or is using private name '{1}'."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4091, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091", "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4092, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092", "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."), - Property_0_of_exported_class_expression_may_not_be_private_or_protected: diag(4094, 1 /* Error */, "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094", "Property '{0}' of exported class expression may not be private or protected."), + Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected: diag(4094, 1 /* Error */, "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", "Property '{0}' of exported anonymous class type may not be private or protected."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4095, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095", "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4096, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096", "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_static_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4097, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097", "Public static method '{0}' of exported class has or is using private name '{1}'."), @@ -10393,7 +10221,6 @@ var Diagnostics = { Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, 1 /* Error */, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, 1 /* Error */, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), Cannot_read_file_0_Colon_1: diag(5012, 1 /* Error */, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."), - Failed_to_parse_file_0_Colon_1: diag(5014, 1 /* Error */, "Failed_to_parse_file_0_Colon_1_5014", "Failed to parse file '{0}': {1}."), Unknown_compiler_option_0: diag(5023, 1 /* Error */, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."), Compiler_option_0_requires_a_value_of_type_1: diag(5024, 1 /* Error */, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."), Unknown_compiler_option_0_Did_you_mean_1: diag(5025, 1 /* Error */, "Unknown_compiler_option_0_Did_you_mean_1_5025", "Unknown compiler option '{0}'. Did you mean '{1}'?"), @@ -10456,6 +10283,7 @@ var Diagnostics = { Option_0_1_has_been_removed_Please_remove_it_from_your_configuration: diag(5108, 1 /* Error */, "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108", "Option '{0}={1}' has been removed. Please remove it from your configuration."), Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1: diag(5109, 1 /* Error */, "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109", "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'."), Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1: diag(5110, 1 /* Error */, "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110", "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'."), + Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if_not_running_tsc_b: diag(5111, 1 /* Error */, "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111", "Option 'tsBuildInfoFile' cannot be specified without specifying option 'incremental' or 'composite' or if not running 'tsc -b'."), Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6e3, 3 /* Message */, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."), Concatenate_and_emit_output_to_single_file: diag(6001, 3 /* Message */, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."), Generates_corresponding_d_ts_file: diag(6002, 3 /* Message */, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."), @@ -10594,7 +10422,6 @@ var Diagnostics = { Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: diag(6141, 3 /* Message */, "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", 'Parse in strict mode and emit "use strict" for each source file.'), Module_0_was_resolved_to_1_but_jsx_is_not_set: diag(6142, 1 /* Error */, "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142", "Module '{0}' was resolved to '{1}', but '--jsx' is not set."), Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1: diag(6144, 3 /* Message */, "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144", "Module '{0}' was resolved as locally declared ambient module in file '{1}'."), - Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified: diag(6145, 3 /* Message */, "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145", "Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified."), Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h: diag(6146, 3 /* Message */, "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146", "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."), Resolution_for_module_0_was_found_in_cache_from_location_1: diag(6147, 3 /* Message */, "Resolution_for_module_0_was_found_in_cache_from_location_1_6147", "Resolution for module '{0}' was found in cache from location '{1}'."), Directory_0_does_not_exist_skipping_all_lookups_in_it: diag(6148, 3 /* Message */, "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148", "Directory '{0}' does not exist, skipping all lookups in it."), @@ -10836,6 +10663,8 @@ var Diagnostics = { Exiting_conditional_exports: diag(6416, 3 /* Message */, "Exiting_conditional_exports_6416", "Exiting conditional exports."), Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0: diag(6417, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417", "Searching all ancestor node_modules directories for preferred extensions: {0}."), Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0: diag(6418, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418", "Searching all ancestor node_modules directories for fallback extensions: {0}."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors: diag(6419, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419", "Project '{0}' is out of date because buildinfo file '{1}' indicates that program needs to report errors."), + Project_0_is_out_of_date_because_1: diag(6420, 3 /* Message */, "Project_0_is_out_of_date_because_1_6420", "Project '{0}' is out of date because {1}."), The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, 3 /* Message */, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"), The_expected_type_comes_from_this_index_signature: diag(6501, 3 /* Message */, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."), The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, 3 /* Message */, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."), @@ -10882,6 +10711,7 @@ var Diagnostics = { Ensure_that_casing_is_correct_in_imports: diag(6637, 3 /* Message */, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."), Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, 3 /* Message */, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."), Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, 3 /* Message */, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."), + Skip_building_downstream_projects_on_error_in_upstream_project: diag(6640, 3 /* Message */, "Skip_building_downstream_projects_on_error_in_upstream_project_6640", "Skip building downstream projects on error in upstream project."), Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, 3 /* Message */, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."), Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, 3 /* Message */, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."), Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, 3 /* Message */, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."), @@ -10958,9 +10788,12 @@ var Diagnostics = { Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, 3 /* Message */, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."), Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, 3 /* Message */, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types."), Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files: diag(6719, 3 /* Message */, "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719", "Require sufficient annotation on exports so other tools can trivially generate declaration files."), + Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any: diag(6720, 3 /* Message */, "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720", "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), Default_catch_clause_variables_as_unknown_instead_of_any: diag(6803, 3 /* Message */, "Default_catch_clause_variables_as_unknown_instead_of_any_6803", "Default catch clause variables as 'unknown' instead of 'any'."), Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting: diag(6804, 3 /* Message */, "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804", "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported: diag(6805, 3 /* Message */, "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805", "Disable full type checking (only critical parse and emit errors will be reported)."), + Check_side_effect_imports: diag(6806, 3 /* Message */, "Check_side_effect_imports_6806", "Check side effect imports."), + This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2: diag(6807, 1 /* Error */, "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807", "This operation can be simplified. This shift is identical to `{0} {1} {2}`."), one_of_Colon: diag(6900, 3 /* Message */, "one_of_Colon_6900", "one of:"), one_or_more_Colon: diag(6901, 3 /* Message */, "one_or_more_Colon_6901", "one or more:"), type_Colon: diag(6902, 3 /* Message */, "type_Colon_6902", "type:"), @@ -11454,7 +11287,8 @@ var Diagnostics = { Its_type_0_is_not_a_valid_JSX_element_type: diag(18053, 1 /* Error */, "Its_type_0_is_not_a_valid_JSX_element_type_18053", "Its type '{0}' is not a valid JSX element type."), await_using_statements_cannot_be_used_inside_a_class_static_block: diag(18054, 1 /* Error */, "await_using_statements_cannot_be_used_inside_a_class_static_block_18054", "'await using' statements cannot be used inside a class static block."), _0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled: diag(18055, 1 /* Error */, "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055", "'{0}' has a string type, but must have syntactically recognizable string syntax when 'isolatedModules' is enabled."), - Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled: diag(18056, 1 /* Error */, "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056", "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled.") + Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled: diag(18056, 1 /* Error */, "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056", "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled."), + String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020: diag(18057, 1 /* Error */, "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057", "String literal import and export names are not supported when the '--module' flag is set to 'es2015' or 'es2020'.") }; // src/compiler/scanner.ts @@ -11614,16 +11448,16 @@ var textToToken = new Map(Object.entries({ "#": 63 /* HashToken */, "`": 62 /* BacktickToken */ })); -var charToRegExpFlag = new Map(Object.entries({ - d: 1 /* HasIndices */, - g: 2 /* Global */, - i: 4 /* IgnoreCase */, - m: 8 /* Multiline */, - s: 16 /* DotAll */, - u: 32 /* Unicode */, - v: 64 /* UnicodeSets */, - y: 128 /* Sticky */ -})); +var charCodeToRegExpFlag = /* @__PURE__ */ new Map([ + [100 /* d */, 1 /* HasIndices */], + [103 /* g */, 2 /* Global */], + [105 /* i */, 4 /* IgnoreCase */], + [109 /* m */, 8 /* Multiline */], + [115 /* s */, 16 /* DotAll */], + [117 /* u */, 32 /* Unicode */], + [118 /* v */, 64 /* UnicodeSets */], + [121 /* y */, 128 /* Sticky */] +]); var regExpFlagToFirstAvailableLanguageVersion = /* @__PURE__ */ new Map([ [1 /* HasIndices */, 9 /* RegularExpressionFlagsHasIndices */], [16 /* DotAll */, 5 /* RegularExpressionFlagsDotAll */], @@ -11679,12 +11513,12 @@ function tokenToString(t) { function stringToToken(s) { return textToToken.get(s); } -var regExpFlagChars = makeReverseMap(charToRegExpFlag); -function regularExpressionFlagToCharacter(f) { - return regExpFlagChars[f]; +var regExpFlagCharCodes = makeReverseMap(charCodeToRegExpFlag); +function regularExpressionFlagToCharacterCode(f) { + return regExpFlagCharCodes[f]; } -function characterToRegularExpressionFlag(c) { - return charToRegExpFlag.get(c); +function characterCodeToRegularExpressionFlag(ch) { + return charCodeToRegExpFlag.get(ch); } function computeLineStarts(text) { const result = []; @@ -11721,7 +11555,7 @@ function computePositionOfLineAndCharacter(lineStarts, line, character, debugTex if (allowEdits) { line = line < 0 ? 0 : line >= lineStarts.length ? lineStarts.length - 1 : line; } else { - Debug.fail(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length} , line map is correct? ${debugText !== void 0 ? arraysEqual(lineStarts, computeLineStarts(debugText)) : "unknown"}`); + Debug.fail(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length} , line map is correct? ${debugText !== void 0 ? arrayIsEqualTo(lineStarts, computeLineStarts(debugText)) : "unknown"}`); } } const res = lineStarts[line] + character; @@ -12153,7 +11987,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan var tokenFlags; var commentDirectives; var skipJsDocLeadingAsterisks = 0; - var asteriskSeen = false; var scriptKind = 0 /* Unknown */; var jsDocParsingMode = 0 /* ParseAll */; setText(text, start, length2); @@ -12171,6 +12004,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan hasExtendedUnicodeEscape: () => (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0, hasPrecedingLineBreak: () => (tokenFlags & 1 /* PrecedingLineBreak */) !== 0, hasPrecedingJSDocComment: () => (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0, + hasPrecedingJSDocLeadingAsterisks: () => (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) !== 0, isIdentifier: () => token === 80 /* Identifier */ || token > 118 /* LastReservedWord */, isReservedWord: () => token >= 83 /* FirstReservedWord */ && token <= 118 /* LastReservedWord */, isUnterminated: () => (tokenFlags & 4 /* Unterminated */) !== 0, @@ -12205,7 +12039,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan resetTokenState, setTextPos: resetTokenState, setSkipJsDocLeadingAsterisks, - hasLeadingAsterisks, tryScan, lookAhead, scanRange @@ -12588,9 +12421,16 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan case 34 /* doubleQuote */: return '"'; case 117 /* u */: - if (flags & 17 /* ScanExtendedUnicodeEscape */ && pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) { + if (pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) { pos -= 2; - return scanExtendedUnicodeEscape(!!(flags & 6 /* ReportInvalidEscapeErrors */)); + const result = scanExtendedUnicodeEscape(!!(flags & 6 /* ReportInvalidEscapeErrors */)); + if (!(flags & 17 /* AllowExtendedUnicodeEscape */)) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + error2(Diagnostics.Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2); + } + } + return result; } for (; pos < start2 + 6; pos++) { if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { @@ -12608,7 +12448,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan const nextStart = pos; let nextPos = pos + 2; for (; nextPos < nextStart + 6; nextPos++) { - if (!isHexDigit(charCodeUnchecked(pos))) { + if (!isHexDigit(charCodeUnchecked(nextPos))) { return escapedValueString; } } @@ -12812,7 +12652,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan function scan() { fullStartPos = pos; tokenFlags = 0 /* None */; - asteriskSeen = false; while (true) { tokenStart = pos; if (pos >= end) { @@ -12928,8 +12767,8 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan return pos += 2, token = 43 /* AsteriskAsteriskToken */; } pos++; - if (skipJsDocLeadingAsterisks && !asteriskSeen && tokenFlags & 1 /* PrecedingLineBreak */) { - asteriskSeen = true; + if (skipJsDocLeadingAsterisks && (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) === 0 && tokenFlags & 1 /* PrecedingLineBreak */) { + tokenFlags |= 32768 /* PrecedingJSDocLeadingAsterisks */; continue; } return token = 42 /* AsteriskToken */; @@ -13402,24 +13241,25 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan pos++; let regExpFlags = 0 /* None */; while (true) { - const ch = charCodeChecked(pos); + const ch = codePointChecked(pos); if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { break; } + const size = charSize(ch); if (reportErrors2) { - const flag = characterToRegularExpressionFlag(String.fromCharCode(ch)); + const flag = characterCodeToRegularExpressionFlag(ch); if (flag === void 0) { - error2(Diagnostics.Unknown_regular_expression_flag, pos, 1); + error2(Diagnostics.Unknown_regular_expression_flag, pos, size); } else if (regExpFlags & flag) { - error2(Diagnostics.Duplicate_regular_expression_flag, pos, 1); + error2(Diagnostics.Duplicate_regular_expression_flag, pos, size); } else if (((regExpFlags | flag) & 96 /* AnyUnicodeMode */) === 96 /* AnyUnicodeMode */) { - error2(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, pos, 1); + error2(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, pos, size); } else { regExpFlags |= flag; - checkRegularExpressionFlagAvailable(flag, pos); + checkRegularExpressionFlagAvailability(flag, size); } } - pos++; + pos += size; } if (reportErrors2) { scanRange(startOfRegExpBody, endOfRegExpBody - startOfRegExpBody, () => { @@ -13634,22 +13474,23 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan } function scanPatternModifiers(currFlags) { while (true) { - const ch = charCodeChecked(pos); + const ch = codePointChecked(pos); if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { break; } - const flag = characterToRegularExpressionFlag(String.fromCharCode(ch)); + const size = charSize(ch); + const flag = characterCodeToRegularExpressionFlag(ch); if (flag === void 0) { - error2(Diagnostics.Unknown_regular_expression_flag, pos, 1); + error2(Diagnostics.Unknown_regular_expression_flag, pos, size); } else if (currFlags & flag) { - error2(Diagnostics.Duplicate_regular_expression_flag, pos, 1); + error2(Diagnostics.Duplicate_regular_expression_flag, pos, size); } else if (!(flag & 28 /* Modifiers */)) { - error2(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, 1); + error2(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, size); } else { currFlags |= flag; - checkRegularExpressionFlagAvailable(flag, pos); + checkRegularExpressionFlagAvailability(flag, size); } - pos++; + pos += size; } return currFlags; } @@ -14235,7 +14076,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan return value; } function scanSourceCharacter() { - const size = anyUnicodeMode ? charSize(charCodeChecked(pos)) : 1; + const size = anyUnicodeMode ? charSize(codePointChecked(pos)) : 1; pos += size; return size > 0 ? text.substring(pos - size, pos) : ""; } @@ -14253,6 +14094,12 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan forEach(groupNameReferences, (reference) => { if (!(groupSpecifiers == null ? void 0 : groupSpecifiers.has(reference.name))) { error2(Diagnostics.There_is_no_capturing_group_named_0_in_this_regular_expression, reference.pos, reference.end - reference.pos, reference.name); + if (groupSpecifiers) { + const suggestion = getSpellingSuggestion(reference.name, groupSpecifiers, identity); + if (suggestion) { + error2(Diagnostics.Did_you_mean_0, reference.pos, reference.end - reference.pos, suggestion); + } + } } }); forEach(decimalEscapes, (escape) => { @@ -14265,10 +14112,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan } }); } - function checkRegularExpressionFlagAvailable(flag, pos2) { + function checkRegularExpressionFlagAvailability(flag, size) { const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag); if (availableFrom && languageVersion < availableFrom) { - error2(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos2, 1, getNameOfScriptTarget(availableFrom)); + error2(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos, size, getNameOfScriptTarget(availableFrom)); } } function appendIfCommentDirective(commentDirectives2, text2, commentDirectiveRegEx, lineStart) { @@ -14615,9 +14462,6 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan function setSkipJsDocLeadingAsterisks(skip) { skipJsDocLeadingAsterisks += skip ? 1 : -1; } - function hasLeadingAsterisks() { - return asteriskSeen; - } } function codePointAt(s, i) { return s.codePointAt(i); @@ -14703,12 +14547,18 @@ function textSpanIsEmpty(span) { function textSpanContainsPosition(span, position) { return position >= span.start && position < textSpanEnd(span); } -function textRangeContainsPositionInclusive(span, position) { - return position >= span.pos && position <= span.end; +function textRangeContainsPositionInclusive(range, position) { + return position >= range.pos && position <= range.end; } function textSpanContainsTextSpan(span, other) { return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); } +function textSpanContainsTextRange(span, range) { + return range.pos >= span.start && range.end <= textSpanEnd(span); +} +function textRangeContainsTextSpan(range, span) { + return span.start >= range.pos && textSpanEnd(span) <= range.end; +} function textSpanOverlapsWith(span, other) { return textSpanOverlap(span, other) !== void 0; } @@ -14730,11 +14580,34 @@ function decodedTextSpanIntersectsWith(start1, length1, start2, length2) { function textSpanIntersectsWithPosition(span, position) { return position <= textSpanEnd(span) && position >= span.start; } +function textRangeIntersectsWithTextSpan(range, span) { + return textSpanIntersectsWith(span, range.pos, range.end - range.pos); +} function textSpanIntersection(span1, span2) { const start = Math.max(span1.start, span2.start); const end = Math.min(textSpanEnd(span1), textSpanEnd(span2)); return start <= end ? createTextSpanFromBounds(start, end) : void 0; } +function normalizeSpans(spans) { + spans = spans.filter((span) => span.length > 0).sort((a, b) => { + return a.start !== b.start ? a.start - b.start : a.length - b.length; + }); + const result = []; + let i = 0; + while (i < spans.length) { + let span = spans[i]; + let j = i + 1; + while (j < spans.length && textSpanIntersectsWithTextSpan(span, spans[j])) { + const start = Math.min(span.start, spans[j].start); + const end = Math.max(textSpanEnd(span), textSpanEnd(spans[j])); + span = createTextSpanFromBounds(start, end); + j++; + } + i = j; + result.push(span); + } + return result; +} function createTextSpan(start, length2) { if (start < 0) { throw new Error("start < 0"); @@ -14852,7 +14725,7 @@ function getNodeFlags(node) { var supportedLocaleDirectories = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-br", "ru", "tr", "zh-cn", "zh-tw"]; function validateLocaleAndSetLanguage(locale, sys2, errors) { const lowerCaseLocale = locale.toLowerCase(); - const matchResult = /^([a-z]+)([_-]([a-z]+))?$/.exec(lowerCaseLocale); + const matchResult = /^([a-z]+)(?:[_-]([a-z]+))?$/.exec(lowerCaseLocale); if (!matchResult) { if (errors) { errors.push(createCompilerDiagnostic(Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp")); @@ -14860,7 +14733,7 @@ function validateLocaleAndSetLanguage(locale, sys2, errors) { return; } const language = matchResult[1]; - const territory = matchResult[3]; + const territory = matchResult[2]; if (contains(supportedLocaleDirectories, lowerCaseLocale) && !trySetLanguageAndTerritory(language, territory, errors)) { trySetLanguageAndTerritory( language, @@ -14884,7 +14757,7 @@ function validateLocaleAndSetLanguage(locale, sys2, errors) { let fileContents = ""; try { fileContents = sys2.readFile(filePath); - } catch (e) { + } catch { if (errors2) { errors2.push(createCompilerDiagnostic(Diagnostics.Unable_to_open_file_0, filePath)); } @@ -15283,13 +15156,6 @@ function getJSDocTags(node) { false ); } -function getJSDocTagsNoCache(node) { - return getJSDocTagsWorker( - node, - /*noCache*/ - true - ); -} function getFirstJSDocTag(node, predicate, noCache) { return find(getJSDocTagsWorker(node, noCache), predicate); } @@ -15392,9 +15258,6 @@ function isNamedExportBindings(node) { function isJSDocPropertyLikeTag(node) { return node.kind === 348 /* JSDocPropertyTag */ || node.kind === 341 /* JSDocParameterTag */; } -function isNode(node) { - return isNodeKind(node.kind); -} function isNodeKind(kind) { return kind >= 166 /* FirstNode */; } @@ -15606,17 +15469,6 @@ function isMethodOrAccessor(node) { return false; } } -function isNamedClassElement(node) { - switch (node.kind) { - case 174 /* MethodDeclaration */: - case 177 /* GetAccessor */: - case 178 /* SetAccessor */: - case 172 /* PropertyDeclaration */: - return true; - default: - return false; - } -} function isModifierLike(node) { return isModifier(node) || isDecorator(node); } @@ -15850,9 +15702,6 @@ function isAssertionExpression(node) { const kind = node.kind; return kind === 216 /* TypeAssertionExpression */ || kind === 234 /* AsExpression */; } -function isNotEmittedOrPartiallyEmittedNode(node) { - return isNotEmittedStatement(node) || isPartiallyEmittedExpression(node); -} function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { case 248 /* ForStatement */: @@ -16337,6 +16186,12 @@ function projectReferenceIsEqualTo(oldRef, newRef) { function moduleResolutionIsEqualTo(oldResolution, newResolution) { return oldResolution === newResolution || oldResolution.resolvedModule === newResolution.resolvedModule || !!oldResolution.resolvedModule && !!newResolution.resolvedModule && oldResolution.resolvedModule.isExternalLibraryImport === newResolution.resolvedModule.isExternalLibraryImport && oldResolution.resolvedModule.extension === newResolution.resolvedModule.extension && oldResolution.resolvedModule.resolvedFileName === newResolution.resolvedModule.resolvedFileName && oldResolution.resolvedModule.originalPath === newResolution.resolvedModule.originalPath && packageIdIsEqual(oldResolution.resolvedModule.packageId, newResolution.resolvedModule.packageId) && oldResolution.alternateResult === newResolution.alternateResult; } +function getResolvedModuleFromResolution(resolution) { + return resolution.resolvedModule; +} +function getResolvedTypeReferenceDirectiveFromResolution(resolution) { + return resolution.resolvedTypeReferenceDirective; +} function createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageName) { var _a; const alternateResult = (_a = host.getResolvedModule(sourceFile, moduleReference, mode)) == null ? void 0 : _a.alternateResult; @@ -16371,6 +16226,34 @@ function createModuleNotFoundChain(sourceFile, host, moduleReference, mode, pack if (result) result.repopulateInfo = () => ({ moduleReference, mode, packageName: packageName === moduleReference ? void 0 : packageName }); return result; } +function createModeMismatchDetails(currentSourceFile) { + const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); + const scope = currentSourceFile.packageJsonScope; + const targetExt = ext === ".ts" /* Ts */ ? ".mts" /* Mts */ : ext === ".js" /* Js */ ? ".mjs" /* Mjs */ : void 0; + const result = scope && !scope.contents.packageJsonContent.type ? targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, + targetExt, + combinePaths(scope.packageDirectory, "package.json") + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, + combinePaths(scope.packageDirectory, "package.json") + ) : targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, + targetExt + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module + ); + result.repopulateInfo = () => true; + return result; +} function packageIdIsEqual(a, b) { return a === b || !!a && !!b && a.name === b.name && a.subModuleName === b.subModuleName && a.version === b.version && a.peerDependencies === b.peerDependencies; } @@ -16596,6 +16479,13 @@ function getNonDecoratorTokenPosOfNode(node, sourceFile) { } return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastDecorator.end); } +function getNonModifierTokenPosOfNode(node, sourceFile) { + const lastModifier = !nodeIsMissing(node) && canHaveModifiers(node) && node.modifiers ? last(node.modifiers) : void 0; + if (!lastModifier) { + return getTokenPosOfNode(node, sourceFile); + } + return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastModifier.end); +} function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) { return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia); } @@ -16603,7 +16493,16 @@ function isJSDocTypeExpressionOrChild(node) { return !!findAncestor(node, isJSDocTypeExpression); } function isExportNamespaceAsDefaultDeclaration(node) { - return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && node.exportClause.name.escapedText === "default"); + return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && moduleExportNameIsDefault(node.exportClause.name)); +} +function moduleExportNameTextUnescaped(node) { + return node.kind === 11 /* StringLiteral */ ? node.text : unescapeLeadingUnderscores(node.escapedText); +} +function moduleExportNameTextEscaped(node) { + return node.kind === 11 /* StringLiteral */ ? escapeLeadingUnderscores(node.text) : node.escapedText; +} +function moduleExportNameIsDefault(node) { + return (node.kind === 11 /* StringLiteral */ ? node.text : node.escapedText) === "default" /* Default */; } function getTextOfNodeFromSourceText(sourceText, node, includeTrivia = false) { if (nodeIsMissing(node)) { @@ -16656,7 +16555,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Iterator: new Map(Object.entries({ @@ -16933,7 +16836,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint8Array: new Map(Object.entries({ @@ -16942,7 +16849,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint8ClampedArray: new Map(Object.entries({ @@ -16951,7 +16862,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Int16Array: new Map(Object.entries({ @@ -16960,7 +16875,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint16Array: new Map(Object.entries({ @@ -16969,7 +16888,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Int32Array: new Map(Object.entries({ @@ -16978,7 +16901,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Uint32Array: new Map(Object.entries({ @@ -16987,7 +16914,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Float32Array: new Map(Object.entries({ @@ -16996,7 +16927,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Float64Array: new Map(Object.entries({ @@ -17005,7 +16940,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), BigInt64Array: new Map(Object.entries({ @@ -17015,7 +16954,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), BigUint64Array: new Map(Object.entries({ @@ -17025,7 +16968,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2023: [ "findLastIndex", - "findLast" + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" ] })), Error: new Map(Object.entries({ @@ -17316,6 +17263,7 @@ function tryGetTextOfPropertyName(name) { return ((_a = name.emitNode) == null ? void 0 : _a.autoGenerate) ? void 0 : name.escapedText; case 11 /* StringLiteral */: case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: case 15 /* NoSubstitutionTemplateLiteral */: return escapeLeadingUnderscores(name.text); case 167 /* ComputedPropertyName */: @@ -17624,12 +17572,12 @@ function getJSDocCommentRanges(node, text) { return filter(commentRanges, (comment) => comment.end <= node.end && // Due to parse errors sometime empty parameter may get comments assigned to it that end up not in parameter range text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 3) !== 47 /* slash */); } -var fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; -var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; -var fullTripleSlashLibReferenceRegEx = /^(\/\/\/\s*/; -var fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; -var fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; -var defaultLibReferenceRegEx = /^(\/\/\/\s*/; +var fullTripleSlashReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^\/\/\/\s*/; +var fullTripleSlashLibReferenceRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; +var defaultLibReferenceRegEx = /^\/\/\/\s*/; function isPartOfTypeNode(node) { if (182 /* FirstTypeNode */ <= node.kind && node.kind <= 205 /* LastTypeNode */) { return true; @@ -17712,15 +17660,6 @@ function isPartOfTypeNode(node) { function isPartOfTypeExpressionWithTypeArguments(node) { return isJSDocImplementsTag(node.parent) || isJSDocAugmentsTag(node.parent) || isHeritageClause(node.parent) && !isExpressionWithTypeArgumentsInClassExtendsClause(node); } -function isChildOfNodeWithKind(node, kind) { - while (node) { - if (node.kind === kind) { - return true; - } - node = node.parent; - } - return false; -} function forEachReturnStatement(body, visitor) { return traverse(body); function traverse(node) { @@ -18057,9 +17996,6 @@ function getImmediatelyInvokedFunctionExpression(func) { } } } -function isSuperOrSuperProperty(node) { - return node.kind === 108 /* SuperKeyword */ || isSuperProperty(node); -} function isSuperProperty(node) { const kind = node.kind; return (kind === 211 /* PropertyAccessExpression */ || kind === 212 /* ElementAccessExpression */) && node.expression.kind === 108 /* SuperKeyword */; @@ -18333,9 +18269,6 @@ function isFullSourceFile(sourceFile) { function isSourceFileJS(file) { return isInJSFile(file); } -function isSourceFileNotJS(file) { - return !isInJSFile(file); -} function isInJSFile(node) { return !!node && !!(node.flags & 524288 /* JavaScriptFile */); } @@ -18637,6 +18570,23 @@ function isFunctionSymbol(symbol) { const decl = symbol.valueDeclaration; return decl.kind === 262 /* FunctionDeclaration */ || isVariableDeclaration(decl) && decl.initializer && isFunctionLike(decl.initializer); } +function canHaveModuleSpecifier(node) { + switch (node == null ? void 0 : node.kind) { + case 260 /* VariableDeclaration */: + case 208 /* BindingElement */: + case 272 /* ImportDeclaration */: + case 278 /* ExportDeclaration */: + case 271 /* ImportEqualsDeclaration */: + case 273 /* ImportClause */: + case 280 /* NamespaceExport */: + case 274 /* NamespaceImport */: + case 281 /* ExportSpecifier */: + case 276 /* ImportSpecifier */: + case 205 /* ImportType */: + return true; + } + return false; +} function tryGetModuleSpecifierFromDeclaration(node) { var _a, _b; switch (node.kind) { @@ -19118,7 +19068,7 @@ function skipTypeParentheses(node) { return node; } function skipParentheses(node, excludeJSDocTypeAssertions) { - const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | 16 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */; + const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | -2147483648 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */; return skipOuterExpressions(node, flags); } function isDeleteTarget(node) { @@ -19191,12 +19141,6 @@ function isIdentifierName(node) { } return false; } -function isAliasSymbolDeclaration(node) { - if (node.kind === 271 /* ImportEqualsDeclaration */ || node.kind === 270 /* NamespaceExportDeclaration */ || node.kind === 273 /* ImportClause */ && !!node.name || node.kind === 274 /* NamespaceImport */ || node.kind === 280 /* NamespaceExport */ || node.kind === 276 /* ImportSpecifier */ || node.kind === 281 /* ExportSpecifier */ || node.kind === 277 /* ExportAssignment */ && exportAssignmentIsAlias(node)) { - return true; - } - return isInJSFile(node) && (isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) || isPropertyAccessExpression(node) && isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 64 /* EqualsToken */ && isAliasableExpression(node.parent.right)); -} function getAliasDeclarationFromName(node) { switch (node.parent.kind) { case 273 /* ImportClause */: @@ -19290,17 +19234,10 @@ function isContextualKeyword(token) { function isNonContextualKeyword(token) { return isKeyword(token) && !isContextualKeyword(token); } -function isFutureReservedKeyword(token) { - return 119 /* FirstFutureReservedWord */ <= token && token <= 127 /* LastFutureReservedWord */; -} function isStringANonContextualKeyword(name) { const token = stringToToken(name); return token !== void 0 && isNonContextualKeyword(token); } -function isStringAKeyword(name) { - const token = stringToToken(name); - return token !== void 0 && isKeyword(token); -} function isIdentifierANonContextualKeyword(node) { const originalKeywordKind = identifierToKeywordKind(node); return !!originalKeywordKind && !isContextualKeyword(originalKeywordKind); @@ -19374,6 +19311,7 @@ function getPropertyNameForPropertyNameNode(name) { case 11 /* StringLiteral */: case 15 /* NoSubstitutionTemplateLiteral */: case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: return escapeLeadingUnderscores(name.text); case 167 /* ComputedPropertyName */: const nameExpression = name.expression; @@ -19409,9 +19347,6 @@ function getTextOfIdentifierOrLiteral(node) { function getEscapedTextOfIdentifierOrLiteral(node) { return isMemberName(node) ? node.escapedText : isJsxNamespacedName(node) ? getEscapedTextOfJsxNamespacedName(node) : escapeLeadingUnderscores(node.text); } -function getPropertyNameForUniqueESSymbol(symbol) { - return `__@${getSymbolId(symbol)}@${symbol.escapedName}`; -} function getSymbolNameForPrivateIdentifier(containingClassSymbol, description3) { return `__#${getSymbolId(containingClassSymbol)}@${description3}`; } @@ -19421,9 +19356,6 @@ function isKnownSymbol(symbol) { function isPrivateIdentifierSymbol(symbol) { return startsWith(symbol.escapedName, "__#"); } -function isESSymbolIdentifier(node) { - return node.kind === 80 /* Identifier */ && node.escapedText === "Symbol"; -} function isProtoSetter(node) { return isIdentifier(node) ? idText(node) === "__proto__" : isStringLiteral(node) && node.text === "__proto__"; } @@ -19513,9 +19445,6 @@ function nodeStartsNewLexicalEnvironment(node) { function nodeIsSynthesized(range) { return positionIsSynthesized(range.pos) || positionIsSynthesized(range.end); } -function getOriginalSourceFile(sourceFile) { - return getParseTreeNode(sourceFile, isSourceFile) || sourceFile; -} var Associativity = /* @__PURE__ */ ((Associativity2) => { Associativity2[Associativity2["Left"] = 0] = "Left"; Associativity2[Associativity2["Right"] = 1] = "Right"; @@ -19818,9 +19747,9 @@ function containsInvalidEscapeFlag(node) { function hasInvalidEscape(template) { return template && !!(isNoSubstitutionTemplateLiteral(template) ? containsInvalidEscapeFlag(template) : containsInvalidEscapeFlag(template.head) || some(template.templateSpans, (span) => containsInvalidEscapeFlag(span.literal))); } -var doubleQuoteEscapedCharsRegExp = /[\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; -var singleQuoteEscapedCharsRegExp = /[\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; -var backtickQuoteEscapedCharsRegExp = /\r\n|[\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g; +var doubleQuoteEscapedCharsRegExp = /[\\"\u0000-\u001f\u2028\u2029\u0085]/g; +var singleQuoteEscapedCharsRegExp = /[\\'\u0000-\u001f\u2028\u2029\u0085]/g; +var backtickQuoteEscapedCharsRegExp = /\r\n|[\\`\u0000-\u001f\u2028\u2029\u0085]/g; var escapedCharsMap = new Map(Object.entries({ " ": "\\t", "\v": "\\v", @@ -20675,9 +20604,6 @@ function tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node) { function isAssignmentExpression(node, excludeCompoundAssignment) { return isBinaryExpression(node) && (excludeCompoundAssignment ? node.operatorToken.kind === 64 /* EqualsToken */ : isAssignmentOperator(node.operatorToken.kind)) && isLeftHandSideExpression(node.left); } -function isLeftHandSideOfAssignment(node) { - return isAssignmentExpression(node.parent) && node.parent.left === node; -} function isDestructuringAssignment(node) { if (isAssignmentExpression( node, @@ -20931,9 +20857,6 @@ function moveRangePastModifiers(node) { const lastModifier = canHaveModifiers(node) ? lastOrUndefined(node.modifiers) : void 0; return lastModifier && !positionIsSynthesized(lastModifier.end) ? moveRangePos(node, lastModifier.end) : moveRangePastDecorators(node); } -function isCollapsedRange(range) { - return range.pos === range.end; -} function createTokenRange(pos, token) { return createRange(pos, pos + tokenToString(token).length); } @@ -21175,9 +21098,6 @@ function getClassLikeDeclarationOfSymbol(symbol) { function getObjectFlags(type) { return type.flags & 3899393 /* ObjectFlagsType */ ? type.objectFlags : 0; } -function forSomeAncestorDirectory(directory, callback) { - return !!forEachAncestorDirectory(directory, (d) => callback(d) ? true : void 0); -} function isUMDExportSymbol(symbol) { return !!symbol && !!symbol.declarations && !!symbol.declarations[0] && isNamespaceExportDeclaration(symbol.declarations[0]); } @@ -21377,7 +21297,7 @@ function setObjectAllocator(alloc) { forEach(objectAllocatorPatchers, (fn) => fn(objectAllocator)); } function formatStringFromArgs(text, args) { - return text.replace(/{(\d+)}/g, (_match, index) => "" + Debug.checkDefined(args[+index])); + return text.replace(/\{(\d+)\}/g, (_match, index) => "" + Debug.checkDefined(args[+index])); } var localizedDiagnosticMessages; function setLocalizedDiagnosticMessages(messages) { @@ -21651,8 +21571,8 @@ function walkTreeForJSXTags(node) { function isFileModuleFromUsingJSXTag(file) { return !file.isDeclarationFile ? walkTreeForJSXTags(file) : void 0; } -function isFileForcedToBeModuleByFormat(file) { - return (file.impliedNodeFormat === 99 /* ESNext */ || fileExtensionIsOneOf(file.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */, ".mjs" /* Mjs */, ".mts" /* Mts */])) && !file.isDeclarationFile ? true : void 0; +function isFileForcedToBeModuleByFormat(file, options) { + return (getImpliedNodeFormatForEmitWorker(file, options) === 99 /* ESNext */ || fileExtensionIsOneOf(file.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */, ".mjs" /* Mjs */, ".mts" /* Mts */])) && !file.isDeclarationFile ? true : void 0; } function getSetExternalModuleIndicator(options) { switch (getEmitModuleDetectionKind(options)) { @@ -21671,10 +21591,14 @@ function getSetExternalModuleIndicator(options) { } checks.push(isFileForcedToBeModuleByFormat); const combined = or(...checks); - const callback = (file) => void (file.externalModuleIndicator = combined(file)); + const callback = (file) => void (file.externalModuleIndicator = combined(file, options)); return callback; } } +function importSyntaxAffectsModuleResolution(options) { + const moduleResolution = getEmitModuleResolutionKind(options); + return 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || getResolvePackageJsonExports(options) || getResolvePackageJsonImports(options); +} function createComputedCompilerOptions(options) { return options; } @@ -21873,6 +21797,12 @@ var computedOptions = createComputedCompilerOptions({ return getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); } }, + strictBuiltinIteratorReturn: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); + } + }, alwaysStrict: { dependencies: ["strict"], computeValue: (compilerOptions) => { @@ -21951,7 +21881,12 @@ function getJSXTransformEnabled(options) { function getJSXImplicitImportBase(compilerOptions, file) { const jsxImportSourcePragmas = file == null ? void 0 : file.pragmas.get("jsximportsource"); const jsxImportSourcePragma = isArray(jsxImportSourcePragmas) ? jsxImportSourcePragmas[jsxImportSourcePragmas.length - 1] : jsxImportSourcePragmas; - return compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */ || compilerOptions.jsxImportSource || jsxImportSourcePragma ? (jsxImportSourcePragma == null ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" : void 0; + const jsxRuntimePragmas = file == null ? void 0 : file.pragmas.get("jsxruntime"); + const jsxRuntimePragma = isArray(jsxRuntimePragmas) ? jsxRuntimePragmas[jsxRuntimePragmas.length - 1] : jsxRuntimePragmas; + if ((jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "classic") { + return void 0; + } + return compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */ || compilerOptions.jsxImportSource || jsxImportSourcePragma || (jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "automatic" ? (jsxImportSourcePragma == null ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" : void 0; } function getJSXRuntimeImport(base, options) { return base ? `${base}/${options.jsx === 5 /* ReactJSXDev */ ? "jsx-dev-runtime" : "jsx-runtime"}` : void 0; @@ -22195,7 +22130,7 @@ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNa if (visited.has(canonicalPath)) return; visited.set(canonicalPath, true); const { files, directories } = getFileSystemEntries(path2); - for (const current of sort(files, compareStringsCaseSensitive)) { + for (const current of toSorted(files, compareStringsCaseSensitive)) { const name = combinePaths(path2, current); const absoluteName = combinePaths(absolutePath, current); if (extensions && !fileExtensionIsOneOf(name, extensions)) continue; @@ -22215,7 +22150,7 @@ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNa return; } } - for (const current of sort(directories, compareStringsCaseSensitive)) { + for (const current of toSorted(directories, compareStringsCaseSensitive)) { const name = combinePaths(path2, current); const absoluteName = combinePaths(absolutePath, current); if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && (!excludeRegex || !excludeRegex.test(absoluteName))) { @@ -22311,6 +22246,9 @@ function hasJSFileExtension(fileName) { function hasTSFileExtension(fileName) { return some(supportedTSExtensionsFlat, (extension) => fileExtensionIs(fileName, extension)); } +function hasImplementationTSFileExtension(fileName) { + return some(supportedTSImplementationExtensions, (extension) => fileExtensionIs(fileName, extension)) && !isDeclarationFileName(fileName); +} var ModuleSpecifierEnding = /* @__PURE__ */ ((ModuleSpecifierEnding2) => { ModuleSpecifierEnding2[ModuleSpecifierEnding2["Minimal"] = 0] = "Minimal"; ModuleSpecifierEnding2[ModuleSpecifierEnding2["Index"] = 1] = "Index"; @@ -22518,9 +22456,27 @@ function rangeOfTypeParameters(sourceFile, typeParameters) { return { pos, end }; } function skipTypeChecking(sourceFile, options, host) { - return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnsotics(sourceFile, options); + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + false + ); +} +function skipTypeCheckingIgnoringNoCheck(sourceFile, options, host) { + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + true + ); } -function canIncludeBindAndCheckDiagnsotics(sourceFile, options) { +function skipTypeCheckingWorker(sourceFile, options, host, ignoreNoCheck) { + return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || !ignoreNoCheck && options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnostics(sourceFile, options); +} +function canIncludeBindAndCheckDiagnostics(sourceFile, options) { if (!!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false) return false; if (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ || sourceFile.scriptKind === 5 /* External */) return true; const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; @@ -22694,14 +22650,6 @@ function setParent(child, parent2) { } return child; } -function setEachParent(children, parent2) { - if (children) { - for (const child of children) { - setParent(child, parent2); - } - } - return children; -} function setParentRecursive(rootNode, incremental) { if (!rootNode) return rootNode; forEachChildRecursively(rootNode, isJSDocNode(rootNode) ? bindParentToChildIgnoringJSDoc : bindParentToChild); @@ -22845,7 +22793,7 @@ function isFunctionExpressionOrArrowFunction(node) { return node.kind === 218 /* FunctionExpression */ || node.kind === 219 /* ArrowFunction */; } function escapeSnippetText(text) { - return text.replace(/\$/gm, () => "\\$"); + return text.replace(/\$/g, () => "\\$"); } function isNumericLiteralName(name) { return (+name).toString() === name; @@ -22904,10 +22852,6 @@ function getNodeModulePathParts(fullPath) { fileNameIndex = partStart; return state > 1 /* NodeModules */ ? { topLevelNodeModulesIndex, topLevelPackageNameIndex, packageRootIndex, fileNameIndex } : void 0; } -function getParameterTypeNode(parameter) { - var _a; - return parameter.kind === 341 /* JSDocParameterTag */ ? (_a = parameter.typeExpression) == null ? void 0 : _a.type : parameter.type; -} function isTypeDeclaration(node) { switch (node.kind) { case 168 /* TypeParameter */: @@ -23028,6 +22972,105 @@ function replaceFirstStar(s, replacement) { function getNameFromImportAttribute(node) { return isIdentifier(node.name) ? node.name.escapedText : escapeLeadingUnderscores(node.name.text); } +function isSourceElement(node) { + switch (node.kind) { + case 168 /* TypeParameter */: + case 169 /* Parameter */: + case 172 /* PropertyDeclaration */: + case 171 /* PropertySignature */: + case 185 /* ConstructorType */: + case 184 /* FunctionType */: + case 179 /* CallSignature */: + case 180 /* ConstructSignature */: + case 181 /* IndexSignature */: + case 174 /* MethodDeclaration */: + case 173 /* MethodSignature */: + case 175 /* ClassStaticBlockDeclaration */: + case 176 /* Constructor */: + case 177 /* GetAccessor */: + case 178 /* SetAccessor */: + case 183 /* TypeReference */: + case 182 /* TypePredicate */: + case 186 /* TypeQuery */: + case 187 /* TypeLiteral */: + case 188 /* ArrayType */: + case 189 /* TupleType */: + case 192 /* UnionType */: + case 193 /* IntersectionType */: + case 196 /* ParenthesizedType */: + case 190 /* OptionalType */: + case 191 /* RestType */: + case 197 /* ThisType */: + case 198 /* TypeOperator */: + case 194 /* ConditionalType */: + case 195 /* InferType */: + case 203 /* TemplateLiteralType */: + case 205 /* ImportType */: + case 202 /* NamedTupleMember */: + case 328 /* JSDocAugmentsTag */: + case 329 /* JSDocImplementsTag */: + case 346 /* JSDocTypedefTag */: + case 338 /* JSDocCallbackTag */: + case 340 /* JSDocEnumTag */: + case 345 /* JSDocTemplateTag */: + case 344 /* JSDocTypeTag */: + case 324 /* JSDocLink */: + case 325 /* JSDocLinkCode */: + case 326 /* JSDocLinkPlain */: + case 341 /* JSDocParameterTag */: + case 348 /* JSDocPropertyTag */: + case 317 /* JSDocFunctionType */: + case 315 /* JSDocNonNullableType */: + case 314 /* JSDocNullableType */: + case 312 /* JSDocAllType */: + case 313 /* JSDocUnknownType */: + case 322 /* JSDocTypeLiteral */: + case 318 /* JSDocVariadicType */: + case 309 /* JSDocTypeExpression */: + case 333 /* JSDocPublicTag */: + case 335 /* JSDocProtectedTag */: + case 334 /* JSDocPrivateTag */: + case 350 /* JSDocSatisfiesTag */: + case 343 /* JSDocThisTag */: + case 199 /* IndexedAccessType */: + case 200 /* MappedType */: + case 262 /* FunctionDeclaration */: + case 241 /* Block */: + case 268 /* ModuleBlock */: + case 243 /* VariableStatement */: + case 244 /* ExpressionStatement */: + case 245 /* IfStatement */: + case 246 /* DoStatement */: + case 247 /* WhileStatement */: + case 248 /* ForStatement */: + case 249 /* ForInStatement */: + case 250 /* ForOfStatement */: + case 251 /* ContinueStatement */: + case 252 /* BreakStatement */: + case 253 /* ReturnStatement */: + case 254 /* WithStatement */: + case 255 /* SwitchStatement */: + case 256 /* LabeledStatement */: + case 257 /* ThrowStatement */: + case 258 /* TryStatement */: + case 260 /* VariableDeclaration */: + case 208 /* BindingElement */: + case 263 /* ClassDeclaration */: + case 264 /* InterfaceDeclaration */: + case 265 /* TypeAliasDeclaration */: + case 266 /* EnumDeclaration */: + case 267 /* ModuleDeclaration */: + case 272 /* ImportDeclaration */: + case 271 /* ImportEqualsDeclaration */: + case 278 /* ExportDeclaration */: + case 277 /* ExportAssignment */: + case 242 /* EmptyStatement */: + case 259 /* DebuggerStatement */: + case 282 /* MissingDeclaration */: + return true; + } + return false; +} function evaluatorResult(value, isSyntacticallyString = false, resolvedOtherFiles = false, hasExternalReferences = false) { return { value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences }; } @@ -23579,6 +23622,10 @@ function hasInferredType(node) { return false; } } +function isSideEffectImport(node) { + const ancestor = findAncestor(node, isImportDeclaration); + return !!ancestor && !ancestor.importClause; +} // src/compiler/factory/baseNodeFactory.ts function createBaseNodeFactory() { @@ -25355,7 +25402,11 @@ function createNodeFactory(flags, baseFactory2) { node.modifiers = asNodeArray(modifiers); node.parameters = createNodeArray(parameters); node.body = body; - node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | 1024 /* ContainsES2015 */; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | 1024 /* ContainsES2015 */; + } node.typeParameters = void 0; node.type = void 0; node.typeArguments = void 0; @@ -27981,6 +28032,8 @@ function createNodeFactory(flags, baseFactory2) { return updateSatisfiesExpression(outerExpression, expression, outerExpression.type); case 235 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression); + case 233 /* ExpressionWithTypeArguments */: + return updateExpressionWithTypeArguments(outerExpression, expression, outerExpression.typeArguments); case 354 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression); } @@ -27988,7 +28041,7 @@ function createNodeFactory(flags, baseFactory2) { function isIgnorableParen(node) { return isParenthesizedExpression(node) && nodeIsSynthesized(node) && nodeIsSynthesized(getSourceMapRange(node)) && nodeIsSynthesized(getCommentRange(node)) && !some(getSyntheticLeadingComments(node)) && !some(getSyntheticTrailingComments(node)); } - function restoreOuterExpressions(outerExpression, innerExpression, kinds = 15 /* All */) { + function restoreOuterExpressions(outerExpression, innerExpression, kinds = 31 /* All */) { if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { return updateOuterExpression( outerExpression, @@ -28034,7 +28087,7 @@ function createNodeFactory(flags, baseFactory2) { } } function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers = false) { - const callee = skipOuterExpressions(expression, 15 /* All */); + const callee = skipOuterExpressions(expression, 31 /* All */); let thisArg; let target; if (isSuperProperty(callee)) { @@ -29522,7 +29575,7 @@ var asyncGeneratorHelper = { var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; + return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } @@ -29704,8 +29757,8 @@ var generatorHelper = { priority: 6, text: ` var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); @@ -29868,17 +29921,22 @@ var disposeResourcesHelper = { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } + var r, s = 0; function next() { - while (env.stack.length) { - var rec = env.stack.pop(); + while (r = env.stack.pop()) { try { - var result = rec.dispose && rec.dispose.call(rec.value); - if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); + if (r.dispose) { + var result = r.dispose.call(r.value); + if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + else s |= 1; } catch (e) { fail(e); } } + if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); @@ -30379,6 +30437,9 @@ function isNamedExports(node) { function isExportSpecifier(node) { return node.kind === 281 /* ExportSpecifier */; } +function isModuleExportName(node) { + return node.kind === 80 /* Identifier */ || node.kind === 11 /* StringLiteral */; +} function isMissingDeclaration(node) { return node.kind === 282 /* MissingDeclaration */; } @@ -30763,17 +30824,6 @@ function createForOfBindingStatement(factory2, node, boundValue) { ); } } -function insertLeadingStatement(factory2, dest, source) { - if (isBlock(dest)) { - return factory2.updateBlock(dest, setTextRange(factory2.createNodeArray([source, ...dest.statements]), dest.statements)); - } else { - return factory2.createBlock( - factory2.createNodeArray([dest, source]), - /*multiLine*/ - true - ); - } -} function createExpressionFromEntityName(factory2, node) { if (isQualifiedName(node)) { const left = createExpressionFromEntityName(factory2, node.left); @@ -31005,18 +31055,19 @@ function getJSDocTypeAssertionType(node) { Debug.assertIsDefined(type); return type; } -function isOuterExpression(node, kinds = 15 /* All */) { +function isOuterExpression(node, kinds = 31 /* All */) { switch (node.kind) { case 217 /* ParenthesizedExpression */: - if (kinds & 16 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { + if (kinds & -2147483648 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { return false; } return (kinds & 1 /* Parentheses */) !== 0; case 216 /* TypeAssertionExpression */: case 234 /* AsExpression */: - case 233 /* ExpressionWithTypeArguments */: case 238 /* SatisfiesExpression */: return (kinds & 2 /* TypeAssertions */) !== 0; + case 233 /* ExpressionWithTypeArguments */: + return (kinds & 16 /* ExpressionsWithTypeArguments */) !== 0; case 235 /* NonNullExpression */: return (kinds & 4 /* NonNullAssertions */) !== 0; case 354 /* PartiallyEmittedExpression */: @@ -31024,13 +31075,13 @@ function isOuterExpression(node, kinds = 15 /* All */) { } return false; } -function skipOuterExpressions(node, kinds = 15 /* All */) { +function skipOuterExpressions(node, kinds = 31 /* All */) { while (isOuterExpression(node, kinds)) { node = node.expression; } return node; } -function walkUpOuterExpressions(node, kinds = 15 /* All */) { +function walkUpOuterExpressions(node, kinds = 31 /* All */) { let parent2 = node.parent; while (isOuterExpression(parent2, kinds)) { parent2 = parent2.parent; @@ -31038,9 +31089,6 @@ function walkUpOuterExpressions(node, kinds = 15 /* All */) { } return parent2; } -function skipAssertions(node) { - return skipOuterExpressions(node, 6 /* Assertions */); -} function startOnNewLine(node) { return setStartsOnNewLine( node, @@ -31062,7 +31110,7 @@ function createExternalHelpersImportDeclarationIfNeeded(nodeFactory, helperFacto if (compilerOptions.importHelpers && isEffectiveExternalModule(sourceFile, compilerOptions)) { let namedBindings; const moduleKind = getEmitModuleKind(compilerOptions); - if (moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */ || sourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */ || getImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions) === 99 /* ESNext */) { const helpers = getEmitHelpers(sourceFile); if (helpers) { const helperNames = []; @@ -31127,8 +31175,7 @@ function getOrCreateExternalHelpersModuleNameIfNeeded(factory2, node, compilerOp if (externalHelpersModuleName) { return externalHelpersModuleName; } - const moduleKind = getEmitModuleKind(compilerOptions); - let create = (hasExportStarsToExportValues || getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || node.impliedNodeFormat === 1 /* CommonJS */); + let create = (hasExportStarsToExportValues || getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault) && getEmitModuleFormatOfFileWorker(node, compilerOptions) < 4 /* System */; if (!create) { const helpers = getEmitHelpers(node); if (helpers) { @@ -31151,6 +31198,9 @@ function getLocalNameForExternalImport(factory2, node, sourceFile) { const namespaceDeclaration = getNamespaceDeclarationNode(node); if (namespaceDeclaration && !isDefaultImport(node) && !isExportNamespaceAsDefaultDeclaration(node)) { const name = namespaceDeclaration.name; + if (name.kind === 11 /* StringLiteral */) { + return factory2.getGeneratedNameForNode(node); + } return isGeneratedIdentifier(name) ? name : factory2.createIdentifier(getSourceTextOfNodeFromSourceFile(sourceFile, name) || idText(name)); } if (node.kind === 272 /* ImportDeclaration */ && node.importClause) { @@ -31343,10 +31393,6 @@ function isQuestionOrPlusOrMinusToken(node) { function isModuleName(node) { return isIdentifier(node) || isStringLiteral(node); } -function isLiteralTypeLikeExpression(node) { - const kind = node.kind; - return kind === 106 /* NullKeyword */ || kind === 112 /* TrueKeyword */ || kind === 97 /* FalseKeyword */ || isLiteralExpression(node) || isPrefixUnaryExpression(node); -} function isExponentiationOperator(kind) { return kind === 43 /* AsteriskAsteriskToken */; } @@ -31532,10 +31578,6 @@ function isExportOrDefaultModifier(node) { const kind = node.kind; return isExportOrDefaultKeywordKind(kind); } -function isNonExportDefaultModifier(node) { - const kind = node.kind; - return isModifierKind(kind) && !isExportOrDefaultKeywordKind(kind); -} function elideNodes(factory2, nodes) { if (nodes === void 0) return void 0; if (nodes.length === 0) return nodes; @@ -32311,7 +32353,7 @@ function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); } function createSourceFile(fileName, sourceText, languageVersionOrOptions, setParentNodes = false, scriptKind) { - var _a, _b, _c, _d; + var _a, _b; (_a = tracing) == null ? void 0 : _a.push( tracing.Phase.Parse, "createSourceFile", @@ -32321,7 +32363,6 @@ function createSourceFile(fileName, sourceText, languageVersionOrOptions, setPar ); mark("beforeParse"); let result; - (_b = perfLogger) == null ? void 0 : _b.logStartParseSourceFile(fileName); const { languageVersion, setExternalModuleIndicator: overrideSetExternalModuleIndicator, @@ -32357,10 +32398,9 @@ function createSourceFile(fileName, sourceText, languageVersionOrOptions, setPar jsDocParsingMode ); } - (_c = perfLogger) == null ? void 0 : _c.logStopParseSourceFile(); mark("afterParse"); measure("Parse", "beforeParse", "afterParse"); - (_d = tracing) == null ? void 0 : _d.pop(); + (_b = tracing) == null ? void 0 : _b.pop(); return result; } function parseIsolatedEntityName(text, languageVersion) { @@ -33300,7 +33340,7 @@ var Parser; function createIdentifier(isIdentifier3, diagnosticMessage, privateIdentifierDiagnosticMessage) { if (isIdentifier3) { identifierCount++; - const pos = scanner2.hasLeadingAsterisks() ? scanner2.getTokenStart() : getNodePos(); + const pos = scanner2.hasPrecedingJSDocLeadingAsterisks() ? scanner2.getTokenStart() : getNodePos(); const originalKeywordKind = token(); const text = internIdentifier(scanner2.getTokenValue()); const hasExtendedUnicodeEscape = scanner2.hasExtendedUnicodeEscape(); @@ -33348,13 +33388,13 @@ var Parser; return createIdentifier(tokenIsIdentifierOrKeyword(token())); } function isLiteralPropertyName() { - return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */; + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */; } function isImportAttributeName2() { return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; } function parsePropertyNameWorker(allowComputedPropertyNames) { - if (token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */) { + if (token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */) { const node = parseLiteralNode(); node.text = internIdentifier(node.text); return node; @@ -33513,6 +33553,9 @@ var Parser; if (token() === 161 /* FromKeyword */ && lookAhead(nextTokenIsStringLiteral)) { return false; } + if (token() === 11 /* StringLiteral */) { + return true; + } return tokenIsIdentifierOrKeyword(token()); case 13 /* JsxAttributes */: return tokenIsIdentifierOrKeyword(token()) || token() === 19 /* OpenBraceToken */; @@ -37578,7 +37621,7 @@ var Parser; if (isIndexSignature()) { return parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers); } - if (tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 42 /* AsteriskToken */ || token() === 23 /* OpenBracketToken */) { + if (tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */ || token() === 42 /* AsteriskToken */ || token() === 23 /* OpenBracketToken */) { const isAmbient = some(modifiers, isDeclareModifier); if (isAmbient) { for (const m of modifiers) { @@ -37961,6 +38004,12 @@ var Parser; const name = parseIdentifier(); return finishNode(factory2.createNamespaceImport(name), pos); } + function canParseModuleExportName() { + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; + } + function parseModuleExportName(parseName) { + return token() === 11 /* StringLiteral */ ? parseLiteralNode() : parseName(); + } function parseNamedImportsOrExports(kind) { const pos = getNodePos(); const node = kind === 275 /* NamedImports */ ? factory2.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)) : factory2.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)); @@ -37981,42 +38030,51 @@ var Parser; let isTypeOnly = false; let propertyName; let canParseAsKeyword = true; - let name = parseIdentifierName(); - if (name.escapedText === "type") { + let name = parseModuleExportName(parseIdentifierName); + if (name.kind === 80 /* Identifier */ && name.escapedText === "type") { if (token() === 130 /* AsKeyword */) { const firstAs = parseIdentifierName(); if (token() === 130 /* AsKeyword */) { const secondAs = parseIdentifierName(); - if (tokenIsIdentifierOrKeyword(token())) { + if (canParseModuleExportName()) { isTypeOnly = true; propertyName = firstAs; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); canParseAsKeyword = false; } else { propertyName = name; name = secondAs; canParseAsKeyword = false; } - } else if (tokenIsIdentifierOrKeyword(token())) { + } else if (canParseModuleExportName()) { propertyName = name; canParseAsKeyword = false; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } else { isTypeOnly = true; name = firstAs; } - } else if (tokenIsIdentifierOrKeyword(token())) { + } else if (canParseModuleExportName()) { isTypeOnly = true; - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } } if (canParseAsKeyword && token() === 130 /* AsKeyword */) { propertyName = name; parseExpected(130 /* AsKeyword */); - name = parseNameWithKeywordCheck(); + name = parseModuleExportName(parseNameWithKeywordCheck); } - if (kind === 276 /* ImportSpecifier */ && checkIdentifierIsKeyword) { - parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected); + if (kind === 276 /* ImportSpecifier */) { + if (name.kind !== 80 /* Identifier */) { + parseErrorAt(skipTrivia(sourceText, name.pos), name.end, Diagnostics.Identifier_expected); + name = setTextRangePosEnd(createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false + ), name.pos, name.pos); + } else if (checkIdentifierIsKeyword) { + parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected); + } } const node = kind === 276 /* ImportSpecifier */ ? factory2.createImportSpecifier(isTypeOnly, propertyName, name) : factory2.createExportSpecifier(isTypeOnly, propertyName, name); return finishNode(node, pos); @@ -38028,7 +38086,7 @@ var Parser; } } function parseNamespaceExport(pos) { - return finishNode(factory2.createNamespaceExport(parseIdentifierName()), pos); + return finishNode(factory2.createNamespaceExport(parseModuleExportName(parseIdentifierName)), pos); } function parseExportDeclaration(pos, hasJSDoc, modifiers) { const savedAwaitContext = inAwaitContext(); @@ -39681,8 +39739,8 @@ function getNamedArgRegEx(name) { namedArgRegExCache.set(name, result); return result; } -var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im; -var singleLinePragmaRegEx = /^\/\/\/?\s*@([^\s:]+)(.*)\s*$/im; +var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/m; +var singleLinePragmaRegEx = /^\/\/\/?\s*@([^\s:]+)((?:[^\S\r\n]|:).*)?$/m; function extractPragmas(pragmas, range, text) { const tripleSlash = range.kind === 2 /* SingleLineCommentTrivia */ && tripleSlashXMLCommentStartRegEx.exec(text); if (tripleSlash) { @@ -39723,7 +39781,7 @@ function extractPragmas(pragmas, range, text) { return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine); } if (range.kind === 3 /* MultiLineCommentTrivia */) { - const multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; + const multiLinePragmaRegEx = /@(\S+)(\s+(?:\S.*)?)?$/gm; let multiLineMatch; while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch); @@ -39879,6 +39937,7 @@ var libEntries = [ ["esnext.array", "lib.esnext.array.d.ts"], ["esnext.regexp", "lib.esnext.regexp.d.ts"], ["esnext.string", "lib.esnext.string.d.ts"], + ["esnext.iterator", "lib.esnext.iterator.d.ts"], ["decorators", "lib.decorators.d.ts"], ["decorators.legacy", "lib.decorators.legacy.d.ts"] ]; @@ -40057,7 +40116,6 @@ var commonOptionsWithBuild = [ name: "generateTrace", type: "string", isFilePath: true, - isCommandLineOnly: true, paramType: Diagnostics.DIRECTORY, category: Diagnostics.Compiler_Diagnostics, description: Diagnostics.Generates_an_event_trace_and_a_list_of_types @@ -40123,6 +40181,25 @@ var commonOptionsWithBuild = [ description: Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript, defaultValueDescription: false }, + { + name: "noCheck", + type: "boolean", + showInSimplifiedHelpView: false, + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported, + transpileOptionValue: true, + defaultValueDescription: false + // Not setting affectsSemanticDiagnostics or affectsBuildInfo because we dont want all diagnostics to go away, its handled in builder + }, + { + name: "noEmit", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_emitting_files_from_a_compilation, + transpileOptionValue: void 0, + defaultValueDescription: false + }, { name: "assumeChangesOnlyAffectDirectDependencies", type: "boolean", @@ -40387,29 +40464,6 @@ var commandOptionsWithoutBuild = [ defaultValueDescription: false, description: Diagnostics.Disable_emitting_comments }, - { - name: "noCheck", - type: "boolean", - showInSimplifiedHelpView: false, - category: Diagnostics.Compiler_Diagnostics, - description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported, - transpileOptionValue: true, - defaultValueDescription: false, - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - extraValidation() { - return [Diagnostics.Unknown_compiler_option_0, "noCheck"]; - } - }, - { - name: "noEmit", - type: "boolean", - showInSimplifiedHelpView: true, - category: Diagnostics.Emit, - description: Diagnostics.Disable_emitting_files_from_a_compilation, - transpileOptionValue: void 0, - defaultValueDescription: false - }, { name: "importHelpers", type: "boolean", @@ -40534,6 +40588,16 @@ var commandOptionsWithoutBuild = [ description: Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor, defaultValueDescription: Diagnostics.false_unless_strict_is_set }, + { + name: "strictBuiltinIteratorReturn", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, { name: "noImplicitThis", type: "boolean", @@ -40809,6 +40873,15 @@ var commandOptionsWithoutBuild = [ category: Diagnostics.Modules, description: Diagnostics.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports }, + { + name: "noUncheckedSideEffectImports", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Check_side_effect_imports, + defaultValueDescription: false + }, // Source Maps { name: "sourceRoot", @@ -41264,6 +41337,13 @@ var optionsForBuild = [ description: Diagnostics.Delete_the_outputs_of_all_projects, type: "boolean", defaultValueDescription: false + }, + { + name: "stopBuildOnErrors", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Skip_building_downstream_projects_on_error_in_upstream_project, + type: "boolean", + defaultValueDescription: false } ]; var buildOpts = [ @@ -41946,9 +42026,7 @@ function convertToTSConfig(configParseResult, configFileName, host) { return config; } function optionMapToObject(optionMap) { - return { - ...arrayFrom(optionMap.entries()).reduce((prev, cur) => ({ ...prev, [cur[0]]: cur[1] }), {}) - }; + return Object.fromEntries(optionMap); } function filterSameAsDefaultInclude(specs) { if (!length(specs)) return void 0; @@ -42816,7 +42894,7 @@ function convertJsonOptionOfCustomType(opt, value, errors, valueExpression, sour function convertJsonOptionOfListType(option, values, basePath, errors, propertyAssignment, valueExpression, sourceFile) { return filter(map(values, (v, index) => convertJsonOption(option.element, v, basePath, errors, propertyAssignment, valueExpression == null ? void 0 : valueExpression.elements[index], sourceFile)), (v) => option.listPreserveFalsyValues ? true : !!v); } -var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; +var invalidTrailingRecursionPattern = /(?:^|\/)\*\*\/?$/; var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; function getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions = emptyArray) { basePath = normalizePath(basePath); @@ -43950,7 +44028,6 @@ function resolveModuleNameFromCache(moduleName, containingFile, cache, mode) { ); } function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { - var _a, _b, _c; const traceEnabled = isTraceEnabled(compilerOptions, host); if (redirectedReference) { compilerOptions = redirectedReference.commandLine.options; @@ -43979,7 +44056,6 @@ function resolveModuleName(moduleName, containingFile, compilerOptions, host, ca trace(host, Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, ModuleResolutionKind[moduleResolution]); } } - (_a = perfLogger) == null ? void 0 : _a.logStartResolveModule(moduleName); switch (moduleResolution) { case 3 /* Node16 */: result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode); @@ -43999,8 +44075,6 @@ function resolveModuleName(moduleName, containingFile, compilerOptions, host, ca default: return Debug.fail(`Unexpected moduleResolution: ${moduleResolution}`); } - if (result && result.resolvedModule) (_b = perfLogger) == null ? void 0 : _b.logInfoEvent(`Module "${moduleName}" resolved to "${result.resolvedModule.resolvedFileName}"`); - (_c = perfLogger) == null ? void 0 : _c.logStopResolveModule(result && result.resolvedModule ? "" + result.resolvedModule.resolvedFileName : "null"); if (cache && !cache.isReadonly) { cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set(moduleName, resolutionMode, result); if (!isExternalModuleNameRelative(moduleName)) { @@ -44707,22 +44781,16 @@ function getTemporaryModuleResolutionState(packageJsonInfoCache, host, options) resolvedPackageDirectory: false }; } -function getPackageScopeForPath(fileName, state) { - const parts = getPathComponents(fileName); - parts.pop(); - while (parts.length > 0) { - const pkg = getPackageJsonInfo( - getPathFromPathComponents(parts), +function getPackageScopeForPath(directory, state) { + return forEachAncestorDirectory( + directory, + (dir) => getPackageJsonInfo( + dir, /*onlyRecordFailures*/ false, state - ); - if (pkg) { - return pkg; - } - parts.pop(); - } - return void 0; + ) + ); } function getVersionPathsOfPackageJsonInfo(packageJsonInfo, state) { if (packageJsonInfo.contents.versionPaths === void 0) { @@ -44885,7 +44953,7 @@ function noKeyStartsWithDot(obj) { } function loadModuleFromSelfNameReference(extensions, moduleName, directory, state, cache, redirectedReference) { var _a, _b; - const directoryPath = getNormalizedAbsolutePath(combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); const scope = getPackageScopeForPath(directoryPath, state); if (!scope || !scope.contents.packageJsonContent.exports) { return void 0; @@ -44981,7 +45049,7 @@ function loadModuleFromImports(extensions, moduleName, directory, state, cache, void 0 ); } - const directoryPath = getNormalizedAbsolutePath(combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); const scope = getPackageScopeForPath(directoryPath, state); if (!scope) { if (state.traceEnabled) { @@ -45049,7 +45117,7 @@ function loadModuleFromImportsOrExports(extensions, state, cache, redirectedRefe moduleName ); } - const expandingKeys = sort(filter(getOwnKeys(lookupTable), (k) => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys); + const expandingKeys = toSorted(filter(getOwnKeys(lookupTable), (k) => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys); for (const potentialTarget of expandingKeys) { if (state.features & 16 /* ExportsPatternTrailers */ && matchesPatternWithTrailer(potentialTarget, moduleName)) { const target = lookupTable[potentialTarget]; @@ -45793,6 +45861,9 @@ function getModuleInstanceStateWorker(node, visited) { } function getModuleInstanceStateForAliasTarget(specifier, visited) { const name = specifier.propertyName || specifier.name; + if (name.kind !== 80 /* Identifier */) { + return 1 /* Instantiated */; + } let p = specifier.parent; while (p) { if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) { @@ -45845,11 +45916,8 @@ function createFlowNode(flags, node, antecedent) { } var binder = /* @__PURE__ */ createBinder(); function bindSourceFile(file, options) { - var _a, _b; mark("beforeBind"); - (_a = perfLogger) == null ? void 0 : _a.logStartBindFile("" + file.fileName); binder(file, options); - (_b = perfLogger) == null ? void 0 : _b.logStopBindFile(); mark("afterBind"); measure("Bind", "beforeBind", "afterBind"); } @@ -46049,7 +46117,7 @@ function createBinder() { } function declareSymbol(symbolTable, parent3, node, includes, excludes, isReplaceableByMethod, isComputedName) { Debug.assert(isComputedName || !hasDynamicName(node)); - const isDefaultExport = hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) && node.name.escapedText === "default"; + const isDefaultExport = hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) && moduleExportNameIsDefault(node.name); const name = isComputedName ? "__computed" /* Computed */ : isDefaultExport && parent3 ? "default" /* Default */ : getDeclarationName(node); let symbol; if (name === void 0) { @@ -47146,6 +47214,8 @@ function createBinder() { } function bindJSDocImportTag(node) { bind(node.tagName); + bind(node.moduleSpecifier); + bind(node.attributes); if (typeof node.comment !== "string") { bindEach(node.comment); } @@ -48529,21 +48599,25 @@ function createBinder() { const reportError = ( // report error on all statements except empty ones isStatementButNotDeclaration(node) && node.kind !== 242 /* EmptyStatement */ || // report error on class declarations - node.kind === 263 /* ClassDeclaration */ || // report error on instantiated modules or const-enums only modules if preserveConstEnums is set + node.kind === 263 /* ClassDeclaration */ || // report errors on enums with preserved emit + isEnumDeclarationWithPreservedEmit(node, options) || // report error on instantiated modules node.kind === 267 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node) ); if (reportError) { currentFlow = reportedUnreachableFlow; if (!options.allowUnreachableCode) { const isError = unreachableCodeIsError(options) && !(node.flags & 33554432 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 7 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer)); - eachUnreachableRange(node, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); + eachUnreachableRange(node, options, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); } } } return true; } } -function eachUnreachableRange(node, cb) { +function isEnumDeclarationWithPreservedEmit(node, options) { + return node.kind === 266 /* EnumDeclaration */ && (!isEnumConst(node) || shouldPreserveConstEnums(options)); +} +function eachUnreachableRange(node, options, cb) { if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) { const { statements } = node.parent; const slice = sliceAfter(statements, node); @@ -48551,22 +48625,22 @@ function eachUnreachableRange(node, cb) { } else { cb(node, node); } -} -function isExecutableStatement(s) { - return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !isEnumDeclaration(s) && // `var x;` may declare a variable used above - !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); -} -function isPurelyTypeDeclaration(s) { - switch (s.kind) { - case 264 /* InterfaceDeclaration */: - case 265 /* TypeAliasDeclaration */: - return true; - case 267 /* ModuleDeclaration */: - return getModuleInstanceState(s) !== 1 /* Instantiated */; - case 266 /* EnumDeclaration */: - return hasSyntacticModifier(s, 4096 /* Const */); - default: - return false; + function isExecutableStatement(s) { + return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && // `var x;` may declare a variable used above + !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); + } + function isPurelyTypeDeclaration(s) { + switch (s.kind) { + case 264 /* InterfaceDeclaration */: + case 265 /* TypeAliasDeclaration */: + return true; + case 267 /* ModuleDeclaration */: + return getModuleInstanceState(s) !== 1 /* Instantiated */; + case 266 /* EnumDeclaration */: + return !isEnumDeclarationWithPreservedEmit(s, options); + default: + return false; + } } } function isExportsOrModuleExportsOrAlias(sourceFile, node) { @@ -48835,6 +48909,28 @@ __export(ts_moduleSpecifiers_exports, { }); // src/compiler/moduleSpecifiers.ts +var stringToRegex = memoizeOne((pattern) => { + try { + let slash = pattern.indexOf("/"); + if (slash !== 0) { + return new RegExp(pattern); + } + const lastSlash = pattern.lastIndexOf("/"); + if (slash === lastSlash) { + return new RegExp(pattern); + } + while ((slash = pattern.indexOf("/", slash + 1)) !== lastSlash) { + if (pattern[slash - 1] !== "\\") { + return new RegExp(pattern); + } + } + const flags = pattern.substring(lastSlash + 1).replace(/[^iu]/g, ""); + pattern = pattern.substring(1, lastSlash); + return new RegExp(pattern, flags); + } catch { + return void 0; + } +}); var RelativePreference = /* @__PURE__ */ ((RelativePreference2) => { RelativePreference2[RelativePreference2["Relative"] = 0] = "Relative"; RelativePreference2[RelativePreference2["NonRelative"] = 1] = "NonRelative"; @@ -48842,13 +48938,16 @@ var RelativePreference = /* @__PURE__ */ ((RelativePreference2) => { RelativePreference2[RelativePreference2["ExternalNonRelative"] = 3] = "ExternalNonRelative"; return RelativePreference2; })(RelativePreference || {}); -function getModuleSpecifierPreferences({ importModuleSpecifierPreference, importModuleSpecifierEnding }, compilerOptions, importingSourceFile, oldImportSpecifier) { +function getModuleSpecifierPreferences({ importModuleSpecifierPreference, importModuleSpecifierEnding, autoImportSpecifierExcludeRegexes }, host, compilerOptions, importingSourceFile, oldImportSpecifier) { const filePreferredEnding = getPreferredEnding(); return { + excludeRegexes: autoImportSpecifierExcludeRegexes, relativePreference: oldImportSpecifier !== void 0 ? isExternalModuleNameRelative(oldImportSpecifier) ? 0 /* Relative */ : 1 /* NonRelative */ : importModuleSpecifierPreference === "relative" ? 0 /* Relative */ : importModuleSpecifierPreference === "non-relative" ? 1 /* NonRelative */ : importModuleSpecifierPreference === "project-relative" ? 3 /* ExternalNonRelative */ : 2 /* Shortest */, getAllowedEndingsInPreferredOrder: (syntaxImpliedNodeFormat) => { - const preferredEnding = syntaxImpliedNodeFormat !== importingSourceFile.impliedNodeFormat ? getPreferredEnding(syntaxImpliedNodeFormat) : filePreferredEnding; - if ((syntaxImpliedNodeFormat ?? importingSourceFile.impliedNodeFormat) === 99 /* ESNext */) { + const impliedNodeFormat = getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions); + const preferredEnding = syntaxImpliedNodeFormat !== impliedNodeFormat ? getPreferredEnding(syntaxImpliedNodeFormat) : filePreferredEnding; + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + if ((syntaxImpliedNodeFormat ?? impliedNodeFormat) === 99 /* ESNext */ && 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */) { if (shouldAllowImportingTsExtension(compilerOptions, importingSourceFile.fileName)) { return [3 /* TsExtension */, 2 /* JsExtension */]; } @@ -48879,19 +48978,19 @@ function getModuleSpecifierPreferences({ importModuleSpecifierPreference, import } return getModuleSpecifierEndingPreference( importModuleSpecifierEnding, - resolutionMode ?? importingSourceFile.impliedNodeFormat, + resolutionMode ?? getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions), compilerOptions, isFullSourceFile(importingSourceFile) ? importingSourceFile : void 0 ); } } function updateModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, oldImportSpecifier, options = {}) { - const res = getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, compilerOptions, importingSourceFile, oldImportSpecifier), {}, options); + const res = getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, host, compilerOptions, importingSourceFile, oldImportSpecifier), {}, options); if (res === oldImportSpecifier) return void 0; return res; } function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, options = {}) { - return getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, compilerOptions, importingSourceFile), {}, options); + return getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, host, compilerOptions, importingSourceFile), {}, options); } function getNodeModulesPackageName(compilerOptions, importingSourceFile, nodeModulesFileName, host, preferences, options = {}) { const info = getInfo(importingSourceFile.fileName, host); @@ -48921,7 +49020,7 @@ function getModuleSpecifierWorker(compilerOptions, importingSourceFile, importin /*packageNameOnly*/ void 0, options.overrideImportMode - )) || getLocalModuleSpecifier(toFileName2, info, compilerOptions, host, options.overrideImportMode || importingSourceFile.impliedNodeFormat, preferences); + )) || getLocalModuleSpecifier(toFileName2, info, compilerOptions, host, options.overrideImportMode || getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions), preferences); } function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences, options = {}) { const result = tryGetModuleSpecifiersFromCacheWorker( @@ -48959,7 +49058,13 @@ function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSo function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { let computedWithoutCache = false; const ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker); - if (ambient) return { kind: "ambient", moduleSpecifiers: [ambient], computedWithoutCache }; + if (ambient) { + return { + kind: "ambient", + moduleSpecifiers: !(forAutoImport && isExcludedByRegex(ambient, userPreferences.autoImportSpecifierExcludeRegexes)) ? [ambient] : emptyArray, + computedWithoutCache + }; + } let [kind, specifiers, moduleSourceFile, modulePaths, cache] = tryGetModuleSpecifiersFromCacheWorker( moduleSymbol, importingSourceFile, @@ -48983,7 +49088,7 @@ function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions cache == null ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, options, result.kind, modulePaths, result.moduleSpecifiers); return result; } -function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, options = {}) { +function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, preferences, options = {}) { const info = getInfo(importingFile.fileName, host); const importMode = options.overrideImportMode ?? importingFile.impliedNodeFormat; return getLocalModuleSpecifier( @@ -48992,17 +49097,21 @@ function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, importMode, - getModuleSpecifierPreferences({}, compilerOptions, importingFile) + getModuleSpecifierPreferences(preferences, host, compilerOptions, importingFile) ); } function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { const info = getInfo(importingSourceFile.fileName, host); - const preferences = getModuleSpecifierPreferences(userPreferences, compilerOptions, importingSourceFile); + const preferences = getModuleSpecifierPreferences(userPreferences, host, compilerOptions, importingSourceFile); const existingSpecifier = isFullSourceFile(importingSourceFile) && forEach(modulePaths, (modulePath) => forEach( host.getFileIncludeReasons().get(toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), (reason) => { if (reason.kind !== 3 /* Import */ || reason.file !== importingSourceFile.path) return void 0; - if (importingSourceFile.impliedNodeFormat && importingSourceFile.impliedNodeFormat !== getModeForResolutionAtIndex(importingSourceFile, reason.index, compilerOptions)) return void 0; + const existingMode = host.getModeForResolutionAtIndex(importingSourceFile, reason.index); + const targetMode = options.overrideImportMode ?? host.getDefaultResolutionModeForFile(importingSourceFile); + if (existingMode !== targetMode && existingMode !== void 0 && targetMode !== void 0) { + return void 0; + } const specifier = getModuleNameStringLiteralAt(importingSourceFile, reason.index).text; return preferences.relativePreference !== 1 /* NonRelative */ || !pathIsRelative(specifier) ? specifier : void 0; } @@ -49027,9 +49136,11 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi void 0, options.overrideImportMode ) : void 0; - nodeModulesSpecifiers = append(nodeModulesSpecifiers, specifier); - if (specifier && modulePath.isRedirect) { - return { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true }; + if (specifier && !(forAutoImport && isExcludedByRegex(specifier, preferences.excludeRegexes))) { + nodeModulesSpecifiers = append(nodeModulesSpecifiers, specifier); + if (modulePath.isRedirect) { + return { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true }; + } } if (!specifier) { const local = getLocalModuleSpecifier( @@ -49042,7 +49153,7 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi /*pathsOnly*/ modulePath.isRedirect ); - if (!local) { + if (!local || forAutoImport && isExcludedByRegex(local, preferences.excludeRegexes)) { continue; } if (modulePath.isRedirect) { @@ -49058,7 +49169,13 @@ function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFi } } } - return (pathsSpecifiers == null ? void 0 : pathsSpecifiers.length) ? { kind: "paths", moduleSpecifiers: pathsSpecifiers, computedWithoutCache: true } : (redirectPathsSpecifiers == null ? void 0 : redirectPathsSpecifiers.length) ? { kind: "redirect", moduleSpecifiers: redirectPathsSpecifiers, computedWithoutCache: true } : (nodeModulesSpecifiers == null ? void 0 : nodeModulesSpecifiers.length) ? { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true } : { kind: "relative", moduleSpecifiers: Debug.checkDefined(relativeSpecifiers), computedWithoutCache: true }; + return (pathsSpecifiers == null ? void 0 : pathsSpecifiers.length) ? { kind: "paths", moduleSpecifiers: pathsSpecifiers, computedWithoutCache: true } : (redirectPathsSpecifiers == null ? void 0 : redirectPathsSpecifiers.length) ? { kind: "redirect", moduleSpecifiers: redirectPathsSpecifiers, computedWithoutCache: true } : (nodeModulesSpecifiers == null ? void 0 : nodeModulesSpecifiers.length) ? { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true } : { kind: "relative", moduleSpecifiers: relativeSpecifiers ?? emptyArray, computedWithoutCache: true }; +} +function isExcludedByRegex(moduleSpecifier, excludeRegexes) { + return some(excludeRegexes, (pattern) => { + var _a; + return !!((_a = stringToRegex(pattern)) == null ? void 0 : _a.test(moduleSpecifier)); + }); } function getInfo(importingSourceFileName, host) { importingSourceFileName = getNormalizedAbsolutePath(importingSourceFileName, host.getCurrentDirectory()); @@ -49071,7 +49188,7 @@ function getInfo(importingSourceFileName, host) { canonicalSourceDirectory: getCanonicalFileName(sourceDirectory) }; } -function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, { getAllowedEndingsInPreferredOrder: getAllowedEndingsInPrefererredOrder, relativePreference }, pathsOnly) { +function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, { getAllowedEndingsInPreferredOrder: getAllowedEndingsInPrefererredOrder, relativePreference, excludeRegexes }, pathsOnly) { const { baseUrl, paths, rootDirs } = compilerOptions; if (pathsOnly && !paths) { return void 0; @@ -49087,7 +49204,14 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im if (!relativeToBaseUrl) { return pathsOnly ? void 0 : relativePath; } - const fromPackageJsonImports = pathsOnly ? void 0 : tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, compilerOptions, host, importMode); + const fromPackageJsonImports = pathsOnly ? void 0 : tryGetModuleNameFromPackageJsonImports( + moduleFileName, + sourceDirectory, + compilerOptions, + host, + importMode, + prefersTsExtension(allowedEndings) + ); const fromPaths = pathsOnly || fromPackageJsonImports === void 0 ? paths && tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, host, compilerOptions) : void 0; if (pathsOnly) { return fromPaths; @@ -49096,6 +49220,14 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im if (!maybeNonRelative) { return relativePath; } + const relativeIsExcluded = isExcludedByRegex(relativePath, excludeRegexes); + const nonRelativeIsExcluded = isExcludedByRegex(maybeNonRelative, excludeRegexes); + if (!relativeIsExcluded && nonRelativeIsExcluded) { + return relativePath; + } + if (relativeIsExcluded && !nonRelativeIsExcluded) { + return maybeNonRelative; + } if (relativePreference === 1 /* NonRelative */ && !pathIsRelative(maybeNonRelative)) { return maybeNonRelative; } @@ -49210,7 +49342,7 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, if (cache && links && host.readFile && !pathContainsNodeModules(info.importingSourceFileName)) { Debug.type(host); const state = getTemporaryModuleResolutionState(cache.getPackageJsonInfoCache(), host, {}); - const packageJson = getPackageScopeForPath(info.importingSourceFileName, state); + const packageJson = getPackageScopeForPath(getDirectoryPath(info.importingSourceFileName), state); if (packageJson) { const toResolve = getAllRuntimeDependencies(packageJson.contents.packageJsonContent); for (const depName of toResolve || emptyArray) { @@ -49335,7 +49467,7 @@ function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, hos return ending !== 0 /* Minimal */ || value === processEnding(relativeToBaseUrl, [ending], compilerOptions, host); } } -function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions, mode, isImports) { +function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions, mode, isImports, preferTsExtension) { if (typeof exports2 === "string") { const ignoreCase = !hostUsesCaseSensitiveFileNames(host); const getCommonSourceDirectory2 = () => host.getCommonSourceDirectory(); @@ -49347,6 +49479,7 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac void 0 ); const extensionSwappedTarget = hasTSFileExtension(targetFilePath) ? removeFileExtension(targetFilePath) + tryGetJSExtensionForFile(targetFilePath, options) : void 0; + const canTryTsExtension = preferTsExtension && hasImplementationTSFileExtension(targetFilePath); switch (mode) { case 0 /* Exact */: if (extensionSwappedTarget && comparePaths(extensionSwappedTarget, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || comparePaths(targetFilePath, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || outputFile && comparePaths(outputFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || declarationFile && comparePaths(declarationFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */) { @@ -49354,6 +49487,19 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac } break; case 1 /* Directory */: + if (canTryTsExtension && containsPath(targetFilePath, pathOrPattern, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + targetFilePath, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: getNormalizedAbsolutePath( + combinePaths(combinePaths(packageName, exports2), fragment), + /*currentDirectory*/ + void 0 + ) }; + } if (extensionSwappedTarget && containsPath(pathOrPattern, extensionSwappedTarget, ignoreCase)) { const fragment = getRelativePathFromDirectory( pathOrPattern, @@ -49367,7 +49513,7 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac void 0 ) }; } - if (containsPath(pathOrPattern, targetFilePath, ignoreCase)) { + if (!canTryTsExtension && containsPath(pathOrPattern, targetFilePath, ignoreCase)) { const fragment = getRelativePathFromDirectory( pathOrPattern, targetFilePath, @@ -49390,12 +49536,12 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac return { moduleFileToTry: combinePaths(packageName, fragment) }; } if (declarationFile && containsPath(pathOrPattern, declarationFile, ignoreCase)) { - const fragment = getRelativePathFromDirectory( + const fragment = changeFullExtension(getRelativePathFromDirectory( pathOrPattern, declarationFile, /*ignoreCase*/ false - ); + ), getJSExtensionForFile(declarationFile, options)); return { moduleFileToTry: combinePaths(packageName, fragment) }; } break; @@ -49403,11 +49549,15 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac const starPos = pathOrPattern.indexOf("*"); const leadingSlice = pathOrPattern.slice(0, starPos); const trailingSlice = pathOrPattern.slice(starPos + 1); + if (canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } if (extensionSwappedTarget && startsWith(extensionSwappedTarget, leadingSlice, ignoreCase) && endsWith(extensionSwappedTarget, trailingSlice, ignoreCase)) { const starReplacement = extensionSwappedTarget.slice(leadingSlice.length, extensionSwappedTarget.length - trailingSlice.length); return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; } - if (startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + if (!canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; } @@ -49417,17 +49567,19 @@ function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, pac } if (declarationFile && startsWith(declarationFile, leadingSlice, ignoreCase) && endsWith(declarationFile, trailingSlice, ignoreCase)) { const starReplacement = declarationFile.slice(leadingSlice.length, declarationFile.length - trailingSlice.length); - return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + const substituted = replaceFirstStar(packageName, starReplacement); + const jsExtension = tryGetJSExtensionForFile(declarationFile, options); + return jsExtension ? { moduleFileToTry: changeFullExtension(substituted, jsExtension) } : void 0; } break; } } else if (Array.isArray(exports2)) { - return forEach(exports2, (e) => tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, e, conditions, mode, isImports)); + return forEach(exports2, (e) => tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, e, conditions, mode, isImports, preferTsExtension)); } else if (typeof exports2 === "object" && exports2 !== null) { for (const key of getOwnKeys(exports2)) { if (key === "default" || conditions.indexOf(key) >= 0 || isApplicableVersionedTypesKey(conditions, key)) { const subTarget = exports2[key]; - const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports); + const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports, preferTsExtension); if (result) { return result; } @@ -49455,6 +49607,8 @@ function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirec conditions, mode, /*isImports*/ + false, + /*preferTsExtension*/ false ); }); @@ -49469,10 +49623,12 @@ function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirec conditions, 0 /* Exact */, /*isImports*/ + false, + /*preferTsExtension*/ false ); } -function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode) { +function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode, preferTsExtension) { var _a, _b, _c; if (!host.readFile || !getResolvePackageJsonImports(options)) { return void 0; @@ -49505,7 +49661,8 @@ function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, conditions, mode, /*isImports*/ - true + true, + preferTsExtension ); })) == null ? void 0 : _c.moduleFileToTry; } @@ -49532,7 +49689,7 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!parts) { return void 0; } - const preferences = getModuleSpecifierPreferences(userPreferences, options, importingSourceFile); + const preferences = getModuleSpecifierPreferences(userPreferences, host, options, importingSourceFile); const allowedEndings = preferences.getAllowedEndingsInPreferredOrder(); let moduleSpecifier = path; let isPackageRootPath = false; @@ -49582,12 +49739,20 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const cachedPackageJson = (_b = (_a = host.getPackageJsonInfoCache) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getPackageJsonInfo(packageJsonPath); if (isPackageJsonInfo(cachedPackageJson) || cachedPackageJson === void 0 && host.fileExists(packageJsonPath)) { const packageJsonContent = (cachedPackageJson == null ? void 0 : cachedPackageJson.contents.packageJsonContent) || tryParseJson(host.readFile(packageJsonPath)); - const importMode = overrideMode || importingSourceFile.impliedNodeFormat; + const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); const packageName2 = getPackageNameFromTypesPackageName(nodeModulesDirectoryName2); const conditions = getConditions(options, importMode); - const fromExports = (packageJsonContent == null ? void 0 : packageJsonContent.exports) ? tryGetModuleNameFromExports(options, host, path, packageRootPath, packageName2, packageJsonContent.exports, conditions) : void 0; + const fromExports = (packageJsonContent == null ? void 0 : packageJsonContent.exports) ? tryGetModuleNameFromExports( + options, + host, + path, + packageRootPath, + packageName2, + packageJsonContent.exports, + conditions + ) : void 0; if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } @@ -49732,6 +49897,13 @@ function getRelativePathIfInSameVolume(path, directoryPath, getCanonicalFileName function isPathRelativeToParent(path) { return startsWith(path, ".."); } +function getDefaultResolutionModeForFile(file, host, compilerOptions) { + return isFullSourceFile(file) ? host.getDefaultResolutionModeForFile(file) : getDefaultResolutionModeForFileWorker(file, compilerOptions); +} +function prefersTsExtension(allowedEndings) { + const tsPriority = allowedEndings.indexOf(3 /* TsExtension */); + return tsPriority > -1 && tsPriority < allowedEndings.indexOf(2 /* JsExtension */); +} // src/compiler/checker.ts var ambientModuleSymbolRegex = /^".+"$/; @@ -49913,10 +50085,12 @@ function createTypeChecker(host) { var strictFunctionTypes = getStrictOptionValue(compilerOptions, "strictFunctionTypes"); var strictBindCallApply = getStrictOptionValue(compilerOptions, "strictBindCallApply"); var strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); + var strictBuiltinIteratorReturn = getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); var noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); var noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); var useUnknownInCatchVariables = getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes; + var noUncheckedSideEffectImports = !!compilerOptions.noUncheckedSideEffectImports; var checkBinaryExpression = createCheckBinaryExpression(); var emitResolver = createResolver(); var nodeBuilder = createNodeBuilder(); @@ -50046,6 +50220,7 @@ function createTypeChecker(host) { getNonOptionalType: removeOptionalTypeMarker, getTypeArguments, typeToTypeNode: nodeBuilder.typeToTypeNode, + typePredicateToTypePredicateNode: nodeBuilder.typePredicateToTypePredicateNode, indexInfoToIndexSignatureDeclaration: nodeBuilder.indexInfoToIndexSignatureDeclaration, signatureToSignatureDeclaration: nodeBuilder.signatureToSignatureDeclaration, symbolToEntityName: nodeBuilder.symbolToEntityName, @@ -50211,13 +50386,6 @@ function createTypeChecker(host) { /*withAugmentations*/ true ), - tryFindAmbientModuleWithoutAugmentations: (moduleName) => { - return tryFindAmbientModule( - moduleName, - /*withAugmentations*/ - false - ); - }, getApparentType, getUnionType, isTypeAssignableTo, @@ -50231,6 +50399,7 @@ function createTypeChecker(host) { getNumberType: () => numberType, getNumberLiteralType, getBigIntType: () => bigintType, + getBigIntLiteralType, createPromiseType, createArrayType, getElementTypeOfArrayType, @@ -50251,13 +50420,13 @@ function createTypeChecker(host) { /*reportErrors*/ false ), - getAsyncIterableType: () => { + getAnyAsyncIterableType: () => { const type = getGlobalAsyncIterableType( /*reportErrors*/ false ); if (type === emptyGenericType) return void 0; - return type; + return createTypeReference(type, [anyType, anyType, anyType]); }, isSymbolAccessible, isArrayType, @@ -50729,8 +50898,6 @@ function createTypeChecker(host) { } }; var anyIterationTypes = createIterationTypes(anyType, anyType, anyType); - var anyIterationTypesExceptNext = createIterationTypes(anyType, anyType, unknownType); - var defaultIterationTypes = createIterationTypes(neverType, anyType, undefinedType); var asyncIterationTypesResolver = { iterableCacheKey: "iterationTypesOfAsyncIterable", iteratorCacheKey: "iterationTypesOfAsyncIterator", @@ -50738,7 +50905,9 @@ function createTypeChecker(host) { getGlobalIteratorType: getGlobalAsyncIteratorType, getGlobalIterableType: getGlobalAsyncIterableType, getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType, + getGlobalIteratorObjectType: getGlobalAsyncIteratorObjectType, getGlobalGeneratorType: getGlobalAsyncGeneratorType, + getGlobalBuiltinIteratorTypes: getGlobalBuiltinAsyncIteratorTypes, resolveIterationType: (type, errorNode) => getAwaitedType(type, errorNode, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member), mustHaveANextMethodDiagnostic: Diagnostics.An_async_iterator_must_have_a_next_method, mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method, @@ -50751,7 +50920,9 @@ function createTypeChecker(host) { getGlobalIteratorType, getGlobalIterableType, getGlobalIterableIteratorType, + getGlobalIteratorObjectType, getGlobalGeneratorType, + getGlobalBuiltinIteratorTypes, resolveIterationType: (type, _errorNode) => type, mustHaveANextMethodDiagnostic: Diagnostics.An_iterator_must_have_a_next_method, mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_iterator_must_be_a_method, @@ -50789,12 +50960,16 @@ function createTypeChecker(host) { var deferredGlobalIterableType; var deferredGlobalIteratorType; var deferredGlobalIterableIteratorType; + var deferredGlobalIteratorObjectType; var deferredGlobalGeneratorType; var deferredGlobalIteratorYieldResultType; var deferredGlobalIteratorReturnResultType; var deferredGlobalAsyncIterableType; var deferredGlobalAsyncIteratorType; var deferredGlobalAsyncIterableIteratorType; + var deferredGlobalBuiltinIteratorTypes; + var deferredGlobalBuiltinAsyncIteratorTypes; + var deferredGlobalAsyncIteratorObjectType; var deferredGlobalAsyncGeneratorType; var deferredGlobalTemplateStringsArrayType; var deferredGlobalImportMetaType; @@ -50830,6 +51005,7 @@ function createTypeChecker(host) { var contextualTypes = []; var contextualIsCache = []; var contextualTypeCount = 0; + var contextualBindingPatterns = []; var inferenceContextNodes = []; var inferenceContexts = []; var inferenceContextCount = 0; @@ -51147,7 +51323,7 @@ function createTypeChecker(host) { } if (source.exports) { if (!target.exports) target.exports = createSymbolTable(); - mergeSymbolTable(target.exports, source.exports, unidirectional); + mergeSymbolTable(target.exports, source.exports, unidirectional, target); } if (!unidirectional) { recordMergedSymbol(target, source); @@ -51227,10 +51403,14 @@ function createTypeChecker(host) { mergeSymbolTable(combined, second); return combined; } - function mergeSymbolTable(target, source, unidirectional = false) { + function mergeSymbolTable(target, source, unidirectional = false, mergedParent) { source.forEach((sourceSymbol, id) => { const targetSymbol = target.get(id); - target.set(id, targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol)); + const merged = targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol); + if (mergedParent && targetSymbol) { + merged.parent = mergedParent; + } + target.set(id, merged); }); } function mergeModuleAugmentation(moduleName) { @@ -51248,6 +51428,8 @@ function createTypeChecker(host) { moduleName, moduleName, moduleNotFoundError, + /*ignoreErrors*/ + false, /*isForAugmentation*/ true ); @@ -51884,9 +52066,9 @@ function createTypeChecker(host) { } } function getDeclarationOfAliasSymbol(symbol) { - return symbol.declarations && findLast(symbol.declarations, isAliasSymbolDeclaration2); + return symbol.declarations && findLast(symbol.declarations, isAliasSymbolDeclaration); } - function isAliasSymbolDeclaration2(node) { + function isAliasSymbolDeclaration(node) { return node.kind === 271 /* ImportEqualsDeclaration */ || node.kind === 270 /* NamespaceExportDeclaration */ || node.kind === 273 /* ImportClause */ && !!node.name || node.kind === 274 /* NamespaceImport */ || node.kind === 280 /* NamespaceExport */ || node.kind === 276 /* ImportSpecifier */ || node.kind === 281 /* ExportSpecifier */ || node.kind === 277 /* ExportAssignment */ && exportAssignmentIsAlias(node) || isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) || isAccessExpression(node) && isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 64 /* EqualsToken */ && isAliasableOrJsExpression(node.parent.right) || node.kind === 304 /* ShorthandPropertyAssignment */ || node.kind === 303 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer) || node.kind === 260 /* VariableDeclaration */ && isVariableDeclarationInitializedToBareOrAccessedRequire(node) || node.kind === 208 /* BindingElement */ && isVariableDeclarationInitializedToBareOrAccessedRequire(node.parent.parent); } function isAliasableOrJsExpression(e) { @@ -51930,7 +52112,7 @@ function createTypeChecker(host) { const isExport = typeOnlyDeclaration.kind === 281 /* ExportSpecifier */ || typeOnlyDeclaration.kind === 278 /* ExportDeclaration */; const message = isExport ? Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type : Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type; const relatedMessage = isExport ? Diagnostics._0_was_exported_here : Diagnostics._0_was_imported_here; - const name = typeOnlyDeclaration.kind === 278 /* ExportDeclaration */ ? "*" : unescapeLeadingUnderscores(typeOnlyDeclaration.name.escapedText); + const name = typeOnlyDeclaration.kind === 278 /* ExportDeclaration */ ? "*" : moduleExportNameTextUnescaped(typeOnlyDeclaration.name); addRelatedInfo(error2(node.moduleReference, message), createDiagnosticForNode(typeOnlyDeclaration, relatedMessage, name)); } } @@ -51955,22 +52137,28 @@ function createTypeChecker(host) { function isSyntacticDefault(node) { return isExportAssignment(node) && !node.isExportEquals || hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) || isNamespaceExport(node); } - function getUsageModeForExpression(usage) { - return isStringLiteralLike(usage) ? host.getModeForUsageLocation(getSourceFileOfNode(usage), usage) : void 0; + function getEmitSyntaxForModuleSpecifierExpression(usage) { + return isStringLiteralLike(usage) ? host.getEmitSyntaxForUsageLocation(getSourceFileOfNode(usage), usage) : void 0; } function isESMFormatImportImportingCommonjsFormatFile(usageMode, targetMode) { return usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */; } - function isOnlyImportedAsDefault(usage) { - const usageMode = getUsageModeForExpression(usage); - return usageMode === 99 /* ESNext */ && endsWith(usage.text, ".json" /* Json */); + function isOnlyImportableAsDefault(usage) { + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + const usageMode = getEmitSyntaxForModuleSpecifierExpression(usage); + return usageMode === 99 /* ESNext */ && endsWith(usage.text, ".json" /* Json */); + } + return false; } function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, usage) { - const usageMode = file && getUsageModeForExpression(usage); - if (file && usageMode !== void 0 && 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { - const result = isESMFormatImportImportingCommonjsFormatFile(usageMode, file.impliedNodeFormat); - if (usageMode === 99 /* ESNext */ || result) { - return result; + const usageMode = file && getEmitSyntaxForModuleSpecifierExpression(usage); + if (file && usageMode !== void 0) { + const targetMode = host.getImpliedNodeFormatForEmit(file); + if (usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */ && 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return true; + } + if (usageMode === 99 /* ESNext */ && targetMode === 99 /* ESNext */) { + return false; } } if (!allowSyntheticDefaultImports) { @@ -52029,7 +52217,7 @@ function createTypeChecker(host) { if (!specifier) { return exportDefaultSymbol; } - const hasDefaultOnly = isOnlyImportedAsDefault(specifier); + const hasDefaultOnly = isOnlyImportableAsDefault(specifier); const hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, specifier); if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) { if (hasExportAssignmentSymbol(moduleSymbol) && !allowSyntheticDefaultImports) { @@ -52168,12 +52356,12 @@ function createTypeChecker(host) { if (valueSymbol.exports) result.exports = new Map(valueSymbol.exports); return result; } - function getExportOfModule(symbol, name, specifier, dontResolveAlias) { + function getExportOfModule(symbol, nameText, specifier, dontResolveAlias) { var _a; if (symbol.flags & 1536 /* Module */) { - const exportSymbol = getExportsOfSymbol(symbol).get(name.escapedText); + const exportSymbol = getExportsOfSymbol(symbol).get(nameText); const resolved = resolveSymbol(exportSymbol, dontResolveAlias); - const exportStarDeclaration = (_a = getSymbolLinks(symbol).typeOnlyExportStarMap) == null ? void 0 : _a.get(name.escapedText); + const exportStarDeclaration = (_a = getSymbolLinks(symbol).typeOnlyExportStarMap) == null ? void 0 : _a.get(nameText); markSymbolOfAliasDeclarationIfTypeOnly( specifier, exportSymbol, @@ -52181,7 +52369,7 @@ function createTypeChecker(host) { /*overwriteEmpty*/ false, exportStarDeclaration, - name.escapedText + nameText ); return resolved; } @@ -52199,10 +52387,11 @@ function createTypeChecker(host) { const moduleSpecifier = getExternalModuleRequireArgument(node) || node.moduleSpecifier; const moduleSymbol = resolveExternalModuleName(node, moduleSpecifier); const name = !isPropertyAccessExpression(specifier) && specifier.propertyName || specifier.name; - if (!isIdentifier(name)) { + if (!isIdentifier(name) && name.kind !== 11 /* StringLiteral */) { return void 0; } - const suppressInteropError = name.escapedText === "default" /* Default */ && allowSyntheticDefaultImports; + const nameText = moduleExportNameTextEscaped(name); + const suppressInteropError = nameText === "default" /* Default */ && allowSyntheticDefaultImports; const targetSymbol = resolveESModuleSymbol( moduleSymbol, moduleSpecifier, @@ -52211,7 +52400,7 @@ function createTypeChecker(host) { suppressInteropError ); if (targetSymbol) { - if (name.escapedText) { + if (nameText || name.kind === 11 /* StringLiteral */) { if (isShorthandAmbientModuleSymbol(moduleSymbol)) { return moduleSymbol; } @@ -52219,18 +52408,18 @@ function createTypeChecker(host) { if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=" /* ExportEquals */)) { symbolFromVariable = getPropertyOfType( getTypeOfSymbol(targetSymbol), - name.escapedText, + nameText, /*skipObjectFunctionPropertyAugment*/ true ); } else { - symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText); + symbolFromVariable = getPropertyOfVariable(targetSymbol, nameText); } symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias); - let symbolFromModule = getExportOfModule(targetSymbol, name, specifier, dontResolveAlias); - if (symbolFromModule === void 0 && name.escapedText === "default" /* Default */) { + let symbolFromModule = getExportOfModule(targetSymbol, nameText, specifier, dontResolveAlias); + if (symbolFromModule === void 0 && nameText === "default" /* Default */) { const file = (_a = moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); - if (isOnlyImportedAsDefault(moduleSpecifier) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) { + if (isOnlyImportableAsDefault(moduleSpecifier) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) { symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } } @@ -52246,7 +52435,7 @@ function createTypeChecker(host) { var _a; const moduleName = getFullyQualifiedName(moduleSymbol, node); const declarationName = declarationNameToString(name); - const suggestion = getSuggestedSymbolForNonexistentModule(name, targetSymbol); + const suggestion = isIdentifier(name) ? getSuggestedSymbolForNonexistentModule(name, targetSymbol) : void 0; if (suggestion !== void 0) { const suggestionName = symbolToString(suggestion); const diagnostic = error2(name, Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, moduleName, declarationName, suggestionName); @@ -52268,7 +52457,7 @@ function createTypeChecker(host) { } function reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName) { var _a, _b; - const localSymbol = (_b = (_a = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(name.escapedText); + const localSymbol = (_b = (_a = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(moduleExportNameTextEscaped(name)); const exports2 = moduleSymbol.exports; if (localSymbol) { const exportedEqualsSymbol = exports2 == null ? void 0 : exports2.get("export=" /* ExportEquals */); @@ -52300,7 +52489,7 @@ function createTypeChecker(host) { } } function getTargetOfImportSpecifier(node, dontResolveAlias) { - if (isImportSpecifier(node) && idText(node.propertyName || node.name) === "default" /* Default */) { + if (isImportSpecifier(node) && moduleExportNameIsDefault(node.propertyName || node.name)) { const specifier = getModuleSpecifierForImportOrExport(node); const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); if (moduleSymbol) { @@ -52344,19 +52533,23 @@ function createTypeChecker(host) { } } function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) { - if (idText(node.propertyName || node.name) === "default" /* Default */) { + const name = node.propertyName || node.name; + if (moduleExportNameIsDefault(name)) { const specifier = getModuleSpecifierForImportOrExport(node); const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); if (moduleSymbol) { return getTargetofModuleDefault(moduleSymbol, node, !!dontResolveAlias); } } - const resolved = node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : resolveEntityName( - node.propertyName || node.name, - meaning, - /*ignoreErrors*/ - false, - dontResolveAlias + const resolved = node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + false, + dontResolveAlias + ) ); markSymbolOfAliasDeclarationIfTypeOnly( node, @@ -52804,14 +52997,14 @@ function createTypeChecker(host) { function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors) { const isClassic = getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */; const errorMessage = isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations; - return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage); + return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage, ignoreErrors); } - function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, isForAugmentation = false) { - return isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, moduleReferenceExpression, isForAugmentation) : void 0; + function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, ignoreErrors = false, isForAugmentation = false) { + return isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, !ignoreErrors ? moduleReferenceExpression : void 0, isForAugmentation) : void 0; } function resolveExternalModule(location, moduleReference, moduleNotFoundError, errorNode, isForAugmentation = false) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k; - if (startsWith(moduleReference, "@types/")) { + if (errorNode && startsWith(moduleReference, "@types/")) { const diag2 = Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1; const withoutAtTypePrefix = removePrefix(moduleReference, "@types/"); error2(errorNode, diag2, withoutAtTypePrefix, moduleReference); @@ -52830,10 +53023,10 @@ function createTypeChecker(host) { /*requireStringLiteralLikeArgument*/ true ) ? location.initializer.arguments[0] : void 0) || ((_c = findAncestor(location, isImportCall)) == null ? void 0 : _c.arguments[0]) || ((_d = findAncestor(location, isImportDeclaration)) == null ? void 0 : _d.moduleSpecifier) || ((_e = findAncestor(location, isExternalModuleImportEqualsDeclaration)) == null ? void 0 : _e.moduleReference.expression) || ((_f = findAncestor(location, isExportDeclaration)) == null ? void 0 : _f.moduleSpecifier); - const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : currentSourceFile.impliedNodeFormat; + const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : host.getDefaultResolutionModeForFile(currentSourceFile); const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions); const resolvedModule = (_g = host.getResolvedModule(currentSourceFile, moduleReference, mode)) == null ? void 0 : _g.resolvedModule; - const resolutionDiagnostic = resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile); + const resolutionDiagnostic = errorNode && resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile); const sourceFile = resolvedModule && (!resolutionDiagnostic || resolutionDiagnostic === Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set) && host.getSourceFile(resolvedModule.resolvedFileName); if (sourceFile) { if (resolutionDiagnostic) { @@ -52841,7 +53034,7 @@ function createTypeChecker(host) { } if (resolvedModule.resolvedUsingTsExtension && isDeclarationFileName(moduleReference)) { const importOrExport = ((_h = findAncestor(location, isImportDeclaration)) == null ? void 0 : _h.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); - if (importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) { + if (errorNode && importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) { error2( errorNode, Diagnostics.A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead, @@ -52850,13 +53043,13 @@ function createTypeChecker(host) { } } else if (resolvedModule.resolvedUsingTsExtension && !shouldAllowImportingTsExtension(compilerOptions, currentSourceFile.fileName)) { const importOrExport = ((_i = findAncestor(location, isImportDeclaration)) == null ? void 0 : _i.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); - if (!((importOrExport == null ? void 0 : importOrExport.isTypeOnly) || findAncestor(location, isImportTypeNode))) { + if (errorNode && !((importOrExport == null ? void 0 : importOrExport.isTypeOnly) || findAncestor(location, isImportTypeNode))) { const tsExtension = Debug.checkDefined(tryExtractTSExtension(moduleReference)); error2(errorNode, Diagnostics.An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled, tsExtension); } } if (sourceFile.symbol) { - if (resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) { + if (errorNode && resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) { errorOnImplicitAnyModule( /*isError*/ false, @@ -52867,7 +53060,7 @@ function createTypeChecker(host) { moduleReference ); } - if (moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */) { + if (errorNode && (moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */)) { const isSyncImport = currentSourceFile.impliedNodeFormat === 1 /* CommonJS */ && !findAncestor(location, isImportCall) || !!findAncestor(location, isImportEqualsDeclaration); const overrideHost = findAncestor(location, (l) => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l) || isJSDocImportTag(l)); if (isSyncImport && sourceFile.impliedNodeFormat === 99 /* ESNext */ && !hasResolutionModeOverride(overrideHost)) { @@ -52877,41 +53070,7 @@ function createTypeChecker(host) { let diagnosticDetails; const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); if (ext === ".ts" /* Ts */ || ext === ".js" /* Js */ || ext === ".tsx" /* Tsx */ || ext === ".jsx" /* Jsx */) { - const scope = currentSourceFile.packageJsonScope; - const targetExt = ext === ".ts" /* Ts */ ? ".mts" /* Mts */ : ext === ".js" /* Js */ ? ".mjs" /* Mjs */ : void 0; - if (scope && !scope.contents.packageJsonContent.type) { - if (targetExt) { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, - targetExt, - combinePaths(scope.packageDirectory, "package.json") - ); - } else { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, - combinePaths(scope.packageDirectory, "package.json") - ); - } - } else { - if (targetExt) { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, - targetExt - ); - } else { - diagnosticDetails = chainDiagnosticMessages( - /*details*/ - void 0, - Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module - ); - } - } + diagnosticDetails = createModeMismatchDetails(currentSourceFile); } diagnostics.add(createDiagnosticForNodeFromMessageChain( getSourceFileOfNode(errorNode), @@ -52927,7 +53086,7 @@ function createTypeChecker(host) { } return getMergedSymbol(sourceFile.symbol); } - if (moduleNotFoundError) { + if (errorNode && moduleNotFoundError && !isSideEffectImport(errorNode)) { error2(errorNode, Diagnostics.File_0_is_not_a_module, sourceFile.fileName); } return void 0; @@ -52942,6 +53101,9 @@ function createTypeChecker(host) { return getMergedSymbol(pattern.symbol); } } + if (!errorNode) { + return void 0; + } if (resolvedModule && !resolutionExtensionIsTSOrJson(resolvedModule.extension) && resolutionDiagnostic === void 0 || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { if (isForAugmentation) { const diag2 = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; @@ -53009,6 +53171,9 @@ function createTypeChecker(host) { } } function errorOnImplicitAnyModule(isError, errorNode, sourceFile, mode, { packageId, resolvedFileName }, moduleReference) { + if (isSideEffectImport(errorNode)) { + return; + } let errorInfo; if (!isExternalModuleNameRelative(moduleReference) && packageId) { errorInfo = createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageId.name); @@ -53074,7 +53239,7 @@ function createTypeChecker(host) { return cloneTypeAsModuleType(symbol, defaultOnlyType, referenceParent); } const targetFile = (_a = moduleSymbol == null ? void 0 : moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); - const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getUsageModeForExpression(reference), targetFile.impliedNodeFormat); + const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getEmitSyntaxForModuleSpecifierExpression(reference), host.getImpliedNodeFormatForEmit(targetFile)); if (getESModuleInterop(compilerOptions) || isEsmCjsRef) { let sigs = getSignaturesOfStructuredType(type, 0 /* Call */); if (!sigs || !sigs.length) { @@ -53937,6 +54102,7 @@ function createTypeChecker(host) { } function symbolToString(symbol, enclosingDeclaration, meaning, flags = 4 /* AllowAnyNodeKind */, writer) { let nodeFlags = 70221824 /* IgnoreErrors */; + let internalNodeFlags = 0 /* None */; if (flags & 2 /* UseOnlyExternalAliasing */) { nodeFlags |= 128 /* UseOnlyExternalAliasing */; } @@ -53947,15 +54113,15 @@ function createTypeChecker(host) { nodeFlags |= 16384 /* UseAliasDefinedOutsideCurrentScope */; } if (flags & 32 /* DoNotIncludeSymbolChain */) { - nodeFlags |= 134217728 /* DoNotIncludeSymbolChain */; + internalNodeFlags |= 4 /* DoNotIncludeSymbolChain */; } if (flags & 16 /* WriteComputedProps */) { - nodeFlags |= 1073741824 /* WriteComputedProps */; + internalNodeFlags |= 1 /* WriteComputedProps */; } const builder = flags & 4 /* AllowAnyNodeKind */ ? nodeBuilder.symbolToNode : nodeBuilder.symbolToEntityName; return writer ? symbolToStringWorker(writer).getText() : usingSingleLineStringWriter(symbolToStringWorker); function symbolToStringWorker(writer2) { - const entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); + const entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags); const printer = (enclosingDeclaration == null ? void 0 : enclosingDeclaration.kind) === 307 /* SourceFile */ ? createPrinterWithRemoveCommentsNeverAsciiEscape() : createPrinterWithRemoveComments(); const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); printer.writeNode( @@ -53992,7 +54158,13 @@ function createTypeChecker(host) { } function typeToString(type, enclosingDeclaration, flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer = createTextWriter("")) { const noTruncation = compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */; - const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0)); + const typeNode = nodeBuilder.typeToTypeNode( + type, + enclosingDeclaration, + toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0 /* None */), + /*internalFlags*/ + void 0 + ); if (typeNode === void 0) return Debug.fail("should always get typenode"); const printer = type !== unresolvedType ? createPrinterWithRemoveComments() : createPrinterWithDefaults(); const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); @@ -54041,31 +54213,31 @@ function createTypeChecker(host) { } function createNodeBuilder() { return { - typeToTypeNode: (type, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => typeToTypeNodeHelper(type, context)), - typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)), - expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)), - serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)), - serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => serializeReturnTypeForSignature(context, signature)), - indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper( + typeToTypeNode: (type, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeToTypeNodeHelper(type, context)), + typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)), + expressionOrTypeToTypeNode: (expr, type, addUndefined, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => expressionOrTypeToTypeNode(context, expr, type, addUndefined)), + serializeTypeForDeclaration: (declaration, type, symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => serializeTypeForDeclaration(context, declaration, type, symbol)), + serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => serializeReturnTypeForSignature(context, signature)), + indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper( indexInfo, context, /*typeNode*/ void 0 )), - signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => signatureToSignatureDeclarationHelper(signature, kind, context)), - symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => symbolToName( + signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => signatureToSignatureDeclarationHelper(signature, kind, context)), + symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToName( symbol, context, meaning, /*expectsIdentifier*/ false )), - symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => symbolToExpression(symbol, context, meaning)), - symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => typeParametersToTypeParameterDeclarations(symbol, context)), - symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => symbolToParameterDeclaration(symbol, context)), - typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => typeParameterToDeclaration(parameter, context)), - symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)), - symbolToNode: (symbol, meaning, enclosingDeclaration, flags, tracker) => withContext2(enclosingDeclaration, flags, tracker, (context) => symbolToNode(symbol, context, meaning)) + symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToExpression(symbol, context, meaning)), + symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParametersToTypeParameterDeclarations(symbol, context)), + symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToParameterDeclaration(symbol, context)), + typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParameterToDeclaration(parameter, context)), + symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)), + symbolToNode: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToNode(symbol, context, meaning)) }; function getTypeFromTypeNode2(context, node, noMappedTypes) { const type = getTypeFromTypeNodeWithoutContext(node); @@ -54081,19 +54253,26 @@ function createTypeChecker(host) { if (!location) { return range; } - if (!context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(getOriginalNode(location))) { - return setOriginalNode(range, location); + let original = range.original; + while (original && original !== location) { + original = original.original; + } + if (!original) { + setOriginalNode(range, location); + } + if (context.enclosingFile && context.enclosingFile === getSourceFileOfNode(getOriginalNode(location))) { + return setTextRange(range, location); } - return setTextRange(setOriginalNode(range, location), location); + return range; } function expressionOrTypeToTypeNode(context, expr, type, addUndefined) { - const oldFlags = context.flags; - if (expr && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + const restoreFlags = saveRestoreFlags(context); + if (expr && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeTypeOfExpression(expr, context, addUndefined); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; + context.internalFlags |= 2 /* NoSyntacticPrinter */; const result = expressionOrTypeToTypeNodeHelper(context, expr, type, addUndefined); - context.flags = oldFlags; + restoreFlags(); return result; } function expressionOrTypeToTypeNodeHelper(context, expr, type, addUndefined) { @@ -54146,7 +54325,7 @@ function createTypeChecker(host) { return void 0; } function symbolToNode(symbol, context, meaning) { - if (context.flags & 1073741824 /* WriteComputedProps */) { + if (context.internalFlags & 1 /* WriteComputedProps */) { if (symbol.valueDeclaration) { const name = getNameOfDeclaration(symbol.valueDeclaration); if (name && isComputedPropertyName(name)) return name; @@ -54159,12 +54338,13 @@ function createTypeChecker(host) { } return symbolToExpression(symbol, context, meaning); } - function withContext2(enclosingDeclaration, flags, tracker, cb) { - const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : flags & 134217728 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; + function withContext2(enclosingDeclaration, flags, internalFlags, tracker, cb) { + const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : (internalFlags || 0 /* None */) & 4 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; const context = { enclosingDeclaration, enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration), flags: flags || 0 /* None */, + internalFlags: internalFlags || 0 /* None */, tracker: void 0, encounteredError: false, reportedDiagnostic: false, @@ -54194,14 +54374,23 @@ function createTypeChecker(host) { } return context.encounteredError ? void 0 : resultingNode; } + function saveRestoreFlags(context) { + const flags = context.flags; + const internalFlags = context.internalFlags; + return restore; + function restore() { + context.flags = flags; + context.internalFlags = internalFlags; + } + } function checkTruncationLength(context) { if (context.truncating) return context.truncating; return context.truncating = context.approximateLength > (context.flags & 1 /* NoTruncation */ ? noTruncationMaximumTruncationLength : defaultMaximumTruncationLength); } function typeToTypeNodeHelper(type, context) { - const savedFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); const typeNode = typeToTypeNodeWorker(type, context); - context.flags = savedFlags; + restoreFlags(); return typeNode; } function typeToTypeNodeWorker(type, context) { @@ -54655,7 +54844,7 @@ function createTypeChecker(host) { context.symbolDepth = /* @__PURE__ */ new Map(); } const links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration); - const key = `${getTypeId(type2)}|${context.flags}`; + const key = `${getTypeId(type2)}|${context.flags}|${context.internalFlags}`; if (links) { links.serializedTypes || (links.serializedTypes = /* @__PURE__ */ new Map()); } @@ -54761,10 +54950,10 @@ function createTypeChecker(host) { } return typeToTypeNodeHelper(getIntersectionType(types), context); } - const savedFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 4194304 /* InObjectTypeLiteral */; const members = createTypeNodesFromResolvedType(resolved); - context.flags = savedFlags; + restoreFlags(); const typeLiteralNode = factory.createTypeLiteralNode(members); context.approximateLength += 2; setEmitFlags(typeLiteralNode, context.flags & 1024 /* MultilineObjectLiterals */ ? 0 : 1 /* SingleLine */); @@ -54827,23 +55016,51 @@ function createTypeChecker(host) { } while (i < length2 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent2); if (!rangeEquals(outerTypeParameters, typeArguments, start, i)) { const typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context); - const flags2 = context.flags; + const restoreFlags2 = saveRestoreFlags(context); context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; const ref = symbolToTypeNode(parent2, context, 788968 /* Type */, typeArgumentSlice); - context.flags = flags2; + restoreFlags2(); resultType = !resultType ? ref : appendReferenceToType(resultType, ref); } } } let typeArgumentNodes; if (typeArguments.length > 0) { - const typeParameterCount = (type2.target.typeParameters || emptyArray).length; + let typeParameterCount = 0; + if (type2.target.typeParameters) { + typeParameterCount = Math.min(type2.target.typeParameters.length, typeArguments.length); + if (isReferenceToType2(type2, getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalIterableIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalAsyncIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalAsyncIterableIteratorType( + /*reportErrors*/ + false + ))) { + if (!type2.node || !isTypeReferenceNode(type2.node) || !type2.node.typeArguments || type2.node.typeArguments.length < typeParameterCount) { + while (typeParameterCount > 0) { + const typeArgument = typeArguments[typeParameterCount - 1]; + const typeParameter = type2.target.typeParameters[typeParameterCount - 1]; + const defaultType = getDefaultFromTypeParameter(typeParameter); + if (!defaultType || !isTypeIdenticalTo(typeArgument, defaultType)) { + break; + } + typeParameterCount--; + } + } + } + } typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); } - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; const finalRef = symbolToTypeNode(type2.symbol, context, 788968 /* Type */, typeArgumentNodes); - context.flags = flags; + restoreFlags(); return !resultType ? finalRef : appendReferenceToType(resultType, finalRef); } } @@ -55155,7 +55372,7 @@ function createTypeChecker(host) { } } if (seenNames) { - const saveContextFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 64 /* UseFullyQualifiedType */; seenNames.forEach((types2) => { if (!arrayIsHomogeneous(types2, ([a], [b]) => typesAreSameReference(a, b))) { @@ -55164,7 +55381,7 @@ function createTypeChecker(host) { } } }); - context.flags = saveContextFlags; + restoreFlags(); } return result; } @@ -55216,19 +55433,19 @@ function createTypeChecker(host) { } else { typeParameters = signature.typeParameters && signature.typeParameters.map((parameter) => typeParameterToDeclaration(parameter, context)); } - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags &= ~256 /* SuppressAnyReturnType */; const parameters = (some(expandedParams, (p) => p !== expandedParams[expandedParams.length - 1] && !!(getCheckFlags(p) & 32768 /* RestParameter */)) ? signature.parameters : expandedParams).map((parameter) => symbolToParameterDeclaration(parameter, context, kind === 176 /* Constructor */)); const thisParameter = context.flags & 33554432 /* OmitThisParameter */ ? void 0 : tryGetThisParameterDeclaration(signature, context); if (thisParameter) { parameters.unshift(thisParameter); } - context.flags = flags; + restoreFlags(); const returnTypeNode = serializeReturnTypeForSignature(context, signature); let modifiers = options == null ? void 0 : options.modifiers; if (kind === 185 /* ConstructorType */ && signature.flags & 4 /* Abstract */) { - const flags2 = modifiersToFlags(modifiers); - modifiers = factory.createModifiersFromModifierFlags(flags2 | 64 /* Abstract */); + const flags = modifiersToFlags(modifiers); + modifiers = factory.createModifiersFromModifierFlags(flags | 64 /* Abstract */); } const node = kind === 179 /* CallSignature */ ? factory.createCallSignature(typeParameters, parameters, returnTypeNode) : kind === 180 /* ConstructSignature */ ? factory.createConstructSignature(typeParameters, parameters, returnTypeNode) : kind === 173 /* MethodSignature */ ? factory.createMethodSignature(modifiers, (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), options == null ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) : kind === 174 /* MethodDeclaration */ ? factory.createMethodDeclaration( modifiers, @@ -55448,13 +55665,13 @@ function createTypeChecker(host) { } } function typeParameterToDeclarationWithConstraint(type, context, constraintNode) { - const savedContextFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags &= ~512 /* WriteTypeParametersInQualifiedName */; const modifiers = factory.createModifiersFromModifierFlags(getTypeParameterModifiers(type)); const name = typeParameterToName(type, context); const defaultParameter = getDefaultFromTypeParameter(type); const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context); - context.flags = savedContextFlags; + restoreFlags(); return factory.createTypeParameterDeclaration(modifiers, name, constraintNode, defaultParameterNode); } function typeToTypeNodeHelperWithPossibleReusableTypeNode(type, typeNode, context) { @@ -55558,7 +55775,7 @@ function createTypeChecker(host) { function lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol) { let chain; const isTypeParameter = symbol.flags & 262144 /* TypeParameter */; - if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */) && !(context.flags & 134217728 /* DoNotIncludeSymbolChain */)) { + if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */) && !(context.internalFlags & 4 /* DoNotIncludeSymbolChain */)) { chain = Debug.checkDefined(getSymbolChain( symbol, meaning, @@ -55694,8 +55911,10 @@ function createTypeChecker(host) { } return getSourceFileOfNode(getNonAugmentationDeclaration(symbol)).fileName; } + const enclosingDeclaration = getOriginalNode(context.enclosingDeclaration); + const originalModuleSpecifier = canHaveModuleSpecifier(enclosingDeclaration) ? tryGetModuleSpecifierFromDeclaration(enclosingDeclaration) : void 0; const contextFile = context.enclosingFile; - const resolutionMode = overrideImportMode || (contextFile == null ? void 0 : contextFile.impliedNodeFormat); + const resolutionMode = overrideImportMode || originalModuleSpecifier && host.getModeForUsageLocation(contextFile, originalModuleSpecifier) || contextFile && host.getDefaultResolutionModeForFile(contextFile); const cacheKey = createModeAwareCacheKey(contextFile.path, resolutionMode); const links = getSymbolLinks(symbol); let specifier = links.specifierCache && links.specifierCache.get(cacheKey); @@ -56080,21 +56299,21 @@ function createTypeChecker(host) { } function serializeTypeForDeclaration(context, declaration, type, symbol) { var _a, _b; - const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration); + const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration); const enclosingDeclaration = context.enclosingDeclaration; - const oldFlags = context.flags; - if (declaration && hasInferredType(declaration) && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + const restoreFlags = saveRestoreFlags(context); + if (declaration && hasInferredType(declaration) && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeTypeOfDeclaration(declaration, context); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; - if (enclosingDeclaration && (!isErrorType(type) || context.flags & 1 /* AllowUnresolvedNames */)) { + context.internalFlags |= 2 /* NoSyntacticPrinter */; + if (enclosingDeclaration && (!isErrorType(type) || context.internalFlags & 8 /* AllowUnresolvedNames */)) { const declWithExistingAnnotation = declaration && getNonlocalEffectiveTypeAnnotationNode(declaration) ? declaration : getDeclarationWithTypeAnnotation(symbol); if (declWithExistingAnnotation && !isFunctionLikeDeclaration(declWithExistingAnnotation) && !isGetAccessorDeclaration(declWithExistingAnnotation)) { const existing = getNonlocalEffectiveTypeAnnotationNode(declWithExistingAnnotation); const addUndefined = addUndefinedForParameter || !!(symbol.flags & 4 /* Property */ && symbol.flags & 16777216 /* Optional */ && isOptionalDeclaration(declWithExistingAnnotation) && ((_a = symbol.links) == null ? void 0 : _a.mappedType) && containsNonMissingUndefinedType(type)); const result2 = !isTypePredicateNode(existing) && tryReuseExistingTypeNode(context, existing, type, declWithExistingAnnotation, addUndefined); if (result2) { - context.flags = oldFlags; + restoreFlags(); return result2; } } @@ -56105,7 +56324,7 @@ function createTypeChecker(host) { const decl = declaration ?? symbol.valueDeclaration ?? ((_b = symbol.declarations) == null ? void 0 : _b[0]); const expr = decl && isDeclarationWithPossibleInnerTypeNodeReuse(decl) ? getPossibleTypeNodeReuseExpression(decl) : void 0; const result = expressionOrTypeToTypeNode(context, expr, type, addUndefinedForParameter); - context.flags = oldFlags; + restoreFlags(); return result; } function typeNodeIsEquivalentToType(annotatedDeclaration, type, typeFromTypeNode) { @@ -56119,26 +56338,26 @@ function createTypeChecker(host) { } function serializeReturnTypeForSignature(context, signature) { const suppressAny = context.flags & 256 /* SuppressAnyReturnType */; - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); if (suppressAny) context.flags &= ~256 /* SuppressAnyReturnType */; let returnTypeNode; const returnType = getReturnTypeOfSignature(signature); if (returnType && !(suppressAny && isTypeAny(returnType))) { - if (signature.declaration && !(context.flags & -2147483648 /* NoSyntacticPrinter */)) { + if (signature.declaration && !(context.internalFlags & 2 /* NoSyntacticPrinter */)) { syntacticNodeBuilder.serializeReturnTypeForSignature(signature.declaration, context); } - context.flags |= -2147483648 /* NoSyntacticPrinter */; + context.internalFlags |= 2 /* NoSyntacticPrinter */; returnTypeNode = serializeReturnTypeForSignatureWorker(context, signature); } else if (!suppressAny) { returnTypeNode = factory.createKeywordTypeNode(133 /* AnyKeyword */); } - context.flags = flags; + restoreFlags(); return returnTypeNode; } function serializeReturnTypeForSignatureWorker(context, signature) { const typePredicate = getTypePredicateOfSignature(signature); const type = getReturnTypeOfSignature(signature); - if (context.enclosingDeclaration && (!isErrorType(type) || context.flags & 1 /* AllowUnresolvedNames */) && signature.declaration && !nodeIsSynthesized(signature.declaration)) { + if (context.enclosingDeclaration && (!isErrorType(type) || context.internalFlags & 8 /* AllowUnresolvedNames */) && signature.declaration && !nodeIsSynthesized(signature.declaration)) { const annotation = getNonlocalEffectiveReturnTypeAnnotationNode(signature.declaration); if (annotation) { const result = tryReuseExistingTypeNode(context, annotation, type, context.enclosingDeclaration); @@ -56212,6 +56431,8 @@ function createTypeChecker(host) { } introducesError = true; return { introducesError, node, sym }; + } else { + sym = symAtLocation; } } if (sym) { @@ -56638,7 +56859,7 @@ function createTypeChecker(host) { if (!hasDynamicName(node)) { return visitEachChild2(node, visitExistingNodeTreeSymbols); } - if (!(context.flags & 1 /* AllowUnresolvedNames */ && isEntityNameExpression(node.name.expression) && checkComputedPropertyName(node.name).flags & 1 /* Any */)) { + if (!(context.internalFlags & 8 /* AllowUnresolvedNames */ && isEntityNameExpression(node.name.expression) && checkComputedPropertyName(node.name).flags & 1 /* Any */)) { return void 0; } } @@ -56989,9 +57210,10 @@ function createTypeChecker(host) { if (index >= 0) { const exportDecl = statements[index]; const replacements = mapDefined(exportDecl.exportClause.elements, (e) => { - if (!e.propertyName) { + if (!e.propertyName && e.name.kind !== 11 /* StringLiteral */) { + const name = e.name; const indices = indicesOf(statements); - const associatedIndices = filter(indices, (i) => nodeHasName(statements[i], e.name)); + const associatedIndices = filter(indices, (i) => nodeHasName(statements[i], name)); if (length(associatedIndices) && every(associatedIndices, (i) => canHaveExportModifier(statements[i]))) { for (const index2 of associatedIndices) { statements[index2] = addExportModifier(statements[index2]); @@ -57289,7 +57511,7 @@ function createTypeChecker(host) { const typeParamDecls = map(typeParams, (p) => typeParameterToDeclaration(p, context)); const jsdocAliasDecl = (_a2 = symbol.declarations) == null ? void 0 : _a2.find(isJSDocTypeAlias); const commentText = getTextOfJSDocComment(jsdocAliasDecl ? jsdocAliasDecl.comment || jsdocAliasDecl.parent.comment : void 0); - const oldFlags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 8388608 /* InTypeAlias */; const oldEnclosingDecl = context.enclosingDeclaration; context.enclosingDeclaration = jsdocAliasDecl; @@ -57313,7 +57535,7 @@ function createTypeChecker(host) { ), modifierFlags ); - context.flags = oldFlags; + restoreFlags(); context.enclosingDeclaration = oldEnclosingDecl; } function serializeInterface(symbol, symbolName2, modifierFlags) { @@ -57625,7 +57847,7 @@ function createTypeChecker(host) { function getSomeTargetNameFromDeclarations(declarations) { return firstDefined(declarations, (d) => { if (isImportSpecifier(d) || isExportSpecifier(d)) { - return idText(d.propertyName || d.name); + return moduleExportNameTextUnescaped(d.propertyName || d.name); } if (isBinaryExpression(d) || isExportAssignment(d)) { const expression = isExportAssignment(d) ? d.expression : d.right; @@ -57633,7 +57855,7 @@ function createTypeChecker(host) { return idText(expression.name); } } - if (isAliasSymbolDeclaration2(d)) { + if (isAliasSymbolDeclaration(d)) { const name = getNameOfDeclaration(d); if (name && isIdentifier(name)) { return idText(name); @@ -57643,7 +57865,7 @@ function createTypeChecker(host) { }); } function serializeAsAlias(symbol, localName, modifierFlags) { - var _a2, _b, _c, _d, _e, _f; + var _a2, _b, _c, _d, _e; const node = getDeclarationOfAliasSymbol(symbol); if (!node) return Debug.fail(); const target = getMergedSymbol(getTargetOfAliasDeclaration( @@ -57841,8 +58063,11 @@ function createTypeChecker(host) { } case 281 /* ExportSpecifier */: const specifier = node.parent.parent.moduleSpecifier; - if (specifier && ((_f = node.propertyName) == null ? void 0 : _f.escapedText) === "default" /* Default */) { - verbatimTargetName = "default" /* Default */; + if (specifier) { + const propertyName = node.propertyName; + if (propertyName && moduleExportNameIsDefault(propertyName)) { + verbatimTargetName = "default" /* Default */; + } } serializeExportSpecifier( unescapeLeadingUnderscores(symbol.escapedName), @@ -58319,10 +58544,10 @@ function createTypeChecker(host) { } function getNameCandidateWorker(symbol, localName) { if (localName === "default" /* Default */ || localName === "__class" /* Class */ || localName === "__function" /* Function */) { - const flags = context.flags; + const restoreFlags = saveRestoreFlags(context); context.flags |= 16777216 /* InInitialEntityName */; const nameCandidate = getNameOfSymbolAsWritten(symbol, context); - context.flags = flags; + restoreFlags(); localName = nameCandidate.length > 0 && isSingleOrDoubleQuote(nameCandidate.charCodeAt(0)) ? stripQuotes(nameCandidate) : nameCandidate; } if (localName === "default" /* Default */) { @@ -58330,7 +58555,7 @@ function createTypeChecker(host) { } else if (localName === "export=" /* ExportEquals */) { localName = "_exports"; } - localName = isIdentifierText(localName, languageVersion) && !isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-zA-Z0-9]/g, "_"); + localName = isIdentifierText(localName, languageVersion) && !isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-z0-9]/gi, "_"); return localName; } function getInternalSymbolName(symbol, localName) { @@ -58555,7 +58780,7 @@ function createTypeChecker(host) { } function collectLinkedAliases(node, setVisibility) { let exportSymbol; - if (node.parent && node.parent.kind === 277 /* ExportAssignment */) { + if (node.kind !== 11 /* StringLiteral */ && node.parent && node.parent.kind === 277 /* ExportAssignment */) { exportSymbol = resolveName( node, node, @@ -58840,6 +59065,7 @@ function createTypeChecker(host) { } else if (strictNullChecks && pattern.parent.initializer && !hasTypeFacts(getTypeOfInitializer(pattern.parent.initializer), 65536 /* EQUndefined */)) { parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */); } + const accessFlags = 32 /* ExpressionPosition */ | (noTupleBoundsCheck || hasDefaultValue(declaration) ? 16 /* AllowMissing */ : 0); let type; if (pattern.kind === 206 /* ObjectBindingPattern */) { if (declaration.dotDotDotToken) { @@ -58858,7 +59084,7 @@ function createTypeChecker(host) { } else { const name = declaration.propertyName || declaration.name; const indexType = getLiteralTypeFromPropertyName(name); - const declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name); + const declaredType = getIndexedAccessType(parentType, indexType, accessFlags, name); type = getFlowTypeOfDestructuring(declaration, declaredType); } } else { @@ -58869,7 +59095,6 @@ function createTypeChecker(host) { type = everyType(baseConstraint, isTupleType) ? mapType(baseConstraint, (t) => sliceTupleType(t, index)) : createArrayType(elementType); } else if (isArrayLikeType(parentType)) { const indexType = getNumberLiteralType(index); - const accessFlags = 32 /* ExpressionPosition */ | (noTupleBoundsCheck || hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0); const declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType; type = getFlowTypeOfDestructuring(declaration, declaredType); } else { @@ -59355,7 +59580,7 @@ function createTypeChecker(host) { /*reportErrors*/ false ) : unknownType; - return addOptionality(widenTypeInferredFromInitializer(element, checkDeclarationInitializer(element, reportErrors2 ? 0 /* Normal */ : 1 /* Contextual */, contextualType))); + return addOptionality(widenTypeInferredFromInitializer(element, checkDeclarationInitializer(element, 0 /* Normal */, contextualType))); } if (isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors2); @@ -59426,7 +59651,10 @@ function createTypeChecker(host) { return result; } function getTypeFromBindingPattern(pattern, includePatternInType = false, reportErrors2 = false) { - return pattern.kind === 206 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2); + if (includePatternInType) contextualBindingPatterns.push(pattern); + const result = pattern.kind === 206 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2); + if (includePatternInType) contextualBindingPatterns.pop(); + return result; } function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors2) { return widenTypeForVariableLikeDeclaration(getTypeForVariableLikeDeclaration( @@ -59507,18 +59735,18 @@ function createTypeChecker(host) { } return false; } - function getTypeOfVariableOrParameterOrProperty(symbol, checkMode) { + function getTypeOfVariableOrParameterOrProperty(symbol) { const links = getSymbolLinks(symbol); if (!links.type) { - const type = getTypeOfVariableOrParameterOrPropertyWorker(symbol, checkMode); - if (!links.type && !isParameterOfContextSensitiveSignature(symbol) && !checkMode) { + const type = getTypeOfVariableOrParameterOrPropertyWorker(symbol); + if (!links.type && !isParameterOfContextSensitiveSignature(symbol)) { links.type = type; } return type; } return links.type; } - function getTypeOfVariableOrParameterOrPropertyWorker(symbol, checkMode) { + function getTypeOfVariableOrParameterOrPropertyWorker(symbol) { if (symbol.flags & 4194304 /* Prototype */) { return getTypeOfPrototypeProperty(symbol); } @@ -59553,9 +59781,6 @@ function createTypeChecker(host) { if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { return getTypeOfFuncClassEnumModule(symbol); } - if (isBindingElement(declaration) && checkMode === 1 /* Contextual */) { - return errorType; - } return reportCircularityError(symbol); } let type; @@ -59593,9 +59818,6 @@ function createTypeChecker(host) { if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { return getTypeOfFuncClassEnumModule(symbol); } - if (isBindingElement(declaration) && checkMode === 1 /* Contextual */) { - return type; - } return reportCircularityError(symbol); } return type; @@ -59824,7 +60046,7 @@ function createTypeChecker(host) { } return getTypeOfSymbol(symbol); } - function getTypeOfSymbol(symbol, checkMode) { + function getTypeOfSymbol(symbol) { const checkFlags = getCheckFlags(symbol); if (checkFlags & 65536 /* DeferredType */) { return getTypeOfSymbolWithDeferredType(symbol); @@ -59839,7 +60061,7 @@ function createTypeChecker(host) { return getTypeOfReverseMappedSymbol(symbol); } if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { - return getTypeOfVariableOrParameterOrProperty(symbol, checkMode); + return getTypeOfVariableOrParameterOrProperty(symbol); } if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { return getTypeOfFuncClassEnumModule(symbol); @@ -59858,6 +60080,17 @@ function createTypeChecker(host) { function getNonMissingTypeOfSymbol(symbol) { return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */)); } + function isReferenceToSomeType(type, targets) { + if (type === void 0 || (getObjectFlags(type) & 4 /* Reference */) === 0) { + return false; + } + for (const target of targets) { + if (type.target === target) { + return true; + } + } + return false; + } function isReferenceToType2(type, target) { return type !== void 0 && target !== void 0 && (getObjectFlags(type) & 4 /* Reference */) !== 0 && type.target === target; } @@ -59897,7 +60130,8 @@ function createTypeChecker(host) { if (!node) { return void 0; } - switch (node.kind) { + const kind = node.kind; + switch (kind) { case 263 /* ClassDeclaration */: case 231 /* ClassExpression */: case 264 /* InterfaceDeclaration */: @@ -59919,13 +60153,19 @@ function createTypeChecker(host) { case 200 /* MappedType */: case 194 /* ConditionalType */: { const outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); - if (node.kind === 200 /* MappedType */) { + if ((kind === 218 /* FunctionExpression */ || kind === 219 /* ArrowFunction */ || isObjectLiteralMethod(node)) && isContextSensitive(node)) { + const signature = firstOrUndefined(getSignaturesOfType(getTypeOfSymbol(getSymbolOfDeclaration(node)), 0 /* Call */)); + if (signature && signature.typeParameters) { + return [...outerTypeParameters || emptyArray, ...signature.typeParameters]; + } + } + if (kind === 200 /* MappedType */) { return append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter))); - } else if (node.kind === 194 /* ConditionalType */) { + } else if (kind === 194 /* ConditionalType */) { return concatenate(outerTypeParameters, getInferTypeParameters(node)); } const outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, getEffectiveTypeParameterDeclarations(node)); - const thisType = includeThisTypes && (node.kind === 263 /* ClassDeclaration */ || node.kind === 231 /* ClassExpression */ || node.kind === 264 /* InterfaceDeclaration */ || isJSConstructor(node)) && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node)).thisType; + const thisType = includeThisTypes && (kind === 263 /* ClassDeclaration */ || kind === 231 /* ClassExpression */ || kind === 264 /* InterfaceDeclaration */ || isJSConstructor(node)) && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node)).thisType; return thisType ? append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters; } case 341 /* JSDocParameterTag */: @@ -60279,6 +60519,9 @@ function createTypeChecker(host) { links.instantiations = /* @__PURE__ */ new Map(); links.instantiations.set(getTypeListId(typeParameters), type); } + if (type === intrinsicMarkerType && symbol.escapedName === "BuiltinIteratorReturn") { + type = getBuiltinIteratorReturnType(); + } } else { type = errorType; if (declaration.kind === 340 /* JSDocEnumTag */) { @@ -60743,18 +60986,18 @@ function createTypeChecker(host) { function getExpandedParameters(sig, skipUnionExpanding) { if (signatureHasRestParameter(sig)) { const restIndex = sig.parameters.length - 1; - const restName = sig.parameters[restIndex].escapedName; - const restType = getTypeOfSymbol(sig.parameters[restIndex]); + const restSymbol = sig.parameters[restIndex]; + const restType = getTypeOfSymbol(restSymbol); if (isTupleType(restType)) { - return [expandSignatureParametersWithTupleMembers(restType, restIndex, restName)]; + return [expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol)]; } else if (!skipUnionExpanding && restType.flags & 1048576 /* Union */ && every(restType.types, isTupleType)) { - return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restName)); + return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restSymbol)); } } return [sig.parameters]; - function expandSignatureParametersWithTupleMembers(restType, restIndex, restName) { + function expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol) { const elementTypes = getTypeArguments(restType); - const associatedNames = getUniqAssociatedNamesFromTupleType(restType, restName); + const associatedNames = getUniqAssociatedNamesFromTupleType(restType, restSymbol); const restParams = map(elementTypes, (t, i) => { const name = associatedNames && associatedNames[i] ? associatedNames[i] : getParameterNameAtPosition(sig, restIndex + i, restType); const flags = restType.target.elementFlags[i]; @@ -60765,19 +61008,29 @@ function createTypeChecker(host) { }); return concatenate(sig.parameters.slice(0, restIndex), restParams); } - function getUniqAssociatedNamesFromTupleType(type, restName) { - const associatedNamesMap = /* @__PURE__ */ new Map(); - return map(type.target.labeledElementDeclarations, (labeledElement, i) => { - const name = getTupleElementLabel(labeledElement, i, restName); - const prevCounter = associatedNamesMap.get(name); - if (prevCounter === void 0) { - associatedNamesMap.set(name, 1); - return name; - } else { - associatedNamesMap.set(name, prevCounter + 1); - return `${name}_${prevCounter}`; + function getUniqAssociatedNamesFromTupleType(type, restSymbol) { + const names = map(type.target.labeledElementDeclarations, (labeledElement, i) => getTupleElementLabel(labeledElement, i, type.target.elementFlags[i], restSymbol)); + if (names) { + const duplicates = []; + const uniqueNames = /* @__PURE__ */ new Set(); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + if (!tryAddToSet(uniqueNames, name)) { + duplicates.push(i); + } } - }); + const counters = /* @__PURE__ */ new Map(); + for (const i of duplicates) { + let counter = counters.get(names[i]) ?? 1; + let name; + while (!tryAddToSet(uniqueNames, name = `${names[i]}_${counter}`)) { + counter++; + } + names[i] = name; + counters.set(names[i], counter + 1); + } + } + return names; } } function getDefaultConstructSignatures(classType) { @@ -62724,8 +62977,11 @@ function createTypeChecker(host) { true ); } + function getTypeParametersForMapper(signature) { + return sameMap(signature.typeParameters, (tp) => tp.mapper ? instantiateType(tp, tp.mapper) : tp); + } function createSignatureTypeMapper(signature, typeArguments) { - return createTypeMapper(sameMap(signature.typeParameters, (tp) => tp.mapper ? instantiateType(tp, tp.mapper) : tp), typeArguments); + return createTypeMapper(getTypeParametersForMapper(signature), typeArguments); } function getErasedSignature(signature) { return signature.typeParameters ? signature.erasedSignatureCache || (signature.erasedSignatureCache = createErasedSignature(signature)) : signature; @@ -62986,14 +63242,14 @@ function createTypeChecker(host) { var _a, _b; if (!type.resolvedTypeArguments) { if (!pushTypeResolution(type, 5 /* ResolvedTypeArguments */)) { - return ((_a = type.target.localTypeParameters) == null ? void 0 : _a.map(() => errorType)) || emptyArray; + return concatenate(type.target.outerTypeParameters, (_a = type.target.localTypeParameters) == null ? void 0 : _a.map(() => errorType)) || emptyArray; } const node = type.node; const typeArguments = !node ? emptyArray : node.kind === 183 /* TypeReference */ ? concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments2(node, type.target.localTypeParameters)) : node.kind === 188 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode); if (popTypeResolution()) { type.resolvedTypeArguments ?? (type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments); } else { - type.resolvedTypeArguments ?? (type.resolvedTypeArguments = ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray); + type.resolvedTypeArguments ?? (type.resolvedTypeArguments = concatenate(type.target.outerTypeParameters, ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray)); error2( type.node || currentNode, type.target.symbol ? Diagnostics.Type_arguments_for_0_circularly_reference_themselves : Diagnostics.Tuple_type_arguments_circularly_reference_themselves, @@ -63444,6 +63700,18 @@ function createTypeChecker(host) { const symbol = getGlobalTypeSymbol(name, reportErrors2); return symbol || reportErrors2 ? getTypeOfGlobalSymbol(symbol, arity) : void 0; } + function getGlobalBuiltinTypes(typeNames, arity) { + let types; + for (const typeName of typeNames) { + types = append(types, getGlobalType( + typeName, + arity, + /*reportErrors*/ + false + )); + } + return types ?? emptyArray; + } function getGlobalTypedPropertyDescriptorType() { return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType( "TypedPropertyDescriptor", @@ -63546,7 +63814,7 @@ function createTypeChecker(host) { return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType( "AsyncIterable", /*arity*/ - 1, + 3, reportErrors2 )) || emptyGenericType; } @@ -63562,7 +63830,18 @@ function createTypeChecker(host) { return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType( "AsyncIterableIterator", /*arity*/ - 1, + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalBuiltinAsyncIteratorTypes() { + return deferredGlobalBuiltinAsyncIteratorTypes ?? (deferredGlobalBuiltinAsyncIteratorTypes = getGlobalBuiltinTypes(["ReadableStreamAsyncIterator"], 1)); + } + function getGlobalAsyncIteratorObjectType(reportErrors2) { + return deferredGlobalAsyncIteratorObjectType || (deferredGlobalAsyncIteratorObjectType = getGlobalType( + "AsyncIteratorObject", + /*arity*/ + 3, reportErrors2 )) || emptyGenericType; } @@ -63578,7 +63857,7 @@ function createTypeChecker(host) { return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType( "Iterable", /*arity*/ - 1, + 3, reportErrors2 )) || emptyGenericType; } @@ -63594,7 +63873,21 @@ function createTypeChecker(host) { return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType( "IterableIterator", /*arity*/ - 1, + 3, + reportErrors2 + )) || emptyGenericType; + } + function getBuiltinIteratorReturnType() { + return strictBuiltinIteratorReturn ? undefinedType : anyType; + } + function getGlobalBuiltinIteratorTypes() { + return deferredGlobalBuiltinIteratorTypes ?? (deferredGlobalBuiltinIteratorTypes = getGlobalBuiltinTypes(["ArrayIterator", "MapIterator", "SetIterator", "StringIterator"], 1)); + } + function getGlobalIteratorObjectType(reportErrors2) { + return deferredGlobalIteratorObjectType || (deferredGlobalIteratorObjectType = getGlobalType( + "IteratorObject", + /*arity*/ + 3, reportErrors2 )) || emptyGenericType; } @@ -63776,7 +64069,7 @@ function createTypeChecker(host) { return createTypeFromGenericGlobalType(getGlobalIterableType( /*reportErrors*/ true - ), [iteratedType]); + ), [iteratedType, voidType, undefinedType]); } function createArrayType(elementType, readonly) { return createTypeFromGenericGlobalType(readonly ? globalReadonlyArrayType : globalArrayType, [elementType]); @@ -64440,6 +64733,12 @@ function createTypeChecker(host) { function eachUnionContains(unionTypes2, type) { for (const u of unionTypes2) { if (!containsType(u.types, type)) { + if (type === missingType) { + return containsType(u.types, undefinedType); + } + if (type === undefinedType) { + return containsType(u.types, missingType); + } const primitive = type.flags & 128 /* StringLiteral */ ? stringType : type.flags & (32 /* Enum */ | 256 /* NumberLiteral */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : void 0; if (!primitive || !containsType(u.types, primitive)) { return false; @@ -64496,6 +64795,13 @@ function createTypeChecker(host) { for (const t of u.types) { if (insertType(checked, t)) { if (eachUnionContains(unionTypes2, t)) { + if (t === undefinedType && result.length && result[0] === missingType) { + continue; + } + if (t === missingType && result.length && result[0] === undefinedType) { + result[0] = missingType; + continue; + } insertType(result, t); } } @@ -64580,7 +64886,7 @@ function createTypeChecker(host) { } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && (t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) { removeFromEach(typeSet, 65536 /* Null */); result = getUnionType([getIntersectionType(typeSet, flags), nullType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); - } else if (typeSet.length >= 4) { + } else if (typeSet.length >= 3 && types.length > 2) { const middle = Math.floor(typeSet.length / 2); result = getIntersectionType([getIntersectionType(typeSet.slice(0, middle), flags), getIntersectionType(typeSet.slice(middle), flags)], flags, aliasSymbol, aliasTypeArguments); } else { @@ -64976,7 +65282,7 @@ function createTypeChecker(host) { } if (everyType(objectType, isTupleType) && isNumericLiteralName(propName)) { const index = +propName; - if (accessNode && everyType(objectType, (t) => !t.target.hasRestElement) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) { + if (accessNode && everyType(objectType, (t) => !(t.target.combinedFlags & 12 /* Variable */)) && !(accessFlags & 16 /* AllowMissing */)) { const indexNode = getIndexNodeForAccessExpression(accessNode); if (isTupleType(objectType)) { if (index < 0) { @@ -65115,17 +65421,21 @@ function createTypeChecker(host) { return void 0; } } + if (accessFlags & 16 /* AllowMissing */ && isObjectLiteralType2(objectType)) { + return undefinedType; + } if (isJSLiteralType(objectType)) { return anyType; } if (accessNode) { const indexNode = getIndexNodeForAccessExpression(accessNode); - if (indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + if (indexNode.kind !== 10 /* BigIntLiteral */ && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { error2(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType)); } else if (indexType.flags & (4 /* String */ | 8 /* Number */)) { error2(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); } else { - error2(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); + const typeString = indexNode.kind === 10 /* BigIntLiteral */ ? "bigint" : typeToString(indexType); + error2(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeString); } } if (isTypeAny(indexType)) { @@ -67386,7 +67696,7 @@ function createTypeChecker(host) { } const id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol); const entry = enumRelation.get(id); - if (entry !== void 0 && !(!(entry & 4 /* Reported */) && entry & 2 /* Failed */ && errorReporter)) { + if (entry !== void 0 && !(entry & 2 /* Failed */ && errorReporter)) { return !!(entry & 1 /* Succeeded */); } const targetEnumType = getTypeOfSymbol(targetSymbol); @@ -67401,10 +67711,8 @@ function createTypeChecker(host) { void 0, 64 /* UseFullyQualifiedType */ )); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); - } else { - enumRelation.set(id, 2 /* Failed */); } + enumRelation.set(id, 2 /* Failed */); return false; } const sourceValue = getEnumMemberValue(getDeclarationOfKind(sourceProperty, 306 /* EnumMember */)).value; @@ -67413,26 +67721,22 @@ function createTypeChecker(host) { const sourceIsString = typeof sourceValue === "string"; const targetIsString = typeof targetValue === "string"; if (sourceValue !== void 0 && targetValue !== void 0) { - if (!errorReporter) { - enumRelation.set(id, 2 /* Failed */); - } else { + if (errorReporter) { const escapedSource = sourceIsString ? `"${escapeString(sourceValue)}"` : sourceValue; const escapedTarget = targetIsString ? `"${escapeString(targetValue)}"` : targetValue; errorReporter(Diagnostics.Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given, symbolName(targetSymbol), symbolName(targetProperty), escapedTarget, escapedSource); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); } + enumRelation.set(id, 2 /* Failed */); return false; } if (sourceIsString || targetIsString) { - if (!errorReporter) { - enumRelation.set(id, 2 /* Failed */); - } else { + if (errorReporter) { const knownStringValue = sourceValue ?? targetValue; Debug.assert(typeof knownStringValue === "string"); const escapedValue = `"${escapeString(knownStringValue)}"`; errorReporter(Diagnostics.One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value, symbolName(targetSymbol), symbolName(targetProperty), escapedValue); - enumRelation.set(id, 2 /* Failed */ | 4 /* Reported */); } + enumRelation.set(id, 2 /* Failed */); return false; } } @@ -67590,7 +67894,7 @@ function createTypeChecker(host) { /*ignoreConstraints*/ false ); - relation.set(id, 4 /* Reported */ | 2 /* Failed */); + relation.set(id, 2 /* Failed */ | (relationCount <= 0 ? 32 /* ComplexityOverflow */ : 64 /* StackDepthOverflow */)); (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "checkTypeRelatedTo_DepthLimit", { sourceId: source.id, targetId: target.id, depth: sourceDepth, targetDepth }); const message = relationCount <= 0 ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; const diag2 = error2(errorNode || currentNode, message, typeToString(source), typeToString(target)); @@ -68443,7 +68747,7 @@ function createTypeChecker(host) { ); const entry = relation.get(id); if (entry !== void 0) { - if (reportErrors2 && entry & 2 /* Failed */ && !(entry & 4 /* Reported */)) { + if (reportErrors2 && entry & 2 /* Failed */ && !(entry & 96 /* Overflow */)) { } else { if (outofbandVarianceMarkerHandler) { const saved = entry & 24 /* ReportsMask */; @@ -68454,6 +68758,11 @@ function createTypeChecker(host) { instantiateType(source2, reportUnreliableMapper); } } + if (reportErrors2 && entry & 96 /* Overflow */) { + const message = entry & 32 /* ComplexityOverflow */ ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; + reportError(message, typeToString(source2), typeToString(target2)); + overrideNextErrorInfo++; + } return entry & 1 /* Succeeded */ ? -1 /* True */ : 0 /* False */; } } @@ -68551,7 +68860,7 @@ function createTypeChecker(host) { } } } else { - relation.set(id, (reportErrors2 ? 4 /* Reported */ : 0) | 2 /* Failed */ | propagatingVarianceFlags); + relation.set(id, 2 /* Failed */ | propagatingVarianceFlags); relationCount--; resetMaybeStack( /*markAllAsSucceeded*/ @@ -69444,7 +69753,7 @@ function createTypeChecker(host) { const sourceArity = getTypeReferenceArity(source2); const targetArity = getTypeReferenceArity(target2); const sourceRestFlag = isTupleType(source2) ? source2.target.combinedFlags & 4 /* Rest */ : 4 /* Rest */; - const targetRestFlag = target2.target.combinedFlags & 4 /* Rest */; + const targetHasRestElement = !!(target2.target.combinedFlags & 12 /* Variable */); const sourceMinLength = isTupleType(source2) ? source2.target.minLength : 0; const targetMinLength = target2.target.minLength; if (!sourceRestFlag && sourceArity < targetMinLength) { @@ -69453,13 +69762,13 @@ function createTypeChecker(host) { } return 0 /* False */; } - if (!targetRestFlag && targetArity < sourceMinLength) { + if (!targetHasRestElement && targetArity < sourceMinLength) { if (reportErrors2) { reportError(Diagnostics.Source_has_0_element_s_but_target_allows_only_1, sourceMinLength, targetArity); } return 0 /* False */; } - if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) { + if (!targetHasRestElement && (sourceRestFlag || targetArity < sourceArity)) { if (reportErrors2) { if (sourceMinLength < targetMinLength) { reportError(Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength); @@ -69473,7 +69782,6 @@ function createTypeChecker(host) { const targetTypeArguments = getTypeArguments(target2); const targetStartCount = getStartElementCount(target2.target, 11 /* NonRest */); const targetEndCount = getEndElementCount(target2.target, 11 /* NonRest */); - const targetHasRestElement = target2.target.hasRestElement; let canExcludeDiscriminants = !!excludedProperties; for (let sourcePosition = 0; sourcePosition < sourceArity; sourcePosition++) { const sourceFlags = isTupleType(source2) ? source2.target.elementFlags[sourcePosition] : 4 /* Rest */; @@ -69933,7 +70241,7 @@ function createTypeChecker(host) { for (let i = 0; i < types.length; i++) { if (include[i]) { const targetType = getTypeOfPropertyOrIndexSignatureOfType(types[i], propertyName); - if (targetType && related(getDiscriminatingType(), targetType)) { + if (targetType && someType(getDiscriminatingType(), (t) => !!related(t, targetType))) { matched = true; } else { include[i] = 3 /* Maybe */; @@ -70713,6 +71021,7 @@ function createTypeChecker(host) { return type; } function reportWideningErrorsInType(type) { + var _a; let errorReported = false; if (getObjectFlags(type) & 65536 /* ContainsWideningType */) { if (type.flags & 1048576 /* Union */) { @@ -70720,27 +71029,28 @@ function createTypeChecker(host) { errorReported = true; } else { for (const t of type.types) { - if (reportWideningErrorsInType(t)) { - errorReported = true; - } + errorReported || (errorReported = reportWideningErrorsInType(t)); } } - } - if (isArrayOrTupleType(type)) { + } else if (isArrayOrTupleType(type)) { for (const t of getTypeArguments(type)) { - if (reportWideningErrorsInType(t)) { - errorReported = true; - } + errorReported || (errorReported = reportWideningErrorsInType(t)); } - } - if (isObjectLiteralType2(type)) { + } else if (isObjectLiteralType2(type)) { for (const p of getPropertiesOfObjectType(type)) { const t = getTypeOfSymbol(p); if (getObjectFlags(t) & 65536 /* ContainsWideningType */) { - if (!reportWideningErrorsInType(t)) { - error2(p.valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); + errorReported = reportWideningErrorsInType(t); + if (!errorReported) { + const valueDeclaration = (_a = p.declarations) == null ? void 0 : _a.find((d) => { + var _a2; + return ((_a2 = d.symbol.valueDeclaration) == null ? void 0 : _a2.parent) === type.symbol.valueDeclaration; + }); + if (valueDeclaration) { + error2(valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); + errorReported = true; + } } - errorReported = true; } } } @@ -71119,7 +71429,7 @@ function createTypeChecker(host) { return firstOrUndefinedIterator(getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties)); } function tupleTypesDefinitelyUnrelated(source, target) { - return !(target.target.combinedFlags & 8 /* Variadic */) && target.target.minLength > source.target.minLength || !target.target.hasRestElement && (source.target.hasRestElement || target.target.fixedLength < source.target.fixedLength); + return !(target.target.combinedFlags & 8 /* Variadic */) && target.target.minLength > source.target.minLength || !(target.target.combinedFlags & 12 /* Variable */) && (!!(source.target.combinedFlags & 12 /* Variable */) || target.target.fixedLength < source.target.fixedLength); } function typesDefinitelyUnrelated(source, target) { return isTupleType(source) && isTupleType(target) ? tupleTypesDefinitelyUnrelated(source, target) : !!getUnmatchedProperty( @@ -71208,7 +71518,7 @@ function createTypeChecker(host) { return false; } function inferTypesFromTemplateLiteralType(source, target) { - return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arraysEqual(source.texts, target.texts) ? map(source.types, (s, i) => { + return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arrayIsEqualTo(source.texts, target.texts) ? map(source.types, (s, i) => { return isTypeAssignableTo(getBaseConstraintOrType(s), getBaseConstraintOrType(target.types[i])) ? s : getStringLikeTypeForType(s); }) : inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) : void 0; } @@ -71737,7 +72047,7 @@ function createTypeChecker(host) { return; } const startLength = isTupleType(source) ? Math.min(source.target.fixedLength, target.target.fixedLength) : 0; - const endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3 /* Fixed */) : 0, target.target.hasRestElement ? getEndElementCount(target.target, 3 /* Fixed */) : 0); + const endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3 /* Fixed */) : 0, target.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(target.target, 3 /* Fixed */) : 0); for (let i = 0; i < startLength; i++) { inferFromTypes(getTypeArguments(source)[i], elementTypes[i]); } @@ -71758,7 +72068,7 @@ function createTypeChecker(host) { } else if (elementFlags[startLength] & 8 /* Variadic */ && elementFlags[startLength + 1] & 4 /* Rest */) { const param = (_a = getInferenceInfoForType(elementTypes[startLength])) == null ? void 0 : _a.typeParameter; const constraint = param && getBaseConstraintOfType(param); - if (constraint && isTupleType(constraint) && !constraint.target.hasRestElement) { + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { const impliedArity = constraint.target.fixedLength; inferFromTypes(sliceTupleType(source, startLength, sourceArity - (startLength + impliedArity)), elementTypes[startLength]); inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength), elementTypes[startLength + 1]); @@ -71766,7 +72076,7 @@ function createTypeChecker(host) { } else if (elementFlags[startLength] & 4 /* Rest */ && elementFlags[startLength + 1] & 8 /* Variadic */) { const param = (_b = getInferenceInfoForType(elementTypes[startLength + 1])) == null ? void 0 : _b.typeParameter; const constraint = param && getBaseConstraintOfType(param); - if (constraint && isTupleType(constraint) && !constraint.target.hasRestElement) { + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { const impliedArity = constraint.target.fixedLength; const endIndex = sourceArity - getEndElementCount(target.target, 3 /* Fixed */); const startIndex = endIndex - impliedArity; @@ -71918,7 +72228,7 @@ function createTypeChecker(host) { const inferredCovariantType = inference.candidates ? getCovariantInference(inference, context.signature) : void 0; const inferredContravariantType = inference.contraCandidates ? getContravariantInference(inference) : void 0; if (inferredCovariantType || inferredContravariantType) { - const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & 131072 /* Never */) && some(inference.contraCandidates, (t) => isTypeSubtypeOf(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeSubtypeOf(t, inferredCovariantType)))); + const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & (131072 /* Never */ | 1 /* Any */)) && some(inference.contraCandidates, (t) => isTypeAssignableTo(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeAssignableTo(t, inferredCovariantType)))); inferredType = preferCovariantType ? inferredCovariantType : inferredContravariantType; fallbackType = preferCovariantType ? inferredContravariantType : inferredCovariantType; } else if (context.flags & 1 /* NoDefault */) { @@ -72305,6 +72615,9 @@ function createTypeChecker(host) { return isTypeAssignableTo(assignedType, reducedType) ? reducedType : declaredType; } function isFunctionObjectType(type) { + if (getObjectFlags(type) & 256 /* EvolvingArray */) { + return false; + } const resolved = resolveStructuredTypeMembers(type); return !!(resolved.callSignatures.length || resolved.constructSignatures.length || resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType)); } @@ -73372,7 +73685,7 @@ function createTypeChecker(host) { return getEvolvingArrayType(getUnionType(map(types, getElementTypeOfEvolvingArrayType))); } const result = recombineUnknownType(getUnionType(sameMap(types, finalizeEvolvingArrayType), subtypeReduction)); - if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arraysEqual(result.types, declaredType.types)) { + if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arrayIsEqualTo(result.types, declaredType.types)) { return declaredType; } return result; @@ -74132,9 +74445,10 @@ function createTypeChecker(host) { return; case 281 /* ExportSpecifier */: const exportDeclaration = node.parent.parent; - if (!node.isTypeOnly && !exportDeclaration.isTypeOnly && !exportDeclaration.moduleSpecifier) { + const name = node.propertyName || node.name; + if (!node.isTypeOnly && !exportDeclaration.isTypeOnly && !exportDeclaration.moduleSpecifier && name.kind !== 11 /* StringLiteral */) { const symbol = resolveEntityName( - node.propertyName || node.name, + name, 111551 /* Value */, /*ignoreErrors*/ true, @@ -74428,6 +74742,9 @@ function createTypeChecker(host) { function markExportSpecifierAliasReferenced(location) { if (!location.parent.parent.moduleSpecifier && !location.isTypeOnly && !location.parent.parent.isTypeOnly) { const exportedName = location.propertyName || location.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } const symbol = resolveName( exportedName, exportedName.escapedText, @@ -74442,7 +74759,7 @@ function createTypeChecker(host) { const target = symbol && (symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol); if (!target || getSymbolFlags(target) & 111551 /* Value */) { markExportAsReferenced(location); - markIdentifierAliasReferenced(location.propertyName || location.name); + markIdentifierAliasReferenced(exportedName); } } return; @@ -74558,7 +74875,7 @@ function createTypeChecker(host) { markAliasSymbolAsReferenced(rootSymbol); } else if (forDecoratorMetadata && getIsolatedModules(compilerOptions) && getEmitModuleKind(compilerOptions) >= 5 /* ES2015 */ && !symbolIsValue(rootSymbol) && !some(rootSymbol.declarations, isTypeOnlyImportOrExportDeclaration)) { const diag2 = error2(typeName, Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled); - const aliasDeclaration = find(rootSymbol.declarations || emptyArray, isAliasSymbolDeclaration2); + const aliasDeclaration = find(rootSymbol.declarations || emptyArray, isAliasSymbolDeclaration); if (aliasDeclaration) { addRelatedInfo(diag2, createDiagnosticForNode(aliasDeclaration, Diagnostics._0_was_imported_here, idText(rootName))); } @@ -74582,9 +74899,9 @@ function createTypeChecker(host) { ); } } - function getNarrowedTypeOfSymbol(symbol, location, checkMode) { + function getNarrowedTypeOfSymbol(symbol, location) { var _a; - const type = getTypeOfSymbol(symbol, checkMode); + const type = getTypeOfSymbol(symbol); const declaration = symbol.valueDeclaration; if (declaration) { if (isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) { @@ -74723,7 +75040,10 @@ function createTypeChecker(host) { } const localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); let declaration = localOrExportSymbol.valueDeclaration; - let type = getNarrowedTypeOfSymbol(localOrExportSymbol, node, checkMode); + if (declaration && declaration.kind === 208 /* BindingElement */ && contains(contextualBindingPatterns, declaration.parent) && findAncestor(node, (parent2) => parent2 === declaration.parent)) { + return nonInferrableAnyType; + } + let type = getNarrowedTypeOfSymbol(localOrExportSymbol, node); const assignmentKind = getAssignmentTargetKind(node); if (assignmentKind) { if (!(localOrExportSymbol.flags & 3 /* Variable */) && !(isInJSFile(node) && localOrExportSymbol.flags & 512 /* ValueModule */)) { @@ -75675,7 +75995,7 @@ function createTypeChecker(host) { type, (t) => { var _a; - if (isGenericMappedType(t) && !t.declaration.nameType) { + if (isGenericMappedType(t) && getMappedTypeNameTypeKind(t) !== 2 /* Remapping */) { const constraint = getConstraintTypeFromMappedType(t); const constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; const propertyNameType = nameType || getStringLiteralType(unescapeLeadingUnderscores(name)); @@ -75773,7 +76093,7 @@ function createTypeChecker(host) { return removeMissingType(getTypeArguments(t)[index], !!(t.target.elementFlags[index] && 2 /* Optional */)); } const offset = length2 !== void 0 && (lastSpreadIndex === void 0 || index > lastSpreadIndex) ? length2 - index : 0; - const fixedEndLength = offset > 0 && t.target.hasRestElement ? getEndElementCount(t.target, 3 /* Fixed */) : 0; + const fixedEndLength = offset > 0 && t.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(t.target, 3 /* Fixed */) : 0; if (offset > 0 && offset <= fixedEndLength) { return getTypeArguments(t)[getTypeReferenceArity(t) - offset]; } @@ -76416,7 +76736,7 @@ function createTypeChecker(host) { return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type; } function hasDefaultValue(node) { - return node.kind === 208 /* BindingElement */ && !!node.initializer || node.kind === 226 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */; + return node.kind === 208 /* BindingElement */ && !!node.initializer || node.kind === 303 /* PropertyAssignment */ && hasDefaultValue(node.initializer) || node.kind === 304 /* ShorthandPropertyAssignment */ && !!node.objectAssignmentInitializer || node.kind === 226 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */; } function isSpreadIntoCallOrNew(node) { const parent2 = walkUpParenthesizedExpressions(node.parent); @@ -76585,7 +76905,6 @@ function createTypeChecker(host) { return links.immediateTarget; } function checkObjectLiteral(node, checkMode = 0 /* Normal */) { - var _a; const inDestructuringPattern = isAssignmentTarget(node); checkGrammarObjectLiteralExpression(node, inDestructuringPattern); const allPropertiesTable = strictNullChecks ? createSymbolTable() : void 0; @@ -76640,11 +76959,8 @@ function createTypeChecker(host) { if (nameType) { prop.links.nameType = nameType; } - if (inDestructuringPattern) { - const isOptional = memberDecl.kind === 303 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer) || memberDecl.kind === 304 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer; - if (isOptional) { - prop.flags |= 16777216 /* Optional */; - } + if (inDestructuringPattern && hasDefaultValue(memberDecl)) { + prop.flags |= 16777216 /* Optional */; } else if (contextualTypeHasPattern && !(getObjectFlags(contextualType) & 512 /* ObjectLiteralPatternWithComputedProperties */)) { const impliedProp = getPropertyOfType(contextualType, member.escapedName); if (impliedProp) { @@ -76719,21 +77035,6 @@ function createTypeChecker(host) { propertiesArray.push(member); } popContextualType(); - if (contextualTypeHasPattern) { - const rootPatternParent = findAncestor(contextualType.pattern.parent, (n) => n.kind === 260 /* VariableDeclaration */ || n.kind === 226 /* BinaryExpression */ || n.kind === 169 /* Parameter */); - const spreadOrOutsideRootObject = findAncestor(node, (n) => n === rootPatternParent || n.kind === 305 /* SpreadAssignment */); - if (spreadOrOutsideRootObject.kind !== 305 /* SpreadAssignment */) { - for (const prop of getPropertiesOfType(contextualType)) { - if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) { - if (!(prop.flags & 16777216 /* Optional */)) { - error2(prop.valueDeclaration || ((_a = tryCast(prop, isTransientSymbol)) == null ? void 0 : _a.links.bindingElement), Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); - } - propertiesTable.set(prop.escapedName, prop); - propertiesArray.push(prop); - } - } - } - } if (isErrorType(spread)) { return errorType; } @@ -77409,8 +77710,21 @@ function createTypeChecker(host) { function getEnclosingClassFromThisParameter(node) { const thisParameter = getThisParameterFromNodeContext(node); let thisType = (thisParameter == null ? void 0 : thisParameter.type) && getTypeFromTypeNode(thisParameter.type); - if (thisType && thisType.flags & 262144 /* TypeParameter */) { - thisType = getConstraintOfTypeParameter(thisType); + if (thisType) { + if (thisType.flags & 262144 /* TypeParameter */) { + thisType = getConstraintOfTypeParameter(thisType); + } + } else { + const thisContainer = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(thisContainer)) { + thisType = getContextualThisParameterType(thisContainer); + } } if (thisType && getObjectFlags(thisType) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { return getTargetType(thisType); @@ -77926,7 +78240,7 @@ function createTypeChecker(host) { addErrorOrSuggestion(!isUncheckedJS || errorInfo.code !== Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code, resultDiagnostic); } function containerSeemsToBeEmptyDomElement(containingType) { - return compilerOptions.lib && !compilerOptions.lib.includes("dom") && everyContainedType(containingType, (type) => type.symbol && /^(EventTarget|Node|((HTML[a-zA-Z]*)?Element))$/.test(unescapeLeadingUnderscores(type.symbol.escapedName))) && isEmptyObjectType(containingType); + return compilerOptions.lib && !compilerOptions.lib.includes("dom") && everyContainedType(containingType, (type) => type.symbol && /^(?:EventTarget|Node|(?:HTML[a-zA-Z]*)?Element)$/.test(unescapeLeadingUnderscores(type.symbol.escapedName))) && isEmptyObjectType(containingType); } function typeHasStaticProperty(propName, containingType) { const prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName); @@ -78367,7 +78681,7 @@ function createTypeChecker(host) { return void 0; } function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes) { - const context = createInferenceContext(signature.typeParameters, signature, 0 /* None */, compareTypes); + const context = createInferenceContext(getTypeParametersForMapper(signature), signature, 0 /* None */, compareTypes); const restType = getEffectiveRestType(contextualSignature); const mapper = inferenceContext && (restType && restType.flags & 262144 /* TypeParameter */ ? inferenceContext.nonFixingMapper : inferenceContext.mapper); const sourceSignature = mapper ? instantiateSignature(contextualSignature, mapper) : contextualSignature; @@ -80187,7 +80501,7 @@ function createTypeChecker(host) { return createAnonymousType(anonymousSymbol, memberTable, emptyArray, emptyArray, emptyArray); } function getTypeWithSyntheticDefaultOnly(type, symbol, originalSymbol, moduleSpecifier) { - const hasDefaultOnly = isOnlyImportedAsDefault(moduleSpecifier); + const hasDefaultOnly = isOnlyImportableAsDefault(moduleSpecifier); if (hasDefaultOnly && type && !isErrorType(type)) { const synthType = type; if (!synthType.defaultOnlyType) { @@ -80513,14 +80827,45 @@ function createTypeChecker(host) { !!declaration && (hasInitializer(declaration) || isOptionalDeclaration(declaration)) ); } - function getTupleElementLabel(d, index, restParameterName = "arg") { + function getTupleElementLabelFromBindingElement(node, index, elementFlags) { + switch (node.name.kind) { + case 80 /* Identifier */: { + const name = node.name.escapedText; + if (node.dotDotDotToken) { + return elementFlags & 12 /* Variable */ ? name : `${name}_${index}`; + } else { + return elementFlags & 3 /* Fixed */ ? name : `${name}_n`; + } + } + case 207 /* ArrayBindingPattern */: { + if (node.dotDotDotToken) { + const elements = node.name.elements; + const lastElement = tryCast(lastOrUndefined(elements), isBindingElement); + const elementCount = elements.length - ((lastElement == null ? void 0 : lastElement.dotDotDotToken) ? 1 : 0); + if (index < elementCount) { + const element = elements[index]; + if (isBindingElement(element)) { + return getTupleElementLabelFromBindingElement(element, index, elementFlags); + } + } else if (lastElement == null ? void 0 : lastElement.dotDotDotToken) { + return getTupleElementLabelFromBindingElement(lastElement, index - elementCount, elementFlags); + } + } + break; + } + } + return `arg_${index}`; + } + function getTupleElementLabel(d, index = 0, elementFlags = 3 /* Fixed */, restSymbol) { if (!d) { - return `${restParameterName}_${index}`; + const restParameter = tryCast(restSymbol == null ? void 0 : restSymbol.valueDeclaration, isParameter); + return restParameter ? getTupleElementLabelFromBindingElement(restParameter, index, elementFlags) : `${(restSymbol == null ? void 0 : restSymbol.escapedName) ?? "arg"}_${index}`; } Debug.assert(isIdentifier(d.name)); return d.name.escapedText; } function getParameterNameAtPosition(signature, pos, overrideRestType) { + var _a; const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); if (pos < paramCount) { return signature.parameters[pos].escapedName; @@ -80528,9 +80873,11 @@ function createTypeChecker(host) { const restParameter = signature.parameters[paramCount] || unknownSymbol; const restType = overrideRestType || getTypeOfSymbol(restParameter); if (isTupleType(restType)) { - const associatedNames = restType.target.labeledElementDeclarations; + const tupleType = restType.target; const index = pos - paramCount; - return getTupleElementLabel(associatedNames == null ? void 0 : associatedNames[index], index, restParameter.escapedName); + const associatedName = (_a = tupleType.labeledElementDeclarations) == null ? void 0 : _a[index]; + const elementFlags = tupleType.elementFlags[index]; + return getTupleElementLabel(associatedName, index, elementFlags, restParameter); } return restParameter.escapedName; } @@ -80603,7 +80950,7 @@ function createTypeChecker(host) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[paramCount]); const index = pos - paramCount; - if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) { + if (!isTupleType(restType) || restType.target.combinedFlags & 12 /* Variable */ || index < restType.target.fixedLength) { return getIndexedAccessType(restType, getNumberLiteralType(index)); } } @@ -80641,7 +80988,7 @@ function createTypeChecker(host) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[length2 - 1]); if (isTupleType(restType)) { - return length2 + restType.target.fixedLength - (restType.target.hasRestElement ? 0 : 1); + return length2 + restType.target.fixedLength - (restType.target.combinedFlags & 12 /* Variable */ ? 0 : 1); } } return length2; @@ -80684,7 +81031,7 @@ function createTypeChecker(host) { function hasEffectiveRestParameter(signature) { if (signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); - return !isTupleType(restType) || restType.target.hasRestElement; + return !isTupleType(restType) || !!(restType.target.combinedFlags & 12 /* Variable */); } return false; } @@ -80694,7 +81041,7 @@ function createTypeChecker(host) { if (!isTupleType(restType)) { return isTypeAny(restType) ? anyArrayType : restType; } - if (restType.target.hasRestElement) { + if (restType.target.combinedFlags & 12 /* Variable */) { return sliceTupleType(restType, restType.target.fixedLength); } } @@ -81208,30 +81555,15 @@ function createTypeChecker(host) { /*errorNode*/ void 0 ) || unknownType; - nextType = resolver.resolveIterationType( - nextType, - /*errorNode*/ - void 0 - ) || unknownType; if (globalGeneratorType === emptyGenericType) { - const globalType = resolver.getGlobalIterableIteratorType( + const globalIterableIteratorType = resolver.getGlobalIterableIteratorType( /*reportErrors*/ false ); - const iterationTypes = globalType !== emptyGenericType ? getIterationTypesOfGlobalIterableType(globalType, resolver) : void 0; - const iterableIteratorReturnType = iterationTypes ? iterationTypes.returnType : anyType; - const iterableIteratorNextType = iterationTypes ? iterationTypes.nextType : undefinedType; - if (isTypeAssignableTo(returnType, iterableIteratorReturnType) && isTypeAssignableTo(iterableIteratorNextType, nextType)) { - if (globalType !== emptyGenericType) { - return createTypeFromGenericGlobalType(globalType, [yieldType]); - } - resolver.getGlobalIterableIteratorType( - /*reportErrors*/ - true - ); - return emptyObjectType; + if (globalIterableIteratorType !== emptyGenericType) { + return createTypeFromGenericGlobalType(globalIterableIteratorType, [yieldType, returnType, nextType]); } - resolver.getGlobalGeneratorType( + resolver.getGlobalIterableIteratorType( /*reportErrors*/ true ); @@ -82011,7 +82343,7 @@ function createTypeChecker(host) { ); } } - const elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name); + const elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */ | (hasDefaultValue(property) ? 16 /* AllowMissing */ : 0), name); const type = getFlowTypeOfDestructuring(property, elementType); return checkDestructuringAssignment(property.kind === 304 /* ShorthandPropertyAssignment */ ? property : property.initializer, type); } else if (property.kind === 305 /* SpreadAssignment */) { @@ -82060,7 +82392,7 @@ function createTypeChecker(host) { if (element.kind !== 230 /* SpreadElement */) { const indexType = getNumberLiteralType(elementIndex); if (isArrayLikeType(sourceType)) { - const accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0); + const accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* AllowMissing */ : 0); const elementType2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType; const assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType2, 524288 /* NEUndefined */) : elementType2; const type = getFlowTypeOfDestructuring(element, assignedType); @@ -82210,7 +82542,7 @@ function createTypeChecker(host) { setLastResult(state, checkExpression(node.right, checkMode)); return state; } - checkGrammarNullishCoalesceWithLogicalExpression(node); + checkNullishCoalesceOperands(node); const operator = node.operatorToken.kind; if (operator === 64 /* EqualsToken */ && (node.left.kind === 210 /* ObjectLiteralExpression */ || node.left.kind === 209 /* ArrayLiteralExpression */)) { state.skip = true; @@ -82243,7 +82575,9 @@ function createTypeChecker(host) { if (operator === 56 /* AmpersandAmpersandToken */ || isIfStatement(parent2)) { checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.left, leftType, isIfStatement(parent2) ? parent2.thenStatement : void 0); } - checkTruthinessOfType(leftType, node.left); + if (isBinaryLogicalOperator(operator)) { + checkTruthinessOfType(leftType, node.left); + } } } } @@ -82300,7 +82634,7 @@ function createTypeChecker(host) { state.typeStack[state.stackIndex + 1] = type; } } - function checkGrammarNullishCoalesceWithLogicalExpression(node) { + function checkNullishCoalesceOperands(node) { const { left, operatorToken, right } = node; if (operatorToken.kind === 61 /* QuestionQuestionToken */) { if (isBinaryExpression(left) && (left.operatorToken.kind === 57 /* BarBarToken */ || left.operatorToken.kind === 56 /* AmpersandAmpersandToken */)) { @@ -82309,15 +82643,63 @@ function createTypeChecker(host) { if (isBinaryExpression(right) && (right.operatorToken.kind === 57 /* BarBarToken */ || right.operatorToken.kind === 56 /* AmpersandAmpersandToken */)) { grammarErrorOnNode(right, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(right.operatorToken.kind), tokenToString(operatorToken.kind)); } + const leftTarget = skipOuterExpressions(left, 31 /* All */); + const nullishSemantics = getSyntacticNullishnessSemantics(leftTarget); + if (nullishSemantics !== 3 /* Sometimes */) { + if (node.parent.kind === 226 /* BinaryExpression */) { + error2(leftTarget, Diagnostics.This_binary_expression_is_never_nullish_Are_you_missing_parentheses); + } else { + if (nullishSemantics === 1 /* Always */) { + error2(leftTarget, Diagnostics.This_expression_is_always_nullish); + } else { + error2(leftTarget, Diagnostics.Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish); + } + } + } } } + function getSyntacticNullishnessSemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 223 /* AwaitExpression */: + case 213 /* CallExpression */: + case 212 /* ElementAccessExpression */: + case 214 /* NewExpression */: + case 211 /* PropertyAccessExpression */: + case 229 /* YieldExpression */: + case 110 /* ThisKeyword */: + return 3 /* Sometimes */; + case 226 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 61 /* QuestionQuestionToken */: + case 78 /* QuestionQuestionEqualsToken */: + case 57 /* BarBarToken */: + case 76 /* BarBarEqualsToken */: + case 56 /* AmpersandAmpersandToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + return 3 /* Sometimes */; + } + return 2 /* Never */; + case 227 /* ConditionalExpression */: + return getSyntacticNullishnessSemantics(node.whenTrue) | getSyntacticNullishnessSemantics(node.whenFalse); + case 106 /* NullKeyword */: + return 1 /* Always */; + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 1 /* Always */; + } + return 3 /* Sometimes */; + } + return 2 /* Never */; + } function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) { const operator = operatorToken.kind; if (operator === 64 /* EqualsToken */ && (left.kind === 210 /* ObjectLiteralExpression */ || left.kind === 209 /* ArrayLiteralExpression */)) { return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 110 /* ThisKeyword */); } let leftType; - if (isLogicalOrCoalescingBinaryOperator(operator)) { + if (isBinaryLogicalOperator(operator)) { leftType = checkTruthinessExpression(left, checkMode); } else { leftType = checkExpression(left, checkMode); @@ -82397,6 +82779,29 @@ function createTypeChecker(host) { } if (leftOk && rightOk) { checkAssignmentOperator(resultType2); + switch (operator) { + case 48 /* LessThanLessThanToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + const rhsEval = evaluate(right); + if (typeof rhsEval.value === "number" && Math.abs(rhsEval.value) >= 32) { + errorOrSuggestion( + isEnumMember(walkUpParenthesizedExpressions(right.parent.parent)), + // elevate from suggestion to error within an enum member + errorNode || operatorToken, + Diagnostics.This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2, + getTextOfNode(left), + tokenToString(operator), + rhsEval.value % 32 + ); + } + break; + default: + break; + } } return resultType2; } @@ -82755,9 +83160,8 @@ function createTypeChecker(host) { const iterationTypes = returnType && getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsync); const signatureYieldType = iterationTypes && iterationTypes.yieldType || anyType; const signatureNextType = iterationTypes && iterationTypes.nextType || anyType; - const resolvedSignatureNextType = isAsync ? getAwaitedType(signatureNextType) || anyType : signatureNextType; const yieldExpressionType = node.expression ? checkExpression(node.expression) : undefinedWideningType; - const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, resolvedSignatureNextType, isAsync); + const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, signatureNextType, isAsync); if (returnType && yieldedType) { checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureYieldType, node.expression || node, node.expression); } @@ -82899,9 +83303,56 @@ function createTypeChecker(host) { void 0, checkMode || 0 /* Normal */ ) : checkExpressionCached(initializer, checkMode)); - return isParameter(declaration) && declaration.name.kind === 207 /* ArrayBindingPattern */ && isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ? padTupleType(type, declaration.name) : type; + if (isParameter(isBindingElement(declaration) ? walkUpBindingElementsAndPatterns(declaration) : declaration)) { + if (declaration.name.kind === 206 /* ObjectBindingPattern */ && isObjectLiteralType2(type)) { + return padObjectLiteralType(type, declaration.name); + } + if (declaration.name.kind === 207 /* ArrayBindingPattern */ && isTupleType(type)) { + return padTupleType(type, declaration.name); + } + } + return type; + } + function padObjectLiteralType(type, pattern) { + let missingElements; + for (const e of pattern.elements) { + if (e.initializer) { + const name = getPropertyNameFromBindingElement(e); + if (name && !getPropertyOfType(type, name)) { + missingElements = append(missingElements, e); + } + } + } + if (!missingElements) { + return type; + } + const members = createSymbolTable(); + for (const prop of getPropertiesOfObjectType(type)) { + members.set(prop.escapedName, prop); + } + for (const e of missingElements) { + const symbol = createSymbol(4 /* Property */ | 16777216 /* Optional */, getPropertyNameFromBindingElement(e)); + symbol.links.type = getTypeFromBindingElement( + e, + /*includePatternInType*/ + false, + /*reportErrors*/ + false + ); + members.set(symbol.escapedName, symbol); + } + const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, getIndexInfosOfType(type)); + result.objectFlags = type.objectFlags; + return result; + } + function getPropertyNameFromBindingElement(e) { + const exprType = getLiteralTypeFromPropertyName(e.propertyName || e.name); + return isTypeUsableAsPropertyName(exprType) ? getPropertyNameFromType(exprType) : void 0; } function padTupleType(type, pattern) { + if (type.target.combinedFlags & 12 /* Variable */ || getTypeReferenceArity(type) >= pattern.elements.length) { + return type; + } const patternElements = pattern.elements; const elementTypes = getElementTypes(type).slice(); const elementFlags = type.target.elementFlags.slice(); @@ -83210,7 +83661,17 @@ function createTypeChecker(host) { if (!ok) { error2(node, Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query); } - if (getIsolatedModules(compilerOptions)) { + if (compilerOptions.isolatedModules || compilerOptions.verbatimModuleSyntax && ok && !resolveName( + node, + getFirstIdentifier(node), + 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false, + /*excludeGlobals*/ + true + )) { Debug.assert(!!(type.symbol.flags & 128 /* ConstEnum */)); const constEnumDeclaration = type.symbol.valueDeclaration; const redirect = host.getRedirectReferenceForResolutionFromSourceOfProject(getSourceFileOfNode(constEnumDeclaration).resolvedPath); @@ -83434,9 +83895,7 @@ function createTypeChecker(host) { } checkSourceElement(node.type); const { parameterName } = node; - if (typePredicate.kind === 0 /* This */ || typePredicate.kind === 2 /* AssertsThis */) { - getTypeFromThisTypeNode(parameterName); - } else { + if (typePredicate.kind !== 0 /* This */ && typePredicate.kind !== 2 /* AssertsThis */) { if (typePredicate.parameterIndex >= 0) { if (signatureHasRestParameter(signature) && typePredicate.parameterIndex === signature.parameters.length - 1) { error2(parameterName, Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); @@ -84171,16 +84630,20 @@ function createTypeChecker(host) { const someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; if (someButNotAllOverloadFlags !== 0) { const canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck2); - forEach(overloads, (o) => { - const deviation = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlags; - if (deviation & 32 /* Export */) { - error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); - } else if (deviation & 128 /* Ambient */) { - error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); - } else if (deviation & (2 /* Private */ | 4 /* Protected */)) { - error2(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); - } else if (deviation & 64 /* Abstract */) { - error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + group(overloads, (o) => getSourceFileOfNode(o).fileName).forEach((overloadsInFile) => { + const canonicalFlagsForFile = getEffectiveDeclarationFlags(getCanonicalOverload(overloadsInFile, implementation), flagsToCheck2); + for (const o of overloadsInFile) { + const deviation = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlags; + const deviationInFile = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlagsForFile; + if (deviationInFile & 32 /* Export */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); + } else if (deviationInFile & 128 /* Ambient */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } else if (deviation & (2 /* Private */ | 4 /* Protected */)) { + error2(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); + } else if (deviation & 64 /* Abstract */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + } } }); } @@ -85315,7 +85778,7 @@ function createTypeChecker(host) { if (!wrappingDeclaration.type) { addRelatedInfo( diagnostic, - createFileDiagnostic(getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 1, Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, declarationNameToString(node.propertyName)) + createFileDiagnostic(getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 0, Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, declarationNameToString(node.propertyName)) ); } diagnostics.add(diagnostic); @@ -85414,7 +85877,7 @@ function createTypeChecker(host) { }); } function checkCollisionWithRequireExportsInGeneratedCode(node, name) { - if (moduleKind >= 5 /* ES2015 */ && !(moduleKind >= 100 /* Node16 */ && getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) >= 5 /* ES2015 */) { return; } if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { @@ -85624,6 +86087,9 @@ function createTypeChecker(host) { checkAliasSymbol(node); return; } + if (node.name.kind === 10 /* BigIntLiteral */) { + error2(node.name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name); + } const type = convertAutoToAny(getTypeOfSymbol(symbol)); if (node === symbol.valueDeclaration) { const initializer = hasOnlyExpressionInitializer(node) && getEffectiveInitializer(node); @@ -85651,7 +86117,7 @@ function createTypeChecker(host) { ); if (globalAsyncDisposableType !== emptyObjectType && globalDisposableType !== emptyObjectType) { const optionalDisposableType = getUnionType([globalAsyncDisposableType, globalDisposableType, nullType, undefinedType]); - checkTypeAssignableTo(initializerType, optionalDisposableType, initializer, Diagnostics.The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined); } } else if (blockScopeKind === 4 /* Using */) { const globalDisposableType = getGlobalDisposableType( @@ -85660,7 +86126,7 @@ function createTypeChecker(host) { ); if (globalDisposableType !== emptyObjectType) { const optionalDisposableType = getUnionType([globalDisposableType, nullType, undefinedType]); - checkTypeAssignableTo(initializerType, optionalDisposableType, initializer, Diagnostics.The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined); } } } @@ -85778,7 +86244,7 @@ function createTypeChecker(host) { bothHelper(location, body2); return; } - const type = location === condExpr2 ? condType : checkTruthinessExpression(location); + const type = location === condExpr2 ? condType : checkExpression(location); if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) { error2(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false"); return; @@ -85873,9 +86339,51 @@ function createTypeChecker(host) { function checkTruthinessOfType(type, node) { if (type.flags & 16384 /* Void */) { error2(node, Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness); + } else { + const semantics = getSyntacticTruthySemantics(node); + if (semantics !== 3 /* Sometimes */) { + error2( + node, + semantics === 1 /* Always */ ? Diagnostics.This_kind_of_expression_is_always_truthy : Diagnostics.This_kind_of_expression_is_always_falsy + ); + } } return type; } + function getSyntacticTruthySemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 9 /* NumericLiteral */: + if (node.text === "0" || node.text === "1") { + return 3 /* Sometimes */; + } + return 1 /* Always */; + case 209 /* ArrayLiteralExpression */: + case 219 /* ArrowFunction */: + case 10 /* BigIntLiteral */: + case 231 /* ClassExpression */: + case 218 /* FunctionExpression */: + case 284 /* JsxElement */: + case 285 /* JsxSelfClosingElement */: + case 210 /* ObjectLiteralExpression */: + case 14 /* RegularExpressionLiteral */: + return 1 /* Always */; + case 222 /* VoidExpression */: + case 106 /* NullKeyword */: + return 2 /* Never */; + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + return !!node.text ? 1 /* Always */ : 2 /* Never */; + case 227 /* ConditionalExpression */: + return getSyntacticTruthySemantics(node.whenTrue) | getSyntacticTruthySemantics(node.whenFalse); + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 2 /* Never */; + } + return 3 /* Sometimes */; + } + return 3 /* Sometimes */; + } function checkTruthinessExpression(node, checkMode) { return checkTruthinessOfType(checkExpression(node, checkMode), node); } @@ -86258,30 +86766,21 @@ function createTypeChecker(host) { function getIterationTypesOfIterableCached(type, resolver) { return getCachedIterationTypes(type, resolver.iterableCacheKey); } - function getIterationTypesOfGlobalIterableType(globalType, resolver) { - const globalIterationTypes = getIterationTypesOfIterableCached(globalType, resolver) || getIterationTypesOfIterableSlow( - globalType, - resolver, - /*errorNode*/ - void 0, - /*errorOutputContainer*/ - void 0, - /*noCache*/ - false - ); - return globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - } function getIterationTypesOfIterableFast(type, resolver) { - let globalType; - if (isReferenceToType2(type, globalType = resolver.getGlobalIterableType( + if (isReferenceToType2(type, resolver.getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIteratorObjectType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIterableIteratorType( /*reportErrors*/ false - )) || isReferenceToType2(type, globalType = resolver.getGlobalIterableIteratorType( + )) || isReferenceToType2(type, resolver.getGlobalGeneratorType( /*reportErrors*/ false ))) { - const [yieldType] = getTypeArguments(type); - const { returnType, nextType } = getIterationTypesOfGlobalIterableType(globalType, resolver); + const [yieldType, returnType, nextType] = getTypeArguments(type); return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( yieldType, /*errorNode*/ @@ -86292,11 +86791,10 @@ function createTypeChecker(host) { void 0 ) || returnType, nextType)); } - if (isReferenceToType2(type, resolver.getGlobalGeneratorType( - /*reportErrors*/ - false - ))) { - const [yieldType, returnType, nextType] = getTypeArguments(type); + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( yieldType, /*errorNode*/ @@ -86337,10 +86835,10 @@ function createTypeChecker(host) { !!getAwaitedTypeOfPromise(type) || !allowAsyncIterables && isForOfStatement(errorNode.parent) && errorNode.parent.expression === errorNode && getGlobalAsyncIterableType( /*reportErrors*/ false - ) !== emptyGenericType && isTypeAssignableTo(type, getGlobalAsyncIterableType( + ) !== emptyGenericType && isTypeAssignableTo(type, createTypeFromGenericGlobalType(getGlobalAsyncIterableType( /*reportErrors*/ false - )) + ), [anyType, anyType, anyType])) ); return errorAndMaybeSuggestAwait(errorNode, suggestAwait, message, typeToString(type)); } @@ -86370,26 +86868,13 @@ function createTypeChecker(host) { return getCachedIterationTypes(type, resolver.iteratorCacheKey); } function getIterationTypesOfIteratorFast(type, resolver) { - const globalType = resolver.getGlobalIterableIteratorType( + if (isReferenceToType2(type, resolver.getGlobalIterableIteratorType( /*reportErrors*/ false - ); - if (isReferenceToType2(type, globalType)) { - const [yieldType] = getTypeArguments(type); - const globalIterationTypes = getIterationTypesOfIteratorCached(globalType, resolver) || getIterationTypesOfIteratorSlow( - globalType, - resolver, - /*errorNode*/ - void 0, - /*errorOutputContainer*/ - void 0, - /*noCache*/ - false - ); - const { returnType, nextType } = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); - } - if (isReferenceToType2(type, resolver.getGlobalIteratorType( + )) || isReferenceToType2(type, resolver.getGlobalIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIteratorObjectType( /*reportErrors*/ false )) || isReferenceToType2(type, resolver.getGlobalGeneratorType( @@ -86399,6 +86884,12 @@ function createTypeChecker(host) { const [yieldType, returnType, nextType] = getTypeArguments(type); return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); } + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; + return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); + } } function isIteratorResult(type, kind) { const doneType = getTypeOfPropertyOfType(type, "done") || falseType; @@ -86466,7 +86957,7 @@ function createTypeChecker(host) { } const methodType = method && !(methodName === "next" && method.flags & 16777216 /* Optional */) ? methodName === "next" ? getTypeOfSymbol(method) : getTypeWithFacts(getTypeOfSymbol(method), 2097152 /* NEUndefinedOrNull */) : void 0; if (isTypeAny(methodType)) { - return methodName === "next" ? anyIterationTypes : anyIterationTypesExceptNext; + return anyIterationTypes; } const methodSignatures = methodType ? getSignaturesOfType(methodType, 0 /* Call */) : emptyArray; if (methodSignatures.length === 0) { @@ -86835,7 +87326,7 @@ function createTypeChecker(host) { } } function checkClassNameCollisionWithObject(name) { - if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(name).impliedNodeFormat === 1 /* CommonJS */)) { + if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < 5 /* ES2015 */) { error2(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); } } @@ -87214,23 +87705,22 @@ function createTypeChecker(host) { hasAbstractModifier(member), isStatic(member), memberIsParameterProperty, - symbolName(declaredProp), + declaredProp, reportErrors2 ? member : void 0 ); } - function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, memberName, errorNode) { + function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, member, errorNode) { const isJs = isInJSFile(node); const nodeInAmbientContext = !!(node.flags & 33554432 /* Ambient */); if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) { - const memberEscapedName = escapeLeadingUnderscores(memberName); const thisType = memberIsStatic ? staticType : typeWithThis; const baseType = memberIsStatic ? baseStaticType : baseWithThis; - const prop = getPropertyOfType(thisType, memberEscapedName); - const baseProp = getPropertyOfType(baseType, memberEscapedName); + const prop = getPropertyOfType(thisType, member.escapedName); + const baseProp = getPropertyOfType(baseType, member.escapedName); const baseClassName = typeToString(baseWithThis); if (prop && !baseProp && memberHasOverrideModifier) { if (errorNode) { - const suggestion = getSuggestedSymbolForNonexistentClassMember(memberName, baseType); + const suggestion = getSuggestedSymbolForNonexistentClassMember(symbolName(member), baseType); suggestion ? error2( errorNode, isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 : Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, @@ -87347,7 +87837,7 @@ function createTypeChecker(host) { isStatic(member), /*memberIsParameterProperty*/ false, - symbolName(memberSymbol) + memberSymbol ); } function getTargetSymbol(s) { @@ -87605,7 +88095,9 @@ function createTypeChecker(host) { checkExportsOnMergedDeclarations(node); checkTypeParameters(node.typeParameters); if (node.type.kind === 141 /* IntrinsicKeyword */) { - if (!intrinsicTypeKinds.has(node.name.escapedText) || length(node.typeParameters) !== 1) { + const typeParameterCount = length(node.typeParameters); + const valid = typeParameterCount === 0 ? node.name.escapedText === "BuiltinIteratorReturn" : typeParameterCount === 1 && intrinsicTypeKinds.has(node.name.escapedText); + if (!valid) { error2(node.type, Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types); } } else { @@ -87895,6 +88387,14 @@ function createTypeChecker(host) { } if (isIdentifier(node.name)) { checkCollisionsForDeclarationName(node, node.name); + if (!(node.flags & (32 /* Namespace */ | 2048 /* GlobalAugmentation */))) { + const sourceFile = getSourceFileOfNode(node); + const pos = getNonModifierTokenPosOfNode(node); + const span = getSpanOfTokenAtPosition(sourceFile, pos); + suggestionDiagnostics.add( + createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead) + ); + } } checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfDeclaration(node); @@ -87916,7 +88416,7 @@ function createTypeChecker(host) { getNodeLinks(node).flags |= 2048 /* LexicalModuleMergesWithClass */; } } - if (compilerOptions.verbatimModuleSyntax && node.parent.kind === 307 /* SourceFile */ && (moduleKind === 1 /* CommonJS */ || node.parent.impliedNodeFormat === 1 /* CommonJS */)) { + if (compilerOptions.verbatimModuleSyntax && node.parent.kind === 307 /* SourceFile */ && host.getEmitModuleFormatOfFile(node.parent) === 1 /* CommonJS */) { const exportModifier = (_b = node.modifiers) == null ? void 0 : _b.find((m) => m.kind === 95 /* ExportKeyword */); if (exportModifier) { error2(exportModifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); @@ -87959,6 +88459,7 @@ function createTypeChecker(host) { grammarErrorOnFirstToken(node, Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; case 271 /* ImportEqualsDeclaration */: + if (isInternalModuleImportEqualsDeclaration(node)) break; case 272 /* ImportDeclaration */: grammarErrorOnFirstToken(node, Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; @@ -88038,6 +88539,16 @@ function createTypeChecker(host) { } return true; } + function checkModuleExportName(name, allowStringLiteral = true) { + if (name === void 0 || name.kind !== 11 /* StringLiteral */) { + return; + } + if (!allowStringLiteral) { + grammarErrorOnNode(name, Diagnostics.Identifier_expected); + } else if (moduleKind === 5 /* ES2015 */ || moduleKind === 6 /* ES2020 */) { + grammarErrorOnNode(name, Diagnostics.String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020); + } + } function checkAliasSymbol(node) { var _a, _b, _c, _d; let symbol = getSymbolOfDeclaration(node); @@ -88049,7 +88560,7 @@ function createTypeChecker(host) { Debug.assert(node.kind !== 280 /* NamespaceExport */); if (node.kind === 281 /* ExportSpecifier */) { const diag2 = error2(errorNode, Diagnostics.Types_cannot_appear_in_export_declarations_in_JavaScript_files); - const alreadyExportedSymbol = (_b = (_a = getSourceFileOfNode(node).symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.get((node.propertyName || node.name).escapedText); + const alreadyExportedSymbol = (_b = (_a = getSourceFileOfNode(node).symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.get(moduleExportNameTextEscaped(node.propertyName || node.name)); if (alreadyExportedSymbol === target) { const exportingDeclaration = (_c = alreadyExportedSymbol.declarations) == null ? void 0 : _c.find(isJSDocNode); if (exportingDeclaration) { @@ -88104,7 +88615,7 @@ function createTypeChecker(host) { if (compilerOptions.verbatimModuleSyntax) { Debug.assertIsDefined(node.name, "An ImportClause with a symbol should have a name"); const message = compilerOptions.verbatimModuleSyntax && isInternalModuleImportEqualsDeclaration(node) ? Diagnostics.An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled : isType ? Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled : Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled; - const name = idText(node.kind === 276 /* ImportSpecifier */ ? node.propertyName || node.name : node.name); + const name = moduleExportNameTextUnescaped(node.kind === 276 /* ImportSpecifier */ ? node.propertyName || node.name : node.name); addTypeOnlyDeclarationRelatedInfo( error2(node, message, name), isType ? void 0 : typeOnlyAlias, @@ -88118,7 +88629,7 @@ function createTypeChecker(host) { } case 281 /* ExportSpecifier */: { if (compilerOptions.verbatimModuleSyntax || getSourceFileOfNode(typeOnlyAlias) !== getSourceFileOfNode(node)) { - const name = idText(node.propertyName || node.name); + const name = moduleExportNameTextUnescaped(node.propertyName || node.name); const diagnostic = isType ? error2(node, Diagnostics.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type, isolatedModulesLikeFlagName) : error2(node, Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled, name, isolatedModulesLikeFlagName); addTypeOnlyDeclarationRelatedInfo(diagnostic, isType ? void 0 : typeOnlyAlias, name); break; @@ -88126,8 +88637,17 @@ function createTypeChecker(host) { } } } - if (compilerOptions.verbatimModuleSyntax && node.kind !== 271 /* ImportEqualsDeclaration */ && !isInJSFile(node) && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (compilerOptions.verbatimModuleSyntax && node.kind !== 271 /* ImportEqualsDeclaration */ && !isInJSFile(node) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { error2(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); + } else if (moduleKind === 200 /* Preserve */ && node.kind !== 271 /* ImportEqualsDeclaration */ && node.kind !== 260 /* VariableDeclaration */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { + error2(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve); + } + if (compilerOptions.verbatimModuleSyntax && !isTypeOnlyImportOrExportDeclaration(node) && !(node.flags & 33554432 /* Ambient */) && targetFlags & 128 /* ConstEnum */) { + const constEnumDeclaration = target.valueDeclaration; + const redirect = host.getRedirectReferenceForResolutionFromSourceOfProject(getSourceFileOfNode(constEnumDeclaration).resolvedPath); + if (constEnumDeclaration.flags & 33554432 /* Ambient */ && (!redirect || !shouldPreserveConstEnums(redirect.commandLine.options))) { + error2(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName); + } } } if (isImportSpecifier(node)) { @@ -88166,8 +88686,11 @@ function createTypeChecker(host) { function checkImportBinding(node) { checkCollisionsForDeclarationName(node, node.name); checkAliasSymbol(node); - if (node.kind === 276 /* ImportSpecifier */ && idText(node.propertyName || node.name) === "default" && getESModuleInterop(compilerOptions) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { - checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + if (node.kind === 276 /* ImportSpecifier */) { + checkModuleExportName(node.propertyName); + if (moduleExportNameIsDefault(node.propertyName || node.name) && getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { + checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + } } } function checkImportAttributes(declaration) { @@ -88187,7 +88710,7 @@ function createTypeChecker(host) { if (validForTypeAttributes && override) { return; } - const mode = moduleKind === 199 /* NodeNext */ && declaration.moduleSpecifier && getUsageModeForExpression(declaration.moduleSpecifier); + const mode = moduleKind === 199 /* NodeNext */ && declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier); if (mode !== 99 /* ESNext */ && moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { const message = isImportAttributes2 ? moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve : moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve; return grammarErrorOnNode(node, message); @@ -88220,7 +88743,7 @@ function createTypeChecker(host) { if (importClause.namedBindings) { if (importClause.namedBindings.kind === 274 /* NamespaceImport */) { checkImportBinding(importClause.namedBindings); - if (moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && getESModuleInterop(compilerOptions)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && getESModuleInterop(compilerOptions)) { checkExternalEmitHelpers(node, 65536 /* ImportStar */); } } else { @@ -88230,6 +88753,8 @@ function createTypeChecker(host) { } } } + } else if (noUncheckedSideEffectImports && !importClause) { + void resolveExternalModuleName(node, node.moduleSpecifier); } } checkImportAttributes(node); @@ -88260,7 +88785,7 @@ function createTypeChecker(host) { grammarErrorOnNode(node, Diagnostics.An_import_alias_cannot_use_import_type); } } else { - if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && getSourceFileOfNode(node).impliedNodeFormat === void 0 && !node.isTypeOnly && !(node.flags & 33554432 /* Ambient */)) { + if (5 /* ES2015 */ <= moduleKind && moduleKind <= 99 /* ESNext */ && !node.isTypeOnly && !(node.flags & 33554432 /* Ambient */)) { grammarErrorOnNode(node, Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead); } } @@ -88288,8 +88813,9 @@ function createTypeChecker(host) { error2(node.moduleSpecifier, Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol)); } else if (node.exportClause) { checkAliasSymbol(node.exportClause); + checkModuleExportName(node.exportClause.name); } - if (moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { if (node.exportClause) { if (getESModuleInterop(compilerOptions)) { checkExternalEmitHelpers(node, 65536 /* ImportStar */); @@ -88318,6 +88844,9 @@ function createTypeChecker(host) { } function checkExportSpecifier(node) { checkAliasSymbol(node); + const hasModuleSpecifier = node.parent.parent.moduleSpecifier !== void 0; + checkModuleExportName(node.propertyName, hasModuleSpecifier); + checkModuleExportName(node.name); if (getEmitDeclarations(compilerOptions)) { collectLinkedAliases( node.propertyName || node.name, @@ -88325,8 +88854,11 @@ function createTypeChecker(host) { true ); } - if (!node.parent.parent.moduleSpecifier) { + if (!hasModuleSpecifier) { const exportedName = node.propertyName || node.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } const symbol = resolveName( exportedName, exportedName.escapedText, @@ -88342,7 +88874,7 @@ function createTypeChecker(host) { markLinkedReferences(node, 7 /* ExportSpecifier */); } } else { - if (getESModuleInterop(compilerOptions) && moduleKind !== 4 /* System */ && (moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && idText(node.propertyName || node.name) === "default") { + if (getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && moduleExportNameIsDefault(node.propertyName || node.name)) { checkExternalEmitHelpers(node, 131072 /* ImportDefault */); } } @@ -88368,7 +88900,7 @@ function createTypeChecker(host) { if (typeAnnotationNode) { checkTypeAssignableTo(checkExpressionCached(node.expression), getTypeFromTypeNode(typeAnnotationNode), node.expression); } - const isIllegalExportDefaultInCJS = !node.isExportEquals && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */); + const isIllegalExportDefaultInCJS = !node.isExportEquals && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */; if (node.expression.kind === 80 /* Identifier */) { const id = node.expression; const sym = getExportSymbolOfValueSymbolIfExported(resolveEntityName( @@ -88448,7 +88980,7 @@ function createTypeChecker(host) { grammarErrorOnNode(node.expression, Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context); } if (node.isExportEquals) { - if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && (node.flags & 33554432 /* Ambient */ && getSourceFileOfNode(node).impliedNodeFormat === 99 /* ESNext */ || !(node.flags & 33554432 /* Ambient */) && getSourceFileOfNode(node).impliedNodeFormat !== 1 /* CommonJS */)) { + if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && (node.flags & 33554432 /* Ambient */ && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) === 99 /* ESNext */ || !(node.flags & 33554432 /* Ambient */) && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) !== 1 /* CommonJS */)) { grammarErrorOnNode(node, Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead); } else if (moduleKind === 4 /* System */ && !(node.flags & 33554432 /* Ambient */)) { grammarErrorOnNode(node, Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system); @@ -88509,6 +89041,9 @@ function createTypeChecker(host) { } } function checkSourceElementWorker(node) { + if (getNodeCheckFlags(node) & 8388608 /* PartiallyTypeChecked */) { + return; + } if (canHaveJSDoc(node)) { forEach(node.jsDoc, ({ comment, tags }) => { checkJSDocCommentWorker(comment); @@ -88852,19 +89387,21 @@ function createTypeChecker(host) { currentNode = saveCurrentNode; (_b = tracing) == null ? void 0 : _b.pop(); } - function checkSourceFile(node) { + function checkSourceFile(node, nodesToCheck) { var _a, _b; (_a = tracing) == null ? void 0 : _a.push( tracing.Phase.Check, - "checkSourceFile", + nodesToCheck ? "checkSourceFileNodes" : "checkSourceFile", { path: node.path }, /*separateBeginAndEnd*/ true ); - mark("beforeCheck"); - checkSourceFileWorker(node); - mark("afterCheck"); - measure("Check", "beforeCheck", "afterCheck"); + const beforeMark = nodesToCheck ? "beforeCheckNodes" : "beforeCheck"; + const afterMark = nodesToCheck ? "afterCheckNodes" : "afterCheck"; + mark(beforeMark); + nodesToCheck ? checkSourceFileNodesWorker(node, nodesToCheck) : checkSourceFileWorker(node); + mark(afterMark); + measure("Check", beforeMark, afterMark); (_b = tracing) == null ? void 0 : _b.pop(); } function unusedIsError(kind, isAmbient) { @@ -88895,6 +89432,13 @@ function createTypeChecker(host) { clear(potentialWeakMapSetCollisions); clear(potentialReflectCollisions); clear(potentialUnusedRenamedBindingElementsInTypes); + if (links.flags & 8388608 /* PartiallyTypeChecked */) { + potentialThisCollisions = links.potentialThisCollisions; + potentialNewTargetCollisions = links.potentialNewTargetCollisions; + potentialWeakMapSetCollisions = links.potentialWeakMapSetCollisions; + potentialReflectCollisions = links.potentialReflectCollisions; + potentialUnusedRenamedBindingElementsInTypes = links.potentialUnusedRenamedBindingElementsInTypes; + } forEach(node.statements, checkSourceElement); checkSourceElement(node.endOfFileToken); checkDeferredNodes(node); @@ -88935,10 +89479,38 @@ function createTypeChecker(host) { links.flags |= 1 /* TypeChecked */; } } - function getDiagnostics2(sourceFile, ct) { + function checkSourceFileNodesWorker(file, nodes) { + const links = getNodeLinks(file); + if (!(links.flags & 1 /* TypeChecked */)) { + if (skipTypeChecking(file, compilerOptions, host)) { + return; + } + checkGrammarSourceFile(file); + clear(potentialThisCollisions); + clear(potentialNewTargetCollisions); + clear(potentialWeakMapSetCollisions); + clear(potentialReflectCollisions); + clear(potentialUnusedRenamedBindingElementsInTypes); + forEach(nodes, checkSourceElement); + checkDeferredNodes(file); + (links.potentialThisCollisions || (links.potentialThisCollisions = [])).push(...potentialThisCollisions); + (links.potentialNewTargetCollisions || (links.potentialNewTargetCollisions = [])).push(...potentialNewTargetCollisions); + (links.potentialWeakMapSetCollisions || (links.potentialWeakMapSetCollisions = [])).push(...potentialWeakMapSetCollisions); + (links.potentialReflectCollisions || (links.potentialReflectCollisions = [])).push(...potentialReflectCollisions); + (links.potentialUnusedRenamedBindingElementsInTypes || (links.potentialUnusedRenamedBindingElementsInTypes = [])).push( + ...potentialUnusedRenamedBindingElementsInTypes + ); + links.flags |= 8388608 /* PartiallyTypeChecked */; + for (const node of nodes) { + const nodeLinks2 = getNodeLinks(node); + nodeLinks2.flags |= 8388608 /* PartiallyTypeChecked */; + } + } + } + function getDiagnostics2(sourceFile, ct, nodesToCheck) { try { cancellationToken = ct; - return getDiagnosticsWorker(sourceFile); + return getDiagnosticsWorker(sourceFile, nodesToCheck); } finally { cancellationToken = void 0; } @@ -88949,20 +89521,23 @@ function createTypeChecker(host) { } deferredDiagnosticsCallbacks = []; } - function checkSourceFileWithEagerDiagnostics(sourceFile) { + function checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck) { ensurePendingDiagnosticWorkComplete(); const oldAddLazyDiagnostics = addLazyDiagnostic; addLazyDiagnostic = (cb) => cb(); - checkSourceFile(sourceFile); + checkSourceFile(sourceFile, nodesToCheck); addLazyDiagnostic = oldAddLazyDiagnostics; } - function getDiagnosticsWorker(sourceFile) { + function getDiagnosticsWorker(sourceFile, nodesToCheck) { if (sourceFile) { ensurePendingDiagnosticWorkComplete(); const previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); const previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length; - checkSourceFileWithEagerDiagnostics(sourceFile); + checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck); const semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + if (nodesToCheck) { + return semanticDiagnostics; + } const currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); if (currentGlobalDiagnostics !== previousGlobalDiagnostics) { const deferredGlobalDiagnostics = relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, compareDiagnostics); @@ -88972,7 +89547,7 @@ function createTypeChecker(host) { } return semanticDiagnostics; } - forEach(host.getSourceFiles(), checkSourceFileWithEagerDiagnostics); + forEach(host.getSourceFiles(), (file) => checkSourceFileWithEagerDiagnostics(file)); return diagnostics.getDiagnostics(); } function getGlobalDiagnostics() { @@ -89497,7 +90072,11 @@ function createTypeChecker(host) { } function getExportSpecifierLocalTargetSymbol(node) { if (isExportSpecifier(node)) { - return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : resolveEntityName(node.propertyName || node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); + const name = node.propertyName || node.name; + return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName(name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */) + ); } else { return resolveEntityName(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); } @@ -89843,7 +90422,7 @@ function createTypeChecker(host) { } function isReferencedAliasDeclaration(node, checkChildren) { Debug.assert(canCollectSymbolAliasAccessabilityData); - if (isAliasSymbolDeclaration2(node)) { + if (isAliasSymbolDeclaration(node)) { const symbol = getSymbolOfDeclaration(node); const links = symbol && getSymbolLinks(symbol); if (links == null ? void 0 : links.referenced) { @@ -89879,11 +90458,17 @@ function createTypeChecker(host) { const type = getTypeFromTypeNode(typeNode); return containsUndefinedType(type); } - function requiresAddingImplicitUndefined(parameter) { - return (isRequiredInitializedParameter(parameter) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter); + function requiresAddingImplicitUndefined(parameter, enclosingDeclaration) { + return (isRequiredInitializedParameter(parameter, enclosingDeclaration) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter); } - function isRequiredInitializedParameter(parameter) { - return !!strictNullChecks && !isOptionalParameter(parameter) && !isJSDocParameterTag(parameter) && !!parameter.initializer && !hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */); + function isRequiredInitializedParameter(parameter, enclosingDeclaration) { + if (!strictNullChecks || isOptionalParameter(parameter) || isJSDocParameterTag(parameter) || !parameter.initializer) { + return false; + } + if (hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */)) { + return !!enclosingDeclaration && isFunctionLikeDeclaration(enclosingDeclaration); + } + return true; } function isOptionalUninitializedParameterProperty(parameter) { return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */); @@ -89930,7 +90515,7 @@ function createTypeChecker(host) { return !!(getNodeCheckFlags(node) & flag); } function calculateNodeCheckFlagWorker(node, flag) { - if (!compilerOptions.noCheck && canIncludeBindAndCheckDiagnsotics(getSourceFileOfNode(node), compilerOptions)) { + if (!compilerOptions.noCheck && canIncludeBindAndCheckDiagnostics(getSourceFileOfNode(node), compilerOptions)) { return; } const links = getNodeLinks(node); @@ -89997,11 +90582,14 @@ function createTypeChecker(host) { } function checkSingleIdentifier(node2) { const nodeLinks2 = getNodeLinks(node2); - nodeLinks2.calculatedFlags |= 536870912 /* ConstructorReference */ | 16384 /* CapturedBlockScopedBinding */ | 32768 /* BlockScopedBindingInLoop */; - if (isIdentifier(node2) && isExpressionNodeOrShorthandPropertyAssignmentName(node2) && !(isPropertyAccessExpression(node2.parent) && node2.parent.name === node2)) { - const s = getResolvedSymbol(node2); - if (s && s !== unknownSymbol) { - checkIdentifierCalculateNodeCheckFlags(node2, s); + nodeLinks2.calculatedFlags |= 536870912 /* ConstructorReference */; + if (isIdentifier(node2)) { + nodeLinks2.calculatedFlags |= 32768 /* BlockScopedBindingInLoop */ | 16384 /* CapturedBlockScopedBinding */; + if (isExpressionNodeOrShorthandPropertyAssignmentName(node2) && !(isPropertyAccessExpression(node2.parent) && node2.parent.name === node2)) { + const s = getResolvedSymbol(node2); + if (s && s !== unknownSymbol) { + checkIdentifierCalculateNodeCheckFlags(node2, s); + } } } } @@ -90154,14 +90742,14 @@ function createTypeChecker(host) { return 11 /* ObjectType */; } } - function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker) { + function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, internalFlags, tracker) { const declaration = getParseTreeNode(declarationIn, isVariableLikeOrAccessor); if (!declaration) { return factory.createToken(133 /* AnyKeyword */); } const symbol = getSymbolOfDeclaration(declaration); const type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType; - return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.serializeTypeForDeclaration(declaration, type, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); } function isDeclarationWithPossibleInnerTypeNodeReuse(declaration) { return isFunctionLike(declaration) || isExportAssignment(declaration) || isVariableLike(declaration); @@ -90204,14 +90792,14 @@ function createTypeChecker(host) { } return candidateExpr; } - function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) { + function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, internalFlags, tracker) { const signatureDeclaration = getParseTreeNode(signatureDeclarationIn, isFunctionLike); if (!signatureDeclaration) { return factory.createToken(133 /* AnyKeyword */); } - return nodeBuilder.serializeReturnTypeForSignature(getSignatureFromDeclaration(signatureDeclaration), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker); + return nodeBuilder.serializeReturnTypeForSignature(getSignatureFromDeclaration(signatureDeclaration), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); } - function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) { + function createTypeOfExpression(exprIn, enclosingDeclaration, flags, internalFlags, tracker) { const expr = getParseTreeNode(exprIn, isExpression); if (!expr) { return factory.createToken(133 /* AnyKeyword */); @@ -90224,6 +90812,7 @@ function createTypeChecker(host) { void 0, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, + internalFlags, tracker ); } @@ -90329,6 +90918,8 @@ function createTypeChecker(host) { enclosing, /*flags*/ void 0, + /*internalFlags*/ + void 0, tracker ) : type === trueType ? factory.createTrue() : type === falseType && factory.createFalse(); if (enumResult) return enumResult; @@ -90457,15 +91048,15 @@ function createTypeChecker(host) { const parseDecl = getParseTreeNode(decl); return !!parseNode && !!parseDecl && (isVariableDeclaration(parseDecl) || isBindingElement(parseDecl)) && isBindingCapturedByNode(parseNode, parseDecl); }, - getDeclarationStatementsForSourceFile: (node, flags, tracker) => { + getDeclarationStatementsForSourceFile: (node, flags, internalFlags, tracker) => { const n = getParseTreeNode(node); Debug.assert(n && n.kind === 307 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile"); const sym = getSymbolOfDeclaration(node); if (!sym) { - return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker); + return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, internalFlags, tracker); } resolveExternalModuleSymbol(sym); - return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, tracker); + return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, internalFlags, tracker); }, isImportRequiredByAugmentation, isDefinitelyReferenceToGlobalSymbolObject @@ -90946,7 +91537,7 @@ function createTypeChecker(host) { break; case 95 /* ExportKeyword */: if (compilerOptions.verbatimModuleSyntax && !(node.flags & 33554432 /* Ambient */) && node.kind !== 265 /* TypeAliasDeclaration */ && node.kind !== 264 /* InterfaceDeclaration */ && // ModuleDeclaration needs to be checked that it is uninstantiated later - node.kind !== 267 /* ModuleDeclaration */ && node.parent.kind === 307 /* SourceFile */ && (moduleKind === 1 /* CommonJS */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */)) { + node.kind !== 267 /* ModuleDeclaration */ && node.parent.kind === 307 /* SourceFile */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { return grammarErrorOnNode(modifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); } if (flags & 32 /* Export */) { @@ -91453,6 +92044,13 @@ function createTypeChecker(host) { if (name.kind === 9 /* NumericLiteral */) { checkGrammarNumericLiteral(name); } + if (name.kind === 10 /* BigIntLiteral */) { + addErrorOrSuggestion( + /*isError*/ + true, + createDiagnosticForNode(name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name) + ); + } currentKind = 4 /* PropertyAssignment */; break; case 174 /* MethodDeclaration */: @@ -91549,6 +92147,7 @@ function createTypeChecker(host) { } case 7 /* ES2022 */: case 99 /* ESNext */: + case 200 /* Preserve */: case 4 /* System */: if (languageVersion >= 4 /* ES2017 */) { break; @@ -91855,7 +92454,7 @@ function createTypeChecker(host) { const message = node.initializer ? Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions : !node.type ? Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations : Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context; return grammarErrorOnNode(node.exclamationToken, message); } - if ((moduleKind < 5 /* ES2015 */ || getSourceFileOfNode(node).impliedNodeFormat === 1 /* CommonJS */) && moduleKind !== 4 /* System */ && !(node.parent.parent.flags & 33554432 /* Ambient */) && hasSyntacticModifier(node.parent.parent, 32 /* Export */)) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && !(node.parent.parent.flags & 33554432 /* Ambient */) && hasSyntacticModifier(node.parent.parent, 32 /* Export */)) { checkESModuleMarker(node.name); } return !!blockScopeKind && checkGrammarNameInLetOrConstDeclarations(node.name); @@ -92164,11 +92763,11 @@ function createTypeChecker(host) { return grammarErrorOnNode(node, Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments); } const nodeArguments = node.arguments; - if (moduleKind !== 99 /* ESNext */ && moduleKind !== 199 /* NodeNext */ && moduleKind !== 100 /* Node16 */) { + if (moduleKind !== 99 /* ESNext */ && moduleKind !== 199 /* NodeNext */ && moduleKind !== 100 /* Node16 */ && moduleKind !== 200 /* Preserve */) { checkGrammarForDisallowedTrailingComma(nodeArguments); if (nodeArguments.length > 1) { const importAttributesArgument = nodeArguments[1]; - return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext); + return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve); } } if (nodeArguments.length === 0 || nodeArguments.length > 2) { @@ -92307,7 +92906,7 @@ function isDeclarationNameOrImportPropertyName(name) { switch (name.parent.kind) { case 276 /* ImportSpecifier */: case 281 /* ExportSpecifier */: - return isIdentifier(name); + return isIdentifier(name) || name.kind === 11 /* StringLiteral */; default: return isDeclarationName(name); } @@ -92356,7 +92955,9 @@ function createBasicNodeBuilderModuleSpecifierResolutionHost(host) { isSourceOfProjectReferenceRedirect: (fileName) => host.isSourceOfProjectReferenceRedirect(fileName), fileExists: (fileName) => host.fileExists(fileName), getFileIncludeReasons: () => host.getFileIncludeReasons(), - readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0 + readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0, + getDefaultResolutionModeForFile: (file) => host.getDefaultResolutionModeForFile(file), + getModeForResolutionAtIndex: (file, index) => host.getModeForResolutionAtIndex(file, index) }; } var SymbolTrackerImpl = class _SymbolTrackerImpl { @@ -93550,7 +94151,7 @@ var visitEachChildTable = { return context.factory.updateImportSpecifier( node, node.isTypeOnly, - nodeVisitor(node.propertyName, visitor, isIdentifier), + nodeVisitor(node.propertyName, visitor, isModuleExportName), Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) ); }, @@ -93581,8 +94182,8 @@ var visitEachChildTable = { return context.factory.updateExportSpecifier( node, node.isTypeOnly, - nodeVisitor(node.propertyName, visitor, isIdentifier), - Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + nodeVisitor(node.propertyName, visitor, isModuleExportName), + Debug.checkDefined(nodeVisitor(node.name, visitor, isModuleExportName)) ); }, // Module references @@ -94298,7 +94899,7 @@ function containsDefaultReference(node) { return some(node.elements, isNamedDefaultReference); } function isNamedDefaultReference(e) { - return e.propertyName !== void 0 ? e.propertyName.escapedText === "default" /* Default */ : e.name.escapedText === "default" /* Default */; + return moduleExportNameIsDefault(e.propertyName || e.name); } function chainBundle(context, transformSourceFile) { return transformSourceFileOrBundle; @@ -94374,9 +94975,10 @@ function collectExternalModuleInfo(context, sourceFile) { hasImportDefault || (hasImportDefault = containsDefaultReference(node.exportClause)); } else { const name = node.exportClause.name; - if (!uniqueExports.get(idText(name))) { + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); - uniqueExports.set(idText(name), true); + uniqueExports.set(nameText, true); exportedNames = append(exportedNames, name); } hasImportStar = true; @@ -94434,26 +95036,29 @@ function collectExternalModuleInfo(context, sourceFile) { return { externalImports, exportSpecifiers, exportEquals, hasExportStarsToExportValues, exportedBindings, exportedNames, exportedFunctions, externalHelpersImportDeclaration }; function addExportedNamesForExportDeclaration(node) { for (const specifier of cast(node.exportClause, isNamedExports).elements) { - if (!uniqueExports.get(idText(specifier.name))) { + const specifierNameText = moduleExportNameTextUnescaped(specifier.name); + if (!uniqueExports.get(specifierNameText)) { const name = specifier.propertyName || specifier.name; - if (!node.moduleSpecifier) { - exportSpecifiers.add(name, specifier); - } - const decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); - if (decl) { - if (decl.kind === 262 /* FunctionDeclaration */) { - addExportedFunctionDeclaration(decl, specifier.name, specifier.name.escapedText === "default" /* Default */); - continue; + if (name.kind !== 11 /* StringLiteral */) { + if (!node.moduleSpecifier) { + exportSpecifiers.add(name, specifier); + } + const decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); + if (decl) { + if (decl.kind === 262 /* FunctionDeclaration */) { + addExportedFunctionDeclaration(decl, specifier.name, moduleExportNameIsDefault(specifier.name)); + continue; + } + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); } - multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); } - uniqueExports.set(idText(specifier.name), true); + uniqueExports.set(specifierNameText, true); exportedNames = append(exportedNames, specifier.name); } } } function addExportedFunctionDeclaration(node, name, isDefault) { - exportedFunctions.add(node); + exportedFunctions.add(getOriginalNode(node, isFunctionDeclaration)); if (isDefault) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name ?? context.factory.getDeclarationName(node)); @@ -94461,9 +95066,10 @@ function collectExternalModuleInfo(context, sourceFile) { } } else { name ?? (name = node.name); - if (!uniqueExports.get(idText(name))) { + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); - uniqueExports.set(idText(name), true); + uniqueExports.set(nameText, true); } } } @@ -95179,7 +95785,7 @@ function createDestructuringPropertyAccess(flattenContext, value, propertyName) propertyName ); return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); - } else if (isStringOrNumericLiteralLike(propertyName)) { + } else if (isStringOrNumericLiteralLike(propertyName) || isBigIntLiteral(propertyName)) { const argumentExpression = factory2.cloneNode(propertyName); return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); } else { @@ -95604,7 +96210,6 @@ function transformTypeScript(context) { let currentNamespaceContainerName; let currentLexicalScope; let currentScopeFirstDeclarationsOfName; - let currentClassHasParameterProperties; let enabledSubstitutions; let applicableSubstitutions; return transformSourceFileOrBundle; @@ -95632,14 +96237,12 @@ function transformTypeScript(context) { function saveStateAndInvoke(node, f) { const savedCurrentScope = currentLexicalScope; const savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; - const savedCurrentClassHasParameterProperties = currentClassHasParameterProperties; onBeforeVisitNode(node); const visited = f(node); if (currentLexicalScope !== savedCurrentScope) { currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; } currentLexicalScope = savedCurrentScope; - currentClassHasParameterProperties = savedCurrentClassHasParameterProperties; return visited; } function onBeforeVisitNode(node) { @@ -96272,7 +96875,7 @@ function transformTypeScript(context) { } function visitPropertyNameOfClassElement(member) { const name = member.name; - if (isComputedPropertyName(name) && (!hasStaticModifier(member) && currentClassHasParameterProperties || hasDecorators(member) && legacyDecorators)) { + if (legacyDecorators && isComputedPropertyName(name) && hasDecorators(member)) { const expression = visitNode(name.expression, visitor, isExpression); Debug.assert(expression); const innerExpression = skipPartiallyEmittedExpressions(expression); @@ -96647,7 +97250,7 @@ function transformTypeScript(context) { return updated; } function visitParenthesizedExpression(node) { - const innerExpression = skipOuterExpressions(node.expression, ~6 /* Assertions */); + const innerExpression = skipOuterExpressions(node.expression, ~(6 /* Assertions */ | 16 /* ExpressionsWithTypeArguments */)); if (isAssertionExpression(innerExpression) || isSatisfiesExpression(innerExpression)) { const expression = visitNode(node.expression, visitor, isExpression); Debug.assert(expression); @@ -97453,8 +98056,6 @@ function transformClassFields(context) { return node; } switch (node.kind) { - case 129 /* AccessorKeyword */: - return Debug.fail("Use `modifierVisitor` instead."); case 263 /* ClassDeclaration */: return visitClassDeclaration(node); case 231 /* ClassExpression */: @@ -98867,6 +99468,7 @@ function transformClassFields(context) { addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset)); } function transformConstructorBody(node, constructor, isDerivedClass) { + var _a; const instanceProperties = getProperties( node, /*requireInitializer*/ @@ -98960,12 +99562,12 @@ function transformClassFields(context) { setTextRange( factory2.createNodeArray(statements), /*location*/ - constructor ? constructor.body.statements : node.members + ((_a = constructor == null ? void 0 : constructor.body) == null ? void 0 : _a.statements) ?? node.members ), multiLine ), /*location*/ - constructor ? constructor.body : void 0 + constructor == null ? void 0 : constructor.body ); } function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) { @@ -105969,7 +106571,7 @@ function transformJsx(context) { const name = node.name; if (isIdentifier(name)) { const text = idText(name); - return /^[A-Za-z_]\w*$/.test(text) ? name : factory2.createStringLiteral(text); + return /^[A-Z_]\w*$/i.test(text) ? name : factory2.createStringLiteral(text); } return factory2.createStringLiteral(idText(name.namespace) + ":" + idText(name.name)); } @@ -108093,7 +108695,7 @@ function transformES2015(context) { statement, /*outermostLabeledStatement*/ node - ) : factory2.restoreEnclosingLabel(Debug.checkDefined(visitNode(statement, visitor, isStatement, factory2.liftToBlock)), node, convertedLoopState && resetLabel); + ) : factory2.restoreEnclosingLabel(visitNode(statement, visitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), statement), node, convertedLoopState && resetLabel); } function visitIterationStatement(node, outermostLabeledStatement) { switch (node.kind) { @@ -111750,7 +112352,7 @@ function transformModule(context) { factory2.createExpressionStatement( reduceLeft( currentModuleInfo.exportedNames.slice(i, i + chunkSize), - (prev, nextId) => factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), + (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero() ) ) @@ -112073,7 +112675,10 @@ function transformModule(context) { append(statements, createUnderscoreUnderscoreESModule()); } if (some(currentModuleInfo.exportedNames)) { - append(statements, factory2.createExpressionStatement(reduceLeft(currentModuleInfo.exportedNames, (prev, nextId) => factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero()))); + append( + statements, + factory2.createExpressionStatement(reduceLeft(currentModuleInfo.exportedNames, (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero())) + ); } for (const f of currentModuleInfo.exportedFunctions) { appendExportsOfHoistedDeclaration(statements, f); @@ -112203,7 +112808,7 @@ function transformModule(context) { case 354 /* PartiallyEmittedExpression */: return visitPartiallyEmittedExpression(node, valueIsDiscarded); case 213 /* CallExpression */: - if (isImportCall(node) && currentSourceFile.impliedNodeFormat === void 0) { + if (isImportCall(node) && host.shouldTransformImportCall(currentSourceFile)) { return visitImportCallExpression(node); } break; @@ -112396,7 +113001,7 @@ function transformModule(context) { return factory2.updateLabeledStatement( node, node.label, - Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), node.statement) ); } function visitWithStatement(node) { @@ -112410,7 +113015,7 @@ function transformModule(context) { return factory2.updateIfStatement( node, visitNode(node.expression, visitor, isExpression), - Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ); } @@ -112944,17 +113549,16 @@ function transformModule(context) { ); } for (const specifier of node.exportClause.elements) { - const exportNeedsImportDefault = !!getESModuleInterop(compilerOptions) && !(getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) && idText(specifier.propertyName || specifier.name) === "default"; - const exportedValue = factory2.createPropertyAccessExpression( - exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName, - specifier.propertyName || specifier.name - ); + const specifierName = specifier.propertyName || specifier.name; + const exportNeedsImportDefault = !!getESModuleInterop(compilerOptions) && !(getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) && moduleExportNameIsDefault(specifierName); + const target = exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName; + const exportedValue = specifierName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, specifierName) : factory2.createPropertyAccessExpression(target, specifierName); statements.push( setOriginalNode( setTextRange( factory2.createExpressionStatement( createExportExpression( - factory2.getExportName(specifier), + specifier.name.kind === 11 /* StringLiteral */ ? factory2.cloneNode(specifier.name) : factory2.getExportName(specifier), exportedValue, /*location*/ void 0, @@ -112979,7 +113583,7 @@ function transformModule(context) { factory2.cloneNode(node.exportClause.name), getHelperExpressionForExport( node, - moduleKind !== 2 /* AMD */ ? createRequireCall2(node) : isExportNamespaceAsDefaultDeclaration(node) ? generatedName : factory2.createIdentifier(idText(node.exportClause.name)) + moduleKind !== 2 /* AMD */ ? createRequireCall2(node) : isExportNamespaceAsDefaultDeclaration(node) ? generatedName : node.exportClause.name.kind === 11 /* StringLiteral */ ? generatedName : factory2.createIdentifier(idText(node.exportClause.name)) ) ) ), @@ -113309,10 +113913,13 @@ function transformModule(context) { return statements; } function appendExportStatement(statements, seen, exportName, expression, location, allowComments, liveBinding) { - if (!seen.has(exportName)) { + if (exportName.kind !== 11 /* StringLiteral */) { + if (seen.has(exportName)) { + return statements; + } seen.set(exportName, true); - statements = append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding)); } + statements = append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding)); return statements; } function createUnderscoreUnderscoreESModule() { @@ -113382,7 +113989,10 @@ function transformModule(context) { ]) ] ) : factory2.createAssignment( - factory2.createPropertyAccessExpression( + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression( + factory2.createIdentifier("exports"), + factory2.cloneNode(name) + ) : factory2.createPropertyAccessExpression( factory2.createIdentifier("exports"), factory2.cloneNode(name) ), @@ -113518,11 +114128,9 @@ function transformModule(context) { ); } else if (isImportSpecifier(importDeclaration)) { const name = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(name) - ), + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(name)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(name)), /*location*/ node ); @@ -113810,7 +114418,7 @@ function transformSystemModule(context) { const exportedNames = []; if (moduleInfo.exportedNames) { for (const exportedLocalName of moduleInfo.exportedNames) { - if (exportedLocalName.escapedText === "default") { + if (moduleExportNameIsDefault(exportedLocalName)) { continue; } exportedNames.push( @@ -113988,10 +114596,10 @@ function transformSystemModule(context) { for (const e of entry.exportClause.elements) { properties.push( factory2.createPropertyAssignment( - factory2.createStringLiteral(idText(e.name)), + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.name)), factory2.createElementAccessExpression( parameterName, - factory2.createStringLiteral(idText(e.propertyName || e.name)) + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.propertyName || e.name)) ) ) ); @@ -114018,7 +114626,7 @@ function transformSystemModule(context) { /*typeArguments*/ void 0, [ - factory2.createStringLiteral(idText(entry.exportClause.name)), + factory2.createStringLiteral(moduleExportNameTextUnescaped(entry.exportClause.name)), parameterName ] ) @@ -114358,7 +114966,7 @@ function transformSystemModule(context) { const exportSpecifiers = moduleInfo.exportSpecifiers.get(name); if (exportSpecifiers) { for (const exportSpecifier of exportSpecifiers) { - if (exportSpecifier.name.escapedText !== excludeName) { + if (moduleExportNameTextUnescaped(exportSpecifier.name) !== excludeName) { statements = appendExportStatement(statements, exportSpecifier.name, name); } } @@ -114510,7 +115118,7 @@ function transformSystemModule(context) { return factory2.updateLabeledStatement( node, node.label, - Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createExpressionStatement(factory2.createIdentifier("")) ); } function visitWithStatement(node) { @@ -114524,7 +115132,7 @@ function transformSystemModule(context) { return factory2.updateIfStatement( node, visitNode(node.expression, visitor, isExpression), - Debug.checkDefined(visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ); } @@ -114779,13 +115387,12 @@ function transformSystemModule(context) { node ); } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( factory2.createPropertyAssignment( factory2.cloneNode(name), - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(importDeclaration.propertyName || importDeclaration.name) - ) + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)) ), /*location*/ node @@ -114828,11 +115435,10 @@ function transformSystemModule(context) { node ); } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); return setTextRange( - factory2.createPropertyAccessExpression( - factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration), - factory2.cloneNode(importDeclaration.propertyName || importDeclaration.name) - ), + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)), /*location*/ node ); @@ -115198,8 +115804,8 @@ function transformECMAScriptModule(context) { } } -// src/compiler/transformers/module/node.ts -function transformNodeModule(context) { +// src/compiler/transformers/module/impliedNodeFormatDependent.ts +function transformImpliedNodeFormatDependentModule(context) { const previousOnSubstituteNode = context.onSubstituteNode; const previousOnEmitNode = context.onEmitNode; const esmTransform = transformECMAScriptModule(context); @@ -115210,6 +115816,7 @@ function transformNodeModule(context) { const cjsTransform = transformModule(context); const cjsOnSubstituteNode = context.onSubstituteNode; const cjsOnEmitNode = context.onEmitNode; + const getEmitModuleFormatOfFile2 = (file) => context.getEmitHost().getEmitModuleFormatOfFile(file); context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; context.enableSubstitution(307 /* SourceFile */); @@ -115224,7 +115831,7 @@ function transformNodeModule(context) { if (!currentSourceFile) { return previousOnSubstituteNode(hint, node); } - if (currentSourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (getEmitModuleFormatOfFile2(currentSourceFile) >= 5 /* ES2015 */) { return esmOnSubstituteNode(hint, node); } return cjsOnSubstituteNode(hint, node); @@ -115237,13 +115844,13 @@ function transformNodeModule(context) { if (!currentSourceFile) { return previousOnEmitNode(hint, node, emitCallback); } - if (currentSourceFile.impliedNodeFormat === 99 /* ESNext */) { + if (getEmitModuleFormatOfFile2(currentSourceFile) >= 5 /* ES2015 */) { return esmOnEmitNode(hint, node, emitCallback); } return cjsOnEmitNode(hint, node, emitCallback); } function getModuleTransformForFile(file) { - return file.impliedNodeFormat === 99 /* ESNext */ ? esmTransform : cjsTransform; + return getEmitModuleFormatOfFile2(file) >= 5 /* ES2015 */ ? esmTransform : cjsTransform; } function transformSourceFile(node) { if (node.isDeclarationFile) { @@ -115665,7 +116272,11 @@ function createGetIsolatedDeclarationErrors(resolver) { if (isSetAccessor(node.parent)) { return createAccessorTypeError(node.parent); } - const addUndefined = resolver.requiresAddingImplicitUndefined(node); + const addUndefined = resolver.requiresAddingImplicitUndefined( + node, + /*enclosingDeclaration*/ + void 0 + ); if (!addUndefined && node.initializer) { return createExpressionError(node.initializer); } @@ -115720,19 +116331,19 @@ function createGetIsolatedDeclarationErrors(resolver) { function getDeclarationDiagnostics(host, resolver, file) { const compilerOptions = host.getCompilerOptions(); const files = filter(getSourceFilesToEmit(host, file), isSourceFileNotJson); - const result = transformNodes( + return contains(files, file) ? transformNodes( resolver, host, factory, compilerOptions, - file ? contains(files, file) ? [file] : emptyArray : files, + [file], [transformDeclarations], /*allowDtsFiles*/ false - ); - return result.diagnostics; + ).diagnostics : void 0; } -var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 1 /* AllowUnresolvedNames */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitInternalNodeBuilderFlags = 8 /* AllowUnresolvedNames */; function transformDeclarations(context) { const throwDiagnostic = () => Debug.fail("Diagnostic emitted without context"); let getSymbolAccessibilityDiagnostic = throwDiagnostic; @@ -115829,7 +116440,10 @@ function transformDeclarations(context) { function reportPrivateInBaseOfClassExpression(propertyName) { if (errorNameNode || errorFallbackNode) { context.addDiagnostic( - createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName) + addRelatedInfo( + createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected, propertyName), + ...isVariableDeclaration((errorNameNode || errorFallbackNode).parent) ? [createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Add_a_type_annotation_to_the_variable_0, errorDeclarationNameWithFallback())] : [] + ) ); } } @@ -115885,7 +116499,7 @@ function transformDeclarations(context) { diagnosticMessage: s.errorModuleName ? Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit : Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit, errorNode: s.errorNode || sourceFile }; - const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, symbolTracker); + const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); getSymbolAccessibilityDiagnostic = oldDiag; return result; } @@ -116138,7 +116752,7 @@ function transformDeclarations(context) { if (shouldPrintWithInitializer(node)) { return; } - const shouldAddImplicitUndefined = node.kind === 169 /* Parameter */ && resolver.requiresAddingImplicitUndefined(node); + const shouldAddImplicitUndefined = node.kind === 169 /* Parameter */ && resolver.requiresAddingImplicitUndefined(node, enclosingDeclaration); if (type && !shouldAddImplicitUndefined) { return visitNode(type, visitDeclarationSubtree, isTypeNode); } @@ -116155,7 +116769,7 @@ function transformDeclarations(context) { case 172 /* PropertyDeclaration */: case 208 /* BindingElement */: case 260 /* VariableDeclaration */: - typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker); + typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); break; case 262 /* FunctionDeclaration */: case 180 /* ConstructSignature */: @@ -116163,7 +116777,7 @@ function transformDeclarations(context) { case 174 /* MethodDeclaration */: case 177 /* GetAccessor */: case 179 /* CallSignature */: - typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker); + typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); break; default: Debug.assertNever(node); @@ -116764,7 +117378,7 @@ function transformDeclarations(context) { newId, /*exclamationToken*/ void 0, - resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), + resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ void 0 ); @@ -116890,7 +117504,7 @@ function transformDeclarations(context) { return void 0; } getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(p.valueDeclaration); - const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags | -2147483648 /* NoSyntacticPrinter */, symbolTracker); + const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags | 2 /* NoSyntacticPrinter */, symbolTracker); getSymbolAccessibilityDiagnostic = oldDiag; const isNonContextualKeywordName = isStringANonContextualKeyword(nameStr); const name = isNonContextualKeywordName ? factory2.getGeneratedNameForNode(p.valueDeclaration) : factory2.createIdentifier(nameStr); @@ -117093,7 +117707,7 @@ function transformDeclarations(context) { newId, /*exclamationToken*/ void 0, - resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), + resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ void 0 ); @@ -117366,17 +117980,18 @@ function isProcessedComponent(node) { // src/compiler/transformer.ts function getModuleTransformer(moduleKind) { switch (moduleKind) { + case 200 /* Preserve */: + return transformECMAScriptModule; case 99 /* ESNext */: case 7 /* ES2022 */: case 6 /* ES2020 */: case 5 /* ES2015 */: - case 200 /* Preserve */: - return transformECMAScriptModule; - case 4 /* System */: - return transformSystemModule; case 100 /* Node16 */: case 199 /* NodeNext */: - return transformNodeModule; + case 1 /* CommonJS */: + return transformImpliedNodeFormatDependentModule; + case 4 /* System */: + return transformSystemModule; default: return transformModule; } @@ -117800,16 +118415,16 @@ function isBuildInfoFile(file) { function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDtsEmit = false, onlyBuildInfo, includeBuildInfo) { const sourceFiles = isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile, forceDtsEmit); const options = host.getCompilerOptions(); - if (options.outFile) { - if (sourceFiles.length) { - const bundle = factory.createBundle(sourceFiles); - const result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle); - if (result) { - return result; + if (!onlyBuildInfo) { + if (options.outFile) { + if (sourceFiles.length) { + const bundle = factory.createBundle(sourceFiles); + const result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle); + if (result) { + return result; + } } - } - } else { - if (!onlyBuildInfo) { + } else { for (const sourceFile of sourceFiles) { const result = action(getOutputPathsFor(sourceFile, host, forceDtsEmit), sourceFile); if (result) { @@ -117817,19 +118432,19 @@ function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDt } } } - if (includeBuildInfo) { - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - if (buildInfoPath) return action( - { buildInfoPath }, - /*sourceFileOrBundle*/ - void 0 - ); - } + } + if (includeBuildInfo) { + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); + if (buildInfoPath) return action( + { buildInfoPath }, + /*sourceFileOrBundle*/ + void 0 + ); } } function getTsBuildInfoEmitOutputFilePath(options) { const configFile = options.configFilePath; - if (!isIncrementalCompilation(options)) return void 0; + if (!canEmitTsBuildInfo(options)) return void 0; if (options.tsBuildInfoFile) return options.tsBuildInfoFile; const outPath = options.outFile; let buildInfoExtensionLess; @@ -117847,14 +118462,16 @@ function getTsBuildInfoEmitOutputFilePath(options) { } return buildInfoExtensionLess + ".tsbuildinfo" /* TsBuildInfo */; } +function canEmitTsBuildInfo(options) { + return isIncrementalCompilation(options) || !!options.tscBuild; +} function getOutputPathsForBundle(options, forceDtsPaths) { const outPath = options.outFile; const jsFilePath = options.emitDeclarationOnly ? void 0 : outPath; const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) ? removeFileExtension(outPath) + ".d.ts" /* Dts */ : void 0; const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath }; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; } function getOutputPathsFor(sourceFile, host, forceDtsPaths) { const options = host.getCompilerOptions(); @@ -117868,7 +118485,7 @@ function getOutputPathsFor(sourceFile, host, forceDtsPaths) { const sourceMapFilePath = !jsFilePath || isJsonSourceFile(sourceFile) ? void 0 : getSourceMapFilePath(jsFilePath, options); const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) && !isJsonFile ? getDeclarationEmitOutputFilePath(sourceFile.fileName, host) : void 0; const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; - return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath: void 0 }; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; } } function getSourceMapFilePath(jsFilePath, options) { @@ -117917,7 +118534,7 @@ function createAddOutput() { } } function getSingleOutputFileNames(configFile, addOutput) { - const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath } = getOutputPathsForBundle( + const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle( configFile.options, /*forceDtsPaths*/ false @@ -117926,7 +118543,6 @@ function getSingleOutputFileNames(configFile, addOutput) { addOutput(sourceMapFilePath); addOutput(declarationFilePath); addOutput(declarationMapPath); - addOutput(buildInfoPath); } function getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2) { if (isDeclarationFileName(inputFileName)) return; @@ -117977,8 +118593,8 @@ function getAllProjectOutputs(configFile, ignoreCase) { for (const inputFileName of configFile.fileNames) { getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2); } - addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options)); } + addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options)); return getOutputs(); } function getOutputFileNames(commandLine, inputFileName, ignoreCase) { @@ -118018,7 +118634,7 @@ function getFirstProjectOutput(configFile, ignoreCase) { function emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) { return !!forceDtsEmit && !!emitOnly; } -function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, declarationTransformers }, emitOnly, onlyBuildInfo, forceDtsEmit) { +function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, declarationTransformers }, emitOnly, onlyBuildInfo, forceDtsEmit, skipBuildInfo) { var compilerOptions = host.getCompilerOptions(); var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap || getAreDeclarationMapsEnabled(compilerOptions) ? [] : void 0; var emittedFilesList = compilerOptions.listEmittedFiles ? [] : void 0; @@ -118034,7 +118650,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit), forceDtsEmit, onlyBuildInfo, - !targetSourceFile + !targetSourceFile && !skipBuildInfo ); exit(); return { @@ -118056,15 +118672,12 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla (_f = tracing) == null ? void 0 : _f.pop(); } function emitBuildInfo(buildInfoPath) { - if (!buildInfoPath || targetSourceFile || emitSkipped) return; + if (!buildInfoPath || targetSourceFile) return; if (host.isEmitBlocked(buildInfoPath)) { emitSkipped = true; return; } - const buildInfo = host.getBuildInfo() || createBuildInfo( - /*program*/ - void 0 - ); + const buildInfo = host.getBuildInfo() || { version }; writeFile( host, emitterDiagnostics, @@ -118088,7 +118701,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla } (isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : filter(sourceFileOrBundle.sourceFiles, isSourceFileNotJson)).forEach( (sourceFile) => { - if (compilerOptions.noCheck || !canIncludeBindAndCheckDiagnsotics(sourceFile, compilerOptions)) markLinkedReferences(sourceFile); + if (compilerOptions.noCheck || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) markLinkedReferences(sourceFile); } ); const transform2 = transformNodes( @@ -118106,6 +118719,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla newLine: compilerOptions.newLine, noEmitHelpers: compilerOptions.noEmitHelpers, module: getEmitModuleKind(compilerOptions), + moduleResolution: getEmitModuleResolutionKind(compilerOptions), target: getEmitScriptTarget(compilerOptions), sourceMap: compilerOptions.sourceMap, inlineSourceMap: compilerOptions.inlineSourceMap, @@ -118140,7 +118754,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla const filesForEmit = forceDtsEmit ? sourceFiles : filter(sourceFiles, isSourceFileNotJson); const inputListOrBundle = compilerOptions.outFile ? [factory.createBundle(filesForEmit)] : filesForEmit; filesForEmit.forEach((sourceFile) => { - if (emitOnly && !getEmitDeclarations(compilerOptions) || compilerOptions.noCheck || emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) || !canIncludeBindAndCheckDiagnsotics(sourceFile, compilerOptions)) { + if (emitOnly && !getEmitDeclarations(compilerOptions) || compilerOptions.noCheck || emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) { collectLinkedAliases(sourceFile); } }); @@ -118168,6 +118782,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla newLine: compilerOptions.newLine, noEmitHelpers: true, module: compilerOptions.module, + moduleResolution: compilerOptions.moduleResolution, target: compilerOptions.target, sourceMap: emitOnly !== 2 /* BuilderSignature */ && compilerOptions.declarationMap, inlineSourceMap: compilerOptions.inlineSourceMap, @@ -118183,7 +118798,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla isEmitNotificationEnabled: declarationTransform.isEmitNotificationEnabled, substituteNode: declarationTransform.substituteNode }); - printSourceFileOrBundle( + const dtsWritten = printSourceFileOrBundle( declarationFilePath, declarationMapPath, declarationTransform, @@ -118197,7 +118812,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla } ); if (emittedFilesList) { - emittedFilesList.push(declarationFilePath); + if (dtsWritten) emittedFilesList.push(declarationFilePath); if (declarationMapPath) { emittedFilesList.push(declarationMapPath); } @@ -118226,6 +118841,7 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla forEachChild(node, collectLinkedAliases); } function markLinkedReferences(file) { + if (isSourceFileJS(file)) return; forEachChildRecursively(file, (n) => { if (isImportEqualsDeclaration(n) && !(getSyntacticModifierFlags(n) & 32 /* Export */)) return "skip"; if (isImportDeclaration(n)) return "skip"; @@ -118288,8 +118904,10 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla writer.writeLine(); } const text = writer.getText(); - writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, { sourceMapUrlPos, diagnostics: transform2.diagnostics }); + const data = { sourceMapUrlPos, diagnostics: transform2.diagnostics }; + writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, data); writer.clear(); + return !data.skippedDtsWrite; } function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) { return (mapOptions.sourceMap || mapOptions.inlineSourceMap) && (sourceFileOrBundle.kind !== 307 /* SourceFile */ || !fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */)); @@ -118345,9 +118963,6 @@ function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, decla return encodeURI(sourceMapFile); } } -function createBuildInfo(program) { - return { program, version }; -} function getBuildInfoText(buildInfo) { return JSON.stringify(buildInfo); } @@ -119210,7 +119825,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { } function getSortedEmitHelpers(node) { const helpers = getEmitHelpers(node); - return helpers && stableSort(helpers, compareEmitHelpers); + return helpers && toSorted(helpers, compareEmitHelpers); } function emitNumericOrBigIntLiteral(node) { emitLiteral( @@ -119220,7 +119835,13 @@ function createPrinter(printerOptions = {}, handlers = {}) { ); } function emitLiteral(node, jsxAttributeEscape) { - const text = getLiteralTextOfNode(node, printerOptions.neverAsciiEscape, jsxAttributeEscape); + const text = getLiteralTextOfNode( + node, + /*sourceFile*/ + void 0, + printerOptions.neverAsciiEscape, + jsxAttributeEscape + ); if ((printerOptions.sourceMap || printerOptions.inlineSourceMap) && (node.kind === 11 /* StringLiteral */ || isTemplateLiteralKind(node.kind))) { writeLiteral(text); } else { @@ -119701,6 +120322,8 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (isNumericLiteral(expression)) { const text = getLiteralTextOfNode( expression, + /*sourceFile*/ + void 0, /*neverAsciiEscape*/ true, /*jsxAttributeEscape*/ @@ -120922,7 +121545,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (node.comment) { const text = getTextOfJSDocComment(node.comment); if (text) { - const lines = text.split(/\r\n?|\n/g); + const lines = text.split(/\r\n?|\n/); for (const line of lines) { writeLine(); writeSpace(); @@ -121349,7 +121972,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { if (isFunctionLike(parentNode) && parentNode.typeArguments) { return emitTypeArguments(parentNode, parentNode.typeArguments); } - emitList(parentNode, typeParameters, 53776 /* TypeParameters */); + emitList(parentNode, typeParameters, 53776 /* TypeParameters */ | (isArrowFunction(parentNode) ? 64 /* AllowTrailingComma */ : 0 /* None */)); } function emitParameters(parentNode, parameters) { emitList(parentNode, parameters, 2576 /* Parameters */); @@ -121617,7 +122240,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { } } function writeLines(text) { - const lines = text.split(/\r\n?|\n/g); + const lines = text.split(/\r\n?|\n/); const indentation = guessIndentation(lines); for (const lineText of lines) { const line = indentation ? lineText.slice(indentation) : lineText; @@ -121842,18 +122465,18 @@ function createPrinter(printerOptions = {}, handlers = {}) { } return getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia); } - function getLiteralTextOfNode(node, neverAsciiEscape, jsxAttributeEscape) { + function getLiteralTextOfNode(node, sourceFile = currentSourceFile, neverAsciiEscape, jsxAttributeEscape) { if (node.kind === 11 /* StringLiteral */ && node.textSourceNode) { const textSourceNode = node.textSourceNode; if (isIdentifier(textSourceNode) || isPrivateIdentifier(textSourceNode) || isNumericLiteral(textSourceNode) || isJsxNamespacedName(textSourceNode)) { const text = isNumericLiteral(textSourceNode) ? textSourceNode.text : getTextOfNode2(textSourceNode); return jsxAttributeEscape ? `"${escapeJsxAttributeString(text)}"` : neverAsciiEscape || getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? `"${escapeString(text)}"` : `"${escapeNonAsciiString(text)}"`; } else { - return getLiteralTextOfNode(textSourceNode, neverAsciiEscape, jsxAttributeEscape); + return getLiteralTextOfNode(textSourceNode, getSourceFileOfNode(textSourceNode), neverAsciiEscape, jsxAttributeEscape); } } const flags = (neverAsciiEscape ? 1 /* NeverAsciiEscape */ : 0) | (jsxAttributeEscape ? 2 /* JsxAttributeEscape */ : 0) | (printerOptions.terminateUnterminatedLiterals ? 4 /* TerminateUnterminatedLiterals */ : 0) | (printerOptions.target && printerOptions.target >= 8 /* ES2021 */ ? 8 /* AllowNumericSeparator */ : 0); - return getLiteralText(node, currentSourceFile, flags); + return getLiteralText(node, sourceFile, flags); } function pushNameGenerationScope(node) { privateNameTempFlagsStack.push(privateNameTempFlags); @@ -122854,7 +123477,7 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi } try { return createCachedFileSystemEntries(rootDir, rootDirPath); - } catch (_e) { + } catch { Debug.assert(!cachedReadDirectoryResult.has(ensureTrailingDirectorySeparator(rootDirPath))); return void 0; } @@ -122943,6 +123566,12 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi function realpath(s) { return host.realpath ? host.realpath(s) : s; } + function clearFirstAncestorEntry(fileOrDirectoryPath) { + forEachAncestorDirectory( + getDirectoryPath(fileOrDirectoryPath), + (ancestor) => cachedReadDirectoryResult.delete(ensureTrailingDirectorySeparator(ancestor)) ? true : void 0 + ); + } function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) { const existingResult = getCachedFileSystemEntries(fileOrDirectoryPath); if (existingResult !== void 0) { @@ -122951,6 +123580,7 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi } const parentResult = getCachedFileSystemEntriesForBaseDir(fileOrDirectoryPath); if (!parentResult) { + clearFirstAncestorEntry(fileOrDirectoryPath); return void 0; } if (!host.directoryExists) { @@ -122976,6 +123606,8 @@ function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensi const parentResult = getCachedFileSystemEntriesForBaseDir(filePath); if (parentResult) { updateFilesOfFileSystemEntry(parentResult, getBaseNameOfFileName(fileName), eventKind === 0 /* Created */); + } else { + clearFirstAncestorEntry(filePath); } } function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists2) { @@ -123134,7 +123766,7 @@ function isIgnoredFileFromWildCardWatching({ } return false; function hasSourceFile(file) { - return realProgram ? !!realProgram.getSourceFileByPath(file) : builderProgram ? builderProgram.getState().fileInfos.has(file) : !!find(program, (rootFile) => toPath3(rootFile) === file); + return realProgram ? !!realProgram.getSourceFileByPath(file) : builderProgram ? builderProgram.state.fileInfos.has(file) : !!find(program, (rootFile) => toPath3(rootFile) === file); } function isSupportedScriptKind() { if (!getScriptKind2) return false; @@ -123155,9 +123787,6 @@ function isIgnoredFileFromWildCardWatching({ } } } -function isBuilderProgram(program) { - return !!program.getState; -} function isEmittedFileOfProgram(program, file) { if (!program) { return false; @@ -123682,7 +124311,6 @@ function getModeForUsageLocation(file, usage, compilerOptions) { return getModeForUsageLocationWorker(file, usage, compilerOptions); } function getModeForUsageLocationWorker(file, usage, compilerOptions) { - var _a; if (isImportDeclaration(usage.parent) || isExportDeclaration(usage.parent) || isJSDocImportTag(usage.parent)) { const isTypeOnly = isExclusivelyTypeOnlyImportOrExport(usage.parent); if (isTypeOnly) { @@ -123698,19 +124326,28 @@ function getModeForUsageLocationWorker(file, usage, compilerOptions) { return override; } } - if (compilerOptions && getEmitModuleKind(compilerOptions) === 200 /* Preserve */) { - return usage.parent.parent && isImportEqualsDeclaration(usage.parent.parent) || isRequireCall( - usage.parent, - /*requireStringLiteralLikeArgument*/ - false - ) ? 1 /* CommonJS */ : 99 /* ESNext */; + if (compilerOptions && importSyntaxAffectsModuleResolution(compilerOptions)) { + return getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions); } - if (file.impliedNodeFormat === void 0) return void 0; - if (file.impliedNodeFormat !== 99 /* ESNext */) { - return isImportCall(walkUpParenthesizedExpressions(usage.parent)) ? 99 /* ESNext */ : 1 /* CommonJS */; +} +function getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions) { + var _a; + if (!compilerOptions) { + return void 0; } const exprParentParent = (_a = walkUpParenthesizedExpressions(usage.parent)) == null ? void 0 : _a.parent; - return exprParentParent && isImportEqualsDeclaration(exprParentParent) ? 1 /* CommonJS */ : 99 /* ESNext */; + if (exprParentParent && isImportEqualsDeclaration(exprParentParent) || isRequireCall( + usage.parent, + /*requireStringLiteralLikeArgument*/ + false + )) { + return 1 /* CommonJS */; + } + if (isImportCall(walkUpParenthesizedExpressions(usage.parent))) { + return shouldTransformImportCallWorker(file, compilerOptions) ? 1 /* CommonJS */ : 99 /* ESNext */; + } + const fileEmitMode = getEmitModuleFormatOfFileWorker(file, compilerOptions); + return fileEmitMode === 1 /* CommonJS */ ? 1 /* CommonJS */ : emitModuleKindIsNonNodeESM(fileEmitMode) || fileEmitMode === 200 /* Preserve */ ? 99 /* ESNext */ : void 0; } function getResolutionModeOverride(node, grammarErrorOnNode) { if (!node) return void 0; @@ -123767,7 +124404,7 @@ function getTypeReferenceResolutionName(entry) { } var typeReferenceResolutionNameAndModeGetter = { getName: getTypeReferenceResolutionName, - getMode: (entry, file) => getModeForFileReference(entry, file == null ? void 0 : file.impliedNodeFormat) + getMode: (entry, file, compilerOptions) => getModeForFileReference(entry, file && getDefaultResolutionModeForFileWorker(file, compilerOptions)) }; function createTypeReferenceResolutionLoader(containingFile, redirectedReference, options, host, cache) { return { @@ -123941,19 +124578,15 @@ function getImpliedNodeFormatForFile(fileName, packageJsonInfoCache, host, optio return typeof result === "object" ? result.impliedNodeFormat : result; } function getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options) { - switch (getEmitModuleResolutionKind(options)) { - case 3 /* Node16 */: - case 99 /* NodeNext */: - return fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".mjs" /* Mjs */]) ? 99 /* ESNext */ : fileExtensionIsOneOf(fileName, [".d.cts" /* Dcts */, ".cts" /* Cts */, ".cjs" /* Cjs */]) ? 1 /* CommonJS */ : fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */]) ? lookupFromPackageJson() : void 0; - default: - return void 0; - } + const moduleResolution = getEmitModuleResolutionKind(options); + const shouldLookupFromPackageJson = 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || pathContainsNodeModules(fileName); + return fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".mjs" /* Mjs */]) ? 99 /* ESNext */ : fileExtensionIsOneOf(fileName, [".d.cts" /* Dcts */, ".cts" /* Cts */, ".cjs" /* Cjs */]) ? 1 /* CommonJS */ : shouldLookupFromPackageJson && fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */]) ? lookupFromPackageJson() : void 0; function lookupFromPackageJson() { const state = getTemporaryModuleResolutionState(packageJsonInfoCache, host, options); const packageJsonLocations = []; state.failedLookupLocations = packageJsonLocations; state.affectingLocations = packageJsonLocations; - const packageJsonScope = getPackageScopeForPath(fileName, state); + const packageJsonScope = getPackageScopeForPath(getDirectoryPath(fileName), state); const impliedNodeFormat = (packageJsonScope == null ? void 0 : packageJsonScope.contents.packageJsonContent.type) === "module" ? 99 /* ESNext */ : 1 /* CommonJS */; return { impliedNodeFormat, packageJsonLocations, packageJsonScope }; } @@ -124089,13 +124722,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config let commonSourceDirectory; let typeChecker; let classifiableNames; - const ambientModuleNameToUnmodifiedFileName = /* @__PURE__ */ new Map(); let fileReasons = createMultiMap(); let filesWithReferencesProcessed; let fileReasonsToChain; let reasonToRelatedInfo; - const cachedBindAndCheckDiagnosticsForFile = {}; - const cachedDeclarationDiagnosticsForFile = {}; + let cachedBindAndCheckDiagnosticsForFile; + let cachedDeclarationDiagnosticsForFile; let fileProcessingDiagnostics; let automaticTypeDirectiveNames; let automaticTypeDirectiveResolutions; @@ -124327,7 +124959,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config }); } } - files = stableSort(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); + files = toSorted(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); processingDefaultLibFiles = void 0; processingOtherFiles = void 0; filesWithReferencesProcessed = void 0; @@ -124338,7 +124970,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const newFile = getSourceFileByPath(oldSourceFile.resolvedPath); if (shouldCreateNewSourceFile || !newFile || newFile.impliedNodeFormat !== oldSourceFile.impliedNodeFormat || // old file wasn't redirect but new file is oldSourceFile.resolvedPath === oldSourceFile.path && newFile.resolvedPath !== oldSourceFile.path) { - host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path)); + host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path), newFile); } } if (!host.getParsedCommandLine) { @@ -124348,7 +124980,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config resolvedProjectReference.sourceFile, oldProgram.getCompilerOptions(), /*hasSourceFileByPath*/ - false + false, + /*newSourceFileByResolvedPath*/ + void 0 ); } }); @@ -124406,6 +125040,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config isSourceFileFromExternalLibrary, isSourceFileDefaultLibrary, getModeForUsageLocation: getModeForUsageLocation2, + getEmitSyntaxForUsageLocation, getModeForResolutionAtIndex: getModeForResolutionAtIndex2, getSourceFileFromReference, getLibFileFromReference, @@ -124434,6 +125069,11 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config forEachResolvedProjectReference: forEachResolvedProjectReference2, isSourceOfProjectReferenceRedirect, getRedirectReferenceForResolutionFromSourceOfProject, + getCompilerOptionsForFile, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getEmitModuleFormatOfFile: getEmitModuleFormatOfFile2, + getImpliedNodeFormatForEmit: getImpliedNodeFormatForEmit2, + shouldTransformImportCall, emitBuildInfo, fileExists, readFile, @@ -124565,12 +125205,18 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function resolveModuleNamesWorker(moduleNames, containingFile, reusedNames) { var _a2, _b2; - if (!moduleNames.length) return emptyArray; const containingFileName = getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory); const redirectedReference = getRedirectReferenceForResolution(containingFile); (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveModuleNamesWorker", { containingFileName }); mark("beforeResolveModule"); - const result = actualResolveModuleNamesWorker(moduleNames, containingFileName, redirectedReference, options, containingFile, reusedNames); + const result = actualResolveModuleNamesWorker( + moduleNames, + containingFileName, + redirectedReference, + options, + containingFile, + reusedNames + ); mark("afterResolveModule"); measure("ResolveModule", "beforeResolveModule", "afterResolveModule"); (_b2 = tracing) == null ? void 0 : _b2.pop(); @@ -124578,13 +125224,19 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function resolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFile, reusedNames) { var _a2, _b2; - if (!typeDirectiveNames.length) return []; const containingSourceFile = !isString(containingFile) ? containingFile : void 0; const containingFileName = !isString(containingFile) ? getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile; const redirectedReference = containingSourceFile && getRedirectReferenceForResolution(containingSourceFile); (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveTypeReferenceDirectiveNamesWorker", { containingFileName }); mark("beforeResolveTypeReference"); - const result = actualResolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFileName, redirectedReference, options, containingSourceFile, reusedNames); + const result = actualResolveTypeReferenceDirectiveNamesWorker( + typeDirectiveNames, + containingFileName, + redirectedReference, + options, + containingSourceFile, + reusedNames + ); mark("afterResolveTypeReference"); measure("ResolveTypeReference", "beforeResolveTypeReference", "afterResolveTypeReference"); (_b2 = tracing) == null ? void 0 : _b2.pop(); @@ -124654,144 +125306,108 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } return classifiableNames; } - function resolveModuleNamesReusingOldState(moduleNames, file) { - if (structureIsReused === 0 /* Not */ && !file.ambientModuleNames.length) { - return resolveModuleNamesWorker( - moduleNames, - file, + function resolveModuleNamesReusingOldState(moduleNames, containingFile) { + return resolveNamesReusingOldState({ + entries: moduleNames, + containingFile, + containingSourceFile: containingFile, + redirectedReference: getRedirectReferenceForResolution(containingFile), + nameAndModeGetter: moduleResolutionNameAndModeGetter, + resolutionWorker: resolveModuleNamesWorker, + getResolutionFromOldProgram: (name, mode) => oldProgram == null ? void 0 : oldProgram.getResolvedModule(containingFile, name, mode), + getResolved: getResolvedModuleFromResolution, + canReuseResolutionsInFile: () => containingFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingFile.fileName)) && !hasInvalidatedResolutions(containingFile.path), + resolveToOwnAmbientModule: true + }); + } + function resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectiveNames, containingFile) { + const containingSourceFile = !isString(containingFile) ? containingFile : void 0; + return resolveNamesReusingOldState({ + entries: typeDirectiveNames, + containingFile, + containingSourceFile, + redirectedReference: containingSourceFile && getRedirectReferenceForResolution(containingSourceFile), + nameAndModeGetter: typeReferenceResolutionNameAndModeGetter, + resolutionWorker: resolveTypeReferenceDirectiveNamesWorker, + getResolutionFromOldProgram: (name, mode) => { + var _a2; + return containingSourceFile ? oldProgram == null ? void 0 : oldProgram.getResolvedTypeReferenceDirective(containingSourceFile, name, mode) : (_a2 = oldProgram == null ? void 0 : oldProgram.getAutomaticTypeDirectiveResolutions()) == null ? void 0 : _a2.get(name, mode); + }, + getResolved: getResolvedTypeReferenceDirectiveFromResolution, + canReuseResolutionsInFile: () => containingSourceFile ? containingSourceFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingSourceFile.fileName)) && !hasInvalidatedResolutions(containingSourceFile.path) : !hasInvalidatedResolutions(toPath3(containingFile)) + }); + } + function resolveNamesReusingOldState({ + entries, + containingFile, + containingSourceFile, + redirectedReference, + nameAndModeGetter, + resolutionWorker, + getResolutionFromOldProgram, + getResolved, + canReuseResolutionsInFile, + resolveToOwnAmbientModule + }) { + if (!entries.length) return emptyArray; + if (structureIsReused === 0 /* Not */ && (!resolveToOwnAmbientModule || !containingSourceFile.ambientModuleNames.length)) { + return resolutionWorker( + entries, + containingFile, /*reusedNames*/ void 0 ); } - let unknownModuleNames; + let unknownEntries; + let unknownEntryIndices; let result; let reusedNames; - const predictedToResolveToAmbientModuleMarker = emptyResolution; - const oldSourceFile = oldProgram && oldProgram.getSourceFile(file.fileName); - for (let i = 0; i < moduleNames.length; i++) { - const moduleName = moduleNames[i]; - if (file === oldSourceFile && !hasInvalidatedResolutions(file.path)) { - const oldResolution = oldProgram == null ? void 0 : oldProgram.getResolvedModule(file, moduleName.text, getModeForUsageLocation2(file, moduleName)); - if (oldResolution == null ? void 0 : oldResolution.resolvedModule) { + const reuseResolutions = canReuseResolutionsInFile(); + for (let i = 0; i < entries.length; i++) { + const entry = entries[i]; + if (reuseResolutions) { + const name = nameAndModeGetter.getName(entry); + const mode = nameAndModeGetter.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) ?? options); + const oldResolution = getResolutionFromOldProgram(name, mode); + const oldResolved = oldResolution && getResolved(oldResolution); + if (oldResolved) { if (isTraceEnabled(options, host)) { trace( host, - oldResolution.resolvedModule.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, - moduleName.text, - getNormalizedAbsolutePath(file.originalFileName, currentDirectory), - oldResolution.resolvedModule.resolvedFileName, - oldResolution.resolvedModule.packageId && packageIdToString(oldResolution.resolvedModule.packageId) + resolutionWorker === resolveModuleNamesWorker ? oldResolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : oldResolved.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2, + name, + containingSourceFile ? getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) : containingFile, + oldResolved.resolvedFileName, + oldResolved.packageId && packageIdToString(oldResolved.packageId) ); } - (result ?? (result = new Array(moduleNames.length)))[i] = oldResolution; - (reusedNames ?? (reusedNames = [])).push(moduleName); + (result ?? (result = new Array(entries.length)))[i] = oldResolution; + (reusedNames ?? (reusedNames = [])).push(entry); continue; } } - let resolvesToAmbientModuleInNonModifiedFile = false; - if (contains(file.ambientModuleNames, moduleName.text)) { - resolvesToAmbientModuleInNonModifiedFile = true; - if (isTraceEnabled(options, host)) { - trace(host, Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, moduleName.text, getNormalizedAbsolutePath(file.originalFileName, currentDirectory)); - } - } else { - resolvesToAmbientModuleInNonModifiedFile = moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName); - } - if (resolvesToAmbientModuleInNonModifiedFile) { - (result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker; - } else { - (unknownModuleNames ?? (unknownModuleNames = [])).push(moduleName); - } - } - const resolutions = unknownModuleNames && unknownModuleNames.length ? resolveModuleNamesWorker(unknownModuleNames, file, reusedNames) : emptyArray; - if (!result) { - Debug.assert(resolutions.length === moduleNames.length); - return resolutions; - } - let j = 0; - for (let i = 0; i < result.length; i++) { - if (!result[i]) { - result[i] = resolutions[j]; - j++; - } - } - Debug.assert(j === resolutions.length); - return result; - function moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName) { - var _a2; - const resolutionToFile = (_a2 = oldProgram == null ? void 0 : oldProgram.getResolvedModule(file, moduleName.text, getModeForUsageLocation2(file, moduleName))) == null ? void 0 : _a2.resolvedModule; - const resolvedFile = resolutionToFile && oldProgram.getSourceFile(resolutionToFile.resolvedFileName); - if (resolutionToFile && resolvedFile) { - return false; - } - const unmodifiedFile = ambientModuleNameToUnmodifiedFileName.get(moduleName.text); - if (!unmodifiedFile) { - return false; - } - if (isTraceEnabled(options, host)) { - trace(host, Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified, moduleName.text, unmodifiedFile); - } - return true; - } - } - function resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectiveNames, containingFile) { - var _a2; - if (structureIsReused === 0 /* Not */) { - return resolveTypeReferenceDirectiveNamesWorker( - typeDirectiveNames, - containingFile, - /*reusedNames*/ - void 0 - ); - } - let unknownTypeReferenceDirectiveNames; - let result; - let reusedNames; - const containingSourceFile = !isString(containingFile) ? containingFile : void 0; - const oldSourceFile = !isString(containingFile) ? oldProgram && oldProgram.getSourceFile(containingFile.fileName) : void 0; - const canReuseResolutions = !isString(containingFile) ? containingFile === oldSourceFile && !hasInvalidatedResolutions(containingFile.path) : !hasInvalidatedResolutions(toPath3(containingFile)); - for (let i = 0; i < typeDirectiveNames.length; i++) { - const entry = typeDirectiveNames[i]; - if (canReuseResolutions) { - const typeDirectiveName = getTypeReferenceResolutionName(entry); - const mode = getModeForFileReference(entry, containingSourceFile == null ? void 0 : containingSourceFile.impliedNodeFormat); - const oldResolution = !isString(containingFile) ? oldProgram == null ? void 0 : oldProgram.getResolvedTypeReferenceDirective(containingFile, typeDirectiveName, mode) : (_a2 = oldProgram == null ? void 0 : oldProgram.getAutomaticTypeDirectiveResolutions()) == null ? void 0 : _a2.get(typeDirectiveName, mode); - if (oldResolution == null ? void 0 : oldResolution.resolvedTypeReferenceDirective) { + if (resolveToOwnAmbientModule) { + const name = nameAndModeGetter.getName(entry); + if (contains(containingSourceFile.ambientModuleNames, name)) { if (isTraceEnabled(options, host)) { trace( host, - oldResolution.resolvedTypeReferenceDirective.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2, - typeDirectiveName, - !isString(containingFile) ? getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile, - oldResolution.resolvedTypeReferenceDirective.resolvedFileName, - oldResolution.resolvedTypeReferenceDirective.packageId && packageIdToString(oldResolution.resolvedTypeReferenceDirective.packageId) + Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, + name, + getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) ); } - (result ?? (result = new Array(typeDirectiveNames.length)))[i] = oldResolution; - (reusedNames ?? (reusedNames = [])).push(entry); + (result ?? (result = new Array(entries.length)))[i] = emptyResolution; continue; } } - (unknownTypeReferenceDirectiveNames ?? (unknownTypeReferenceDirectiveNames = [])).push(entry); - } - if (!unknownTypeReferenceDirectiveNames) return result || emptyArray; - const resolutions = resolveTypeReferenceDirectiveNamesWorker( - unknownTypeReferenceDirectiveNames, - containingFile, - reusedNames - ); - if (!result) { - Debug.assert(resolutions.length === typeDirectiveNames.length); - return resolutions; + (unknownEntries ?? (unknownEntries = [])).push(entry); + (unknownEntryIndices ?? (unknownEntryIndices = [])).push(i); } - let j = 0; - for (let i = 0; i < result.length; i++) { - if (!result[i]) { - result[i] = resolutions[j]; - j++; - } - } - Debug.assert(j === resolutions.length); + if (!unknownEntries) return result; + const resolutions = resolutionWorker(unknownEntries, containingFile, reusedNames); + if (!result) return resolutions; + resolutions.forEach((resolution, index) => result[unknownEntryIndices[index]] = resolution); return result; } function canReuseProjectReferences() { @@ -124920,10 +125536,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } else if (hasInvalidatedResolutions(oldSourceFile.path)) { structureIsReused = 1 /* SafeModules */; modifiedSourceFiles.push(newSourceFile); - } else { - for (const moduleName of oldSourceFile.ambientModuleNames) { - ambientModuleNameToUnmodifiedFileName.set(moduleName, oldSourceFile.fileName); - } } newSourceFiles.push(newSourceFile); } @@ -125016,6 +125628,10 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config getSymlinkCache, writeFile: writeFileCallback || writeFile2, isEmitBlocked, + shouldTransformImportCall, + getEmitModuleFormatOfFile: getEmitModuleFormatOfFile2, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getModeForResolutionAtIndex: getModeForResolutionAtIndex2, readFile: (f) => host.readFile(f), fileExists: (f) => { const path = toPath3(f); @@ -125042,7 +125658,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function emitBuildInfo(writeFileCallback) { var _a2, _b2; - Debug.assert(!options.outFile); (_a2 = tracing) == null ? void 0 : _a2.push( tracing.Phase.Emit, "emitBuildInfo", @@ -125084,20 +125699,23 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (file.hasNoDefaultLib) { return true; } - if (!options.noLib) { + if (options.noLib) { return false; } const equalityComparer = host.useCaseSensitiveFileNames() ? equateStringsCaseSensitive : equateStringsCaseInsensitive; if (!options.lib) { return equalityComparer(file.fileName, getDefaultLibraryFileName()); } else { - return some(options.lib, (libFileName) => equalityComparer(file.fileName, resolvedLibReferences.get(libFileName).actual)); + return some(options.lib, (libFileName) => { + const resolvedLib = resolvedLibReferences.get(libFileName); + return !!resolvedLib && equalityComparer(file.fileName, resolvedLib.actual); + }); } } function getTypeChecker() { return typeChecker || (typeChecker = createTypeChecker(program)); } - function emit(sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit) { + function emit(sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit, skipBuildInfo) { var _a2, _b2; (_a2 = tracing) == null ? void 0 : _a2.push( tracing.Phase.Emit, @@ -125106,14 +125724,25 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config /*separateBeginAndEnd*/ true ); - const result = runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit)); + const result = runWithCancellationToken( + () => emitWorker( + program, + sourceFile, + writeFileCallback, + cancellationToken, + emitOnly, + transformers, + forceDtsEmit, + skipBuildInfo + ) + ); (_b2 = tracing) == null ? void 0 : _b2.pop(); return result; } function isEmitBlocked(emitFileName) { return hasEmitBlockingDiagnostics.has(toPath3(emitFileName)); } - function emitWorker(program2, sourceFile, writeFileCallback, cancellationToken, emitOnly, customTransformers, forceDtsEmit) { + function emitWorker(program2, sourceFile, writeFileCallback, cancellationToken, emitOnly, customTransformers, forceDtsEmit, skipBuildInfo) { if (!forceDtsEmit) { const result = handleNoEmitOptions(program2, sourceFile, writeFileCallback, cancellationToken); if (result) return result; @@ -125135,7 +125764,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config emitOnly, /*onlyBuildInfo*/ false, - forceDtsEmit + forceDtsEmit, + skipBuildInfo ) ); mark("afterEmit"); @@ -125162,15 +125792,23 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function getSyntacticDiagnostics(sourceFile, cancellationToken) { return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken); } - function getSemanticDiagnostics(sourceFile, cancellationToken) { - return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile, cancellationToken); + function getSemanticDiagnostics(sourceFile, cancellationToken, nodesToCheck) { + return getDiagnosticsHelper( + sourceFile, + (sourceFile2, cancellationToken2) => getSemanticDiagnosticsForFile(sourceFile2, cancellationToken2, nodesToCheck), + cancellationToken + ); } function getCachedSemanticDiagnostics(sourceFile) { - var _a2; - return sourceFile ? (_a2 = cachedBindAndCheckDiagnosticsForFile.perFile) == null ? void 0 : _a2.get(sourceFile.path) : cachedBindAndCheckDiagnosticsForFile.allDiagnostics; + return cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); } function getBindAndCheckDiagnostics(sourceFile, cancellationToken) { - return getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken); + return getBindAndCheckDiagnosticsForFile( + sourceFile, + cancellationToken, + /*nodesToCheck*/ + void 0 + ); } function getProgramDiagnostics(sourceFile) { var _a2; @@ -125184,12 +125822,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, programDiagnosticsInFile).diagnostics; } function getDeclarationDiagnostics2(sourceFile, cancellationToken) { - const options2 = program.getCompilerOptions(); - if (!sourceFile || options2.outFile) { - return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); - } else { - return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); - } + return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); } function getSyntacticDiagnosticsForFile(sourceFile) { if (isSourceFileJS(sourceFile)) { @@ -125210,16 +125843,26 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config throw e; } } - function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) { + function getSemanticDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { return concatenate( - filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), + filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck), options), getProgramDiagnostics(sourceFile) ); } - function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) { - return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache); + function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { + if (nodesToCheck) { + return getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck); + } + let result = cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedBindAndCheckDiagnosticsForFile ?? (cachedBindAndCheckDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; } - function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) { + function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck) { return runWithCancellationToken(() => { if (skipTypeChecking(sourceFile, options, program)) { return emptyArray; @@ -125227,24 +125870,34 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const typeChecker2 = getTypeChecker(); Debug.assert(!!sourceFile.bindDiagnostics); const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; - const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); const isPlainJs = isPlainJsFile(sourceFile, options.checkJs); + const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); let bindDiagnostics = sourceFile.bindDiagnostics; - let checkDiagnostics = typeChecker2.getDiagnostics(sourceFile, cancellationToken); + let checkDiagnostics = typeChecker2.getDiagnostics(sourceFile, cancellationToken, nodesToCheck); if (isPlainJs) { bindDiagnostics = filter(bindDiagnostics, (d) => plainJSErrors.has(d.code)); checkDiagnostics = filter(checkDiagnostics, (d) => plainJSErrors.has(d.code)); } - return getMergedBindAndCheckDiagnostics(sourceFile, !isPlainJs, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : void 0); + return getMergedBindAndCheckDiagnostics( + sourceFile, + !isPlainJs, + !!nodesToCheck, + bindDiagnostics, + checkDiagnostics, + isCheckJs ? sourceFile.jsDocDiagnostics : void 0 + ); }); } - function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, ...allDiagnostics) { + function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, partialCheck, ...allDiagnostics) { var _a2; const flatDiagnostics = flatten(allDiagnostics); if (!includeBindAndCheckDiagnostics || !((_a2 = sourceFile.commentDirectives) == null ? void 0 : _a2.length)) { return flatDiagnostics; } const { diagnostics, directives } = getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, flatDiagnostics); + if (partialCheck) { + return diagnostics; + } for (const errorExpectation of directives.getUnusedExpectations()) { diagnostics.push(createDiagnosticForRange(sourceFile, errorExpectation.range, Diagnostics.Unused_ts_expect_error_directive)); } @@ -125272,7 +125925,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return line; } const lineText = file.text.slice(lineStarts[line], lineStarts[line + 1]).trim(); - if (lineText !== "" && !/^(\s*)\/\/(.*)$/.test(lineText)) { + if (lineText !== "" && !/^\s*\/\/.*$/.test(lineText)) { return -1; } line--; @@ -125495,7 +126148,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config }); } function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) { - return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedDeclarationDiagnosticsForFile, getDeclarationDiagnosticsForFileNoCache); + let result = cachedDeclarationDiagnosticsForFile == null ? void 0 : cachedDeclarationDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedDeclarationDiagnosticsForFile ?? (cachedDeclarationDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; } function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(() => { @@ -125503,22 +126163,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return getDeclarationDiagnostics(getEmitHost(noop), resolver, sourceFile) || emptyArray; }); } - function getAndCacheDiagnostics(sourceFile, cancellationToken, cache, getDiagnostics2) { - var _a2; - const cachedResult = sourceFile ? (_a2 = cache.perFile) == null ? void 0 : _a2.get(sourceFile.path) : cache.allDiagnostics; - if (cachedResult) { - return cachedResult; - } - const result = getDiagnostics2(sourceFile, cancellationToken); - if (sourceFile) { - (cache.perFile || (cache.perFile = /* @__PURE__ */ new Map())).set(sourceFile.path, result); - } else { - cache.allDiagnostics = result; - } - return result; - } function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) { - return sourceFile.isDeclarationFile ? [] : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); + return sourceFile.isDeclarationFile ? emptyArray : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); } function getOptionsDiagnostics() { return sortAndDeduplicateDiagnostics(concatenate( @@ -126065,10 +126711,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const resolvedTypeReferenceDirective = resolutions[index]; const fileName = ref.fileName; resolutionsInFile.set(fileName, getModeForFileReference(ref, file.impliedNodeFormat), resolvedTypeReferenceDirective); - const mode = ref.resolutionMode || file.impliedNodeFormat; + const mode = ref.resolutionMode || getDefaultResolutionModeForFile2(file); processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: 5 /* TypeReferenceDirective */, file: file.path, index }); } } + function getCompilerOptionsForFile(file) { + var _a2; + return ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; + } function processTypeReferenceDirective(typeReferenceDirective, mode, resolution, reason) { var _a2, _b2; (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "processTypeReferenceDirective", { directive: typeReferenceDirective, hasResolved: !!resolution.resolvedTypeReferenceDirective, refKind: reason.kind, refPath: isReferencedFile(reason) ? reason.file : void 0 }); @@ -126169,13 +126819,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return host.getCanonicalFileName(fileName); } function processImportedModules(file) { - var _a2; collectExternalModuleReferences(file); if (file.imports.length || file.moduleAugmentations.length) { const moduleNames = getModuleNames(file); const resolutions = (resolvedModulesProcessing == null ? void 0 : resolvedModulesProcessing.get(file.path)) || resolveModuleNamesReusingOldState(moduleNames, file); Debug.assert(resolutions.length === moduleNames.length); - const optionsForFile = ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; + const optionsForFile = getCompilerOptionsForFile(file); const resolutionsInFile = createModeAwareCache(); (resolvedModules ?? (resolvedModules = /* @__PURE__ */ new Map())).set(file.path, resolutionsInFile); for (let index = 0; index < moduleNames.length; index++) { @@ -126340,8 +126989,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } const outputFile = options.outFile; if (options.tsBuildInfoFile) { - if (!isIncrementalCompilation(options)) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "tsBuildInfoFile", "incremental", "composite"); + if (!canEmitTsBuildInfo(options)) { + createDiagnosticForOptionName(Diagnostics.Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if_not_running_tsc_b, "tsBuildInfoFile"); } } else if (options.incremental && !outputFile && !options.configFilePath) { programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)); @@ -126480,14 +127129,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (!getEmitDeclarations(options)) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "emitDeclarationOnly", "declaration", "composite"); } - if (options.noEmit) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "emitDeclarationOnly", "noEmit"); - } - } - if (options.noCheck) { - if (options.noEmit) { - createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "noCheck", "noEmit"); - } } if (options.emitDecoratorMetadata && !options.experimentalDecorators) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"); @@ -126599,7 +127240,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } return Version.zero; } - function checkDeprecations(deprecatedIn, stopsWorkingIn, removedIn, createDiagnostic, fn) { + function checkDeprecations(deprecatedIn, removedIn, createDiagnostic, fn) { const deprecatedInVersion = new Version(deprecatedIn); const removedInVersion = new Version(removedIn); const typescriptVersion = new Version(typeScriptVersion3 || versionMajorMinor); @@ -126616,9 +127257,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } } else { if (value === void 0) { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, stopsWorkingIn, deprecatedIn); + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn); } else { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, stopsWorkingIn, deprecatedIn); + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn); } } }); @@ -126654,7 +127295,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config ); } } - checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => { + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { if (options.target === 0 /* ES3 */) { createDeprecatedDiagnostic("target", "ES3"); } @@ -126706,7 +127347,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function createDiagnostic(_name, _value, _useInstead, message, ...args) { createDiagnosticForReference(parentFile, index, message, ...args); } - checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => { + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { if (ref.prepend) { createDeprecatedDiagnostic("prepend"); } @@ -126732,7 +127373,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config redirectInfo = cachedChain.redirectInfo; } else { reasons == null ? void 0 : reasons.forEach(processReason); - redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file); + redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file, getCompilerOptionsForFile(file)); } if (fileProcessingReason) processReason(fileProcessingReason); const processedExtraReason = (seenReasons == null ? void 0 : seenReasons.size) !== (reasons == null ? void 0 : reasons.length); @@ -127090,13 +127731,53 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return symlinks; } function getModeForUsageLocation2(file, usage) { - var _a2; - const optionsForFile = ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; - return getModeForUsageLocationWorker(file, usage, optionsForFile); + return getModeForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); + } + function getEmitSyntaxForUsageLocation(file, usage) { + return getEmitSyntaxForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); } function getModeForResolutionAtIndex2(file, index) { return getModeForUsageLocation2(file, getModuleNameStringLiteralAt(file, index)); } + function getDefaultResolutionModeForFile2(sourceFile) { + return getDefaultResolutionModeForFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getImpliedNodeFormatForEmit2(sourceFile) { + return getImpliedNodeFormatForEmitWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getEmitModuleFormatOfFile2(sourceFile) { + return getEmitModuleFormatOfFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function shouldTransformImportCall(sourceFile) { + return shouldTransformImportCallWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } +} +function shouldTransformImportCallWorker(sourceFile, options) { + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */) { + return false; + } + return getEmitModuleFormatOfFileWorker(sourceFile, options) < 5 /* ES2015 */; +} +function getEmitModuleFormatOfFileWorker(sourceFile, options) { + return getImpliedNodeFormatForEmitWorker(sourceFile, options) ?? getEmitModuleKind(options); +} +function getImpliedNodeFormatForEmitWorker(sourceFile, options) { + var _a, _b; + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return sourceFile.impliedNodeFormat; + } + if (sourceFile.impliedNodeFormat === 1 /* CommonJS */ && (((_a = sourceFile.packageJsonScope) == null ? void 0 : _a.contents.packageJsonContent.type) === "commonjs" || fileExtensionIsOneOf(sourceFile.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */]))) { + return 1 /* CommonJS */; + } + if (sourceFile.impliedNodeFormat === 99 /* ESNext */ && (((_b = sourceFile.packageJsonScope) == null ? void 0 : _b.contents.packageJsonContent.type) === "module" || fileExtensionIsOneOf(sourceFile.fileName, [".mjs" /* Mjs */, ".mts" /* Mts */]))) { + return 99 /* ESNext */; + } + return void 0; +} +function getDefaultResolutionModeForFileWorker(sourceFile, options) { + return importSyntaxAffectsModuleResolution(options) ? getImpliedNodeFormatForEmitWorker(sourceFile, options) : void 0; } function updateHostForUseSourceOfProjectReferenceRedirect(host) { let setOfDeclarationDirectories; @@ -127224,8 +127905,7 @@ var emitSkippedWithNoDiagnostics = { diagnostics: emptyArray, sourceMaps: void 0 function handleNoEmitOptions(program, sourceFile, writeFile2, cancellationToken) { const options = program.getCompilerOptions(); if (options.noEmit) { - program.getSemanticDiagnostics(sourceFile, cancellationToken); - return sourceFile || options.outFile ? emitSkippedWithNoDiagnostics : program.emitBuildInfo(writeFile2, cancellationToken); + return sourceFile ? emitSkippedWithNoDiagnostics : program.emitBuildInfo(writeFile2, cancellationToken); } if (!options.noEmitOnError) return void 0; let diagnostics = [ @@ -127243,7 +127923,7 @@ function handleNoEmitOptions(program, sourceFile, writeFile2, cancellationToken) } if (!diagnostics.length) return void 0; let emittedFiles; - if (!sourceFile && !options.outFile) { + if (!sourceFile) { const emitResult = program.emitBuildInfo(writeFile2, cancellationToken); if (emitResult.diagnostics) diagnostics = [...diagnostics, ...emitResult.diagnostics]; emittedFiles = emitResult.emittedFiles; @@ -127708,20 +128388,30 @@ var BuilderFileEmit = /* @__PURE__ */ ((BuilderFileEmit2) => { BuilderFileEmit2[BuilderFileEmit2["Js"] = 1] = "Js"; BuilderFileEmit2[BuilderFileEmit2["JsMap"] = 2] = "JsMap"; BuilderFileEmit2[BuilderFileEmit2["JsInlineMap"] = 4] = "JsInlineMap"; - BuilderFileEmit2[BuilderFileEmit2["Dts"] = 8] = "Dts"; - BuilderFileEmit2[BuilderFileEmit2["DtsMap"] = 16] = "DtsMap"; + BuilderFileEmit2[BuilderFileEmit2["DtsErrors"] = 8] = "DtsErrors"; + BuilderFileEmit2[BuilderFileEmit2["DtsEmit"] = 16] = "DtsEmit"; + BuilderFileEmit2[BuilderFileEmit2["DtsMap"] = 32] = "DtsMap"; + BuilderFileEmit2[BuilderFileEmit2["Dts"] = 24] = "Dts"; BuilderFileEmit2[BuilderFileEmit2["AllJs"] = 7] = "AllJs"; - BuilderFileEmit2[BuilderFileEmit2["AllDts"] = 24] = "AllDts"; - BuilderFileEmit2[BuilderFileEmit2["All"] = 31] = "All"; + BuilderFileEmit2[BuilderFileEmit2["AllDtsEmit"] = 48] = "AllDtsEmit"; + BuilderFileEmit2[BuilderFileEmit2["AllDts"] = 56] = "AllDts"; + BuilderFileEmit2[BuilderFileEmit2["All"] = 63] = "All"; return BuilderFileEmit2; })(BuilderFileEmit || {}); +function isBuilderProgramStateWithDefinedProgram(state) { + return state.program !== void 0; +} +function toBuilderProgramStateWithDefinedProgram(state) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + return state; +} function getBuilderFileEmit(options) { let result = 1 /* Js */; if (options.sourceMap) result = result | 2 /* JsMap */; if (options.inlineSourceMap) result = result | 4 /* JsInlineMap */; - if (getEmitDeclarations(options)) result = result | 8 /* Dts */; - if (options.declarationMap) result = result | 16 /* DtsMap */; - if (options.emitDeclarationOnly) result = result & 24 /* AllDts */; + if (getEmitDeclarations(options)) result = result | 24 /* Dts */; + if (options.declarationMap) result = result | 32 /* DtsMap */; + if (options.emitDeclarationOnly) result = result & 56 /* AllDts */; return result; } function getPendingEmitKind(optionsOrEmitKind, oldOptionsOrEmitKind) { @@ -127732,7 +128422,8 @@ function getPendingEmitKind(optionsOrEmitKind, oldOptionsOrEmitKind) { const diff = oldEmitKind ^ emitKind; let result = 0 /* None */; if (diff & 7 /* AllJs */) result = emitKind & 7 /* AllJs */; - if (diff & 24 /* AllDts */) result = result | emitKind & 24 /* AllDts */; + if (diff & 8 /* DtsErrors */) result = result | emitKind & 8 /* DtsErrors */; + if (diff & 48 /* AllDtsEmit */) result = result | emitKind & 48 /* AllDtsEmit */; return result; } function hasSameKeys(map1, map2) { @@ -127750,17 +128441,18 @@ function createBuilderProgramState(newProgram, oldState) { const compilerOptions = newProgram.getCompilerOptions(); state.compilerOptions = compilerOptions; const outFilePath = compilerOptions.outFile; - if (!outFilePath) { - state.semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); - } else if (compilerOptions.composite && (oldState == null ? void 0 : oldState.outSignature) && outFilePath === oldState.compilerOptions.outFile) { + state.semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + if (outFilePath && compilerOptions.composite && (oldState == null ? void 0 : oldState.outSignature) && outFilePath === oldState.compilerOptions.outFile) { state.outSignature = oldState.outSignature && getEmitSignatureFromOldSignature(compilerOptions, oldState.compilerOptions, oldState.outSignature); } state.changedFilesSet = /* @__PURE__ */ new Set(); state.latestChangedDtsFile = compilerOptions.composite ? oldState == null ? void 0 : oldState.latestChangedDtsFile : void 0; + state.checkPending = state.compilerOptions.noCheck ? true : void 0; const useOldState = BuilderState.canReuseOldState(state.referencedMap, oldState); const oldCompilerOptions = useOldState ? oldState.compilerOptions : void 0; - const canCopySemanticDiagnostics = useOldState && oldState.semanticDiagnosticsPerFile && !!state.semanticDiagnosticsPerFile && !compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions); + let canCopySemanticDiagnostics = useOldState && !compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions); const canCopyEmitSignatures = compilerOptions.composite && (oldState == null ? void 0 : oldState.emitSignatures) && !outFilePath && !compilerOptionsAffectDeclarationPath(compilerOptions, oldState.compilerOptions); + let canCopyEmitDiagnostics = true; if (useOldState) { (_a = oldState.changedFilesSet) == null ? void 0 : _a.forEach((value) => state.changedFilesSet.add(value)); if (!outFilePath && ((_b = oldState.affectedFilesPendingEmit) == null ? void 0 : _b.size)) { @@ -127768,8 +128460,13 @@ function createBuilderProgramState(newProgram, oldState) { state.seenAffectedFiles = /* @__PURE__ */ new Set(); } state.programEmitPending = oldState.programEmitPending; + if (outFilePath && state.changedFilesSet.size) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + } + state.hasErrorsFromOldState = oldState.hasErrors; } else { - state.buildInfoEmitPending = true; + state.buildInfoEmitPending = isIncrementalCompilation(compilerOptions); } const referencedMap = state.referencedMap; const oldReferencedMap = useOldState ? oldState.referencedMap : void 0; @@ -127785,10 +128482,10 @@ function createBuilderProgramState(newProgram, oldState) { oldInfo.impliedFormat !== info.impliedFormat || // Referenced files changed !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) || // Referenced file was deleted in the new program newReferences && forEachKey(newReferences, (path) => !state.fileInfos.has(path) && oldState.fileInfos.has(path))) { - addFileToChangeSet(state, sourceFilePath); + addFileToChangeSet(sourceFilePath); } else { const sourceFile = newProgram.getSourceFileByPath(sourceFilePath); - const emitDiagnostics = (_a2 = oldState.emitDiagnosticsPerFile) == null ? void 0 : _a2.get(sourceFilePath); + const emitDiagnostics = canCopyEmitDiagnostics ? (_a2 = oldState.emitDiagnosticsPerFile) == null ? void 0 : _a2.get(sourceFilePath) : void 0; if (emitDiagnostics) { (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set( sourceFilePath, @@ -127817,16 +128514,16 @@ function createBuilderProgramState(newProgram, oldState) { }); if (useOldState && forEachEntry(oldState.fileInfos, (info, sourceFilePath) => { if (state.fileInfos.has(sourceFilePath)) return false; - if (outFilePath || info.affectsGlobalScope) return true; + if (info.affectsGlobalScope) return true; state.buildInfoEmitPending = true; - return false; + return !!outFilePath; })) { BuilderState.getAllFilesExcludingDefaultLibraryFile( state, newProgram, /*firstSourceFile*/ void 0 - ).forEach((file) => addFileToChangeSet(state, file.resolvedPath)); + ).forEach((file) => addFileToChangeSet(file.resolvedPath)); } else if (oldCompilerOptions) { const pendingEmitKind = compilerOptionsAffectEmit(compilerOptions, oldCompilerOptions) ? getBuilderFileEmit(compilerOptions) : getPendingEmitKind(compilerOptions, oldCompilerOptions); if (pendingEmitKind !== 0 /* None */) { @@ -127842,18 +128539,26 @@ function createBuilderProgramState(newProgram, oldState) { }); Debug.assert(!state.seenAffectedFiles || !state.seenAffectedFiles.size); state.seenAffectedFiles = state.seenAffectedFiles || /* @__PURE__ */ new Set(); - state.buildInfoEmitPending = true; - } else { + } else if (!state.changedFilesSet.size) { state.programEmitPending = state.programEmitPending ? state.programEmitPending | pendingEmitKind : pendingEmitKind; } + state.buildInfoEmitPending = true; } } + if (useOldState && state.semanticDiagnosticsPerFile.size !== state.fileInfos.size && oldState.checkPending !== state.checkPending) state.buildInfoEmitPending = true; return state; -} -function addFileToChangeSet(state, path) { - state.changedFilesSet.add(path); - state.buildInfoEmitPending = true; - state.programEmitPending = void 0; + function addFileToChangeSet(path) { + state.changedFilesSet.add(path); + if (outFilePath) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + state.semanticDiagnosticsFromOldState = void 0; + state.semanticDiagnosticsPerFile.clear(); + state.emitDiagnosticsPerFile = void 0; + } + state.buildInfoEmitPending = true; + state.programEmitPending = void 0; + } } function getEmitSignatureFromOldSignature(options, oldOptions, oldEmitSignature) { return !!options.declarationMap === !!oldOptions.declarationMap ? ( @@ -127877,7 +128582,12 @@ function repopulateDiagnostics(diagnostics, newProgram) { } function convertOrRepopulateDiagnosticMessageChain(chain, sourceFile, newProgram, repopulateInfo) { const info = repopulateInfo(chain); - if (info) { + if (info === true) { + return { + ...createModeMismatchDetails(sourceFile), + next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) + }; + } else if (info) { return { ...createModuleNotFoundChain(sourceFile, newProgram, info.moduleReference, info.mode, info.packageName || info.moduleReference), next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) @@ -127920,34 +128630,6 @@ function releaseCache(state) { BuilderState.releaseCache(state); state.program = void 0; } -function backupBuilderProgramEmitState(state) { - const outFilePath = state.compilerOptions.outFile; - Debug.assert(!state.changedFilesSet.size || outFilePath); - return { - affectedFilesPendingEmit: state.affectedFilesPendingEmit && new Map(state.affectedFilesPendingEmit), - seenEmittedFiles: state.seenEmittedFiles && new Map(state.seenEmittedFiles), - programEmitPending: state.programEmitPending, - emitSignatures: state.emitSignatures && new Map(state.emitSignatures), - outSignature: state.outSignature, - latestChangedDtsFile: state.latestChangedDtsFile, - hasChangedEmitSignature: state.hasChangedEmitSignature, - changedFilesSet: outFilePath ? new Set(state.changedFilesSet) : void 0, - buildInfoEmitPending: state.buildInfoEmitPending, - emitDiagnosticsPerFile: state.emitDiagnosticsPerFile && new Map(state.emitDiagnosticsPerFile) - }; -} -function restoreBuilderProgramEmitState(state, savedEmitState) { - state.affectedFilesPendingEmit = savedEmitState.affectedFilesPendingEmit; - state.seenEmittedFiles = savedEmitState.seenEmittedFiles; - state.programEmitPending = savedEmitState.programEmitPending; - state.emitSignatures = savedEmitState.emitSignatures; - state.outSignature = savedEmitState.outSignature; - state.latestChangedDtsFile = savedEmitState.latestChangedDtsFile; - state.hasChangedEmitSignature = savedEmitState.hasChangedEmitSignature; - state.buildInfoEmitPending = savedEmitState.buildInfoEmitPending; - state.emitDiagnosticsPerFile = savedEmitState.emitDiagnosticsPerFile; - if (savedEmitState.changedFilesSet) state.changedFilesSet = savedEmitState.changedFilesSet; -} function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) { Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.resolvedPath)); } @@ -127962,7 +128644,11 @@ function getNextAffectedFile(state, cancellationToken, host) { const affectedFile = affectedFiles[affectedFilesIndex]; if (!seenAffectedFiles.has(affectedFile.resolvedPath)) { state.affectedFilesIndex = affectedFilesIndex; - addToAffectedFilesPendingEmit(state, affectedFile.resolvedPath, getBuilderFileEmit(state.compilerOptions)); + addToAffectedFilesPendingEmit( + state, + affectedFile.resolvedPath, + getBuilderFileEmit(state.compilerOptions) + ); handleDtsMayChangeOfAffectedFile( state, affectedFile, @@ -127982,15 +128668,11 @@ function getNextAffectedFile(state, cancellationToken, host) { if (nextKey.done) { return void 0; } - const program = Debug.checkDefined(state.program); - const compilerOptions = program.getCompilerOptions(); - if (compilerOptions.outFile) { - Debug.assert(!state.semanticDiagnosticsPerFile); - return program; - } + const compilerOptions = state.program.getCompilerOptions(); + if (compilerOptions.outFile) return state.program; state.affectedFiles = BuilderState.getFilesAffectedByWithOldState( state, - program, + state.program, nextKey.value, cancellationToken, host @@ -128000,17 +128682,34 @@ function getNextAffectedFile(state, cancellationToken, host) { if (!state.seenAffectedFiles) state.seenAffectedFiles = /* @__PURE__ */ new Set(); } } -function clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles) { - var _a; - if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size)) return; - if (!emitOnlyDtsFiles) return state.affectedFilesPendingEmit = void 0; - state.affectedFilesPendingEmit.forEach((emitKind, path) => { - const pending = emitKind & 7 /* AllJs */; +function clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { + var _a, _b; + if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size) && !state.programEmitPending) return; + if (!emitOnlyDtsFiles && !isForDtsErrors) { + state.affectedFilesPendingEmit = void 0; + state.programEmitPending = void 0; + } + (_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.forEach((emitKind, path) => { + const pending = !isForDtsErrors ? emitKind & 7 /* AllJs */ : emitKind & (7 /* AllJs */ | 48 /* AllDtsEmit */); if (!pending) state.affectedFilesPendingEmit.delete(path); else state.affectedFilesPendingEmit.set(path, pending); }); + if (state.programEmitPending) { + const pending = !isForDtsErrors ? state.programEmitPending & 7 /* AllJs */ : state.programEmitPending & (7 /* AllJs */ | 48 /* AllDtsEmit */); + if (!pending) state.programEmitPending = void 0; + else state.programEmitPending = pending; + } +} +function getPendingEmitKindWithSeen(optionsOrEmitKind, seenOldOptionsOrEmitKind, emitOnlyDtsFiles, isForDtsErrors) { + let pendingKind = getPendingEmitKind(optionsOrEmitKind, seenOldOptionsOrEmitKind); + if (emitOnlyDtsFiles) pendingKind = pendingKind & 56 /* AllDts */; + if (isForDtsErrors) pendingKind = pendingKind & 8 /* DtsErrors */; + return pendingKind; } -function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles) { +function getBuilderFileEmitAllDts(isForDtsErrors) { + return !isForDtsErrors ? 56 /* AllDts */ : 8 /* DtsErrors */; +} +function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { var _a; if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size)) return void 0; return forEachEntry(state.affectedFilesPendingEmit, (emitKind, path) => { @@ -128021,12 +128720,16 @@ function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles) { return void 0; } const seenKind = (_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath); - let pendingKind = getPendingEmitKind(emitKind, seenKind); - if (emitOnlyDtsFiles) pendingKind = pendingKind & 24 /* AllDts */; + const pendingKind = getPendingEmitKindWithSeen( + emitKind, + seenKind, + emitOnlyDtsFiles, + isForDtsErrors + ); if (pendingKind) return { affectedFile, emitKind: pendingKind }; }); } -function getNextPendingEmitDiagnosticsFile(state) { +function getNextPendingEmitDiagnosticsFile(state, isForDtsErrors) { var _a; if (!((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) return void 0; return forEachEntry(state.emitDiagnosticsPerFile, (diagnostics, path) => { @@ -128037,15 +128740,14 @@ function getNextPendingEmitDiagnosticsFile(state) { return void 0; } const seenKind = ((_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath)) || 0 /* None */; - if (!(seenKind & 24 /* AllDts */)) return { affectedFile, diagnostics, seenKind }; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) return { affectedFile, diagnostics, seenKind }; }); } function removeDiagnosticsOfLibraryFiles(state) { if (!state.cleanedDiagnosticsOfLibFiles) { state.cleanedDiagnosticsOfLibFiles = true; - const program = Debug.checkDefined(state.program); - const options = program.getCompilerOptions(); - forEach(program.getSourceFiles(), (f) => program.isSourceFileDefaultLibrary(f) && !skipTypeChecking(f, options, program) && removeSemanticDiagnosticsOf(state, f.resolvedPath)); + const options = state.program.getCompilerOptions(); + forEach(state.program.getSourceFiles(), (f) => state.program.isSourceFileDefaultLibrary(f) && !skipTypeCheckingIgnoringNoCheck(f, options, state.program) && removeSemanticDiagnosticsOf(state, f.resolvedPath)); } } function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken, host) { @@ -128054,7 +128756,7 @@ function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken removeDiagnosticsOfLibraryFiles(state); BuilderState.updateShapeSignature( state, - Debug.checkDefined(state.program), + state.program, affectedFile, cancellationToken, host @@ -128072,12 +128774,11 @@ function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken function handleDtsMayChangeOf(state, path, invalidateJsFiles, cancellationToken, host) { removeSemanticDiagnosticsOf(state, path); if (!state.changedFilesSet.has(path)) { - const program = Debug.checkDefined(state.program); - const sourceFile = program.getSourceFileByPath(path); + const sourceFile = state.program.getSourceFileByPath(path); if (sourceFile) { BuilderState.updateShapeSignature( state, - program, + state.program, sourceFile, cancellationToken, host, @@ -128085,9 +128786,17 @@ function handleDtsMayChangeOf(state, path, invalidateJsFiles, cancellationToken, true ); if (invalidateJsFiles) { - addToAffectedFilesPendingEmit(state, path, getBuilderFileEmit(state.compilerOptions)); + addToAffectedFilesPendingEmit( + state, + path, + getBuilderFileEmit(state.compilerOptions) + ); } else if (getEmitDeclarations(state.compilerOptions)) { - addToAffectedFilesPendingEmit(state, path, state.compilerOptions.declarationMap ? 24 /* AllDts */ : 8 /* Dts */); + addToAffectedFilesPendingEmit( + state, + path, + state.compilerOptions.declarationMap ? 56 /* AllDts */ : 24 /* Dts */ + ); } } } @@ -128154,7 +128863,7 @@ function handleDtsMayChangeOfReferencingExportOfAffectedFile(state, affectedFile host ); if (isChangedSignature(state, currentPath)) { - const currentSourceFile = Debug.checkDefined(state.program).getSourceFileByPath(currentPath); + const currentSourceFile = state.program.getSourceFileByPath(currentPath); queue.push(...BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath)); } } @@ -128200,38 +128909,79 @@ function handleDtsMayChangeOfFileAndExportsOfFile(state, filePath, invalidateJsF ); return void 0; } -function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken) { +function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + if (state.compilerOptions.noCheck) return emptyArray; return concatenate( - getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken), - Debug.checkDefined(state.program).getProgramDiagnostics(sourceFile) + getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile), + state.program.getProgramDiagnostics(sourceFile) ); } -function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken) { +function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + semanticDiagnosticsPerFile ?? (semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile); const path = sourceFile.resolvedPath; - if (state.semanticDiagnosticsPerFile) { - const cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path); - if (cachedDiagnostics) { - return filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions); - } - } - const diagnostics = Debug.checkDefined(state.program).getBindAndCheckDiagnostics(sourceFile, cancellationToken); - if (state.semanticDiagnosticsPerFile) { - state.semanticDiagnosticsPerFile.set(path, diagnostics); + const cachedDiagnostics = semanticDiagnosticsPerFile.get(path); + if (cachedDiagnostics) { + return filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions); } + const diagnostics = state.program.getBindAndCheckDiagnostics(sourceFile, cancellationToken); + semanticDiagnosticsPerFile.set(path, diagnostics); + state.buildInfoEmitPending = true; return filterSemanticDiagnostics(diagnostics, state.compilerOptions); } -function isProgramBundleEmitBuildInfo(info) { +function isIncrementalBundleEmitBuildInfo(info) { var _a; return !!((_a = info.options) == null ? void 0 : _a.outFile); } +function isIncrementalBuildInfo(info) { + return !!info.fileNames; +} +function isNonIncrementalBuildInfo(info) { + return !isIncrementalBuildInfo(info) && !!info.root; +} +function ensureHasErrorsForState(state) { + if (state.hasErrors !== void 0) return; + if (isIncrementalCompilation(state.compilerOptions)) { + state.hasErrors = !some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return bindAndCheckDiagnostics === void 0 || // Missing semantic diagnostics in cache will be encoded in buildInfo + !!bindAndCheckDiagnostics.length || // cached semantic diagnostics will be encoded in buildInfo + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) && (hasSyntaxOrGlobalErrors(state) || some(state.program.getSourceFiles(), (f) => !!state.program.getProgramDiagnostics(f).length)); + } else { + state.hasErrors = some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return !!(bindAndCheckDiagnostics == null ? void 0 : bindAndCheckDiagnostics.length) || // If has semantic diagnostics + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) || hasSyntaxOrGlobalErrors(state); + } +} +function hasSyntaxOrGlobalErrors(state) { + return !!state.program.getConfigFileParsingDiagnostics().length || !!state.program.getSyntacticDiagnostics().length || !!state.program.getOptionsDiagnostics().length || !!state.program.getGlobalDiagnostics().length; +} +function getBuildInfoEmitPending(state) { + ensureHasErrorsForState(state); + return state.buildInfoEmitPending ?? (state.buildInfoEmitPending = !!state.hasErrorsFromOldState !== !!state.hasErrors); +} function getBuildInfo2(state) { var _a, _b; - const currentDirectory = Debug.checkDefined(state.program).getCurrentDirectory(); + const currentDirectory = state.program.getCurrentDirectory(); const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(getTsBuildInfoEmitOutputFilePath(state.compilerOptions), currentDirectory)); const latestChangedDtsFile = state.latestChangedDtsFile ? relativeToBuildInfoEnsuringAbsolutePath(state.latestChangedDtsFile) : void 0; const fileNames = []; const fileNameToFileId = /* @__PURE__ */ new Map(); const rootFileNames = new Set(state.program.getRootFileNames().map((f) => toPath(f, currentDirectory, state.program.getCanonicalFileName))); + ensureHasErrorsForState(state); + if (!isIncrementalCompilation(state.compilerOptions)) { + const buildInfo2 = { + root: arrayFrom(rootFileNames, (r) => relativeToBuildInfo(r)), + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version + }; + return buildInfo2; + } const root = []; if (state.compilerOptions.outFile) { const fileInfos2 = arrayFrom(state.fileInfos.entries(), ([key, value]) => { @@ -128239,12 +128989,15 @@ function getBuildInfo2(state) { tryAddRoot(key, fileId); return value.impliedFormat ? { version: value.version, impliedFormat: value.impliedFormat, signature: void 0, affectsGlobalScope: void 0 } : value.version; }); - const program2 = { + const buildInfo2 = { fileNames, fileInfos: fileInfos2, root, resolvedRoot: toResolvedRoot(), - options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions), + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), + semanticDiagnosticsPerFile: !state.changedFilesSet.size ? toIncrementalBuildInfoDiagnostics() : void 0, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), outSignature: state.outSignature, latestChangedDtsFile, pendingEmit: !state.programEmitPending ? void 0 : ( @@ -128253,10 +129006,13 @@ function getBuildInfo2(state) { // Pending emit is same as deteremined by compilerOptions state.programEmitPending ) - ) + ), // Actual value + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version }; - return createBuildInfo(program2); + return buildInfo2; } let fileIdsList; let fileNamesToFileIdListId; @@ -128311,7 +129067,7 @@ function getBuildInfo2(state) { toFileIdListId(state.referencedMap.getValues(key)) ]); } - const semanticDiagnosticsPerFile = convertToProgramBuildInfoDiagnostics(); + const semanticDiagnosticsPerFile = toIncrementalBuildInfoDiagnostics(); let affectedFilesPendingEmit; if ((_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.size) { const fullEmitForOptions = getBuilderFileEmit(state.compilerOptions); @@ -128325,7 +129081,7 @@ function getBuildInfo2(state) { affectedFilesPendingEmit, pendingEmit === fullEmitForOptions ? fileId : ( // Pending full emit per options - pendingEmit === 8 /* Dts */ ? [fileId] : ( + pendingEmit === 24 /* Dts */ ? [fileId] : ( // Pending on Dts only [fileId, pendingEmit] ) @@ -128335,29 +129091,25 @@ function getBuildInfo2(state) { } } } - let changeFileSet; - if (state.changedFilesSet.size) { - for (const path of arrayFrom(state.changedFilesSet.keys()).sort(compareStringsCaseSensitive)) { - changeFileSet = append(changeFileSet, toFileId(path)); - } - } - const emitDiagnosticsPerFile = convertToProgramBuildInfoEmitDiagnostics(); - const program = { + const buildInfo = { fileNames, + fileIdsList, fileInfos, root, resolvedRoot: toResolvedRoot(), - options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions), - fileIdsList, + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), referencedMap, semanticDiagnosticsPerFile, - emitDiagnosticsPerFile, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), affectedFilesPendingEmit, - changeFileSet, emitSignatures, - latestChangedDtsFile + latestChangedDtsFile, + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version }; - return createBuildInfo(program); + return buildInfo; function relativeToBuildInfoEnsuringAbsolutePath(path) { return relativeToBuildInfo(getNormalizedAbsolutePath(path, currentDirectory)); } @@ -128405,13 +129157,13 @@ function getBuildInfo2(state) { }); return result; } - function convertToProgramBuildInfoCompilerOptions(options) { + function toIncrementalBuildInfoCompilerOptions(options) { let result; const { optionsNameMap } = getOptionsNameMap(); for (const name of getOwnKeys(options).sort(compareStringsCaseSensitive)) { const optionInfo = optionsNameMap.get(name.toLowerCase()); if (optionInfo == null ? void 0 : optionInfo.affectsBuildInfo) { - (result || (result = {}))[name] = convertToReusableCompilerOptionValue( + (result || (result = {}))[name] = toReusableCompilerOptionValue( optionInfo, options[name] ); @@ -128419,7 +129171,7 @@ function getBuildInfo2(state) { } return result; } - function convertToReusableCompilerOptionValue(option, value) { + function toReusableCompilerOptionValue(option, value) { if (option) { Debug.assert(option.type !== "listOrElement"); if (option.type === "list") { @@ -128433,23 +129185,22 @@ function getBuildInfo2(state) { } return value; } - function convertToProgramBuildInfoDiagnostics() { + function toIncrementalBuildInfoDiagnostics() { let result; state.fileInfos.forEach((_value, key) => { - var _a2; - const value = (_a2 = state.semanticDiagnosticsPerFile) == null ? void 0 : _a2.get(key); + const value = state.semanticDiagnosticsPerFile.get(key); if (!value) { if (!state.changedFilesSet.has(key)) result = append(result, toFileId(key)); } else if (value.length) { result = append(result, [ toFileId(key), - convertToReusableDiagnostics(value, key) + toReusableDiagnostic(value, key) ]); } }); return result; } - function convertToProgramBuildInfoEmitDiagnostics() { + function toIncrementalBuildInfoEmitDiagnostics() { var _a2; let result; if (!((_a2 = state.emitDiagnosticsPerFile) == null ? void 0 : _a2.size)) return result; @@ -128457,55 +129208,64 @@ function getBuildInfo2(state) { const value = state.emitDiagnosticsPerFile.get(key); result = append(result, [ toFileId(key), - convertToReusableDiagnostics(value, key) + toReusableDiagnostic(value, key) ]); } return result; } - function convertToReusableDiagnostics(diagnostics, diagnosticFilePath) { + function toReusableDiagnostic(diagnostics, diagnosticFilePath) { Debug.assert(!!diagnostics.length); return diagnostics.map((diagnostic) => { - const result = convertToReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath); + const result = toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath); result.reportsUnnecessary = diagnostic.reportsUnnecessary; result.reportDeprecated = diagnostic.reportsDeprecated; result.source = diagnostic.source; result.skippedOn = diagnostic.skippedOn; const { relatedInformation } = diagnostic; - result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => convertToReusableDiagnosticRelatedInformation(r, diagnosticFilePath)) : [] : void 0; + result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => toReusableDiagnosticRelatedInformation(r, diagnosticFilePath)) : [] : void 0; return result; }); } - function convertToReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath) { + function toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath) { const { file } = diagnostic; return { ...diagnostic, file: file ? file.resolvedPath === diagnosticFilePath ? void 0 : relativeToBuildInfo(file.resolvedPath) : false, - messageText: isString(diagnostic.messageText) ? diagnostic.messageText : convertToReusableDiagnosticMessageChain(diagnostic.messageText) + messageText: isString(diagnostic.messageText) ? diagnostic.messageText : toReusableDiagnosticMessageChain(diagnostic.messageText) }; } - function convertToReusableDiagnosticMessageChain(chain) { + function toReusableDiagnosticMessageChain(chain) { if (chain.repopulateInfo) { return { info: chain.repopulateInfo(), - next: convertToReusableDiagnosticMessageChainArray(chain.next) + next: toReusableDiagnosticMessageChainArray(chain.next) }; } - const next = convertToReusableDiagnosticMessageChainArray(chain.next); + const next = toReusableDiagnosticMessageChainArray(chain.next); return next === chain.next ? chain : { ...chain, next }; } - function convertToReusableDiagnosticMessageChainArray(array) { + function toReusableDiagnosticMessageChainArray(array) { if (!array) return array; return forEach(array, (chain, index) => { - const reusable = convertToReusableDiagnosticMessageChain(chain); + const reusable = toReusableDiagnosticMessageChain(chain); if (chain === reusable) return void 0; const result = index > 0 ? array.slice(0, index - 1) : []; result.push(reusable); for (let i = index + 1; i < array.length; i++) { - result.push(convertToReusableDiagnosticMessageChain(array[i])); + result.push(toReusableDiagnosticMessageChain(array[i])); } return result; }) || array; } + function toChangeFileSet() { + let changeFileSet; + if (state.changedFilesSet.size) { + for (const path of arrayFrom(state.changedFilesSet.keys()).sort(compareStringsCaseSensitive)) { + changeFileSet = append(changeFileSet, toFileId(path)); + } + } + return changeFileSet; + } } var BuilderProgramKind = /* @__PURE__ */ ((BuilderProgramKind2) => { BuilderProgramKind2[BuilderProgramKind2["SemanticDiagnosticsBuilderProgram"] = 0] = "SemanticDiagnosticsBuilderProgram"; @@ -128569,25 +129329,27 @@ function computeSignature(text, host, data) { return (host.createHash ?? generateDjb2Hash)(getTextHandlingSourceMapForSignature(text, data)); } function createBuilderProgram(kind, { newProgram, host, oldProgram, configFileParsingDiagnostics }) { - let oldState = oldProgram && oldProgram.getState(); + let oldState = oldProgram && oldProgram.state; if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { newProgram = void 0; oldState = void 0; return oldProgram; } const state = createBuilderProgramState(newProgram, oldState); - newProgram.getBuildInfo = () => getBuildInfo2(state); + newProgram.getBuildInfo = () => getBuildInfo2(toBuilderProgramStateWithDefinedProgram(state)); newProgram = void 0; oldProgram = void 0; oldState = void 0; - const getState = () => state; - const builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics); - builderProgram.getState = getState; - builderProgram.saveEmitState = () => backupBuilderProgramEmitState(state); - builderProgram.restoreEmitState = (saved) => restoreBuilderProgramEmitState(state, saved); + const builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics); + builderProgram.state = state; builderProgram.hasChangedEmitSignature = () => !!state.hasChangedEmitSignature; - builderProgram.getAllDependencies = (sourceFile) => BuilderState.getAllDependencies(state, Debug.checkDefined(state.program), sourceFile); + builderProgram.getAllDependencies = (sourceFile) => BuilderState.getAllDependencies( + state, + Debug.checkDefined(state.program), + sourceFile + ); builderProgram.getSemanticDiagnostics = getSemanticDiagnostics; + builderProgram.getDeclarationDiagnostics = getDeclarationDiagnostics2; builderProgram.emit = emit; builderProgram.releaseProgram = () => releaseCache(state); if (kind === 0 /* SemanticDiagnosticsBuilderProgram */) { @@ -128601,76 +129363,145 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa } return builderProgram; function emitBuildInfo(writeFile2, cancellationToken) { - if (state.buildInfoEmitPending) { - const result = Debug.checkDefined(state.program).emitBuildInfo(writeFile2 || maybeBind(host, host.writeFile), cancellationToken); + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (getBuildInfoEmitPending(state)) { + const result = state.program.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); state.buildInfoEmitPending = false; return result; } return emitSkippedWithNoDiagnostics; } - function emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { - var _a, _b, _c; + function emitNextAffectedFileOrDtsErrors(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers, isForDtsErrors) { + var _a, _b, _c, _d; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); let affected = getNextAffectedFile(state, cancellationToken, host); const programEmitKind = getBuilderFileEmit(state.compilerOptions); - let emitKind = emitOnlyDtsFiles ? programEmitKind & 24 /* AllDts */ : programEmitKind; + let emitKind = !isForDtsErrors ? emitOnlyDtsFiles ? programEmitKind & 56 /* AllDts */ : programEmitKind : 8 /* DtsErrors */; if (!affected) { if (!state.compilerOptions.outFile) { - const pendingAffectedFile = getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles); - if (!pendingAffectedFile) { - const pendingForDiagnostics = getNextPendingEmitDiagnosticsFile(state); + const pendingAffectedFile = getNextAffectedFilePendingEmit( + state, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (pendingAffectedFile) { + ({ affectedFile: affected, emitKind } = pendingAffectedFile); + } else { + const pendingForDiagnostics = getNextPendingEmitDiagnosticsFile( + state, + isForDtsErrors + ); if (pendingForDiagnostics) { - (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set(pendingForDiagnostics.affectedFile.resolvedPath, pendingForDiagnostics.seenKind | 24 /* AllDts */); + (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set( + pendingForDiagnostics.affectedFile.resolvedPath, + pendingForDiagnostics.seenKind | getBuilderFileEmitAllDts(isForDtsErrors) + ); return { result: { emitSkipped: true, diagnostics: pendingForDiagnostics.diagnostics }, affected: pendingForDiagnostics.affectedFile }; } - if (!state.buildInfoEmitPending) return void 0; - const affected2 = state.program; - const result2 = affected2.emitBuildInfo(writeFile2 || maybeBind(host, host.writeFile), cancellationToken); - state.buildInfoEmitPending = false; - return { result: result2, affected: affected2 }; } - ({ affectedFile: affected, emitKind } = pendingAffectedFile); } else { - if (!state.programEmitPending) return void 0; - emitKind = state.programEmitPending; - if (emitOnlyDtsFiles) emitKind = emitKind & 24 /* AllDts */; - if (!emitKind) return void 0; - affected = state.program; + if (state.programEmitPending) { + emitKind = getPendingEmitKindWithSeen( + state.programEmitPending, + state.seenProgramEmit, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (emitKind) affected = state.program; + } + if (!affected && ((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) { + const seenKind = state.seenProgramEmit || 0 /* None */; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) { + state.seenProgramEmit = getBuilderFileEmitAllDts(isForDtsErrors) | seenKind; + const diagnostics = []; + state.emitDiagnosticsPerFile.forEach((d) => addRange(diagnostics, d)); + return { + result: { emitSkipped: true, diagnostics }, + affected: state.program + }; + } + } + } + if (!affected) { + if (isForDtsErrors || !getBuildInfoEmitPending(state)) return void 0; + const affected2 = state.program; + const result2 = affected2.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); + state.buildInfoEmitPending = false; + return { result: result2, affected: affected2 }; } } let emitOnly; if (emitKind & 7 /* AllJs */) emitOnly = 0 /* Js */; - if (emitKind & 24 /* AllDts */) emitOnly = emitOnly === void 0 ? 1 /* Dts */ : void 0; - if (affected === state.program) { - state.programEmitPending = state.changedFilesSet.size ? getPendingEmitKind(programEmitKind, emitKind) : state.programEmitPending ? getPendingEmitKind(state.programEmitPending, emitKind) : void 0; - } - const result = state.program.emit( + if (emitKind & 56 /* AllDts */) emitOnly = emitOnly === void 0 ? 1 /* Dts */ : void 0; + const result = !isForDtsErrors ? state.program.emit( affected === state.program ? void 0 : affected, getWriteFileCallback(writeFile2, customTransformers), cancellationToken, emitOnly, - customTransformers - ); + customTransformers, + /*forceDtsEmit*/ + void 0, + /*skipBuildInfo*/ + true + ) : { + emitSkipped: true, + diagnostics: state.program.getDeclarationDiagnostics( + affected === state.program ? void 0 : affected, + cancellationToken + ) + }; if (affected !== state.program) { const affectedSourceFile = affected; state.seenAffectedFiles.add(affectedSourceFile.resolvedPath); if (state.affectedFilesIndex !== void 0) state.affectedFilesIndex++; state.buildInfoEmitPending = true; - const existing = ((_a = state.seenEmittedFiles) == null ? void 0 : _a.get(affectedSourceFile.resolvedPath)) || 0 /* None */; + const existing = ((_b = state.seenEmittedFiles) == null ? void 0 : _b.get(affectedSourceFile.resolvedPath)) || 0 /* None */; (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, emitKind | existing); - const existingPending = ((_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.get(affectedSourceFile.resolvedPath)) || programEmitKind; + const existingPending = ((_c = state.affectedFilesPendingEmit) == null ? void 0 : _c.get(affectedSourceFile.resolvedPath)) || programEmitKind; const pendingKind = getPendingEmitKind(existingPending, emitKind | existing); if (pendingKind) (state.affectedFilesPendingEmit ?? (state.affectedFilesPendingEmit = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, pendingKind); - else (_c = state.affectedFilesPendingEmit) == null ? void 0 : _c.delete(affectedSourceFile.resolvedPath); + else (_d = state.affectedFilesPendingEmit) == null ? void 0 : _d.delete(affectedSourceFile.resolvedPath); if (result.diagnostics.length) (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, result.diagnostics); } else { state.changedFilesSet.clear(); + state.programEmitPending = state.changedFilesSet.size ? getPendingEmitKind(programEmitKind, emitKind) : state.programEmitPending ? getPendingEmitKind(state.programEmitPending, emitKind) : void 0; + state.seenProgramEmit = emitKind | (state.seenProgramEmit || 0 /* None */); + setEmitDiagnosticsPerFile(result.diagnostics); + state.buildInfoEmitPending = true; } return { result, affected }; } + function setEmitDiagnosticsPerFile(diagnostics) { + let emitDiagnosticsPerFile; + diagnostics.forEach((d) => { + if (!d.file) return; + let diagnostics2 = emitDiagnosticsPerFile == null ? void 0 : emitDiagnosticsPerFile.get(d.file.resolvedPath); + if (!diagnostics2) (emitDiagnosticsPerFile ?? (emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(d.file.resolvedPath, diagnostics2 = []); + diagnostics2.push(d); + }); + if (emitDiagnosticsPerFile) state.emitDiagnosticsPerFile = emitDiagnosticsPerFile; + } + function emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + return emitNextAffectedFileOrDtsErrors( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers, + /*isForDtsErrors*/ + false + ); + } function getWriteFileCallback(writeFile2, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); if (!getEmitDeclarations(state.compilerOptions)) return writeFile2 || maybeBind(host, host.writeFile); return (fileName, text, writeByteOrderMark, onError, sourceFiles, data) => { var _a, _b, _c; @@ -128705,7 +129536,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa if (state.compilerOptions.composite) { const filePath = sourceFiles[0].resolvedPath; emitSignature = handleNewSignature((_c = state.emitSignatures) == null ? void 0 : _c.get(filePath), emitSignature); - if (!emitSignature) return; + if (!emitSignature) return data.skippedDtsWrite = true; (state.emitSignatures ?? (state.emitSignatures = /* @__PURE__ */ new Map())).set(filePath, emitSignature); } } else if (state.compilerOptions.composite) { @@ -128714,7 +129545,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa /*newSignature*/ void 0 ); - if (!newSignature) return; + if (!newSignature) return data.skippedDtsWrite = true; state.outSignature = newSignature; } } @@ -128737,6 +129568,7 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa }; } function emit(targetSourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile); } @@ -128749,7 +129581,12 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa let diagnostics; let emittedFiles = []; let affectedEmitResult; - while (affectedEmitResult = emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers)) { + while (affectedEmitResult = emitNextAffectedFile( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers + )) { emitSkipped = emitSkipped || affectedEmitResult.result.emitSkipped; diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); emittedFiles = addRange(emittedFiles, affectedEmitResult.result.emittedFiles); @@ -128762,23 +129599,82 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa sourceMaps }; } else { - clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles); + clearAffectedFilesPendingEmit( + state, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false + ); } } - return Debug.checkDefined(state.program).emit( + const emitResult = state.program.emit( targetSourceFile, getWriteFileCallback(writeFile2, customTransformers), cancellationToken, emitOnlyDtsFiles, customTransformers ); + handleNonEmitBuilderWithEmitOrDtsErrors( + targetSourceFile, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false, + emitResult.diagnostics + ); + return emitResult; + } + function handleNonEmitBuilderWithEmitOrDtsErrors(targetSourceFile, emitOnlyDtsFiles, isForDtsErrors, diagnostics) { + if (!targetSourceFile && kind !== 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors); + setEmitDiagnosticsPerFile(diagnostics); + } + } + function getDeclarationDiagnostics2(sourceFile, cancellationToken) { + var _a; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); + let affectedEmitResult; + let diagnostics; + while (affectedEmitResult = emitNextAffectedFileOrDtsErrors( + /*writeFile*/ + void 0, + cancellationToken, + /*emitOnlyDtsFiles*/ + void 0, + /*customTransformers*/ + void 0, + /*isForDtsErrors*/ + true + )) { + if (!sourceFile) diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); + } + return (!sourceFile ? diagnostics : (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(sourceFile.resolvedPath)) || emptyArray; + } else { + const result = state.program.getDeclarationDiagnostics(sourceFile, cancellationToken); + handleNonEmitBuilderWithEmitOrDtsErrors( + sourceFile, + /*emitOnlyDtsFiles*/ + void 0, + /*isForDtsErrors*/ + true, + result + ); + return result; + } } function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); while (true) { const affected = getNextAffectedFile(state, cancellationToken, host); let result; - if (!affected) return void 0; - else if (affected !== state.program) { + if (!affected) { + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } + return void 0; + } else if (affected !== state.program) { const affectedSourceFile = affected; if (!ignoreSourceFile || !ignoreSourceFile(affectedSourceFile)) { result = getSemanticDiagnosticsOfFile(state, affectedSourceFile, cancellationToken); @@ -128788,33 +129684,48 @@ function createBuilderProgram(kind, { newProgram, host, oldProgram, configFilePa state.buildInfoEmitPending = true; if (!result) continue; } else { - result = state.program.getSemanticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken + let diagnostics; + const semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + state.program.getSourceFiles().forEach( + (sourceFile) => diagnostics = addRange( + diagnostics, + getSemanticDiagnosticsOfFile( + state, + sourceFile, + cancellationToken, + semanticDiagnosticsPerFile + ) + ) ); + state.semanticDiagnosticsPerFile = semanticDiagnosticsPerFile; + result = diagnostics || emptyArray; state.changedFilesSet.clear(); state.programEmitPending = getBuilderFileEmit(state.compilerOptions); + if (!state.compilerOptions.noCheck) state.checkPending = void 0; + state.buildInfoEmitPending = true; } return { result, affected }; } } function getSemanticDiagnostics(sourceFile, cancellationToken) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); - const compilerOptions = Debug.checkDefined(state.program).getCompilerOptions(); - if (compilerOptions.outFile) { - Debug.assert(!state.semanticDiagnosticsPerFile); - return Debug.checkDefined(state.program).getSemanticDiagnostics(sourceFile, cancellationToken); - } if (sourceFile) { return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken); } - while (getSemanticDiagnosticsOfNextAffectedFile(cancellationToken)) { + while (true) { + const affectedResult = getSemanticDiagnosticsOfNextAffectedFile(cancellationToken); + if (!affectedResult) break; + if (affectedResult.affected === state.program) return affectedResult.result; } let diagnostics; - for (const sourceFile2 of Debug.checkDefined(state.program).getSourceFiles()) { + for (const sourceFile2 of state.program.getSourceFiles()) { diagnostics = addRange(diagnostics, getSemanticDiagnosticsOfFile(state, sourceFile2, cancellationToken)); } + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } return diagnostics || emptyArray; } } @@ -128828,44 +129739,49 @@ function toBuilderStateFileInfoForMultiEmit(fileInfo) { return isString(fileInfo) ? { version: fileInfo, signature: fileInfo, affectsGlobalScope: void 0, impliedFormat: void 0 } : isString(fileInfo.signature) ? fileInfo : { version: fileInfo.version, signature: fileInfo.signature === false ? void 0 : fileInfo.version, affectsGlobalScope: fileInfo.affectsGlobalScope, impliedFormat: fileInfo.impliedFormat }; } function toBuilderFileEmit(value, fullEmitForOptions) { - return isNumber(value) ? fullEmitForOptions : value[1] || 8 /* Dts */; + return isNumber(value) ? fullEmitForOptions : value[1] || 24 /* Dts */; } function toProgramEmitPending(value, options) { return !value ? getBuilderFileEmit(options || {}) : value; } -function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host) { +function createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host) { var _a, _b, _c, _d; - const program = buildInfo.program; const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); let state; - const filePaths = (_a = program.fileNames) == null ? void 0 : _a.map(toPathInBuildInfoDirectory); + const filePaths = (_a = buildInfo.fileNames) == null ? void 0 : _a.map(toPathInBuildInfoDirectory); let filePathsSetList; - const latestChangedDtsFile = program.latestChangedDtsFile ? toAbsolutePath(program.latestChangedDtsFile) : void 0; - if (isProgramBundleEmitBuildInfo(program)) { - const fileInfos = /* @__PURE__ */ new Map(); - program.fileInfos.forEach((fileInfo, index) => { + const latestChangedDtsFile = buildInfo.latestChangedDtsFile ? toAbsolutePath(buildInfo.latestChangedDtsFile) : void 0; + const fileInfos = /* @__PURE__ */ new Map(); + const changedFilesSet = new Set(map(buildInfo.changeFileSet, toFilePath)); + if (isIncrementalBundleEmitBuildInfo(buildInfo)) { + buildInfo.fileInfos.forEach((fileInfo, index) => { const path = toFilePath(index + 1); fileInfos.set(path, isString(fileInfo) ? { version: fileInfo, signature: void 0, affectsGlobalScope: void 0, impliedFormat: void 0 } : fileInfo); }); state = { fileInfos, - compilerOptions: program.options ? convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {}, + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), + hasReusableDiagnostic: true, + changedFilesSet, latestChangedDtsFile, - outSignature: program.outSignature, - programEmitPending: program.pendingEmit === void 0 ? void 0 : toProgramEmitPending(program.pendingEmit, program.options) + outSignature: buildInfo.outSignature, + programEmitPending: buildInfo.pendingEmit === void 0 ? void 0 : toProgramEmitPending(buildInfo.pendingEmit, buildInfo.options), + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending }; } else { - filePathsSetList = (_b = program.fileIdsList) == null ? void 0 : _b.map((fileIds) => new Set(fileIds.map(toFilePath))); - const fileInfos = /* @__PURE__ */ new Map(); - const emitSignatures = ((_c = program.options) == null ? void 0 : _c.composite) && !program.options.outFile ? /* @__PURE__ */ new Map() : void 0; - program.fileInfos.forEach((fileInfo, index) => { + filePathsSetList = (_b = buildInfo.fileIdsList) == null ? void 0 : _b.map((fileIds) => new Set(fileIds.map(toFilePath))); + const emitSignatures = ((_c = buildInfo.options) == null ? void 0 : _c.composite) && !buildInfo.options.outFile ? /* @__PURE__ */ new Map() : void 0; + buildInfo.fileInfos.forEach((fileInfo, index) => { const path = toFilePath(index + 1); const stateFileInfo = toBuilderStateFileInfoForMultiEmit(fileInfo); fileInfos.set(path, stateFileInfo); if (emitSignatures && stateFileInfo.signature) emitSignatures.set(path, stateFileInfo.signature); }); - (_d = program.emitSignatures) == null ? void 0 : _d.forEach((value) => { + (_d = buildInfo.emitSignatures) == null ? void 0 : _d.forEach((value) => { if (isNumber(value)) emitSignatures.delete(toFilePath(value)); else { const key = toFilePath(value[0]); @@ -128878,25 +129794,24 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos ); } }); - const changedFilesSet = new Set(map(program.changeFileSet, toFilePath)); - const fullEmitForOptions = program.affectedFilesPendingEmit ? getBuilderFileEmit(program.options || {}) : void 0; + const fullEmitForOptions = buildInfo.affectedFilesPendingEmit ? getBuilderFileEmit(buildInfo.options || {}) : void 0; state = { fileInfos, - compilerOptions: program.options ? convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {}, - referencedMap: toManyToManyPathMap(program.referencedMap, program.options ?? {}), - semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(program.semanticDiagnosticsPerFile, fileInfos, changedFilesSet), - emitDiagnosticsPerFile: toPerFileEmitDiagnostics(program.emitDiagnosticsPerFile), + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + referencedMap: toManyToManyPathMap(buildInfo.referencedMap, buildInfo.options ?? {}), + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), hasReusableDiagnostic: true, - affectedFilesPendingEmit: program.affectedFilesPendingEmit && arrayToMap(program.affectedFilesPendingEmit, (value) => toFilePath(isNumber(value) ? value : value[0]), (value) => toBuilderFileEmit(value, fullEmitForOptions)), changedFilesSet, + affectedFilesPendingEmit: buildInfo.affectedFilesPendingEmit && arrayToMap(buildInfo.affectedFilesPendingEmit, (value) => toFilePath(isNumber(value) ? value : value[0]), (value) => toBuilderFileEmit(value, fullEmitForOptions)), latestChangedDtsFile, - emitSignatures: (emitSignatures == null ? void 0 : emitSignatures.size) ? emitSignatures : void 0 + emitSignatures: (emitSignatures == null ? void 0 : emitSignatures.size) ? emitSignatures : void 0, + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending }; } return { - getState: () => state, - saveEmitState: noop, - restoreEmitState: noop, + state, getProgram: notImplemented, getProgramOrUndefined: returnUndefined, releaseProgram: noop, @@ -128936,7 +129851,7 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos referenceMap.forEach(([fileId, fileIdListId]) => map2.set(toFilePath(fileId), toFilePathsSet(fileIdListId))); return map2; } - function toPerFileSemanticDiagnostics(diagnostics, fileInfos, changedFilesSet) { + function toPerFileSemanticDiagnostics(diagnostics) { const semanticDiagnostics = new Map( mapDefinedIterator( fileInfos.keys(), @@ -128947,7 +129862,7 @@ function createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, hos if (isNumber(value)) semanticDiagnostics.delete(toFilePath(value)); else semanticDiagnostics.set(toFilePath(value[0]), value[1]); }); - return semanticDiagnostics.size ? semanticDiagnostics : void 0; + return semanticDiagnostics; } function toPerFileEmitDiagnostics(diagnostics) { return diagnostics && arrayToMap(diagnostics, (value) => toFilePath(value[0]), (value) => value[1]); @@ -128988,15 +129903,19 @@ function getBuildInfoFileVersionMap(program, buildInfoPath, host) { } } } -function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) { +function getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host) { + if (!isNonIncrementalBuildInfo(buildInfo)) return void 0; + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + return buildInfo.root.map((r) => toPath(r, buildInfoDirectory, getCanonicalFileName)); +} +function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) { return { - getState: notImplemented, - saveEmitState: noop, - restoreEmitState: noop, + state: void 0, getProgram, - getProgramOrUndefined: () => getState().program, - releaseProgram: () => getState().program = void 0, - getCompilerOptions: () => getState().compilerOptions, + getProgramOrUndefined: () => state.program, + releaseProgram: () => state.program = void 0, + getCompilerOptions: () => state.compilerOptions, getSourceFile: (fileName) => getProgram().getSourceFile(fileName), getSourceFiles: () => getProgram().getSourceFiles(), getOptionsDiagnostics: (cancellationToken) => getProgram().getOptionsDiagnostics(cancellationToken), @@ -129012,20 +129931,50 @@ function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) close: noop }; function getProgram() { - return Debug.checkDefined(getState().program); + return Debug.checkDefined(state.program); } } // src/compiler/builderPublic.ts function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { - return createBuilderProgram(0 /* SemanticDiagnosticsBuilderProgram */, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences)); + return createBuilderProgram( + 0 /* SemanticDiagnosticsBuilderProgram */, + getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ) + ); } function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { - return createBuilderProgram(1 /* EmitAndSemanticDiagnosticsBuilderProgram */, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences)); + return createBuilderProgram( + 1 /* EmitAndSemanticDiagnosticsBuilderProgram */, + getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ) + ); } function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { - const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences); - return createRedirectedBuilderProgram(() => ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }), newConfigFileParsingDiagnostics); + const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ); + return createRedirectedBuilderProgram( + { program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, + newConfigFileParsingDiagnostics + ); } // src/compiler/resolutionCache.ts @@ -129038,9 +129987,9 @@ function removeIgnoredPath(path) { function perceivedOsRootLengthForWatching(pathComponents2, length2) { if (length2 <= 1) return 1; let indexAfterOsRoot = 1; - let isDosStyle = pathComponents2[0].search(/[a-zA-Z]:/) === 0; + let isDosStyle = pathComponents2[0].search(/[a-z]:/i) === 0; if (pathComponents2[0] !== directorySeparator && !isDosStyle && // Non dos style paths - pathComponents2[1].search(/[a-zA-Z]\$$/) === 0) { + pathComponents2[1].search(/[a-z]\$$/i) === 0) { if (length2 === 2) return 2; indexAfterOsRoot = 2; isDosStyle = true; @@ -129075,7 +130024,7 @@ function canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(fileOrDirPath) { function canWatchAffectingLocation(filePath) { return canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(filePath); } -function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath, rootDir, rootPath, rootPathComponents, getCurrentDirectory) { +function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath, rootDir, rootPath, rootPathComponents, getCurrentDirectory, preferNonRecursiveWatch) { const failedLookupPathComponents = getPathComponents(failedLookupLocationPath); failedLookupLocation = isRootedDiskPath(failedLookupLocation) ? normalizePath(failedLookupLocation) : getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory()); const failedLookupComponents = getPathComponents(failedLookupLocation); @@ -129107,10 +130056,11 @@ function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLoo perceivedOsRootLength, nodeModulesIndex, rootPathComponents, - lastNodeModulesIndex + lastNodeModulesIndex, + preferNonRecursiveWatch ); } -function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dirPathComponents, dirPathComponentsLength, perceivedOsRootLength, nodeModulesIndex, rootPathComponents, lastNodeModulesIndex) { +function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dirPathComponents, dirPathComponentsLength, perceivedOsRootLength, nodeModulesIndex, rootPathComponents, lastNodeModulesIndex, preferNonRecursiveWatch) { if (nodeModulesIndex !== -1) { return getDirectoryOfFailedLookupWatch( dirComponents, @@ -129121,11 +130071,13 @@ function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dir } let nonRecursive = true; let length2 = dirPathComponentsLength; - for (let i = 0; i < dirPathComponentsLength; i++) { - if (dirPathComponents[i] !== rootPathComponents[i]) { - nonRecursive = false; - length2 = Math.max(i + 1, perceivedOsRootLength + 1); - break; + if (!preferNonRecursiveWatch) { + for (let i = 0; i < dirPathComponentsLength; i++) { + if (dirPathComponents[i] !== rootPathComponents[i]) { + nonRecursive = false; + length2 = Math.max(i + 1, perceivedOsRootLength + 1); + break; + } } } return getDirectoryOfFailedLookupWatch( @@ -129153,7 +130105,7 @@ function getDirectoryOfFailedLookupWatch(dirComponents, dirPathComponents, lengt packageDirPath: packageDirLength !== void 0 ? getPathFromPathComponents(dirPathComponents, packageDirLength) : void 0 }; } -function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath, rootPath, rootPathComponents, getCurrentDirectory, filterCustomPath) { +function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath, rootPath, rootPathComponents, getCurrentDirectory, preferNonRecursiveWatch, filterCustomPath) { const typeRootPathComponents = getPathComponents(typeRootPath); if (isInDirectoryPath(rootPathComponents, typeRootPathComponents)) { return rootPath; @@ -129166,7 +130118,8 @@ function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootP perceivedOsRootLengthForWatching(typeRootPathComponents, typeRootPathComponents.length), typeRootPathComponents.indexOf("node_modules"), rootPathComponents, - typeRootPathComponents.lastIndexOf("node_modules") + typeRootPathComponents.lastIndexOf("node_modules"), + preferNonRecursiveWatch ); return toWatch && filterCustomPath(toWatch.dirPath) ? toWatch.dirPath : void 0; } @@ -129174,9 +130127,6 @@ function getRootDirectoryOfResolutionCache(rootDirForResolution, getCurrentDirec const normalized = getNormalizedAbsolutePath(rootDirForResolution, getCurrentDirectory()); return !isDiskPathRoot(normalized) ? removeTrailingDirectorySeparator(normalized) : normalized; } -function getRootPathSplitLength(rootPath) { - return rootPath.split(directorySeparator).length - (hasTrailingDirectorySeparator(rootPath) ? 1 : 0); -} function getModuleResolutionHost(resolutionHost) { var _a; return ((_a = resolutionHost.getCompilerHost) == null ? void 0 : _a.call(resolutionHost)) || resolutionHost; @@ -129225,7 +130175,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW let filesWithChangedSetOfUnresolvedImports; let filesWithInvalidatedResolutions; let filesWithInvalidatedNonRelativeUnresolvedImports; - const nonRelativeExternalModuleResolutions = createMultiMap(); + const nonRelativeExternalModuleResolutions = /* @__PURE__ */ new Set(); const resolutionsWithFailedLookups = /* @__PURE__ */ new Set(); const resolutionsWithOnlyAffectingLocations = /* @__PURE__ */ new Set(); const resolvedFileToResolution = /* @__PURE__ */ new Map(); @@ -129306,12 +130256,6 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW clear: clear2, onChangesAffectModuleResolution }; - function getResolvedModule(resolution) { - return resolution.resolvedModule; - } - function getResolvedTypeReferenceDirective(resolution) { - return resolution.resolvedTypeReferenceDirective; - } function clear2() { clearMap(directoryWatchesOfFailedLookups, closeFileWatcherOf); clearMap(fileWatchesOfAffectingLocations, closeFileWatcherOf); @@ -129382,8 +130326,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW moduleResolutionCache.clearAllExceptPackageJsonInfoCache(); typeReferenceDirectiveResolutionCache.clearAllExceptPackageJsonInfoCache(); libraryResolutionCache.clearAllExceptPackageJsonInfoCache(); - nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions); - nonRelativeExternalModuleResolutions.clear(); + watchFailedLookupLocationOfNonRelativeModuleResolutions(); isSymlinkCache.clear(); } function cleanupLibResolutionWatching(newProgram) { @@ -129393,7 +130336,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW stopWatchFailedLookupLocationOfResolution( resolution, resolutionHost.toPath(getInferredLibraryNameResolveFrom(resolutionHost.getCompilationSettings(), getCurrentDirectory(), libFileName)), - getResolvedModule + getResolvedModuleFromResolution ); resolvedLibraries.delete(libFileName); } @@ -129402,13 +130345,12 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW function finishCachingPerDirectoryResolution(newProgram, oldProgram) { filesWithInvalidatedNonRelativeUnresolvedImports = void 0; allModuleAndTypeResolutionsAreInvalidated = false; - nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions); - nonRelativeExternalModuleResolutions.clear(); + watchFailedLookupLocationOfNonRelativeModuleResolutions(); if (newProgram !== oldProgram) { cleanupLibResolutionWatching(newProgram); newProgram == null ? void 0 : newProgram.getSourceFiles().forEach((newFile) => { var _a; - const expected = isExternalOrCommonJsModule(newFile) ? ((_a = newFile.packageJsonLocations) == null ? void 0 : _a.length) ?? 0 : 0; + const expected = ((_a = newFile.packageJsonLocations) == null ? void 0 : _a.length) ?? 0; const existing = impliedFormatPackageJsons.get(newFile.resolvedPath) ?? emptyArray; for (let i = existing.length; i < expected; i++) { createFileWatcherOfAffectingLocation( @@ -129573,7 +130515,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW getModuleResolutionHost(resolutionHost), typeReferenceDirectiveResolutionCache ), - getResolutionWithResolvedFileName: getResolvedTypeReferenceDirective, + getResolutionWithResolvedFileName: getResolvedTypeReferenceDirectiveFromResolution, shouldRetryResolution: (resolution) => resolution.resolvedTypeReferenceDirective === void 0, deferWatchingNonRelativeResolution: false }); @@ -129594,7 +130536,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW resolutionHost, moduleResolutionCache ), - getResolutionWithResolvedFileName: getResolvedModule, + getResolutionWithResolvedFileName: getResolvedModuleFromResolution, shouldRetryResolution: (resolution) => !resolution.resolvedModule || !resolutionExtensionIsTSOrJson(resolution.resolvedModule.extension), logChanges: logChangesWhenResolvingModule, deferWatchingNonRelativeResolution: true @@ -129612,17 +130554,17 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW libraryName, resolution, path, - getResolvedModule, + getResolvedModuleFromResolution, /*deferWatchingNonRelativeResolution*/ false ); resolvedLibraries.set(libFileName, resolution); if (existingResolution) { - stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolvedModule); + stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolvedModuleFromResolution); } } else { if (isTraceEnabled(options, host)) { - const resolved = getResolvedModule(resolution); + const resolved = getResolvedModuleFromResolution(resolution); trace( host, (resolved == null ? void 0 : resolved.resolvedFileName) ? resolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved, @@ -129661,27 +130603,20 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW return endsWith(dirPath, "/node_modules/@types"); } function watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, filePath, getResolutionWithResolvedFileName, deferWatchingNonRelativeResolution) { - var _a; - if (resolution.refCount) { - resolution.refCount++; - Debug.assertIsDefined(resolution.files); - } else { - resolution.refCount = 1; - Debug.assert(!((_a = resolution.files) == null ? void 0 : _a.size)); - if (!deferWatchingNonRelativeResolution || isExternalModuleNameRelative(name)) { - watchFailedLookupLocationOfResolution(resolution); - } else { - nonRelativeExternalModuleResolutions.add(name, resolution); - } - const resolved = getResolutionWithResolvedFileName(resolution); - if (resolved && resolved.resolvedFileName) { - const key = resolutionHost.toPath(resolved.resolvedFileName); - let resolutions = resolvedFileToResolution.get(key); - if (!resolutions) resolvedFileToResolution.set(key, resolutions = /* @__PURE__ */ new Set()); - resolutions.add(resolution); - } - } (resolution.files ?? (resolution.files = /* @__PURE__ */ new Set())).add(filePath); + if (resolution.files.size !== 1) return; + if (!deferWatchingNonRelativeResolution || isExternalModuleNameRelative(name)) { + watchFailedLookupLocationOfResolution(resolution); + } else { + nonRelativeExternalModuleResolutions.add(resolution); + } + const resolved = getResolutionWithResolvedFileName(resolution); + if (resolved && resolved.resolvedFileName) { + const key = resolutionHost.toPath(resolved.resolvedFileName); + let resolutions = resolvedFileToResolution.get(key); + if (!resolutions) resolvedFileToResolution.set(key, resolutions = /* @__PURE__ */ new Set()); + resolutions.add(resolution); + } } function watchFailedLookupLocation(failedLookupLocation, setAtRoot) { const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); @@ -129691,7 +130626,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootDir, rootPath, rootPathComponents, - getCurrentDirectory + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch ); if (toWatch) { const { dir, dirPath, nonRecursive, packageDir, packageDirPath } = toWatch; @@ -129706,7 +130642,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW return setAtRoot; } function watchFailedLookupLocationOfResolution(resolution) { - Debug.assert(!!resolution.refCount); + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); const { failedLookupLocations, affectingLocations, alternateResult } = resolution; if (!(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !(affectingLocations == null ? void 0 : affectingLocations.length) && !alternateResult) return; if ((failedLookupLocations == null ? void 0 : failedLookupLocations.length) || alternateResult) resolutionsWithFailedLookups.add(resolution); @@ -129732,7 +130669,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW watchAffectingLocationsOfResolution(resolution, !(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !alternateResult); } function watchAffectingLocationsOfResolution(resolution, addToResolutionsWithOnlyAffectingLocations) { - Debug.assert(!!resolution.refCount); + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); const { affectingLocations } = resolution; if (!(affectingLocations == null ? void 0 : affectingLocations.length)) return; if (addToResolutionsWithOnlyAffectingLocations) resolutionsWithOnlyAffectingLocations.add(resolution); @@ -129806,17 +130744,9 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW (_a = watcher == null ? void 0 : watcher.symlinks) == null ? void 0 : _a.forEach((path2) => invalidateAffectingFileWatcher(path2, packageJsonMap)); packageJsonMap == null ? void 0 : packageJsonMap.delete(resolutionHost.toPath(path)); } - function watchFailedLookupLocationOfNonRelativeModuleResolutions(resolutions, name) { - const program = resolutionHost.getCurrentProgram(); - if (!program || !program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(name)) { - resolutions.forEach(watchFailedLookupLocationOfResolution); - } else { - resolutions.forEach((resolution) => watchAffectingLocationsOfResolution( - resolution, - /*addToResolutionsWithOnlyAffectingLocations*/ - true - )); - } + function watchFailedLookupLocationOfNonRelativeModuleResolutions() { + nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfResolution); + nonRelativeExternalModuleResolutions.clear(); } function createDirectoryWatcherForPackageDir(dir, dirPath, packageDir, packageDirPath, nonRecursive) { Debug.assert(!nonRecursive); @@ -129836,11 +130766,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW ); } else if (packageDirWatcher.isSymlink !== isSymlink) { packageDirWatcher.dirPathToWatcher.forEach((watcher) => { - removeDirectoryWatcher( - packageDirWatcher.isSymlink ? packageDirPath : dirPath, - /*syncDirWatcherRemove*/ - false - ); + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); watcher.watcher = createDirPathToWatcher(); }); packageDirWatcher.isSymlink = isSymlink; @@ -129880,7 +130806,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW } return dirWatcher; } - function stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot, syncDirWatcherRemove) { + function stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot) { const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); const toWatch = getDirectoryToWatchFailedLookupLocation( failedLookupLocation, @@ -129888,7 +130814,8 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootDir, rootPath, rootPathComponents, - getCurrentDirectory + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch ); if (toWatch) { const { dirPath, packageDirPath } = toWatch; @@ -129899,7 +130826,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW const forDirPath = packageDirWatcher.dirPathToWatcher.get(dirPath); forDirPath.refCount--; if (forDirPath.refCount === 0) { - removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath, syncDirWatcherRemove); + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); packageDirWatcher.dirPathToWatcher.delete(dirPath); if (packageDirWatcher.isSymlink) { const refCount = dirPathToSymlinkPackageRefCount.get(dirPath) - 1; @@ -129909,20 +130836,17 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW dirPathToSymlinkPackageRefCount.set(dirPath, refCount); } } - if (syncDirWatcherRemove) closePackageDirWatcher(packageDirWatcher, packageDirPath); } } else { - removeDirectoryWatcher(dirPath, syncDirWatcherRemove); + removeDirectoryWatcher(dirPath); } } return removeAtRoot; } - function stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName, syncDirWatcherRemove) { + function stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName) { Debug.checkDefined(resolution.files).delete(filePath); - resolution.refCount--; - if (resolution.refCount) { - return; - } + if (resolution.files.size) return; + resolution.files = void 0; const resolved = getResolutionWithResolvedFileName(resolution); if (resolved && resolved.resolvedFileName) { const key = resolutionHost.toPath(resolved.resolvedFileName); @@ -129934,11 +130858,11 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW let removeAtRoot = false; if (failedLookupLocations) { for (const failedLookupLocation of failedLookupLocations) { - removeAtRoot = stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot, syncDirWatcherRemove); + removeAtRoot = stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot); } } - if (alternateResult) removeAtRoot = stopWatchFailedLookupLocation(alternateResult, removeAtRoot, syncDirWatcherRemove); - if (removeAtRoot) removeDirectoryWatcher(rootPath, syncDirWatcherRemove); + if (alternateResult) removeAtRoot = stopWatchFailedLookupLocation(alternateResult, removeAtRoot); + if (removeAtRoot) removeDirectoryWatcher(rootPath); } else if (affectingLocations == null ? void 0 : affectingLocations.length) { resolutionsWithOnlyAffectingLocations.delete(resolution); } @@ -129946,14 +130870,12 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW for (const affectingLocation of affectingLocations) { const watcher = fileWatchesOfAffectingLocations.get(affectingLocation); watcher.resolutions--; - if (syncDirWatcherRemove) closeFileWatcherOfAffectingLocation(watcher, affectingLocation); } } } - function removeDirectoryWatcher(dirPath, syncDirWatcherRemove) { + function removeDirectoryWatcher(dirPath) { const dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); dirWatcher.refCount--; - if (syncDirWatcherRemove) closeDirectoryWatchesOfFailedLookup(dirWatcher, dirPath); } function createDirectoryWatcher(directory, dirPath, nonRecursive) { return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, (fileOrDirectory) => { @@ -129964,15 +130886,14 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath); }, nonRecursive ? 0 /* None */ : 1 /* Recursive */); } - function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName, syncDirWatcherRemove) { + function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName) { const resolutions = cache.get(filePath); if (resolutions) { resolutions.forEach( (resolution) => stopWatchFailedLookupLocationOfResolution( resolution, filePath, - getResolutionWithResolvedFileName, - syncDirWatcherRemove + getResolutionWithResolvedFileName ) ); cache.delete(filePath); @@ -129986,9 +130907,9 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW if (!resolvedProjectReference) return; resolvedProjectReference.commandLine.fileNames.forEach((f) => removeResolutionsOfFile(resolutionHost.toPath(f))); } - function removeResolutionsOfFile(filePath, syncDirWatcherRemove) { - removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModule, syncDirWatcherRemove); - removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirective, syncDirWatcherRemove); + function removeResolutionsOfFile(filePath) { + removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModuleFromResolution); + removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirectiveFromResolution); } function invalidateResolutions(resolutions, canInvalidate) { if (!resolutions) return false; @@ -130118,6 +131039,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW rootPath, rootPathComponents, getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch, (dirPath2) => directoryWatchesOfFailedLookups.has(dirPath2) || dirPathToSymlinkPackageRefCount.has(dirPath2) ); if (dirPath) { @@ -130283,7 +131205,7 @@ function createTabularErrorsDisplay(filesInError, host) { if (distinctFiles.length === 0) return ""; const numberLength = (num) => Math.log(num) * Math.LOG10E + 1; const fileToErrorCount = distinctFiles.map((file) => [file, countWhere(filesInError, (fileInError) => fileInError.fileName === file.fileName)]); - const maxErrors = fileToErrorCount.reduce((acc, value) => Math.max(acc, value[1] || 0), 0); + const maxErrors = maxBy(fileToErrorCount, 0, (value) => value[1]); const headerRow = Diagnostics.Errors_Files.message; const leftColumnHeadingLength = headerRow.split(" ")[0].length; const leftPaddingGoal = Math.max(leftColumnHeadingLength, numberLength(maxErrors)); @@ -130300,13 +131222,13 @@ function createTabularErrorsDisplay(filesInError, host) { }); return tabularData; } -function isBuilderProgram2(program) { - return !!program.getState; +function isBuilderProgram(program) { + return !!program.state; } function listFiles(program, write) { const options = program.getCompilerOptions(); if (options.explainFiles) { - explainFiles(isBuilderProgram2(program) ? program.getProgram() : program, write); + explainFiles(isBuilderProgram(program) ? program.getProgram() : program, write); } else if (options.listFiles || options.listFilesOnly) { forEach(program.getSourceFiles(), (file) => { write(file.fileName); @@ -130320,10 +131242,10 @@ function explainFiles(program, write) { for (const file of program.getSourceFiles()) { write(`${toFileName(file, relativeFileName)}`); (_a = reasons.get(file.path)) == null ? void 0 : _a.forEach((reason) => write(` ${fileIncludeReasonToDiagnostics(program, reason, relativeFileName).messageText}`)); - (_b = explainIfFileIsRedirectAndImpliedFormat(file, relativeFileName)) == null ? void 0 : _b.forEach((d) => write(` ${d.messageText}`)); + (_b = explainIfFileIsRedirectAndImpliedFormat(file, program.getCompilerOptionsForFile(file), relativeFileName)) == null ? void 0 : _b.forEach((d) => write(` ${d.messageText}`)); } } -function explainIfFileIsRedirectAndImpliedFormat(file, fileNameConvertor) { +function explainIfFileIsRedirectAndImpliedFormat(file, options, fileNameConvertor) { var _a; let result; if (file.path !== file.resolvedPath) { @@ -130343,7 +131265,7 @@ function explainIfFileIsRedirectAndImpliedFormat(file, fileNameConvertor) { )); } if (isExternalOrCommonJsModule(file)) { - switch (file.impliedNodeFormat) { + switch (getImpliedNodeFormatForEmitWorker(file, options)) { case 99 /* ESNext */: if (file.packageJsonScope) { (result ?? (result = [])).push(chainDiagnosticMessages( @@ -130511,7 +131433,7 @@ function toFileName(file, fileNameConvertor) { return fileNameConvertor ? fileNameConvertor(fileName) : fileName; } function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummary, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { - const isListFilesOnly = !!program.getCompilerOptions().listFilesOnly; + const options = program.getCompilerOptions(); const allDiagnostics = program.getConfigFileParsingDiagnostics().slice(); const configFileParsingDiagnosticsLength = allDiagnostics.length; addRange(allDiagnostics, program.getSyntacticDiagnostics( @@ -130521,7 +131443,7 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar )); if (allDiagnostics.length === configFileParsingDiagnosticsLength) { addRange(allDiagnostics, program.getOptionsDiagnostics(cancellationToken)); - if (!isListFilesOnly) { + if (!options.listFilesOnly) { addRange(allDiagnostics, program.getGlobalDiagnostics(cancellationToken)); if (allDiagnostics.length === configFileParsingDiagnosticsLength) { addRange(allDiagnostics, program.getSemanticDiagnostics( @@ -130530,9 +131452,16 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar cancellationToken )); } + if (options.noEmit && getEmitDeclarations(options) && allDiagnostics.length === configFileParsingDiagnosticsLength) { + addRange(allDiagnostics, program.getDeclarationDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + )); + } } } - const emitResult = isListFilesOnly ? { emitSkipped: true, diagnostics: emptyArray } : program.emit( + const emitResult = options.listFilesOnly ? { emitSkipped: true, diagnostics: emptyArray } : program.emit( /*targetSourceFile*/ void 0, writeFile2, @@ -130540,13 +131469,12 @@ function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummar emitOnlyDtsFiles, customTransformers ); - const { emittedFiles, diagnostics: emitDiagnostics } = emitResult; - addRange(allDiagnostics, emitDiagnostics); + addRange(allDiagnostics, emitResult.diagnostics); const diagnostics = sortAndDeduplicateDiagnostics(allDiagnostics); diagnostics.forEach(reportDiagnostic); if (write) { const currentDir = program.getCurrentDirectory(); - forEach(emittedFiles, (file) => { + forEach(emitResult.emittedFiles, (file) => { const filepath = getNormalizedAbsolutePath(file, currentDir); write(`TSFILE: ${filepath}`); }); @@ -130587,7 +131515,8 @@ function createWatchHost(system = sys, reportWatchStatus2) { watchFile: maybeBind(system, system.watchFile) || returnNoopFileWatcher, watchDirectory: maybeBind(system, system.watchDirectory) || returnNoopFileWatcher, setTimeout: maybeBind(system, system.setTimeout) || noop, - clearTimeout: maybeBind(system, system.clearTimeout) || noop + clearTimeout: maybeBind(system, system.clearTimeout) || noop, + preferNonRecursiveWatch: system.preferNonRecursiveWatch }; } var WatchType = { @@ -130806,8 +131735,8 @@ function readBuilderProgram(compilerOptions, host) { if (!content) return void 0; buildInfo = getBuildInfo(buildInfoPath, content); } - if (!buildInfo || buildInfo.version !== version || !buildInfo.program) return void 0; - return createBuilderProgramUsingProgramBuildInfo(buildInfo, buildInfoPath, host); + if (!buildInfo || buildInfo.version !== version || !isIncrementalBuildInfo(buildInfo)) return void 0; + return createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host); } function createIncrementalCompilerHost(options, system = sys) { const host = createCompilerHostWorker( @@ -130918,6 +131847,7 @@ function createWatchProgram(host) { compilerHost.toPath = toPath3; compilerHost.getCompilationSettings = () => compilerOptions; compilerHost.useSourceOfProjectReferenceRedirect = maybeBind(host, host.useSourceOfProjectReferenceRedirect); + compilerHost.preferNonRecursiveWatch = host.preferNonRecursiveWatch; compilerHost.watchDirectoryOfFailedLookupLocation = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.FailedLookupLocations); compilerHost.watchAffectingFileLocation = (file, cb) => watchFile2(file, cb, 2e3 /* High */, watchOptions, WatchType.AffectingFileLocation); compilerHost.watchTypeRootsDirectory = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.TypeRoots); @@ -131229,22 +132159,17 @@ function createWatchProgram(host) { updateProgram(); } function updateProgram() { - var _a, _b, _c, _d; switch (updateLevel) { case 1 /* RootNamesAndUpdate */: - (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); reloadFileNamesFromConfigFile(); break; case 2 /* Full */: - (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; default: - (_c = perfLogger) == null ? void 0 : _c.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); break; } - (_d = perfLogger) == null ? void 0 : _d.logStopUpdateProgram("Done"); return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { @@ -131526,16 +132451,17 @@ var UpToDateStatusType = /* @__PURE__ */ ((UpToDateStatusType2) => { UpToDateStatusType2[UpToDateStatusType2["ErrorReadingFile"] = 4] = "ErrorReadingFile"; UpToDateStatusType2[UpToDateStatusType2["OutOfDateWithSelf"] = 5] = "OutOfDateWithSelf"; UpToDateStatusType2[UpToDateStatusType2["OutOfDateWithUpstream"] = 6] = "OutOfDateWithUpstream"; - UpToDateStatusType2[UpToDateStatusType2["OutOfDateBuildInfo"] = 7] = "OutOfDateBuildInfo"; - UpToDateStatusType2[UpToDateStatusType2["OutOfDateOptions"] = 8] = "OutOfDateOptions"; - UpToDateStatusType2[UpToDateStatusType2["OutOfDateRoots"] = 9] = "OutOfDateRoots"; - UpToDateStatusType2[UpToDateStatusType2["UpstreamOutOfDate"] = 10] = "UpstreamOutOfDate"; - UpToDateStatusType2[UpToDateStatusType2["UpstreamBlocked"] = 11] = "UpstreamBlocked"; - UpToDateStatusType2[UpToDateStatusType2["ComputingUpstream"] = 12] = "ComputingUpstream"; - UpToDateStatusType2[UpToDateStatusType2["TsVersionOutputOfDate"] = 13] = "TsVersionOutputOfDate"; - UpToDateStatusType2[UpToDateStatusType2["UpToDateWithInputFileText"] = 14] = "UpToDateWithInputFileText"; - UpToDateStatusType2[UpToDateStatusType2["ContainerOnly"] = 15] = "ContainerOnly"; - UpToDateStatusType2[UpToDateStatusType2["ForceBuild"] = 16] = "ForceBuild"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateBuildInfoWithPendingEmit"] = 7] = "OutOfDateBuildInfoWithPendingEmit"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateBuildInfoWithErrors"] = 8] = "OutOfDateBuildInfoWithErrors"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateOptions"] = 9] = "OutOfDateOptions"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateRoots"] = 10] = "OutOfDateRoots"; + UpToDateStatusType2[UpToDateStatusType2["UpstreamOutOfDate"] = 11] = "UpstreamOutOfDate"; + UpToDateStatusType2[UpToDateStatusType2["UpstreamBlocked"] = 12] = "UpstreamBlocked"; + UpToDateStatusType2[UpToDateStatusType2["ComputingUpstream"] = 13] = "ComputingUpstream"; + UpToDateStatusType2[UpToDateStatusType2["TsVersionOutputOfDate"] = 14] = "TsVersionOutputOfDate"; + UpToDateStatusType2[UpToDateStatusType2["UpToDateWithInputFileText"] = 15] = "UpToDateWithInputFileText"; + UpToDateStatusType2[UpToDateStatusType2["ContainerOnly"] = 16] = "ContainerOnly"; + UpToDateStatusType2[UpToDateStatusType2["ForceBuild"] = 17] = "ForceBuild"; return UpToDateStatusType2; })(UpToDateStatusType || {}); function resolveConfigFileProjectName(project) { @@ -131547,7 +132473,6 @@ function resolveConfigFileProjectName(project) { // src/compiler/tsbuildPublic.ts var minimumDate = /* @__PURE__ */ new Date(-864e13); -var maximumDate = /* @__PURE__ */ new Date(864e13); function getOrCreateValueFromConfigFileMap(configFileMap, resolved, createT) { const existingValue = configFileMap.get(resolved); let newValue; @@ -131602,6 +132527,7 @@ function getCompilerOptionsOfBuildOptions(buildOptions) { commonOptionsWithBuild.forEach((option) => { if (hasProperty(buildOptions, option.name)) result[option.name] = buildOptions[option.name]; }); + result.tscBuild = true; return result; } function createSolutionBuilder(host, rootNames, defaultOptions) { @@ -132005,7 +132931,7 @@ function createUpdateOutputFileStampsProject(state, project, projectPath, config } }; } -function createBuildOrUpdateInvalidedProject(state, project, projectPath, projectIndex, config, buildOrder) { +function createBuildOrUpdateInvalidedProject(state, project, projectPath, projectIndex, config, status, buildOrder) { let step = 0 /* CreateProgram */; let program; let buildResult; @@ -132056,17 +132982,13 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec } ); } - executeSteps(2 /* SemanticDiagnostics */, cancellationToken); - if (step === 4 /* EmitBuildInfo */) { - return emitBuildInfo(writeFile2, cancellationToken); - } - if (step !== 3 /* Emit */) return void 0; + executeSteps(0 /* CreateProgram */, cancellationToken); return emit(writeFile2, cancellationToken, customTransformers); }, done }; function done(cancellationToken, writeFile2, customTransformers) { - executeSteps(6 /* Done */, cancellationToken, writeFile2, customTransformers); + executeSteps(3 /* Done */, cancellationToken, writeFile2, customTransformers); mark("SolutionBuilder::Projects built"); return doneInvalidatedProject(state, projectPath); } @@ -132083,14 +133005,14 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec if (state.options.dry) { reportStatus(state, Diagnostics.A_non_dry_build_would_build_project_0, project); buildResult = 1 /* Success */; - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return; } if (state.options.verbose) reportStatus(state, Diagnostics.Building_project_0, project); if (config.fileNames.length === 0) { reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); buildResult = 0 /* None */; - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return; } const { host, compilerHost } = state; @@ -132118,185 +133040,97 @@ function createBuildOrUpdateInvalidedProject(state, project, projectPath, projec } step++; } - function handleDiagnostics(diagnostics, errorFlags, errorType) { - if (diagnostics.length) { - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - diagnostics, - errorFlags, - errorType - )); - } else { - step++; - } - } - function getSyntaxDiagnostics(cancellationToken) { - Debug.assertIsDefined(program); - handleDiagnostics( - [ - ...program.getConfigFileParsingDiagnostics(), - ...program.getOptionsDiagnostics(cancellationToken), - ...program.getGlobalDiagnostics(cancellationToken), - ...program.getSyntacticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken - ) - ], - 8 /* SyntaxErrors */, - "Syntactic" - ); - } - function getSemanticDiagnostics(cancellationToken) { - handleDiagnostics( - Debug.checkDefined(program).getSemanticDiagnostics( - /*sourceFile*/ - void 0, - cancellationToken - ), - 16 /* TypeErrors */, - "Semantic" - ); - } function emit(writeFileCallback, cancellationToken, customTransformers) { var _a, _b, _c; Debug.assertIsDefined(program); - Debug.assert(step === 3 /* Emit */); - const saved = program.saveEmitState(); - let declDiagnostics; - const reportDeclarationDiagnostics = (d) => (declDiagnostics || (declDiagnostics = [])).push(d); - const outputFiles = []; - const { emitResult } = emitFilesAndReportErrors( + Debug.assert(step === 1 /* Emit */); + const { host, compilerHost } = state; + const emittedOutputs = /* @__PURE__ */ new Map(); + const options = program.getCompilerOptions(); + const isIncremental = isIncrementalCompilation(options); + let outputTimeStampMap; + let now; + const { emitResult, diagnostics } = emitFilesAndReportErrors( program, - reportDeclarationDiagnostics, - /*write*/ - void 0, + (d) => host.reportDiagnostic(d), + state.write, /*reportSummary*/ void 0, - (name, text, writeByteOrderMark, _onError, _sourceFiles, data) => outputFiles.push({ name, text, writeByteOrderMark, data }), + (name, text, writeByteOrderMark, onError, sourceFiles, data) => { + var _a2; + const path = toPath2(state, name); + emittedOutputs.set(toPath2(state, name), name); + if (data == null ? void 0 : data.buildInfo) { + now || (now = getCurrentTime(state.host)); + const isChangedSignature2 = (_a2 = program.hasChangedEmitSignature) == null ? void 0 : _a2.call(program); + const existing = getBuildInfoCacheEntry(state, name, projectPath); + if (existing) { + existing.buildInfo = data.buildInfo; + existing.modifiedTime = now; + if (isChangedSignature2) existing.latestChangedDtsTime = now; + } else { + state.buildInfoCache.set(projectPath, { + path: toPath2(state, name), + buildInfo: data.buildInfo, + modifiedTime: now, + latestChangedDtsTime: isChangedSignature2 ? now : void 0 + }); + } + } + const modifiedTime = (data == null ? void 0 : data.differsOnlyInMap) ? getModifiedTime(state.host, name) : void 0; + (writeFileCallback || compilerHost.writeFile)( + name, + text, + writeByteOrderMark, + onError, + sourceFiles, + data + ); + if (data == null ? void 0 : data.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime); + else if (!isIncremental && state.watch) { + (outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host))); + } + }, cancellationToken, /*emitOnlyDtsFiles*/ - false, + void 0, customTransformers || ((_b = (_a = state.host).getCustomTransformers) == null ? void 0 : _b.call(_a, project)) ); - if (declDiagnostics) { - program.restoreEmitState(saved); - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - declDiagnostics, - 32 /* DeclarationEmitErrors */, - "Declaration file" - )); - return { - emitSkipped: true, - diagnostics: emitResult.diagnostics - }; + if ((!options.noEmitOnError || !diagnostics.length) && (emittedOutputs.size || status.type !== 8 /* OutOfDateBuildInfoWithErrors */)) { + updateOutputTimestampsWorker(state, config, projectPath, Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs); } - const { host, compilerHost } = state; - const resultFlags = ((_c = program.hasChangedEmitSignature) == null ? void 0 : _c.call(program)) ? 0 /* None */ : 2 /* DeclarationOutputUnchanged */; - const emitterDiagnostics = createDiagnosticCollection(); - const emittedOutputs = /* @__PURE__ */ new Map(); - const options = program.getCompilerOptions(); - const isIncremental = isIncrementalCompilation(options); - let outputTimeStampMap; - let now; - outputFiles.forEach(({ name, text, writeByteOrderMark, data }) => { - const path = toPath2(state, name); - emittedOutputs.set(toPath2(state, name), name); - if (data == null ? void 0 : data.buildInfo) setBuildInfo(state, data.buildInfo, projectPath, options, resultFlags); - const modifiedTime = (data == null ? void 0 : data.differsOnlyInMap) ? getModifiedTime(state.host, name) : void 0; - writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark); - if (data == null ? void 0 : data.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime); - else if (!isIncremental && state.watch) { - (outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host))); - } - }); - finishEmit( - emitterDiagnostics, - emittedOutputs, - outputFiles.length ? outputFiles[0].name : getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()), - resultFlags - ); - return emitResult; - } - function emitBuildInfo(writeFileCallback, cancellationToken) { - Debug.assertIsDefined(program); - Debug.assert(step === 4 /* EmitBuildInfo */); - const emitResult = program.emitBuildInfo((name, text, writeByteOrderMark, onError, sourceFiles, data) => { - if (data == null ? void 0 : data.buildInfo) setBuildInfo(state, data.buildInfo, projectPath, program.getCompilerOptions(), 2 /* DeclarationOutputUnchanged */); - if (writeFileCallback) writeFileCallback(name, text, writeByteOrderMark, onError, sourceFiles, data); - else state.compilerHost.writeFile(name, text, writeByteOrderMark, onError, sourceFiles, data); - }, cancellationToken); - if (emitResult.diagnostics.length) { - reportErrors(state, emitResult.diagnostics); - state.diagnostics.set(projectPath, [...state.diagnostics.get(projectPath), ...emitResult.diagnostics]); - buildResult = 64 /* EmitErrors */ & buildResult; - } - if (emitResult.emittedFiles && state.write) { - emitResult.emittedFiles.forEach((name) => listEmittedFile(state, config, name)); + state.projectErrorsReported.set(projectPath, true); + buildResult = ((_c = program.hasChangedEmitSignature) == null ? void 0 : _c.call(program)) ? 0 /* None */ : 2 /* DeclarationOutputUnchanged */; + if (!diagnostics.length) { + state.diagnostics.delete(projectPath); + state.projectStatus.set(projectPath, { + type: 1 /* UpToDate */, + oldestOutputFileName: firstOrUndefinedIterator(emittedOutputs.values()) ?? getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()) + }); + } else { + state.diagnostics.set(projectPath, diagnostics); + state.projectStatus.set(projectPath, { type: 0 /* Unbuildable */, reason: `it had errors` }); + buildResult |= 4 /* AnyErrors */; } afterProgramDone(state, program); - step = 5 /* QueueReferencingProjects */; + step = 2 /* QueueReferencingProjects */; return emitResult; } - function finishEmit(emitterDiagnostics, emittedOutputs, oldestOutputFileName, resultFlags) { - const emitDiagnostics = emitterDiagnostics.getDiagnostics(); - if (emitDiagnostics.length) { - ({ buildResult, step } = buildErrors( - state, - projectPath, - program, - config, - emitDiagnostics, - 64 /* EmitErrors */, - "Emit" - )); - return emitDiagnostics; - } - if (state.write) { - emittedOutputs.forEach((name) => listEmittedFile(state, config, name)); - } - updateOutputTimestampsWorker(state, config, projectPath, Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs); - state.diagnostics.delete(projectPath); - state.projectStatus.set(projectPath, { - type: 1 /* UpToDate */, - oldestOutputFileName - }); - afterProgramDone(state, program); - step = 5 /* QueueReferencingProjects */; - buildResult = resultFlags; - return emitDiagnostics; - } function executeSteps(till, cancellationToken, writeFile2, customTransformers) { - while (step <= till && step < 6 /* Done */) { + while (step <= till && step < 3 /* Done */) { const currentStep = step; switch (step) { case 0 /* CreateProgram */: createProgram2(); break; - case 1 /* SyntaxDiagnostics */: - getSyntaxDiagnostics(cancellationToken); - break; - case 2 /* SemanticDiagnostics */: - getSemanticDiagnostics(cancellationToken); - break; - case 3 /* Emit */: + case 1 /* Emit */: emit(writeFile2, cancellationToken, customTransformers); break; - case 4 /* EmitBuildInfo */: - emitBuildInfo(writeFile2, cancellationToken); - break; - case 5 /* QueueReferencingProjects */: + case 2 /* QueueReferencingProjects */: queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, Debug.checkDefined(buildResult)); step++; break; - case 6 /* Done */: + case 3 /* Done */: default: assertType(step); } @@ -132346,7 +133180,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { } continue; } - if (status.type === 2 /* UpToDateWithUpstreamTypes */ || status.type === 14 /* UpToDateWithInputFileText */) { + if (status.type === 2 /* UpToDateWithUpstreamTypes */ || status.type === 15 /* UpToDateWithInputFileText */) { reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); return { kind: 1 /* UpdateOutputFileStamps */, @@ -132358,7 +133192,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { }; } } - if (status.type === 11 /* UpstreamBlocked */) { + if (status.type === 12 /* UpstreamBlocked */) { verboseReportProjectStatus(state, project, status); reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); projectPendingBuild.delete(projectPath); @@ -132372,7 +133206,7 @@ function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { } continue; } - if (status.type === 15 /* ContainerOnly */) { + if (status.type === 16 /* ContainerOnly */) { verboseReportProjectStatus(state, project, status); reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); projectPendingBuild.delete(projectPath); @@ -132397,6 +133231,7 @@ function createInvalidatedProjectWithInfo(state, info, buildOrder) { info.projectPath, info.projectIndex, info.config, + info.status, buildOrder ) : createUpdateOutputFileStampsProject( state, @@ -132411,11 +133246,6 @@ function getNextInvalidatedProject(state, buildOrder, reportQueue) { if (!info) return info; return createInvalidatedProjectWithInfo(state, info, buildOrder); } -function listEmittedFile({ write }, proj, file) { - if (write && proj.options.listEmittedFiles) { - write(`TSFILE: ${file}`); - } -} function getOldProgram({ options, builderPrograms, compilerHost }, proj, parsed) { if (options.force) return void 0; const value = builderPrograms.get(proj); @@ -132424,7 +133254,6 @@ function getOldProgram({ options, builderPrograms, compilerHost }, proj, parsed) } function afterProgramDone(state, program) { if (program) { - if (state.write) listFiles(program, state.write); if (state.host.afterProgramEmitAndDiagnostics) { state.host.afterProgramEmitAndDiagnostics(program); } @@ -132432,14 +133261,6 @@ function afterProgramDone(state, program) { } state.projectCompilerOptions = state.baseCompilerOptions; } -function buildErrors(state, resolvedPath, program, config, diagnostics, buildResult, errorType) { - const canEmitBuildInfo = program && !program.getCompilerOptions().outFile; - reportAndStoreErrors(state, resolvedPath, diagnostics); - state.projectStatus.set(resolvedPath, { type: 0 /* Unbuildable */, reason: `${errorType} errors` }); - if (canEmitBuildInfo) return { buildResult, step: 4 /* EmitBuildInfo */ }; - afterProgramDone(state, program); - return { buildResult, step: 5 /* QueueReferencingProjects */ }; -} function isFileWatcherWithModifiedTime(value) { return !!value.watcher; } @@ -132497,23 +133318,6 @@ function getOutputTimeStampMap(state, resolvedConfigFilePath) { if (!result) state.outputTimeStamps.set(resolvedConfigFilePath, result = /* @__PURE__ */ new Map()); return result; } -function setBuildInfo(state, buildInfo, resolvedConfigPath, options, resultFlags) { - const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); - const existing = getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath); - const modifiedTime = getCurrentTime(state.host); - if (existing) { - existing.buildInfo = buildInfo; - existing.modifiedTime = modifiedTime; - if (!(resultFlags & 2 /* DeclarationOutputUnchanged */)) existing.latestChangedDtsTime = modifiedTime; - } else { - state.buildInfoCache.set(resolvedConfigPath, { - path: toPath2(state, buildInfoPath), - buildInfo, - modifiedTime, - latestChangedDtsTime: resultFlags & 2 /* DeclarationOutputUnchanged */ ? void 0 : modifiedTime - }); - } -} function getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath) { const path = toPath2(state, buildInfoPath); const existing = state.buildInfoCache.get(resolvedConfigPath); @@ -132541,99 +133345,107 @@ function checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, } } function getUpToDateStatusWorker(state, project, resolvedPath) { - var _a, _b, _c, _d; + var _a, _b, _c, _d, _e; if (!project.fileNames.length && !canJsonReportNoInputFiles(project.raw)) { return { - type: 15 /* ContainerOnly */ + type: 16 /* ContainerOnly */ }; } let referenceStatuses; const force = !!state.options.force; if (project.projectReferences) { - state.projectStatus.set(resolvedPath, { type: 12 /* ComputingUpstream */ }); + state.projectStatus.set(resolvedPath, { type: 13 /* ComputingUpstream */ }); for (const ref of project.projectReferences) { const resolvedRef = resolveProjectReferencePath(ref); const resolvedRefPath = toResolvedConfigFilePath(state, resolvedRef); const resolvedConfig = parseConfigFile(state, resolvedRef, resolvedRefPath); const refStatus = getUpToDateStatus(state, resolvedConfig, resolvedRefPath); - if (refStatus.type === 12 /* ComputingUpstream */ || refStatus.type === 15 /* ContainerOnly */) { + if (refStatus.type === 13 /* ComputingUpstream */ || refStatus.type === 16 /* ContainerOnly */) { continue; } - if (refStatus.type === 0 /* Unbuildable */ || refStatus.type === 11 /* UpstreamBlocked */) { + if (state.options.stopBuildOnErrors && (refStatus.type === 0 /* Unbuildable */ || refStatus.type === 12 /* UpstreamBlocked */)) { return { - type: 11 /* UpstreamBlocked */, + type: 12 /* UpstreamBlocked */, upstreamProjectName: ref.path, - upstreamProjectBlocked: refStatus.type === 11 /* UpstreamBlocked */ - }; - } - if (refStatus.type !== 1 /* UpToDate */) { - return { - type: 10 /* UpstreamOutOfDate */, - upstreamProjectName: ref.path + upstreamProjectBlocked: refStatus.type === 12 /* UpstreamBlocked */ }; } if (!force) (referenceStatuses || (referenceStatuses = [])).push({ ref, refStatus, resolvedRefPath, resolvedConfig }); } } - if (force) return { type: 16 /* ForceBuild */ }; + if (force) return { type: 17 /* ForceBuild */ }; const { host } = state; const buildInfoPath = getTsBuildInfoEmitOutputFilePath(project.options); - let oldestOutputFileName; - let oldestOutputFileTime = maximumDate; - let buildInfoTime; - let buildInfoProgram; - let buildInfoVersionMap; - if (buildInfoPath) { - const buildInfoCacheEntry2 = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath); - buildInfoTime = (buildInfoCacheEntry2 == null ? void 0 : buildInfoCacheEntry2.modifiedTime) || getModifiedTime(host, buildInfoPath); - if (buildInfoTime === missingFileModifiedTime) { - if (!buildInfoCacheEntry2) { - state.buildInfoCache.set(resolvedPath, { - path: toPath2(state, buildInfoPath), - buildInfo: false, - modifiedTime: buildInfoTime - }); - } + const isIncremental = isIncrementalCompilation(project.options); + let buildInfoCacheEntry = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath); + const buildInfoTime = (buildInfoCacheEntry == null ? void 0 : buildInfoCacheEntry.modifiedTime) || getModifiedTime(host, buildInfoPath); + if (buildInfoTime === missingFileModifiedTime) { + if (!buildInfoCacheEntry) { + state.buildInfoCache.set(resolvedPath, { + path: toPath2(state, buildInfoPath), + buildInfo: false, + modifiedTime: buildInfoTime + }); + } + return { + type: 3 /* OutputMissing */, + missingOutputFileName: buildInfoPath + }; + } + const buildInfo = getBuildInfo3(state, buildInfoPath, resolvedPath, buildInfoTime); + if (!buildInfo) { + return { + type: 4 /* ErrorReadingFile */, + fileName: buildInfoPath + }; + } + const incrementalBuildInfo = isIncremental && isIncrementalBuildInfo(buildInfo) ? buildInfo : void 0; + if ((incrementalBuildInfo || !isIncremental) && buildInfo.version !== version) { + return { + type: 14 /* TsVersionOutputOfDate */, + version: buildInfo.version + }; + } + if (!project.options.noCheck && (buildInfo.errors || // TODO: syntax errors???? + buildInfo.checkPending)) { + return { + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath + }; + } + if (incrementalBuildInfo) { + if (!project.options.noCheck && (((_a = incrementalBuildInfo.changeFileSet) == null ? void 0 : _a.length) || ((_b = incrementalBuildInfo.semanticDiagnosticsPerFile) == null ? void 0 : _b.length) || getEmitDeclarations(project.options) && ((_c = incrementalBuildInfo.emitDiagnosticsPerFile) == null ? void 0 : _c.length))) { return { - type: 3 /* OutputMissing */, - missingOutputFileName: buildInfoPath + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath }; } - const buildInfo = getBuildInfo3(state, buildInfoPath, resolvedPath, buildInfoTime); - if (!buildInfo) { + if (!project.options.noEmit && (((_d = incrementalBuildInfo.changeFileSet) == null ? void 0 : _d.length) || ((_e = incrementalBuildInfo.affectedFilesPendingEmit) == null ? void 0 : _e.length) || incrementalBuildInfo.pendingEmit !== void 0)) { return { - type: 4 /* ErrorReadingFile */, - fileName: buildInfoPath + type: 7 /* OutOfDateBuildInfoWithPendingEmit */, + buildInfoFile: buildInfoPath }; } - if (buildInfo.program && buildInfo.version !== version) { + if ((!project.options.noEmit || project.options.noEmit && getEmitDeclarations(project.options)) && getPendingEmitKindWithSeen( + project.options, + incrementalBuildInfo.options || {}, + /*emitOnlyDtsFiles*/ + void 0, + !!project.options.noEmit + )) { return { - type: 13 /* TsVersionOutputOfDate */, - version: buildInfo.version + type: 9 /* OutOfDateOptions */, + buildInfoFile: buildInfoPath }; } - if (buildInfo.program) { - if (((_a = buildInfo.program.changeFileSet) == null ? void 0 : _a.length) || (!project.options.noEmit ? ((_b = buildInfo.program.affectedFilesPendingEmit) == null ? void 0 : _b.length) || ((_c = buildInfo.program.emitDiagnosticsPerFile) == null ? void 0 : _c.length) : (_d = buildInfo.program.semanticDiagnosticsPerFile) == null ? void 0 : _d.length)) { - return { - type: 7 /* OutOfDateBuildInfo */, - buildInfoFile: buildInfoPath - }; - } - if (!project.options.noEmit && getPendingEmitKind(project.options, buildInfo.program.options || {})) { - return { - type: 8 /* OutOfDateOptions */, - buildInfoFile: buildInfoPath - }; - } - buildInfoProgram = buildInfo.program; - } - oldestOutputFileTime = buildInfoTime; - oldestOutputFileName = buildInfoPath; } + let oldestOutputFileTime = buildInfoTime; + let oldestOutputFileName = buildInfoPath; let newestInputFileName = void 0; let newestInputFileTime = minimumDate; let pseudoInputUpToDate = false; const seenRoots = /* @__PURE__ */ new Set(); + let buildInfoVersionMap; for (const inputFile of project.fileNames) { const inputTime = getModifiedTime2(state, inputFile); if (inputTime === missingFileModifiedTime) { @@ -132642,12 +133454,12 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { reason: `${inputFile} does not exist` }; } - const inputPath = buildInfoProgram ? toPath2(state, inputFile) : void 0; - if (buildInfoTime && buildInfoTime < inputTime) { + const inputPath = toPath2(state, inputFile); + if (buildInfoTime < inputTime) { let version2; let currentVersion; - if (buildInfoProgram) { - if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(buildInfoProgram, buildInfoPath, host); + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); const resolvedInputPath = buildInfoVersionMap.roots.get(inputPath); version2 = buildInfoVersionMap.fileInfos.get(resolvedInputPath ?? inputPath); const text = version2 ? state.readFileWithCache(resolvedInputPath ?? inputFile) : void 0; @@ -132666,27 +133478,34 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { newestInputFileName = inputFile; newestInputFileTime = inputTime; } - if (buildInfoProgram) seenRoots.add(inputPath); + seenRoots.add(inputPath); } - if (buildInfoProgram) { - if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(buildInfoProgram, buildInfoPath, host); - const existingRoot = forEachEntry( + let existingRoot; + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); + existingRoot = forEachEntry( buildInfoVersionMap.roots, // File was root file when project was built but its not any more (_resolved, existingRoot2) => !seenRoots.has(existingRoot2) ? existingRoot2 : void 0 ); - if (existingRoot) { - return { - type: 9 /* OutOfDateRoots */, - buildInfoFile: buildInfoPath, - inputFile: existingRoot - }; - } + } else { + existingRoot = forEach( + getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host), + (root) => !seenRoots.has(root) ? root : void 0 + ); + } + if (existingRoot) { + return { + type: 10 /* OutOfDateRoots */, + buildInfoFile: buildInfoPath, + inputFile: existingRoot + }; } - if (!buildInfoPath) { + if (!isIncremental) { const outputs = getAllProjectOutputs(project, !host.useCaseSensitiveFileNames()); const outputTimeStampMap = getOutputTimeStampMap(state, resolvedPath); for (const output of outputs) { + if (output === buildInfoPath) continue; const path = toPath2(state, output); let outputTime = outputTimeStampMap == null ? void 0 : outputTimeStampMap.get(path); if (!outputTime) { @@ -132712,14 +133531,13 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { } } } - const buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath); let pseudoUpToDate = false; if (referenceStatuses) { for (const { ref, refStatus, resolvedConfig, resolvedRefPath } of referenceStatuses) { if (refStatus.newestInputFileTime && refStatus.newestInputFileTime <= oldestOutputFileTime) { continue; } - if (buildInfoCacheEntry && hasSameBuildInfo(state, buildInfoCacheEntry, resolvedRefPath)) { + if (hasSameBuildInfo(state, buildInfoCacheEntry ?? (buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath)), resolvedRefPath)) { return { type: 6 /* OutOfDateWithUpstream */, outOfDateOutputFileName: buildInfoPath, @@ -132750,7 +133568,7 @@ function getUpToDateStatusWorker(state, project, resolvedPath) { ); if (dependentPackageFileStatus) return dependentPackageFileStatus; return { - type: pseudoUpToDate ? 2 /* UpToDateWithUpstreamTypes */ : pseudoInputUpToDate ? 14 /* UpToDateWithInputFileText */ : 1 /* UpToDate */, + type: pseudoUpToDate ? 2 /* UpToDateWithUpstreamTypes */ : pseudoInputUpToDate ? 15 /* UpToDateWithInputFileText */ : 1 /* UpToDate */, newestInputFileTime, newestInputFileName, oldestOutputFileName @@ -132762,7 +133580,7 @@ function hasSameBuildInfo(state, buildInfoCacheEntry, resolvedRefPath) { } function getUpToDateStatus(state, project, resolvedPath) { if (project === void 0) { - return { type: 0 /* Unbuildable */, reason: "File deleted mid-build" }; + return { type: 0 /* Unbuildable */, reason: "config file deleted mid-build" }; } const prior = state.projectStatus.get(resolvedPath); if (prior !== void 0) { @@ -132779,7 +133597,8 @@ function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, if (proj.options.noEmit) return; let now; const buildInfoPath = getTsBuildInfoEmitOutputFilePath(proj.options); - if (buildInfoPath) { + const isIncremental = isIncrementalCompilation(proj.options); + if (buildInfoPath && isIncremental) { if (!(skipOutputs == null ? void 0 : skipOutputs.has(toPath2(state, buildInfoPath)))) { if (!!state.options.verbose) reportStatus(state, verboseMessage, proj.options.configFilePath); state.host.setModifiedTime(buildInfoPath, now = getCurrentTime(state.host)); @@ -132802,7 +133621,8 @@ function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, reportStatus(state, verboseMessage, proj.options.configFilePath); } host.setModifiedTime(file, now || (now = getCurrentTime(state.host))); - if (outputTimeStampMap) { + if (file === buildInfoPath) getBuildInfoCacheEntry(state, buildInfoPath, projectPath).modifiedTime = now; + else if (outputTimeStampMap) { outputTimeStampMap.set(path, now); modifiedOutputs.add(path); } @@ -132816,7 +133636,7 @@ function getLatestChangedDtsTime(state, options, resolvedConfigPath) { if (!options.composite) return void 0; const entry = Debug.checkDefined(state.buildInfoCache.get(resolvedConfigPath)); if (entry.latestChangedDtsTime !== void 0) return entry.latestChangedDtsTime || void 0; - const latestChangedDtsTime = entry.buildInfo && entry.buildInfo.program && entry.buildInfo.program.latestChangedDtsFile ? state.host.getModifiedTime(getNormalizedAbsolutePath(entry.buildInfo.program.latestChangedDtsFile, getDirectoryPath(entry.path))) : void 0; + const latestChangedDtsTime = entry.buildInfo && isIncrementalBuildInfo(entry.buildInfo) && entry.buildInfo.latestChangedDtsFile ? state.host.getModifiedTime(getNormalizedAbsolutePath(entry.buildInfo.latestChangedDtsFile, getDirectoryPath(entry.path))) : void 0; entry.latestChangedDtsTime = latestChangedDtsTime || false; return latestChangedDtsTime; } @@ -132831,7 +133651,7 @@ function updateOutputTimestamps(state, proj, resolvedPath) { }); } function queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, buildResult) { - if (buildResult & 124 /* AnyErrors */) return; + if (state.options.stopBuildOnErrors && buildResult & 4 /* AnyErrors */) return; if (!config.options.composite) return; for (let index = projectIndex + 1; index < buildOrder.length; index++) { const nextProject = buildOrder[index]; @@ -132850,7 +133670,7 @@ function queueReferencingProjects(state, project, projectPath, projectIndex, con status.type = 2 /* UpToDateWithUpstreamTypes */; break; } - case 14 /* UpToDateWithInputFileText */: + case 15 /* UpToDateWithInputFileText */: case 2 /* UpToDateWithUpstreamTypes */: if (!(buildResult & 2 /* DeclarationOutputUnchanged */)) { state.projectStatus.set(nextProjectPath, { @@ -132860,7 +133680,7 @@ function queueReferencingProjects(state, project, projectPath, projectIndex, con }); } break; - case 11 /* UpstreamBlocked */: + case 12 /* UpstreamBlocked */: if (toResolvedConfigFilePath(state, resolveProjectName(state, status.upstreamProjectName)) === projectPath) { clearProjectStatus(state, nextProjectPath); } @@ -133279,21 +134099,28 @@ function reportUpToDateStatus(state, configFileName, status) { relName(state, configFileName), relName(state, status.fileName) ); - case 7 /* OutOfDateBuildInfo */: + case 7 /* OutOfDateBuildInfoWithPendingEmit */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted, relName(state, configFileName), relName(state, status.buildInfoFile) ); - case 8 /* OutOfDateOptions */: + case 8 /* OutOfDateBuildInfoWithErrors */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors, + relName(state, configFileName), + relName(state, status.buildInfoFile) + ); + case 9 /* OutOfDateOptions */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions, relName(state, configFileName), relName(state, status.buildInfoFile) ); - case 9 /* OutOfDateRoots */: + case 10 /* OutOfDateRoots */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more, @@ -133318,20 +134145,20 @@ function reportUpToDateStatus(state, configFileName, status) { Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, relName(state, configFileName) ); - case 14 /* UpToDateWithInputFileText */: + case 15 /* UpToDateWithInputFileText */: return reportStatus( state, Diagnostics.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files, relName(state, configFileName) ); - case 10 /* UpstreamOutOfDate */: + case 11 /* UpstreamOutOfDate */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date, relName(state, configFileName), relName(state, status.upstreamProjectName) ); - case 11 /* UpstreamBlocked */: + case 12 /* UpstreamBlocked */: return reportStatus( state, status.upstreamProjectBlocked ? Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_was_not_built : Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors, @@ -133341,11 +134168,11 @@ function reportUpToDateStatus(state, configFileName, status) { case 0 /* Unbuildable */: return reportStatus( state, - Diagnostics.Failed_to_parse_file_0_Colon_1, + Diagnostics.Project_0_is_out_of_date_because_1, relName(state, configFileName), status.reason ); - case 13 /* TsVersionOutputOfDate */: + case 14 /* TsVersionOutputOfDate */: return reportStatus( state, Diagnostics.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2, @@ -133353,14 +134180,14 @@ function reportUpToDateStatus(state, configFileName, status) { status.version, version ); - case 16 /* ForceBuild */: + case 17 /* ForceBuild */: return reportStatus( state, Diagnostics.Project_0_is_being_forcibly_rebuilt, relName(state, configFileName) ); - case 15 /* ContainerOnly */: - case 12 /* ComputingUpstream */: + case 16 /* ContainerOnly */: + case 13 /* ComputingUpstream */: break; default: assertType(status); @@ -133432,7 +134259,7 @@ function shouldBePretty(sys2, options) { return options.pretty; } function getOptionsForHelp(commandLine) { - return !!commandLine.options.all ? sort(optionDeclarations, (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.slice(), (v) => !!v.showInSimplifiedHelpView); + return !!commandLine.options.all ? toSorted(optionDeclarations, (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.slice(), (v) => !!v.showInSimplifiedHelpView); } function printVersion(sys2) { sys2.write(getDiagnosticText(Diagnostics.Version_0, version) + sys2.newLine); @@ -134605,7 +135432,7 @@ function createSyntacticTypeNodeBuilder(options, resolver) { return typeFromAccessor(parent2, context); } const declaredType = getEffectiveTypeAnnotationNode(node); - const addUndefined = resolver.requiresAddingImplicitUndefined(node); + const addUndefined = resolver.requiresAddingImplicitUndefined(node, context.enclosingDeclaration); let resultType; if (declaredType) { resultType = serializeExistingTypeAnnotation(declaredType, addUndefined); @@ -134913,7 +135740,6 @@ __export(ts_JsTyping_exports, { nodeCoreModuleList: () => nodeCoreModuleList, nodeCoreModules: () => nodeCoreModules, nonRelativeModuleNameForTypingCache: () => nonRelativeModuleNameForTypingCache, - prefixedNodeCoreModuleList: () => prefixedNodeCoreModuleList, renderPackageNameValidationFailure: () => renderPackageNameValidationFailure, validatePackageName: () => validatePackageName }); @@ -137011,7 +137837,9 @@ function createModuleSpecifierResolutionHost(program, host) { isSourceOfProjectReferenceRedirect: (fileName) => program.isSourceOfProjectReferenceRedirect(fileName), getNearestAncestorDirectoryWithPackageJson: maybeBind(host, host.getNearestAncestorDirectoryWithPackageJson), getFileIncludeReasons: () => program.getFileIncludeReasons(), - getCommonSourceDirectory: () => program.getCommonSourceDirectory() + getCommonSourceDirectory: () => program.getCommonSourceDirectory(), + getDefaultResolutionModeForFile: (file) => program.getDefaultResolutionModeForFile(file), + getModeForResolutionAtIndex: (file, index) => program.getModeForResolutionAtIndex(file, index) }; } function getModuleSpecifierResolverHost(program, host) { @@ -137110,7 +137938,7 @@ function insertImports(changes, sourceFile, imports, blankLineBetween, preferenc const importKindPredicate = decl.kind === 243 /* VariableStatement */ ? isRequireVariableStatement : isAnyImportSyntax; const existingImportStatements = filter(sourceFile.statements, importKindPredicate); const { comparer, isSorted } = ts_OrganizeImports_exports.getOrganizeImportsStringComparerWithDetection(existingImportStatements, preferences); - const sortedNewImports = isArray(imports) ? stableSort(imports, (a, b) => ts_OrganizeImports_exports.compareImportsOrRequireStatements(a, b, comparer)) : [imports]; + const sortedNewImports = isArray(imports) ? toSorted(imports, (a, b) => ts_OrganizeImports_exports.compareImportsOrRequireStatements(a, b, comparer)) : [imports]; if (!(existingImportStatements == null ? void 0 : existingImportStatements.length)) { if (isFullSourceFile(sourceFile)) { changes.insertNodesAtTopOfFile(sourceFile, sortedNewImports, blankLineBetween); @@ -137473,13 +138301,6 @@ function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, f ); }); } -function nodeToDisplayParts(node, enclosingDeclaration) { - const file = enclosingDeclaration.getSourceFile(); - return mapToDisplayParts((writer) => { - const printer = createPrinterWithRemoveCommentsOmitTrailingSemicolon(); - printer.writeNode(4 /* Unspecified */, node, file, writer); - }); -} function isImportOrExportSpecifierName(location) { return !!location.parent && isImportOrExportSpecifier(location.parent) && location.parent.propertyName === location; } @@ -137720,7 +138541,7 @@ function getTypeNodeIfAccessible(type, enclosingScope, program, host) { const checker = program.getTypeChecker(); let typeIsAccessible = true; const notAccessible = () => typeIsAccessible = false; - const res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, { + const res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */, { trackSymbol: (symbol, declaration, meaning) => { typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible( symbol, @@ -137949,7 +138770,7 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { let sourceFileCache; return { allowsImportingAmbientModule, - allowsImportingSourceFile, + getSourceFileInfo, allowsImportingSpecifier }; function moduleSpecifierIsCoveredByPackageJson(specifier) { @@ -137988,9 +138809,9 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { ambientModuleCache.set(moduleSymbol, result); return result; } - function allowsImportingSourceFile(sourceFile, moduleSpecifierResolutionHost) { + function getSourceFileInfo(sourceFile, moduleSpecifierResolutionHost) { if (!packageJsons.length) { - return true; + return { importable: true, packageName: void 0 }; } if (!sourceFileCache) { sourceFileCache = /* @__PURE__ */ new Map(); @@ -138000,12 +138821,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return cached; } } - const moduleSpecifier = getNodeModulesPackageNameFromFileName(sourceFile.fileName, moduleSpecifierResolutionHost); - if (!moduleSpecifier) { - sourceFileCache.set(sourceFile, true); - return true; + const packageName = getNodeModulesPackageNameFromFileName(sourceFile.fileName, moduleSpecifierResolutionHost); + if (!packageName) { + const result2 = { importable: true, packageName }; + sourceFileCache.set(sourceFile, result2); + return result2; } - const result = moduleSpecifierIsCoveredByPackageJson(moduleSpecifier); + const importable = moduleSpecifierIsCoveredByPackageJson(packageName); + const result = { importable, packageName }; sourceFileCache.set(sourceFile, result); return result; } @@ -138115,36 +138938,12 @@ function mapOneOrMany(valueOrArray, f, resultSelector = identity) { function firstOrOnly(valueOrArray) { return isArray(valueOrArray) ? first(valueOrArray) : valueOrArray; } -function getNamesForExportedSymbol(symbol, scriptTarget) { - if (needsNameFromDeclaration(symbol)) { - const fromDeclaration = getDefaultLikeExportNameFromDeclaration(symbol); - if (fromDeclaration) return fromDeclaration; - const fileNameCase = moduleSymbolToValidIdentifier( - getSymbolParentOrFail(symbol), - scriptTarget, - /*forceCapitalize*/ - false - ); - const capitalized = moduleSymbolToValidIdentifier( - getSymbolParentOrFail(symbol), - scriptTarget, - /*forceCapitalize*/ - true - ); - if (fileNameCase === capitalized) return fileNameCase; - return [fileNameCase, capitalized]; - } - return symbol.name; -} function getNameForExportedSymbol(symbol, scriptTarget, preferCapitalized) { - if (needsNameFromDeclaration(symbol)) { + if (symbol.escapedName === "export=" /* ExportEquals */ || symbol.escapedName === "default" /* Default */) { return getDefaultLikeExportNameFromDeclaration(symbol) || moduleSymbolToValidIdentifier(getSymbolParentOrFail(symbol), scriptTarget, !!preferCapitalized); } return symbol.name; } -function needsNameFromDeclaration(symbol) { - return !(symbol.flags & 33554432 /* Transient */) && (symbol.escapedName === "export=" /* ExportEquals */ || symbol.escapedName === "default" /* Default */); -} function getDefaultLikeExportNameFromDeclaration(symbol) { return firstDefined(symbol.declarations, (d) => { var _a, _b, _c; @@ -138212,16 +139011,6 @@ function stringContainsAt(haystack, needle, startIndex) { function startsWithUnderscore(name) { return name.charCodeAt(0) === 95 /* _ */; } -function isGlobalDeclaration(declaration) { - return !isNonGlobalDeclaration(declaration); -} -function isNonGlobalDeclaration(declaration) { - const sourceFile = declaration.getSourceFile(); - if (!sourceFile.externalModuleIndicator && !sourceFile.commonJsModuleIndicator) { - return false; - } - return isInJSFile(declaration) || !findAncestor(declaration, (d) => isModuleDeclaration(d) && isGlobalScopeAugmentation(d)); -} function isDeprecatedDeclaration(decl) { return !!(getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 65536 /* Deprecated */); } @@ -138317,9 +139106,13 @@ function fileShouldUseJavaScriptRequire(file, program, host, preferRequire) { if (!hasJSFileExtension(fileName)) { return false; } - const compilerOptions = program.getCompilerOptions(); + const compilerOptions = typeof file === "string" ? program.getCompilerOptions() : program.getCompilerOptionsForFile(file); const moduleKind = getEmitModuleKind(compilerOptions); - const impliedNodeFormat = typeof file === "string" ? getImpliedNodeFormatForFile(toPath(file, host.getCurrentDirectory(), hostGetCanonicalFileName(host)), (_a = program.getPackageJsonInfoCache) == null ? void 0 : _a.call(program), host, compilerOptions) : file.impliedNodeFormat; + const sourceFileLike = typeof file === "string" ? { + fileName: file, + impliedNodeFormat: getImpliedNodeFormatForFile(toPath(file, host.getCurrentDirectory(), hostGetCanonicalFileName(host)), (_a = program.getPackageJsonInfoCache) == null ? void 0 : _a.call(program), host, compilerOptions) + } : file; + const impliedNodeFormat = getImpliedNodeFormatForEmitWorker(sourceFileLike, compilerOptions); if (impliedNodeFormat === 99 /* ESNext */) { return false; } @@ -138431,6 +139224,7 @@ function createCacheableExportInfoMap(host) { const namedSymbol = isDefault && getLocalSymbolForExportDefault(symbol) || symbol; const names = exportKind === 0 /* Named */ || isExternalModuleSymbol(namedSymbol) ? unescapeLeadingUnderscores(symbolTableKey) : getNamesForExportedSymbol( namedSymbol, + checker, /*scriptTarget*/ void 0 ); @@ -138580,7 +139374,7 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod if (from === to) return false; const cachedResult = moduleSpecifierCache == null ? void 0 : moduleSpecifierCache.get(from.path, to.path, preferences, {}); if ((cachedResult == null ? void 0 : cachedResult.isBlockedByPackageJsonDependencies) !== void 0) { - return !cachedResult.isBlockedByPackageJsonDependencies; + return !cachedResult.isBlockedByPackageJsonDependencies || !!cachedResult.packageName && fileContainsPackageImport(from, cachedResult.packageName); } const getCanonicalFileName = hostGetCanonicalFileName(moduleSpecifierResolutionHost); const globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) == null ? void 0 : _a.call(moduleSpecifierResolutionHost); @@ -138596,12 +139390,15 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod } ); if (packageJsonFilter) { - const isAutoImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost); - moduleSpecifierCache == null ? void 0 : moduleSpecifierCache.setBlockedByPackageJsonDependencies(from.path, to.path, preferences, {}, !isAutoImportable); - return isAutoImportable; + const importInfo = hasImportablePath ? packageJsonFilter.getSourceFileInfo(to, moduleSpecifierResolutionHost) : void 0; + moduleSpecifierCache == null ? void 0 : moduleSpecifierCache.setBlockedByPackageJsonDependencies(from.path, to.path, preferences, {}, importInfo == null ? void 0 : importInfo.packageName, !(importInfo == null ? void 0 : importInfo.importable)); + return !!(importInfo == null ? void 0 : importInfo.importable) || !!(importInfo == null ? void 0 : importInfo.packageName) && fileContainsPackageImport(from, importInfo.packageName); } return hasImportablePath; } +function fileContainsPackageImport(sourceFile, packageName) { + return sourceFile.imports && sourceFile.imports.some((i) => i.text === packageName || i.text.startsWith(packageName + "/")); +} function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); @@ -138610,10 +139407,7 @@ function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePa function forEachExternalModuleToImportFrom(program, host, preferences, useAutoImportProvider, cb) { var _a, _b; const useCaseSensitiveFileNames2 = hostUsesCaseSensitiveFileNames(host); - const excludePatterns = preferences.autoImportFileExcludePatterns && mapDefined(preferences.autoImportFileExcludePatterns, (spec) => { - const pattern = getSubPatternFromSpec(spec, "", "exclude"); - return pattern ? getRegexFromPattern(pattern, useCaseSensitiveFileNames2) : void 0; - }); + const excludePatterns = preferences.autoImportFileExcludePatterns && getIsExcludedPatterns(preferences, useCaseSensitiveFileNames2); forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), excludePatterns, host, (module2, file) => cb( module2, file, @@ -138646,25 +139440,17 @@ function forEachExternalModuleToImportFrom(program, host, preferences, useAutoIm (_b = host.log) == null ? void 0 : _b.call(host, `forEachExternalModuleToImportFrom autoImportProvider: ${timestamp() - start}`); } } -function forEachExternalModule(checker, allSourceFiles, excludePatterns, host, cb) { - var _a, _b; - const realpathsWithSymlinks = (_a = host.getSymlinkCache) == null ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath(); - const isExcluded = excludePatterns && (({ fileName, path }) => { - if (excludePatterns.some((p) => p.test(fileName))) return true; - if ((realpathsWithSymlinks == null ? void 0 : realpathsWithSymlinks.size) && pathContainsNodeModules(fileName)) { - let dir = getDirectoryPath(fileName); - return forEachAncestorDirectory(getDirectoryPath(path), (dirPath) => { - const symlinks = realpathsWithSymlinks.get(ensureTrailingDirectorySeparator(dirPath)); - if (symlinks) { - return symlinks.some((s) => excludePatterns.some((p) => p.test(fileName.replace(dir, s)))); - } - dir = getDirectoryPath(dir); - }) ?? false; - } - return false; +function getIsExcludedPatterns(preferences, useCaseSensitiveFileNames2) { + return mapDefined(preferences.autoImportFileExcludePatterns, (spec) => { + const pattern = getSubPatternFromSpec(spec, "", "exclude"); + return pattern ? getRegexFromPattern(pattern, useCaseSensitiveFileNames2) : void 0; }); +} +function forEachExternalModule(checker, allSourceFiles, excludePatterns, host, cb) { + var _a; + const isExcluded = excludePatterns && getIsExcluded(excludePatterns, host); for (const ambient of checker.getAmbientModules()) { - if (!ambient.name.includes("*") && !(excludePatterns && ((_b = ambient.declarations) == null ? void 0 : _b.every((d) => isExcluded(d.getSourceFile()))))) { + if (!ambient.name.includes("*") && !(excludePatterns && ((_a = ambient.declarations) == null ? void 0 : _a.every((d) => isExcluded(d.getSourceFile()))))) { cb( ambient, /*sourceFile*/ @@ -138678,6 +139464,28 @@ function forEachExternalModule(checker, allSourceFiles, excludePatterns, host, c } } } +function getIsExcluded(excludePatterns, host) { + var _a; + const realpathsWithSymlinks = (_a = host.getSymlinkCache) == null ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath(); + return ({ fileName, path }) => { + if (excludePatterns.some((p) => p.test(fileName))) return true; + if ((realpathsWithSymlinks == null ? void 0 : realpathsWithSymlinks.size) && pathContainsNodeModules(fileName)) { + let dir = getDirectoryPath(fileName); + return forEachAncestorDirectory(getDirectoryPath(path), (dirPath) => { + const symlinks = realpathsWithSymlinks.get(ensureTrailingDirectorySeparator(dirPath)); + if (symlinks) { + return symlinks.some((s) => excludePatterns.some((p) => p.test(fileName.replace(dir, s)))); + } + dir = getDirectoryPath(dir); + }) ?? false; + } + return false; + }; +} +function getIsFileExcluded(host, preferences) { + if (!preferences.autoImportFileExcludePatterns) return () => false; + return getIsExcluded(getIsExcludedPatterns(preferences, hostUsesCaseSensitiveFileNames(host)), host); +} function getExportInfoMap(importingFile, host, program, preferences, cancellationToken) { var _a, _b, _c, _d, _e; const start = timestamp(); @@ -138755,7 +139563,15 @@ function getDefaultLikeExportInfo(moduleSymbol, checker) { function isImportableSymbol(symbol, checker) { return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !isKnownSymbol(symbol) && !isPrivateIdentifierSymbol(symbol); } -function forEachNameOfDefaultExport(defaultExport, checker, compilerOptions, preferCapitalizedNames, cb) { +function getNamesForExportedSymbol(defaultExport, checker, scriptTarget) { + let names; + forEachNameOfDefaultExport(defaultExport, checker, scriptTarget, (name, capitalizedName) => { + names = capitalizedName ? [name, capitalizedName] : name; + return true; + }); + return Debug.checkDefined(names); +} +function forEachNameOfDefaultExport(defaultExport, checker, scriptTarget, cb) { let chain; let current = defaultExport; const seen = /* @__PURE__ */ new Map(); @@ -138775,7 +139591,20 @@ function forEachNameOfDefaultExport(defaultExport, checker, compilerOptions, pre } for (const symbol of chain ?? emptyArray) { if (symbol.parent && isExternalModuleSymbol(symbol.parent)) { - const final = cb(moduleSymbolToValidIdentifier(symbol.parent, getEmitScriptTarget(compilerOptions), preferCapitalizedNames)); + const final = cb( + moduleSymbolToValidIdentifier( + symbol.parent, + scriptTarget, + /*forceCapitalize*/ + false + ), + moduleSymbolToValidIdentifier( + symbol.parent, + scriptTarget, + /*forceCapitalize*/ + true + ) + ); if (final) return final; } } @@ -139441,8 +140270,8 @@ function getEncodedSyntacticClassifications(cancellationToken, sourceFile, span) } } function tryClassifyTripleSlashComment(start, width) { - const tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im; - const attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img; + const tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/m; + const attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/g; const text = sourceFile.text.substr(start, width); const match = tripleSlashXMLCommentRegEx.exec(text); if (!match) { @@ -139873,10 +140702,8 @@ var DocumentHighlights; return [...nodes, container]; } return nodes; - case 210 /* ObjectLiteralExpression */: - return void 0; default: - Debug.assertNever(container, "Invalid container kind."); + return void 0; } } function pushKeywordIf(keywordList, token, ...expected) { @@ -141157,7 +141984,7 @@ function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImpo } // src/services/sourcemaps.ts -var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+/=]+)$)?/; +var base64UrlRegExp = /^data:(?:application\/json;charset=[uU][tT][fF]-8;base64,([A-Za-z0-9+/=]+)$)?/; function getSourceMapper(host) { const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); const currentDirectory = host.getCurrentDirectory(); @@ -141301,7 +142128,7 @@ function computeSuggestionDiagnostics(sourceFile, program, cancellationToken) { program.getSemanticDiagnostics(sourceFile, cancellationToken); const diags = []; const checker = program.getTypeChecker(); - const isCommonJSFile = sourceFile.impliedNodeFormat === 1 /* CommonJS */ || fileExtensionIsOneOf(sourceFile.fileName, [".cts" /* Cts */, ".cjs" /* Cjs */]); + const isCommonJSFile = program.getImpliedNodeFormatForEmit(sourceFile) === 1 /* CommonJS */ || fileExtensionIsOneOf(sourceFile.fileName, [".cts" /* Cts */, ".cjs" /* Cjs */]); if (!isCommonJSFile && sourceFile.commonJsModuleIndicator && (programContainsEsModules(program) || compilerOptionsIndicateEsModules(program.getCompilerOptions())) && containsTopLevelCommonjs(sourceFile)) { diags.push(createDiagnosticForNode(getErrorNodeFromCommonJsIndicator(sourceFile.commonJsModuleIndicator), Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module)); } @@ -141322,7 +142149,8 @@ function computeSuggestionDiagnostics(sourceFile, program, cancellationToken) { } addRange(diags, sourceFile.bindSuggestionDiagnostics); addRange(diags, program.getSuggestionDiagnostics(sourceFile, cancellationToken)); - return diags.sort((d1, d2) => d1.start - d2.start); + diags.sort((d1, d2) => d1.start - d2.start); + return diags; function check(node) { if (isJsFile) { if (canBeConvertedToClass(node, checker)) { @@ -141568,6 +142396,7 @@ function transpileWorker(input, transpileOptions, declaration) { options.isolatedDeclarations = true; } else { options.declaration = false; + options.declarationMap = false; } const newLine = getNewLineCharacter(options); const compilerHost = { @@ -141763,7 +142592,8 @@ function getContainers(declaration) { } container = getContainerNode(container); } - return containers.reverse(); + containers.reverse(); + return containers; } function compareNavigateToItems(i1, i2) { return compareValues(i1.matchKind, i2.matchKind) || compareStringsCaseSensitiveUI(i1.name, i2.name); @@ -142543,13 +143373,12 @@ function isFunctionOrClassExpression(node) { } function cleanText(text) { text = text.length > maxLength ? text.substring(0, maxLength) + "..." : text; - return text.replace(/\\?(\r?\n|\r|\u2028|\u2029)/g, ""); + return text.replace(/\\?(?:\r?\n|[\r\u2028\u2029])/g, ""); } // src/services/_namespaces/ts.refactor.ts var ts_refactor_exports = {}; __export(ts_refactor_exports, { - addExportToChanges: () => addExportToChanges, addExportsInOldFile: () => addExportsInOldFile, addImportsForMovedSymbols: () => addImportsForMovedSymbols, addNewFileToTsconfig: () => addNewFileToTsconfig, @@ -142561,13 +143390,8 @@ __export(ts_refactor_exports, { convertStringOrTemplateLiteral: () => ts_refactor_convertStringOrTemplateLiteral_exports, convertToOptionalChainExpression: () => ts_refactor_convertToOptionalChainExpression_exports, createNewFileName: () => createNewFileName, - deleteMovedStatements: () => deleteMovedStatements, - deleteUnusedImports: () => deleteUnusedImports, - deleteUnusedOldImports: () => deleteUnusedOldImports, doChangeNamedToNamespaceOrDefault: () => doChangeNamedToNamespaceOrDefault, extractSymbol: () => ts_refactor_extractSymbol_exports, - filterImport: () => filterImport, - forEachImportInStatement: () => forEachImportInStatement, generateGetAccessorAndSetAccessor: () => ts_refactor_generateGetAccessorAndSetAccessor_exports, getApplicableRefactors: () => getApplicableRefactors, getEditsForRefactor: () => getEditsForRefactor, @@ -142575,16 +143399,11 @@ __export(ts_refactor_exports, { getIdentifierForNode: () => getIdentifierForNode, getNewStatementsAndRemoveFromOldFile: () => getNewStatementsAndRemoveFromOldFile, getStatementsToMove: () => getStatementsToMove, - getTopLevelDeclarationStatement: () => getTopLevelDeclarationStatement, getUsageInfo: () => getUsageInfo, inferFunctionReturnType: () => ts_refactor_inferFunctionReturnType_exports, isRefactorErrorInfo: () => isRefactorErrorInfo, - isTopLevelDeclaration: () => isTopLevelDeclaration, - moduleSpecifierFromImport: () => moduleSpecifierFromImport, - nameOfTopLevelDeclaration: () => nameOfTopLevelDeclaration, refactorKindBeginsWith: () => refactorKindBeginsWith, - registerRefactor: () => registerRefactor, - updateImportsInOtherFiles: () => updateImportsInOtherFiles + registerRefactor: () => registerRefactor }); // src/services/refactorProvider.ts @@ -143018,9 +143837,9 @@ function doChangeNamedToNamespaceOrDefault(sourceFile, program, changes, toConve const namespaceImportName = namespaceNameConflicts ? getUniqueName(preferredName, sourceFile) : preferredName; const neededNamedImports = /* @__PURE__ */ new Set(); for (const element of toConvert.elements) { - const propertyName = (element.propertyName || element.name).text; + const propertyName = element.propertyName || element.name; ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, (id) => { - const access = factory.createPropertyAccessExpression(factory.createIdentifier(namespaceImportName), propertyName); + const access = propertyName.kind === 11 /* StringLiteral */ ? factory.createElementAccessExpression(factory.createIdentifier(namespaceImportName), factory.cloneNode(propertyName)) : factory.createPropertyAccessExpression(factory.createIdentifier(namespaceImportName), factory.cloneNode(propertyName)); if (isShorthandPropertyAssignment(id.parent)) { changes.replaceNode(sourceFile, id.parent, factory.createPropertyAssignment(id.text, access)); } else if (isExportSpecifier(id.parent)) { @@ -143036,7 +143855,7 @@ function doChangeNamedToNamespaceOrDefault(sourceFile, program, changes, toConve shouldUseDefault ? factory.createIdentifier(namespaceImportName) : factory.createNamespaceImport(factory.createIdentifier(namespaceImportName)) ); if (neededNamedImports.size && isImportDeclaration(importDecl)) { - const newNamedImports = arrayFrom(neededNamedImports.values(), (element) => factory.createImportSpecifier(element.isTypeOnly, element.propertyName && factory.createIdentifier(element.propertyName.text), factory.createIdentifier(element.name.text))); + const newNamedImports = arrayFrom(neededNamedImports.values(), (element) => factory.createImportSpecifier(element.isTypeOnly, element.propertyName && factory.cloneNode(element.propertyName), factory.cloneNode(element.name))); changes.insertNodeAfter(sourceFile, toConvert.parent.parent, createImport( importDecl, /*defaultImportName*/ @@ -143587,7 +144406,7 @@ function updateImportsInOtherFiles(changes, program, host, oldFile, movedSymbols deleteUnusedImports(sourceFile, importNode, changes, shouldMove); const pathToTargetFileWithExtension = resolvePath(getDirectoryPath(getNormalizedAbsolutePath(oldFile.fileName, program.getCurrentDirectory())), targetFileName); if (getStringComparer(!program.useCaseSensitiveFileNames())(pathToTargetFileWithExtension, sourceFile.fileName) === 0 /* EqualTo */) return; - const newModuleSpecifier = getModuleSpecifier(program.getCompilerOptions(), sourceFile, sourceFile.fileName, pathToTargetFileWithExtension, createModuleSpecifierResolutionHost(program, host)); + const newModuleSpecifier = ts_moduleSpecifiers_exports.getModuleSpecifier(program.getCompilerOptions(), sourceFile, sourceFile.fileName, pathToTargetFileWithExtension, createModuleSpecifierResolutionHost(program, host)); const newImportDeclaration = filterImport(importNode, makeStringLiteral(newModuleSpecifier, quotePreference), shouldMove); if (newImportDeclaration) changes.insertNodeAfter(sourceFile, statement, newImportDeclaration); const ns = getNamespaceLikeImport(importNode); @@ -143998,7 +144817,7 @@ function isPureImport(node) { return false; } } -function getUsageInfo(oldFile, toMove, checker, existingTargetLocals = /* @__PURE__ */ new Set()) { +function getUsageInfo(oldFile, toMove, checker, existingTargetLocals = /* @__PURE__ */ new Set(), enclosingRange) { var _a; const movedSymbols = /* @__PURE__ */ new Set(); const oldImportsNeededByTargetFile = /* @__PURE__ */ new Map(); @@ -144014,7 +144833,7 @@ function getUsageInfo(oldFile, toMove, checker, existingTargetLocals = /* @__PUR } const unusedImportsFromOldFile = /* @__PURE__ */ new Set(); for (const statement of toMove) { - forEachReference(statement, checker, (symbol, isValidTypeOnlyUseSite) => { + forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => { if (!symbol.declarations || isGlobalType(checker, symbol)) { return; } @@ -144044,7 +144863,7 @@ function getUsageInfo(oldFile, toMove, checker, existingTargetLocals = /* @__PUR if (jsxNamespaceSymbol && !!(statement.transformFlags & 2 /* ContainsJsx */)) { unusedImportsFromOldFile.delete(jsxNamespaceSymbol); } - forEachReference(statement, checker, (symbol, isValidTypeOnlyUseSite) => { + forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => { if (movedSymbols.has(symbol)) oldFileImportsFromTargetFile.set(symbol, isValidTypeOnlyUseSite); unusedImportsFromOldFile.delete(symbol); }); @@ -144086,9 +144905,12 @@ function makeUniqueFilename(proposedFilename, extension, inDirectory, host) { function inferNewFileName(importsFromNewFile, movedSymbols) { return forEachKey(importsFromNewFile, symbolNameNoDefault) || forEachKey(movedSymbols, symbolNameNoDefault) || "newFile"; } -function forEachReference(node, checker, onReference) { +function forEachReference(node, checker, enclosingRange, onReference) { node.forEachChild(function cb(node2) { if (isIdentifier(node2) && !isDeclarationName(node2)) { + if (enclosingRange && !rangeContainsRange(enclosingRange, node2)) { + return; + } const sym = checker.getSymbolAtLocation(node2); if (sym) onReference(sym, isValidTypeOnlyAliasUseSite(node2)); } else { @@ -144251,12 +145073,18 @@ function getExistingLocals(sourceFile, statements, checker) { } } for (const statement of statements) { - forEachReference(statement, checker, (s) => { - const symbol = skipAlias(s, checker); - if (symbol.valueDeclaration && getSourceFileOfNode(symbol.valueDeclaration).path === sourceFile.path) { - existingLocals.add(symbol); + forEachReference( + statement, + checker, + /*enclosingRange*/ + void 0, + (s) => { + const symbol = skipAlias(s, checker); + if (symbol.valueDeclaration && getSourceFileOfNode(symbol.valueDeclaration).path === sourceFile.path) { + existingLocals.add(symbol); + } } - }); + ); } return existingLocals; } @@ -144348,7 +145176,12 @@ registerRefactor(refactorName4, { const { references, declaration, replacement } = info; const edits = ts_textChanges_exports.ChangeTracker.with(context, (tracker) => { for (const node of references) { - tracker.replaceNode(file, node, getReplacementExpression(node, replacement)); + const closestStringIdentifierParent = isStringLiteral(replacement) && isIdentifier(node) && walkUpParenthesizedExpressions(node.parent); + if (closestStringIdentifierParent && isTemplateSpan(closestStringIdentifierParent) && !isTaggedTemplateExpression(closestStringIdentifierParent.parent.parent)) { + replaceTemplateStringVariableWithLiteral(tracker, file, closestStringIdentifierParent, replacement); + } else { + tracker.replaceNode(file, node, getReplacementExpression(node, replacement)); + } } tracker.delete(file, declaration); }); @@ -144437,6 +145270,19 @@ function getReplacementExpression(reference, replacement) { } return replacement; } +function replaceTemplateStringVariableWithLiteral(tracker, sourceFile, reference, replacement) { + const templateExpression = reference.parent; + const index = templateExpression.templateSpans.indexOf(reference); + const prevNode = index === 0 ? templateExpression.head : templateExpression.templateSpans[index - 1]; + tracker.replaceRangeWithText( + sourceFile, + { + pos: prevNode.getEnd() - 2, + end: reference.literal.getStart() + 1 + }, + replacement.text.replace(/\\/g, "\\\\").replace(/`/g, "\\`") + ); +} // src/services/refactors/moveToNewFile.ts var refactorName5 = "Move to a new file"; @@ -146645,7 +147491,7 @@ function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParame if (!isJS) { let type = checker.getTypeOfSymbolAtLocation(usage.symbol, usage.node); type = checker.getBaseTypeOfLiteralType(type); - typeNode = ts_codefix_exports.typeToAutoImportableTypeNode(checker, importAdder, type, scope, scriptTarget, 1 /* NoTruncation */); + typeNode = ts_codefix_exports.typeToAutoImportableTypeNode(checker, importAdder, type, scope, scriptTarget, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); } const paramDecl = factory.createParameterDeclaration( /*modifiers*/ @@ -146665,8 +147511,8 @@ function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParame callArguments.push(factory.createIdentifier(name)); }); const typeParametersAndDeclarations = arrayFrom(typeParameterUsages.values(), (type) => ({ type, declaration: getFirstDeclarationBeforePosition(type, context.startPosition) })); - const sortedTypeParametersAndDeclarations = typeParametersAndDeclarations.sort(compareTypesByDeclarationOrder); - const typeParameters = sortedTypeParametersAndDeclarations.length === 0 ? void 0 : mapDefined(sortedTypeParametersAndDeclarations, ({ declaration }) => declaration); + typeParametersAndDeclarations.sort(compareTypesByDeclarationOrder); + const typeParameters = typeParametersAndDeclarations.length === 0 ? void 0 : mapDefined(typeParametersAndDeclarations, ({ declaration }) => declaration); const callTypeArguments = typeParameters !== void 0 ? typeParameters.map((decl) => factory.createTypeReferenceNode( decl.name, /*typeArguments*/ @@ -146674,7 +147520,7 @@ function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParame )) : void 0; if (isExpression(node) && !isJS) { const contextualType = checker.getContextualType(node); - returnType = checker.typeToTypeNode(contextualType, scope, 1 /* NoTruncation */); + returnType = checker.typeToTypeNode(contextualType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); } const { body, returnValueProperty } = transformFunctionBody(node, exposedVariableDeclarations, writes, substitutions, !!(range.facts & 1 /* HasReturn */)); suppressLeadingAndTrailingTrivia(body); @@ -146714,7 +147560,8 @@ function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParame checker.typeToTypeNode( checker.getTypeAtLocation(range.thisNode), scope, - 1 /* NoTruncation */ + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ ), /*initializer*/ void 0 @@ -146811,7 +147658,8 @@ function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParame const variableType = checker.typeToTypeNode( checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(variableDeclaration)), scope, - 1 /* NoTruncation */ + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ ); typeElements.push(factory.createPropertySignature( /*modifiers*/ @@ -146942,7 +147790,7 @@ function extractConstantInScope(node, scope, { substitutions }, rangeFacts, cont const file = scope.getSourceFile(); const localNameText = getIdentifierForNode(node, scope, checker, file); const isJS = isInJSFile(scope); - let variableType = isJS || !checker.isContextSensitive(node) ? void 0 : checker.typeToTypeNode(checker.getContextualType(node), scope, 1 /* NoTruncation */); + let variableType = isJS || !checker.isContextSensitive(node) ? void 0 : checker.typeToTypeNode(checker.getContextualType(node), scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); let initializer = transformConstantInitializer(skipParentheses(node), substitutions); ({ variableType, initializer } = transformFunctionInitializerAndType(variableType, initializer)); suppressLeadingAndTrailingTrivia(initializer); @@ -147067,13 +147915,13 @@ function extractConstantInScope(node, scope, { substitutions }, rangeFacts, cont } else { const paramType = checker.getTypeAtLocation(p); if (paramType === checker.getAnyType()) hasAny = true; - parameters.push(factory.updateParameterDeclaration(p, p.modifiers, p.dotDotDotToken, p.name, p.questionToken, p.type || checker.typeToTypeNode(paramType, scope, 1 /* NoTruncation */), p.initializer)); + parameters.push(factory.updateParameterDeclaration(p, p.modifiers, p.dotDotDotToken, p.name, p.questionToken, p.type || checker.typeToTypeNode(paramType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */), p.initializer)); } } if (hasAny) return { variableType: variableType2, initializer: initializer2 }; variableType2 = void 0; if (isArrowFunction(initializer2)) { - initializer2 = factory.updateArrowFunction(initializer2, canHaveModifiers(node) ? getModifiers(node) : void 0, initializer2.typeParameters, parameters, initializer2.type || checker.typeToTypeNode(functionSignature.getReturnType(), scope, 1 /* NoTruncation */), initializer2.equalsGreaterThanToken, initializer2.body); + initializer2 = factory.updateArrowFunction(initializer2, canHaveModifiers(node) ? getModifiers(node) : void 0, initializer2.typeParameters, parameters, initializer2.type || checker.typeToTypeNode(functionSignature.getReturnType(), scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */), initializer2.equalsGreaterThanToken, initializer2.body); } else { if (functionSignature && !!functionSignature.thisParameter) { const firstParameter = firstOrUndefined(parameters); @@ -147090,7 +147938,7 @@ function extractConstantInScope(node, scope, { substitutions }, rangeFacts, cont "this", /*questionToken*/ void 0, - checker.typeToTypeNode(thisType, scope, 1 /* NoTruncation */) + checker.typeToTypeNode(thisType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */) ) ); } @@ -147699,11 +148547,31 @@ function getInfo4(context) { return { error: getLocaleSpecificMessage(Diagnostics.Return_type_must_be_inferred_from_a_function) }; } const typeChecker = context.program.getTypeChecker(); - const returnType = tryGetReturnType(typeChecker, declaration); + let returnType; + if (typeChecker.isImplementationOfOverload(declaration)) { + const signatures = typeChecker.getTypeAtLocation(declaration).getCallSignatures(); + if (signatures.length > 1) { + returnType = typeChecker.getUnionType(mapDefined(signatures, (s) => s.getReturnType())); + } + } + if (!returnType) { + const signature = typeChecker.getSignatureFromDeclaration(declaration); + if (signature) { + const typePredicate = typeChecker.getTypePredicateOfSignature(signature); + if (typePredicate && typePredicate.type) { + const typePredicateTypeNode = typeChecker.typePredicateToTypePredicateNode(typePredicate, declaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + if (typePredicateTypeNode) { + return { declaration, returnTypeNode: typePredicateTypeNode }; + } + } else { + returnType = typeChecker.getReturnTypeOfSignature(signature); + } + } + } if (!returnType) { return { error: getLocaleSpecificMessage(Diagnostics.Could_not_determine_function_return_type) }; } - const returnTypeNode = typeChecker.typeToTypeNode(returnType, declaration, 1 /* NoTruncation */); + const returnTypeNode = typeChecker.typeToTypeNode(returnType, declaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); if (returnTypeNode) { return { declaration, returnTypeNode }; } @@ -147719,18 +148587,6 @@ function isConvertibleDeclaration(node) { return false; } } -function tryGetReturnType(typeChecker, node) { - if (typeChecker.isImplementationOfOverload(node)) { - const signatures = typeChecker.getTypeAtLocation(node).getCallSignatures(); - if (signatures.length > 1) { - return typeChecker.getUnionType(mapDefined(signatures, (s) => s.getReturnType())); - } - } - const signature = typeChecker.getSignatureFromDeclaration(node); - if (signature) { - return typeChecker.getReturnTypeOfSignature(signature); - } -} // src/services/classifier2020.ts var TokenEncodingConsts = /* @__PURE__ */ ((TokenEncodingConsts2) => { @@ -149050,13 +149906,18 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h if (host.getParsedCommandLine) { (_a3 = host.onReleaseParsedCommandLine) == null ? void 0 : _a3.call(host, configFileName, oldResolvedRef, oldOptions); } else if (oldResolvedRef) { - onReleaseOldSourceFile(oldResolvedRef.sourceFile, oldOptions); + releaseOldSourceFile(oldResolvedRef.sourceFile, oldOptions); } } - function onReleaseOldSourceFile(oldSourceFile, oldOptions) { + function releaseOldSourceFile(oldSourceFile, oldOptions) { const oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldOptions); documentRegistry.releaseDocumentWithKey(oldSourceFile.resolvedPath, oldSettingsKey, oldSourceFile.scriptKind, oldSourceFile.impliedNodeFormat); } + function onReleaseOldSourceFile(oldSourceFile, oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath) { + var _a3; + releaseOldSourceFile(oldSourceFile, oldOptions); + (_a3 = host.onReleaseOldSourceFile) == null ? void 0 : _a3.call(host, oldSourceFile, oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath); + } function getOrCreateSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) { return getOrCreateSourceFileByPath(fileName, toPath(fileName, currentDirectory, getCanonicalFileName), languageVersionOrOptions, onError, shouldCreateNewSourceFile); } @@ -149167,6 +150028,108 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h const declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken); return [...semanticDiagnostics, ...declarationDiagnostics]; } + function getRegionSemanticDiagnostics(fileName, ranges) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const options = program.getCompilerOptions(); + if (skipTypeChecking(sourceFile, options, program) || !canIncludeBindAndCheckDiagnostics(sourceFile, options) || program.getCachedSemanticDiagnostics(sourceFile)) { + return void 0; + } + const nodes = getNodesForRanges(sourceFile, ranges); + if (!nodes) { + return void 0; + } + const checkedSpans = normalizeSpans(nodes.map((node) => createTextSpanFromBounds(node.getFullStart(), node.getEnd()))); + const semanticDiagnostics = program.getSemanticDiagnostics(sourceFile, cancellationToken, nodes); + return { + diagnostics: semanticDiagnostics.slice(), + spans: checkedSpans + }; + } + function getNodesForRanges(file, ranges) { + const nodes = []; + const spans = normalizeSpans(ranges.map((range) => createTextSpanFromRange(range))); + for (const span of spans) { + const nodesForSpan = getNodesForSpan(file, span); + if (!nodesForSpan) { + return void 0; + } + nodes.push(...nodesForSpan); + } + if (!nodes.length) { + return void 0; + } + return nodes; + } + function getNodesForSpan(file, span) { + if (textSpanContainsTextRange(span, file)) { + return void 0; + } + const endToken = findTokenOnLeftOfPosition(file, textSpanEnd(span)) || file; + const enclosingNode = findAncestor(endToken, (node) => textRangeContainsTextSpan(node, span)); + const nodes = []; + chooseOverlappingNodes(span, enclosingNode, nodes); + if (file.end === span.start + span.length) { + nodes.push(file.endOfFileToken); + } + if (some(nodes, isSourceFile)) { + return void 0; + } + return nodes; + } + function chooseOverlappingNodes(span, node, result) { + if (!nodeOverlapsWithSpan(node, span)) { + return false; + } + if (textSpanContainsTextRange(span, node)) { + addSourceElement(node, result); + return true; + } + if (isBlockLike(node)) { + return chooseOverlappingBlockLike(span, node, result); + } + if (isClassLike(node)) { + return chooseOverlappingClassLike(span, node, result); + } + addSourceElement(node, result); + return true; + } + function nodeOverlapsWithSpan(node, span) { + const spanEnd = span.start + span.length; + return node.pos < spanEnd && node.end > span.start; + } + function addSourceElement(node, result) { + while (node.parent && !isSourceElement(node)) { + node = node.parent; + } + result.push(node); + } + function chooseOverlappingBlockLike(span, node, result) { + const childResult = []; + const stmts = node.statements.filter((stmt) => chooseOverlappingNodes(span, stmt, childResult)); + if (stmts.length === node.statements.length) { + addSourceElement(node, result); + return true; + } + result.push(...childResult); + return false; + } + function chooseOverlappingClassLike(span, node, result) { + var _a2, _b, _c; + const overlaps = (n) => textRangeIntersectsWithTextSpan(n, span); + if (((_a2 = node.modifiers) == null ? void 0 : _a2.some(overlaps)) || node.name && overlaps(node.name) || ((_b = node.typeParameters) == null ? void 0 : _b.some(overlaps)) || ((_c = node.heritageClauses) == null ? void 0 : _c.some(overlaps))) { + addSourceElement(node, result); + return true; + } + const childResult = []; + const members = node.members.filter((member) => chooseOverlappingNodes(span, member, childResult)); + if (members.length === node.members.length) { + addSourceElement(node, result); + return true; + } + result.push(...childResult); + return false; + } function getSuggestionDiagnostics(fileName) { synchronizeHostData(); return computeSuggestionDiagnostics(getValidSourceFile(fileName), program, cancellationToken); @@ -149521,6 +150484,7 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h synchronizeHostData(); Debug.assert(args.type === "file"); const sourceFile = getValidSourceFile(args.fileName); + if (containsParseError(sourceFile)) return emptyArray; const formatContext = ts_formatting_exports.getFormatContext(formatOptions, host); const mode = args.mode ?? (args.skipDestructiveCodeActions ? "SortAndCombine" /* SortAndCombine */ : "All" /* All */); return ts_OrganizeImports_exports.organizeImports(sourceFile, formatContext, host, program, preferences, mode); @@ -149863,7 +150827,7 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"); } function getTodoCommentsRegExp() { - const singleLineCommentStart = /(?:\/\/+\s*)/.source; + const singleLineCommentStart = /(?:\/{2,}\s*)/.source; const multiLineCommentStart = /(?:\/\*+\s*)/.source; const anyNumberOfSpacesAndAsterisksAtStartOfLine = /(?:^(?:\s|\*)*)/.source; const preamble = "(" + anyNumberOfSpacesAndAsterisksAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; @@ -149981,6 +150945,7 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h cleanupSemanticCache, getSyntacticDiagnostics, getSemanticDiagnostics, + getRegionSemanticDiagnostics, getSuggestionDiagnostics, getCompilerOptionsDiagnostics, getSyntacticClassifications: getSyntacticClassifications2, @@ -151143,19 +152108,16 @@ __export(ts_codefix_exports, { createFileTextChanges: () => createFileTextChanges, createImportAdder: () => createImportAdder, createImportSpecifierResolver: () => createImportSpecifierResolver, - createJsonPropertyAssignment: () => createJsonPropertyAssignment, createMissingMemberNodes: () => createMissingMemberNodes, createSignatureDeclarationFromCallExpression: () => createSignatureDeclarationFromCallExpression, createSignatureDeclarationFromSignature: () => createSignatureDeclarationFromSignature, createStubbedBody: () => createStubbedBody, eachDiagnostic: () => eachDiagnostic, findAncestorMatchingSpan: () => findAncestorMatchingSpan, - findJsonProperty: () => findJsonProperty, generateAccessorFromProperty: () => generateAccessorFromProperty, getAccessorConvertiblePropertyAtPosition: () => getAccessorConvertiblePropertyAtPosition, getAllFixes: () => getAllFixes, getAllSupers: () => getAllSupers, - getArgumentTypesAndTypeParameters: () => getArgumentTypesAndTypeParameters, getFixes: () => getFixes, getImportCompletionAction: () => getImportCompletionAction, getImportKind: () => getImportKind, @@ -151170,6 +152132,7 @@ __export(ts_codefix_exports, { setJsonCompilerOptionValue: () => setJsonCompilerOptionValue, setJsonCompilerOptionValues: () => setJsonCompilerOptionValues, tryGetAutoImportableReferenceFromTypeNode: () => tryGetAutoImportableReferenceFromTypeNode, + typePredicateToAutoImportableTypeNode: () => typePredicateToAutoImportableTypeNode, typeToAutoImportableTypeNode: () => typeToAutoImportableTypeNode }); @@ -151556,7 +152519,7 @@ function isInsideAwaitableBody(node) { function makeChange3(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) { if (isForOfStatement(insertionSite.parent) && !insertionSite.parent.awaitModifier) { const exprType = checker.getTypeAtLocation(insertionSite); - const asyncIter = checker.getAsyncIterableType(); + const asyncIter = checker.getAnyAsyncIterableType(); if (asyncIter && checker.isTypeAssignableTo(exprType, asyncIter)) { const forOf = insertionSite.parent; changeTracker.replaceNode(sourceFile, forOf, factory.updateForOfStatement(forOf, factory.createToken(135 /* AwaitKeyword */), forOf.initializer, forOf.expression, forOf.statement)); @@ -153913,7 +154876,7 @@ function getLeftAndRightSiblings(typedefNode) { function findEndOfTextBetween(jsDocComment, from, to) { const comment = jsDocComment.getText().substring(from - jsDocComment.getStart(), to - jsDocComment.getStart()); for (let i = comment.length; i > 0; i--) { - if (!/[*/\s]/g.test(comment.substring(i - 1, i))) { + if (!/[*/\s]/.test(comment.substring(i - 1, i))) { return from + i; } } @@ -154120,6 +155083,8 @@ function addMissingDeclarations(context, implementedTypeNode, sourceFile, classD classDeclaration, /*flags*/ void 0, + /*internalFlags*/ + void 0, getNoopSymbolTrackerWithResolver(context) )); } @@ -154239,7 +155204,7 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre addImport(first(info)); } function addImportFromExportedSymbol(exportedSymbol, isValidTypeOnlyUseSite, referenceImport) { - var _a; + var _a, _b; const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); const symbolName2 = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); const checker = program.getTypeChecker(); @@ -154256,10 +155221,14 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre preferences, cancellationToken ); + if (!exportInfo) { + Debug.assert((_a = preferences.autoImportFileExcludePatterns) == null ? void 0 : _a.length); + return; + } const useRequire = shouldUseRequire(sourceFile, program); let fix = getImportFixForSymbol( sourceFile, - Debug.checkDefined(exportInfo), + exportInfo, program, /*position*/ void 0, @@ -154269,7 +155238,7 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre preferences ); if (fix) { - const localName = ((_a = tryCast(referenceImport == null ? void 0 : referenceImport.name, isIdentifier)) == null ? void 0 : _a.text) ?? symbolName2; + const localName = ((_b = tryCast(referenceImport == null ? void 0 : referenceImport.name, isIdentifier)) == null ? void 0 : _b.text) ?? symbolName2; if (referenceImport && isTypeOnlyImportDeclaration(referenceImport) && (fix.kind === 3 /* AddNew */ || fix.kind === 2 /* AddToExisting */) && fix.addAsTypeOnly === 1 /* Allowed */) { fix = { ...fix, addAsTypeOnly: 2 /* Required */ }; } @@ -154306,9 +155275,10 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre sourceFile, exportingFileName, compilerOptions, - createModuleSpecifierResolutionHost(program, host) + createModuleSpecifierResolutionHost(program, host), + preferences ); - const importKind = getImportKind(futureExportingSourceFile, exportKind, compilerOptions); + const importKind = getImportKind(futureExportingSourceFile, exportKind, program); const addAsTypeOnly = getAddAsTypeOnly( isImportUsageValidAsTypeOnly, /*isForNewImportDeclaration*/ @@ -154648,7 +155618,7 @@ function createImportAdderWorker(sourceFile, program, useAutoImportProvider, pre } function createImportSpecifierResolver(importingFile, program, host, preferences) { const packageJsonImportFilter = createPackageJsonImportFilter(importingFile, preferences, host); - const importMap = createExistingImportMap(program.getTypeChecker(), importingFile, program.getCompilerOptions()); + const importMap = createExistingImportMap(importingFile, program); return { getModuleSpecifierForBestExportInfo }; function getModuleSpecifierForBestExportInfo(exportInfo, position, isValidTypeOnlyUseSite, fromCacheOnly) { const { fixes, computedWithoutCacheCount } = getImportFixes( @@ -154718,8 +155688,12 @@ function codeFixActionToCodeAction({ description: description3, changes, command } function getAllExportInfoForSymbol(importingFile, symbol, symbolName2, moduleSymbol, preferCapitalized, program, host, preferences, cancellationToken) { const getChecker = createGetChecker(program, host); + const isFileExcluded = preferences.autoImportFileExcludePatterns && getIsFileExcluded(host, preferences); + const mergedModuleSymbol = program.getTypeChecker().getMergedSymbol(moduleSymbol); + const moduleSourceFile = isFileExcluded && mergedModuleSymbol.declarations && getDeclarationOfKind(mergedModuleSymbol, 307 /* SourceFile */); + const moduleSymbolExcluded = moduleSourceFile && isFileExcluded(moduleSourceFile); return getExportInfoMap(importingFile, host, program, preferences, cancellationToken).search(importingFile.path, preferCapitalized, (name) => name === symbolName2, (info) => { - if (skipAlias(info[0].symbol, getChecker(info[0].isFromPackageJson)) === symbol && info.some((i) => i.moduleSymbol === moduleSymbol || i.symbol.parent === moduleSymbol)) { + if (getChecker(info[0].isFromPackageJson).getMergedSymbol(skipAlias(info[0].symbol, getChecker(info[0].isFromPackageJson))) === symbol && (moduleSymbolExcluded || info.some((i) => i.moduleSymbol === moduleSymbol || i.symbol.parent === moduleSymbol))) { return info; } }); @@ -154751,7 +155725,7 @@ function getSingleExportInfoForSymbol(symbol, symbolName2, moduleSymbol, program } } } -function getImportFixes(exportInfos, usagePosition, isValidTypeOnlyUseSite, useRequire, program, sourceFile, host, preferences, importMap = isFullSourceFile(sourceFile) ? createExistingImportMap(program.getTypeChecker(), sourceFile, program.getCompilerOptions()) : void 0, fromCacheOnly) { +function getImportFixes(exportInfos, usagePosition, isValidTypeOnlyUseSite, useRequire, program, sourceFile, host, preferences, importMap = isFullSourceFile(sourceFile) ? createExistingImportMap(sourceFile, program) : void 0, fromCacheOnly) { const checker = program.getTypeChecker(); const existingImports = importMap ? flatMap(exportInfos, importMap.getImportsForExportInfo) : emptyArray; const useNamespace = usagePosition !== void 0 && tryUseExistingNamespaceImport(existingImports, usagePosition); @@ -154866,7 +155840,8 @@ function tryAddToExistingImport(existingImports, isValidTypeOnlyUseSite, checker }; } } -function createExistingImportMap(checker, importingFile, compilerOptions) { +function createExistingImportMap(importingFile, program) { + const checker = program.getTypeChecker(); let importMap; for (const moduleSpecifier of importingFile.imports) { const i = importFromModuleSpecifier(moduleSpecifier); @@ -154887,7 +155862,7 @@ function createExistingImportMap(checker, importingFile, compilerOptions) { const matchingDeclarations = importMap == null ? void 0 : importMap.get(getSymbolId(moduleSymbol)); if (!matchingDeclarations) return emptyArray; if (isSourceFileJS(importingFile) && !(targetFlags & 111551 /* Value */) && !every(matchingDeclarations, isJSDocImportTag)) return emptyArray; - const importKind = getImportKind(importingFile, exportKind, compilerOptions); + const importKind = getImportKind(importingFile, exportKind, program); return matchingDeclarations.map((declaration) => ({ declaration, importKind, symbol, targetFlags })); } }; @@ -154902,8 +155877,8 @@ function shouldUseRequire(sourceFile, program) { if (compilerOptions.configFile) { return getEmitModuleKind(compilerOptions) < 5 /* ES2015 */; } - if (sourceFile.impliedNodeFormat === 1 /* CommonJS */) return true; - if (sourceFile.impliedNodeFormat === 99 /* ESNext */) return false; + if (getImpliedNodeFormatForEmit(sourceFile, program) === 1 /* CommonJS */) return true; + if (getImpliedNodeFormatForEmit(sourceFile, program) === 99 /* ESNext */) return false; for (const otherFile of program.getSourceFiles()) { if (otherFile === sourceFile || !isSourceFileJS(otherFile) || program.isSourceFileFromExternalLibrary(otherFile)) continue; if (otherFile.commonJsModuleIndicator && !otherFile.externalModuleIndicator) return true; @@ -154955,20 +155930,13 @@ function getNewImportFixes(program, sourceFile, usagePosition, isValidTypeOnlyUs if (!importedSymbolHasValueMeaning && isJs && usagePosition !== void 0) { return { kind: 1 /* JsdocTypeImport */, moduleSpecifierKind, moduleSpecifier, usagePosition, exportInfo: exportInfo2, isReExport: i > 0 }; } - const importKind = getImportKind(sourceFile, exportInfo2.exportKind, compilerOptions); + const importKind = getImportKind(sourceFile, exportInfo2.exportKind, program); let qualification; if (usagePosition !== void 0 && importKind === 3 /* CommonJS */ && exportInfo2.exportKind === 0 /* Named */) { const exportEquals = checker.resolveExternalModuleSymbol(exportInfo2.moduleSymbol); let namespacePrefix; if (exportEquals !== exportInfo2.moduleSymbol) { - namespacePrefix = forEachNameOfDefaultExport( - exportEquals, - checker, - compilerOptions, - /*preferCapitalizedNames*/ - false, - identity - ); + namespacePrefix = forEachNameOfDefaultExport(exportEquals, checker, getEmitScriptTarget(compilerOptions), identity); } namespacePrefix || (namespacePrefix = moduleSymbolToValidIdentifier( exportInfo2.moduleSymbol, @@ -155032,7 +156000,7 @@ function getFixInfos(context, errorCode, pos, useAutoImportProvider) { } function sortFixInfo(fixes, sourceFile, program, packageJsonImportFilter, host, preferences) { const _toPath = (fileName) => toPath(fileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host)); - return sort(fixes, (a, b) => compareBooleans(!!a.isJsxNamespaceFix, !!b.isJsxNamespaceFix) || compareValues(a.fix.kind, b.fix.kind) || compareModuleSpecifiers(a.fix, b.fix, sourceFile, program, preferences, packageJsonImportFilter.allowsImportingSpecifier, _toPath)); + return toSorted(fixes, (a, b) => compareBooleans(!!a.isJsxNamespaceFix, !!b.isJsxNamespaceFix) || compareValues(a.fix.kind, b.fix.kind) || compareModuleSpecifiers(a.fix, b.fix, sourceFile, program, preferences, packageJsonImportFilter.allowsImportingSpecifier, _toPath)); } function getFixInfosWithoutDiagnostic(context, symbolToken, useAutoImportProvider) { const info = getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider); @@ -155141,8 +156109,8 @@ function getUmdSymbol(token, checker) { } return void 0; } -function getImportKind(importingFile, exportKind, compilerOptions, forceImportKeyword) { - if (compilerOptions.verbatimModuleSyntax && (getEmitModuleKind(compilerOptions) === 1 /* CommonJS */ || importingFile.impliedNodeFormat === 1 /* CommonJS */)) { +function getImportKind(importingFile, exportKind, program, forceImportKeyword) { + if (program.getCompilerOptions().verbatimModuleSyntax && getEmitModuleFormatOfFile(importingFile, program) === 1 /* CommonJS */) { return 3 /* CommonJS */; } switch (exportKind) { @@ -155151,18 +156119,18 @@ function getImportKind(importingFile, exportKind, compilerOptions, forceImportKe case 1 /* Default */: return 1 /* Default */; case 2 /* ExportEquals */: - return getExportEqualsImportKind(importingFile, compilerOptions, !!forceImportKeyword); + return getExportEqualsImportKind(importingFile, program.getCompilerOptions(), !!forceImportKeyword); case 3 /* UMD */: - return getUmdImportKind(importingFile, compilerOptions, !!forceImportKeyword); + return getUmdImportKind(importingFile, program, !!forceImportKeyword); default: return Debug.assertNever(exportKind); } } -function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) { - if (getAllowSyntheticDefaultImports(compilerOptions)) { +function getUmdImportKind(importingFile, program, forceImportKeyword) { + if (getAllowSyntheticDefaultImports(program.getCompilerOptions())) { return 1 /* Default */; } - const moduleKind = getEmitModuleKind(compilerOptions); + const moduleKind = getEmitModuleKind(program.getCompilerOptions()); switch (moduleKind) { case 2 /* AMD */: case 1 /* CommonJS */: @@ -155181,7 +156149,7 @@ function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) { return 2 /* Namespace */; case 100 /* Node16 */: case 199 /* NodeNext */: - return importingFile.impliedNodeFormat === 99 /* ESNext */ ? 2 /* Namespace */ : 3 /* CommonJS */; + return getImpliedNodeFormatForEmit(importingFile, program) === 99 /* ESNext */ ? 2 /* Namespace */ : 3 /* CommonJS */; default: return Debug.assertNever(moduleKind, `Unexpected moduleKind ${moduleKind}`); } @@ -155254,7 +156222,7 @@ function getExportInfos(symbolName2, isJsxTagName, currentTokenMeaning, cancella }); function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program2, isFromPackageJson) { const moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson); - if (toFile && isImportableFile(program2, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) || !toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost)) { + if (toFile && isImportableFile(program2, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) || (!toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost) || fileContainsPackageImport(fromFile, stripQuotes(moduleSymbol.name)))) { const checker = program2.getTypeChecker(); originalSymbolToExportInfos.add(getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol, moduleFileName: toFile == null ? void 0 : toFile.fileName, exportKind, targetFlags: skipAlias(exportedSymbol, checker).flags, isFromPackageJson }); } @@ -155264,7 +156232,7 @@ function getExportInfos(symbolName2, isJsxTagName, currentTokenMeaning, cancella cancellationToken.throwIfCancellationRequested(); const compilerOptions = program2.getCompilerOptions(); const defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker); - if (defaultInfo && symbolFlagsHaveMeaning(checker.getSymbolFlags(defaultInfo.symbol), currentTokenMeaning) && forEachNameOfDefaultExport(defaultInfo.symbol, checker, compilerOptions, isJsxTagName, (name) => name === symbolName2)) { + if (defaultInfo && symbolFlagsHaveMeaning(checker.getSymbolFlags(defaultInfo.symbol), currentTokenMeaning) && forEachNameOfDefaultExport(defaultInfo.symbol, checker, getEmitScriptTarget(compilerOptions), (name, capitalizedName) => (isJsxTagName ? capitalizedName ?? name : name) === symbolName2)) { addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program2, isFromPackageJson); } const exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExportsAndProperties(symbolName2, moduleSymbol); @@ -155478,7 +156446,7 @@ function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImpor } if (namedImports.length) { const { specifierComparer, isSorted } = ts_OrganizeImports_exports.getNamedImportSpecifierComparerWithDetection(clause.parent, preferences, sourceFile); - const newSpecifiers = stableSort( + const newSpecifiers = toSorted( namedImports.map( (namedImport) => factory.createImportSpecifier( (!clause.isTypeOnly || promoteFromTypeOnly2) && shouldUseTypeOnly(namedImport, preferences), @@ -155495,7 +156463,7 @@ function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImpor clause.namedBindings, factory.updateNamedImports( clause.namedBindings, - stableSort([...existingSpecifiers.filter((s) => !removeExistingImportSpecifiers.has(s)), ...newSpecifiers], specifierComparer) + toSorted([...existingSpecifiers.filter((s) => !removeExistingImportSpecifiers.has(s)), ...newSpecifiers], specifierComparer) ) ); } else if ((existingSpecifiers == null ? void 0 : existingSpecifiers.length) && isSorted !== false) { @@ -155665,6 +156633,12 @@ function createConstEqualsRequireDeclaration(name, quotedModuleSpecifier) { function symbolFlagsHaveMeaning(flags, meaning) { return meaning === 7 /* All */ ? true : meaning & 1 /* Value */ ? !!(flags & 111551 /* Value */) : meaning & 2 /* Type */ ? !!(flags & 788968 /* Type */) : meaning & 4 /* Namespace */ ? !!(flags & 1920 /* Namespace */) : false; } +function getImpliedNodeFormatForEmit(file, program) { + return isFullSourceFile(file) ? program.getImpliedNodeFormatForEmit(file) : getImpliedNodeFormatForEmitWorker(file, program.getCompilerOptions()); +} +function getEmitModuleFormatOfFile(file, program) { + return isFullSourceFile(file) ? program.getEmitModuleFormatOfFile(file) : getEmitModuleFormatOfFileWorker(file, program.getCompilerOptions()); +} // src/services/codefixes/fixAddMissingConstraint.ts var fixId17 = "addMissingConstraint"; @@ -155743,6 +156717,8 @@ function addMissingConstraint(changes, program, preferences, host, sourceFile, i scriptTarget, /*flags*/ void 0, + /*internalFlags*/ + void 0, tracker ); if (typeNode) { @@ -156750,7 +157726,7 @@ function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { const moduleDeclaration = find(symbol.declarations, isModuleDeclaration); const moduleDeclarationSourceFile = moduleDeclaration == null ? void 0 : moduleDeclaration.getSourceFile(); if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) { - return { kind: 2 /* Function */, token, call: parent2.parent, sourceFile, modifierFlags: 32 /* Export */, parentDeclaration: moduleDeclaration }; + return { kind: 2 /* Function */, token, call: parent2.parent, sourceFile: moduleDeclarationSourceFile, modifierFlags: 32 /* Export */, parentDeclaration: moduleDeclaration }; } const moduleSourceFile = find(symbol.declarations, isSourceFile); if (sourceFile.commonJsModuleIndicator) return void 0; @@ -156850,14 +157826,15 @@ function getTypeNode2(checker, node, token) { const binaryExpression = token.parent.parent; const otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left; const widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression))); - typeNode = checker.typeToTypeNode(widenedType, node, 1 /* NoTruncation */); + typeNode = checker.typeToTypeNode(widenedType, node, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); } else { const contextualType = checker.getContextualType(token.parent); typeNode = contextualType ? checker.typeToTypeNode( contextualType, /*enclosingDeclaration*/ void 0, - 1 /* NoTruncation */ + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ ) : void 0; } return typeNode || factory.createKeywordTypeNode(133 /* AnyKeyword */); @@ -157179,7 +158156,9 @@ function createPropertyNameFromSymbol(symbol, target, quotePreference, checker) 111551 /* Value */, /*enclosingDeclaration*/ void 0, - 1073741824 /* WriteComputedProps */ + /*flags*/ + void 0, + 1 /* WriteComputedProps */ ); if (prop && isComputedPropertyName(prop)) return prop; } @@ -157352,7 +158331,7 @@ function tryGetName2(node) { } } function typeToTypeNode(checker, type, enclosingDeclaration) { - return checker.typeToTypeNode(checker.getWidenedType(type), enclosingDeclaration, 1 /* NoTruncation */) ?? factory.createKeywordTypeNode(159 /* UnknownKeyword */); + return checker.typeToTypeNode(checker.getWidenedType(type), enclosingDeclaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */) ?? factory.createKeywordTypeNode(159 /* UnknownKeyword */); } function doChange19(changes, program, preferences, host, declarations, newParameters) { const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); @@ -158655,7 +159634,8 @@ var canHaveTypeAnnotation = /* @__PURE__ */ new Set([ 206 /* ObjectBindingPattern */, 207 /* ArrayBindingPattern */ ]); -var declarationEmitNodeBuilderFlags2 = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */ | 1073741824 /* WriteComputedProps */; +var declarationEmitNodeBuilderFlags2 = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitInternalNodeBuilderFlags2 = 1 /* WriteComputedProps */; registerCodeFix({ errorCodes: errorCodes47, fixIds: [fixId36], @@ -159248,7 +160228,25 @@ function withContext(context, typePrintMode, cb) { if (typePrintMode === 1 /* Relative */) { return relativeType(node); } - let type = isValueSignatureDeclaration(node) ? tryGetReturnType2(node) : typeChecker.getTypeAtLocation(node); + let type; + if (isValueSignatureDeclaration(node)) { + const signature = typeChecker.getSignatureFromDeclaration(node); + if (signature) { + const typePredicate = typeChecker.getTypePredicateOfSignature(signature); + if (typePredicate) { + if (!typePredicate.type) { + return emptyInferenceResult; + } + return { + typeNode: typePredicateToTypeNode(typePredicate, findAncestor(node, isDeclaration) ?? sourceFile, getFlags(typePredicate.type)), + mutatedTarget: false + }; + } + type = typeChecker.getReturnTypeOfSignature(signature); + } + } else { + type = typeChecker.getTypeAtLocation(node); + } if (!type) { return emptyInferenceResult; } @@ -159262,14 +160260,17 @@ function withContext(context, typePrintMode, cb) { } type = widenedType; } - if (isParameter(node) && typeChecker.requiresAddingImplicitUndefined(node)) { + const enclosingDeclaration = findAncestor(node, isDeclaration) ?? sourceFile; + if (isParameter(node) && typeChecker.requiresAddingImplicitUndefined(node, enclosingDeclaration)) { type = typeChecker.getUnionType([typeChecker.getUndefinedType(), type], 0 /* None */); } - const flags = (isVariableDeclaration(node) || isPropertyDeclaration(node) && hasSyntacticModifier(node, 256 /* Static */ | 8 /* Readonly */)) && type.flags & 8192 /* UniqueESSymbol */ ? 1048576 /* AllowUniqueESSymbolType */ : 0 /* None */; return { - typeNode: typeToTypeNode2(type, findAncestor(node, isDeclaration) ?? sourceFile, flags), + typeNode: typeToTypeNode2(type, enclosingDeclaration, getFlags(type)), mutatedTarget: false }; + function getFlags(type2) { + return (isVariableDeclaration(node) || isPropertyDeclaration(node) && hasSyntacticModifier(node, 256 /* Static */ | 8 /* Readonly */)) && type2.flags & 8192 /* UniqueESSymbol */ ? 1048576 /* AllowUniqueESSymbolType */ : 0 /* None */; + } } function createTypeOfFromEntityNameExpression(node) { return factory.createTypeQueryNode(getSynthesizedDeepClone(node)); @@ -159421,7 +160422,7 @@ function withContext(context, typePrintMode, cb) { } function typeToTypeNode2(type, enclosingDeclaration, flags = 0 /* None */) { let isTruncated = false; - const result2 = typeToAutoImportableTypeNode(typeChecker, importAdder, type, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags2 | flags, { + const result2 = typeToAutoImportableTypeNode(typeChecker, importAdder, type, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags2 | flags, declarationEmitInternalNodeBuilderFlags2, { moduleResolverHost: program, trackSymbol() { return true; @@ -159432,11 +160433,18 @@ function withContext(context, typePrintMode, cb) { }); return isTruncated ? factory.createKeywordTypeNode(133 /* AnyKeyword */) : result2; } - function tryGetReturnType2(node) { - const signature = typeChecker.getSignatureFromDeclaration(node); - if (signature) { - return typeChecker.getReturnTypeOfSignature(signature); - } + function typePredicateToTypeNode(typePredicate, enclosingDeclaration, flags = 0 /* None */) { + let isTruncated = false; + const result2 = typePredicateToAutoImportableTypeNode(typeChecker, importAdder, typePredicate, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags2 | flags, declarationEmitInternalNodeBuilderFlags2, { + moduleResolverHost: program, + trackSymbol() { + return true; + }, + reportTruncationError() { + isTruncated = true; + } + }); + return isTruncated ? factory.createKeywordTypeNode(133 /* AnyKeyword */) : result2; } function addTypeToVariableLike(decl) { const { typeNode } = inferType(decl); @@ -160754,7 +161762,7 @@ function addNewNodeForMemberSymbol(symbol, enclosingDeclaration, sourceFile, con case 172 /* PropertyDeclaration */: let flags = 1 /* NoTruncation */; flags |= quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0; - let typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context)); + let typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); if (importAdder) { const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); if (importableReference) { @@ -160779,6 +161787,8 @@ function addNewNodeForMemberSymbol(symbol, enclosingDeclaration, sourceFile, con enclosingDeclaration, /*flags*/ void 0, + /*internalFlags*/ + void 0, getNoopSymbolTrackerWithResolver(context) ); const allAccessors = getAllAccessorDeclarations(declarations, declaration); @@ -160834,6 +161844,9 @@ function addNewNodeForMemberSymbol(symbol, enclosingDeclaration, sourceFile, con break; } for (const signature of signatures) { + if (signature.declaration && signature.declaration.flags & 33554432 /* Ambient */) { + continue; + } outputMethod(quotePreference, signature, modifiers, createName(declarationName)); } if (!ambient) { @@ -160908,7 +161921,7 @@ function createSignatureDeclarationFromSignature(kind, context, quotePreference, const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); const isJs = isInJSFile(enclosingDeclaration); const flags = 1 /* NoTruncation */ | 256 /* SuppressAnyReturnType */ | 524288 /* AllowEmptyTuple */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */); - const signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context)); + const signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); if (!signatureDeclaration) { return void 0; } @@ -161009,6 +162022,7 @@ function createSignatureDeclarationFromCallExpression(kind, context, importAdder contextNode, scriptTarget, 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */, tracker ); const modifiers = modifierFlags ? factory.createNodeArray(factory.createModifiersFromModifierFlags(modifierFlags)) : void 0; @@ -161027,6 +162041,8 @@ function createSignatureDeclarationFromCallExpression(kind, context, importAdder contextNode, /*flags*/ void 0, + /*internalFlags*/ + void 0, tracker ); switch (kind) { @@ -161096,8 +162112,8 @@ function createTypeParametersForArguments(checker, argumentTypeParameters, typeA function createTypeParameterName(index) { return 84 /* T */ + index <= 90 /* Z */ ? String.fromCharCode(84 /* T */ + index) : `T${index}`; } -function typeToAutoImportableTypeNode(checker, importAdder, type, contextNode, scriptTarget, flags, tracker) { - let typeNode = checker.typeToTypeNode(type, contextNode, flags, tracker); +function typeToAutoImportableTypeNode(checker, importAdder, type, contextNode, scriptTarget, flags, internalFlags, tracker) { + let typeNode = checker.typeToTypeNode(type, contextNode, flags, internalFlags, tracker); if (typeNode && isImportTypeNode(typeNode)) { const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); if (importableReference) { @@ -161107,13 +162123,24 @@ function typeToAutoImportableTypeNode(checker, importAdder, type, contextNode, s } return getSynthesizedDeepClone(typeNode); } +function typePredicateToAutoImportableTypeNode(checker, importAdder, typePredicate, contextNode, scriptTarget, flags, internalFlags, tracker) { + let typePredicateNode = checker.typePredicateToTypePredicateNode(typePredicate, contextNode, flags, internalFlags, tracker); + if ((typePredicateNode == null ? void 0 : typePredicateNode.type) && isImportTypeNode(typePredicateNode.type)) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typePredicateNode.type, scriptTarget); + if (importableReference) { + importSymbols(importAdder, importableReference.symbols); + typePredicateNode = factory.updateTypePredicateNode(typePredicateNode, typePredicateNode.assertsModifier, typePredicateNode.parameterName, importableReference.typeNode); + } + } + return getSynthesizedDeepClone(typePredicateNode); +} function typeContainsTypeParameter(type) { if (type.isUnionOrIntersection()) { return type.types.some(typeContainsTypeParameter); } return type.flags & 262144 /* TypeParameter */; } -function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, contextNode, scriptTarget, flags, tracker) { +function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, contextNode, scriptTarget, flags, internalFlags, tracker) { const argumentTypeNodes = []; const argumentTypeParameters = /* @__PURE__ */ new Map(); for (let i = 0; i < instanceTypes.length; i += 1) { @@ -161125,13 +162152,13 @@ function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, continue; } const widenedInstanceType = checker.getBaseTypeOfLiteralType(instanceType); - const argumentTypeNode = typeToAutoImportableTypeNode(checker, importAdder, widenedInstanceType, contextNode, scriptTarget, flags, tracker); + const argumentTypeNode = typeToAutoImportableTypeNode(checker, importAdder, widenedInstanceType, contextNode, scriptTarget, flags, internalFlags, tracker); if (!argumentTypeNode) { continue; } argumentTypeNodes.push(argumentTypeNode); const argumentTypeParameter = getFirstTypeParameterName(instanceType); - const instanceTypeConstraint = instanceType.isTypeParameter() && instanceType.constraint && !isAnonymousObjectConstraintType(instanceType.constraint) ? typeToAutoImportableTypeNode(checker, importAdder, instanceType.constraint, contextNode, scriptTarget, flags, tracker) : void 0; + const instanceTypeConstraint = instanceType.isTypeParameter() && instanceType.constraint && !isAnonymousObjectConstraintType(instanceType.constraint) ? typeToAutoImportableTypeNode(checker, importAdder, instanceType.constraint, contextNode, scriptTarget, flags, internalFlags, tracker) : void 0; if (argumentTypeParameter) { argumentTypeParameters.set(argumentTypeParameter, { argumentType: instanceType, constraint: instanceTypeConstraint }); } @@ -161231,7 +162258,7 @@ function createMethodImplementingSignatures(checker, context, enclosingDeclarati function getReturnTypeFromSignatures(signatures, checker, context, enclosingDeclaration) { if (length(signatures)) { const type = checker.getUnionType(map(signatures, checker.getReturnTypeOfSignature)); - return checker.typeToTypeNode(type, enclosingDeclaration, 1 /* NoTruncation */, getNoopSymbolTrackerWithResolver(context)); + return checker.typeToTypeNode(type, enclosingDeclaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); } } function createStubbedMethod(modifiers, name, optional, typeParameters, parameters, returnType, quotePreference, body) { @@ -161829,7 +162856,7 @@ var errorCodes54 = [Diagnostics.require_call_may_be_converted_to_an_import.code] registerCodeFix({ errorCodes: errorCodes54, getCodeActions(context) { - const info = getInfo18(context.sourceFile, context.program, context.span.start); + const info = getInfo18(context.sourceFile, context.program, context.span.start, context.preferences); if (!info) { return void 0; } @@ -161838,14 +162865,14 @@ registerCodeFix({ }, fixIds: [fixId42], getAllCodeActions: (context) => codeFixAll(context, errorCodes54, (changes, diag2) => { - const info = getInfo18(diag2.file, context.program, diag2.start); + const info = getInfo18(diag2.file, context.program, diag2.start, context.preferences); if (info) { doChange35(changes, context.sourceFile, info); } }) }); function doChange35(changes, sourceFile, info) { - const { allowSyntheticDefaults, defaultImportName, namedImports, statement, required } = info; + const { allowSyntheticDefaults, defaultImportName, namedImports, statement, moduleSpecifier } = info; changes.replaceNode( sourceFile, statement, @@ -161855,7 +162882,7 @@ function doChange35(changes, sourceFile, info) { /*isTypeOnly*/ false, defaultImportName, - factory.createExternalModuleReference(required) + factory.createExternalModuleReference(moduleSpecifier) ) : factory.createImportDeclaration( /*modifiers*/ void 0, @@ -161865,13 +162892,13 @@ function doChange35(changes, sourceFile, info) { defaultImportName, namedImports ), - required, + moduleSpecifier, /*attributes*/ void 0 ) ); } -function getInfo18(sourceFile, program, pos) { +function getInfo18(sourceFile, program, pos, preferences) { const { parent: parent2 } = getTokenAtPosition(sourceFile, pos); if (!isRequireCall( parent2, @@ -161881,15 +162908,17 @@ function getInfo18(sourceFile, program, pos) { Debug.failBadSyntaxKind(parent2); } const decl = cast(parent2.parent, isVariableDeclaration); + const quotePreference = getQuotePreference(sourceFile, preferences); const defaultImportName = tryCast(decl.name, isIdentifier); const namedImports = isObjectBindingPattern(decl.name) ? tryCreateNamedImportsFromObjectBindingPattern(decl.name) : void 0; if (defaultImportName || namedImports) { + const moduleSpecifier = first(parent2.arguments); return { allowSyntheticDefaults: getAllowSyntheticDefaultImports(program.getCompilerOptions()), defaultImportName, namedImports, statement: cast(decl.parent.parent, isVariableStatement), - required: first(parent2.arguments) + moduleSpecifier: isNoSubstitutionTemplateLiteral(moduleSpecifier) ? factory.createStringLiteral(moduleSpecifier.text, quotePreference === 0 /* Single */) : moduleSpecifier }; } } @@ -162423,6 +163452,7 @@ __export(ts_Completions_exports, { getCompletionEntryDetails: () => getCompletionEntryDetails, getCompletionEntrySymbol: () => getCompletionEntrySymbol, getCompletionsAtPosition: () => getCompletionsAtPosition, + getDefaultCommitCharacters: () => getDefaultCommitCharacters, getPropertiesForObjectExpression: () => getPropertiesForObjectExpression, moduleSpecifierResolutionCacheAttemptLimit: () => moduleSpecifierResolutionCacheAttemptLimit, moduleSpecifierResolutionLimit: () => moduleSpecifierResolutionLimit @@ -162514,9 +163544,9 @@ function originIsComputedPropertyName(origin) { return !!(origin && origin.kind & 512 /* ComputedPropertyName */); } function resolvingModuleSpecifiers(logPrefix, host, resolver, program, position, preferences, isForImportStatementCompletion, isValidTypeOnlyUseSite, cb) { - var _a, _b, _c; + var _a, _b, _c, _d; const start = timestamp(); - const needsFullResolution = isForImportStatementCompletion || moduleResolutionSupportsPackageJsonExportsAndImports(getEmitModuleResolutionKind(program.getCompilerOptions())); + const needsFullResolution = isForImportStatementCompletion || getResolvePackageJsonExports(program.getCompilerOptions()) || ((_a = preferences.autoImportSpecifierExcludeRegexes) == null ? void 0 : _a.length); let skippedAny = false; let ambientCount = 0; let resolvedCount = 0; @@ -162529,9 +163559,9 @@ function resolvingModuleSpecifiers(logPrefix, host, resolver, program, position, resolvedBeyondLimit: () => resolvedCount > moduleSpecifierResolutionLimit }); const hitRateMessage = cacheAttemptCount ? ` (${(resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1)}% hit rate)` : ""; - (_a = host.log) == null ? void 0 : _a.call(host, `${logPrefix}: resolved ${resolvedCount} module specifiers, plus ${ambientCount} ambient and ${resolvedFromCacheCount} from cache${hitRateMessage}`); - (_b = host.log) == null ? void 0 : _b.call(host, `${logPrefix}: response is ${skippedAny ? "incomplete" : "complete"}`); - (_c = host.log) == null ? void 0 : _c.call(host, `${logPrefix}: ${timestamp() - start}`); + (_b = host.log) == null ? void 0 : _b.call(host, `${logPrefix}: resolved ${resolvedCount} module specifiers, plus ${ambientCount} ambient and ${resolvedFromCacheCount} from cache${hitRateMessage}`); + (_c = host.log) == null ? void 0 : _c.call(host, `${logPrefix}: response is ${skippedAny ? "incomplete" : "complete"}`); + (_d = host.log) == null ? void 0 : _d.call(host, `${logPrefix}: ${timestamp() - start}`); return result; function tryResolve(exportInfo, isFromAmbientModule) { if (isFromAmbientModule) { @@ -162555,6 +163585,12 @@ function resolvingModuleSpecifiers(logPrefix, host, resolver, program, position, return result2 || (needsFullResolution ? "failed" : "skipped"); } } +function getDefaultCommitCharacters(isNewIdentifierLocation) { + if (isNewIdentifierLocation) { + return []; + } + return [".", ",", ";"]; +} function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken, formatContext, includeSymbol = false) { var _a; const { previousToken } = getRelevantTokens(position, sourceFile); @@ -162563,7 +163599,17 @@ function getCompletionsAtPosition(host, program, log, sourceFile, position, pref } if (triggerCharacter === " ") { if (preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) { - return { isGlobalCompletion: true, isMemberCompletion: false, isNewIdentifierLocation: true, isIncomplete: true, entries: [] }; + return { + isGlobalCompletion: true, + isMemberCompletion: false, + isNewIdentifierLocation: true, + isIncomplete: true, + entries: [], + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + true + ) + }; } return void 0; } @@ -162717,7 +163763,16 @@ function continuePreviousIncompleteResponse(cache, file, location, program, host return previousResponse; } function jsdocCompletionInfo(entries) { - return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries }; + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries, + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; } function getJSDocParameterCompletions(sourceFile, position, checker, options, preferences, tagNameOnly) { const currentToken = getTokenAtPosition(sourceFile, position); @@ -162945,10 +164000,12 @@ function getJSDocParamAnnotation(paramName, initializer, dotDotDotToken, isJs, i const printer = isSnippet ? createSnippetPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target }) : createPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target }); setEmitFlags(typeNode, 1 /* SingleLine */); @@ -162988,7 +164045,8 @@ function specificKeywordCompletionInfo(entries, isNewIdentifierLocation) { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation, - entries: entries.slice() + entries: entries.slice(), + defaultCommitCharacters: getDefaultCommitCharacters(isNewIdentifierLocation) }; } function keywordCompletionData(keywordFilters, filterOutTsOnlyKeywords, isNewIdentifierLocation) { @@ -163146,7 +164204,8 @@ function completionInfoFromData(sourceFile, host, program, compilerOptions, log, isMemberCompletion: isMemberCompletionKind(completionKind), isNewIdentifierLocation, optionalReplacementSpan: getOptionalReplacementSpan(location), - entries + entries, + defaultCommitCharacters: getDefaultCommitCharacters(isNewIdentifierLocation) }; } function isCheckedFile(sourceFile, compilerOptions) { @@ -163204,6 +164263,7 @@ function getExhaustiveCaseSnippets(caseBlock, sourceFile, preferences, options, const printer = createSnippetPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target, newLine: getNewLineKind(newLineChar) }); @@ -163311,7 +164371,17 @@ function getJsxClosingTagCompletion(location, sourceFile) { kindModifiers: void 0, sortText: SortText.LocationPriority }; - return { isGlobalCompletion: false, isMemberCompletion: true, isNewIdentifierLocation: false, optionalReplacementSpan: replacementSpan, entries: [entry] }; + return { + isGlobalCompletion: false, + isMemberCompletion: true, + isNewIdentifierLocation: false, + optionalReplacementSpan: replacementSpan, + entries: [entry], + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; } return; } @@ -163328,7 +164398,8 @@ function getJSCompletionEntries(sourceFile, position, uniqueNames, target, entri kind: "warning" /* warning */, kindModifiers: "", sortText: SortText.JavascriptIdentifiers, - isFromUncheckedFile: true + isFromUncheckedFile: true, + commitCharacters: [] }, compareCompletionEntries); } }); @@ -163337,7 +164408,13 @@ function completionNameForLiteral(sourceFile, preferences, literal) { return typeof literal === "object" ? pseudoBigIntToString(literal) + "n" : isString(literal) ? quote(sourceFile, preferences, literal) : JSON.stringify(literal); } function createCompletionEntryForLiteral(sourceFile, preferences, literal) { - return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* string */, kindModifiers: "" /* none */, sortText: SortText.LocationPriority }; + return { + name: completionNameForLiteral(sourceFile, preferences, literal), + kind: "string" /* string */, + kindModifiers: "" /* none */, + sortText: SortText.LocationPriority, + commitCharacters: [] + }; } function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, position, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importStatementCompletion, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag, includeSymbol) { var _a, _b; @@ -163390,7 +164467,7 @@ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, if (originIsResolvedExport(origin)) { sourceDisplay = [textPart(origin.moduleSpecifier)]; if (importStatementCompletion) { - ({ insertText, replacementSpan } = getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences)); + ({ insertText, replacementSpan } = getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, program, preferences)); isSnippet = preferences.includeCompletionsWithSnippetText ? true : void 0; } } @@ -163460,15 +164537,25 @@ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, hasAction = !importStatementCompletion; } const parentNamedImportOrExport = findAncestor(location, isNamedImportsOrExports); - if ((parentNamedImportOrExport == null ? void 0 : parentNamedImportOrExport.kind) === 275 /* NamedImports */) { - const possibleToken = stringToToken(name); - if (parentNamedImportOrExport && possibleToken && (possibleToken === 135 /* AwaitKeyword */ || isNonContextualKeyword(possibleToken))) { - insertText = `${name} as ${name}_`; + if (parentNamedImportOrExport) { + const languageVersion = getEmitScriptTarget(host.getCompilationSettings()); + if (!isIdentifierText(name, languageVersion)) { + insertText = JSON.stringify(name); + if (parentNamedImportOrExport.kind === 275 /* NamedImports */) { + insertText += " as " + generateIdentifierForArbitraryString(name, languageVersion); + } + } else if (parentNamedImportOrExport.kind === 275 /* NamedImports */) { + const possibleToken = stringToToken(name); + if (possibleToken && (possibleToken === 135 /* AwaitKeyword */ || isNonContextualKeyword(possibleToken))) { + insertText = `${name} as ${name}_`; + } } } + const kind = ts_SymbolDisplay_exports.getSymbolKind(typeChecker, symbol, location); + const commitCharacters = kind === "warning" /* warning */ || kind === "string" /* string */ ? [] : void 0; return { name, - kind: ts_SymbolDisplay_exports.getSymbolKind(typeChecker, symbol, location), + kind, kindModifiers: ts_SymbolDisplay_exports.getSymbolModifiers(typeChecker, symbol), sortText, source, @@ -163483,9 +164570,27 @@ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, isPackageJsonImport: originIsPackageJsonImport(origin) || void 0, isImportStatementCompletion: !!importStatementCompletion || void 0, data, + commitCharacters, ...includeSymbol ? { symbol } : void 0 }; } +function generateIdentifierForArbitraryString(text, languageVersion) { + let needsUnderscore = false; + let identifier = ""; + let ch; + for (let i = 0; i < text.length; i += ch !== void 0 && ch >= 65536 ? 2 : 1) { + ch = text.codePointAt(i); + if (ch !== void 0 && (i === 0 ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { + if (needsUnderscore) identifier += "_"; + identifier += String.fromCodePoint(ch); + needsUnderscore = false; + } else { + needsUnderscore = true; + } + } + if (needsUnderscore) identifier += "_"; + return identifier || "_"; +} function isClassLikeMemberCompletion(symbol, location, sourceFile) { if (isInJSFile(location)) { return false; @@ -163506,6 +164611,7 @@ function getEntryForMemberCompletion(host, program, options, preferences, name, const printer = createSnippetPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target, omitTrailingSemicolon: false, newLine: getNewLineKind(getNewLineOrDefaultFromHost(host, formatContext == null ? void 0 : formatContext.options)) @@ -163656,6 +164762,7 @@ function getEntryForObjectLiteralMethodCompletion(symbol, name, enclosingDeclara const printer = createSnippetPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target, omitTrailingSemicolon: false, newLine: getNewLineKind(getNewLineOrDefaultFromHost(host, formatContext == null ? void 0 : formatContext.options)) @@ -163676,6 +164783,7 @@ function getEntryForObjectLiteralMethodCompletion(symbol, name, enclosingDeclara const signaturePrinter = createPrinter({ removeComments: true, module: options.module, + moduleResolution: options.moduleResolution, target: options.target, omitTrailingSemicolon: true }); @@ -163725,7 +164833,14 @@ function createObjectLiteralMethod(symbol, enclosingDeclaration, sourceFile, pro if (signatures.length !== 1) { return void 0; } - const typeNode = checker.typeToTypeNode(effectiveType, enclosingDeclaration, builderFlags, ts_codefix_exports.getNoopSymbolTrackerWithResolver({ program, host })); + const typeNode = checker.typeToTypeNode( + effectiveType, + enclosingDeclaration, + builderFlags, + /*internalFlags*/ + void 0, + ts_codefix_exports.getNoopSymbolTrackerWithResolver({ program, host }) + ); if (!typeNode || !isFunctionTypeNode(typeNode)) { return void 0; } @@ -163845,7 +164960,7 @@ function createSnippetPrinter(printerOptions) { { ...formatContext, options: formatOptions } ); }); - const allChanges = escapes ? stableSort(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; + const allChanges = escapes ? toSorted(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; return ts_textChanges_exports.applyChanges(syntheticFile.text, allChanges); } function printNode(hint, node, sourceFile) { @@ -163881,7 +164996,7 @@ function createSnippetPrinter(printerOptions) { 0, { ...formatContext, options: formatOptions } ); - const allChanges = escapes ? stableSort(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; + const allChanges = escapes ? toSorted(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; return ts_textChanges_exports.applyChanges(syntheticFile.text, allChanges); } } @@ -163937,7 +165052,7 @@ function completionEntryDataToSymbolOriginInfo(data, completionName, moduleSymbo }; return unresolvedOrigin; } -function getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, options, preferences) { +function getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, program, preferences) { const replacementSpan = importStatementCompletion.replacementSpan; const quotedModuleSpecifier = escapeSnippetText(quote(sourceFile, preferences, origin.moduleSpecifier)); const exportKind = origin.isDefaultExport ? 1 /* Default */ : origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ : 0 /* Named */; @@ -163945,7 +165060,7 @@ function getInsertTextAndReplacementSpanForImportCompletion(name, importStatemen const importKind = ts_codefix_exports.getImportKind( sourceFile, exportKind, - options, + program, /*forceImportKeyword*/ true ); @@ -164093,7 +165208,16 @@ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, con function getLabelCompletionAtPosition(node) { const entries = getLabelStatementCompletions(node); if (entries.length) { - return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries }; + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries, + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; } } function getLabelStatementCompletions(node) { @@ -165072,7 +166196,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, if (ts_JsTyping_exports.nodeCoreModules.has(moduleName) && startsWith(moduleName, "node:") !== shouldUseUriStyleNodeCoreModules(sourceFile, program)) { return false; } - return packageJsonFilter ? packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson)) : true; + return ((packageJsonFilter == null ? void 0 : packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson))) ?? true) || fileContainsPackageImport(sourceFile, moduleName); } return isImportableFile( info.isFromPackageJson ? packageJsonAutoImportProvider : program, @@ -165314,7 +166438,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, completionKind = 3 /* MemberLike */; isNewIdentifierLocation = false; const exports2 = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol); - const existing = new Set(namedImportsOrExports.elements.filter((n) => !isCurrentlyEditingNode(n)).map((n) => (n.propertyName || n.name).escapedText)); + const existing = new Set(namedImportsOrExports.elements.filter((n) => !isCurrentlyEditingNode(n)).map((n) => moduleExportNameTextEscaped(n.propertyName || n.name))); const uniques = exports2.filter((e) => e.escapedName !== "default" /* Default */ && !existing.has(e.escapedName)); symbols = concatenate(symbols, uniques); if (!uniques.length) { @@ -165805,6 +166929,9 @@ function getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, js if (isIdentifierText(name, target, jsxIdentifierExpected ? 1 /* JSX */ : 0 /* Standard */) || symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) { return validNameResult; } + if (symbol.flags & 2097152 /* Alias */) { + return { name, needsConvertPropertyAccess: true }; + } switch (kind) { case 3 /* MemberLike */: return originIsComputedPropertyName(origin) ? { name: origin.symbolName, needsConvertPropertyAccess: false } : void 0; @@ -165946,7 +167073,13 @@ function getJsDocTagAtPosition(node, position) { } function getPropertiesForObjectExpression(contextualType, completionsType, obj, checker) { const hasCompletionsType = completionsType && completionsType !== contextualType; - const type = hasCompletionsType && !(completionsType.flags & 3 /* AnyOrUnknown */) ? checker.getUnionType([contextualType, completionsType]) : contextualType; + const promiseFilteredContextualType = checker.getUnionType( + filter( + contextualType.flags & 1048576 /* Union */ ? contextualType.types : [contextualType], + (t) => !checker.getPromisedTypeOfPromise(t) + ) + ); + const type = hasCompletionsType && !(completionsType.flags & 3 /* AnyOrUnknown */) ? checker.getUnionType([promiseFilteredContextualType, completionsType]) : promiseFilteredContextualType; const properties = getApparentProperties(type, obj, checker); return type.isClass() && containsNonPublicProperties(properties) ? [] : hasCompletionsType ? filter(properties, hasDeclarationOtherThanSelf) : properties; function hasDeclarationOtherThanSelf(member) { @@ -166321,7 +167454,7 @@ function createNameAndKindSet() { } function getStringLiteralCompletions(sourceFile, position, contextToken, options, host, program, log, preferences, includeSymbol) { if (isInReferenceComment(sourceFile, position)) { - const entries = getTripleSlashReferenceCompletion(sourceFile, position, options, host); + const entries = getTripleSlashReferenceCompletion(sourceFile, position, program, host); return entries && convertPathCompletions(entries); } if (isInString(sourceFile, position, contextToken)) { @@ -166379,7 +167512,14 @@ function convertStringLiteralCompletions(completion, contextToken, sourceFile, h void 0, includeSymbol ); - return { isGlobalCompletion: false, isMemberCompletion: true, isNewIdentifierLocation: completion.hasIndexSignature, optionalReplacementSpan, entries }; + return { + isGlobalCompletion: false, + isMemberCompletion: true, + isNewIdentifierLocation: completion.hasIndexSignature, + optionalReplacementSpan, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(completion.hasIndexSignature) + }; } case 2 /* Types */: { const quoteChar = contextToken.kind === 15 /* NoSubstitutionTemplateLiteral */ ? 96 /* backtick */ : startsWith(getTextOfNode(contextToken), "'") ? 39 /* singleQuote */ : 34 /* doubleQuote */; @@ -166388,9 +167528,17 @@ function convertStringLiteralCompletions(completion, contextToken, sourceFile, h kindModifiers: "" /* none */, kind: "string" /* string */, sortText: SortText.LocationPriority, - replacementSpan: getReplacementSpanForContextToken(contextToken, position) + replacementSpan: getReplacementSpanForContextToken(contextToken, position), + commitCharacters: [] })); - return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: completion.isNewIdentifier, optionalReplacementSpan, entries }; + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: completion.isNewIdentifier, + optionalReplacementSpan, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(completion.isNewIdentifier) + }; } default: return Debug.assertNever(completion); @@ -166421,7 +167569,13 @@ function convertPathCompletions(pathCompletions) { const isGlobalCompletion = false; const isNewIdentifierLocation = true; const entries = pathCompletions.map(({ name, kind, span, extension }) => ({ name, kind, kindModifiers: kindModifiersFromExtension(extension), sortText: SortText.LocationPriority, replacementSpan: span })); - return { isGlobalCompletion, isMemberCompletion: false, isNewIdentifierLocation, entries }; + return { + isGlobalCompletion, + isMemberCompletion: false, + isNewIdentifierLocation, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(isNewIdentifierLocation) + }; } function kindModifiersFromExtension(extension) { switch (extension) { @@ -166500,6 +167654,21 @@ function getStringLiteralCompletionEntries(sourceFile, node, position, program, } const literals = contextualTypes.types.filter((literal) => !tracker.hasValue(literal.value)); return { kind: 2 /* Types */, types: literals, isNewIdentifier: false }; + case 276 /* ImportSpecifier */: + case 281 /* ExportSpecifier */: + const specifier = parent2; + if (specifier.propertyName && node !== specifier.propertyName) { + return; + } + const namedImportsOrExports = specifier.parent; + const { moduleSpecifier } = namedImportsOrExports.kind === 275 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent; + if (!moduleSpecifier) return; + const moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); + if (!moduleSpecifierSymbol) return; + const exports2 = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol); + const existing = new Set(namedImportsOrExports.elements.map((n) => moduleExportNameTextEscaped(n.propertyName || n.name))); + const uniques = exports2.filter((e) => e.escapedName !== "default" /* Default */ && !existing.has(e.escapedName)); + return { kind: 1 /* Properties */, symbols: uniques, hasIndexSignature: false }; default: return fromContextualType() || fromContextualType(0 /* None */); } @@ -166629,7 +167798,7 @@ function getStringLiteralCompletionsFromModuleNamesWorker(sourceFile, node, prog const compilerOptions = program.getCompilerOptions(); const typeChecker = program.getTypeChecker(); const extensionOptions = getExtensionOptions(compilerOptions, 1 /* ModuleSpecifier */, sourceFile, typeChecker, preferences, mode); - return isPathRelativeToScript(literalValue) || !compilerOptions.baseUrl && !compilerOptions.paths && (isRootedDiskPath(literalValue) || isUrl(literalValue)) ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, extensionOptions) : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, compilerOptions, host, extensionOptions, typeChecker); + return isPathRelativeToScript(literalValue) || !compilerOptions.baseUrl && !compilerOptions.paths && (isRootedDiskPath(literalValue) || isUrl(literalValue)) ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, scriptPath, extensionOptions) : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, program, host, extensionOptions); } function getExtensionOptions(compilerOptions, referenceKind, importingSourceFile, typeChecker, preferences, resolutionMode) { return { @@ -166640,14 +167809,15 @@ function getExtensionOptions(compilerOptions, referenceKind, importingSourceFile resolutionMode }; } -function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, extensionOptions) { +function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, scriptPath, extensionOptions) { + const compilerOptions = program.getCompilerOptions(); if (compilerOptions.rootDirs) { return getCompletionEntriesForDirectoryFragmentWithRootDirs( compilerOptions.rootDirs, literalValue, scriptDirectory, extensionOptions, - compilerOptions, + program, host, scriptPath ); @@ -166656,6 +167826,7 @@ function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, c literalValue, scriptDirectory, extensionOptions, + program, host, /*moduleSpecifierIsRelative*/ true, @@ -166682,7 +167853,8 @@ function getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ign compareStringsCaseSensitive ); } -function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, compilerOptions, host, exclude) { +function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, program, host, exclude) { + const compilerOptions = program.getCompilerOptions(); const basePath = compilerOptions.project || host.getCurrentDirectory(); const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames()); const baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase); @@ -166691,6 +167863,7 @@ function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment fragment, baseDirectory, extensionOptions, + program, host, /*moduleSpecifierIsRelative*/ true, @@ -166699,7 +167872,7 @@ function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment (itemA, itemB) => itemA.name === itemB.name && itemA.kind === itemB.kind && itemA.extension === itemB.extension ); } -function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, extensionOptions, host, moduleSpecifierIsRelative, exclude, result = createNameAndKindSet()) { +function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, extensionOptions, program, host, moduleSpecifierIsRelative, exclude, result = createNameAndKindSet()) { var _a; if (fragment === void 0) { fragment = ""; @@ -166724,7 +167897,7 @@ function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, ext if (versionPaths) { const packageDirectory = getDirectoryPath(packageJsonPath); const pathInPackage = absolutePath.slice(ensureTrailingDirectorySeparator(packageDirectory).length); - if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, host, versionPaths)) { + if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, program, host, versionPaths)) { return result; } } @@ -166750,7 +167923,7 @@ function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, ext } const { name, extension } = getFilenameWithExtensionOption( getBaseFileName(filePath), - host.getCompilationSettings(), + program, extensionOptions, /*isExportsWildcard*/ false @@ -166769,7 +167942,7 @@ function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, ext } return result; } -function getFilenameWithExtensionOption(name, compilerOptions, extensionOptions, isExportsWildcard) { +function getFilenameWithExtensionOption(name, program, extensionOptions, isExportsWildcard) { const nonJsResult = ts_moduleSpecifiers_exports.tryGetRealFileNameForNonJsDeclarationFileName(name); if (nonJsResult) { return { name: nonJsResult, extension: tryGetExtensionFromPath2(nonJsResult) }; @@ -166777,9 +167950,10 @@ function getFilenameWithExtensionOption(name, compilerOptions, extensionOptions, if (extensionOptions.referenceKind === 0 /* Filename */) { return { name, extension: tryGetExtensionFromPath2(name) }; } - let allowedEndings = getModuleSpecifierPreferences( + let allowedEndings = ts_moduleSpecifiers_exports.getModuleSpecifierPreferences( { importModuleSpecifierEnding: extensionOptions.endingPreference }, - compilerOptions, + program, + program.getCompilerOptions(), extensionOptions.importingSourceFile ).getAllowedEndingsInPreferredOrder(extensionOptions.resolutionMode); if (isExportsWildcard) { @@ -166789,16 +167963,16 @@ function getFilenameWithExtensionOption(name, compilerOptions, extensionOptions, if (fileExtensionIsOneOf(name, supportedTSImplementationExtensions)) { return { name, extension: tryGetExtensionFromPath2(name) }; } - const outputExtension2 = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, compilerOptions); + const outputExtension2 = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, program.getCompilerOptions()); return outputExtension2 ? { name: changeExtension(name, outputExtension2), extension: outputExtension2 } : { name, extension: tryGetExtensionFromPath2(name) }; } if (!isExportsWildcard && (allowedEndings[0] === 0 /* Minimal */ || allowedEndings[0] === 1 /* Index */) && fileExtensionIsOneOf(name, [".js" /* Js */, ".jsx" /* Jsx */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".d.ts" /* Dts */])) { return { name: removeFileExtension(name), extension: tryGetExtensionFromPath2(name) }; } - const outputExtension = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, compilerOptions); + const outputExtension = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, program.getCompilerOptions()); return outputExtension ? { name: changeExtension(name, outputExtension), extension: outputExtension } : { name, extension: tryGetExtensionFromPath2(name) }; } -function addCompletionEntriesFromPaths(result, fragment, baseDirectory, extensionOptions, host, paths) { +function addCompletionEntriesFromPaths(result, fragment, baseDirectory, extensionOptions, program, host, paths) { const getPatternsForKey = (key) => paths[key]; const comparePaths2 = (a, b) => { const patternA = tryParsePattern(a); @@ -166814,13 +167988,14 @@ function addCompletionEntriesFromPaths(result, fragment, baseDirectory, extensio fragment, baseDirectory, extensionOptions, + program, host, getOwnKeys(paths), getPatternsForKey, comparePaths2 ); } -function addCompletionEntriesFromPathsOrExports(result, isExports, fragment, baseDirectory, extensionOptions, host, keys, getPatternsForKey, comparePaths2) { +function addCompletionEntriesFromPathsOrExports(result, isExports, fragment, baseDirectory, extensionOptions, program, host, keys, getPatternsForKey, comparePaths2) { let pathResults = []; let matchedPath; for (const key of keys) { @@ -166839,7 +168014,7 @@ function addCompletionEntriesFromPathsOrExports(result, isExports, fragment, bas if (typeof pathPattern === "string" || matchedPath === void 0 || comparePaths2(key, matchedPath) !== 1 /* GreaterThan */) { pathResults.push({ matchedPattern: isMatch, - results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, isExports && isMatch, host).map(({ name, kind, extension }) => nameAndKind(name, kind, extension)) + results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, isExports && isMatch, program, host).map(({ name, kind, extension }) => nameAndKind(name, kind, extension)) }); } } @@ -166847,7 +168022,9 @@ function addCompletionEntriesFromPathsOrExports(result, isExports, fragment, bas pathResults.forEach((pathResult) => pathResult.results.forEach((r) => result.add(r))); return matchedPath !== void 0; } -function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, compilerOptions, host, extensionOptions, typeChecker) { +function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, program, host, extensionOptions) { + const typeChecker = program.getTypeChecker(); + const compilerOptions = program.getCompilerOptions(); const { baseUrl, paths } = compilerOptions; const result = createNameAndKindSet(); const moduleResolution = getEmitModuleResolutionKind(compilerOptions); @@ -166857,6 +168034,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c fragment, absolute, extensionOptions, + program, host, /*moduleSpecifierIsRelative*/ false, @@ -166867,7 +168045,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c } if (paths) { const absolute = getPathsBasePath(compilerOptions, host); - addCompletionEntriesFromPaths(result, fragment, absolute, extensionOptions, host, paths); + addCompletionEntriesFromPaths(result, fragment, absolute, extensionOptions, program, host, paths); } const fragmentDirectory = getFragmentDirectory(fragment); for (const ambientName of getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker)) { @@ -166878,7 +168056,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c void 0 )); } - getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, fragmentDirectory, extensionOptions, result); + getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDirectory, extensionOptions, result); if (moduleResolutionUsesNodeModules(moduleResolution)) { let foundGlobal = false; if (fragmentDirectory === void 0) { @@ -166903,6 +168081,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c fragment, nodeModules, extensionOptions, + program, host, /*moduleSpecifierIsRelative*/ false, @@ -166947,6 +168126,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c fragmentSubpath, packageDirectory, extensionOptions, + program, host, keys, (key) => singleElementArray(getPatternFromFirstMatchingCondition(exports2[key], conditions)), @@ -166979,7 +168159,7 @@ function getPatternFromFirstMatchingCondition(target, conditions) { function getFragmentDirectory(fragment) { return containsSlash(fragment) ? hasTrailingDirectorySeparator(fragment) ? fragment : getDirectoryPath(fragment) : void 0; } -function getCompletionsForPathMapping(path, patterns, fragment, packageDirectory, extensionOptions, isExportsWildcard, host) { +function getCompletionsForPathMapping(path, patterns, fragment, packageDirectory, extensionOptions, isExportsWildcard, program, host) { if (!endsWith(path, "*")) { return !path.includes("*") ? justPathMappingName(path, "script" /* scriptElement */) : emptyArray; } @@ -166989,15 +168169,15 @@ function getCompletionsForPathMapping(path, patterns, fragment, packageDirectory const starIsFullPathComponent = path[path.length - 2] === "/"; return starIsFullPathComponent ? justPathMappingName(pathPrefix, "directory" /* directory */) : flatMap(patterns, (pattern) => { var _a; - return (_a = getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, host)) == null ? void 0 : _a.map(({ name, ...rest }) => ({ name: pathPrefix + name, ...rest })); + return (_a = getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExportsWildcard, program, host)) == null ? void 0 : _a.map(({ name, ...rest }) => ({ name: pathPrefix + name, ...rest })); }); } - return flatMap(patterns, (pattern) => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, host)); + return flatMap(patterns, (pattern) => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, program, host)); function justPathMappingName(name, kind) { return startsWith(name, fragment) ? [{ name: removeTrailingDirectorySeparator(name), kind, extension: void 0 }] : emptyArray; } } -function getModulesForPathsPattern(fragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, host) { +function getModulesForPathsPattern(fragment, packageDirectory, pattern, extensionOptions, isExportsWildcard, program, host) { if (!host.readDirectory) { return void 0; } @@ -167030,7 +168210,7 @@ function getModulesForPathsPattern(fragment, packageDirectory, pattern, extensio if (containsSlash(trimmedWithPattern)) { return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]); } - const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, host.getCompilationSettings(), extensionOptions, isExportsWildcard); + const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsWildcard); return nameAndKind(name, "script" /* scriptElement */, extension); } }); @@ -167058,7 +168238,8 @@ function getAmbientModuleCompletions(fragment, fragmentDirectory, checker) { } return nonRelativeModuleNames; } -function getTripleSlashReferenceCompletion(sourceFile, position, compilerOptions, host) { +function getTripleSlashReferenceCompletion(sourceFile, position, program, host) { + const compilerOptions = program.getCompilerOptions(); const token = getTokenAtPosition(sourceFile, position); const commentRanges = getLeadingCommentRanges(sourceFile.text, token.pos); const range = commentRanges && find(commentRanges, (commentRange) => position >= commentRange.pos && position <= commentRange.end); @@ -167076,14 +168257,16 @@ function getTripleSlashReferenceCompletion(sourceFile, position, compilerOptions toComplete, scriptPath, getExtensionOptions(compilerOptions, 0 /* Filename */, sourceFile), + program, host, /*moduleSpecifierIsRelative*/ true, sourceFile.path - ) : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, 1 /* ModuleSpecifier */, sourceFile)) : Debug.fail(); + ) : kind === "types" ? getCompletionEntriesFromTypings(host, program, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, 1 /* ModuleSpecifier */, sourceFile)) : Debug.fail(); return addReplacementSpans(toComplete, range.pos + prefix.length, arrayFrom(names.values())); } -function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDirectory, extensionOptions, result = createNameAndKindSet()) { +function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDirectory, extensionOptions, result = createNameAndKindSet()) { + const options = program.getCompilerOptions(); const seen = /* @__PURE__ */ new Map(); const typeRoots = tryAndIgnoreErrors(() => getEffectiveTypeRoots(options, host)) || emptyArray; for (const root of typeRoots) { @@ -167117,6 +168300,7 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire remainingFragment, baseDirectory, extensionOptions, + program, host, /*moduleSpecifierIsRelative*/ false, @@ -167187,11 +168371,9 @@ __export(ts_FindAllReferences_exports, { getImplementationsAtPosition: () => getImplementationsAtPosition, getImportOrExportSymbol: () => getImportOrExportSymbol, getReferenceEntriesForNode: () => getReferenceEntriesForNode, - getTextSpanOfEntry: () => getTextSpanOfEntry, isContextWithStartAndEndNode: () => isContextWithStartAndEndNode, isDeclarationOfSymbol: () => isDeclarationOfSymbol, isWriteAccessForReference: () => isWriteAccessForReference, - nodeEntry: () => nodeEntry, toContextSpan: () => toContextSpan, toHighlightSpan: () => toHighlightSpan, toReferenceEntry: () => toReferenceEntry, @@ -167455,12 +168637,12 @@ function getSearchesFromDirectImports(directImports, exportSymbol, exportKind, c } for (const element of namedBindings.elements) { const { name, propertyName } = element; - if (!isNameMatch((propertyName || name).escapedText)) { + if (!isNameMatch(moduleExportNameTextEscaped(propertyName || name))) { continue; } if (propertyName) { singleReferences.push(propertyName); - if (!isForRename || name.escapedText === exportSymbol.escapedName) { + if (!isForRename || moduleExportNameTextEscaped(name) === exportSymbol.escapedName) { addSearch(name, checker.getSymbolAtLocation(name)); } } else { @@ -168718,8 +169900,8 @@ var Core; function shouldAddSingleReference(singleRef, state) { if (!hasMatchingMeaning(singleRef, state)) return false; if (state.options.use !== 2 /* Rename */) return true; - if (!isIdentifier(singleRef)) return false; - return !(isImportOrExportSpecifier(singleRef.parent) && singleRef.escapedText === "default" /* Default */); + if (!isIdentifier(singleRef) && !isImportOrExportSpecifier(singleRef.parent)) return false; + return !(isImportOrExportSpecifier(singleRef.parent) && moduleExportNameIsDefault(singleRef)); } function searchForImportedSymbol(symbol, state) { if (!symbol.declarations) return; @@ -168881,7 +170063,7 @@ var Core; case 15 /* NoSubstitutionTemplateLiteral */: case 11 /* StringLiteral */: { const str = node; - return (isLiteralNameOfPropertyDeclarationOrIndexAccess(str) || isNameOfModuleDeclaration(node) || isExpressionOfExternalModuleImportEqualsDeclaration(node) || isCallExpression(node.parent) && isBindableObjectDefinePropertyCall(node.parent) && node.parent.arguments[1] === node) && str.text.length === searchSymbolName.length; + return str.text.length === searchSymbolName.length && (isLiteralNameOfPropertyDeclarationOrIndexAccess(str) || isNameOfModuleDeclaration(node) || isExpressionOfExternalModuleImportEqualsDeclaration(node) || isCallExpression(node.parent) && isBindableObjectDefinePropertyCall(node.parent) && node.parent.arguments[1] === node || isImportOrExportSpecifier(node.parent)); } case 9 /* NumericLiteral */: return isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length; @@ -168947,7 +170129,7 @@ var Core; return; } if (isExportSpecifier(parent2)) { - Debug.assert(referenceLocation.kind === 80 /* Identifier */); + Debug.assert(referenceLocation.kind === 80 /* Identifier */ || referenceLocation.kind === 11 /* StringLiteral */); getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent2, search, state, addReferencesHere); return; } @@ -168997,7 +170179,7 @@ var Core; return; } if (!propertyName) { - if (!(state.options.use === 2 /* Rename */ && name.escapedText === "default" /* Default */)) { + if (!(state.options.use === 2 /* Rename */ && moduleExportNameIsDefault(name))) { addRef(); } } else if (referenceLocation === propertyName) { @@ -169013,7 +170195,7 @@ var Core; } } if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) { - const isDefaultExport = referenceLocation.escapedText === "default" || exportSpecifier.name.escapedText === "default"; + const isDefaultExport = moduleExportNameIsDefault(referenceLocation) || moduleExportNameIsDefault(exportSpecifier.name); const exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */; const exportSymbol = Debug.checkDefined(exportSpecifier.symbol); const exportInfo = getExportInfo(exportSymbol, exportKind, state.checker); @@ -169613,7 +170795,6 @@ var Core; var ts_GoToDefinition_exports = {}; __export(ts_GoToDefinition_exports, { createDefinitionInfo: () => createDefinitionInfo, - findReferenceInPosition: () => findReferenceInPosition, getDefinitionAndBoundSpan: () => getDefinitionAndBoundSpan, getDefinitionAtPosition: () => getDefinitionAtPosition, getReferenceAtPosition: () => getReferenceAtPosition, @@ -169728,12 +170909,13 @@ function getDefinitionAtPosition(program, sourceFile, position, searchOtherFiles const calledDeclaration = tryGetSignatureDeclaration(typeChecker, node); if (calledDeclaration && !(isJsxOpeningLikeElement(node.parent) && isJsxConstructorLike(calledDeclaration))) { const sigInfo = createDefinitionFromSignatureDeclaration(typeChecker, calledDeclaration, failedAliasResolution); + let declarationFilter = (d) => d !== calledDeclaration; if (typeChecker.getRootSymbols(symbol).some((s) => symbolMatchesSignature(s, calledDeclaration))) { - return [sigInfo]; - } else { - const defs = getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, calledDeclaration) || emptyArray; - return node.kind === 108 /* SuperKeyword */ ? [sigInfo, ...defs] : [...defs, sigInfo]; + if (!isConstructorDeclaration(calledDeclaration)) return [sigInfo]; + declarationFilter = (d) => d !== calledDeclaration && (isClassDeclaration(d) || isClassExpression(d)); } + const defs = getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, declarationFilter) || emptyArray; + return node.kind === 108 /* SuperKeyword */ ? [sigInfo, ...defs] : [...defs, sigInfo]; } if (node.parent.kind === 304 /* ShorthandPropertyAssignment */) { const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); @@ -169970,7 +171152,7 @@ function getSymbol(node, checker, stopAtAlias) { return { symbol, failedAliasResolution }; } function shouldSkipAlias(node, declaration) { - if (node.kind !== 80 /* Identifier */) { + if (node.kind !== 80 /* Identifier */ && (node.kind !== 11 /* StringLiteral */ || !isImportOrExportSpecifier(node.parent))) { return false; } if (node.parent === declaration) { @@ -169990,9 +171172,9 @@ function isExpandoDeclaration(node) { }); return !!containingAssignment && getAssignmentDeclarationKind(containingAssignment) === 5 /* Property */; } -function getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, excludeDeclaration) { - const filteredDeclarations = filter(symbol.declarations, (d) => d !== excludeDeclaration); - const signatureDefinition = getConstructSignatureDefinition() || getCallSignatureDefinition(); +function getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, declarationFilter) { + const filteredDeclarations = declarationFilter !== void 0 ? filter(symbol.declarations, declarationFilter) : symbol.declarations; + const signatureDefinition = !declarationFilter && (getConstructSignatureDefinition() || getCallSignatureDefinition()); if (signatureDefinition) { return signatureDefinition; } @@ -170398,6 +171580,14 @@ function provideInlayHints(context) { if (!signature) { return; } + const typePredicate = checker.getTypePredicateOfSignature(signature); + if (typePredicate == null ? void 0 : typePredicate.type) { + const hintParts2 = typePredicateToInlayHintParts(typePredicate); + if (hintParts2) { + addTypeHints(hintParts2, getTypeAnnotationPosition(decl)); + return; + } + } const returnType = checker.getReturnTypeOfSignature(signature); if (isModuleReferenceType(returnType)) { return; @@ -170466,6 +171656,26 @@ function provideInlayHints(context) { ); }); } + function printTypePredicateInSingleLine(typePredicate) { + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const printer = createPrinterWithRemoveComments(); + return usingSingleLineStringWriter((writer) => { + const typePredicateNode = checker.typePredicateToTypePredicateNode( + typePredicate, + /*enclosingDeclaration*/ + void 0, + flags + ); + Debug.assertIsDefined(typePredicateNode, "should always get typePredicateNode"); + printer.writeNode( + 4 /* Unspecified */, + typePredicateNode, + /*sourceFile*/ + file, + writer + ); + }); + } function typeToInlayHintParts(type) { if (!shouldUseInteractiveInlayHints(preferences)) { return printTypeInSingleLine(type); @@ -170477,29 +171687,46 @@ function provideInlayHints(context) { void 0, flags ); + Debug.assertIsDefined(typeNode, "should always get typeNode"); + return getInlayHintDisplayParts(typeNode); + } + function typePredicateToInlayHintParts(typePredicate) { + if (!shouldUseInteractiveInlayHints(preferences)) { + return printTypePredicateInSingleLine(typePredicate); + } + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const typeNode = checker.typePredicateToTypePredicateNode( + typePredicate, + /*enclosingDeclaration*/ + void 0, + flags + ); Debug.assertIsDefined(typeNode, "should always get typenode"); + return getInlayHintDisplayParts(typeNode); + } + function getInlayHintDisplayParts(node) { const parts = []; - visitForDisplayParts(typeNode); + visitForDisplayParts(node); return parts; - function visitForDisplayParts(node) { + function visitForDisplayParts(node2) { var _a, _b; - if (!node) { + if (!node2) { return; } - const tokenString = tokenToString(node.kind); + const tokenString = tokenToString(node2.kind); if (tokenString) { parts.push({ text: tokenString }); return; } - if (isLiteralExpression(node)) { - parts.push({ text: getLiteralText2(node) }); + if (isLiteralExpression(node2)) { + parts.push({ text: getLiteralText2(node2) }); return; } - switch (node.kind) { + switch (node2.kind) { case 80 /* Identifier */: - Debug.assertNode(node, isIdentifier); - const identifierText = idText(node); - const name = node.symbol && node.symbol.declarations && node.symbol.declarations.length && getNameOfDeclaration(node.symbol.declarations[0]); + Debug.assertNode(node2, isIdentifier); + const identifierText = idText(node2); + const name = node2.symbol && node2.symbol.declarations && node2.symbol.declarations.length && getNameOfDeclaration(node2.symbol.declarations[0]); if (name) { parts.push(getNodeDisplayPart(identifierText, name)); } else { @@ -170507,331 +171734,331 @@ function provideInlayHints(context) { } break; case 166 /* QualifiedName */: - Debug.assertNode(node, isQualifiedName); - visitForDisplayParts(node.left); + Debug.assertNode(node2, isQualifiedName); + visitForDisplayParts(node2.left); parts.push({ text: "." }); - visitForDisplayParts(node.right); + visitForDisplayParts(node2.right); break; case 182 /* TypePredicate */: - Debug.assertNode(node, isTypePredicateNode); - if (node.assertsModifier) { + Debug.assertNode(node2, isTypePredicateNode); + if (node2.assertsModifier) { parts.push({ text: "asserts " }); } - visitForDisplayParts(node.parameterName); - if (node.type) { + visitForDisplayParts(node2.parameterName); + if (node2.type) { parts.push({ text: " is " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 183 /* TypeReference */: - Debug.assertNode(node, isTypeReferenceNode); - visitForDisplayParts(node.typeName); - if (node.typeArguments) { + Debug.assertNode(node2, isTypeReferenceNode); + visitForDisplayParts(node2.typeName); + if (node2.typeArguments) { parts.push({ text: "<" }); - visitDisplayPartList(node.typeArguments, ", "); + visitDisplayPartList(node2.typeArguments, ", "); parts.push({ text: ">" }); } break; case 168 /* TypeParameter */: - Debug.assertNode(node, isTypeParameterDeclaration); - if (node.modifiers) { - visitDisplayPartList(node.modifiers, " "); + Debug.assertNode(node2, isTypeParameterDeclaration); + if (node2.modifiers) { + visitDisplayPartList(node2.modifiers, " "); } - visitForDisplayParts(node.name); - if (node.constraint) { + visitForDisplayParts(node2.name); + if (node2.constraint) { parts.push({ text: " extends " }); - visitForDisplayParts(node.constraint); + visitForDisplayParts(node2.constraint); } - if (node.default) { + if (node2.default) { parts.push({ text: " = " }); - visitForDisplayParts(node.default); + visitForDisplayParts(node2.default); } break; case 169 /* Parameter */: - Debug.assertNode(node, isParameter); - if (node.modifiers) { - visitDisplayPartList(node.modifiers, " "); + Debug.assertNode(node2, isParameter); + if (node2.modifiers) { + visitDisplayPartList(node2.modifiers, " "); } - if (node.dotDotDotToken) { + if (node2.dotDotDotToken) { parts.push({ text: "..." }); } - visitForDisplayParts(node.name); - if (node.questionToken) { + visitForDisplayParts(node2.name); + if (node2.questionToken) { parts.push({ text: "?" }); } - if (node.type) { + if (node2.type) { parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 185 /* ConstructorType */: - Debug.assertNode(node, isConstructorTypeNode); + Debug.assertNode(node2, isConstructorTypeNode); parts.push({ text: "new " }); - visitParametersAndTypeParameters(node); + visitParametersAndTypeParameters(node2); parts.push({ text: " => " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); break; case 186 /* TypeQuery */: - Debug.assertNode(node, isTypeQueryNode); + Debug.assertNode(node2, isTypeQueryNode); parts.push({ text: "typeof " }); - visitForDisplayParts(node.exprName); - if (node.typeArguments) { + visitForDisplayParts(node2.exprName); + if (node2.typeArguments) { parts.push({ text: "<" }); - visitDisplayPartList(node.typeArguments, ", "); + visitDisplayPartList(node2.typeArguments, ", "); parts.push({ text: ">" }); } break; case 187 /* TypeLiteral */: - Debug.assertNode(node, isTypeLiteralNode); + Debug.assertNode(node2, isTypeLiteralNode); parts.push({ text: "{" }); - if (node.members.length) { + if (node2.members.length) { parts.push({ text: " " }); - visitDisplayPartList(node.members, "; "); + visitDisplayPartList(node2.members, "; "); parts.push({ text: " " }); } parts.push({ text: "}" }); break; case 188 /* ArrayType */: - Debug.assertNode(node, isArrayTypeNode); - visitForDisplayParts(node.elementType); + Debug.assertNode(node2, isArrayTypeNode); + visitForDisplayParts(node2.elementType); parts.push({ text: "[]" }); break; case 189 /* TupleType */: - Debug.assertNode(node, isTupleTypeNode); + Debug.assertNode(node2, isTupleTypeNode); parts.push({ text: "[" }); - visitDisplayPartList(node.elements, ", "); + visitDisplayPartList(node2.elements, ", "); parts.push({ text: "]" }); break; case 202 /* NamedTupleMember */: - Debug.assertNode(node, isNamedTupleMember); - if (node.dotDotDotToken) { + Debug.assertNode(node2, isNamedTupleMember); + if (node2.dotDotDotToken) { parts.push({ text: "..." }); } - visitForDisplayParts(node.name); - if (node.questionToken) { + visitForDisplayParts(node2.name); + if (node2.questionToken) { parts.push({ text: "?" }); } parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); break; case 190 /* OptionalType */: - Debug.assertNode(node, isOptionalTypeNode); - visitForDisplayParts(node.type); + Debug.assertNode(node2, isOptionalTypeNode); + visitForDisplayParts(node2.type); parts.push({ text: "?" }); break; case 191 /* RestType */: - Debug.assertNode(node, isRestTypeNode); + Debug.assertNode(node2, isRestTypeNode); parts.push({ text: "..." }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); break; case 192 /* UnionType */: - Debug.assertNode(node, isUnionTypeNode); - visitDisplayPartList(node.types, " | "); + Debug.assertNode(node2, isUnionTypeNode); + visitDisplayPartList(node2.types, " | "); break; case 193 /* IntersectionType */: - Debug.assertNode(node, isIntersectionTypeNode); - visitDisplayPartList(node.types, " & "); + Debug.assertNode(node2, isIntersectionTypeNode); + visitDisplayPartList(node2.types, " & "); break; case 194 /* ConditionalType */: - Debug.assertNode(node, isConditionalTypeNode); - visitForDisplayParts(node.checkType); + Debug.assertNode(node2, isConditionalTypeNode); + visitForDisplayParts(node2.checkType); parts.push({ text: " extends " }); - visitForDisplayParts(node.extendsType); + visitForDisplayParts(node2.extendsType); parts.push({ text: " ? " }); - visitForDisplayParts(node.trueType); + visitForDisplayParts(node2.trueType); parts.push({ text: " : " }); - visitForDisplayParts(node.falseType); + visitForDisplayParts(node2.falseType); break; case 195 /* InferType */: - Debug.assertNode(node, isInferTypeNode); + Debug.assertNode(node2, isInferTypeNode); parts.push({ text: "infer " }); - visitForDisplayParts(node.typeParameter); + visitForDisplayParts(node2.typeParameter); break; case 196 /* ParenthesizedType */: - Debug.assertNode(node, isParenthesizedTypeNode); + Debug.assertNode(node2, isParenthesizedTypeNode); parts.push({ text: "(" }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); parts.push({ text: ")" }); break; case 198 /* TypeOperator */: - Debug.assertNode(node, isTypeOperatorNode); - parts.push({ text: `${tokenToString(node.operator)} ` }); - visitForDisplayParts(node.type); + Debug.assertNode(node2, isTypeOperatorNode); + parts.push({ text: `${tokenToString(node2.operator)} ` }); + visitForDisplayParts(node2.type); break; case 199 /* IndexedAccessType */: - Debug.assertNode(node, isIndexedAccessTypeNode); - visitForDisplayParts(node.objectType); + Debug.assertNode(node2, isIndexedAccessTypeNode); + visitForDisplayParts(node2.objectType); parts.push({ text: "[" }); - visitForDisplayParts(node.indexType); + visitForDisplayParts(node2.indexType); parts.push({ text: "]" }); break; case 200 /* MappedType */: - Debug.assertNode(node, isMappedTypeNode); + Debug.assertNode(node2, isMappedTypeNode); parts.push({ text: "{ " }); - if (node.readonlyToken) { - if (node.readonlyToken.kind === 40 /* PlusToken */) { + if (node2.readonlyToken) { + if (node2.readonlyToken.kind === 40 /* PlusToken */) { parts.push({ text: "+" }); - } else if (node.readonlyToken.kind === 41 /* MinusToken */) { + } else if (node2.readonlyToken.kind === 41 /* MinusToken */) { parts.push({ text: "-" }); } parts.push({ text: "readonly " }); } parts.push({ text: "[" }); - visitForDisplayParts(node.typeParameter); - if (node.nameType) { + visitForDisplayParts(node2.typeParameter); + if (node2.nameType) { parts.push({ text: " as " }); - visitForDisplayParts(node.nameType); + visitForDisplayParts(node2.nameType); } parts.push({ text: "]" }); - if (node.questionToken) { - if (node.questionToken.kind === 40 /* PlusToken */) { + if (node2.questionToken) { + if (node2.questionToken.kind === 40 /* PlusToken */) { parts.push({ text: "+" }); - } else if (node.questionToken.kind === 41 /* MinusToken */) { + } else if (node2.questionToken.kind === 41 /* MinusToken */) { parts.push({ text: "-" }); } parts.push({ text: "?" }); } parts.push({ text: ": " }); - if (node.type) { - visitForDisplayParts(node.type); + if (node2.type) { + visitForDisplayParts(node2.type); } parts.push({ text: "; }" }); break; case 201 /* LiteralType */: - Debug.assertNode(node, isLiteralTypeNode); - visitForDisplayParts(node.literal); + Debug.assertNode(node2, isLiteralTypeNode); + visitForDisplayParts(node2.literal); break; case 184 /* FunctionType */: - Debug.assertNode(node, isFunctionTypeNode); - visitParametersAndTypeParameters(node); + Debug.assertNode(node2, isFunctionTypeNode); + visitParametersAndTypeParameters(node2); parts.push({ text: " => " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); break; case 205 /* ImportType */: - Debug.assertNode(node, isImportTypeNode); - if (node.isTypeOf) { + Debug.assertNode(node2, isImportTypeNode); + if (node2.isTypeOf) { parts.push({ text: "typeof " }); } parts.push({ text: "import(" }); - visitForDisplayParts(node.argument); - if (node.assertions) { + visitForDisplayParts(node2.argument); + if (node2.assertions) { parts.push({ text: ", { assert: " }); - visitDisplayPartList(node.assertions.assertClause.elements, ", "); + visitDisplayPartList(node2.assertions.assertClause.elements, ", "); parts.push({ text: " }" }); } parts.push({ text: ")" }); - if (node.qualifier) { + if (node2.qualifier) { parts.push({ text: "." }); - visitForDisplayParts(node.qualifier); + visitForDisplayParts(node2.qualifier); } - if (node.typeArguments) { + if (node2.typeArguments) { parts.push({ text: "<" }); - visitDisplayPartList(node.typeArguments, ", "); + visitDisplayPartList(node2.typeArguments, ", "); parts.push({ text: ">" }); } break; case 171 /* PropertySignature */: - Debug.assertNode(node, isPropertySignature); - if ((_a = node.modifiers) == null ? void 0 : _a.length) { - visitDisplayPartList(node.modifiers, " "); + Debug.assertNode(node2, isPropertySignature); + if ((_a = node2.modifiers) == null ? void 0 : _a.length) { + visitDisplayPartList(node2.modifiers, " "); parts.push({ text: " " }); } - visitForDisplayParts(node.name); - if (node.questionToken) { + visitForDisplayParts(node2.name); + if (node2.questionToken) { parts.push({ text: "?" }); } - if (node.type) { + if (node2.type) { parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 181 /* IndexSignature */: - Debug.assertNode(node, isIndexSignatureDeclaration); + Debug.assertNode(node2, isIndexSignatureDeclaration); parts.push({ text: "[" }); - visitDisplayPartList(node.parameters, ", "); + visitDisplayPartList(node2.parameters, ", "); parts.push({ text: "]" }); - if (node.type) { + if (node2.type) { parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 173 /* MethodSignature */: - Debug.assertNode(node, isMethodSignature); - if ((_b = node.modifiers) == null ? void 0 : _b.length) { - visitDisplayPartList(node.modifiers, " "); + Debug.assertNode(node2, isMethodSignature); + if ((_b = node2.modifiers) == null ? void 0 : _b.length) { + visitDisplayPartList(node2.modifiers, " "); parts.push({ text: " " }); } - visitForDisplayParts(node.name); - if (node.questionToken) { + visitForDisplayParts(node2.name); + if (node2.questionToken) { parts.push({ text: "?" }); } - visitParametersAndTypeParameters(node); - if (node.type) { + visitParametersAndTypeParameters(node2); + if (node2.type) { parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 179 /* CallSignature */: - Debug.assertNode(node, isCallSignatureDeclaration); - visitParametersAndTypeParameters(node); - if (node.type) { + Debug.assertNode(node2, isCallSignatureDeclaration); + visitParametersAndTypeParameters(node2); + if (node2.type) { parts.push({ text: ": " }); - visitForDisplayParts(node.type); + visitForDisplayParts(node2.type); } break; case 207 /* ArrayBindingPattern */: - Debug.assertNode(node, isArrayBindingPattern); + Debug.assertNode(node2, isArrayBindingPattern); parts.push({ text: "[" }); - visitDisplayPartList(node.elements, ", "); + visitDisplayPartList(node2.elements, ", "); parts.push({ text: "]" }); break; case 206 /* ObjectBindingPattern */: - Debug.assertNode(node, isObjectBindingPattern); + Debug.assertNode(node2, isObjectBindingPattern); parts.push({ text: "{" }); - if (node.elements.length) { + if (node2.elements.length) { parts.push({ text: " " }); - visitDisplayPartList(node.elements, ", "); + visitDisplayPartList(node2.elements, ", "); parts.push({ text: " " }); } parts.push({ text: "}" }); break; case 208 /* BindingElement */: - Debug.assertNode(node, isBindingElement); - visitForDisplayParts(node.name); + Debug.assertNode(node2, isBindingElement); + visitForDisplayParts(node2.name); break; case 224 /* PrefixUnaryExpression */: - Debug.assertNode(node, isPrefixUnaryExpression); - parts.push({ text: tokenToString(node.operator) }); - visitForDisplayParts(node.operand); + Debug.assertNode(node2, isPrefixUnaryExpression); + parts.push({ text: tokenToString(node2.operator) }); + visitForDisplayParts(node2.operand); break; case 203 /* TemplateLiteralType */: - Debug.assertNode(node, isTemplateLiteralTypeNode); - visitForDisplayParts(node.head); - node.templateSpans.forEach(visitForDisplayParts); + Debug.assertNode(node2, isTemplateLiteralTypeNode); + visitForDisplayParts(node2.head); + node2.templateSpans.forEach(visitForDisplayParts); break; case 16 /* TemplateHead */: - Debug.assertNode(node, isTemplateHead); - parts.push({ text: getLiteralText2(node) }); + Debug.assertNode(node2, isTemplateHead); + parts.push({ text: getLiteralText2(node2) }); break; case 204 /* TemplateLiteralTypeSpan */: - Debug.assertNode(node, isTemplateLiteralTypeSpan); - visitForDisplayParts(node.type); - visitForDisplayParts(node.literal); + Debug.assertNode(node2, isTemplateLiteralTypeSpan); + visitForDisplayParts(node2.type); + visitForDisplayParts(node2.literal); break; case 17 /* TemplateMiddle */: - Debug.assertNode(node, isTemplateMiddle); - parts.push({ text: getLiteralText2(node) }); + Debug.assertNode(node2, isTemplateMiddle); + parts.push({ text: getLiteralText2(node2) }); break; case 18 /* TemplateTail */: - Debug.assertNode(node, isTemplateTail); - parts.push({ text: getLiteralText2(node) }); + Debug.assertNode(node2, isTemplateTail); + parts.push({ text: getLiteralText2(node2) }); break; case 197 /* ThisType */: - Debug.assertNode(node, isThisTypeNode); + Debug.assertNode(node2, isThisTypeNode); parts.push({ text: "this" }); break; default: - Debug.failBadSyntaxKind(node); + Debug.failBadSyntaxKind(node2); } } function visitParametersAndTypeParameters(signatureDeclaration) { @@ -170845,22 +172072,22 @@ function provideInlayHints(context) { parts.push({ text: ")" }); } function visitDisplayPartList(nodes, separator) { - nodes.forEach((node, index) => { + nodes.forEach((node2, index) => { if (index > 0) { parts.push({ text: separator }); } - visitForDisplayParts(node); + visitForDisplayParts(node2); }); } - function getLiteralText2(node) { - switch (node.kind) { + function getLiteralText2(node2) { + switch (node2.kind) { case 11 /* StringLiteral */: - return quotePreference === 0 /* Single */ ? `'${escapeString(node.text, 39 /* singleQuote */)}'` : `"${escapeString(node.text, 34 /* doubleQuote */)}"`; + return quotePreference === 0 /* Single */ ? `'${escapeString(node2.text, 39 /* singleQuote */)}'` : `"${escapeString(node2.text, 34 /* doubleQuote */)}"`; case 16 /* TemplateHead */: case 17 /* TemplateMiddle */: case 18 /* TemplateTail */: { - const rawText = node.rawText ?? escapeTemplateSubstitution(escapeString(node.text, 96 /* backtick */)); - switch (node.kind) { + const rawText = node2.rawText ?? escapeTemplateSubstitution(escapeString(node2.text, 96 /* backtick */)); + switch (node2.kind) { case 16 /* TemplateHead */: return "`" + rawText + "${"; case 17 /* TemplateMiddle */: @@ -170870,7 +172097,7 @@ function provideInlayHints(context) { } } } - return node.text; + return node2.text; } } function isUndefined(name) { @@ -171016,7 +172243,7 @@ function getJsDocCommentsFromDeclarations(declarations, checker) { return flatten(intersperse(parts, [lineBreakPart()])); } function isIdenticalListOfDisplayParts(parts1, parts2) { - return arraysEqual(parts1, parts2, (p1, p2) => p1.kind === p2.kind && p1.text === p2.text); + return arrayIsEqualTo(parts1, parts2, (p1, p2) => p1.kind === p2.kind && p1.text === p2.text); } function getCommentHavingNodes(declaration) { switch (declaration.kind) { @@ -171379,9 +172606,10 @@ ${content} parsedNodes.push({ sourceFile: sourceFile2, body: bod }); } } - const { body } = parsedNodes.sort( + parsedNodes.sort( (a, b) => a.sourceFile.parseDiagnostics.length - b.sourceFile.parseDiagnostics.length - )[0]; + ); + const { body } = parsedNodes[0]; return body; } function placeNodeGroup(originalFile, changeTracker, changes, focusLocations) { @@ -171530,7 +172758,6 @@ var ts_OrganizeImports_exports = {}; __export(ts_OrganizeImports_exports, { compareImportsOrRequireStatements: () => compareImportsOrRequireStatements, compareModuleSpecifiers: () => compareModuleSpecifiers2, - getDetectionLists: () => getDetectionLists, getImportDeclarationInsertionIndex: () => getImportDeclarationInsertionIndex, getImportSpecifierInsertionIndex: () => getImportSpecifierInsertionIndex, getNamedImportSpecifierComparerWithDetection: () => getNamedImportSpecifierComparerWithDetection, @@ -171586,7 +172813,7 @@ function organizeImports(sourceFile, formatContext, host, program, preferences, } setEmitFlags(oldImportDecls[0], 1024 /* NoLeadingComments */); const oldImportGroups = shouldCombine ? group(oldImportDecls, (importDecl) => getExternalModuleName2(importDecl.moduleSpecifier)) : [oldImportDecls]; - const sortedImportGroups = shouldSort ? stableSort(oldImportGroups, (group1, group2) => compareModuleSpecifiersWorker(group1[0].moduleSpecifier, group2[0].moduleSpecifier, comparer.moduleSpecifierComparer ?? defaultComparer)) : oldImportGroups; + const sortedImportGroups = shouldSort ? toSorted(oldImportGroups, (group1, group2) => compareModuleSpecifiersWorker(group1[0].moduleSpecifier, group2[0].moduleSpecifier, comparer.moduleSpecifierComparer ?? defaultComparer)) : oldImportGroups; const newImportDecls = flatMap(sortedImportGroups, (importGroup) => getExternalModuleName2(importGroup[0].moduleSpecifier) || importGroup[0].moduleSpecifier === void 0 ? coalesce(importGroup) : importGroup); if (newImportDecls.length === 0) { changeTracker.deleteNodes( @@ -171621,7 +172848,7 @@ function organizeImports(sourceFile, formatContext, host, program, preferences, const processImportsOfSameModuleSpecifier = (importGroup) => { if (shouldRemove) importGroup = removeUnusedImports(importGroup, sourceFile, program); if (shouldCombine) importGroup = coalesceImportsWorker(importGroup, detectedModuleCaseComparer, specifierComparer, sourceFile); - if (shouldSort) importGroup = stableSort(importGroup, (s1, s2) => compareImportsOrRequireStatements(s1, s2, detectedModuleCaseComparer)); + if (shouldSort) importGroup = toSorted(importGroup, (s1, s2) => compareImportsOrRequireStatements(s1, s2, detectedModuleCaseComparer)); return importGroup; }; organizeDeclsWorker(oldImportDecls, processImportsOfSameModuleSpecifier); @@ -171797,7 +173024,7 @@ function coalesceImportsWorker(importGroup, comparer, specifierComparer, sourceF const importGroupsByAttributes = groupBy(importGroup, (decl) => { if (decl.attributes) { let attrs = decl.attributes.token + " "; - for (const x of sort(decl.attributes.elements, (x2, y) => compareStringsCaseSensitive(x2.name.text, y.name.text))) { + for (const x of toSorted(decl.attributes.elements, (x2, y) => compareStringsCaseSensitive(x2.name.text, y.name.text))) { attrs += x.name.text + ":"; attrs += isStringLiteralLike(x.value) ? `"${x.value.text}"` : x.value.getText() + " "; } @@ -171822,7 +173049,7 @@ function coalesceImportsWorker(importGroup, comparer, specifierComparer, sourceF ); continue; } - const sortedNamespaceImports = stableSort(namespaceImports, (i1, i2) => comparer(i1.importClause.namedBindings.name.text, i2.importClause.namedBindings.name.text)); + const sortedNamespaceImports = toSorted(namespaceImports, (i1, i2) => comparer(i1.importClause.namedBindings.name.text, i2.importClause.namedBindings.name.text)); for (const namespaceImport of sortedNamespaceImports) { coalescedImports.push( updateImportDeclarationAndClause( @@ -171857,7 +173084,7 @@ function coalesceImportsWorker(importGroup, comparer, specifierComparer, sourceF } newImportSpecifiers.push(...getNewImportSpecifiers(namedImports)); const sortedImportSpecifiers = factory.createNodeArray( - stableSort(newImportSpecifiers, specifierComparer), + toSorted(newImportSpecifiers, specifierComparer), firstNamedImport == null ? void 0 : firstNamedImport.importClause.namedBindings.elements.hasTrailingComma ); const newNamedImports = sortedImportSpecifiers.length === 0 ? newDefaultImport ? void 0 : factory.createNamedImports(emptyArray) : firstNamedImport ? factory.updateNamedImports(firstNamedImport.importClause.namedBindings, sortedImportSpecifiers) : factory.createNamedImports(sortedImportSpecifiers); @@ -171905,7 +173132,7 @@ function coalesceExportsWorker(exportGroup, specifierComparer) { } const newExportSpecifiers = []; newExportSpecifiers.push(...flatMap(exportGroup2, (i) => i.exportClause && isNamedExports(i.exportClause) ? i.exportClause.elements : emptyArray)); - const sortedExportSpecifiers = stableSort(newExportSpecifiers, specifierComparer); + const sortedExportSpecifiers = toSorted(newExportSpecifiers, specifierComparer); const exportDecl = exportGroup2[0]; coalescedExports.push( factory.updateExportDeclaration( @@ -171983,7 +173210,7 @@ function hasModuleDeclarationMatchingSpecifier(sourceFile, moduleSpecifier) { return isString(moduleSpecifierText) && some(sourceFile.moduleAugmentations, (moduleName) => isStringLiteral(moduleName) && moduleName.text === moduleSpecifierText); } function getNewImportSpecifiers(namedImports) { - return flatMap(namedImports, (namedImport) => map(tryGetNamedBindingElements(namedImport), (importSpecifier) => importSpecifier.name && importSpecifier.propertyName && importSpecifier.name.escapedText === importSpecifier.propertyName.escapedText ? factory.updateImportSpecifier( + return flatMap(namedImports, (namedImport) => map(tryGetNamedBindingElements(namedImport), (importSpecifier) => importSpecifier.name && importSpecifier.propertyName && moduleExportNameTextEscaped(importSpecifier.name) === moduleExportNameTextEscaped(importSpecifier.propertyName) ? factory.updateImportSpecifier( importSpecifier, importSpecifier.isTypeOnly, /*propertyName*/ @@ -172193,7 +173420,8 @@ function collectElements(sourceFile, cancellationToken) { const res = []; addNodeOutliningSpans(sourceFile, cancellationToken, res); addRegionOutliningSpans(sourceFile, res); - return res.sort((span1, span2) => span1.textSpan.start - span2.textSpan.start); + res.sort((span1, span2) => span1.textSpan.start - span2.textSpan.start); + return res; } function addNodeOutliningSpans(sourceFile, cancellationToken, out) { let depthRemaining = 40; @@ -172259,11 +173487,11 @@ function addRegionOutliningSpans(sourceFile, out) { for (const currentLineStart of lineStarts) { const lineEnd = sourceFile.getLineEndOfPosition(currentLineStart); const lineText = sourceFile.text.substring(currentLineStart, lineEnd); - const result = isRegionDelimiter(lineText); + const result = parseRegionDelimiter(lineText); if (!result || isInComment(sourceFile, currentLineStart)) { continue; } - if (!result[1]) { + if (result.isStart) { const span = createTextSpanFromBounds(sourceFile.text.indexOf("//", currentLineStart), lineEnd); regions.push(createOutliningSpan( span, @@ -172271,7 +173499,7 @@ function addRegionOutliningSpans(sourceFile, out) { span, /*autoCollapse*/ false, - result[2] || "#region" + result.name || "#region" )); } else { const region = regions.pop(); @@ -172283,14 +173511,18 @@ function addRegionOutliningSpans(sourceFile, out) { } } } -var regionDelimiterRegExp = /^#(end)?region(?:\s+(.*))?(?:\r)?$/; -function isRegionDelimiter(lineText) { +var regionDelimiterRegExp = /^#(end)?region(.*)\r?$/; +function parseRegionDelimiter(lineText) { lineText = lineText.trimStart(); if (!startsWith(lineText, "//")) { return null; } lineText = lineText.slice(2).trim(); - return regionDelimiterRegExp.exec(lineText); + const result = regionDelimiterRegExp.exec(lineText); + if (result) { + return { isStart: !result[1], name: result[2].trim() }; + } + return void 0; } function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) { const comments = getLeadingCommentRanges(sourceFile.text, pos); @@ -172304,7 +173536,7 @@ function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken switch (kind) { case 2 /* SingleLineCommentTrivia */: const commentText = sourceText.slice(pos2, end); - if (isRegionDelimiter(commentText)) { + if (parseRegionDelimiter(commentText)) { combineAndAddMultipleSingleLineComments(); singleLineCommentCount = 0; break; @@ -172836,9 +174068,6 @@ function getArgumentOrParameterListInfo(node, position, sourceFile, checker) { if (!info) return void 0; const { list, argumentIndex } = info; const argumentCount = getArgumentCount(checker, list); - if (argumentIndex !== 0) { - Debug.assertLessThan(argumentIndex, argumentCount); - } const argumentsSpan = getApplicableSpanForArguments(list, sourceFile); return { list, argumentIndex, argumentCount, argumentsSpan }; } @@ -173111,9 +174340,6 @@ function createSignatureHelpItems(candidates, resolvedSignature, { isTypeParamet void 0 ) : emptyArray; const items = map(candidates, (candidateSignature) => getSignatureHelpItem(candidateSignature, callTargetDisplayParts, isTypeParameterList, typeChecker, enclosingDeclaration, sourceFile)); - if (argumentIndex !== 0) { - Debug.assertLessThan(argumentIndex, argumentCount); - } let selectedItemIndex = 0; let itemsSeen = 0; for (let i = 0; i < items.length; i++) { @@ -174927,7 +176153,7 @@ var changesToText; function getTextChangesFromChanges(changes, newLineCharacter, formatContext, validate) { return mapDefined(group(changes, (c) => c.sourceFile.path), (changesInFile) => { const sourceFile = changesInFile[0].sourceFile; - const normalized = stableSort(changesInFile, (a, b) => a.range.pos - b.range.pos || a.range.end - b.range.end); + const normalized = toSorted(changesInFile, (a, b) => a.range.pos - b.range.pos || a.range.end - b.range.end); for (let i = 0; i < normalized.length - 1; i++) { Debug.assert(normalized[i].range.end <= normalized[i + 1].range.pos, "Changes overlap", () => `${JSON.stringify(normalized[i].range)} and ${JSON.stringify(normalized[i + 1].range)}`); } @@ -178175,16 +179401,17 @@ function pasteEditsProvider(targetFile, pastedText, pasteLocations, copiedFrom, function pasteEdits(targetFile, pastedText, pasteLocations, copiedFrom, host, preferences, formatContext, cancellationToken, changes) { let actualPastedText; if (pastedText.length !== pasteLocations.length) { - actualPastedText = pastedText.length === 1 ? pastedText : [pastedText.join("\n")]; + actualPastedText = pastedText.length === 1 ? pastedText[0] : pastedText.join(getNewLineOrDefaultFromHost(formatContext.host, formatContext.options)); } const statements = []; let newText = targetFile.text; for (let i = pasteLocations.length - 1; i >= 0; i--) { const { pos, end } = pasteLocations[i]; - newText = actualPastedText ? newText.slice(0, pos) + actualPastedText[0] + newText.slice(end) : newText.slice(0, pos) + pastedText[i] + newText.slice(end); + newText = actualPastedText ? newText.slice(0, pos) + actualPastedText + newText.slice(end) : newText.slice(0, pos) + pastedText[i] + newText.slice(end); } + let importAdder; Debug.checkDefined(host.runWithTemporaryFileUpdate).call(host, targetFile.fileName, newText, (updatedProgram, originalProgram, updatedFile) => { - const importAdder = ts_codefix_exports.createImportAdder(updatedFile, updatedProgram, preferences, host); + importAdder = ts_codefix_exports.createImportAdder(updatedFile, updatedProgram, preferences, host); if (copiedFrom == null ? void 0 : copiedFrom.range) { Debug.assert(copiedFrom.range.length === pastedText.length); copiedFrom.range.forEach((copy) => { @@ -178197,7 +179424,7 @@ function pasteEdits(targetFile, pastedText, pasteLocations, copiedFrom, host, pr } statements.push(...statementsInSourceFile.slice(startNodeIndex, endNodeIndex === -1 ? statementsInSourceFile.length : endNodeIndex + 1)); }); - const usage = getUsageInfo(copiedFrom.file, statements, originalProgram.getTypeChecker(), getExistingLocals(updatedFile, statements, originalProgram.getTypeChecker())); + const usage = getUsageInfo(copiedFrom.file, statements, originalProgram.getTypeChecker(), getExistingLocals(updatedFile, statements, originalProgram.getTypeChecker()), { pos: copiedFrom.range[0].pos, end: copiedFrom.range[copiedFrom.range.length - 1].end }); Debug.assertIsDefined(originalProgram); const useEsModuleSyntax = !fileShouldUseJavaScriptRequire(targetFile.fileName, originalProgram, host, !!copiedFrom.file.commonJsModuleIndicator); addExportsInOldFile(copiedFrom.file, usage.targetFileImportsFromOldFile, changes, useEsModuleSyntax); @@ -178211,31 +179438,49 @@ function pasteEdits(targetFile, pastedText, pasteLocations, copiedFrom, host, pr preferences, formatContext }; - forEachChild(updatedFile, function cb(node) { - if (isIdentifier(node) && !(originalProgram == null ? void 0 : originalProgram.getTypeChecker().resolveName( - node.text, - node, - -1 /* All */, - /*excludeGlobals*/ - false - ))) { - importAdder.addImportForUnresolvedIdentifier( - context, + let offset = 0; + pasteLocations.forEach((location, i) => { + const oldTextLength = location.end - location.pos; + const textToBePasted = actualPastedText ?? pastedText[i]; + const startPos = location.pos + offset; + const endPos = startPos + textToBePasted.length; + const range = { pos: startPos, end: endPos }; + offset += textToBePasted.length - oldTextLength; + const enclosingNode = findAncestor( + getTokenAtPosition(context.sourceFile, range.pos), + (ancestorNode) => rangeContainsRange(ancestorNode, range) + ); + if (!enclosingNode) return; + forEachChild(enclosingNode, function importUnresolvedIdentifiers(node) { + const isImportCandidate = isIdentifier(node) && rangeContainsPosition(range, node.getStart(updatedFile)) && !(updatedProgram == null ? void 0 : updatedProgram.getTypeChecker().resolveName( + node.text, node, - /*useAutoImportProvider*/ - true - ); - } - node.forEachChild(cb); + -1 /* All */, + /*excludeGlobals*/ + false + )); + if (isImportCandidate) { + return importAdder.addImportForUnresolvedIdentifier( + context, + node, + /*useAutoImportProvider*/ + true + ); + } + node.forEachChild(importUnresolvedIdentifiers); + }); }); } importAdder.writeFixes(changes, getQuotePreference(copiedFrom ? copiedFrom.file : targetFile, preferences)); }); + if (!importAdder.hasFixes()) { + return; + } pasteLocations.forEach((paste, i) => { changes.replaceRangeWithText( targetFile, { pos: paste.pos, end: paste.end }, - actualPastedText ? actualPastedText[0] : pastedText[i] + actualPastedText ?? pastedText[i] ); }); } @@ -178293,7 +179538,6 @@ __export(ts_exports2, { GoToDefinition: () => ts_GoToDefinition_exports, HighlightSpanKind: () => HighlightSpanKind, IdentifierNameMap: () => IdentifierNameMap, - IdentifierNameMultiMap: () => IdentifierNameMultiMap, ImportKind: () => ImportKind, ImportsNotUsedAsValues: () => ImportsNotUsedAsValues, IndentStyle: () => IndentStyle, @@ -178304,6 +179548,7 @@ __export(ts_exports2, { InlayHintKind: () => InlayHintKind2, InlayHints: () => ts_InlayHints_exports, InternalEmitFlags: () => InternalEmitFlags, + InternalNodeBuilderFlags: () => InternalNodeBuilderFlags, InternalSymbolName: () => InternalSymbolName, IntersectionFlags: () => IntersectionFlags, InvalidatedProjectKind: () => InvalidatedProjectKind, @@ -178350,6 +179595,7 @@ __export(ts_exports2, { PollingInterval: () => PollingInterval, PollingWatchKind: () => PollingWatchKind, PragmaKindFlags: () => PragmaKindFlags, + PredicateSemantics: () => PredicateSemantics, PrivateIdentifierKind: () => PrivateIdentifierKind, ProcessLevel: () => ProcessLevel, ProgramUpdateLevel: () => ProgramUpdateLevel, @@ -178380,7 +179626,6 @@ __export(ts_exports2, { SymbolFlags: () => SymbolFlags, SymbolFormatFlags: () => SymbolFormatFlags, SyntaxKind: () => SyntaxKind, - SyntheticSymbolKind: () => SyntheticSymbolKind, Ternary: () => Ternary, ThrottledCancellationToken: () => ThrottledCancellationToken, TokenClass: () => TokenClass, @@ -178403,7 +179648,6 @@ __export(ts_exports2, { WatchLogLevel: () => WatchLogLevel, WatchType: () => WatchType, accessPrivateIdentifier: () => accessPrivateIdentifier, - addDisposableResourceHelper: () => addDisposableResourceHelper, addEmitFlags: () => addEmitFlags, addEmitHelper: () => addEmitHelper, addEmitHelpers: () => addEmitHelpers, @@ -178426,23 +179670,15 @@ __export(ts_exports2, { arrayFrom: () => arrayFrom, arrayIsEqualTo: () => arrayIsEqualTo, arrayIsHomogeneous: () => arrayIsHomogeneous, - arrayIsSorted: () => arrayIsSorted, arrayOf: () => arrayOf, arrayReverseIterator: () => arrayReverseIterator, arrayToMap: () => arrayToMap, arrayToMultiMap: () => arrayToMultiMap, arrayToNumericMap: () => arrayToNumericMap, - arraysEqual: () => arraysEqual, assertType: () => assertType, assign: () => assign, - assignHelper: () => assignHelper, - asyncDelegator: () => asyncDelegator, - asyncGeneratorHelper: () => asyncGeneratorHelper, asyncSuperHelper: () => asyncSuperHelper, - asyncValues: () => asyncValues, attachFileToDiagnostics: () => attachFileToDiagnostics, - awaitHelper: () => awaitHelper, - awaiterHelper: () => awaiterHelper, base64decode: () => base64decode, base64encode: () => base64encode, binarySearch: () => binarySearch, @@ -178455,6 +179691,7 @@ __export(ts_exports2, { buildOverload: () => buildOverload, bundlerModuleNameResolver: () => bundlerModuleNameResolver, canBeConvertedToAsync: () => canBeConvertedToAsync, + canEmitTsBuildInfo: () => canEmitTsBuildInfo, canHaveDecorators: () => canHaveDecorators, canHaveExportModifier: () => canHaveExportModifier, canHaveFlowNode: () => canHaveFlowNode, @@ -178465,8 +179702,9 @@ __export(ts_exports2, { canHaveJSDoc: () => canHaveJSDoc, canHaveLocals: () => canHaveLocals, canHaveModifiers: () => canHaveModifiers, + canHaveModuleSpecifier: () => canHaveModuleSpecifier, canHaveSymbol: () => canHaveSymbol, - canIncludeBindAndCheckDiagnsotics: () => canIncludeBindAndCheckDiagnsotics, + canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, canProduceDiagnostics: () => canProduceDiagnostics, canUsePropertyAccess: () => canUsePropertyAccess, @@ -178483,16 +179721,13 @@ __export(ts_exports2, { changeFullExtension: () => changeFullExtension, changesAffectModuleResolution: () => changesAffectModuleResolution, changesAffectingProgramStructure: () => changesAffectingProgramStructure, - characterToRegularExpressionFlag: () => characterToRegularExpressionFlag, + characterCodeToRegularExpressionFlag: () => characterCodeToRegularExpressionFlag, childIsDecorated: () => childIsDecorated, classElementOrClassElementParameterIsDecorated: () => classElementOrClassElementParameterIsDecorated, classHasClassThisAssignment: () => classHasClassThisAssignment, classHasDeclaredOrExplicitlyAssignedName: () => classHasDeclaredOrExplicitlyAssignedName, classHasExplicitlyAssignedName: () => classHasExplicitlyAssignedName, classOrConstructorParameterIsDecorated: () => classOrConstructorParameterIsDecorated, - classPrivateFieldGetHelper: () => classPrivateFieldGetHelper, - classPrivateFieldInHelper: () => classPrivateFieldInHelper, - classPrivateFieldSetHelper: () => classPrivateFieldSetHelper, classicNameResolver: () => classicNameResolver, classifier: () => ts_classifier_exports, cleanExtendedConfigCache: () => cleanExtendedConfigCache, @@ -178500,7 +179735,6 @@ __export(ts_exports2, { clearMap: () => clearMap, clearSharedExtendedConfigFileWatcher: () => clearSharedExtendedConfigFileWatcher, climbPastPropertyAccess: () => climbPastPropertyAccess, - climbPastPropertyOrElementAccess: () => climbPastPropertyOrElementAccess, clone: () => clone, cloneCompilerOptions: () => cloneCompilerOptions, closeFileWatcher: () => closeFileWatcher, @@ -178513,12 +179747,10 @@ __export(ts_exports2, { commandLineOptionOfCustomType: () => commandLineOptionOfCustomType, commentPragmas: () => commentPragmas, commonOptionsWithBuild: () => commonOptionsWithBuild, - commonPackageFolders: () => commonPackageFolders, compact: () => compact, compareBooleans: () => compareBooleans, compareDataObjects: () => compareDataObjects, compareDiagnostics: () => compareDiagnostics, - compareDiagnosticsSkipRelatedInformation: () => compareDiagnosticsSkipRelatedInformation, compareEmitHelpers: () => compareEmitHelpers, compareNumberOfDirectorySeparators: () => compareNumberOfDirectorySeparators, comparePaths: () => comparePaths, @@ -178532,26 +179764,21 @@ __export(ts_exports2, { compareStringsCaseSensitiveUI: () => compareStringsCaseSensitiveUI, compareTextSpans: () => compareTextSpans, compareValues: () => compareValues, - compileOnSaveCommandLineOption: () => compileOnSaveCommandLineOption, compilerOptionsAffectDeclarationPath: () => compilerOptionsAffectDeclarationPath, compilerOptionsAffectEmit: () => compilerOptionsAffectEmit, compilerOptionsAffectSemanticDiagnostics: () => compilerOptionsAffectSemanticDiagnostics, compilerOptionsDidYouMeanDiagnostics: () => compilerOptionsDidYouMeanDiagnostics, compilerOptionsIndicateEsModules: () => compilerOptionsIndicateEsModules, - compose: () => compose, computeCommonSourceDirectoryOfFilenames: () => computeCommonSourceDirectoryOfFilenames, computeLineAndCharacterOfPosition: () => computeLineAndCharacterOfPosition, computeLineOfPosition: () => computeLineOfPosition, computeLineStarts: () => computeLineStarts, computePositionOfLineAndCharacter: () => computePositionOfLineAndCharacter, - computeSignature: () => computeSignature, computeSignatureWithDiagnostics: () => computeSignatureWithDiagnostics, computeSuggestionDiagnostics: () => computeSuggestionDiagnostics, computedOptions: () => computedOptions, concatenate: () => concatenate, concatenateDiagnosticMessageChains: () => concatenateDiagnosticMessageChains, - configDirTemplateSubstitutionOptions: () => configDirTemplateSubstitutionOptions, - configDirTemplateSubstitutionWatchOptions: () => configDirTemplateSubstitutionWatchOptions, consumesNodeCoreModules: () => consumesNodeCoreModules, contains: () => contains, containsIgnoredPath: () => containsIgnoredPath, @@ -178582,16 +179809,11 @@ __export(ts_exports2, { createAccessorPropertySetRedirector: () => createAccessorPropertySetRedirector, createBaseNodeFactory: () => createBaseNodeFactory, createBinaryExpressionTrampoline: () => createBinaryExpressionTrampoline, - createBindingHelper: () => createBindingHelper, - createBuildInfo: () => createBuildInfo, createBuilderProgram: () => createBuilderProgram, - createBuilderProgramUsingProgramBuildInfo: () => createBuilderProgramUsingProgramBuildInfo, + createBuilderProgramUsingIncrementalBuildInfo: () => createBuilderProgramUsingIncrementalBuildInfo, createBuilderStatusReporter: () => createBuilderStatusReporter, - createCacheWithRedirects: () => createCacheWithRedirects, createCacheableExportInfoMap: () => createCacheableExportInfoMap, createCachedDirectoryStructureHost: () => createCachedDirectoryStructureHost, - createClassNamedEvaluationHelperBlock: () => createClassNamedEvaluationHelperBlock, - createClassThisAssignmentBlock: () => createClassThisAssignmentBlock, createClassifier: () => createClassifier, createCommentDirectivesMap: () => createCommentDirectivesMap, createCompilerDiagnostic: () => createCompilerDiagnostic, @@ -178643,6 +179865,7 @@ __export(ts_exports2, { createMemberAccessForPropertyName: () => createMemberAccessForPropertyName, createModeAwareCache: () => createModeAwareCache, createModeAwareCacheKey: () => createModeAwareCacheKey, + createModeMismatchDetails: () => createModeMismatchDetails, createModuleNotFoundChain: () => createModuleNotFoundChain, createModuleResolutionCache: () => createModuleResolutionCache, createModuleResolutionLoader: () => createModuleResolutionLoader, @@ -178713,9 +179936,7 @@ __export(ts_exports2, { declarationNameToString: () => declarationNameToString, decodeMappings: () => decodeMappings, decodedTextSpanIntersectsWith: () => decodedTextSpanIntersectsWith, - decorateHelper: () => decorateHelper, deduplicate: () => deduplicate, - defaultIncludeSpec: () => defaultIncludeSpec, defaultInitCompilerOptions: () => defaultInitCompilerOptions, defaultMaximumTruncationLength: () => defaultMaximumTruncationLength, diagnosticCategoryName: () => diagnosticCategoryName, @@ -178726,27 +179947,22 @@ __export(ts_exports2, { displayPart: () => displayPart, displayPartsToString: () => displayPartsToString, disposeEmitNodes: () => disposeEmitNodes, - disposeResourcesHelper: () => disposeResourcesHelper, documentSpansEqual: () => documentSpansEqual, dumpTracingLegend: () => dumpTracingLegend, elementAt: () => elementAt, elideNodes: () => elideNodes, - emitComments: () => emitComments, emitDetachedComments: () => emitDetachedComments, emitFiles: () => emitFiles, emitFilesAndReportErrors: () => emitFilesAndReportErrors, emitFilesAndReportErrorsAndGetExitStatus: () => emitFilesAndReportErrorsAndGetExitStatus, emitModuleKindIsNonNodeESM: () => emitModuleKindIsNonNodeESM, emitNewLineBeforeLeadingCommentOfPosition: () => emitNewLineBeforeLeadingCommentOfPosition, - emitNewLineBeforeLeadingComments: () => emitNewLineBeforeLeadingComments, - emitNewLineBeforeLeadingCommentsOfPosition: () => emitNewLineBeforeLeadingCommentsOfPosition, emitResolverSkipsTypeChecking: () => emitResolverSkipsTypeChecking, emitSkippedWithNoDiagnostics: () => emitSkippedWithNoDiagnostics, emptyArray: () => emptyArray, emptyFileSystemEntries: () => emptyFileSystemEntries, emptyMap: () => emptyMap, emptyOptions: () => emptyOptions, - emptySet: () => emptySet, endsWith: () => endsWith, ensurePathIsNonModuleName: () => ensurePathIsNonModuleName, ensureScriptKind: () => ensureScriptKind, @@ -178757,7 +179973,6 @@ __export(ts_exports2, { equateStringsCaseInsensitive: () => equateStringsCaseInsensitive, equateStringsCaseSensitive: () => equateStringsCaseSensitive, equateValues: () => equateValues, - esDecorateHelper: () => esDecorateHelper, escapeJsxAttributeString: () => escapeJsxAttributeString, escapeLeadingUnderscores: () => escapeLeadingUnderscores, escapeNonAsciiString: () => escapeNonAsciiString, @@ -178771,15 +179986,14 @@ __export(ts_exports2, { explainFiles: () => explainFiles, explainIfFileIsRedirectAndImpliedFormat: () => explainIfFileIsRedirectAndImpliedFormat, exportAssignmentIsAlias: () => exportAssignmentIsAlias, - exportStarHelper: () => exportStarHelper, expressionResultIsUnused: () => expressionResultIsUnused, extend: () => extend, - extendsHelper: () => extendsHelper, extensionFromPath: () => extensionFromPath, extensionIsTS: () => extensionIsTS, extensionsNotSupportingExtensionlessResolution: () => extensionsNotSupportingExtensionlessResolution, externalHelpersModuleNameText: () => externalHelpersModuleNameText, factory: () => factory, + fileContainsPackageImport: () => fileContainsPackageImport, fileExtensionIs: () => fileExtensionIs, fileExtensionIsOneOf: () => fileExtensionIsOneOf, fileIncludeReasonToDiagnostics: () => fileIncludeReasonToDiagnostics, @@ -178801,7 +180015,6 @@ __export(ts_exports2, { findLast: () => findLast, findLastIndex: () => findLastIndex, findListItemInfo: () => findListItemInfo, - findMap: () => findMap, findModifier: () => findModifier, findNextToken: () => findNextToken, findPackageJson: () => findPackageJson, @@ -178849,7 +180062,6 @@ __export(ts_exports2, { forEachTsConfigPropArray: () => forEachTsConfigPropArray, forEachUnique: () => forEachUnique, forEachYieldExpression: () => forEachYieldExpression, - forSomeAncestorDirectory: () => forSomeAncestorDirectory, formatColorAndReset: () => formatColorAndReset, formatDiagnostic: () => formatDiagnostic, formatDiagnostics: () => formatDiagnostics, @@ -178860,11 +180072,8 @@ __export(ts_exports2, { formatMessage: () => formatMessage, formatStringFromArgs: () => formatStringFromArgs, formatting: () => ts_formatting_exports, - fullTripleSlashAMDReferencePathRegEx: () => fullTripleSlashAMDReferencePathRegEx, - fullTripleSlashReferencePathRegEx: () => fullTripleSlashReferencePathRegEx, generateDjb2Hash: () => generateDjb2Hash, generateTSConfig: () => generateTSConfig, - generatorHelper: () => generatorHelper, getAdjustedReferenceLocation: () => getAdjustedReferenceLocation, getAdjustedRenameLocation: () => getAdjustedRenameLocation, getAliasDeclarationFromName: () => getAliasDeclarationFromName, @@ -178883,7 +180092,6 @@ __export(ts_exports2, { getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, getAssignedExpandoInitializer: () => getAssignedExpandoInitializer, getAssignedName: () => getAssignedName, - getAssignedNameOfIdentifier: () => getAssignedNameOfIdentifier, getAssignmentDeclarationKind: () => getAssignmentDeclarationKind, getAssignmentDeclarationPropertyAccessKind: () => getAssignmentDeclarationPropertyAccessKind, getAssignmentTargetKind: () => getAssignmentTargetKind, @@ -178924,7 +180132,6 @@ __export(ts_exports2, { getContainingObjectLiteralElement: () => getContainingObjectLiteralElement, getContextualTypeFromParent: () => getContextualTypeFromParent, getContextualTypeFromParentOrAncestorTypeNode: () => getContextualTypeFromParentOrAncestorTypeNode, - getCurrentTime: () => getCurrentTime, getDeclarationDiagnostics: () => getDeclarationDiagnostics, getDeclarationEmitExtensionForPath: () => getDeclarationEmitExtensionForPath, getDeclarationEmitOutputFilePath: () => getDeclarationEmitOutputFilePath, @@ -178942,6 +180149,7 @@ __export(ts_exports2, { getDefaultLibFilePath: () => getDefaultLibFilePath, getDefaultLikeExportInfo: () => getDefaultLikeExportInfo, getDefaultLikeExportNameFromDeclaration: () => getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker: () => getDefaultResolutionModeForFileWorker, getDiagnosticText: () => getDiagnosticText, getDiagnosticsWithinSpan: () => getDiagnosticsWithinSpan, getDirectoryPath: () => getDirectoryPath, @@ -178972,6 +180180,7 @@ __export(ts_exports2, { getEmitFlags: () => getEmitFlags, getEmitHelpers: () => getEmitHelpers, getEmitModuleDetectionKind: () => getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker: () => getEmitModuleFormatOfFileWorker, getEmitModuleKind: () => getEmitModuleKind, getEmitModuleResolutionKind: () => getEmitModuleResolutionKind, getEmitScriptTarget: () => getEmitScriptTarget, @@ -179022,11 +180231,11 @@ __export(ts_exports2, { getIdentifierGeneratedImportReference: () => getIdentifierGeneratedImportReference, getIdentifierTypeArguments: () => getIdentifierTypeArguments, getImmediatelyInvokedFunctionExpression: () => getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker: () => getImpliedNodeFormatForEmitWorker, getImpliedNodeFormatForFile: () => getImpliedNodeFormatForFile, getImpliedNodeFormatForFileWorker: () => getImpliedNodeFormatForFileWorker, getImportNeedsImportDefaultHelper: () => getImportNeedsImportDefaultHelper, getImportNeedsImportStarHelper: () => getImportNeedsImportStarHelper, - getIndentSize: () => getIndentSize, getIndentString: () => getIndentString, getInferredLibraryNameResolveFrom: () => getInferredLibraryNameResolveFrom, getInitializedVariables: () => getInitializedVariables, @@ -179035,6 +180244,7 @@ __export(ts_exports2, { getInterfaceBaseTypeNodes: () => getInterfaceBaseTypeNodes, getInternalEmitFlags: () => getInternalEmitFlags, getInvokedExpression: () => getInvokedExpression, + getIsFileExcluded: () => getIsFileExcluded, getIsolatedModules: () => getIsolatedModules, getJSDocAugmentsTag: () => getJSDocAugmentsTag, getJSDocClassTag: () => getJSDocClassTag, @@ -179063,7 +180273,6 @@ __export(ts_exports2, { getJSDocSatisfiesExpressionType: () => getJSDocSatisfiesExpressionType, getJSDocSatisfiesTag: () => getJSDocSatisfiesTag, getJSDocTags: () => getJSDocTags, - getJSDocTagsNoCache: () => getJSDocTagsNoCache, getJSDocTemplateTag: () => getJSDocTemplateTag, getJSDocThisTag: () => getJSDocThisTag, getJSDocType: () => getJSDocType, @@ -179087,7 +180296,6 @@ __export(ts_exports2, { getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, getLineInfo: () => getLineInfo, getLineOfLocalPosition: () => getLineOfLocalPosition, - getLineOfLocalPositionFromLineMap: () => getLineOfLocalPositionFromLineMap, getLineStartPositionForPosition: () => getLineStartPositionForPosition, getLineStarts: () => getLineStarts, getLinesBetweenPositionAndNextNonWhitespaceCharacter: () => getLinesBetweenPositionAndNextNonWhitespaceCharacter, @@ -179129,7 +180337,6 @@ __export(ts_exports2, { getNameOfScriptTarget: () => getNameOfScriptTarget, getNameOrArgument: () => getNameOrArgument, getNameTable: () => getNameTable, - getNamesForExportedSymbol: () => getNamesForExportedSymbol, getNamespaceDeclarationNode: () => getNamespaceDeclarationNode, getNewLineCharacter: () => getNewLineCharacter, getNewLineKind: () => getNewLineKind, @@ -179146,49 +180353,43 @@ __export(ts_exports2, { getNonAssignmentOperatorForCompoundAssignment: () => getNonAssignmentOperatorForCompoundAssignment, getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents: () => getNormalizedPathComponents, getObjectFlags: () => getObjectFlags, - getOperator: () => getOperator, getOperatorAssociativity: () => getOperatorAssociativity, getOperatorPrecedence: () => getOperatorPrecedence, getOptionFromName: () => getOptionFromName, getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, getOptionsNameMap: () => getOptionsNameMap, getOrCreateEmitNode: () => getOrCreateEmitNode, - getOrCreateExternalHelpersModuleNameIfNeeded: () => getOrCreateExternalHelpersModuleNameIfNeeded, getOrUpdate: () => getOrUpdate, getOriginalNode: () => getOriginalNode, getOriginalNodeId: () => getOriginalNodeId, - getOriginalSourceFile: () => getOriginalSourceFile, getOutputDeclarationFileName: () => getOutputDeclarationFileName, getOutputDeclarationFileNameWorker: () => getOutputDeclarationFileNameWorker, getOutputExtension: () => getOutputExtension, getOutputFileNames: () => getOutputFileNames, getOutputJSFileNameWorker: () => getOutputJSFileNameWorker, getOutputPathsFor: () => getOutputPathsFor, - getOutputPathsForBundle: () => getOutputPathsForBundle, getOwnEmitOutputFilePath: () => getOwnEmitOutputFilePath, getOwnKeys: () => getOwnKeys, getOwnValues: () => getOwnValues, - getPackageJsonInfo: () => getPackageJsonInfo, getPackageJsonTypesVersionsPaths: () => getPackageJsonTypesVersionsPaths, - getPackageJsonsVisibleToFile: () => getPackageJsonsVisibleToFile, getPackageNameFromTypesPackageName: () => getPackageNameFromTypesPackageName, getPackageScopeForPath: () => getPackageScopeForPath, getParameterSymbolFromJSDoc: () => getParameterSymbolFromJSDoc, - getParameterTypeNode: () => getParameterTypeNode, getParentNodeInSpan: () => getParentNodeInSpan, getParseTreeNode: () => getParseTreeNode, getParsedCommandLineOfConfigFile: () => getParsedCommandLineOfConfigFile, getPathComponents: () => getPathComponents, - getPathComponentsRelativeTo: () => getPathComponentsRelativeTo, getPathFromPathComponents: () => getPathFromPathComponents, getPathUpdater: () => getPathUpdater, getPathsBasePath: () => getPathsBasePath, getPatternFromSpec: () => getPatternFromSpec, - getPendingEmitKind: () => getPendingEmitKind, + getPendingEmitKindWithSeen: () => getPendingEmitKindWithSeen, getPositionOfLineAndCharacter: () => getPositionOfLineAndCharacter, getPossibleGenericSignatures: () => getPossibleGenericSignatures, getPossibleOriginalInputExtensionForExtension: () => getPossibleOriginalInputExtensionForExtension, @@ -179201,7 +180402,6 @@ __export(ts_exports2, { getPropertyArrayElementValue: () => getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, - getPropertyNameForUniqueESSymbol: () => getPropertyNameForUniqueESSymbol, getPropertyNameFromType: () => getPropertyNameFromType, getPropertyNameOfBindingOrAssignmentElement: () => getPropertyNameOfBindingOrAssignmentElement, getPropertySymbolFromBindingElement: () => getPropertySymbolFromBindingElement, @@ -179225,13 +180425,14 @@ __export(ts_exports2, { getResolvePackageJsonExports: () => getResolvePackageJsonExports, getResolvePackageJsonImports: () => getResolvePackageJsonImports, getResolvedExternalModuleName: () => getResolvedExternalModuleName, + getResolvedModuleFromResolution: () => getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution: () => getResolvedTypeReferenceDirectiveFromResolution, getRestIndicatorOfBindingOrAssignmentElement: () => getRestIndicatorOfBindingOrAssignmentElement, getRestParameterElementType: () => getRestParameterElementType, getRightMostAssignedExpression: () => getRightMostAssignedExpression, getRootDeclaration: () => getRootDeclaration, getRootDirectoryOfResolutionCache: () => getRootDirectoryOfResolutionCache, getRootLength: () => getRootLength, - getRootPathSplitLength: () => getRootPathSplitLength, getScriptKind: () => getScriptKind, getScriptKindFromFileName: () => getScriptKindFromFileName, getScriptTargetFeatures: () => getScriptTargetFeatures, @@ -179243,14 +180444,12 @@ __export(ts_exports2, { getSetAccessorValueParameter: () => getSetAccessorValueParameter, getSetExternalModuleIndicator: () => getSetExternalModuleIndicator, getShebang: () => getShebang, - getSingleInitializerOfVariableStatementOrPropertyDeclaration: () => getSingleInitializerOfVariableStatementOrPropertyDeclaration, getSingleVariableOfVariableStatement: () => getSingleVariableOfVariableStatement, getSnapshotText: () => getSnapshotText, getSnippetElement: () => getSnippetElement, getSourceFileOfModule: () => getSourceFileOfModule, getSourceFileOfNode: () => getSourceFileOfNode, getSourceFilePathInNewDir: () => getSourceFilePathInNewDir, - getSourceFilePathInNewDirWorker: () => getSourceFilePathInNewDirWorker, getSourceFileVersionAsHashFromText: () => getSourceFileVersionAsHashFromText, getSourceFilesToEmit: () => getSourceFilesToEmit, getSourceMapRange: () => getSourceMapRange, @@ -179273,7 +180472,6 @@ __export(ts_exports2, { getSwitchedType: () => getSwitchedType, getSymbolId: () => getSymbolId, getSymbolNameForPrivateIdentifier: () => getSymbolNameForPrivateIdentifier, - getSymbolParentOrFail: () => getSymbolParentOrFail, getSymbolTarget: () => getSymbolTarget, getSyntacticClassifications: () => getSyntacticClassifications, getSyntacticModifierFlags: () => getSyntacticModifierFlags, @@ -179304,7 +180502,6 @@ __export(ts_exports2, { getTouchingToken: () => getTouchingToken, getTrailingCommentRanges: () => getTrailingCommentRanges, getTrailingSemicolonDeferringWriter: () => getTrailingSemicolonDeferringWriter, - getTransformFlagsSubtreeExclusions: () => getTransformFlagsSubtreeExclusions, getTransformers: () => getTransformers, getTsBuildInfoEmitOutputFilePath: () => getTsBuildInfoEmitOutputFilePath, getTsConfigObjectLiteralExpression: () => getTsConfigObjectLiteralExpression, @@ -179332,7 +180529,6 @@ __export(ts_exports2, { hasAccessorModifier: () => hasAccessorModifier, hasAmbientModifier: () => hasAmbientModifier, hasChangesInResolutions: () => hasChangesInResolutions, - hasChildOfKind: () => hasChildOfKind, hasContextSensitiveParameters: () => hasContextSensitiveParameters, hasDecorators: () => hasDecorators, hasDocComment: () => hasDocComment, @@ -179341,6 +180537,7 @@ __export(ts_exports2, { hasEffectiveModifiers: () => hasEffectiveModifiers, hasEffectiveReadonlyModifier: () => hasEffectiveReadonlyModifier, hasExtension: () => hasExtension, + hasImplementationTSFileExtension: () => hasImplementationTSFileExtension, hasIndexSignature: () => hasIndexSignature, hasInferredType: () => hasInferredType, hasInitializer: () => hasInitializer, @@ -179368,7 +180565,6 @@ __export(ts_exports2, { hasType: () => hasType, hasTypeArguments: () => hasTypeArguments, hasZeroOrOneAsteriskCharacter: () => hasZeroOrOneAsteriskCharacter, - helperString: () => helperString, hostGetCanonicalFileName: () => hostGetCanonicalFileName, hostUsesCaseSensitiveFileNames: () => hostUsesCaseSensitiveFileNames, idText: () => idText, @@ -179378,9 +180574,8 @@ __export(ts_exports2, { identitySourceMapConsumer: () => identitySourceMapConsumer, ignoreSourceNewlines: () => ignoreSourceNewlines, ignoredPaths: () => ignoredPaths, - importDefaultHelper: () => importDefaultHelper, importFromModuleSpecifier: () => importFromModuleSpecifier, - importStarHelper: () => importStarHelper, + importSyntaxAffectsModuleResolution: () => importSyntaxAffectsModuleResolution, indexOfAnyCharCode: () => indexOfAnyCharCode, indexOfNode: () => indexOfNode, indicesOf: () => indicesOf, @@ -179388,7 +180583,6 @@ __export(ts_exports2, { injectClassNamedEvaluationHelperBlockIfMissing: () => injectClassNamedEvaluationHelperBlockIfMissing, injectClassThisAssignmentIfMissing: () => injectClassThisAssignmentIfMissing, insertImports: () => insertImports, - insertLeadingStatement: () => insertLeadingStatement, insertSorted: () => insertSorted, insertStatementAfterCustomPrologue: () => insertStatementAfterCustomPrologue, insertStatementAfterStandardPrologue: () => insertStatementAfterStandardPrologue, @@ -179404,11 +180598,9 @@ __export(ts_exports2, { isAccessibilityModifier: () => isAccessibilityModifier, isAccessor: () => isAccessor, isAccessorModifier: () => isAccessorModifier, - isAliasSymbolDeclaration: () => isAliasSymbolDeclaration, isAliasableExpression: () => isAliasableExpression, isAmbientModule: () => isAmbientModule, isAmbientPropertyDeclaration: () => isAmbientPropertyDeclaration, - isAnonymousFunctionDefinition: () => isAnonymousFunctionDefinition, isAnyDirectorySeparator: () => isAnyDirectorySeparator, isAnyImportOrBareOrAccessedRequire: () => isAnyImportOrBareOrAccessedRequire, isAnyImportOrReExport: () => isAnyImportOrReExport, @@ -179444,6 +180636,7 @@ __export(ts_exports2, { isAwaitKeyword: () => isAwaitKeyword, isBigIntLiteral: () => isBigIntLiteral, isBinaryExpression: () => isBinaryExpression, + isBinaryLogicalOperator: () => isBinaryLogicalOperator, isBinaryOperatorToken: () => isBinaryOperatorToken, isBindableObjectDefinePropertyCall: () => isBindableObjectDefinePropertyCall, isBindableStaticAccessExpression: () => isBindableStaticAccessExpression, @@ -179465,7 +180658,7 @@ __export(ts_exports2, { isBreakStatement: () => isBreakStatement, isBuild: () => isBuild, isBuildInfoFile: () => isBuildInfoFile, - isBuilderProgram: () => isBuilderProgram2, + isBuilderProgram: () => isBuilderProgram, isBundle: () => isBundle, isCallChain: () => isCallChain, isCallExpression: () => isCallExpression, @@ -179484,7 +180677,6 @@ __export(ts_exports2, { isCatchClauseVariableDeclaration: () => isCatchClauseVariableDeclaration, isCatchClauseVariableDeclarationOrBindingElement: () => isCatchClauseVariableDeclarationOrBindingElement, isCheckJsEnabledForFile: () => isCheckJsEnabledForFile, - isChildOfNodeWithKind: () => isChildOfNodeWithKind, isCircularBuildOrder: () => isCircularBuildOrder, isClassDeclaration: () => isClassDeclaration, isClassElement: () => isClassElement, @@ -179496,7 +180688,6 @@ __export(ts_exports2, { isClassOrTypeElement: () => isClassOrTypeElement, isClassStaticBlockDeclaration: () => isClassStaticBlockDeclaration, isClassThisAssignmentBlock: () => isClassThisAssignmentBlock, - isCollapsedRange: () => isCollapsedRange, isColonToken: () => isColonToken, isCommaExpression: () => isCommaExpression, isCommaListExpression: () => isCommaListExpression, @@ -179539,16 +180730,13 @@ __export(ts_exports2, { isDeleteTarget: () => isDeleteTarget, isDeprecatedDeclaration: () => isDeprecatedDeclaration, isDestructuringAssignment: () => isDestructuringAssignment, - isDiagnosticWithLocation: () => isDiagnosticWithLocation, isDiskPathRoot: () => isDiskPathRoot, isDoStatement: () => isDoStatement, isDocumentRegistryEntry: () => isDocumentRegistryEntry, isDotDotDotToken: () => isDotDotDotToken, isDottedName: () => isDottedName, isDynamicName: () => isDynamicName, - isESSymbolIdentifier: () => isESSymbolIdentifier, isEffectiveExternalModule: () => isEffectiveExternalModule, - isEffectiveModuleDeclaration: () => isEffectiveModuleDeclaration, isEffectiveStrictModeSourceFile: () => isEffectiveStrictModeSourceFile, isElementAccessChain: () => isElementAccessChain, isElementAccessExpression: () => isElementAccessExpression, @@ -179618,13 +180806,11 @@ __export(ts_exports2, { isFunctionOrModuleBlock: () => isFunctionOrModuleBlock, isFunctionSymbol: () => isFunctionSymbol, isFunctionTypeNode: () => isFunctionTypeNode, - isFutureReservedKeyword: () => isFutureReservedKeyword, isGeneratedIdentifier: () => isGeneratedIdentifier, isGeneratedPrivateIdentifier: () => isGeneratedPrivateIdentifier, isGetAccessor: () => isGetAccessor, isGetAccessorDeclaration: () => isGetAccessorDeclaration, isGetOrSetAccessorDeclaration: () => isGetOrSetAccessorDeclaration, - isGlobalDeclaration: () => isGlobalDeclaration, isGlobalScopeAugmentation: () => isGlobalScopeAugmentation, isGlobalSourceFile: () => isGlobalSourceFile, isGrammarError: () => isGrammarError, @@ -179672,6 +180858,8 @@ __export(ts_exports2, { isInTemplateString: () => isInTemplateString, isInTopLevelContext: () => isInTopLevelContext, isInTypeQuery: () => isInTypeQuery, + isIncrementalBuildInfo: () => isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo: () => isIncrementalBundleEmitBuildInfo, isIncrementalCompilation: () => isIncrementalCompilation, isIndexSignatureDeclaration: () => isIndexSignatureDeclaration, isIndexedAccessTypeNode: () => isIndexedAccessTypeNode, @@ -179778,7 +180966,6 @@ __export(ts_exports2, { isLabeledStatement: () => isLabeledStatement, isLateVisibilityPaintedStatement: () => isLateVisibilityPaintedStatement, isLeftHandSideExpression: () => isLeftHandSideExpression, - isLeftHandSideOfAssignment: () => isLeftHandSideOfAssignment, isLet: () => isLet, isLineBreak: () => isLineBreak, isLiteralComputedPropertyDeclarationName: () => isLiteralComputedPropertyDeclarationName, @@ -179786,10 +180973,7 @@ __export(ts_exports2, { isLiteralExpressionOfObject: () => isLiteralExpressionOfObject, isLiteralImportTypeNode: () => isLiteralImportTypeNode, isLiteralKind: () => isLiteralKind, - isLiteralLikeAccess: () => isLiteralLikeAccess, - isLiteralLikeElementAccess: () => isLiteralLikeElementAccess, isLiteralNameOfPropertyDeclarationOrIndexAccess: () => isLiteralNameOfPropertyDeclarationOrIndexAccess, - isLiteralTypeLikeExpression: () => isLiteralTypeLikeExpression, isLiteralTypeLiteral: () => isLiteralTypeLiteral, isLiteralTypeNode: () => isLiteralTypeNode, isLocalName: () => isLocalName, @@ -179814,6 +180998,7 @@ __export(ts_exports2, { isModuleBlock: () => isModuleBlock, isModuleBody: () => isModuleBody, isModuleDeclaration: () => isModuleDeclaration, + isModuleExportName: () => isModuleExportName, isModuleExportsAccessExpression: () => isModuleExportsAccessExpression, isModuleIdentifier: () => isModuleIdentifier, isModuleName: () => isModuleName, @@ -179823,7 +181008,6 @@ __export(ts_exports2, { isModuleWithStringLiteralName: () => isModuleWithStringLiteralName, isNameOfFunctionDeclaration: () => isNameOfFunctionDeclaration, isNameOfModuleDeclaration: () => isNameOfModuleDeclaration, - isNamedClassElement: () => isNamedClassElement, isNamedDeclaration: () => isNamedDeclaration, isNamedEvaluation: () => isNamedEvaluation, isNamedEvaluationSource: () => isNamedEvaluationSource, @@ -179841,7 +181025,6 @@ __export(ts_exports2, { isNewExpression: () => isNewExpression, isNewExpressionTarget: () => isNewExpressionTarget, isNoSubstitutionTemplateLiteral: () => isNoSubstitutionTemplateLiteral, - isNode: () => isNode, isNodeArray: () => isNodeArray, isNodeArrayMultiLine: () => isNodeArrayMultiLine, isNodeDescendantOf: () => isNodeDescendantOf, @@ -179850,14 +181033,11 @@ __export(ts_exports2, { isNodeModulesDirectory: () => isNodeModulesDirectory, isNodeWithPossibleHoistedDeclaration: () => isNodeWithPossibleHoistedDeclaration, isNonContextualKeyword: () => isNonContextualKeyword, - isNonExportDefaultModifier: () => isNonExportDefaultModifier, isNonGlobalAmbientModule: () => isNonGlobalAmbientModule, - isNonGlobalDeclaration: () => isNonGlobalDeclaration, isNonNullAccess: () => isNonNullAccess, isNonNullChain: () => isNonNullChain, isNonNullExpression: () => isNonNullExpression, isNonStaticMethodOrAccessorWithPrivateName: () => isNonStaticMethodOrAccessorWithPrivateName, - isNotEmittedOrPartiallyEmittedNode: () => isNotEmittedOrPartiallyEmittedNode, isNotEmittedStatement: () => isNotEmittedStatement, isNullishCoalesce: () => isNullishCoalesce, isNumber: () => isNumber, @@ -179873,7 +181053,6 @@ __export(ts_exports2, { isObjectLiteralMethod: () => isObjectLiteralMethod, isObjectLiteralOrClassExpressionMethodOrAccessor: () => isObjectLiteralOrClassExpressionMethodOrAccessor, isObjectTypeDeclaration: () => isObjectTypeDeclaration, - isOctalDigit: () => isOctalDigit, isOmittedExpression: () => isOmittedExpression, isOptionalChain: () => isOptionalChain, isOptionalChainRoot: () => isOptionalChainRoot, @@ -179907,7 +181086,6 @@ __export(ts_exports2, { isPrivateIdentifierClassElementDeclaration: () => isPrivateIdentifierClassElementDeclaration, isPrivateIdentifierPropertyAccessExpression: () => isPrivateIdentifierPropertyAccessExpression, isPrivateIdentifierSymbol: () => isPrivateIdentifierSymbol, - isProgramBundleEmitBuildInfo: () => isProgramBundleEmitBuildInfo, isProgramUptoDate: () => isProgramUptoDate, isPrologueDirective: () => isPrologueDirective, isPropertyAccessChain: () => isPropertyAccessChain, @@ -179920,7 +181098,6 @@ __export(ts_exports2, { isPropertyName: () => isPropertyName, isPropertyNameLiteral: () => isPropertyNameLiteral, isPropertySignature: () => isPropertySignature, - isProtoSetter: () => isProtoSetter, isPrototypeAccess: () => isPrototypeAccess, isPrototypePropertyAssignment: () => isPrototypePropertyAssignment, isPunctuation: () => isPunctuation, @@ -179930,7 +181107,6 @@ __export(ts_exports2, { isQuestionOrExclamationToken: () => isQuestionOrExclamationToken, isQuestionOrPlusOrMinusToken: () => isQuestionOrPlusOrMinusToken, isQuestionToken: () => isQuestionToken, - isRawSourceMap: () => isRawSourceMap, isReadonlyKeyword: () => isReadonlyKeyword, isReadonlyKeywordOrPlusOrMinusToken: () => isReadonlyKeywordOrPlusOrMinusToken, isRecognizedTripleSlashComment: () => isRecognizedTripleSlashComment, @@ -179952,24 +181128,22 @@ __export(ts_exports2, { isRootedDiskPath: () => isRootedDiskPath, isSameEntityName: () => isSameEntityName, isSatisfiesExpression: () => isSatisfiesExpression, - isScopeMarker: () => isScopeMarker, isSemicolonClassElement: () => isSemicolonClassElement, isSetAccessor: () => isSetAccessor, isSetAccessorDeclaration: () => isSetAccessorDeclaration, - isShebangTrivia: () => isShebangTrivia, isShiftOperatorOrHigher: () => isShiftOperatorOrHigher, isShorthandAmbientModuleSymbol: () => isShorthandAmbientModuleSymbol, isShorthandPropertyAssignment: () => isShorthandPropertyAssignment, + isSideEffectImport: () => isSideEffectImport, isSignedNumericLiteral: () => isSignedNumericLiteral, isSimpleCopiableExpression: () => isSimpleCopiableExpression, isSimpleInlineableExpression: () => isSimpleInlineableExpression, - isSimpleParameter: () => isSimpleParameter, isSimpleParameterList: () => isSimpleParameterList, isSingleOrDoubleQuote: () => isSingleOrDoubleQuote, + isSourceElement: () => isSourceElement, isSourceFile: () => isSourceFile, isSourceFileFromLibrary: () => isSourceFileFromLibrary, isSourceFileJS: () => isSourceFileJS, - isSourceFileNotJS: () => isSourceFileNotJS, isSourceFileNotJson: () => isSourceFileNotJson, isSourceMapping: () => isSourceMapping, isSpecialPropertyDeclaration: () => isSpecialPropertyDeclaration, @@ -179982,7 +181156,6 @@ __export(ts_exports2, { isStatic: () => isStatic, isStaticModifier: () => isStaticModifier, isString: () => isString, - isStringAKeyword: () => isStringAKeyword, isStringANonContextualKeyword: () => isStringANonContextualKeyword, isStringAndEmptyAnonymousObjectIntersection: () => isStringAndEmptyAnonymousObjectIntersection, isStringDoubleQuoted: () => isStringDoubleQuoted, @@ -179995,7 +181168,6 @@ __export(ts_exports2, { isStringTextContainingNode: () => isStringTextContainingNode, isSuperCall: () => isSuperCall, isSuperKeyword: () => isSuperKeyword, - isSuperOrSuperProperty: () => isSuperOrSuperProperty, isSuperProperty: () => isSuperProperty, isSupportedSourceFileName: () => isSupportedSourceFileName, isSwitchStatement: () => isSwitchStatement, @@ -180041,7 +181213,6 @@ __export(ts_exports2, { isTypeDeclaration: () => isTypeDeclaration, isTypeElement: () => isTypeElement, isTypeKeyword: () => isTypeKeyword, - isTypeKeywordToken: () => isTypeKeywordToken, isTypeKeywordTokenOrIdentifier: () => isTypeKeywordTokenOrIdentifier, isTypeLiteralNode: () => isTypeLiteralNode, isTypeNode: () => isTypeNode, @@ -180096,10 +181267,6 @@ __export(ts_exports2, { libMap: () => libMap, libs: () => libs, lineBreakPart: () => lineBreakPart, - linkNamePart: () => linkNamePart, - linkPart: () => linkPart, - linkTextPart: () => linkTextPart, - listFiles: () => listFiles, loadModuleFromGlobalCache: () => loadModuleFromGlobalCache, loadWithModeAwareCache: () => loadWithModeAwareCache, makeIdentifierFromModuleName: () => makeIdentifierFromModuleName, @@ -180109,7 +181276,6 @@ __export(ts_exports2, { map: () => map, mapAllOrFail: () => mapAllOrFail, mapDefined: () => mapDefined, - mapDefinedEntries: () => mapDefinedEntries, mapDefinedIterator: () => mapDefinedIterator, mapEntries: () => mapEntries, mapIterator: () => mapIterator, @@ -180119,18 +181285,19 @@ __export(ts_exports2, { matchPatternOrExact: () => matchPatternOrExact, matchedText: () => matchedText, matchesExclude: () => matchesExclude, + maxBy: () => maxBy, maybeBind: () => maybeBind, maybeSetLocalizedDiagnosticMessages: () => maybeSetLocalizedDiagnosticMessages, memoize: () => memoize, - memoizeCached: () => memoizeCached, memoizeOne: () => memoizeOne, - memoizeWeak: () => memoizeWeak, - metadataHelper: () => metadataHelper, min: () => min, minAndMax: () => minAndMax, missingFileModifiedTime: () => missingFileModifiedTime, modifierToFlag: () => modifierToFlag, modifiersToFlags: () => modifiersToFlags, + moduleExportNameIsDefault: () => moduleExportNameIsDefault, + moduleExportNameTextEscaped: () => moduleExportNameTextEscaped, + moduleExportNameTextUnescaped: () => moduleExportNameTextUnescaped, moduleOptionDeclaration: () => moduleOptionDeclaration, moduleResolutionIsEqualTo: () => moduleResolutionIsEqualTo, moduleResolutionNameAndModeGetter: () => moduleResolutionNameAndModeGetter, @@ -180170,11 +181337,11 @@ __export(ts_exports2, { nodePosToString: () => nodePosToString, nodeSeenTracker: () => nodeSeenTracker, nodeStartsNewLexicalEnvironment: () => nodeStartsNewLexicalEnvironment, - nodeToDisplayParts: () => nodeToDisplayParts, noop: () => noop, noopFileWatcher: () => noopFileWatcher, normalizePath: () => normalizePath, normalizeSlashes: () => normalizeSlashes, + normalizeSpans: () => normalizeSpans, not: () => not, notImplemented: () => notImplemented, notImplementedResolver: () => notImplementedResolver, @@ -180189,13 +181356,11 @@ __export(ts_exports2, { optionsForBuild: () => optionsForBuild, optionsForWatch: () => optionsForWatch, optionsHaveChanges: () => optionsHaveChanges, - optionsHaveModuleResolutionChanges: () => optionsHaveModuleResolutionChanges, or: () => or, orderedRemoveItem: () => orderedRemoveItem, orderedRemoveItemAt: () => orderedRemoveItemAt, packageIdToPackageName: () => packageIdToPackageName, packageIdToString: () => packageIdToString, - paramHelper: () => paramHelper, parameterIsThisKeyword: () => parameterIsThisKeyword, parameterNamePart: () => parameterNamePart, parseBaseNodeFactory: () => parseBaseNodeFactory, @@ -180226,10 +181391,8 @@ __export(ts_exports2, { pathIsBareSpecifier: () => pathIsBareSpecifier, pathIsRelative: () => pathIsRelative, patternText: () => patternText, - perfLogger: () => perfLogger, performIncrementalCompilation: () => performIncrementalCompilation, performance: () => ts_performance_exports, - plainJSErrors: () => plainJSErrors, positionBelongsToNode: () => positionBelongsToNode, positionIsASICandidate: () => positionIsASICandidate, positionIsSynthesized: () => positionIsSynthesized, @@ -180242,7 +181405,6 @@ __export(ts_exports2, { programContainsEsModules: () => programContainsEsModules, programContainsModules: () => programContainsModules, projectReferenceIsEqualTo: () => projectReferenceIsEqualTo, - propKeyHelper: () => propKeyHelper, propertyNamePart: () => propertyNamePart, pseudoBigIntToString: () => pseudoBigIntToString, punctuationPart: () => punctuationPart, @@ -180265,7 +181427,6 @@ __export(ts_exports2, { rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine, readBuilderProgram: () => readBuilderProgram, readConfigFile: () => readConfigFile, - readHelper: () => readHelper, readJson: () => readJson, readJsonConfigFile: () => readJsonConfigFile, readJsonOrUndefined: () => readJsonOrUndefined, @@ -180276,7 +181437,7 @@ __export(ts_exports2, { reducePathComponents: () => reducePathComponents, refactor: () => ts_refactor_exports, regExpEscape: () => regExpEscape, - regularExpressionFlagToCharacter: () => regularExpressionFlagToCharacter, + regularExpressionFlagToCharacterCode: () => regularExpressionFlagToCharacterCode, relativeComplement: () => relativeComplement, removeAllComments: () => removeAllComments, removeEmitHelper: () => removeEmitHelper, @@ -180284,7 +181445,6 @@ __export(ts_exports2, { removeFileExtension: () => removeFileExtension, removeIgnoredPath: () => removeIgnoredPath, removeMinAndVersionNumbers: () => removeMinAndVersionNumbers, - removeOptionality: () => removeOptionality, removePrefix: () => removePrefix, removeSuffix: () => removeSuffix, removeTrailingDirectorySeparator: () => removeTrailingDirectorySeparator, @@ -180303,20 +181463,16 @@ __export(ts_exports2, { resolveTripleslashReference: () => resolveTripleslashReference, resolveTypeReferenceDirective: () => resolveTypeReferenceDirective, resolvingEmptyArray: () => resolvingEmptyArray, - restHelper: () => restHelper, returnFalse: () => returnFalse, returnNoopFileWatcher: () => returnNoopFileWatcher, returnTrue: () => returnTrue, returnUndefined: () => returnUndefined, returnsPromise: () => returnsPromise, - runInitializersHelper: () => runInitializersHelper, sameFlatMap: () => sameFlatMap, sameMap: () => sameMap, sameMapping: () => sameMapping, - scanShebangTrivia: () => scanShebangTrivia, scanTokenAtPosition: () => scanTokenAtPosition, scanner: () => scanner, - screenStartingMessageCodes: () => screenStartingMessageCodes, semanticDiagnosticsOptionDeclarations: () => semanticDiagnosticsOptionDeclarations, serializeCompilerOptions: () => serializeCompilerOptions, server: () => ts_server_exports3, @@ -180324,16 +181480,13 @@ __export(ts_exports2, { setCommentRange: () => setCommentRange, setConfigFileInOptions: () => setConfigFileInOptions, setConstantValue: () => setConstantValue, - setEachParent: () => setEachParent, setEmitFlags: () => setEmitFlags, - setFunctionNameHelper: () => setFunctionNameHelper, setGetSourceFileAsHashVersioned: () => setGetSourceFileAsHashVersioned, setIdentifierAutoGenerate: () => setIdentifierAutoGenerate, setIdentifierGeneratedImportReference: () => setIdentifierGeneratedImportReference, setIdentifierTypeArguments: () => setIdentifierTypeArguments, setInternalEmitFlags: () => setInternalEmitFlags, setLocalizedDiagnosticMessages: () => setLocalizedDiagnosticMessages, - setModuleDefaultHelper: () => setModuleDefaultHelper, setNodeChildren: () => setNodeChildren, setNodeFlags: () => setNodeFlags, setObjectAllocator: () => setObjectAllocator, @@ -180362,7 +181515,6 @@ __export(ts_exports2, { shouldPreserveConstEnums: () => shouldPreserveConstEnums, shouldUseUriStyleNodeCoreModules: () => shouldUseUriStyleNodeCoreModules, showModuleSpecifier: () => showModuleSpecifier, - signatureHasLiteralTypes: () => signatureHasLiteralTypes, signatureHasRestParameter: () => signatureHasRestParameter, signatureToDisplayParts: () => signatureToDisplayParts, single: () => single, @@ -180371,18 +181523,17 @@ __export(ts_exports2, { singleOrMany: () => singleOrMany, singleOrUndefined: () => singleOrUndefined, skipAlias: () => skipAlias, - skipAssertions: () => skipAssertions, skipConstraint: () => skipConstraint, skipOuterExpressions: () => skipOuterExpressions, skipParentheses: () => skipParentheses, skipPartiallyEmittedExpressions: () => skipPartiallyEmittedExpressions, skipTrivia: () => skipTrivia, skipTypeChecking: () => skipTypeChecking, + skipTypeCheckingIgnoringNoCheck: () => skipTypeCheckingIgnoringNoCheck, skipTypeParentheses: () => skipTypeParentheses, skipWhile: () => skipWhile, sliceAfter: () => sliceAfter, some: () => some, - sort: () => sort, sortAndDeduplicate: () => sortAndDeduplicate, sortAndDeduplicateDiagnostics: () => sortAndDeduplicateDiagnostics, sourceFileAffectingCompilerOptions: () => sourceFileAffectingCompilerOptions, @@ -180391,8 +181542,6 @@ __export(ts_exports2, { sourceMapCommentRegExpDontCareLineStart: () => sourceMapCommentRegExpDontCareLineStart, spacePart: () => spacePart, spanMap: () => spanMap, - spreadArrayHelper: () => spreadArrayHelper, - stableSort: () => stableSort, startEndContainsRange: () => startEndContainsRange, startEndOverlapsWithStartEnd: () => startEndOverlapsWithStartEnd, startOnNewLine: () => startOnNewLine, @@ -180405,10 +181554,8 @@ __export(ts_exports2, { stringToToken: () => stringToToken, stripQuotes: () => stripQuotes, supportedDeclarationExtensions: () => supportedDeclarationExtensions, - supportedJSExtensions: () => supportedJSExtensions, supportedJSExtensionsFlat: () => supportedJSExtensionsFlat, supportedLocaleDirectories: () => supportedLocaleDirectories, - supportedTSExtensions: () => supportedTSExtensions, supportedTSExtensionsFlat: () => supportedTSExtensionsFlat, supportedTSImplementationExtensions: () => supportedTSImplementationExtensions, suppressLeadingAndTrailingTrivia: () => suppressLeadingAndTrailingTrivia, @@ -180417,16 +181564,12 @@ __export(ts_exports2, { symbolEscapedNameNoDefault: () => symbolEscapedNameNoDefault, symbolName: () => symbolName, symbolNameNoDefault: () => symbolNameNoDefault, - symbolPart: () => symbolPart, symbolToDisplayParts: () => symbolToDisplayParts, - syntaxMayBeASICandidate: () => syntaxMayBeASICandidate, - syntaxRequiresTrailingSemicolonOrASI: () => syntaxRequiresTrailingSemicolonOrASI, sys: () => sys, sysLog: () => sysLog, tagNamesAreEquivalent: () => tagNamesAreEquivalent, takeWhile: () => takeWhile, targetOptionDeclaration: () => targetOptionDeclaration, - templateObjectHelper: () => templateObjectHelper, testFormatSettings: () => testFormatSettings, textChangeRangeIsUnchanged: () => textChangeRangeIsUnchanged, textChangeRangeNewSpan: () => textChangeRangeNewSpan, @@ -180434,7 +181577,10 @@ __export(ts_exports2, { textOrKeywordPart: () => textOrKeywordPart, textPart: () => textPart, textRangeContainsPositionInclusive: () => textRangeContainsPositionInclusive, + textRangeContainsTextSpan: () => textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan: () => textRangeIntersectsWithTextSpan, textSpanContainsPosition: () => textSpanContainsPosition, + textSpanContainsTextRange: () => textSpanContainsTextRange, textSpanContainsTextSpan: () => textSpanContainsTextSpan, textSpanEnd: () => textSpanEnd, textSpanIntersection: () => textSpanIntersection, @@ -180452,9 +181598,9 @@ __export(ts_exports2, { toBuilderStateFileInfoForMultiEmit: () => toBuilderStateFileInfoForMultiEmit, toEditorSettings: () => toEditorSettings, toFileNameLowerCase: () => toFileNameLowerCase, - toLowerCase: () => toLowerCase, toPath: () => toPath, toProgramEmitPending: () => toProgramEmitPending, + toSorted: () => toSorted, tokenIsIdentifierOrKeyword: () => tokenIsIdentifierOrKeyword, tokenIsIdentifierOrKeywordOrGreaterThan: () => tokenIsIdentifierOrKeywordOrGreaterThan, tokenToString: () => tokenToString, @@ -180476,11 +181622,11 @@ __export(ts_exports2, { transformESDecorators: () => transformESDecorators, transformESNext: () => transformESNext, transformGenerators: () => transformGenerators, + transformImpliedNodeFormatDependentModule: () => transformImpliedNodeFormatDependentModule, transformJsx: () => transformJsx, transformLegacyDecorators: () => transformLegacyDecorators, transformModule: () => transformModule, transformNamedEvaluation: () => transformNamedEvaluation, - transformNodeModule: () => transformNodeModule, transformNodes: () => transformNodes, transformSystemModule: () => transformSystemModule, transformTypeScript: () => transformTypeScript, @@ -180507,7 +181653,6 @@ __export(ts_exports2, { tryGetPropertyNameOfBindingOrAssignmentElement: () => tryGetPropertyNameOfBindingOrAssignmentElement, tryGetSourceMappingURL: () => tryGetSourceMappingURL, tryGetTextOfPropertyName: () => tryGetTextOfPropertyName, - tryIOAndConsumeErrors: () => tryIOAndConsumeErrors, tryParseJson: () => tryParseJson, tryParsePattern: () => tryParsePattern, tryParsePatterns: () => tryParsePatterns, @@ -180529,7 +181674,6 @@ __export(ts_exports2, { unescapeLeadingUnderscores: () => unescapeLeadingUnderscores, unmangleScopedPackageName: () => unmangleScopedPackageName, unorderedRemoveItem: () => unorderedRemoveItem, - unorderedRemoveItemAt: () => unorderedRemoveItemAt, unreachableCodeIsError: () => unreachableCodeIsError, unsetNodeChildren: () => unsetNodeChildren, unusedLabelIsError: () => unusedLabelIsError, @@ -180542,11 +181686,9 @@ __export(ts_exports2, { updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, updateSourceFile: () => updateSourceFile, updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, - usesExtensionsOnImports: () => usesExtensionsOnImports, usingSingleLineStringWriter: () => usingSingleLineStringWriter, utf16EncodeAsString: () => utf16EncodeAsString, validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, - valuesHelper: () => valuesHelper, version: () => version, versionMajorMinor: () => versionMajorMinor, visitArray: () => visitArray, @@ -180559,7 +181701,6 @@ __export(ts_exports2, { visitNodes: () => visitNodes2, visitParameterList: () => visitParameterList, walkUpBindingElementsAndPatterns: () => walkUpBindingElementsAndPatterns, - walkUpLexicalEnvironments: () => walkUpLexicalEnvironments, walkUpOuterExpressions: () => walkUpOuterExpressions, walkUpParenthesizedExpressions: () => walkUpParenthesizedExpressions, walkUpParenthesizedTypes: () => walkUpParenthesizedTypes, @@ -180712,20 +181853,19 @@ __export(ts_server_exports3, { LogLevel: () => LogLevel2, Msg: () => Msg, OpenFileInfoTelemetryEvent: () => OpenFileInfoTelemetryEvent, - Project: () => Project3, + Project: () => Project2, ProjectInfoTelemetryEvent: () => ProjectInfoTelemetryEvent, ProjectKind: () => ProjectKind, ProjectLanguageServiceStateEvent: () => ProjectLanguageServiceStateEvent, ProjectLoadingFinishEvent: () => ProjectLoadingFinishEvent, ProjectLoadingStartEvent: () => ProjectLoadingStartEvent, - ProjectService: () => ProjectService3, + ProjectService: () => ProjectService2, ProjectsUpdatedInBackgroundEvent: () => ProjectsUpdatedInBackgroundEvent, ScriptInfo: () => ScriptInfo, ScriptVersionCache: () => ScriptVersionCache, Session: () => Session3, TextStorage: () => TextStorage, ThrottledOperations: () => ThrottledOperations, - TypingsCache: () => TypingsCache, TypingsInstallerAdapter: () => TypingsInstallerAdapter, allFilesAreJsOrDts: () => allFilesAreJsOrDts, allRootFilesAreJsOrDts: () => allRootFilesAreJsOrDts, @@ -180744,7 +181884,6 @@ __export(ts_server_exports3, { createSortedArray: () => createSortedArray2, emptyArray: () => emptyArray2, findArgument: () => findArgument, - forEachResolvedProjectReferenceProject: () => forEachResolvedProjectReferenceProject, formatDiagnosticToProtocol: () => formatDiagnosticToProtocol, formatMessage: () => formatMessage2, getBaseConfigFileName: () => getBaseConfigFileName, @@ -180770,7 +181909,6 @@ __export(ts_server_exports3, { nullCancellationToken: () => nullCancellationToken, nullTypingsInstaller: () => nullTypingsInstaller, protocol: () => ts_server_protocol_exports, - removeSorted: () => removeSorted, stringifyIndented: () => stringifyIndented, toEvent: () => toEvent, toNormalizedPath: () => toNormalizedPath, @@ -180837,7 +181975,6 @@ var TypingsInstaller = class { this.missingTypingsSet = /* @__PURE__ */ new Set(); this.knownCachesSet = /* @__PURE__ */ new Set(); this.projectWatchers = /* @__PURE__ */ new Map(); - /** @internal */ this.pendingRunRequests = []; this.installRunCount = 1; this.inFlightRequestCount = 0; @@ -181312,14 +182449,11 @@ var ThrottledOperations = class _ThrottledOperations { return this.pendingTimeouts.delete(operationId); } static run(operationId, self, cb) { - var _a, _b; - (_a = perfLogger) == null ? void 0 : _a.logStartScheduledOperation(operationId); self.pendingTimeouts.delete(operationId); if (self.logger) { self.logger.info(`Running: ${operationId}`); } cb(); - (_b = perfLogger) == null ? void 0 : _b.logStopScheduledOperation(); } }; var GcTimer = class _GcTimer { @@ -181335,9 +182469,7 @@ var GcTimer = class _GcTimer { this.timerId = this.host.setTimeout(_GcTimer.run, this.delay, this); } static run(self) { - var _a, _b; self.timerId = void 0; - (_a = perfLogger) == null ? void 0 : _a.logStartScheduledOperation("GC collect"); const log = self.logger.hasLevel(2 /* requestTime */); const before = log && self.host.getMemoryUsage(); self.host.gc(); @@ -181345,26 +182477,12 @@ var GcTimer = class _GcTimer { const after = self.host.getMemoryUsage(); self.logger.perftrc(`GC::before ${before}, after ${after}`); } - (_b = perfLogger) == null ? void 0 : _b.logStopScheduledOperation(); } }; function getBaseConfigFileName(configFilePath) { const base = getBaseFileName(configFilePath); return base === "tsconfig.json" || base === "jsconfig.json" ? base : void 0; } -function removeSorted(array, remove, compare) { - if (!array || array.length === 0) { - return; - } - if (array[0] === remove) { - array.splice(0, 1); - return; - } - const removeIndex = binarySearch(array, remove, identity, compare); - if (removeIndex >= 0) { - array.splice(removeIndex, 1); - } -} // src/server/_namespaces/ts.server.protocol.ts var ts_server_protocol_exports = {}; @@ -181379,7 +182497,7 @@ __export(ts_server_protocol_exports, { NewLineKind: () => NewLineKind2, OrganizeImportsMode: () => OrganizeImportsMode, PollingWatchKind: () => PollingWatchKind2, - ScriptTarget: () => ScriptTarget10, + ScriptTarget: () => ScriptTarget11, SemicolonPreference: () => SemicolonPreference, WatchDirectoryKind: () => WatchDirectoryKind2, WatchFileKind: () => WatchFileKind2 @@ -181570,24 +182688,24 @@ var NewLineKind2 = /* @__PURE__ */ ((NewLineKind3) => { NewLineKind3["Lf"] = "Lf"; return NewLineKind3; })(NewLineKind2 || {}); -var ScriptTarget10 = /* @__PURE__ */ ((ScriptTarget11) => { - ScriptTarget11["ES3"] = "es3"; - ScriptTarget11["ES5"] = "es5"; - ScriptTarget11["ES6"] = "es6"; - ScriptTarget11["ES2015"] = "es2015"; - ScriptTarget11["ES2016"] = "es2016"; - ScriptTarget11["ES2017"] = "es2017"; - ScriptTarget11["ES2018"] = "es2018"; - ScriptTarget11["ES2019"] = "es2019"; - ScriptTarget11["ES2020"] = "es2020"; - ScriptTarget11["ES2021"] = "es2021"; - ScriptTarget11["ES2022"] = "es2022"; - ScriptTarget11["ES2023"] = "es2023"; - ScriptTarget11["ESNext"] = "esnext"; - ScriptTarget11["JSON"] = "json"; - ScriptTarget11["Latest"] = "esnext" /* ESNext */; - return ScriptTarget11; -})(ScriptTarget10 || {}); +var ScriptTarget11 = /* @__PURE__ */ ((ScriptTarget12) => { + ScriptTarget12["ES3"] = "es3"; + ScriptTarget12["ES5"] = "es5"; + ScriptTarget12["ES6"] = "es6"; + ScriptTarget12["ES2015"] = "es2015"; + ScriptTarget12["ES2016"] = "es2016"; + ScriptTarget12["ES2017"] = "es2017"; + ScriptTarget12["ES2018"] = "es2018"; + ScriptTarget12["ES2019"] = "es2019"; + ScriptTarget12["ES2020"] = "es2020"; + ScriptTarget12["ES2021"] = "es2021"; + ScriptTarget12["ES2022"] = "es2022"; + ScriptTarget12["ES2023"] = "es2023"; + ScriptTarget12["ESNext"] = "esnext"; + ScriptTarget12["JSON"] = "json"; + ScriptTarget12["Latest"] = "esnext" /* ESNext */; + return ScriptTarget12; +})(ScriptTarget11 || {}); { } @@ -182072,102 +183190,6 @@ function failIfInvalidLocation(location) { Debug.assert(location.offset > 0, `Expected offset to be non-${location.offset === 0 ? "zero" : "negative"}`); } -// src/server/typingsCache.ts -var nullTypingsInstaller = { - isKnownTypesPackageName: returnFalse, - // Should never be called because we never provide a types registry. - installPackage: notImplemented, - enqueueInstallTypingsRequest: noop, - attach: noop, - onProjectClosed: noop, - globalTypingsCacheLocation: void 0 - // TODO: GH#18217 -}; -function setIsEqualTo(arr1, arr2) { - if (arr1 === arr2) { - return true; - } - if ((arr1 || emptyArray2).length === 0 && (arr2 || emptyArray2).length === 0) { - return true; - } - const set = /* @__PURE__ */ new Map(); - let unique = 0; - for (const v of arr1) { - if (set.get(v) !== true) { - set.set(v, true); - unique++; - } - } - for (const v of arr2) { - const isSet = set.get(v); - if (isSet === void 0) { - return false; - } - if (isSet === true) { - set.set(v, false); - unique--; - } - } - return unique === 0; -} -function typeAcquisitionChanged(opt1, opt2) { - return opt1.enable !== opt2.enable || !setIsEqualTo(opt1.include, opt2.include) || !setIsEqualTo(opt1.exclude, opt2.exclude); -} -function compilerOptionsChanged(opt1, opt2) { - return getAllowJSCompilerOption(opt1) !== getAllowJSCompilerOption(opt2); -} -function unresolvedImportsChanged(imports1, imports2) { - if (imports1 === imports2) { - return false; - } - return !arrayIsEqualTo(imports1, imports2); -} -var TypingsCache = class { - constructor(installer) { - this.installer = installer; - this.perProjectCache = /* @__PURE__ */ new Map(); - } - isKnownTypesPackageName(name) { - return this.installer.isKnownTypesPackageName(name); - } - installPackage(options) { - return this.installer.installPackage(options); - } - enqueueInstallTypingsForProject(project, unresolvedImports, forceRefresh) { - const typeAcquisition = project.getTypeAcquisition(); - if (!typeAcquisition || !typeAcquisition.enable) { - return; - } - const entry = this.perProjectCache.get(project.getProjectName()); - if (forceRefresh || !entry || typeAcquisitionChanged(typeAcquisition, entry.typeAcquisition) || compilerOptionsChanged(project.getCompilationSettings(), entry.compilerOptions) || unresolvedImportsChanged(unresolvedImports, entry.unresolvedImports)) { - this.perProjectCache.set(project.getProjectName(), { - compilerOptions: project.getCompilationSettings(), - typeAcquisition, - typings: entry ? entry.typings : emptyArray2, - unresolvedImports, - poisoned: true - }); - this.installer.enqueueInstallTypingsRequest(project, typeAcquisition, unresolvedImports); - } - } - updateTypingsForProject(projectName, compilerOptions, typeAcquisition, unresolvedImports, newTypings) { - const typings = sort(newTypings); - this.perProjectCache.set(projectName, { - compilerOptions, - typeAcquisition, - typings, - unresolvedImports, - poisoned: false - }); - return !typeAcquisition || !typeAcquisition.enable ? emptyArray2 : typings; - } - onProjectClosed(project) { - if (this.perProjectCache.delete(project.getProjectName())) { - this.installer.onProjectClosed(project); - } - } -}; - // src/server/project.ts var ProjectKind = /* @__PURE__ */ ((ProjectKind2) => { ProjectKind2[ProjectKind2["Inferred"] = 0] = "Inferred"; @@ -182242,7 +183264,46 @@ function hasNoTypeScriptSource(fileNames) { function isGeneratedFileWatcher(watch) { return watch.generatedFilePath !== void 0; } -var Project3 = class _Project { +function setIsEqualTo(arr1, arr2) { + if (arr1 === arr2) { + return true; + } + if ((arr1 || emptyArray2).length === 0 && (arr2 || emptyArray2).length === 0) { + return true; + } + const set = /* @__PURE__ */ new Map(); + let unique = 0; + for (const v of arr1) { + if (set.get(v) !== true) { + set.set(v, true); + unique++; + } + } + for (const v of arr2) { + const isSet = set.get(v); + if (isSet === void 0) { + return false; + } + if (isSet === true) { + set.set(v, false); + unique--; + } + } + return unique === 0; +} +function typeAcquisitionChanged(opt1, opt2) { + return opt1.enable !== opt2.enable || !setIsEqualTo(opt1.include, opt2.include) || !setIsEqualTo(opt1.exclude, opt2.exclude); +} +function compilerOptionsChanged(opt1, opt2) { + return getAllowJSCompilerOption(opt1) !== getAllowJSCompilerOption(opt2); +} +function unresolvedImportsChanged(imports1, imports2) { + if (imports1 === imports2) { + return false; + } + return !arrayIsEqualTo(imports1, imports2); +} +var Project2 = class _Project { /** @internal */ constructor(projectName, projectKind, projectService, documentRegistry, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, watchOptions, directoryStructureHost, currentDirectory) { this.projectKind = projectKind; @@ -182262,9 +183323,7 @@ var Project3 = class _Project { * @internal */ this.cachedUnresolvedImportsPerFile = /* @__PURE__ */ new Map(); - /** @internal */ this.hasAddedorRemovedFiles = false; - /** @internal */ this.hasAddedOrRemovedSymlinks = false; /** * Last version that was reported. @@ -182289,7 +183348,6 @@ var Project3 = class _Project { this.dirty = false; /** @internal */ this.typingFiles = emptyArray2; - /** @internal */ this.moduleSpecifierCache = createModuleSpecifierCache(this); /** @internal */ this.createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); @@ -182335,6 +183393,7 @@ var Project3 = class _Project { this.trace = (s) => host.trace(s); } this.realpath = maybeBind(host, host.realpath); + this.preferNonRecursiveWatch = this.projectService.canUseWatchEvents || host.preferNonRecursiveWatch; this.resolutionCache = createResolutionCache( this, this.currentDirectory, @@ -182408,18 +183467,15 @@ var Project3 = class _Project { return { pluginConfigEntry, resolvedModule, errorLogs }; } isKnownTypesPackageName(name) { - return this.typingsCache.isKnownTypesPackageName(name); + return this.projectService.typingsInstaller.isKnownTypesPackageName(name); } installPackage(options) { - return this.typingsCache.installPackage({ ...options, projectName: this.projectName, projectRootPath: this.toPath(this.currentDirectory) }); + return this.projectService.typingsInstaller.installPackage({ ...options, projectName: this.projectName, projectRootPath: this.toPath(this.currentDirectory) }); } /** @internal */ getGlobalTypingsCacheLocation() { return this.getGlobalCache(); } - get typingsCache() { - return this.projectService.typingsCache; - } /** @internal */ getSymlinkCache() { if (!this.symlinks) { @@ -182524,7 +183580,7 @@ var Project3 = class _Project { } fileExists(file) { const path = this.toPath(file); - return !this.isWatchedMissingFile(path) && this.directoryStructureHost.fileExists(file); + return !!this.projectService.getScriptInfoForPath(path) || !this.isWatchedMissingFile(path) && this.directoryStructureHost.fileExists(file); } /** @internal */ resolveModuleNameLiterals(moduleLiterals, containingFile, redirectedReference, options, containingSourceFile, reusedNames) { @@ -182791,13 +183847,13 @@ var Project3 = class _Project { return this.projectName; } removeLocalTypingsFromTypeAcquisition(newTypeAcquisition) { - if (!newTypeAcquisition || !newTypeAcquisition.include) { + if (!newTypeAcquisition.enable || !newTypeAcquisition.include) { return newTypeAcquisition; } return { ...newTypeAcquisition, include: this.removeExistingTypings(newTypeAcquisition.include) }; } getExternalFiles(updateLevel) { - return sort(flatMap(this.plugins, (plugin) => { + return toSorted(flatMap(this.plugins, (plugin) => { if (typeof plugin.module.getExternalFiles !== "function") return; try { return plugin.module.getExternalFiles(this, updateLevel || 0 /* Update */); @@ -182822,7 +183878,8 @@ var Project3 = class _Project { } close() { var _a; - this.projectService.typingsCache.onProjectClosed(this); + if (this.typingsCache) this.projectService.typingsInstaller.onProjectClosed(this); + this.typingsCache = void 0; this.closeWatchingTypingLocations(); this.cleanupProgram(); forEach(this.externalFiles, (externalFile) => this.detachScriptInfoIfNotRoot(externalFile)); @@ -183064,6 +184121,12 @@ var Project3 = class _Project { this.hasAddedOrRemovedSymlinks = true; } /** @internal */ + onReleaseOldSourceFile(oldSourceFile, _oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath) { + if (!newSourceFileByResolvedPath || oldSourceFile.resolvedPath === oldSourceFile.path && newSourceFileByResolvedPath.resolvedPath !== oldSourceFile.path) { + this.detachScriptInfoFromProject(oldSourceFile.fileName, hasSourceFileByPath); + } + } + /** @internal */ updateFromProject() { updateProjectIfDirty(this); } @@ -183072,9 +184135,8 @@ var Project3 = class _Project { * @returns: true if set of files in the project stays the same and false - otherwise. */ updateGraph() { - var _a, _b, _c, _d; + var _a, _b; (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "updateGraph", { name: this.projectName, kind: ProjectKind[this.projectKind] }); - (_b = perfLogger) == null ? void 0 : _b.logStartUpdateGraph(); this.resolutionCache.startRecordingFilesWithChangedResolutions(); const hasNewProgram = this.updateGraphWorker(); const hasAddedorRemovedFiles = this.hasAddedorRemovedFiles; @@ -183088,7 +184150,7 @@ var Project3 = class _Project { if (hasNewProgram || changedFiles.length) { this.lastCachedUnresolvedImportsList = getUnresolvedImports(this.program, this.cachedUnresolvedImportsPerFile); } - this.projectService.typingsCache.enqueueInstallTypingsForProject(this, this.lastCachedUnresolvedImportsList, hasAddedorRemovedFiles); + this.enqueueInstallTypingsForProject(hasAddedorRemovedFiles); } else { this.lastCachedUnresolvedImportsList = void 0; } @@ -183102,12 +184164,33 @@ var Project3 = class _Project { if (isFirstProgramLoad) { this.getPackageJsonAutoImportProvider(); } - (_c = perfLogger) == null ? void 0 : _c.logStopUpdateGraph(); - (_d = tracing) == null ? void 0 : _d.pop(); + (_b = tracing) == null ? void 0 : _b.pop(); return !hasNewProgram; } /** @internal */ - updateTypingFiles(typingFiles) { + enqueueInstallTypingsForProject(forceRefresh) { + const typeAcquisition = this.getTypeAcquisition(); + if (!typeAcquisition || !typeAcquisition.enable || this.projectService.typingsInstaller === nullTypingsInstaller) { + return; + } + const entry = this.typingsCache; + if (forceRefresh || !entry || typeAcquisitionChanged(typeAcquisition, entry.typeAcquisition) || compilerOptionsChanged(this.getCompilationSettings(), entry.compilerOptions) || unresolvedImportsChanged(this.lastCachedUnresolvedImportsList, entry.unresolvedImports)) { + this.typingsCache = { + compilerOptions: this.getCompilationSettings(), + typeAcquisition, + unresolvedImports: this.lastCachedUnresolvedImportsList + }; + this.projectService.typingsInstaller.enqueueInstallTypingsRequest(this, typeAcquisition, this.lastCachedUnresolvedImportsList); + } + } + /** @internal */ + updateTypingFiles(compilerOptions, typeAcquisition, unresolvedImports, newTypings) { + this.typingsCache = { + compilerOptions, + typeAcquisition, + unresolvedImports + }; + const typingFiles = !typeAcquisition || !typeAcquisition.enable ? emptyArray2 : toSorted(newTypings); if (enumerateInsertsAndDeletes( typingFiles, this.typingFiles, @@ -183121,12 +184204,10 @@ var Project3 = class _Project { this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); } } - /** @internal */ closeWatchingTypingLocations() { if (this.typingWatchers) clearMap(this.typingWatchers, closeFileWatcher); this.typingWatchers = void 0; } - /** @internal */ onTypingInstallerWatchInvoke() { this.typingWatchers.isInvoked = true; this.projectService.updateTypingsForProject({ projectName: this.getProjectName(), kind: ActionInvalidate }); @@ -183204,8 +184285,9 @@ var Project3 = class _Project { return this.program; } removeExistingTypings(include) { + if (!include.length) return include; const existing = getAutomaticTypeDirectiveNames(this.getCompilerOptions(), this.directoryStructureHost); - return include.filter((i) => !existing.includes(i)); + return filter(include, (i) => !existing.includes(i)); } updateGraphWorker() { var _a, _b; @@ -183229,30 +184311,6 @@ var Project3 = class _Project { let hasNewProgram = false; if (this.program && (!oldProgram || this.program !== oldProgram && this.program.structureIsReused !== 2 /* Completely */)) { hasNewProgram = true; - if (oldProgram) { - for (const f of oldProgram.getSourceFiles()) { - const newFile = this.program.getSourceFileByPath(f.resolvedPath); - if (!newFile || f.resolvedPath === f.path && newFile.resolvedPath !== f.path) { - this.detachScriptInfoFromProject( - f.fileName, - !!this.program.getSourceFileByPath(f.path), - /*syncDirWatcherRemove*/ - true - ); - } - } - oldProgram.forEachResolvedProjectReference((resolvedProjectReference) => { - if (!this.program.getResolvedProjectReferenceByPath(resolvedProjectReference.sourceFile.path)) { - this.detachScriptInfoFromProject( - resolvedProjectReference.sourceFile.fileName, - /*noRemoveResolution*/ - void 0, - /*syncDirWatcherRemove*/ - true - ); - } - }); - } this.rootFilesMap.forEach((value, path) => { var _a2; const file = this.program.getSourceFileByPath(path); @@ -183377,12 +184435,12 @@ var Project3 = class _Project { sendPerformanceEvent(kind, durationMs) { this.projectService.sendPerformanceEvent(kind, durationMs); } - detachScriptInfoFromProject(uncheckedFileName, noRemoveResolution, syncDirWatcherRemove) { + detachScriptInfoFromProject(uncheckedFileName, noRemoveResolution) { const scriptInfoToDetach = this.projectService.getScriptInfo(uncheckedFileName); if (scriptInfoToDetach) { scriptInfoToDetach.detachFromProject(this); if (!noRemoveResolution) { - this.resolutionCache.removeResolutionsOfFile(scriptInfoToDetach.path, syncDirWatcherRemove); + this.resolutionCache.removeResolutionsOfFile(scriptInfoToDetach.path); } } } @@ -183482,7 +184540,6 @@ var Project3 = class _Project { false ); } - /** @internal */ filesToStringWorker(writeProjectFileNames, writeFileExplaination, writeFileVersionAndText) { if (this.isInitialLoadPending()) return " Files (0) InitialLoadPending\n"; if (!this.program) return " Files (0) NoProgram\n"; @@ -183816,7 +184873,6 @@ var Project3 = class _Project { (_c = tracing) == null ? void 0 : _c.pop(); } } - /** @internal */ isDefaultProjectForOpenFiles() { return !!forEachEntry( this.projectService.openFiles, @@ -183848,16 +184904,15 @@ var Project3 = class _Project { var _a, _b, _c, _d; const originalProgram = this.program; const rootSourceFile = Debug.checkDefined((_a = this.program) == null ? void 0 : _a.getSourceFile(rootFile), "Expected file to be part of program"); - const originalText = Debug.checkDefined(rootSourceFile.getText()); + const originalText = Debug.checkDefined(rootSourceFile.getFullText()); (_b = this.getScriptInfo(rootFile)) == null ? void 0 : _b.editContent(0, originalText.length, updatedText); this.updateGraph(); try { cb(this.program, originalProgram, (_c = this.program) == null ? void 0 : _c.getSourceFile(rootFile)); } finally { - (_d = this.getScriptInfo(rootFile)) == null ? void 0 : _d.editContent(0, this.program.getSourceFile(rootFile).getText().length, originalText); + (_d = this.getScriptInfo(rootFile)) == null ? void 0 : _d.editContent(0, updatedText.length, originalText); } } - /** @internal */ getCompilerOptionsForNoDtsResolutionProject() { return { ...this.getCompilerOptions(), @@ -183898,7 +184953,7 @@ function extractUnresolvedImportsFromSourceFile(program, file, ambientModules, c return unresolvedImports || emptyArray2; }); } -var InferredProject2 = class extends Project3 { +var InferredProject2 = class extends Project2 { /** @internal */ constructor(projectService, documentRegistry, compilerOptions, watchOptions, projectRootPath, currentDirectory, typeAcquisition) { super( @@ -183992,7 +185047,7 @@ var InferredProject2 = class extends Project3 { }; } }; -var AuxiliaryProject = class extends Project3 { +var AuxiliaryProject = class extends Project2 { constructor(projectService, documentRegistry, compilerOptions, currentDirectory) { super( projectService.newAuxiliaryProjectName(), @@ -184019,7 +185074,7 @@ var AuxiliaryProject = class extends Project3 { return; } }; -var _AutoImportProviderProject = class _AutoImportProviderProject extends Project3 { +var _AutoImportProviderProject = class _AutoImportProviderProject extends Project2 { /** @internal */ constructor(hostProject, initialRootNames, documentRegistry, compilerOptions) { super( @@ -184275,7 +185330,6 @@ var _AutoImportProviderProject = class _AutoImportProviderProject extends Projec return (_a = this.hostProject.getCurrentProgram()) == null ? void 0 : _a.getModuleResolutionCache(); } }; -/** @internal */ _AutoImportProviderProject.maxDependencies = 10; /** @internal */ _AutoImportProviderProject.compilerOptionsOverrides = { @@ -184287,7 +185341,7 @@ _AutoImportProviderProject.compilerOptionsOverrides = { noLib: true }; var AutoImportProviderProject = _AutoImportProviderProject; -var ConfiguredProject2 = class extends Project3 { +var ConfiguredProject2 = class extends Project2 { /** @internal */ constructor(configFileName, canonicalConfigFilePath, projectService, documentRegistry, cachedDirectoryStructureHost, pendingUpdateReason) { super( @@ -184350,7 +185404,6 @@ var ConfiguredProject2 = class extends Project3 { onReleaseParsedCommandLine(fileName) { this.releaseParsedConfig(asNormalizedPath(this.projectService.toCanonicalFileName(asNormalizedPath(normalizePath(fileName))))); } - /** @internal */ releaseParsedConfig(canonicalConfigFilePath) { this.projectService.stopWatchingWildCards(canonicalConfigFilePath, this); this.projectService.releaseParsedConfig(canonicalConfigFilePath, this); @@ -184493,7 +185546,7 @@ var ConfiguredProject2 = class extends Project3 { updateErrorForNoInputFiles(fileNames, this.getConfigFilePath(), this.getCompilerOptions().configFile.configFileSpecs, this.projectErrors, this.canConfigFileJsonReportNoInputFiles); } }; -var ExternalProject = class extends Project3 { +var ExternalProject = class extends Project2 { /** @internal */ constructor(externalProjectName, projectService, documentRegistry, compilerOptions, lastFileExceededProgramSize, compileOnSaveEnabled, projectFilePath, watchOptions) { super( @@ -184700,6 +185753,16 @@ function findProjectByName(projectName, projects) { } } } +var nullTypingsInstaller = { + isKnownTypesPackageName: returnFalse, + // Should never be called because we never provide a types registry. + installPackage: notImplemented, + enqueueInstallTypingsRequest: noop, + attach: noop, + onProjectClosed: noop, + globalTypingsCacheLocation: void 0 + // TODO: GH#18217 +}; var noopConfigFileWatcher = { close: noop }; function getConfigFileNameFromCache(info, cache) { if (!cache || isAncestorConfigFileInfo(info)) return void 0; @@ -184898,8 +185961,11 @@ function createProjectNameFactoryWithCounter(nameFactory) { function getHostWatcherMap() { return { idToCallbacks: /* @__PURE__ */ new Map(), pathToId: /* @__PURE__ */ new Map() }; } +function getCanUseWatchEvents(service, canUseWatchEvents) { + return !!canUseWatchEvents && !!service.eventHandler && !!service.session; +} function createWatchFactoryHostUsingWatchEvents(service, canUseWatchEvents) { - if (!canUseWatchEvents || !service.eventHandler || !service.session) return void 0; + if (!getCanUseWatchEvents(service, canUseWatchEvents)) return void 0; const watchedFiles = getHostWatcherMap(); const watchedDirectories = getHostWatcherMap(); const watchedDirectoriesRecursive = getHostWatcherMap(); @@ -185057,9 +186123,7 @@ var _ProjectService = class _ProjectService { this.pendingEnsureProjectForOpenFiles = false; /** Tracks projects that we have already sent telemetry for. */ this.seenProjects = /* @__PURE__ */ new Map(); - /** @internal */ this.sharedExtendedConfigFileWatchers = /* @__PURE__ */ new Map(); - /** @internal */ this.extendedConfigCache = /* @__PURE__ */ new Map(); /** @internal */ this.baseline = noop; @@ -185103,7 +186167,6 @@ var _ProjectService = class _ProjectService { this.logger.info("No types map provided; using the default"); } this.typingsInstaller.attach(this); - this.typingsCache = new TypingsCache(this.typingsInstaller); this.hostConfiguration = { formatCodeOptions: getDefaultFormatCodeSettings(this.host.newLine), preferences: emptyOptions, @@ -185123,6 +186186,7 @@ var _ProjectService = class _ProjectService { log, getDetailWatchInfo ); + this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { @@ -185196,12 +186260,15 @@ var _ProjectService = class _ProjectService { } switch (response.kind) { case ActionSet: - project.updateTypingFiles(this.typingsCache.updateTypingsForProject(response.projectName, response.compilerOptions, response.typeAcquisition, response.unresolvedImports, response.typings)); + project.updateTypingFiles( + response.compilerOptions, + response.typeAcquisition, + response.unresolvedImports, + response.typings + ); return; case ActionInvalidate: - this.typingsCache.enqueueInstallTypingsForProject( - project, - project.lastCachedUnresolvedImportsList, + project.enqueueInstallTypingsForProject( /*forceRefresh*/ true ); @@ -185514,65 +186581,17 @@ var _ProjectService = class _ProjectService { } /** * This is to watch whenever files are added or removed to the wildcard directories - * - * @internal */ watchWildcardDirectory(directory, flags, configFileName, config) { let watcher = this.watchFactory.watchDirectory( directory, - (fileOrDirectory) => { - const fileOrDirectoryPath = this.toPath(fileOrDirectory); - const fsResult = config.cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); - if (getBaseFileName(fileOrDirectoryPath) === "package.json" && !isInsideNodeModules(fileOrDirectoryPath) && (fsResult && fsResult.fileExists || !fsResult && this.host.fileExists(fileOrDirectory))) { - const file = this.getNormalizedAbsolutePath(fileOrDirectory); - this.logger.info(`Config: ${configFileName} Detected new package.json: ${file}`); - this.packageJsonCache.addOrUpdate(file, fileOrDirectoryPath); - this.watchPackageJsonFile(file, fileOrDirectoryPath, result); - } - const configuredProjectForConfig = this.findConfiguredProjectByProjectName(configFileName); - if (isIgnoredFileFromWildCardWatching({ - watchedDirPath: this.toPath(directory), - fileOrDirectory, - fileOrDirectoryPath, - configFileName, - extraFileExtensions: this.hostConfiguration.extraFileExtensions, - currentDirectory: this.currentDirectory, - options: config.parsedCommandLine.options, - program: (configuredProjectForConfig == null ? void 0 : configuredProjectForConfig.getCurrentProgram()) || config.parsedCommandLine.fileNames, - useCaseSensitiveFileNames: this.host.useCaseSensitiveFileNames, - writeLog: (s) => this.logger.info(s), - toPath: (s) => this.toPath(s), - getScriptKind: configuredProjectForConfig ? (fileName) => configuredProjectForConfig.getScriptKind(fileName) : void 0 - })) return; - if (config.updateLevel !== 2 /* Full */) config.updateLevel = 1 /* RootNamesAndUpdate */; - config.projects.forEach((watchWildcardDirectories, projectCanonicalPath) => { - var _a; - if (!watchWildcardDirectories) return; - const project = this.getConfiguredProjectByCanonicalConfigFilePath(projectCanonicalPath); - if (!project) return; - if (configuredProjectForConfig !== project && this.getHostPreferences().includeCompletionsForModuleExports) { - const path = this.toPath(configFileName); - if (find((_a = project.getCurrentProgram()) == null ? void 0 : _a.getResolvedProjectReferences(), (ref) => (ref == null ? void 0 : ref.sourceFile.path) === path)) { - project.markAutoImportProviderAsDirty(); - } - } - const updateLevel = configuredProjectForConfig === project ? 1 /* RootNamesAndUpdate */ : 0 /* Update */; - if (project.pendingUpdateLevel > updateLevel) return; - if (this.openFiles.has(fileOrDirectoryPath)) { - const info = Debug.checkDefined(this.getScriptInfoForPath(fileOrDirectoryPath)); - if (info.isAttached(project)) { - const loadLevelToSet = Math.max(updateLevel, project.openFileWatchTriggered.get(fileOrDirectoryPath) || 0 /* Update */); - project.openFileWatchTriggered.set(fileOrDirectoryPath, loadLevelToSet); - } else { - project.pendingUpdateLevel = updateLevel; - this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); - } - } else { - project.pendingUpdateLevel = updateLevel; - this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); - } - }); - }, + (fileOrDirectory) => this.onWildCardDirectoryWatcherInvoke( + directory, + configFileName, + config, + result, + fileOrDirectory + ), flags, this.getWatchOptionsFromProjectWatchOptions(config.parsedCommandLine.watchOptions, getDirectoryPath(configFileName)), WatchType.WildcardDirectory, @@ -185595,7 +186614,62 @@ var _ProjectService = class _ProjectService { }; return result; } - /** @internal */ + onWildCardDirectoryWatcherInvoke(directory, configFileName, config, wildCardWatcher, fileOrDirectory) { + const fileOrDirectoryPath = this.toPath(fileOrDirectory); + const fsResult = config.cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + if (getBaseFileName(fileOrDirectoryPath) === "package.json" && !isInsideNodeModules(fileOrDirectoryPath) && (fsResult && fsResult.fileExists || !fsResult && this.host.fileExists(fileOrDirectory))) { + const file = this.getNormalizedAbsolutePath(fileOrDirectory); + this.logger.info(`Config: ${configFileName} Detected new package.json: ${file}`); + this.packageJsonCache.addOrUpdate(file, fileOrDirectoryPath); + this.watchPackageJsonFile(file, fileOrDirectoryPath, wildCardWatcher); + } + if (!(fsResult == null ? void 0 : fsResult.fileExists)) { + this.sendSourceFileChange(fileOrDirectoryPath); + } + const configuredProjectForConfig = this.findConfiguredProjectByProjectName(configFileName); + if (isIgnoredFileFromWildCardWatching({ + watchedDirPath: this.toPath(directory), + fileOrDirectory, + fileOrDirectoryPath, + configFileName, + extraFileExtensions: this.hostConfiguration.extraFileExtensions, + currentDirectory: this.currentDirectory, + options: config.parsedCommandLine.options, + program: (configuredProjectForConfig == null ? void 0 : configuredProjectForConfig.getCurrentProgram()) || config.parsedCommandLine.fileNames, + useCaseSensitiveFileNames: this.host.useCaseSensitiveFileNames, + writeLog: (s) => this.logger.info(s), + toPath: (s) => this.toPath(s), + getScriptKind: configuredProjectForConfig ? (fileName) => configuredProjectForConfig.getScriptKind(fileName) : void 0 + })) return; + if (config.updateLevel !== 2 /* Full */) config.updateLevel = 1 /* RootNamesAndUpdate */; + config.projects.forEach((watchWildcardDirectories, projectCanonicalPath) => { + var _a; + if (!watchWildcardDirectories) return; + const project = this.getConfiguredProjectByCanonicalConfigFilePath(projectCanonicalPath); + if (!project) return; + if (configuredProjectForConfig !== project && this.getHostPreferences().includeCompletionsForModuleExports) { + const path = this.toPath(configFileName); + if (find((_a = project.getCurrentProgram()) == null ? void 0 : _a.getResolvedProjectReferences(), (ref) => (ref == null ? void 0 : ref.sourceFile.path) === path)) { + project.markAutoImportProviderAsDirty(); + } + } + const updateLevel = configuredProjectForConfig === project ? 1 /* RootNamesAndUpdate */ : 0 /* Update */; + if (project.pendingUpdateLevel > updateLevel) return; + if (this.openFiles.has(fileOrDirectoryPath)) { + const info = Debug.checkDefined(this.getScriptInfoForPath(fileOrDirectoryPath)); + if (info.isAttached(project)) { + const loadLevelToSet = Math.max(updateLevel, project.openFileWatchTriggered.get(fileOrDirectoryPath) || 0 /* Update */); + project.openFileWatchTriggered.set(fileOrDirectoryPath, loadLevelToSet); + } else { + project.pendingUpdateLevel = updateLevel; + this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); + } + } else { + project.pendingUpdateLevel = updateLevel; + this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); + } + }); + } delayUpdateProjectsFromParsedConfigOnConfigFileChange(canonicalConfigFilePath, loadReason) { const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); if (!(configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.config)) return false; @@ -185623,7 +186697,6 @@ var _ProjectService = class _ProjectService { }); return scheduledAnyProjectUpdate; } - /** @internal */ onConfigFileChanged(configFileName, canonicalConfigFilePath, eventKind) { const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); const project = this.getConfiguredProjectByCanonicalConfigFilePath(canonicalConfigFilePath); @@ -185845,7 +186918,6 @@ var _ProjectService = class _ProjectService { this.configFileExistenceInfoCache.set(canonicalConfigFilePath, { exists, openFilesImpactedByConfigFile }); return exists; } - /** @internal */ createConfigFileWatcherForParsedConfig(configFileName, canonicalConfigFilePath, forProject) { var _a, _b; const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); @@ -186186,8 +187258,6 @@ var _ProjectService = class _ProjectService { } /** * Read the config file of the project, and update the project root file names. - * - * @internal */ loadConfiguredProject(project, reason) { var _a, _b; @@ -186439,7 +187509,6 @@ var _ProjectService = class _ProjectService { project.markAsDirty(); return project.updateGraph(); } - /** @internal */ reloadFileNamesOfParsedConfig(configFileName, config) { if (config.updateLevel === void 0) return config.parsedCommandLine.fileNames; Debug.assert(config.updateLevel === 1 /* RootNamesAndUpdate */); @@ -186484,7 +187553,6 @@ var _ProjectService = class _ProjectService { true ); } - /** @internal */ clearSemanticCache(project) { project.originalConfiguredProjects = void 0; project.resolutionCache.clear(); @@ -187061,7 +188129,6 @@ Dynamic files must always be opened with service's current directory or service getWatchOptions(project) { return this.getWatchOptionsFromProjectWatchOptions(project.getWatchOptions(), project.getCurrentDirectory()); } - /** @internal */ getWatchOptionsFromProjectWatchOptions(projectOptions, basePath) { const hostWatchOptions = !this.hostConfiguration.beforeSubstitution ? this.hostConfiguration.watchOptions : handleWatchOptionsConfigDirTemplateSubstitution( this.hostConfiguration.beforeSubstitution, @@ -187072,20 +188139,34 @@ Dynamic files must always be opened with service's current directory or service closeLog() { this.logger.close(); } - /** - * This function rebuilds the project for every file opened by the client - * This does not reload contents of open files from disk. But we could do that if needed - */ - reloadProjects() { - this.logger.info("reload projects."); + sendSourceFileChange(inPath) { this.filenameToScriptInfo.forEach((info) => { if (this.openFiles.has(info.path)) return; if (!info.fileWatcher) return; + const eventKind = memoize( + () => this.host.fileExists(info.fileName) ? info.deferredDelete ? 0 /* Created */ : 1 /* Changed */ : 2 /* Deleted */ + ); + if (inPath) { + if (isScriptInfoWatchedFromNodeModules(info) || !info.path.startsWith(inPath)) return; + if (eventKind() === 2 /* Deleted */ && info.deferredDelete) return; + this.logger.info(`Invoking sourceFileChange on ${info.fileName}:: ${eventKind()}`); + } this.onSourceFileChanged( info, - this.host.fileExists(info.fileName) ? info.deferredDelete ? 0 /* Created */ : 1 /* Changed */ : 2 /* Deleted */ + eventKind() ); }); + } + /** + * This function rebuilds the project for every file opened by the client + * This does not reload contents of open files from disk. But we could do that if needed + */ + reloadProjects() { + this.logger.info("reload projects."); + this.sendSourceFileChange( + /*inPath*/ + void 0 + ); this.pendingProjectUpdates.forEach((_project, projectName) => { this.throttledOperations.cancel(projectName); this.pendingProjectUpdates.delete(projectName); @@ -187434,12 +188515,12 @@ Dynamic files must always be opened with service's current directory or service } /** @internal */ loadAncestorProjectTree(forProjects) { - forProjects = forProjects || mapDefinedEntries( - this.configuredProjects, - (key, project) => !project.isInitialLoadPending() ? [key, true] : void 0 - ); + forProjects ?? (forProjects = new Set( + mapDefinedIterator(this.configuredProjects.entries(), ([key, project]) => !project.isInitialLoadPending() ? key : void 0) + )); const seenProjects = /* @__PURE__ */ new Set(); - for (const project of arrayFrom(this.configuredProjects.values())) { + const currentConfiguredProjects = arrayFrom(this.configuredProjects.values()); + for (const project of currentConfiguredProjects) { if (forEachPotentialProjectReference(project, (potentialRefPath) => forProjects.has(potentialRefPath))) { updateProjectIfDirty(project); } @@ -187485,8 +188566,38 @@ Dynamic files must always be opened with service's current directory or service } this.removeOrphanScriptInfos(); } + tryInvokeWildCardDirectories(info) { + this.configFileExistenceInfoCache.forEach((configFileExistenceInfo, config) => { + var _a, _b; + if (!((_a = configFileExistenceInfo.config) == null ? void 0 : _a.parsedCommandLine) || contains( + configFileExistenceInfo.config.parsedCommandLine.fileNames, + info.fileName, + !this.host.useCaseSensitiveFileNames ? equateStringsCaseInsensitive : equateStringsCaseSensitive + )) { + return; + } + (_b = configFileExistenceInfo.config.watchedDirectories) == null ? void 0 : _b.forEach((watcher, directory) => { + if (containsPath(directory, info.fileName, !this.host.useCaseSensitiveFileNames)) { + this.logger.info(`Invoking ${config}:: wildcard for open scriptInfo:: ${info.fileName}`); + this.onWildCardDirectoryWatcherInvoke( + directory, + config, + configFileExistenceInfo.config, + watcher.watcher, + info.fileName + ); + } + }); + }); + } openClientFileWithNormalizedPath(fileName, fileContent, scriptKind, hasMixedContent, projectRootPath) { + const existing = this.getScriptInfoForPath(normalizedPathToPath( + fileName, + projectRootPath ? this.getNormalizedAbsolutePath(projectRootPath) : this.currentDirectory, + this.toCanonicalFileName + )); const info = this.getOrCreateOpenScriptInfo(fileName, fileContent, scriptKind, hasMixedContent, projectRootPath); + if (!existing && info && !info.isDynamic) this.tryInvokeWildCardDirectories(info); const { retainProjects, ...result } = this.assignProjectToOpenedScriptInfo(info); this.cleanupProjectsAndScriptInfos( retainProjects, @@ -187633,10 +188744,16 @@ Dynamic files must always be opened with service's current directory or service } /** @internal */ applyChangesInOpenFiles(openFiles, changedFiles, closedFiles) { + let existingOpenScriptInfos; let openScriptInfos; let assignOrphanScriptInfosToInferredProject = false; if (openFiles) { for (const file of openFiles) { + (existingOpenScriptInfos ?? (existingOpenScriptInfos = [])).push(this.getScriptInfoForPath(normalizedPathToPath( + toNormalizedPath(file.fileName), + file.projectRootPath ? this.getNormalizedAbsolutePath(file.projectRootPath) : this.currentDirectory, + this.toCanonicalFileName + ))); const info = this.getOrCreateOpenScriptInfo( toNormalizedPath(file.fileName), file.content, @@ -187664,6 +188781,10 @@ Dynamic files must always be opened with service's current directory or service } } let retainProjects; + forEach( + existingOpenScriptInfos, + (existing, index) => !existing && openScriptInfos[index] && !openScriptInfos[index].isDynamic ? this.tryInvokeWildCardDirectories(openScriptInfos[index]) : void 0 + ); openScriptInfos == null ? void 0 : openScriptInfos.forEach((info) => { var _a; return (_a = this.assignProjectToOpenedScriptInfo(info).retainProjects) == null ? void 0 : _a.forEach((p) => (retainProjects ?? (retainProjects = /* @__PURE__ */ new Set())).add(p)); @@ -187906,12 +189027,12 @@ Dynamic files must always be opened with service's current directory or service return; } this.logger.info(`Enabling plugin ${pluginConfigEntry.name} from candidate paths: ${searchPaths.join(",")}`); - if (!pluginConfigEntry.name || isExternalModuleNameRelative(pluginConfigEntry.name) || /[\\/]\.\.?($|[\\/])/.test(pluginConfigEntry.name)) { + if (!pluginConfigEntry.name || isExternalModuleNameRelative(pluginConfigEntry.name) || /[\\/]\.\.?(?:$|[\\/])/.test(pluginConfigEntry.name)) { this.logger.info(`Skipped loading plugin ${pluginConfigEntry.name || JSON.stringify(pluginConfigEntry)} because only package name is allowed plugin name`); return; } if (this.host.importPlugin) { - const importPromise = Project3.importServicePluginAsync( + const importPromise = Project2.importServicePluginAsync( pluginConfigEntry, searchPaths, this.host, @@ -187925,7 +189046,7 @@ Dynamic files must always be opened with service's current directory or service } this.endEnablePlugin( project, - Project3.importServicePluginSync( + Project2.importServicePluginSync( pluginConfigEntry, searchPaths, this.host, @@ -187935,7 +189056,6 @@ Dynamic files must always be opened with service's current directory or service } /** * Performs the remaining steps of enabling a plugin after its module has been instantiated. - * @internal */ endEnablePlugin(project, { pluginConfigEntry, resolvedModule, errorLogs }) { var _a; @@ -188051,7 +189171,6 @@ Dynamic files must always be opened with service's current directory or service } }); } - /** @internal */ watchPackageJsonFile(file, path, project) { Debug.assert(project !== void 0); let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); @@ -188092,7 +189211,6 @@ Dynamic files must always be opened with service's current directory or service result.projects.add(project); (project.packageJsonWatches ?? (project.packageJsonWatches = /* @__PURE__ */ new Set())).add(result); } - /** @internal */ onPackageJsonChange(result) { result.projects.forEach((project) => { var _a; @@ -188117,7 +189235,7 @@ Dynamic files must always be opened with service's current directory or service }; /** Makes a filename safe to insert in a RegExp */ _ProjectService.filenameEscapeRegexp = /[-/\\^$*+?.()|[\]{}]/g; -var ProjectService3 = _ProjectService; +var ProjectService2 = _ProjectService; function createIncompleteCompletionsCache() { let info; return { @@ -188161,6 +189279,8 @@ function createModuleSpecifierCache(host) { kind, modulePaths, moduleSpecifiers, + /*packageName*/ + void 0, /*isBlockedByPackageJsonDependencies*/ false )); @@ -188191,16 +189311,19 @@ function createModuleSpecifierCache(host) { modulePaths, /*moduleSpecifiers*/ void 0, + /*packageName*/ + void 0, /*isBlockedByPackageJsonDependencies*/ void 0 )); } }, - setBlockedByPackageJsonDependencies(fromFileName, toFileName2, preferences, options, isBlockedByPackageJsonDependencies) { + setBlockedByPackageJsonDependencies(fromFileName, toFileName2, preferences, options, packageName, isBlockedByPackageJsonDependencies) { const cache2 = ensureCache(fromFileName, preferences, options); const info = cache2.get(toFileName2); if (info) { info.isBlockedByPackageJsonDependencies = isBlockedByPackageJsonDependencies; + info.packageName = packageName; } else { cache2.set(toFileName2, createInfo( /*kind*/ @@ -188209,6 +189332,7 @@ function createModuleSpecifierCache(host) { void 0, /*moduleSpecifiers*/ void 0, + packageName, isBlockedByPackageJsonDependencies )); } @@ -188238,8 +189362,8 @@ function createModuleSpecifierCache(host) { function key(fromFileName, preferences, options) { return `${fromFileName},${preferences.importModuleSpecifierEnding},${preferences.importModuleSpecifierPreference},${options.overrideImportMode}`; } - function createInfo(kind, modulePaths, moduleSpecifiers, isBlockedByPackageJsonDependencies) { - return { kind, modulePaths, moduleSpecifiers, isBlockedByPackageJsonDependencies }; + function createInfo(kind, modulePaths, moduleSpecifiers, packageName, isBlockedByPackageJsonDependencies) { + return { kind, modulePaths, moduleSpecifiers, packageName, isBlockedByPackageJsonDependencies }; } } @@ -188391,11 +189515,12 @@ var MultistepOperation = class { } complete() { if (this.requestId !== void 0) { - this.operationHost.sendRequestCompletedEvent(this.requestId); + this.operationHost.sendRequestCompletedEvent(this.requestId, this.performanceData); this.requestId = void 0; } this.setTimerHandle(void 0); this.setImmediateId(void 0); + this.performanceData = void 0; } immediate(actionType, action) { const requestId = this.requestId; @@ -188403,7 +189528,7 @@ var MultistepOperation = class { this.setImmediateId( this.operationHost.getServerHost().setImmediate(() => { this.immediateId = void 0; - this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action)); + this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action), this.performanceData); }, actionType) ); } @@ -188414,7 +189539,7 @@ var MultistepOperation = class { this.operationHost.getServerHost().setTimeout( () => { this.timerHandle = void 0; - this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action)); + this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action), this.performanceData); }, ms, actionType @@ -188443,6 +189568,7 @@ var MultistepOperation = class { this.operationHost.logError(e, `delayed processing of request ${this.requestId}`); } } + this.performanceData = this.operationHost.getPerformanceData(); if (stop || !this.hasPendingWork()) { this.complete(); } @@ -188796,6 +189922,9 @@ var invalidSyntacticModeCommands = [ var Session3 = class _Session { constructor(opts) { this.changeSeq = 0; + // Minimum number of lines for attempting to use region diagnostics for a file. + /** @internal */ + this.regionDiagLineCountThreshold = 500; this.handlers = new Map(Object.entries({ // TODO(jakebailey): correctly type the handlers ["status" /* Status */]: () => { @@ -188896,7 +190025,10 @@ var Session3 = class _Session { }, ["exit" /* Exit */]: () => { this.exit(); - return this.notRequired(); + return this.notRequired( + /*request*/ + void 0 + ); }, ["definition" /* Definition */]: (request) => { return this.requiredResponse(this.getDefinition( @@ -188988,7 +190120,7 @@ var Session3 = class _Session { // TODO: GH#18217 request.arguments.projectRootPath ? toNormalizedPath(request.arguments.projectRootPath) : void 0 ); - return this.notRequired(); + return this.notRequired(request); }, ["quickinfo" /* Quickinfo */]: (request) => { return this.requiredResponse(this.getQuickInfoWorker( @@ -189138,41 +190270,39 @@ var Session3 = class _Session { }, ["geterr" /* Geterr */]: (request) => { this.errorCheck.startNew((next) => this.getDiagnostics(next, request.arguments.delay, request.arguments.files)); - return this.notRequired(); + return this.notRequired( + /*request*/ + void 0 + ); }, ["geterrForProject" /* GeterrForProject */]: (request) => { this.errorCheck.startNew((next) => this.getDiagnosticsForProject(next, request.arguments.delay, request.arguments.file)); - return this.notRequired(); + return this.notRequired( + /*request*/ + void 0 + ); }, ["change" /* Change */]: (request) => { this.change(request.arguments); - return this.notRequired(); + return this.notRequired(request); }, ["configure" /* Configure */]: (request) => { this.projectService.setHostConfiguration(request.arguments); - this.doOutput( - /*info*/ - void 0, - "configure" /* Configure */, - request.seq, - /*success*/ - true - ); - return this.notRequired(); + return this.notRequired(request); }, ["reload" /* Reload */]: (request) => { - this.reload(request.arguments, request.seq); + this.reload(request.arguments); return this.requiredResponse({ reloadFinished: true }); }, ["saveto" /* Saveto */]: (request) => { const savetoArgs = request.arguments; this.saveToTmp(savetoArgs.file, savetoArgs.tmpfile); - return this.notRequired(); + return this.notRequired(request); }, ["close" /* Close */]: (request) => { const closeArgs = request.arguments; this.closeClientFile(closeArgs.file); - return this.notRequired(); + return this.notRequired(request); }, ["navto" /* Navto */]: (request) => { return this.requiredResponse(this.getNavigateToItems( @@ -189254,9 +190384,9 @@ var Session3 = class _Session { ["projectInfo" /* ProjectInfo */]: (request) => { return this.requiredResponse(this.getProjectInfo(request.arguments)); }, - ["reloadProjects" /* ReloadProjects */]: () => { + ["reloadProjects" /* ReloadProjects */]: (request) => { this.projectService.reloadProjects(); - return this.notRequired(); + return this.notRequired(request); }, ["jsxClosingTag" /* JsxClosingTag */]: (request) => { return this.requiredResponse(this.getJsxClosingTag(request.arguments)); @@ -189351,15 +190481,7 @@ var Session3 = class _Session { }, ["configurePlugin" /* ConfigurePlugin */]: (request) => { this.configurePlugin(request.arguments); - this.doOutput( - /*info*/ - void 0, - "configurePlugin" /* ConfigurePlugin */, - request.seq, - /*success*/ - true - ); - return this.notRequired(); + return this.notRequired(request); }, ["selectionRange" /* SelectionRange */]: (request) => { return this.requiredResponse(this.getSmartSelectionRange( @@ -189459,11 +190581,12 @@ var Session3 = class _Session { const { throttleWaitMilliseconds } = opts; this.eventHandler = this.canUseEvents ? opts.eventHandler || ((event) => this.defaultEventHandler(event)) : void 0; const multistepOperationHost = { - executeWithRequestId: (requestId, action) => this.executeWithRequestId(requestId, action), + executeWithRequestId: (requestId, action, performanceData) => this.executeWithRequestId(requestId, action, performanceData), getCurrentRequestId: () => this.currentRequestId, + getPerformanceData: () => this.performanceData, getServerHost: () => this.host, logError: (err, cmd) => this.logError(err, cmd), - sendRequestCompletedEvent: (requestId) => this.sendRequestCompletedEvent(requestId), + sendRequestCompletedEvent: (requestId, performanceData) => this.sendRequestCompletedEvent(requestId, performanceData), isCancellationRequested: () => this.cancellationToken.isCancellationRequested() }; this.errorCheck = new MultistepOperation(multistepOperationHost); @@ -189486,7 +190609,7 @@ var Session3 = class _Session { canUseWatchEvents: opts.canUseWatchEvents, incrementalVerifier: opts.incrementalVerifier }; - this.projectService = new ProjectService3(settings); + this.projectService = new ProjectService2(settings); this.projectService.setPerformanceEventHandler(this.performanceEventHandler.bind(this)); this.gcTimer = new GcTimer( this.host, @@ -189515,8 +190638,14 @@ var Session3 = class _Session { Debug.assertNever(this.projectService.serverMode); } } - sendRequestCompletedEvent(requestId) { - this.event({ request_seq: requestId }, "requestCompleted"); + sendRequestCompletedEvent(requestId, performanceData) { + this.event( + { + request_seq: requestId, + performanceData: performanceData && toProtocolPerformanceData(performanceData) + }, + "requestCompleted" + ); } addPerformanceData(key, value) { if (!this.performanceData) { @@ -189524,6 +190653,15 @@ var Session3 = class _Session { } this.performanceData[key] = (this.performanceData[key] ?? 0) + value; } + addDiagnosticsPerformanceData(file, kind, duration) { + var _a, _b; + if (!this.performanceData) { + this.performanceData = {}; + } + let fileDiagnosticDuration = (_a = this.performanceData.diagnosticsDuration) == null ? void 0 : _a.get(file); + if (!fileDiagnosticDuration) ((_b = this.performanceData).diagnosticsDuration ?? (_b.diagnosticsDuration = /* @__PURE__ */ new Map())).set(file, fileDiagnosticDuration = {}); + fileDiagnosticDuration[kind] = duration; + } performanceEventHandler(event) { switch (event.kind) { case "UpdateGraph": @@ -189666,23 +190804,21 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter this.writeMessage(msg); } writeMessage(msg) { - var _a; const msgText = formatMessage2(msg, this.logger, this.byteLength, this.host.newLine); - (_a = perfLogger) == null ? void 0 : _a.logEvent(`Response message size: ${msgText.length}`); this.host.write(msgText); } event(body, eventName) { this.send(toEvent(eventName, body)); } /** @internal */ - doOutput(info, cmdName, reqSeq, success, message) { + doOutput(info, cmdName, reqSeq, success, performanceData, message) { const res = { seq: 0, type: "response", command: cmdName, request_seq: reqSeq, success, - performanceData: this.performanceData + performanceData: performanceData && toProtocolPerformanceData(performanceData) }; if (success) { let metadata; @@ -189712,32 +190848,70 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter } semanticCheck(file, project) { var _a, _b; + const diagnosticsStartTime = timestamp(); (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "semanticCheck", { file, configFilePath: project.canonicalConfigFilePath }); const diags = isDeclarationFileInJSOnlyNonConfiguredProject(project, file) ? emptyArray2 : project.getLanguageService().getSemanticDiagnostics(file).filter((d) => !!d.file); - this.sendDiagnosticsEvent(file, project, diags, "semanticDiag"); + this.sendDiagnosticsEvent(file, project, diags, "semanticDiag", diagnosticsStartTime); (_b = tracing) == null ? void 0 : _b.pop(); } syntacticCheck(file, project) { var _a, _b; + const diagnosticsStartTime = timestamp(); (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "syntacticCheck", { file, configFilePath: project.canonicalConfigFilePath }); - this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSyntacticDiagnostics(file), "syntaxDiag"); + this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSyntacticDiagnostics(file), "syntaxDiag", diagnosticsStartTime); (_b = tracing) == null ? void 0 : _b.pop(); } suggestionCheck(file, project) { var _a, _b; + const diagnosticsStartTime = timestamp(); (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "suggestionCheck", { file, configFilePath: project.canonicalConfigFilePath }); - this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSuggestionDiagnostics(file), "suggestionDiag"); + this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSuggestionDiagnostics(file), "suggestionDiag", diagnosticsStartTime); (_b = tracing) == null ? void 0 : _b.pop(); } - sendDiagnosticsEvent(file, project, diagnostics, kind) { + regionSemanticCheck(file, project, ranges) { + var _a, _b, _c; + const diagnosticsStartTime = timestamp(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "regionSemanticCheck", { file, configFilePath: project.canonicalConfigFilePath }); + let diagnosticsResult; + if (!this.shouldDoRegionCheck(file) || !(diagnosticsResult = project.getLanguageService().getRegionSemanticDiagnostics(file, ranges))) { + (_b = tracing) == null ? void 0 : _b.pop(); + return; + } + this.sendDiagnosticsEvent(file, project, diagnosticsResult.diagnostics, "regionSemanticDiag", diagnosticsStartTime, diagnosticsResult.spans); + (_c = tracing) == null ? void 0 : _c.pop(); + return; + } + // We should only do the region-based semantic check if we think it would be + // considerably faster than a whole-file semantic check. + /** @internal */ + shouldDoRegionCheck(file) { + var _a; + const lineCount = (_a = this.projectService.getScriptInfoForNormalizedPath(file)) == null ? void 0 : _a.textStorage.getLineInfo().getLineCount(); + return !!(lineCount && lineCount >= this.regionDiagLineCountThreshold); + } + sendDiagnosticsEvent(file, project, diagnostics, kind, diagnosticsStartTime, spans) { try { - this.event({ file, diagnostics: diagnostics.map((diag2) => formatDiag(file, project, diag2)) }, kind); + const scriptInfo = Debug.checkDefined(project.getScriptInfo(file)); + const duration = timestamp() - diagnosticsStartTime; + const body = { + file, + diagnostics: diagnostics.map((diag2) => formatDiag(file, project, diag2)), + spans: spans == null ? void 0 : spans.map((span) => toProtocolTextSpan(span, scriptInfo)) + }; + this.event( + body, + kind + ); + this.addDiagnosticsPerformanceData(file, kind, duration); } catch (err) { this.logError(err, kind); } } /** It is the caller's responsibility to verify that `!this.suppressDiagnosticEvents`. */ updateErrorCheck(next, checkList, ms, requireOpen = true) { + if (checkList.length === 0) { + return; + } Debug.assert(!this.suppressDiagnosticEvents); const seq = this.changeSeq; const followMs = Math.min(ms, 200); @@ -189745,20 +190919,36 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter const goNext = () => { index++; if (checkList.length > index) { - next.delay("checkOne", followMs, checkOne); + return next.delay("checkOne", followMs, checkOne); } }; + const doSemanticCheck = (fileName, project) => { + this.semanticCheck(fileName, project); + if (this.changeSeq !== seq) { + return; + } + if (this.getPreferences(fileName).disableSuggestions) { + return goNext(); + } + next.immediate("suggestionCheck", () => { + this.suggestionCheck(fileName, project); + goNext(); + }); + }; const checkOne = () => { if (this.changeSeq !== seq) { return; } + let ranges; let item = checkList[index]; if (isString(item)) { item = this.toPendingErrorCheck(item); - if (!item) { - goNext(); - return; - } + } else if ("ranges" in item) { + ranges = item.ranges; + item = this.toPendingErrorCheck(item.file); + } + if (!item) { + return goNext(); } const { fileName, project } = item; updateProjectIfDirty(project); @@ -189770,23 +190960,21 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter return; } if (project.projectService.serverMode !== 0 /* Semantic */) { - goNext(); - return; + return goNext(); } - next.immediate("semanticCheck", () => { - this.semanticCheck(fileName, project); - if (this.changeSeq !== seq) { - return; - } - if (this.getPreferences(fileName).disableSuggestions) { - goNext(); - return; - } - next.immediate("suggestionCheck", () => { - this.suggestionCheck(fileName, project); - goNext(); + if (ranges) { + return next.immediate("regionSemanticCheck", () => { + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(fileName); + if (scriptInfo) { + this.regionSemanticCheck(fileName, project, ranges.map((range) => this.getRange({ file: fileName, ...range }, scriptInfo))); + } + if (this.changeSeq !== seq) { + return; + } + next.immediate("semanticCheck", () => doSemanticCheck(fileName, project)); }); - }); + } + next.immediate("semanticCheck", () => doSemanticCheck(fileName, project)); }; if (checkList.length > index && this.changeSeq === seq) { next.delay("checkOne", ms, checkOne); @@ -190023,7 +191211,7 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter const packageDirectory = fileName.substring(0, nodeModulesPathParts.packageRootIndex); const packageJsonCache = (_a2 = project.getModuleResolutionCache()) == null ? void 0 : _a2.getPackageJsonInfoCache(); const compilerOptions = project.getCompilationSettings(); - const packageJson = getPackageScopeForPath(getNormalizedAbsolutePath(packageDirectory + "/package.json", project.getCurrentDirectory()), getTemporaryModuleResolutionState(packageJsonCache, project, compilerOptions)); + const packageJson = getPackageScopeForPath(getNormalizedAbsolutePath(packageDirectory, project.getCurrentDirectory()), getTemporaryModuleResolutionState(packageJsonCache, project, compilerOptions)); if (!packageJson) return void 0; const entrypoints = getEntrypointsFromPackageJsonInfo( packageJson, @@ -190707,42 +191895,12 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter const prefix = args.prefix || ""; const entries = mapDefined(completions.entries, (entry) => { if (completions.isMemberCompletion || startsWith(entry.name.toLowerCase(), prefix.toLowerCase())) { - const { - name, - kind: kind2, - kindModifiers, - sortText, - insertText, - filterText, - replacementSpan, - hasAction, - source, - sourceDisplay, - labelDetails, - isSnippet, - isRecommended, - isPackageJsonImport, - isImportStatementCompletion, - data - } = entry; - const convertedSpan = replacementSpan ? toProtocolTextSpan(replacementSpan, scriptInfo) : void 0; + const convertedSpan = entry.replacementSpan ? toProtocolTextSpan(entry.replacementSpan, scriptInfo) : void 0; return { - name, - kind: kind2, - kindModifiers, - sortText, - insertText, - filterText, + ...entry, replacementSpan: convertedSpan, - isSnippet, - hasAction: hasAction || void 0, - source, - sourceDisplay, - labelDetails, - isRecommended, - isPackageJsonImport, - isImportStatementCompletion, - data + hasAction: entry.hasAction || void 0, + symbol: void 0 }; } }); @@ -190865,12 +192023,12 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter const project = this.projectService.tryGetDefaultProjectForFile(fileName); return project && { fileName, project }; } - getDiagnostics(next, delay, fileNames) { + getDiagnostics(next, delay, fileArgs) { if (this.suppressDiagnosticEvents) { return; } - if (fileNames.length > 0) { - this.updateErrorCheck(next, fileNames, delay); + if (fileArgs.length > 0) { + this.updateErrorCheck(next, fileArgs, delay); } } change(args) { @@ -190891,22 +192049,13 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter ); } } - reload(args, reqSeq) { + reload(args) { const file = toNormalizedPath(args.file); const tempFileName = args.tmpfile === void 0 ? void 0 : toNormalizedPath(args.tmpfile); const info = this.projectService.getScriptInfoForNormalizedPath(file); if (info) { this.changeSeq++; - if (info.reloadFromFile(tempFileName)) { - this.doOutput( - /*info*/ - void 0, - "reload" /* Reload */, - reqSeq, - /*success*/ - true - ); - } + info.reloadFromFile(tempFileName); } } saveToTmp(fileName, tempFileName) { @@ -191455,11 +192604,20 @@ ${e.message}`; } exit() { } - notRequired() { - return { responseRequired: false }; + notRequired(request) { + if (request) this.doOutput( + /*info*/ + void 0, + request.command, + request.seq, + /*success*/ + true, + this.performanceData + ); + return { responseRequired: false, performanceData: this.performanceData }; } requiredResponse(response) { - return { response, responseRequired: true }; + return { response, responseRequired: true, performanceData: this.performanceData }; } addProtocolHandler(command, handler) { if (this.handlers.has(command)) { @@ -191477,18 +192635,27 @@ ${e.message}`; this.currentRequestId = void 0; this.cancellationToken.resetRequest(requestId); } - executeWithRequestId(requestId, f) { + // eslint-disable-line @typescript-eslint/unified-signatures + executeWithRequestId(requestId, f, perfomanceData) { + const currentPerformanceData = this.performanceData; try { + this.performanceData = perfomanceData; this.setCurrentRequest(requestId); return f(); } finally { this.resetCurrentRequest(requestId); + this.performanceData = currentPerformanceData; } } executeCommand(request) { const handler = this.handlers.get(request.command); if (handler) { - const response = this.executeWithRequestId(request.seq, () => handler(request)); + const response = this.executeWithRequestId( + request.seq, + () => handler(request), + /*perfomanceData*/ + void 0 + ); this.projectService.enableRequestedPlugins(); return response; } else { @@ -191500,16 +192667,18 @@ ${e.message}`; request.seq, /*success*/ false, + /*performanceData*/ + void 0, `Unrecognized JSON command: ${request.command}` ); return { responseRequired: false }; } } onMessage(message) { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k; + var _a, _b, _c, _d, _e, _f, _g; this.gcTimer.scheduleCollect(); - this.performanceData = void 0; let start; + const currentPerformanceData = this.performanceData; if (this.logger.hasLevel(2 /* requestTime */)) { start = this.hrtime(); if (this.logger.hasLevel(3 /* verbose */)) { @@ -191522,16 +192691,15 @@ ${e.message}`; request = this.parseMessage(message); relevantFile = request.arguments && request.arguments.file ? request.arguments : void 0; (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "request", { seq: request.seq, command: request.command }); - (_b = perfLogger) == null ? void 0 : _b.logStartCommand("" + request.command, this.toStringMessage(message).substring(0, 100)); - (_c = tracing) == null ? void 0 : _c.push( + (_b = tracing) == null ? void 0 : _b.push( tracing.Phase.Session, "executeCommand", { seq: request.seq, command: request.command }, /*separateBeginAndEnd*/ true ); - const { response, responseRequired } = this.executeCommand(request); - (_d = tracing) == null ? void 0 : _d.pop(); + const { response, responseRequired, performanceData } = this.executeCommand(request); + (_c = tracing) == null ? void 0 : _c.pop(); if (this.logger.hasLevel(2 /* requestTime */)) { const elapsedTime = hrTimeToMilliseconds(this.hrtime(start)).toFixed(4); if (responseRequired) { @@ -191540,15 +192708,15 @@ ${e.message}`; this.logger.perftrc(`${request.seq}::${request.command}: async elapsed time (in milliseconds) ${elapsedTime}`); } } - (_e = perfLogger) == null ? void 0 : _e.logStopCommand("" + request.command, "Success"); - (_f = tracing) == null ? void 0 : _f.instant(tracing.Phase.Session, "response", { seq: request.seq, command: request.command, success: !!response }); + (_d = tracing) == null ? void 0 : _d.instant(tracing.Phase.Session, "response", { seq: request.seq, command: request.command, success: !!response }); if (response) { this.doOutput( response, request.command, request.seq, /*success*/ - true + true, + performanceData ); } else if (responseRequired) { this.doOutput( @@ -191558,26 +192726,26 @@ ${e.message}`; request.seq, /*success*/ false, + performanceData, "No content available." ); } } catch (err) { - (_g = tracing) == null ? void 0 : _g.popAll(); + (_e = tracing) == null ? void 0 : _e.popAll(); if (err instanceof OperationCanceledException) { - (_h = perfLogger) == null ? void 0 : _h.logStopCommand("" + (request && request.command), "Canceled: " + err); - (_i = tracing) == null ? void 0 : _i.instant(tracing.Phase.Session, "commandCanceled", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command }); + (_f = tracing) == null ? void 0 : _f.instant(tracing.Phase.Session, "commandCanceled", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command }); this.doOutput( { canceled: true }, request.command, request.seq, /*success*/ - true + true, + this.performanceData ); return; } this.logErrorWorker(err, this.toStringMessage(message), relevantFile); - (_j = perfLogger) == null ? void 0 : _j.logStopCommand("" + (request && request.command), "Error: " + err); - (_k = tracing) == null ? void 0 : _k.instant(tracing.Phase.Session, "commandError", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command, message: err.message }); + (_g = tracing) == null ? void 0 : _g.instant(tracing.Phase.Session, "commandError", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command, message: err.message }); this.doOutput( /*info*/ void 0, @@ -191585,8 +192753,11 @@ ${e.message}`; request ? request.seq : 0, /*success*/ false, + this.performanceData, "Error processing request. " + err.message + "\n" + err.stack ); + } finally { + this.performanceData = currentPerformanceData; } } parseMessage(message) { @@ -191608,6 +192779,10 @@ ${e.message}`; return this.projectService.getHostPreferences(); } }; +function toProtocolPerformanceData(performanceData) { + const diagnosticsDuration = performanceData.diagnosticsDuration && arrayFrom(performanceData.diagnosticsDuration, ([file, data]) => ({ ...data, file })); + return { ...performanceData, diagnosticsDuration }; +} function toProtocolTextSpan(textSpan, scriptInfo) { return { start: scriptInfo.positionToLineOffset(textSpan.start), @@ -192588,20 +193763,19 @@ __export(ts_server_exports4, { LogLevel: () => LogLevel2, Msg: () => Msg, OpenFileInfoTelemetryEvent: () => OpenFileInfoTelemetryEvent, - Project: () => Project3, + Project: () => Project2, ProjectInfoTelemetryEvent: () => ProjectInfoTelemetryEvent, ProjectKind: () => ProjectKind, ProjectLanguageServiceStateEvent: () => ProjectLanguageServiceStateEvent, ProjectLoadingFinishEvent: () => ProjectLoadingFinishEvent, ProjectLoadingStartEvent: () => ProjectLoadingStartEvent, - ProjectService: () => ProjectService3, + ProjectService: () => ProjectService2, ProjectsUpdatedInBackgroundEvent: () => ProjectsUpdatedInBackgroundEvent, ScriptInfo: () => ScriptInfo, ScriptVersionCache: () => ScriptVersionCache, Session: () => Session3, TextStorage: () => TextStorage, ThrottledOperations: () => ThrottledOperations, - TypingsCache: () => TypingsCache, TypingsInstallerAdapter: () => TypingsInstallerAdapter, allFilesAreJsOrDts: () => allFilesAreJsOrDts, allRootFilesAreJsOrDts: () => allRootFilesAreJsOrDts, @@ -192620,7 +193794,6 @@ __export(ts_server_exports4, { createSortedArray: () => createSortedArray2, emptyArray: () => emptyArray2, findArgument: () => findArgument, - forEachResolvedProjectReferenceProject: () => forEachResolvedProjectReferenceProject, formatDiagnosticToProtocol: () => formatDiagnosticToProtocol, formatMessage: () => formatMessage2, getBaseConfigFileName: () => getBaseConfigFileName, @@ -192646,7 +193819,6 @@ __export(ts_server_exports4, { nullCancellationToken: () => nullCancellationToken, nullTypingsInstaller: () => nullTypingsInstaller, protocol: () => ts_server_protocol_exports, - removeSorted: () => removeSorted, stringifyIndented: () => stringifyIndented, toEvent: () => toEvent, toNormalizedPath: () => toNormalizedPath, @@ -192724,7 +193896,6 @@ if (typeof console !== "undefined") { GoToDefinition, HighlightSpanKind, IdentifierNameMap, - IdentifierNameMultiMap, ImportKind, ImportsNotUsedAsValues, IndentStyle, @@ -192735,6 +193906,7 @@ if (typeof console !== "undefined") { InlayHintKind, InlayHints, InternalEmitFlags, + InternalNodeBuilderFlags, InternalSymbolName, IntersectionFlags, InvalidatedProjectKind, @@ -192781,6 +193953,7 @@ if (typeof console !== "undefined") { PollingInterval, PollingWatchKind, PragmaKindFlags, + PredicateSemantics, PrivateIdentifierKind, ProcessLevel, ProgramUpdateLevel, @@ -192811,7 +193984,6 @@ if (typeof console !== "undefined") { SymbolFlags, SymbolFormatFlags, SyntaxKind, - SyntheticSymbolKind, Ternary, ThrottledCancellationToken, TokenClass, @@ -192834,7 +194006,6 @@ if (typeof console !== "undefined") { WatchLogLevel, WatchType, accessPrivateIdentifier, - addDisposableResourceHelper, addEmitFlags, addEmitHelper, addEmitHelpers, @@ -192857,23 +194028,15 @@ if (typeof console !== "undefined") { arrayFrom, arrayIsEqualTo, arrayIsHomogeneous, - arrayIsSorted, arrayOf, arrayReverseIterator, arrayToMap, arrayToMultiMap, arrayToNumericMap, - arraysEqual, assertType, assign, - assignHelper, - asyncDelegator, - asyncGeneratorHelper, asyncSuperHelper, - asyncValues, attachFileToDiagnostics, - awaitHelper, - awaiterHelper, base64decode, base64encode, binarySearch, @@ -192886,6 +194049,7 @@ if (typeof console !== "undefined") { buildOverload, bundlerModuleNameResolver, canBeConvertedToAsync, + canEmitTsBuildInfo, canHaveDecorators, canHaveExportModifier, canHaveFlowNode, @@ -192896,8 +194060,9 @@ if (typeof console !== "undefined") { canHaveJSDoc, canHaveLocals, canHaveModifiers, + canHaveModuleSpecifier, canHaveSymbol, - canIncludeBindAndCheckDiagnsotics, + canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles, canProduceDiagnostics, canUsePropertyAccess, @@ -192914,16 +194079,13 @@ if (typeof console !== "undefined") { changeFullExtension, changesAffectModuleResolution, changesAffectingProgramStructure, - characterToRegularExpressionFlag, + characterCodeToRegularExpressionFlag, childIsDecorated, classElementOrClassElementParameterIsDecorated, classHasClassThisAssignment, classHasDeclaredOrExplicitlyAssignedName, classHasExplicitlyAssignedName, classOrConstructorParameterIsDecorated, - classPrivateFieldGetHelper, - classPrivateFieldInHelper, - classPrivateFieldSetHelper, classicNameResolver, classifier, cleanExtendedConfigCache, @@ -192931,7 +194093,6 @@ if (typeof console !== "undefined") { clearMap, clearSharedExtendedConfigFileWatcher, climbPastPropertyAccess, - climbPastPropertyOrElementAccess, clone, cloneCompilerOptions, closeFileWatcher, @@ -192944,12 +194105,10 @@ if (typeof console !== "undefined") { commandLineOptionOfCustomType, commentPragmas, commonOptionsWithBuild, - commonPackageFolders, compact, compareBooleans, compareDataObjects, compareDiagnostics, - compareDiagnosticsSkipRelatedInformation, compareEmitHelpers, compareNumberOfDirectorySeparators, comparePaths, @@ -192963,26 +194122,21 @@ if (typeof console !== "undefined") { compareStringsCaseSensitiveUI, compareTextSpans, compareValues, - compileOnSaveCommandLineOption, compilerOptionsAffectDeclarationPath, compilerOptionsAffectEmit, compilerOptionsAffectSemanticDiagnostics, compilerOptionsDidYouMeanDiagnostics, compilerOptionsIndicateEsModules, - compose, computeCommonSourceDirectoryOfFilenames, computeLineAndCharacterOfPosition, computeLineOfPosition, computeLineStarts, computePositionOfLineAndCharacter, - computeSignature, computeSignatureWithDiagnostics, computeSuggestionDiagnostics, computedOptions, concatenate, concatenateDiagnosticMessageChains, - configDirTemplateSubstitutionOptions, - configDirTemplateSubstitutionWatchOptions, consumesNodeCoreModules, contains, containsIgnoredPath, @@ -193013,16 +194167,11 @@ if (typeof console !== "undefined") { createAccessorPropertySetRedirector, createBaseNodeFactory, createBinaryExpressionTrampoline, - createBindingHelper, - createBuildInfo, createBuilderProgram, - createBuilderProgramUsingProgramBuildInfo, + createBuilderProgramUsingIncrementalBuildInfo, createBuilderStatusReporter, - createCacheWithRedirects, createCacheableExportInfoMap, createCachedDirectoryStructureHost, - createClassNamedEvaluationHelperBlock, - createClassThisAssignmentBlock, createClassifier, createCommentDirectivesMap, createCompilerDiagnostic, @@ -193074,6 +194223,7 @@ if (typeof console !== "undefined") { createMemberAccessForPropertyName, createModeAwareCache, createModeAwareCacheKey, + createModeMismatchDetails, createModuleNotFoundChain, createModuleResolutionCache, createModuleResolutionLoader, @@ -193144,9 +194294,7 @@ if (typeof console !== "undefined") { declarationNameToString, decodeMappings, decodedTextSpanIntersectsWith, - decorateHelper, deduplicate, - defaultIncludeSpec, defaultInitCompilerOptions, defaultMaximumTruncationLength, diagnosticCategoryName, @@ -193157,27 +194305,22 @@ if (typeof console !== "undefined") { displayPart, displayPartsToString, disposeEmitNodes, - disposeResourcesHelper, documentSpansEqual, dumpTracingLegend, elementAt, elideNodes, - emitComments, emitDetachedComments, emitFiles, emitFilesAndReportErrors, emitFilesAndReportErrorsAndGetExitStatus, emitModuleKindIsNonNodeESM, emitNewLineBeforeLeadingCommentOfPosition, - emitNewLineBeforeLeadingComments, - emitNewLineBeforeLeadingCommentsOfPosition, emitResolverSkipsTypeChecking, emitSkippedWithNoDiagnostics, emptyArray, emptyFileSystemEntries, emptyMap, emptyOptions, - emptySet, endsWith, ensurePathIsNonModuleName, ensureScriptKind, @@ -193188,7 +194331,6 @@ if (typeof console !== "undefined") { equateStringsCaseInsensitive, equateStringsCaseSensitive, equateValues, - esDecorateHelper, escapeJsxAttributeString, escapeLeadingUnderscores, escapeNonAsciiString, @@ -193202,15 +194344,14 @@ if (typeof console !== "undefined") { explainFiles, explainIfFileIsRedirectAndImpliedFormat, exportAssignmentIsAlias, - exportStarHelper, expressionResultIsUnused, extend, - extendsHelper, extensionFromPath, extensionIsTS, extensionsNotSupportingExtensionlessResolution, externalHelpersModuleNameText, factory, + fileContainsPackageImport, fileExtensionIs, fileExtensionIsOneOf, fileIncludeReasonToDiagnostics, @@ -193232,7 +194373,6 @@ if (typeof console !== "undefined") { findLast, findLastIndex, findListItemInfo, - findMap, findModifier, findNextToken, findPackageJson, @@ -193280,7 +194420,6 @@ if (typeof console !== "undefined") { forEachTsConfigPropArray, forEachUnique, forEachYieldExpression, - forSomeAncestorDirectory, formatColorAndReset, formatDiagnostic, formatDiagnostics, @@ -193291,11 +194430,8 @@ if (typeof console !== "undefined") { formatMessage, formatStringFromArgs, formatting, - fullTripleSlashAMDReferencePathRegEx, - fullTripleSlashReferencePathRegEx, generateDjb2Hash, generateTSConfig, - generatorHelper, getAdjustedReferenceLocation, getAdjustedRenameLocation, getAliasDeclarationFromName, @@ -193314,7 +194450,6 @@ if (typeof console !== "undefined") { getAreDeclarationMapsEnabled, getAssignedExpandoInitializer, getAssignedName, - getAssignedNameOfIdentifier, getAssignmentDeclarationKind, getAssignmentDeclarationPropertyAccessKind, getAssignmentTargetKind, @@ -193355,7 +194490,6 @@ if (typeof console !== "undefined") { getContainingObjectLiteralElement, getContextualTypeFromParent, getContextualTypeFromParentOrAncestorTypeNode, - getCurrentTime, getDeclarationDiagnostics, getDeclarationEmitExtensionForPath, getDeclarationEmitOutputFilePath, @@ -193373,6 +194507,7 @@ if (typeof console !== "undefined") { getDefaultLibFilePath, getDefaultLikeExportInfo, getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker, getDiagnosticText, getDiagnosticsWithinSpan, getDirectoryPath, @@ -193403,6 +194538,7 @@ if (typeof console !== "undefined") { getEmitFlags, getEmitHelpers, getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker, getEmitModuleKind, getEmitModuleResolutionKind, getEmitScriptTarget, @@ -193453,11 +194589,11 @@ if (typeof console !== "undefined") { getIdentifierGeneratedImportReference, getIdentifierTypeArguments, getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker, getImpliedNodeFormatForFile, getImpliedNodeFormatForFileWorker, getImportNeedsImportDefaultHelper, getImportNeedsImportStarHelper, - getIndentSize, getIndentString, getInferredLibraryNameResolveFrom, getInitializedVariables, @@ -193466,6 +194602,7 @@ if (typeof console !== "undefined") { getInterfaceBaseTypeNodes, getInternalEmitFlags, getInvokedExpression, + getIsFileExcluded, getIsolatedModules, getJSDocAugmentsTag, getJSDocClassTag, @@ -193494,7 +194631,6 @@ if (typeof console !== "undefined") { getJSDocSatisfiesExpressionType, getJSDocSatisfiesTag, getJSDocTags, - getJSDocTagsNoCache, getJSDocTemplateTag, getJSDocThisTag, getJSDocType, @@ -193518,7 +194654,6 @@ if (typeof console !== "undefined") { getLineAndCharacterOfPosition, getLineInfo, getLineOfLocalPosition, - getLineOfLocalPositionFromLineMap, getLineStartPositionForPosition, getLineStarts, getLinesBetweenPositionAndNextNonWhitespaceCharacter, @@ -193560,7 +194695,6 @@ if (typeof console !== "undefined") { getNameOfScriptTarget, getNameOrArgument, getNameTable, - getNamesForExportedSymbol, getNamespaceDeclarationNode, getNewLineCharacter, getNewLineKind, @@ -193577,49 +194711,43 @@ if (typeof console !== "undefined") { getNonAssignmentOperatorForCompoundAssignment, getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode, getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents, getObjectFlags, - getOperator, getOperatorAssociativity, getOperatorPrecedence, getOptionFromName, getOptionsForLibraryResolution, getOptionsNameMap, getOrCreateEmitNode, - getOrCreateExternalHelpersModuleNameIfNeeded, getOrUpdate, getOriginalNode, getOriginalNodeId, - getOriginalSourceFile, getOutputDeclarationFileName, getOutputDeclarationFileNameWorker, getOutputExtension, getOutputFileNames, getOutputJSFileNameWorker, getOutputPathsFor, - getOutputPathsForBundle, getOwnEmitOutputFilePath, getOwnKeys, getOwnValues, - getPackageJsonInfo, getPackageJsonTypesVersionsPaths, - getPackageJsonsVisibleToFile, getPackageNameFromTypesPackageName, getPackageScopeForPath, getParameterSymbolFromJSDoc, - getParameterTypeNode, getParentNodeInSpan, getParseTreeNode, getParsedCommandLineOfConfigFile, getPathComponents, - getPathComponentsRelativeTo, getPathFromPathComponents, getPathUpdater, getPathsBasePath, getPatternFromSpec, - getPendingEmitKind, + getPendingEmitKindWithSeen, getPositionOfLineAndCharacter, getPossibleGenericSignatures, getPossibleOriginalInputExtensionForExtension, @@ -193632,7 +194760,6 @@ if (typeof console !== "undefined") { getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode, - getPropertyNameForUniqueESSymbol, getPropertyNameFromType, getPropertyNameOfBindingOrAssignmentElement, getPropertySymbolFromBindingElement, @@ -193656,13 +194783,14 @@ if (typeof console !== "undefined") { getResolvePackageJsonExports, getResolvePackageJsonImports, getResolvedExternalModuleName, + getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution, getRestIndicatorOfBindingOrAssignmentElement, getRestParameterElementType, getRightMostAssignedExpression, getRootDeclaration, getRootDirectoryOfResolutionCache, getRootLength, - getRootPathSplitLength, getScriptKind, getScriptKindFromFileName, getScriptTargetFeatures, @@ -193674,14 +194802,12 @@ if (typeof console !== "undefined") { getSetAccessorValueParameter, getSetExternalModuleIndicator, getShebang, - getSingleInitializerOfVariableStatementOrPropertyDeclaration, getSingleVariableOfVariableStatement, getSnapshotText, getSnippetElement, getSourceFileOfModule, getSourceFileOfNode, getSourceFilePathInNewDir, - getSourceFilePathInNewDirWorker, getSourceFileVersionAsHashFromText, getSourceFilesToEmit, getSourceMapRange, @@ -193704,7 +194830,6 @@ if (typeof console !== "undefined") { getSwitchedType, getSymbolId, getSymbolNameForPrivateIdentifier, - getSymbolParentOrFail, getSymbolTarget, getSyntacticClassifications, getSyntacticModifierFlags, @@ -193735,7 +194860,6 @@ if (typeof console !== "undefined") { getTouchingToken, getTrailingCommentRanges, getTrailingSemicolonDeferringWriter, - getTransformFlagsSubtreeExclusions, getTransformers, getTsBuildInfoEmitOutputFilePath, getTsConfigObjectLiteralExpression, @@ -193763,7 +194887,6 @@ if (typeof console !== "undefined") { hasAccessorModifier, hasAmbientModifier, hasChangesInResolutions, - hasChildOfKind, hasContextSensitiveParameters, hasDecorators, hasDocComment, @@ -193772,6 +194895,7 @@ if (typeof console !== "undefined") { hasEffectiveModifiers, hasEffectiveReadonlyModifier, hasExtension, + hasImplementationTSFileExtension, hasIndexSignature, hasInferredType, hasInitializer, @@ -193799,7 +194923,6 @@ if (typeof console !== "undefined") { hasType, hasTypeArguments, hasZeroOrOneAsteriskCharacter, - helperString, hostGetCanonicalFileName, hostUsesCaseSensitiveFileNames, idText, @@ -193809,9 +194932,8 @@ if (typeof console !== "undefined") { identitySourceMapConsumer, ignoreSourceNewlines, ignoredPaths, - importDefaultHelper, importFromModuleSpecifier, - importStarHelper, + importSyntaxAffectsModuleResolution, indexOfAnyCharCode, indexOfNode, indicesOf, @@ -193819,7 +194941,6 @@ if (typeof console !== "undefined") { injectClassNamedEvaluationHelperBlockIfMissing, injectClassThisAssignmentIfMissing, insertImports, - insertLeadingStatement, insertSorted, insertStatementAfterCustomPrologue, insertStatementAfterStandardPrologue, @@ -193835,11 +194956,9 @@ if (typeof console !== "undefined") { isAccessibilityModifier, isAccessor, isAccessorModifier, - isAliasSymbolDeclaration, isAliasableExpression, isAmbientModule, isAmbientPropertyDeclaration, - isAnonymousFunctionDefinition, isAnyDirectorySeparator, isAnyImportOrBareOrAccessedRequire, isAnyImportOrReExport, @@ -193875,6 +194994,7 @@ if (typeof console !== "undefined") { isAwaitKeyword, isBigIntLiteral, isBinaryExpression, + isBinaryLogicalOperator, isBinaryOperatorToken, isBindableObjectDefinePropertyCall, isBindableStaticAccessExpression, @@ -193915,7 +195035,6 @@ if (typeof console !== "undefined") { isCatchClauseVariableDeclaration, isCatchClauseVariableDeclarationOrBindingElement, isCheckJsEnabledForFile, - isChildOfNodeWithKind, isCircularBuildOrder, isClassDeclaration, isClassElement, @@ -193927,7 +195046,6 @@ if (typeof console !== "undefined") { isClassOrTypeElement, isClassStaticBlockDeclaration, isClassThisAssignmentBlock, - isCollapsedRange, isColonToken, isCommaExpression, isCommaListExpression, @@ -193970,16 +195088,13 @@ if (typeof console !== "undefined") { isDeleteTarget, isDeprecatedDeclaration, isDestructuringAssignment, - isDiagnosticWithLocation, isDiskPathRoot, isDoStatement, isDocumentRegistryEntry, isDotDotDotToken, isDottedName, isDynamicName, - isESSymbolIdentifier, isEffectiveExternalModule, - isEffectiveModuleDeclaration, isEffectiveStrictModeSourceFile, isElementAccessChain, isElementAccessExpression, @@ -194049,13 +195164,11 @@ if (typeof console !== "undefined") { isFunctionOrModuleBlock, isFunctionSymbol, isFunctionTypeNode, - isFutureReservedKeyword, isGeneratedIdentifier, isGeneratedPrivateIdentifier, isGetAccessor, isGetAccessorDeclaration, isGetOrSetAccessorDeclaration, - isGlobalDeclaration, isGlobalScopeAugmentation, isGlobalSourceFile, isGrammarError, @@ -194103,6 +195216,8 @@ if (typeof console !== "undefined") { isInTemplateString, isInTopLevelContext, isInTypeQuery, + isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo, isIncrementalCompilation, isIndexSignatureDeclaration, isIndexedAccessTypeNode, @@ -194209,7 +195324,6 @@ if (typeof console !== "undefined") { isLabeledStatement, isLateVisibilityPaintedStatement, isLeftHandSideExpression, - isLeftHandSideOfAssignment, isLet, isLineBreak, isLiteralComputedPropertyDeclarationName, @@ -194217,10 +195331,7 @@ if (typeof console !== "undefined") { isLiteralExpressionOfObject, isLiteralImportTypeNode, isLiteralKind, - isLiteralLikeAccess, - isLiteralLikeElementAccess, isLiteralNameOfPropertyDeclarationOrIndexAccess, - isLiteralTypeLikeExpression, isLiteralTypeLiteral, isLiteralTypeNode, isLocalName, @@ -194245,6 +195356,7 @@ if (typeof console !== "undefined") { isModuleBlock, isModuleBody, isModuleDeclaration, + isModuleExportName, isModuleExportsAccessExpression, isModuleIdentifier, isModuleName, @@ -194254,7 +195366,6 @@ if (typeof console !== "undefined") { isModuleWithStringLiteralName, isNameOfFunctionDeclaration, isNameOfModuleDeclaration, - isNamedClassElement, isNamedDeclaration, isNamedEvaluation, isNamedEvaluationSource, @@ -194272,7 +195383,6 @@ if (typeof console !== "undefined") { isNewExpression, isNewExpressionTarget, isNoSubstitutionTemplateLiteral, - isNode, isNodeArray, isNodeArrayMultiLine, isNodeDescendantOf, @@ -194281,14 +195391,11 @@ if (typeof console !== "undefined") { isNodeModulesDirectory, isNodeWithPossibleHoistedDeclaration, isNonContextualKeyword, - isNonExportDefaultModifier, isNonGlobalAmbientModule, - isNonGlobalDeclaration, isNonNullAccess, isNonNullChain, isNonNullExpression, isNonStaticMethodOrAccessorWithPrivateName, - isNotEmittedOrPartiallyEmittedNode, isNotEmittedStatement, isNullishCoalesce, isNumber, @@ -194304,7 +195411,6 @@ if (typeof console !== "undefined") { isObjectLiteralMethod, isObjectLiteralOrClassExpressionMethodOrAccessor, isObjectTypeDeclaration, - isOctalDigit, isOmittedExpression, isOptionalChain, isOptionalChainRoot, @@ -194338,7 +195444,6 @@ if (typeof console !== "undefined") { isPrivateIdentifierClassElementDeclaration, isPrivateIdentifierPropertyAccessExpression, isPrivateIdentifierSymbol, - isProgramBundleEmitBuildInfo, isProgramUptoDate, isPrologueDirective, isPropertyAccessChain, @@ -194351,7 +195456,6 @@ if (typeof console !== "undefined") { isPropertyName, isPropertyNameLiteral, isPropertySignature, - isProtoSetter, isPrototypeAccess, isPrototypePropertyAssignment, isPunctuation, @@ -194361,7 +195465,6 @@ if (typeof console !== "undefined") { isQuestionOrExclamationToken, isQuestionOrPlusOrMinusToken, isQuestionToken, - isRawSourceMap, isReadonlyKeyword, isReadonlyKeywordOrPlusOrMinusToken, isRecognizedTripleSlashComment, @@ -194383,24 +195486,22 @@ if (typeof console !== "undefined") { isRootedDiskPath, isSameEntityName, isSatisfiesExpression, - isScopeMarker, isSemicolonClassElement, isSetAccessor, isSetAccessorDeclaration, - isShebangTrivia, isShiftOperatorOrHigher, isShorthandAmbientModuleSymbol, isShorthandPropertyAssignment, + isSideEffectImport, isSignedNumericLiteral, isSimpleCopiableExpression, isSimpleInlineableExpression, - isSimpleParameter, isSimpleParameterList, isSingleOrDoubleQuote, + isSourceElement, isSourceFile, isSourceFileFromLibrary, isSourceFileJS, - isSourceFileNotJS, isSourceFileNotJson, isSourceMapping, isSpecialPropertyDeclaration, @@ -194413,7 +195514,6 @@ if (typeof console !== "undefined") { isStatic, isStaticModifier, isString, - isStringAKeyword, isStringANonContextualKeyword, isStringAndEmptyAnonymousObjectIntersection, isStringDoubleQuoted, @@ -194426,7 +195526,6 @@ if (typeof console !== "undefined") { isStringTextContainingNode, isSuperCall, isSuperKeyword, - isSuperOrSuperProperty, isSuperProperty, isSupportedSourceFileName, isSwitchStatement, @@ -194472,7 +195571,6 @@ if (typeof console !== "undefined") { isTypeDeclaration, isTypeElement, isTypeKeyword, - isTypeKeywordToken, isTypeKeywordTokenOrIdentifier, isTypeLiteralNode, isTypeNode, @@ -194527,10 +195625,6 @@ if (typeof console !== "undefined") { libMap, libs, lineBreakPart, - linkNamePart, - linkPart, - linkTextPart, - listFiles, loadModuleFromGlobalCache, loadWithModeAwareCache, makeIdentifierFromModuleName, @@ -194540,7 +195634,6 @@ if (typeof console !== "undefined") { map, mapAllOrFail, mapDefined, - mapDefinedEntries, mapDefinedIterator, mapEntries, mapIterator, @@ -194550,18 +195643,19 @@ if (typeof console !== "undefined") { matchPatternOrExact, matchedText, matchesExclude, + maxBy, maybeBind, maybeSetLocalizedDiagnosticMessages, memoize, - memoizeCached, memoizeOne, - memoizeWeak, - metadataHelper, min, minAndMax, missingFileModifiedTime, modifierToFlag, modifiersToFlags, + moduleExportNameIsDefault, + moduleExportNameTextEscaped, + moduleExportNameTextUnescaped, moduleOptionDeclaration, moduleResolutionIsEqualTo, moduleResolutionNameAndModeGetter, @@ -194601,11 +195695,11 @@ if (typeof console !== "undefined") { nodePosToString, nodeSeenTracker, nodeStartsNewLexicalEnvironment, - nodeToDisplayParts, noop, noopFileWatcher, normalizePath, normalizeSlashes, + normalizeSpans, not, notImplemented, notImplementedResolver, @@ -194620,13 +195714,11 @@ if (typeof console !== "undefined") { optionsForBuild, optionsForWatch, optionsHaveChanges, - optionsHaveModuleResolutionChanges, or, orderedRemoveItem, orderedRemoveItemAt, packageIdToPackageName, packageIdToString, - paramHelper, parameterIsThisKeyword, parameterNamePart, parseBaseNodeFactory, @@ -194657,10 +195749,8 @@ if (typeof console !== "undefined") { pathIsBareSpecifier, pathIsRelative, patternText, - perfLogger, performIncrementalCompilation, performance, - plainJSErrors, positionBelongsToNode, positionIsASICandidate, positionIsSynthesized, @@ -194673,7 +195763,6 @@ if (typeof console !== "undefined") { programContainsEsModules, programContainsModules, projectReferenceIsEqualTo, - propKeyHelper, propertyNamePart, pseudoBigIntToString, punctuationPart, @@ -194696,7 +195785,6 @@ if (typeof console !== "undefined") { rangeStartPositionsAreOnSameLine, readBuilderProgram, readConfigFile, - readHelper, readJson, readJsonConfigFile, readJsonOrUndefined, @@ -194707,7 +195795,7 @@ if (typeof console !== "undefined") { reducePathComponents, refactor, regExpEscape, - regularExpressionFlagToCharacter, + regularExpressionFlagToCharacterCode, relativeComplement, removeAllComments, removeEmitHelper, @@ -194715,7 +195803,6 @@ if (typeof console !== "undefined") { removeFileExtension, removeIgnoredPath, removeMinAndVersionNumbers, - removeOptionality, removePrefix, removeSuffix, removeTrailingDirectorySeparator, @@ -194734,20 +195821,16 @@ if (typeof console !== "undefined") { resolveTripleslashReference, resolveTypeReferenceDirective, resolvingEmptyArray, - restHelper, returnFalse, returnNoopFileWatcher, returnTrue, returnUndefined, returnsPromise, - runInitializersHelper, sameFlatMap, sameMap, sameMapping, - scanShebangTrivia, scanTokenAtPosition, scanner, - screenStartingMessageCodes, semanticDiagnosticsOptionDeclarations, serializeCompilerOptions, server, @@ -194755,16 +195838,13 @@ if (typeof console !== "undefined") { setCommentRange, setConfigFileInOptions, setConstantValue, - setEachParent, setEmitFlags, - setFunctionNameHelper, setGetSourceFileAsHashVersioned, setIdentifierAutoGenerate, setIdentifierGeneratedImportReference, setIdentifierTypeArguments, setInternalEmitFlags, setLocalizedDiagnosticMessages, - setModuleDefaultHelper, setNodeChildren, setNodeFlags, setObjectAllocator, @@ -194793,7 +195873,6 @@ if (typeof console !== "undefined") { shouldPreserveConstEnums, shouldUseUriStyleNodeCoreModules, showModuleSpecifier, - signatureHasLiteralTypes, signatureHasRestParameter, signatureToDisplayParts, single, @@ -194802,18 +195881,17 @@ if (typeof console !== "undefined") { singleOrMany, singleOrUndefined, skipAlias, - skipAssertions, skipConstraint, skipOuterExpressions, skipParentheses, skipPartiallyEmittedExpressions, skipTrivia, skipTypeChecking, + skipTypeCheckingIgnoringNoCheck, skipTypeParentheses, skipWhile, sliceAfter, some, - sort, sortAndDeduplicate, sortAndDeduplicateDiagnostics, sourceFileAffectingCompilerOptions, @@ -194822,8 +195900,6 @@ if (typeof console !== "undefined") { sourceMapCommentRegExpDontCareLineStart, spacePart, spanMap, - spreadArrayHelper, - stableSort, startEndContainsRange, startEndOverlapsWithStartEnd, startOnNewLine, @@ -194836,10 +195912,8 @@ if (typeof console !== "undefined") { stringToToken, stripQuotes, supportedDeclarationExtensions, - supportedJSExtensions, supportedJSExtensionsFlat, supportedLocaleDirectories, - supportedTSExtensions, supportedTSExtensionsFlat, supportedTSImplementationExtensions, suppressLeadingAndTrailingTrivia, @@ -194848,16 +195922,12 @@ if (typeof console !== "undefined") { symbolEscapedNameNoDefault, symbolName, symbolNameNoDefault, - symbolPart, symbolToDisplayParts, - syntaxMayBeASICandidate, - syntaxRequiresTrailingSemicolonOrASI, sys, sysLog, tagNamesAreEquivalent, takeWhile, targetOptionDeclaration, - templateObjectHelper, testFormatSettings, textChangeRangeIsUnchanged, textChangeRangeNewSpan, @@ -194865,7 +195935,10 @@ if (typeof console !== "undefined") { textOrKeywordPart, textPart, textRangeContainsPositionInclusive, + textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan, textSpanContainsPosition, + textSpanContainsTextRange, textSpanContainsTextSpan, textSpanEnd, textSpanIntersection, @@ -194883,9 +195956,9 @@ if (typeof console !== "undefined") { toBuilderStateFileInfoForMultiEmit, toEditorSettings, toFileNameLowerCase, - toLowerCase, toPath, toProgramEmitPending, + toSorted, tokenIsIdentifierOrKeyword, tokenIsIdentifierOrKeywordOrGreaterThan, tokenToString, @@ -194907,11 +195980,11 @@ if (typeof console !== "undefined") { transformESDecorators, transformESNext, transformGenerators, + transformImpliedNodeFormatDependentModule, transformJsx, transformLegacyDecorators, transformModule, transformNamedEvaluation, - transformNodeModule, transformNodes, transformSystemModule, transformTypeScript, @@ -194938,7 +196011,6 @@ if (typeof console !== "undefined") { tryGetPropertyNameOfBindingOrAssignmentElement, tryGetSourceMappingURL, tryGetTextOfPropertyName, - tryIOAndConsumeErrors, tryParseJson, tryParsePattern, tryParsePatterns, @@ -194960,7 +196032,6 @@ if (typeof console !== "undefined") { unescapeLeadingUnderscores, unmangleScopedPackageName, unorderedRemoveItem, - unorderedRemoveItemAt, unreachableCodeIsError, unsetNodeChildren, unusedLabelIsError, @@ -194973,11 +196044,9 @@ if (typeof console !== "undefined") { updateSharedExtendedConfigFileWatcher, updateSourceFile, updateWatchingWildcardDirectories, - usesExtensionsOnImports, usingSingleLineStringWriter, utf16EncodeAsString, validateLocaleAndSetLanguage, - valuesHelper, version, versionMajorMinor, visitArray, @@ -194990,7 +196059,6 @@ if (typeof console !== "undefined") { visitNodes, visitParameterList, walkUpBindingElementsAndPatterns, - walkUpLexicalEnvironments, walkUpOuterExpressions, walkUpParenthesizedExpressions, walkUpParenthesizedTypes, diff --git a/node_modules/typescript/lib/typingsInstaller.js b/node_modules/typescript/lib/typingsInstaller.js index 3b2d0e0eeb..64d72785f2 100644 --- a/node_modules/typescript/lib/typingsInstaller.js +++ b/node_modules/typescript/lib/typingsInstaller.js @@ -50,6 +50,7 @@ __export(nodeTypingsInstaller_exports, { NodeTypingsInstaller: () => NodeTypingsInstaller }); module.exports = __toCommonJS(nodeTypingsInstaller_exports); +var import_child_process = require("child_process"); var fs = __toESM(require("fs")); var path = __toESM(require("path")); @@ -68,7 +69,7 @@ var FileLog = class { if (typeof this.logFile !== "string") return; try { fs.appendFileSync(this.logFile, `[${typescript_exports.server.nowString()}] ${text}${typescript_exports.sys.newLine}`); - } catch (e) { + } catch { this.logFile = void 0; } }; @@ -127,7 +128,6 @@ var NodeTypingsInstaller = class extends typescript_exports.server.typingsInstal this.log.writeLine(`NPM location: ${this.npmPath} (explicit '${typescript_exports.server.Arguments.NpmLocation}' ${npmLocation2 === void 0 ? "not " : ""} provided)`); this.log.writeLine(`validateDefaultNpmLocation: ${validateDefaultNpmLocation2}`); } - ({ execSync: this.nodeExecSync } = require("child_process")); this.ensurePackageDirectoryExists(globalTypingsCacheLocation2); try { if (this.log.isEnabled()) { @@ -182,7 +182,7 @@ var NodeTypingsInstaller = class extends typescript_exports.server.typingsInstal this.log.writeLine(`Exec: ${command}`); } try { - const stdout = this.nodeExecSync(command, { ...options, encoding: "utf-8" }); + const stdout = (0, import_child_process.execFileSync)(command, { ...options, encoding: "utf-8" }); if (this.log.isEnabled()) { this.log.writeLine(` Succeeded. stdout:${indent(typescript_exports.sys.newLine, stdout)}`); } diff --git a/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json b/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json index b222445278..0a00506dc7 100644 --- a/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "所有编译器选项", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "“{0}”修饰符不能与导入声明一起使用。", "A_0_parameter_must_be_the_first_parameter_2680": "“{0}”参数必须是第一个参数。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc“@template”标记不能跟在“@typedef”、“@callback”或“@overload”标记后面", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc \"@typedef\" 注释不能包含多个 \"@type\" 标记。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "“bigint”文本不能用作属性名称。", "A_bigint_literal_cannot_use_exponential_notation_1352": "BigInt 字面量中不能使用指数符号。", "A_bigint_literal_must_be_an_integer_1353": "BigInt 字面量必须是整数。", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "绑定模式参数在实现签名中不能为可选参数。", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "\"break\" 语句只能在封闭迭代或 switch 语句内使用。", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "\"break\" 语句只能跳转到封闭语句的标签。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字符类不得包含保留的双标点符号。你是否想要使用反斜杠对其进行转义?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字符类范围不能由另一个字符类绑定。", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "类只能实现具有可选类型参数的标识符/限定名称。", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "类只能实现具有静态已知成员的对象类型或对象类型的交集。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "类无法扩展“{0}”这样的基元类型。类只能扩展可构造值。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "类无法实现类似于“{0}”的基元类型。它只能实现其他命名对象类型。", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不带 \"default\" 修饰符的类声明必须具有名称。", "A_class_member_cannot_have_the_0_keyword_1248": "类成员不可具有“{0}”关键字。", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "计算属性名中不允许逗号表达式。", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "构造函数不可具有 \"this\" 参数。", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "\"continue\" 语句只能在封闭迭代语句内使用。", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "\"continue\" 语句只能跳转到封闭迭代语句的标签。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "如果没有“导入类型”,则无法导入声明文件。是否要改为导入实现文件“{0}”?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不能在已有的环境上下文中使用 \"declare\" 修饰符。", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "修饰器仅可修饰方法实现,而不可修饰重载。", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "\"default\" 子句在 \"switch\" 语句中只能出现一次。", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "默认导出必须位于文件或模块声明的顶层。", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此上下文中不允许明确的赋值断言 \"!\"。", "A_destructuring_declaration_must_have_an_initializer_1182": "析构声明必须具有初始化表达式。", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的动态导入调用需要 “Promise” 构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的动态导入调用需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "动态导入调用返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", "A_file_cannot_have_a_reference_to_itself_1006": "文件不能引用自身。", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "返回“从不”的函数不能具有可访问的终结点。", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "使用 'new' 关键字调用的函数的 'this' 类型不能为 'void'。", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "其声明类型不为 \"void\" 或 \"any\" 的函数必须返回值。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "其声明类型不为 \"undefined\"、\"void\" 或 \"any\" 的函数必须返回值。", "A_generator_cannot_have_a_void_type_annotation_2505": "生成器不能具有 \"void\" 类型批注。", "A_get_accessor_cannot_have_parameters_1054": "\"get\" 访问器不能具有参数。", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get 访问器必须至少具有与 Setter 相同的可访问性", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空间声明必须位于与之合并的类或函数所在的相同文件内。", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空间声明不能位于与之合并的类或函数前", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空间声明只允许位于命名空间或模块的顶层。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不应使用 \"module\" 关键字声明 \"namespace\" 声明。请改用 \"namespace\" 关键字。", "A_non_dry_build_would_build_project_0_6357": "非 -dry 生成将生成项目“{0}”", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 生成将删除以下文件: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "非 dry 生成将更新项目 '{0}' 的输出", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 dry 生成将更新项目 '{0}' 的输出的时间戳", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只允许在函数或构造函数实现中使用参数初始化表达式。", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "不能使用 rest 参数声明参数属性。", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "当派生类包含初始化属性、参数属性或专用标识符时,“super” 调用必须是构造函数中用来引用 “super” 或 “this” 的第一个语句。", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "基于 \"this\" 的类型防护与基于参数的类型防护不兼容。", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "\"this\" 类型仅在类或接口的非静态成员中可用。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "启用“verbatimModuleSyntax”时,不能对 CommonJS 模块中的值声明使用顶级“export”修饰符。", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "已在“{0}”中定义了 \"tsconfig.json\" 文件。", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元组成员不能既是可选的又是 rest。", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "不能使用负值为元组类型编制索引。", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只允许在生成器正文中使用 \"yield\" 表达式。", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "无法通过 super 表达式访问“{1}”类中的“{0}”抽象方法。", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只能出现在抽象类中。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象属性只能出现在抽象类中。", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "不能在构造函数中访问类“{1}”中的抽象属性“{0}”。", "Accessibility_modifier_already_seen_1028": "已看到可访问性修饰符。", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "访问器仅在面向 ECMAScript 5 和更高版本时可用。", "Accessors_must_both_be_abstract_or_non_abstract_2676": "两个取值函数必须都是抽象的或都是非抽象的。", "Add_0_to_unresolved_variable_90008": "将“{0}.”添加到未解析的变量", "Add_a_return_statement_95111": "添加 return 语句", + "Add_a_return_type_to_the_function_declaration_9031": "将返回类型添加到函数声明。", + "Add_a_return_type_to_the_function_expression_9030": "将返回类型添加到函数表达式。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "将返回类型添加到 get 访问器声明。", + "Add_a_return_type_to_the_method_9034": "向方法添加返回类型", + "Add_a_type_annotation_to_the_parameter_0_9028": "向参数 {0} 添加类型注释。", + "Add_a_type_annotation_to_the_property_0_9029": "向属性 {0} 添加类型注释。", + "Add_a_type_annotation_to_the_variable_0_9027": "向变量 {0} 添加类型注释。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "将类型添加到 set 访问器声明的参数。", "Add_all_missing_async_modifiers_95041": "添加所有缺失的 \"async\" 修饰符", "Add_all_missing_attributes_95168": "添加所有缺少的属性", "Add_all_missing_call_parentheses_95068": "添加所有缺失的调用括号", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "添加所有缺少的导入", "Add_all_missing_members_95022": "添加所有缺少的成员", "Add_all_missing_override_modifiers_95162": "添加所有缺失的 \"override\" 修饰符", + "Add_all_missing_parameters_95190": "添加所有缺少的参数", "Add_all_missing_properties_95166": "添加所有缺少的属性", "Add_all_missing_return_statement_95114": "添加所有缺少的 return 语句", "Add_all_missing_super_calls_95039": "添加所有缺失的 super() 调用", + "Add_all_missing_type_annotations_90067": "添加所有缺少的类型注释", + "Add_all_optional_parameters_95193": "添加所有可选参数", + "Add_annotation_of_type_0_90062": "添加类型为“{0}”的注释", "Add_async_modifier_to_containing_function_90029": "将异步修饰符添加到包含函数", "Add_await_95083": "添加 \"await\"", "Add_await_to_initializer_for_0_95084": "将 \"await\" 添加到 \"{0}\" 的初始值设定项", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "将初始化表达式添加到未初始化的所有属性", "Add_missing_attributes_95167": "添加缺少的属性", "Add_missing_call_parentheses_95067": "添加缺失的调用括号", + "Add_missing_comma_for_object_member_completion_0_95187": "为对象成员完成“{0}”添加缺少的逗号。", "Add_missing_enum_member_0_95063": "添加缺少的枚举成员 \"{0}\"", "Add_missing_function_declaration_0_95156": "添加缺少的函数声明 \"{0}\"", "Add_missing_new_operator_to_all_calls_95072": "将缺少的 \"new\" 运算符添加到所有调用", "Add_missing_new_operator_to_call_95071": "将缺少的 \"new\" 运算符添加到调用", + "Add_missing_parameter_to_0_95188": "将缺少的参数添加到“{0}”", + "Add_missing_parameters_to_0_95189": "将缺少的参数添加到“{0}”", "Add_missing_properties_95165": "添加缺少的属性", "Add_missing_super_call_90001": "添加缺失的 \"super()\" 调用", "Add_missing_typeof_95052": "添加缺少的 \"typeof\"", "Add_names_to_all_parameters_without_names_95073": "为没有名称的所有参数添加名称", + "Add_optional_parameter_to_0_95191": "将可选参数添加到“{0}”", + "Add_optional_parameters_to_0_95192": "将可选参数添加到“{0}”", "Add_or_remove_braces_in_an_arrow_function_95058": "添加或删除箭头函数中的大括号", "Add_override_modifier_95160": "添加 \"override\" 修饰符", "Add_parameter_name_90034": "添加参数名称", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "将限定符添加到匹配成员名称的所有未解析变量", + "Add_return_type_0_90063": "添加返回类型“{0}”", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "将 satisfies 和类型断言添加到此表达式 (satisfies T as T) 以使类型显式。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "使用“{0}”添加 satisfies 和内联类型断言", "Add_to_all_uncalled_decorators_95044": "将 \"()\" 添加到所有未调用的修饰器", "Add_ts_ignore_to_all_error_messages_95042": "将 \"@ts-ignore\" 添加到所有错误消息", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引访问时,将 “undefined” 添加到类型。", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允许从不带默认输出的模块中默认输入。这不会影响代码发出,只是类型检查。", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "当模块没有默认导出时,允许“从 y 导入 x”。", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允许每个项目从 tslib 导入帮助程序函数一次,而不是将它们包含在每个文件中。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允许导入包含 TypeScript 文件扩展名。需要设置“--moduleResolution bundler”以及“--noEmit”或“--emitDeclarationOnly”。", "Allow_javascript_files_to_be_compiled_6102": "允许编译 JavaScript 文件。", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "允许在解析模块时将多个文件夹视为一个文件夹。", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的文件名 \"{0}\" 仅大小写与文件名 \"{1}\" 不同。", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供与此绑定模式匹配的自变量。", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算术操作数必须为类型 \"any\"、\"number\"、\"bigint\" 或枚举类型。", "An_arrow_function_cannot_have_a_this_parameter_2730": "箭头函数不能包含 \"this\" 参数。", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的异步函数或方法需要 “Promise” 构造函数。请确保具有一个 “Promise” 构造函数的声明,或在 “--lib” 选项中包含了 “ES2015”。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的异步函数或方法需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "异步函数或方法必须返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", "An_async_iterator_must_have_a_next_method_2519": "异步迭代器必须具有 \"next()\" 方法。", "An_element_access_expression_should_take_an_argument_1011": "元素访问表达式应采用参数。", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "导出声明只能在模块的顶层使用。", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "导出声明只能在命名空间或模块的顶层使用。", "An_export_declaration_cannot_have_modifiers_1193": "导出声明不能有修饰符。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export =”声明必须引用实际值。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "启用“verbatimModuleSyntax”时,“export =”声明必须引用值,但“{0}”仅引用类型。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export default”必须引用实际值。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "启用“verbatimModuleSyntax”时,“export default”必须引用一个值,但“{0}”只引用了一个类型。", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "无法测试 \"void\" 类型的表达式的真实性。", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "扩展的 Unicode 转义值必须介于(含) 0x0 和 0x10FFFF 之间。", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "标识符或关键字不能紧跟在数字字面量之后。", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不能在环境上下文中声明实现。", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "导入别名不能引用使用 \"export type\" 导出的声明。", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "导入别名不能引用使用 \"import type\" 导入的声明。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "启用“verbatimModuleSyntax”时,导入别名无法解析为类型或仅类型声明。", "An_import_alias_cannot_use_import_type_1392": "导入别名不能使用“导入类型”", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "导入声明只能在模块的顶层使用。", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "导入声明只能在命名空间或模块的顶层使用。", "An_import_declaration_cannot_have_modifiers_1191": "导入声明不能有修饰符。", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "导入路径不能以“{0}”扩展名结束。考虑改为导入“{1}”。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "启用“allowImportingTsExtensions”时,导入路径只能以“{0}”扩展名结尾。", "An_index_signature_cannot_have_a_rest_parameter_1017": "索引签名不能包含 rest 参数。", "An_index_signature_cannot_have_a_trailing_comma_1025": "索引签名不能包含尾随逗号。", "An_index_signature_must_have_a_type_annotation_1021": "索引签名必须具有类型批注。", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "实例化表达式不能后跟属性访问。", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "接口只能扩展具有可选类型参数的标识符/限定名称。", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "接口只能扩展使用静态已知成员的对象类型或对象类型的交集。", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "接口无法扩展基元类型,如“{0}”;接口只能扩展命名类型和类", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "接口无法扩展“{0}”这样的基元类型。它只能扩展其他命名对象类型。", "An_interface_property_cannot_have_an_initializer_1246": "接口函数不能具有初始化表达式。", "An_iterator_must_have_a_next_method_2489": "迭代器必须具有 \"next()\" 方法。", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "将 @jsx 杂注与 JSX 片段一起使用时,需要使用 @jsxFrag 杂注。", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "对象文本不能具有多个名称相同的属性。", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "对象文字不能包含具有相同名称的属性和访问器。", "An_object_member_cannot_be_declared_optional_1162": "对象成员无法声明为可选。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "对象的“[Symbol.hasInstance]”方法必须返回布尔值,这样它才能在“instanceof”表达式的右侧使用。", "An_optional_chain_cannot_contain_private_identifiers_18030": "可选链不能包含专用标识符。", "An_optional_element_cannot_follow_a_rest_element_1266": "可选元素不能跟在 rest 元素之后。", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器隐藏了 \"this\" 的外部值。", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "重载签名无法声明为生成器。", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘方表达式的左侧不允许存在具有“{0}”运算符的一元表达式。请考虑用括号将表达式括起。", "Annotate_everything_with_types_from_JSDoc_95043": "使用 JSDoc 中的类型批注所有内容", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "注释命名空间中属性 expando 函数的类型", "Annotate_with_type_from_JSDoc_95009": "通过 JSDoc 类型批注", "Another_export_default_is_here_2753": "这里是其他导出默认值。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "任何可能匹配多个字符的 Unicode 属性仅在设置 Unicode Sets (v) 标志时可用。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "可能匹配多个字符的任何内容在被否定的字符类中无效。", "Are_you_missing_a_semicolon_2734": "是否缺少分号?", "Argument_expression_expected_1135": "应为参数表达式。", "Argument_for_0_option_must_be_Colon_1_6046": "“{0}”选项的参数必须为 {1}。", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "类型为“{0}”的参数不能分配给类型为“{1}”且 “exactOptionalPropertyTypes: true” 的参数。请考虑将 “undefined” 添加到目标属性的类型。", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供 rest 形参“{0}”的实参。", "Array_element_destructuring_pattern_expected_1181": "应为数组元素析构模式。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "无法使用 --isolatedDeclarations 推断具有分布元素的数组。", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "断言要求使用显式类型注释声明调用目标中的每个名称。", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "断言要求调用目标为标识符或限定名。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "--isolatedDeclarations 不支持将属性分配给不声明它们的函数。为分配给此函数的属性添加显式声明。", "Asterisk_Slash_expected_1010": "应为 \"*/\"。", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "至少一个访问器必须具有带有 --isolatedDeclarations 的显式返回类型注释。", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全局范围的扩大仅可直接嵌套在外部模块中或环境模块声明中。", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "全局范围的扩大应具有 \"declare\" 修饰符,除非它们显示在已有的环境上下文中。", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "项目“{0}”中启用了键入内容的自动发现。使用缓存位置“{2}”运行模块“{1}”的额外解决传递。", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "无法在类静态块内使用 await 表达式。", "BUILD_OPTIONS_6919": "生成选项", "Backwards_Compatibility_6253": "向后兼容性", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基类表达式无法引用类类型参数。", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "目标低于 ES2020 时,BigInt 字面量不可用。", "Binary_digit_expected_1177": "需要二进制数字。", "Binding_element_0_implicitly_has_an_1_type_7031": "绑定元素“{0}”隐式具有“{1}”类型。", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "绑定元素不能直接使用 --isolatedDeclarations 导出。", "Block_scoped_variable_0_used_before_its_declaration_2448": "声明之前已使用的块范围变量“{0}”。", "Build_a_composite_project_in_the_working_directory_6925": "在工作目录中生成复合项目。", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "生成所有项目,包括那些似乎是最新的项目。", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "生成一个或多个项目及其依赖项(如果已过期)", "Build_option_0_requires_a_value_of_type_1_5073": "生成选项 \"{0}\" 需要类型 {1} 的值。", "Building_project_0_6358": "正在生成项目“{0}”...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "内置迭代器实例化时,“TReturn”类型为“undefined”而不是“any”。", "COMMAND_LINE_FLAGS_6921": "命令行标记", "COMMON_COMMANDS_6916": "常见命令", "COMMON_COMPILER_OPTIONS_6920": "常见编译器选项", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "调用签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少返回类型批注的调用签名隐式具有返回类型 \"any\"。", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "没有参数的调用签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。", - "Call_target_does_not_contain_any_signatures_2346": "调用目标不包含任何签名。", "Can_only_convert_logical_AND_access_chains_95142": "仅可转换逻辑 AND 访问链", "Can_only_convert_named_export_95164": "只能转换已命名的导出", "Can_only_convert_property_with_modifier_95137": "只能转换带修饰符的属性", - "Can_only_convert_string_concatenation_95154": "只能转换字符串串联", + "Can_only_convert_string_concatenations_and_string_literals_95154": "只能转换字符串串联和字符串文本", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "无法访问“{0}.{1}”,因为“{0}”是类型,不是命名空间。是否要使用“{0}[\"{1}\"]”检索“{0}”中“{1}”属性的类型?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "提供 \"--isolatedModules\" 标志时,无法访问环境常量枚举。", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "启用“{1}”时,无法从没有限定的其他文件访问“{0}”。请改用“{2}”。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "启用“{0}”时,无法访问环境常量枚举。", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "不可将“{0}”构造函数类型分配给“{1}”构造函数类型。", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "无法将抽象构造函数类型分配给非抽象构造函数类型。", "Cannot_assign_to_0_because_it_is_a_class_2629": "无法为“{0}”赋值,因为它是类。", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "找不到“{0}”的库定义。", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到“{0}”的库定义。你是指“{1}”?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模块“{0}”。请考虑使用 \"--resolveJsonModule\" 导入带 \".json\" 扩展的模块。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "找不到模块“{0}”。你的意思是要将 \"moduleResolution\" 选项设置为 \"node\",还是要将别名添加到 \"paths\" 选项中?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模块“{0}”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模块“{0}”或其相应的类型声明。", "Cannot_find_name_0_2304": "找不到名称“{0}”。", "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名称“{0}”。你是否指的是“{1}”?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名称“{0}”。你是否要在异步函数中写入此内容?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名称“{0}”。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{1}”或更高版本。", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名称“{0}”。是否需要更改目标库? 请尝试更改 “lib” 编译器选项以包括 “dom”。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`,然后将 \"bun\" 添加到 tsconfig 的 types 字段。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名称 \"{0}\"。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名称“{0}”。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然后将 “jest” 或 “mocha” 添加到 tsconfig 中的类型字段。。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名称 \"{0}\"。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组析构将始终发送 \"{0}\"。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组扩张将始终发送 \"{0}\"。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但 for-of 将始终发送 \"{0}\"。", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "无法为项目“{0}”添加前缀,因为它未设置 \"outFile\"", + "Cannot_move_statements_to_the_selected_file_95183": "无法将语句移动到所选文件", + "Cannot_move_to_file_selected_file_is_invalid_95179": "无法移动到文件,所选文件无效", "Cannot_read_file_0_5083": "无法读取文件“{0}”。", "Cannot_read_file_0_Colon_1_5012": "无法读取文件“{0}”: {1}。", "Cannot_redeclare_block_scoped_variable_0_2451": "无法重新声明块范围变量“{0}”。", "Cannot_redeclare_exported_variable_0_2323": "无法重新声明导出的变量“{0}”。", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "无法在 catch 子句中重新声明标识符“{0}”。", "Cannot_start_a_function_call_in_a_type_annotation_1441": "无法在类型注释中启动函数调用。", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "无法更新项目 \"{0}\" 的输出,因为读取文件 \"{1}\" 时出错", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "无法使用 JSX,除非提供了 \"--jsx\" 标志。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "在提供 “--isolatedModules” 标志时,无法在类型或仅类型命名空间上使用“导出导入”。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "启用“{0}”时,不能对类型或仅类型命名空间使用“export import”。", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "当 \"--module\" 为 \"none\" 时无法使用导入、导出或模块扩大。", "Cannot_use_namespace_0_as_a_type_2709": "不能将命名空间“{0}”用作类型。", "Cannot_use_namespace_0_as_a_value_2708": "不能将命名空间“{0}”用作值。", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "将 \"extends\" 改为 \"implements\"", "Change_spelling_to_0_90022": "将拼写更改为“{0}”", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "检查是否有已声明但未在构造函数中设置的类属性。", + "Check_side_effect_imports_6806": "检查副作用导入。", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "检查 “bind”、“call” 和 “apply” 方法的参数是否与原始函数匹配。", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "检查“{0}”是否是“{1}”-“{2}”的最长匹配前缀。", "Circular_definition_of_import_alias_0_2303": "导入别名“{0}”的循环定义。", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "类声明无法实现“{0}”的重载列表。", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 “@augments” 或 “@extends” 标记。", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "类修饰器不能与静态专用标识符一起使用。请考虑删除实验性修饰器。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父类定义的类字段“{0}”无法通过 super 在子类中访问。", "Class_name_cannot_be_0_2414": "类名不能为“{0}”。", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "使用模块 {0} 将目标设置为 ES5 时,类名称不能为 \"Object\"。", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "类静态侧“{0}”错误扩展基类静态侧“{1}”。", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "命令行选项", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "编译给定了其配置文件路径或带 \"tsconfig.json\" 的文件夹路径的项目。", "Compiler_Diagnostics_6251": "编译器诊断", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "无法为编译器选项“{0}”提供空字符串。", "Compiler_option_0_expects_an_argument_6044": "编译器选项“{0}”需要参数。", "Compiler_option_0_may_not_be_used_with_build_5094": "编译器选项“--{0}”不能与 “--build” 一起使用。", "Compiler_option_0_may_only_be_used_with_build_5093": "编译器选项“--{0}”只能与 “--build” 一起使用。", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "复合项目可能不会禁用声明发出。", "Composite_projects_may_not_disable_incremental_compilation_6379": "复合项目不能禁用增量编译。", "Computed_from_the_list_of_input_files_6911": "从输入文件列表计算", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "计算属性必须是数字或字符串文本、变量或带 --isolatedDeclarations 的虚线表达式。", "Computed_property_names_are_not_allowed_in_enums_1164": "枚举中不允许计算属性名。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "不能使用 --isolatedDeclarations 推断类或对象文本上的计算属性名称。", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "含字符串值成员的枚举中不允许使用计算值。", "Concatenate_and_emit_output_to_single_file_6001": "连接输出并将其发出到单个文件。", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "“{1}”和“{2}”处找到的“{0}”的定义具有冲突。考虑安装此库的特定版本以解决冲突。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析导入时除特定于解析程序的默认值外要设置的条件。", "Conflicts_are_in_this_file_6201": "此文件中存在冲突。", "Consider_adding_a_declare_modifier_to_this_class_6506": "请考虑向此类添加 “declare” 修饰符。", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "构造签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "将“{0}”转换为映射对象类型", "Convert_all_const_to_let_95102": "将所有 'const' 转换为 'let'", "Convert_all_constructor_functions_to_classes_95045": "将所有构造函数都转换为类", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "将不用作值的所有导入转换为仅类型导入", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "将所有无效字符转换为 HTML 实体代码", "Convert_all_re_exported_types_to_type_only_exports_1365": "将所有重新导出的类型转换为仅类型导出", "Convert_all_require_to_import_95048": "将所有 \"require\" 转换为 \"import\"", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "全部转换为 BigInt 数字字面量", "Convert_all_to_default_imports_95035": "全部转换为默认导入", "Convert_all_type_literals_to_mapped_type_95021": "将所有类型文本转换为映射类型", + "Convert_all_typedef_to_TypeScript_types_95177": "将所有 typedef 转换为 TypeScript 类型。", "Convert_arrow_function_or_function_expression_95122": "转换箭头函数或函数表达式", "Convert_const_to_let_95093": "将 \"const\" 转换为 \"let\"", "Convert_default_export_to_named_export_95061": "将默认导出转换为命名导出", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "转换为可选链表达式", "Convert_to_template_string_95096": "转换为模板字符串", "Convert_to_type_only_export_1364": "转换为仅类型导出", - "Convert_to_type_only_import_1373": "转换为仅类型导入", + "Convert_typedef_to_TypeScript_type_95176": "将 typedef 转换为 TypeScript 类型。", "Corrupted_locale_file_0_6051": "区域设置文件 {0} 已损坏。", "Could_not_convert_to_anonymous_function_95153": "无法转换为匿名函数", "Could_not_convert_to_arrow_function_95151": "无法转换为箭头函数", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名称“{0}”。你是否是指“{1}”?", "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空间导入或已命名的导入", "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要为其生成访问器的属性", + "Could_not_find_variable_to_inline_95185": "找不到要内联的变量。", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "无法解析具有表达式的路径“{0}”: {1}。", "Could_not_write_file_0_Colon_1_5033": "无法写入文件“{0}”: {1}。", "Create_source_map_files_for_emitted_JavaScript_files_6694": "为发出的 JavaScript 文件创建源映射文件。", "Create_sourcemaps_for_d_ts_files_6614": "为 d.ts 文件创建源映射。", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用工作目录中的建议设置创建 tsconfig.json。", "DIRECTORY_6038": "目录", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字符类中不允许使用十进制转义序列和反向引用。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "不允许使用带前导零的小数。", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "该声明扩充了另一文件中的声明。这无法被序列化。", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "为此文件发出的声明需要保留此导入以进行扩充。--isolatedDeclarations 不支持此功能。", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此文件的声明发出要求使用专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此文件的声明发出要求使用模块 \"{1}\" 中的专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "为此参数发出的声明要求隐式添加未定义的类型。--isolatedDeclarations 不支持此功能。", "Declaration_expected_1146": "应为声明。", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "声明名称与内置全局标识符“{0}”冲突。", "Declaration_or_statement_expected_1128": "应为声明或语句。", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "声明静态属性“{0}”", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "装饰器函数返回类型“{0}”不可分配到类型“{1}”。", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "装饰器函数返回类型为“{0}”,但预期为“void”或“any”。", + "Decorator_used_before_export_here_1486": "此处“导出”之前使用的修饰器。", "Decorators_are_not_valid_here_1206": "修饰器在此处无效。", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "不能向多个同名的 get/set 访问器应用修饰器。", - "Decorators_may_not_be_applied_to_this_parameters_1433": "修饰器不能应用于 “this” 参数。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果修饰器也出现在“导出”之前,则它们可能不会出现在“export”或“export default”之后。", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "修饰器必须位于属性声明的名称和所有关键字之前。", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "将 catch 子句变量默认为 “unknown” 而不是 “any”。", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模块的默认导出具有或正在使用专用名称“{0}”。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "无法使用 --isolatedDeclarations 推断默认导出。", "Default_library_1424": "默认库", "Default_library_for_target_0_1425": "目标 \"{0}\" 的默认库", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "以下标识符的定义与另一个文件中的定义冲突: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "在生成的代码中禁用擦除 “const enum” 声明。", "Disable_error_reporting_for_unreachable_code_6603": "对无法访问的代码禁用错误报告。", "Disable_error_reporting_for_unused_labels_6604": "对未使用的标签禁用错误报告。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "禁用完整类型检查(仅报告关键分析和发出错误)。", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "在已编译输出中禁用生成自定义帮助程序函数(如 “__extends”)。", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "禁用包括任何库文件(包括默认的 lib.d.ts)。", "Disable_loading_referenced_projects_6235": "禁止加载引用的项目。", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "不报告有关不可访问的代码的错误。", "Do_not_report_errors_on_unused_labels_6074": "不报告有关未使用的标签的错误。", "Do_not_resolve_the_real_path_of_symlinks_6013": "不要解析 symlink 的真实路径。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "不要转换或省略任何未标记为仅类型的导入或导出,确保它们是根据“模块”设置以输出文件格式编写的。", "Do_not_truncate_error_messages_6165": "请勿删除错误消息。", "Duplicate_function_implementation_2393": "函数实现重复。", "Duplicate_identifier_0_2300": "标识符“{0}”重复。", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "类型“{0}”的索引签名重复。", "Duplicate_label_0_1114": "标签“{0}”重复。", "Duplicate_property_0_2718": "重复的属性 \"{0}\"。", + "Duplicate_regular_expression_flag_1500": "正则表达式标志重复。", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "动态导入的说明符类型必须是 \"string\",但此处类型是 \"{0}\"。", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "仅在将 “--module” 标记设置为 “es2020”、“es2022”、“esnext”、“commonjs”、“amd”、“system”、“umd”、“node16” 或 “nodenext” 时,才支持动态导入。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "动态导入只能接受模块说明符和可选断言作为参数", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "只有当 “--module” 选项设置为 “esnext”、 “node16” 或 “nodenext” 时,动态导入才支持第二个参数。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "动态导入只能接受模块说明符和可选的特性集作为参数", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "只有当“--module”选项设置为“esnext”、“node16”、“nodenext”或“preserve”时,动态导入才支持第二个参数。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "当“module”设置为“preserve”时,CommonJS 模块中不允许使用 ESM 语法。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "启用“verbatimModuleSyntax”时,CommonJS 模块中不允许使用 ESM 语法。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "“{0}.{1}”的每个声明的值不同,其中应为“{2}”,但给出的是“{3}”。", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "联合类型 \"{0}\" 的每个成员都有构造签名,但这些签名都不能互相兼容。", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "联合类型 \"{0}\" 的每个成员都有签名,但这些签名都不能互相兼容。", "Editor_Support_6249": "编辑器支持", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已检查类型的 JavaScript 文件中启用错误报告。", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "在未读取局部变量时启用错误报告。", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "在 “this” 的类型为 “any” 时启用错误报告。", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "为 TC39 暂存 2 草稿修饰器启用实验性支持。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "启用对旧实验性修饰器的实验性支持。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "启用导入具有任何扩展名的文件,前提是存在声明文件。", "Enable_importing_json_files_6689": "启用导入 .json 文件。", "Enable_project_compilation_6302": "启用项目编译", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "对函数启用严格的 \"bind\"、\"call\" 和 \"apply\" 方法。", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "确保导入中的大小写正确。", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "确保可以安全地转译每个文件,而无需依赖其他导入。", "Ensure_use_strict_is_always_emitted_6605": "请确保始终发出 “se strict”。", + "Entering_conditional_exports_6413": "正在输入条件导出。", "Entry_point_for_implicit_type_library_0_1420": "隐式类型库 \"{0}\" 的入口点", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "隐式类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "枚举声明只能与命名空间或其他枚举声明合并。", "Enum_declarations_must_all_be_const_or_non_const_2473": "枚举声明必须全为常数或非常数。", "Enum_member_expected_1132": "应为枚举成员。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "启用“isolatedModules”时,非文本数值成员之后的枚举成员必须具有初始值设定项。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "枚举成员初始值设定项必须可计算,而不引用具有 --isolatedDeclarations 的外部符号。", "Enum_member_must_have_initializer_1061": "枚举成员必须具有初始化表达式。", "Enum_name_cannot_be_0_2431": "枚举名不能为“{0}”。", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "枚举类型“{0}”包含具有不是文本的初始值设定项的成员。", "Errors_Files_6041": "错误文件", + "Escape_sequence_0_is_not_allowed_1488": "不允许转义序列“{0}”。", "Examples_Colon_0_6026": "示例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "比较类型“{0}”和“{1}”的复杂性过高。", "Excessive_stack_depth_comparing_types_0_and_1_2321": "与类型“{0}”和“{1}”相比,堆栈深度过高。", + "Exiting_conditional_exports_6416": "正在退出条件导出。", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "应为 {0}-{1} 类型参数;请为这些参数添加 \"@extends\" 标记。", "Expected_0_arguments_but_got_1_2554": "应有 {0} 个参数,但获得 {1} 个。", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "应为 {0} 个参数,但得到的却是 {1} 个。你是否忘了将类型参数中的 \"void\" 包含到 \"Promise\"?", "Expected_0_type_arguments_but_got_1_2558": "应有 {0} 个类型参数,但获得 {1} 个。", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "应为 {0} 类型参数;请为这些参数添加 \"@extends\" 标记。", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "应为 1 个参数,但得到 0。“new Promise()” 需要 JSDoc 提示才能生成可在没有参数的情况下调用的 “resolve”。", + "Expected_a_Unicode_property_name_1523": "应为 Unicode 属性名称。", + "Expected_a_Unicode_property_name_or_value_1527": "应为 Unicode 属性名称或值。", + "Expected_a_Unicode_property_value_1525": "应为 Unicode 属性值。", + "Expected_a_capturing_group_name_1514": "应为捕获组名称。", + "Expected_a_class_set_operand_1520": "应为类集操作数。", "Expected_at_least_0_arguments_but_got_1_2555": "应有至少 {0} 个参数,但获得 {1} 个。", "Expected_corresponding_JSX_closing_tag_for_0_17002": "“{0}”预期的相应 JSX 结束标记。", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "预期的 JSX 片段的相应结束标记。", "Expected_for_property_initializer_1442": "属性初始化表达式应有 \"=\"。", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "\"package.json\" 中 \"{0}\" 字段的类型应为 \"{1}\",但实际为 \"{2}\" 。", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "对修饰器的实验支持功能在将来的版本中可能更改。在 \"tsconfig\" 或 \"jsconfig\" 中设置 \"experimentalDecorators\" 选项以删除此警告。", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "显示指定了模块解析类型:“{0}”。", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "除非 \"target\" 选项设置为 \"es2016\" 或更高版本,否则不能对 \"bigint\" 值执行求幂运算。", "Export_0_from_module_1_90059": "从模块“{1}”导出“{0}”", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "导出的变量“{0}”具有或正在使用专用名称“{1}”。", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模块扩大中不允许导出和导出分配。", "Expression_expected_1109": "应为表达式。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表达式必须括在括号中才能用作修饰器。", "Expression_or_comma_expected_1137": "应为表达式或逗号。", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "表达式生成的元组类型太大,无法表示。", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "表达式生成的联合类型过于复杂,无法表示。", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "表达式解析为 \"_super\",编译器使用 \"_super\" 获取基类引用。", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "表达式解析为编辑器用于捕获 \"new.target\" 元属性引用的变量声明 \"_newTarget\"。", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "表达式解析为编译器用于捕获 \"this\" 引用的变量声明 \"_this\"。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "无法使用 --isolatedDeclarations 推断表达式类型。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 子句不能包含具有 --isolatedDeclarations 的表达式。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推断类型“{0}”的 Extends 子句具有或正在使用专用名称“{1}”。", + "Extract_base_class_to_variable_90064": "将基类提取到变量", + "Extract_binding_expressions_to_variable_90066": "将绑定表达式提取到变量", "Extract_constant_95006": "提取常数", + "Extract_default_export_to_variable_90065": "将默认导出提取到变量", "Extract_function_95005": "提取函数", "Extract_to_0_in_1_95004": "提取到 {1} 中的 {0}", "Extract_to_0_in_1_scope_95008": "提取到 {1} 范围中的 {0}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "提取到接口", "Extract_to_type_alias_95078": "提取到类型别名", "Extract_to_typedef_95079": "提取到类型引用", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "提取到变量并替换为“{0} 为 typeof {0}”", "Extract_type_95077": "提取类型", "FILE_6035": "文件", "FILE_OR_DIRECTORY_6040": "文件或目录", - "Failed_to_parse_file_0_Colon_1_5014": "未能分析文件“{0}”: {1}。", + "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency“{0}”。", + "Failed_to_resolve_under_condition_0_6415": "无法在条件“{0}”下解析。", "Fallthrough_case_in_switch_7029": "switch 语句中的 Fallthrough 情况。", "File_0_does_not_exist_6096": "文件“{0}”不存在。", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根据前面缓存的查找,文件“{0}”不存在。", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "文件“{0}”存在 - 将其用作名称解析结果。", "File_0_exists_according_to_earlier_cached_lookups_6239": "根据前面缓存的查找,文件“{0}”存在。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "文件“{0}”存在 - 将其用作名称解析结果。", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "文件“{0}”具有不受支持的扩展名。仅支持 {1} 扩展名。", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "文件“{0}”的扩展名不受支持,正在跳过。", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "文件 \"{0}\" 是 JavaScript 文件。你是想启用 \"allowJs\" 选项吗?", "File_0_is_not_a_module_2306": "文件“{0}”不是模块。", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "文件 \"{0}\" 不在项目 \"{1}\" 的文件列表中。项目必须列出所有文件,或使用 \"include\" 模式。", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "文件“{0}”不在 \"rootDir\"“{1}”下。\"rootDir\" 应包含所有源文件。", "File_0_not_found_6053": "找不到文件“{0}”。", "File_Management_6245": "文件管理", + "File_appears_to_be_binary_1490": "文件似乎是二进制文件。", "File_change_detected_Starting_incremental_compilation_6032": "检测到文件更改。正在启动增量编译...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "文件是 CommonJS 模块,因为“{0}”没有字段 “type”", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "文件是 CommonJS 模块,因为“{0}”具有值不是 “module” 的字段 “type”", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "文件是项目引用源 \"{0}\" 的输出", "File_is_source_from_referenced_project_specified_here_1416": "文件源自此处指定的引用项目。", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "文件名“{0}”仅在大小写方面与包含的文件名“{1}”不同。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "文件名“{0}”具有“{1}”扩展 - 改为查找“{2}”。", "File_name_0_has_a_1_extension_stripping_it_6132": "文件名“{0}”的扩展名为“{1}”,请去除它。", "File_redirects_to_file_0_1429": "文件重定向到文件 \"{0}\"", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "文件规范不能包含出现在递归目录通配符(\"*\"): “{0}”后的父目录(\"..\")。", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "修复可能缺少 \"await\" 的所有表达式", "Fix_all_implicit_this_errors_95107": "修复所有 implicit-'this' 错误", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修复所有错误的异步函数返回类型", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "无法在类静态块内使用 for...await 循环。", + "Fix_all_with_type_only_imports_95182": "使用仅类型导入修复所有问题", "Found_0_errors_6217": "找到 {0} 个错误。", "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 个错误。注意文件更改。", "Found_0_errors_in_1_files_6261": "在 {1} 个文件中找到 {0} 个错误。", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一文件中找到 {0} 个错误,起始位置为: {1}", "Found_1_error_6216": "找到 1 个错误。", "Found_1_error_Watching_for_file_changes_6193": "找到 1 个错误。注意文件更改。", - "Found_1_error_in_1_6259": "在 {1} 中找到 1 个错误", + "Found_1_error_in_0_6259": "在 {0} 中找到 1 个错误", "Found_package_json_at_0_6099": "在“{0}”处找到了 \"package.json\"。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "面向 \"ES3\" 或 \"ES5\" 时,在严格模式下,块内不允许函数声明。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "面向 \"ES3\" 或 \"ES5\" 时,在严格模式下,块内不允许函数声明。类定义自动处于严格模式。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "面向 \"ES3\" 或 \"ES5\" 时,在严格模式下,块内不允许函数声明。模块自动处于严格模式。", + "Found_peerDependency_0_with_1_version_6282": "找到具有“{1}”版本的 peerDependency“{0}”。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "面向“ES5”时,在严格模式下,块内不允许函数声明。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "面向“ES5”时,在严格模式下,块内不允许函数声明。类定义自动处于严格模式。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "面向“ES5”时,在严格模式下,块内不允许函数声明。模块自动处于严格模式。", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少返回类型批注的函数表达式隐式具有“{0}”返回类型。", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "函数实现缺失或未立即出现在声明之后。", "Function_implementation_name_must_be_0_2389": "函数实现名称必须为“{0}”。", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "由于函数不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函数缺少结束 return 语句,返回类型不包括 \"undefined\"。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函数必须具有带有 --isolatedDeclarations 的显式返回类型注释。", "Function_not_implemented_95159": "未实现函数。", "Function_overload_must_be_static_2387": "函数重载必须为静态。", "Function_overload_must_not_be_static_2388": "函数重载不能为静态。", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "应为标识符。", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "应为标识符。转换 ECMAScript 模块时,\"__esModule\" 保留为导出标记。", "Identifier_or_string_literal_expected_1478": "应为标识符或字符串字面量。", + "Identifier_string_literal_or_number_literal_expected_1496": "应为标识符、字符串文本或数字文本。", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果“{0}”包实际上公开此模块,请考虑发送拉取请求以修正“https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}”", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果“{0}”包实际公开了此模块,请尝试添加包含 `declare module‘{1}';` 的新声明(.d.ts)文件", "Ignore_this_error_message_90019": "忽略此错误信息", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "实现接口“{0}”", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "导出的类“{0}”的 Implements 子句具有或正在使用专用名称“{1}”。", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "\"symbol\" 到 \"string\" 的隐式转换将在运行时失败。请考虑在 \"String(...)\" 中包装此表达式。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "导入“{0}”与此文件中使用的全局值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "导入“{0}”与本地值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", "Import_0_from_1_90013": "从“{1}”导入“{0}”", "Import_assertion_values_must_be_string_literal_expressions_2837": "导入断言值必须为字符串字面量表达式。", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "不允许在转译到 commonjs “require” 调用的语句导入断言。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "仅在将 “--module” 选项设置为 “esnext” 或 “nodenext” 时,才支持导入断言。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "不允许在编译到 commonJS“require”调用的语句导入断言。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "只有当“--module”选项设置为“esnext”、“nodenext”或“preserve”时,才支持导入断言。", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "导入断言不能用于仅类型导入或导出。", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "面向 ECMAScript 模块时,不能使用导入分配。请考虑改用 \"import * as ns from \"mod\"\"、\"import {a} from \"mod\"\"、\"import d from \"mod\"\" 或另一种模块格式。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "导入属性值必须为字符串字面量表达式。", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "不允许在编译到 commonJS“require” 调用的语句导入属性。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "只有当“--module”选项设置为“esnext”、“nodenext”或“preserve”时,才支持导入属性。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "导入属性不能用于仅类型导入或导出。", "Import_declaration_0_is_using_private_name_1_4000": "导入声明“{0}”使用的是专用名称“{1}”。", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "导入声明与“{0}”的局部声明冲突。", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空间中的导入声明不能引用模块。", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在发出的 JavaScript 中包括源映射文件。", "Includes_imports_of_types_referenced_by_0_90054": "包含由“{0}”引用的类型的导入", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch,-w 将开始监视当前项目的文件更改。设置后,可以使用以下内容配置监视模式:", + "Incomplete_quantifier_Digit_expected_1505": "限定符不完整。应为数字。", "Index_signature_for_type_0_is_missing_in_type_1_2329": "类型“{1}”中缺少类型“{0}”的索引签名。", "Index_signature_in_type_0_only_permits_reading_2542": "类型“{0}”中的索引签名仅允许读取。", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合并声明“{0}”中的单独声明必须全为导出或全为局部声明。", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "根据使用情况推断参数类型", "Infer_this_type_of_0_from_usage_95080": "从用法中推断出 \"{0}\" 的 \"this\" 类型", "Infer_type_of_0_from_usage_95011": "根据使用情况推断“{0}”的类型", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支持从类表达式推理。", "Initialize_property_0_in_the_constructor_90020": "初始化构造函数中的属性“{0}”", "Initialize_static_property_0_90021": "初始化静态属性“{0}”", "Initializer_for_property_0_2811": "属性“{0}”的初始化表达式", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "实例成员变量“{0}”的初始化表达式不能引用构造函数中声明的标识符“{1}”。", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初始化表达式没有为此绑定元素提供此任何值,且该绑定元素没有默认值。", "Initializers_are_not_allowed_in_ambient_contexts_1039": "不允许在环境上下文中使用初始化表达式。", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 项目并创建 tsconfig.json 文件。", + "Inline_variable_95184": "内联变量", "Insert_command_line_options_and_files_from_a_file_6030": "从文件插入命令行选项和文件。", "Install_0_95014": "安装“{0}”", "Install_all_missing_types_packages_95033": "安装缺少的所有类型包", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "扩大中的模块名无效,找不到模块“{0}”。", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新表达式中的可选链无效。是否要调用“{0}()”?", "Invalid_reference_directive_syntax_1084": "\"reference\" 指令语法无效。", + "Invalid_syntax_in_decorator_1498": "修饰器中的语法无效。", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "“{0}”的使用无效。它不能在类静态块内使用。", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "“{0}”的使用无效。模块自动处于严格模式。", "Invalid_use_of_0_in_strict_mode_1100": "严格模式下“{0}”的使用无效。", + "Invalid_value_for_ignoreDeprecations_5103": "“--ignoreDeprecations”的值无效。", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "\"jsxFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "\"jsxFragmentFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "\"--reactNamespace\" 的值无效。“{0}”不是有效的标识符。", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素类型 \"{0}\" 不是有效的 JSX 元素。", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其实例类型 \"{0}\" 不是有效的 JSX 元素。", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其返回类型 \"{0}\" 不是有效的 JSX 元素。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其类型“{0}”不是有效的 JSX 元素类型。", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" 不匹配 \"extends {2}\" 子句。", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" 未附加到类。", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" 可能仅出现在签名的最后一个参数中。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc \"@param\" 标记具有名称 \"{0}\",但不存在具有该名称的参数。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc \"@param\" 标记的名称为“{0}”,但该名称没有参数。如果它为数组类型,将匹配 \"arguments\"。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以转换为 TypeScript 类型。", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc \"@typedef\" 标记应具有类型注释,或其后跟有 \"@property\" 或 \"@member\" 标记。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef 可以转换为 TypeScript 类型。", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 类型只能在文档注释内部使用。", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 类型可能会移到 TypeScript 类型。", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能为 JSX 属性分配非空“表达式”。", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "包含类型定义来源的文件夹列表。", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "根文件夹列表,其组合内容表示在运行时的项目结构。", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在从根目录“{1}”加载“{0}”,候选位置“{2}”。", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "正在从 \"node_modules\" 文件夹加载模块“{0}”,目标文件类型“{1}”。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "正在将模块作为文件/文件夹进行加载,候选模块位置“{0}”,目标文件类型“{1}”。", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在从 \"node_modules\" 文件夹加载模块“{0}”,目标文件类型: {1}。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在将模块作为文件/文件夹进行加载,候选模块位置“{0}”,目标文件类型: {1}。", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "区域设置必须采用 <语言> 或 <语言>-<区域> 形式。例如“{0}”或“{1}”。", "Log_paths_used_during_the_moduleResolution_process_6706": "在 “moduleResolution” 进程期间使用的日志路径。", "Longest_matching_prefix_for_0_is_1_6108": "“{0}”的最长匹配前缀为“{1}”。", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "使 keyof 仅返回字符串,而不是字符串、数字或符号。旧版选项。", "Make_super_call_the_first_statement_in_the_constructor_90002": "在构造函数中,使 \"super()\" 调用第一个语句", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "映射的对象类型隐式地含有 \"any\" 模板类型。", + "Mark_array_literal_as_const_90070": "将数组文字标记为常量", "Matched_0_condition_1_6403": "匹配的“{0}”条件“{1}”。", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "默认情况下匹配包括模式 “**/*”", "Matched_by_include_pattern_0_in_1_1407": "通过在 \"{1}\" 中的包含模式 \"{0}\" 匹配", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "方法“{0}”不能具有实现,因为它标记为抽象。", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "导出接口的方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "导出接口的方法“{0}”具有或正在使用专用名称“{1}”。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必须具有带有 --isolatedDeclarations 的显式返回类型注释。", "Method_not_implemented_95158": "方法未实现。", "Modifiers_cannot_appear_here_1184": "修饰符不能出现在此处。", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模块 \"{0}\" 只能在使用 \"{1}\" 标志时进行默认导入", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模块 \"{0}\" 没有导出的成员 \"{1}\"。你是想改用 \"import {1} from {0}\" 吗?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "模块“{0}”被具有相同名称的局部声明隐藏。", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模块“{0}”使用 \"export =\" 且无法与 \"export *\" 一起使用。", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "模块“{0}”解析为“{1}”中声明的环境模块,因为未修改此文件。", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模块“{0}”解析为文件“{1}”中本地声明的环境模块。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模块“{0}”已解析为“{1}”,但未设置“--allowArbitraryExtensions”。", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模块“{0}”已解析为“{1}”,但尚未设置 \"--jsx\"。", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模块 \"{0}\" 已解析为 \"{1}\",但未使用 \"--resolveJsonModule\"。", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模块声明名称只能使用 ' 或 \" 引用字符串。", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "使用 \"rootDirs\" 的模块解析失败。", "Modules_6244": "模块", "Move_labeled_tuple_element_modifiers_to_labels_95117": "将已标记的元组元素修饰符移至标签", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "将默认导出中的表达式移动到变量,并向其添加类型注释。", "Move_to_a_new_file_95049": "移动到新的文件", + "Move_to_file_95178": "移动到文件", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允许使用多个连续的数字分隔符。", "Multiple_constructor_implementations_are_not_allowed_2392": "不允许存在多个构造函数实现。", "NEWLINE_6061": "换行符", "Name_is_not_valid_95136": "名称无效", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "命名捕获组仅在面向“ES2018”或更高版本时可用。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "名称相同的命名捕获组必须彼此排斥。", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "“{1}”和“{2}”类型的命名属性“{0}”不完全相同。", "Namespace_0_has_no_exported_member_1_2694": "命名空间“{0}”没有已导出的成员“{1}”。", "Namespace_must_be_given_a_name_1437": "必须为命名空间指定名称。", "Namespace_name_cannot_be_0_2819": "命名空间名称不能为“{0}”。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "启用“{0}”时,全局脚本文件中不允许使用命名空间。如果此文件不是全局脚本,请将“moduleDetection”设置为“force”或添加空的“export {}”语句。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "修饰器和修饰符都不能应用于“this”参数。", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "没有任何基构造函数具有指定数量的类型参数。", "No_constituent_of_type_0_is_callable_2755": "不可调用 \"{0}\" 类型的任何组成部分。", "No_constituent_of_type_0_is_constructable_2759": "不可构造 \"{0}\" 类型的任何组成部分。", @@ -969,14 +1076,19 @@ "No_overload_matches_this_call_2769": "没有与此调用匹配的重载。", "No_type_could_be_extracted_from_this_type_node_95134": "无法从该类型节点中提取任何类型", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速记属性 \"{0}\" 的范围内不存在任何值。请声明一个值或提供一个初始值设定项。", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象类“{0}”不会实现继承自“{2}”类的抽象成员“{1}”。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象类“{0}”不会实现继承自“{2}”类的抽象成员 {1}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2} 和 {3} 等。", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象类表达式不会实现继承自“{1}”类的抽象成员“{0}”。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象类表达式缺少“{0}”的以下成员的实现: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象类表达式缺少“{0}”的以下成员的实现: {1} 和 {2} 等。", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 null 断言只能在 TypeScript 文件中使用。", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "未设置 \"baseUrl\" 时,不允许使用非相对路径。是否忘记了前导 \"./\"?", "Non_simple_parameter_declared_here_1348": "此处声明了非简单参数。", "Not_all_code_paths_return_a_value_7030": "并非所有代码路径都返回值。", "Not_all_constituents_of_type_0_are_callable_2756": "\"{0}\" 类型的部分要素不可调用。", "Not_all_constituents_of_type_0_are_constructable_2760": "\"{0}\" 类型的部分要素不可构造。", + "Numbers_out_of_order_in_quantifier_1506": "数字在限定符中顺序不对。", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "绝对值大于或等于 2^53 的数值文本过大,无法用整数准确表示。", "Numeric_separators_are_not_allowed_here_6188": "此处不允许使用数字分隔符。", "Object_is_of_type_unknown_2571": "对象的类型为 \"unknown\"。", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "对象字面量只能指定已知属性,并且“{0}”不在类型“{1}”中。", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "对象字面量只能指定已知的属性,但“{0}”中不存在类型“{1}”。是否要写入 {2}?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "对象字面量的属性“{0}”隐式含有“{1}”类型。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "无法使用 --isolatedDeclarations 推断包含速记属性的对象。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "无法使用 --isolatedDeclarations 推断包含传播赋值的对象。", "Octal_digit_expected_1178": "需要八进制数字。", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "八进制文本类型必须使用 ES2015 语法。请使用语法“{0}”。", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "枚举成员初始值设定项中不允许有八进制文本。请使用语法“{0}”。", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "严格模式下不允许使用八进制文本。", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "当面向 ECMAScript 5 及更高版本时,不能使用八进制文本。请使用语法“{0}”。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字符类中不允许使用八进制转义序列和反向引用。如果这是转义序列,请改用语法“{0}”。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允许使用八进制转义序列。请使用语法“{0}”。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允许使用八进制文字。请使用语法“{0}”。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "“{0}.{1}”的一个值是字符串“{2}”,另一个值被假定为未知数值。", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "\"for...in\" 语句中只允许单个变量声明。", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "\"for...of\" 语句中只允许单个变量声明。", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "使用 \"new\" 关键字只能调用 void 函数。", "Only_ambient_modules_can_use_quoted_names_1035": "仅环境模块可使用带引号的名称。", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} 旁仅支持 \"amd\" 和 \"system\" 模块。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "只能使用 --isolatedDeclarations 推断常量数组。", "Only_emit_d_ts_declaration_files_6014": "仅发出 \".d.ts\" 声明文件。 ", - "Only_named_exports_may_use_export_type_1383": "只有已命名的导出可使用“导出类型”。", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "只有数字枚举可具有计算成员,但此表达式的类型为“{0}”。如果不需要全面性检查,请考虑改用对象文本。", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "仅输出 d.ts 文件,而不输出 JavaScript 文件。", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "通过 \"super\" 关键字只能访问基类的公共方法和受保护方法。", "Operator_0_cannot_be_applied_to_type_1_2736": "运算符 \"{0}\" 不能应用于类型 \"{1}\"。", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "运算符“{0}”不能应用于类型“{1}”和“{2}”。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "运算符不得混合在字符类中。改为将其包装在嵌套类中。", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在编辑时选择项目退出多项目引用检查。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "选项“{0}={1}”已删除。请从配置中删除它。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "选项“{0}={1}”已弃用,并将停止在 TypeScript {2} 中运行。指定 compilerOption“ignoreDeprecations”:“{3}”以使此错误静音。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定,或者在命令行上设置为 \"false\" 或 \"null\"。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定或在命令行上设置为 \"null\"。", + "Option_0_can_only_be_specified_on_command_line_6266": "选项“{0}”只能在命令行上指定。", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "仅当提供了选项 \"--inlineSourceMap\" 或选项 \"--sourceMap\" 时,才能使用选项“{0}”。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有在“moduleResolution”设置为“node16”、“nodenext”或“bundler”时,才能使用选项“{0}”。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "只有在“module”设置为“preserve”或“es2015”或更高版本时,才能使用选项“{0}”。", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "选项 \"jsx\" 为“{1}”时,不能指定选项“{0}”。", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "选项 \"target\" 为 \"ES3\" 时,不能指定选项 \"{0}\"。", "Option_0_cannot_be_specified_with_option_1_5053": "选项“{0}”不能与选项“{1}”同时指定。", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "无法在不指定选项“{1}”的情况下指定选项“{0}”。", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "无法在不指定选项 {1} 或选项 {2} 的情况下指定选项 {0}。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "选项“{0}”已删除。请从配置中删除它。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "选项“{0}”已弃用,并将停止在 TypeScript {1} 中运行。指定 compilerOption“ignoreDeprecations”:“{2}”以使此错误静音。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "选项“{0}”是冗余选项,不能与选项“{1}”同时指定。", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "只有在设置“noEmit”或“emitDeclarationOnly”时,才能使用选项“allowImportingTsExtensions”。", "Option_build_must_be_the_first_command_line_argument_6369": "选项 '--build' 必须是第一个命令行参数。", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "选项 “--incremental” 只能使用 tsconfig 指定,在发出到单个文件时指定,或在指定了选项 “--tsBuildInfoFile” 时指定。", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "选项 \"isolatedModules\" 只可在提供了选项 \"--module\" 或者选项 \"target\" 是 \"ES2015\" 或更高版本时使用。", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "启用 \"isolatedModules\" 时,无法禁用选项 \"preserveConstEnums\"。", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "选项 \"preserveValueImports\" 只能在 \"module\" 设置为 \"es2015\" 或更高版本时使用。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "当选项“module”设置为“{1}”时,选项“moduleResolution”必须设置为“{0}”(或保留为未指定)。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "当选项“moduleResolution”设置为“{1}”时,选项“module”必须设置为“{0}”。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "启用“{0}”时,无法禁用选项“preserveConstEnums”。", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "选项 \"project\" 在命令行上不能与源文件混合使用。", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "仅当模块代码生成为 \"commonjs\"、\"amd\"、\"es2015\" 或 \"esNext\" 时,才能指定选项 \"--resolveJsonModule\"。", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "在没有 \"node\" 模块解析策略的情况下,无法指定选项 \"-resolveJsonModule\"。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "当“moduleResolution”设置为“classic”时,无法指定选项“--resolveJsonModule”。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "当“module”设置为“none”、“system”或“umd”时,无法指定选项“--resolveJsonModule”。", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "如果未指定选项“incremental”或“composite”或未运行“tsc -b”,则无法指定选项“tsBuildInfoFile”。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "当“module”设置为“UMD”、“AMD”或“System”时,不能使用选项“verbatimModuleSyntax”。", "Options_0_and_1_cannot_be_combined_6370": "选项“{0}”与“{1}”不能组合在一起。", "Options_Colon_6027": "选项:", "Output_Formatting_6256": "输出格式设置", "Output_compiler_performance_information_after_building_6615": "生成后输出编译器性能信息。", "Output_directory_for_generated_declaration_files_6166": "已生成声明文件的输出目录。", - "Output_file_0_from_project_1_does_not_exist_6309": "来自项目“{1}”的输出文件“{0}”不存在", "Output_file_0_has_not_been_built_from_source_file_1_6305": "未从源文件“{1}”生成输出文件“{0}”。", "Output_from_referenced_project_0_included_because_1_specified_1411": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的输出", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的输出", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "应为参数声明。", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "参数具有名称,但不具有类型。你是想使用 \"{0}: {1}\" 吗?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "参数修饰符只能在 TypeScript 文件中使用。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "参数必须具有带有 --isolatedDeclarations 的显式类型注释。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "导出类中的公共 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "导出类中的公共 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "编译后打印已发出文件的名称。", "Print_this_message_6017": "打印此消息。", "Private_accessor_was_defined_without_a_getter_2806": "定义了专用访问器,但没有 Getter。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "必须在封闭类中声明私有字段“{0}”。", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "不允许在变量声明中使用专用标识符。", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允许在类主体之外使用专用标识符。", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "专用标识符仅允许在类主体中使用,并且只能用作类成员声明的一部分、属性访问或用在 \"in\" 表达式的左侧", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "专用标识符仅在面向 ECMAScript 2015 和更高版本时可用。", "Private_identifiers_cannot_be_used_as_parameters_18009": "不能将专用标识符用作参数。", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "不能在类型参数上访问专用或受保护的成员 \"{0}\"。", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "无法生成项目“{0}”,因为其依赖项“{1}”有错误", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "无法生成项目 \"{0}\" ,因为未生成其依赖项 \"{1}\"", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "正在强制重新生成项目“{0}”", + "Project_0_is_out_of_date_because_1_6420": "由于 {1},项目“{0}”已过期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "由于 buildinfo 文件“{1}”指示文件“{2}”曾是编译的根文件,但不再是了,因此项目“{0}”已过期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "由于 buildinfo 文件“{1}”指示程序需要报告错误,因此项目“{0}”已过期。", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "项目“{0}”已过期,因为 buildinfo 文件“{1}”指示某些更改未发出", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "由于 buildinfo 文件“{1}”指示 compilerOptions 中存在更改,因此项目“{0}”已过期", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "项目“{0}”已过期,因为其依赖项“{1}”已过期", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "项目“{0}”已过期,因为输出“{1}”早于输入“{2}”", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "项目“{0}”已过期,因为输出文件“{1}”不存在", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "项目 \"{0}\" 已过期,因为其输出是使用与当前版本 \"{2}\" 不同的版本 \"{1}\" 生成的", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "项目 \"{0}\" 已过期,因为其依赖项 \"{1}\" 的输出已更改", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "项目“{0}”已过期,因为读取文件“{1}”时出错", "Project_0_is_up_to_date_6361": "“{0}”项目已是最新", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "项目“{0}”是最新的,因为最新的输入“{1}”早于输出“{2}”", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "属性 \"{0}\" 在其初始化前已被使用。", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "类型“{1}”上不存在属性“{0}”。你是否是指“{2}”?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 展开特性的“{0}”属性不能分配给目标属性。", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "导出类表达式的属性“{0}”可能不是私密或受保护的属性。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "导出匿名类类型的属性“{0}”可能不是私有或受保护的属性。", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "导出接口的属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "导出接口的属性“{0}”具有或正在使用专用名称“{1}”。", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "类型“{1}”的属性“{0}”不能赋给“{2}”索引类型“{3}”。", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "属性 \"{0}\" 将覆盖 \"{1}\" 中的基属性。如果是有意的,请添加初始值设定项。否则,请添加 \"declare\" 修饰符或删除多余的声明。", "Property_assignment_expected_1136": "应为属性分配。", "Property_destructuring_pattern_expected_1180": "应为属性析构模式。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "属性必须具有带有 --isolatedDeclarations 的显式类型注释。", "Property_or_signature_expected_1131": "应为属性或签名。", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "属性值只能是字符串、数字、\"true\"、\"false\"、\"null\"、对象或数组等类型的字面量。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "以 \"ES5\" 或 \"ES3\" 设为目标时,对 \"for-of\"、传播和析构中的可迭代项提供完全支持。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "以“ES5”设为目标时,对“for-of”、传播和析构中的可迭代项提供完全支持。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "导出类的公共方法“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "导出类的公共方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "导出类的公共方法“{0}”具有或正在使用专用名称“{1}”。", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "在未读取函数参数时引发错误。", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "对具有隐式 \"any\" 类型的表达式和声明引发错误。", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "在带隐式“any\" 类型的 \"this\" 表达式上引发错误。", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "提供 \"--isolatedModules\" 标志时,需要使用 \"export type\" 才能重新导出类型。", + "Range_out_of_order_in_character_class_1517": "字符类中的范围顺序不对。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "启用“{0}”时重新导出类型需要使用“导出类型”。", + "React_components_cannot_include_JSX_namespace_names_2639": "React 组件不能包含 JSX 命名空间名称", "Redirect_output_structure_to_the_directory_6006": "将输出结构重定向到目录。", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "减少 TypeScript 自动加载的项目数。", "Referenced_project_0_may_not_disable_emit_6310": "引用的项目“{0}”可能不会禁用发出。", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "引用的项目“{0}”必须拥有设置 \"composite\": true。", "Referenced_via_0_from_file_1_1400": "通过 \"{0}\" 从文件 \"{1}\" 引用", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "当 “--moduleResolution” 为 “node16” 或 “nodenext” 时,相对导入路径需要 EcmaScript 导入中的显式文件扩展名。请考虑将扩展名添加到导入路径中。", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "当 “--moduleResolution” 为 “node16” 或 “nodenext” 时,相对导入路径需要 EcmaScript 导入中的显式文件扩展名。你是否指的是“{0}”?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "当 \"--moduleResolution\" 为 \"node16\" 或 \"nodenext\" 时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。请考虑将扩展名添加到导入路径中。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "当“--moduleResolution”为“node16” 或“nodenext”时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。你是想使用 \"{0}\" 吗?", "Remove_a_list_of_directories_from_the_watch_process_6628": "从监视进程中删除目录列表。", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "从监视模式的处理中删除文件列表。", "Remove_all_unnecessary_override_modifiers_95163": "删除所有不必要的 \"override\" 修饰符", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": ".js 文件中的报表出错。", "Report_errors_on_unused_locals_6134": "报告未使用的局部变量上的错误。", "Report_errors_on_unused_parameters_6135": "报告未使用的参数上的错误。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "导出时需要足够的注释,以便其他工具可以轻松生成声明文件。", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要求索引签名中有未声明的属性以使用元素访问。", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "所需的类型参数可能不遵循可选类型参数。", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "在位置“{1}”的缓存中找到模块“{0}”的解析。", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "在位置“{1}”的缓存中找到类型引用指令“{0}”的解析。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相对名称失败;正在尝试禁用新式节点解析功能,以查看 npm 库是否需要配置更新。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相对名称失败;正在尝试“--moduleResolution 捆绑程序”,以查看项目是否可能需要配置更新。", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只将 \"keyof\" 解析为字符串值的属性名称(不含数字或符号)。", + "Resolved_under_condition_0_6414": "已在条件“{0}”下解析。", "Resolving_in_0_mode_with_conditions_1_6402": "正在 {0} 模式下解析,条件为 {1}。", "Resolving_module_0_from_1_6086": "======== 正在从“{1}”解析模块“{0}”。========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在相对于基 URL“{1}”-“{2}”解析模块名“{0}”。", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,未设置根目录。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析类型引用指令“{0}”,未设置包含文件,根目录“{1}”。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析类型引用指令“{0}”,未设置包含文件,未设置根目录。========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自定义 typeRoots 的程序的类型引用指令,跳过在“node_modules”文件夹中查找。", "Resolving_with_primary_search_path_0_6121": "正在使用主搜索路径“{0}”解析。", "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 参数“{0}”隐式具有 \"any[]\" 类型。", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 参数 \"{0}\" 隐式具有 \"any[]\" 类型,但可从用法中推断出更好的类型。", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。", "Rewrite_all_as_indexed_access_types_95034": "全部重写为索引访问类型", "Rewrite_as_the_indexed_access_type_0_90026": "重写为索引访问类型“{0}”", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "由于左操作数永远不会为空,因此 ?? 的右操作数无法访问。", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "无法确定根目录,正在跳过主搜索路径。", "Root_file_specified_for_compilation_1427": "为编译指定的根文件", "STRATEGY_6039": "策略", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "保存 .tsbuildinfo 文件以允许项目增量编译。", "Saw_non_matching_condition_0_6405": "看到了不匹配的条件“{0}”。", "Scoped_package_detected_looking_in_0_6182": "检测到范围包,请在“{0}”中查看", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜索所有上级 node_modules 目录以查找回退扩展: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜索所有上级 node_modules 目录以查找首选扩展: {0}。", "Selection_is_not_a_valid_statement_or_statements_95155": "所选内容不是有效的语句", "Selection_is_not_a_valid_type_node_95133": "所选内容不是有效的类型节点", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "为发出的 JavaScript 设置 JavaScript 语言版本并包含兼容的库声明。", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "显示详细的诊断信息。", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "显示将生成(如果指定有 '--clean',则删除)什么", "Signature_0_must_be_a_type_predicate_1224": "签名“{0}”必须为类型谓词。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "签名声明只能在 TypeScript 文件中使用。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "跳过在上游项目出错时生成下游项目。", "Skip_type_checking_all_d_ts_files_6693": "跳过对所有 .d.ts 文件的类型检查。", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "跳过 TypeScript 附带的类型检查 .d.ts 文件。", "Skip_type_checking_of_declaration_files_6012": "跳过声明文件的类型检查。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "正在跳过项目“{0}”的生成,因为其依赖项“{1}”有错误", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "即将跳过项目 \"{0}\" 的生成,因为未生成其依赖项 \"{1}\"", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳过看起来像绝对 URI、目标文件类型的模块“{0}”: {1}。", "Source_from_referenced_project_0_included_because_1_specified_1414": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的源", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的源", "Source_has_0_element_s_but_target_allows_only_1_2619": "源具有 {0} 个元素,但目标仅允许 {1} 个。", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 监视模式的工作方式。", "Specify_library_files_to_be_included_in_the_compilation_6079": "指定要在编译中包括的库文件。", "Specify_module_code_generation_6016": "指定模块代码生成。", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "指定模块解析策略: \"node\" (Node.js)或 \"classic\" (TypeScript pre-1.6)。", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 “jsx: react-jsx*” 时用于导入 JSX 中心函数的模块说明符。", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多个行为类似于 “./node_modules/@types” 的文件夹。", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定对从中继承设置的基本配置文件的一个或多个路径或节点模块引用。", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "静态成员不能引用类类型参数。", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静态属性“{0}”与构造函数“{1}”的内置属性函数“{0}”冲突。", "String_literal_expected_1141": "应为字符串字面量。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "当“--module”标志设置为“es2015”或“es2020”时,不支持字符串文本导入和导出名称。", "String_literal_with_double_quotes_expected_1327": "应为带双引号的字符串字面量。", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用颜色和上下文风格化错误和消息(实验)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "当有减号时,子空间标志必须存在。", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "后续属性声明必须属于同一类型。属性“{0}”的类型必须为“{1}”,但此处却为类型“{2}”。", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "后续变量声明必须属于同一类型。变量“{0}”必须属于类型“{1}”,但此处却为类型“{2}”。", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式“{1}”的替换“{0}”类型不正确,应为 \"string\",实际为“{2}”。", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "可选链中不允许使用带有标记的模板表达式。", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目标仅允许 {0} 个元素,但源中的元素可能更多。", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目标仅允许 {0} 个元素,但源中的元素可能不够。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目标签名提供的自变量太少。预期为 {0} 个或更多,但实际为 {1} 个。", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "\"{0}\" 修饰符只能在 TypeScript 文件中使用。", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "“{0}”运算符不能应用于类型 \"symbol\"。", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "“{0}”运算符不允许用于布尔类型。请考虑改用“{1}”。", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "异步迭代器的 \"{0}\" 属性必须是方法。", "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 \"{0}\" 属性必须是方法。", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "\"Object\" 类型可分配给极少数其他类型。是否想要改用“任意”类型?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "ES3 和 ES5 中的箭头函数不能引用 \"arguments\" 对象。请考虑使用标准函数表达式。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "ES3 和 ES5 中的异步函数或方法不能引用“参数”对象。请考虑使用标准函数或方法。", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "不能同时设置 Unicode (u) 标志和 Unicode Sets (v) 标志。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "无法在 ES5 中的箭头函数中引用 \"arguments\" 对象。请考虑使用标准函数表达式。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "无法在 ES5 中的异步函数或方法中引用 \"arguments\" 对象。请考虑使用标准函数或方法。", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "\"if\" 语句的正文不能为空语句。", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "针对此实现的调用已成功,但重载的实现签名在外部不可见。", "The_character_set_of_the_input_files_6163": "输入文件的字符集。", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "推断类型“{0}”引用的类型具有无法简单序列化的循环结构。必须具有类型注释。", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "“{0}”的推断类型引用不可访问的“{1}”类型。需要类型批注。", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此节点的推断类型超出编译器将序列化的最大长度。需要显式类型注释。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "\"using\" 声明的初始值设定项必须是具有 \"[Symbol.dispose]()\" 方法的对象,或为 \"null\" 或 \"undefined\"。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "\"await using\" 声明的初始值设定项必须是具有 \"[Symbol.asyncDispose]()\" 或 \"[Symbol.dispose]5D;()\" 方法的对象,或者是 \"null\" 或 \"undefined\"。", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "由于属性“{1}”存在于多个要素中,但在某些要素中是专用属性,因此已将交集“{0}”缩减为“绝不”。", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "由于属性“{1}”在某些要素中具有存在冲突的类型,因此已将交集“{0}”缩减为“绝不”。", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "\"intrinsic\" 关键字只能用于声明编译器提供的内部类型。", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "最后一个重载给出了以下错误。", "The_last_overload_is_declared_here_2771": "在此处声明最后一个重载。", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "\"for...in\" 语句的左侧不能为析构模式。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "\"for...in\" 语句的左侧不能是 \"using\" 声明。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "\"for...in\" 语句的左侧不能是 \"await using\" 声明。", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "\"for...in\" 语句的左侧不能使用类型批注。", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "\"for…in\" 语句的左侧不能是可选属性访问。", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "\"for...in\" 语句的左侧必须是变量或属性访问。", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算术运算左侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "赋值表达式的左侧不能是可选属性访问。", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "赋值表达式的左侧必须是变量或属性访问。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "\"instanceof\" 表达式的左侧必须可分配给右侧 \"[Symbol.hasInstance]\" 方法的第一个自变量。", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "\"instanceof\" 表达式左侧必须是 \"any\" 类型、对象类型或类型参数。", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "向用户显示消息时所用的区域设置(例如,\"en-us\")", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "用于搜索 node_modules 和加载 JavaScript 文件的最大依赖项深度。", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "项目根不明确,但需要解析文件“{1}”中的导出映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "项目根不明确,但仍需要解析文件“{1}”中的导入映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "无法在此类中的类型 \"{1}\" 上访问属性 \"{0}\",因为具有相同拼写的另一个专用标识符隐藏了它。", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "\"Get\" 访问器的返回类型必须可分配给其 \"Set\" 访问器类型", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "参数修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "属性修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "异步函数的返回类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。 ", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "异步函数或方法的返回类型必须为全局 Promise 类型。", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "异步函数或方法的返回类型必须为全局 Promise 类型。你是否是指写入 \"Promise<{0}>\"?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "\"for...in\" 语句右侧必须是 \"any\" 类型、对象类型或类型参数,但此处的类型为“{0}”。", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算术运算右侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "\"instanceof\" 表达式的右侧必须属于类型 \"any\",或属于可分配给 \"Function\" 接口类型的类型。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "\"instanceof\" 表达式的右侧必须是类型 \"any\"、类、函数或其他可分配给 \"Function\" 接口类型的类型,或者是具有 \"Symbol.hasInstance\" 方法的对象类型。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "\"instanceof\" 表达式的右侧不能是实例化表达式。", "The_root_value_of_a_0_file_must_be_an_object_5092": "“{0}”文件的根值必须是一个对象。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "运行时将使用 {1} 个自变量调用修饰器,但修饰器需要 {0} 个。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "运行时将使用 {1} 个自变量调用修饰器,但修饰器至少需要 {0} 个。", "The_shadowing_declaration_of_0_is_defined_here_18017": "在此处定义了“{0}”的阴影声明", "The_signature_0_of_1_is_deprecated_6387": "“{1}”的签名“{0}”已弃用。", "The_specified_path_does_not_exist_Colon_0_5058": "指定的路径不存在:“{0}”。", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "在将 “export type” 用在其导出语句上时,不能在已命名导出上使用 “type” 修饰符。", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "在将 “import type” 用在其导入语句上时,不能在已命名导入上使用 “type” 修饰符。。", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "函数声明的类型必须与函数的签名匹配。", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "如果没有“resolution-mode”断言(这是不稳定的功能),则无法命名此表达式的类型。请使用夜间 TypeScript 来消除此错误。请尝试使用“npm install -D typescript@next”进行更新。", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "无法序列化此节点的类型,因为无法序列化其属性“{0}”。", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "异步迭代器的 \"{0}()\" 方法返回的类型必须是具有 \"value\" 属性的类型的承诺。", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器的 \"{0}()\" 方法返回的类型必须具有 \"value\" 属性。", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "\"for...in\" 语句的变量声明不能有初始化表达式。", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "\"for...of\" 语句的变量声明不能有初始化表达式。", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支持 \"with\" 语句。\"with\" 程序块中的所有符号都将具有类型 \"any\"。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "“{0}”处有类型,但无法在当前 \"moduleResolution\" 设置下解析此结果。请考虑更新到 \"node16\"、\"nodenext\" 或 \"bundler\"。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "“{0}”处有类型,但在遵守 package.json \"exports\" 时无法解析此结果。“{1}”库可能需要更新其 package.json 或键入。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此正则表达式中没有名为“{0}”的捕获组。", + "There_is_nothing_available_for_repetition_1507": "没有可重复的内容。", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 标记的 \"{0}\" 属性需要 \"{1}\" 类型的子级,但提供了多个子级。", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 标记的 \"{0}\" 属性需要类型 \"{1}\",该类型需要多个子级,但仅提供了一个子级。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此向后引用指的是一个不存在的组。此正则表达式中没有捕获组。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此向后引用指的是一个不存在的组。此正则表达式中只有 {0} 个捕获组。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二进制表达式永远不会为 null。是否缺少括号?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "不能在正则表达式中转义此字符。", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比较似乎是无意的,因为类型“{0}”和“{1}”没有重叠。", "This_condition_will_always_return_0_2845": "此条件将始终返回“{0}”。", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此条件将始终返回“{0}”,因为 JavaScript 按引用而不是值比较对象。", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "此条件将始终返回 true,因为此“{0}”已始终定义。", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "此条件将始终返回 true,因为始终定义了函数。你是想改为调用它吗?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此构造函数可能会转换为类声明。", + "This_expression_is_always_nullish_2871": "此表达式始终为 null。", "This_expression_is_not_callable_2349": "此表达式不可调用。", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "此表达式是 \"get\" 访问器,因此不可调用。你想在不使用 \"()\" 的情况下使用它吗?", "This_expression_is_not_constructable_2351": "此表达式不可构造。", "This_file_already_has_a_default_export_95130": "此文件已具有默认导出", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "此导入从不用作值,必须使用 \"import type\" ,因为 \"importsNotUsedAsValues\" 设置为 \"error\"。", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "这是正在扩充的声明。请考虑将扩充声明移到同一个文件中。", + "This_kind_of_expression_is_always_falsy_2873": "这种表达式的结果始终为 false。", + "This_kind_of_expression_is_always_truthy_2872": "这种表达式的结果始终为 true。", "This_may_be_converted_to_an_async_function_80006": "可将此转换为异步函数。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成员不能具有带 “@override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成员不能具有带 “override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。你是否指的是“{1}”?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中声明的一个抽象方法。", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能通过启用 \"{0}\" 标志并引用其默认导出,使用 ECMAScript 导入/导出来引用此模块。", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模块是使用 “export =” 声明的,只能在使用“{0}”标志时用于默认导入。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "可以简化此操作。此班次与 `{0} {1} {2}` 相同。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "此重载隐式返回类型“{0}”,因为它缺少返回类型批注。", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此重载签名与其实现签名不兼容。", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "此参数不允许与 \"use strict\" 指令一起使用。", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此参数属性必须具有带 “@override” 标记的 JSDoc 注释,因为它将替代基类“{0}”中的成员。", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "此参数属性必须具有 “override” 修饰符,因为它会替代基类“{0}”中的成员。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "此正则表达式标志不能在子模式内切换。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "此正则表达式标志仅在面向“{0}”或更高版本时可用。", "This_spread_always_overwrites_this_property_2785": "此扩张将始终覆盖此属性。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请添加尾随逗号或显式约束。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请改用 `as` 表达式。", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或将字段“\"type\": \"module\"”添加到“{1}”。", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或者使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要将此文件转换为 ECMAScript 模块,请使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "仅当 “module” 选项设置为 “es2022”、“esnext”、“system”、“node16” 或 “nodenext”,且 “target” 选项设置为 “es2017” 或更高版本时,才允许使用顶级 “await” 表达式。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "仅当“module”选项设置为“es2022”、“esnext”、“system”、“node16”、“nodenext”或“preserve”时,且“target”选项设置为“es2017”或更高版本时,才允许使用顶级“await”表达式。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "仅当“module”选项设置为 \"es2022\"、\"esnext\"、\"system\"、\"node16\"、\"nodenext\" 或 \"preserve\" 且 \"target\" 选项设置为 \"es2017\" 或更高时,才允许使用顶级 \"await using\" 语句。", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 文件中的顶级声明必须以 \"declare\" 或 \"export\" 修饰符开头。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "仅当 “module” 选项设置为 “es2022”、“esnext”、“system”、“node16” 或 “nodenext”,且 “target” 选项设置为 “es2017” 或更高版本时,才允许使用顶级 “for await” 循环。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "仅当“module”选项设置为“es2022”、“esnext”、“system”、“node16”、“nodenext”或“preserve”时,且“target”选项设置为“es2017”或更高版本时,才允许使用顶级“for await”循环。", "Trailing_comma_not_allowed_1009": "不允许使用尾随逗号。", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "将每个文件转换为单独的模块(类似 \"ts.transpileModule\")。", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "尝试使用 `npm i --save-dev @types/{1}` (如果存在),或者添加一个包含 `declare module '{0}';` 的新声明(.d.ts)文件", "Trying_other_entries_in_rootDirs_6110": "正在尝试 \"rootDirs\" 中的其他条目。", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在尝试替换“{0}”,候选模块位置:“{1}”。", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "元组成员必须全部具有或全部不具有名称。", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "长度为 \"{1}\" 的元组类型 \"{0}\" 在索引 \"{2}\" 处没有元素。", "Tuple_type_arguments_circularly_reference_themselves_4110": "元组类型参数循环引用自身。", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有在使用 \"--downlevelIteration\" 标志或 \"--target\" 为 \"es2015\" 或更高版本时,才能循环访问类型“{0}”。", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "类型“{0}”没有匹配的类型“{1}”的索引签名。", "Type_0_has_no_properties_in_common_with_type_1_2559": "类型“{0}”与类型“{1}”不具有相同的属性。", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "类型“{0}”没有类型参数列表适用的签名。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "类型“{0}”是泛型的,只能编制索引以供读取。", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "类型“{0}”缺少类型“{1}”中的以下属性: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "类型“{0}”缺少类型“{1}”的以下属性: {2} 及其他 {3} 项。", "Type_0_is_not_a_constructor_function_type_2507": "类型“{0}”不是构造函数类型。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "类型“{0}”不是 ES5/ES3 中的有效异步函数返回类型,因为其未引用与 Promise 相符的构造函数值。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "类型“{0}”不是 ES5 中有效的异步函数返回类型,因为它不引用与 Promise 兼容的构造函数值。", "Type_0_is_not_an_array_type_2461": "类型“{0}”不是数组类型。", "Type_0_is_not_an_array_type_or_a_string_type_2495": "类型“{0}”不是数组类型或字符串类型。", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "类型“{0}”不是数组类型或字符串类型,或者没有返回迭代器的 \"[Symbol.iterator]()\" 方法。", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "类型“{0}”不可分配给类型“{1}”。你的意思是“{2}”?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "类型“{0}”无法分配给类型“{1}”。存在具有此名称的两种不同类型,但它们是不相关的。", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "类型“{0}”不能分配给类型“{1}”,如方差批注所示。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "根据计算枚举成员值的要求,类型“{0}”不能分配给类型“{1}”。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标属性的类型。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标类型。。", "Type_0_is_not_comparable_to_type_1_2678": "类型“{0}”不可与类型“{1}”进行比较。", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "应为类型参数。", "Type_argument_list_cannot_be_empty_1099": "类型参数列表不能为空。", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "类型参数只能在 TypeScript 文件中使用。", - "Type_arguments_cannot_be_used_here_1342": "无法在此处使用类型参数。", "Type_arguments_for_0_circularly_reference_themselves_4109": "\"{0}\" 的类型参数循环引用自身。", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "类型断言表达式只能在 TypeScript 文件中使用。", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "源中位置 {0} 的类型与目标中位置 {1} 的类型不兼容。", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "源中位置 {0} 到 {1} 的类型与目标中位置 {2} 的类型不兼容。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "包含专用名称“{0}”的类型不能与 --isolatedDeclarations 一起使用。", "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在编译中类型声明文件。", "Type_expected_1110": "应为类型。", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "类型导入断言应恰好有一个键 - \"resolution-mode\" - 值为 \"import\" 或 \"require\"。", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "类型导入属性应只有一个键 \"resolution-mode\",值为 \"import\" 或 \"require\"。", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "类型实例化过深,且可能无限。", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "类型在其自身的 \"then\" 方法的 fulfillment 回调中被直接或间接引用。", "Type_library_referenced_via_0_from_file_1_1402": "通过 \"{0}\" 从文件 \"{1}\" 引用了库类型", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "作为表达式调用时,无法解析方法修饰器的签名。", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "作为表达式调用时,无法解析参数修饰器的签名。", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "作为表达式调用时,无法解析属性修饰器的签名。", + "Undetermined_character_escape_1513": "不确定的字符转义。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "意外的“{0}”。你是否想要使用反斜杠对其进行转义?", "Unexpected_end_of_text_1126": "文本意外结束。", "Unexpected_keyword_or_identifier_1434": "意外的关键字或标识符。", "Unexpected_token_1012": "意外的标记。", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "意外的标记。你是想使用 `{'>'}` 还是 `>`?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "意外的标记。你是想使用 `{'}'}` 还是 `}`?", "Unexpected_token_expected_1179": "意外标记。应为 \"{\"。", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode 转义序列不能显示在此处。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 转义序列才可用。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 属性值表达式才可用。", + "Unknown_Unicode_property_name_1524": "未知的 Unicode 属性名称。", + "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 属性名称或值。", + "Unknown_Unicode_property_value_1526": "未知的 Unicode 属性值。", "Unknown_build_option_0_5072": "未知的生成选项 \"{0}\"。", "Unknown_build_option_0_Did_you_mean_1_5077": "未知的生成选项 \"{0}\"。你是想使用 \"{1}\" 吗?", "Unknown_compiler_option_0_5023": "未知的编译器选项“{0}”。", "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的编译器选项 \"{0}\"。你是想使用 \"{1}\" 吗?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的关键字或标识符。你是不是指“{0}”?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "未知的 \"excludes\" 选项。你的意思是 \"exclude\"?", + "Unknown_regular_expression_flag_1499": "未知的正则表达式标志。", "Unknown_type_acquisition_option_0_17010": "未知类型获取选项“{0}”。", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的类型获取选项 \"{0}\"。你是想使用 \"{1}\" 吗?", "Unknown_watch_option_0_5078": "未知观察选项 \"{0}\"。", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "未使用的标签。", "Unused_ts_expect_error_directive_2578": "未使用的 \"@ts-expect-error\" 指令。", "Update_import_from_0_90058": "从“{0}”更新导入", - "Updating_output_of_project_0_6373": "正在更新项目 \"{0}\" 的输出…", + "Update_modifiers_of_0_90061": "更新“{0}”的修饰符", "Updating_output_timestamps_of_project_0_6359": "正在更新项目“{0}”的输出时间戳...", "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新项目 \"{0}\" 未更改的输出时间戳…", "Use_0_95174": "使用 `{0}`", + "Use_0_instead_5106": "请改用“{0}”。", "Use_Number_isNaN_in_all_conditions_95175": "在所有条件下使用 `Number.isNaN`。", "Use_element_access_for_0_95145": "对“{0}”使用元素访问", "Use_element_access_for_all_undeclared_properties_95146": "对所有未声明的属性使用元素访问。", + "Use_import_type_95180": "使用 \"import type\"", "Use_synthetic_default_member_95016": "使用综合的“默认”成员。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析包导入时,请使用 package.json \"exports\" 字段。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析导入时,请使用 package.json \"import\" 字段。", + "Use_type_0_95181": "使用 \"type {0}\"", "Using_0_subpath_1_with_target_2_6404": "将“{0}”子路径“{1}”与目标“{2}”一起使用", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "仅 ECMAScript 5 和更高版本支持在 \"for...of\" 语句中使用字符串。", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build,-b 将使 tsc 的行为更像生成业务流程协调程序,而非编译器。这可用于触发生成复合项目,你可以在 {0} 详细了解这些项目", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "应为变量声明。", "Variable_declaration_list_cannot_be_empty_1123": "变量声明列表不能为空。", "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允许使用变量声明。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "变量必须具有带有 --isolatedDeclarations 的显式类型注释。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "具有多个声明的变量不能内联。", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "源中位置 {0} 的可变元素与目标中位置 {1} 的元素不匹配。", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "仅对象、函数、构造函数、映射类型的类型别名支持方差注释。", "Version_0_6029": "版本 {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "进行类型检查时,请考虑 “null” 和 “undefined”。", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否在监视模式下保留过时的控制台输出,而不是清除屏幕。", "Wrap_all_invalid_characters_in_an_expression_container_95109": "包装表达式容器中的所有无效字符", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "将所有无效的修饰器表达式括在括号中", "Wrap_all_object_literal_with_parentheses_95116": "用括号括起所有对象字面量", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "将所有没有父级的 JSX 包装在 JSX 片段中", "Wrap_in_JSX_fragment_95120": "包装在 JSX 片段中", + "Wrap_in_parentheses_95194": "用括号括起来", "Wrap_invalid_character_in_an_expression_container_95108": "包装表达式容器中的无效字符", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "用括号括起以下应为对象字面量的内容", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "你可以在 {0} 了解编译器选项的所有内容", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "“{0}”和“{1}”索引签名不兼容。", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "不能在不使用括号的情况下混用 \"{0}\" 和 \"{1}\" 操作。", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "“{0}”被指定了两次。将覆盖名为“{0}”的特性。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "类型末尾的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "类型开头的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", "_0_can_only_be_imported_by_using_a_default_import_2595": "仅可使用默认导入来导入“{0}”。", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能通过使用 \"require\" 调用或启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 \"require\" 调用或使用默认导入来导入“{0}”。", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "仅可使用 \"import {1} = require({2})\" 或默认导入来导入“{0}”。", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "仅可使用 \"import {1} = require({2})\" 或通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "无法在 \"--isolatedModules\" 下编译“{0}”,因为它被视为全局脚本文件。请添加导入、导出或空的 \"export {}\" 语句来使它成为模块。", "_0_cannot_be_used_as_a_JSX_component_2786": "“{0}”不能用作 JSX 组件。", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" 是使用 \"export type\" 导出的,因此不能用作值。", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" 是使用 \"import type\" 导入的,因此不能用作值。", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "\"{0}\" 组件不接受文本作为子元素。JSX 中的文本类型为 \"string\",但 \"{1}\" 的预期类型为 \"{2}\"。", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "“{0}”可以使用与“{1}”无关的任意类型进行实例化。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "“{0}”声明只能在块的内部声明。", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "\"{0}\" 声明只能在 TypeScript 文件中使用。", + "_0_declarations_may_not_have_binding_patterns_1492": "“{0}”声明可能没有绑定模式。", + "_0_declarations_must_be_initialized_1155": "必须初始化“{0}”声明。", "_0_expected_1005": "应为“{0}”。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}”具有字符串类型,但在启用 \"isolatedModules\" 时必须具有语法上可识别的字符串语法。", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "“{0}”没有导出的成员“{1}”。你是否指的是“{2}”?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" 隐式具有 \"{1}\" 返回类型,但可以从用法中推断出更好的类型。", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "由于“{0}'”不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "“{0}”索引类型“{1}”不能分配给“{2}”索引类型“{3}”。", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "“{0}”是基元,但“{1}”是包装器对象。如可能首选使用“{0}”。", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "“{0}”是一种类型,无法在 JavaScript 文件中导入。请在 JSDoc 类型批注中使用“{1}”。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "\"{0}\" 是一种类型,在同时启用了 \"preserveValueImports\" 和 \"isolatedModules\" 时,必须使用仅类型导入进行导入。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}”是一种类型,必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "“{0}”是“{1}”的未使用重命名。是否打算将其用作类型批注?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" 可赋给 \"{1}\" 类型的约束,但可以使用约束 \"{2}\" 的其他子类型实例化 \"{1}\"。", "_0_is_automatically_exported_here_18044": "“{0}”自动导出到此处。", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "“{0}”列表不能为空。", "_0_modifier_already_seen_1030": "已看到“{0}”修饰符。", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "“{0}”修饰符只能出现在类、接口或类型别名的类型参数上", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "“{0}”修饰符只能出现在函数、方法或类的类型参数上", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "“{0}”修饰符不能出现在构造函数声明中。", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "“{0}”修饰符不可出现在模块或命名空间元素上。", "_0_modifier_cannot_appear_on_a_parameter_1090": "“{0}”修饰符不能出现在参数中。", "_0_modifier_cannot_appear_on_a_type_member_1070": "“{0}”修饰符不可出现在类型成员上。", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "“{0}”修饰符不能出现在类型参数上", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "“{0}”修饰符不能出现在 \"using\" 声明中。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "“{0}”修饰符不能出现在 \"await using\" 声明中。", "_0_modifier_cannot_appear_on_an_index_signature_1071": "“{0}”修饰符不可出现在索引签名上。", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "“{0}”修饰符不能出现在此类型的类元素上。", "_0_modifier_cannot_be_used_here_1042": "“{0}”修饰符不能在此处使用。", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "“{0}”修饰符不能与“{1}”修饰符一起使用。", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "“{0}”修饰符不能与专用标识符一起使用。", "_0_modifier_must_precede_1_modifier_1029": "“{0}”修饰符必须位于“{1}”修饰符之前。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}”后面必须是括在大括号中的 Unicode 属性值表达式。", "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" 需要显式类型注释。", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "“{0}”仅指类型,但在此用作命名空间。", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "“{0}”仅表示类型,但在此处却作为值使用。", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "“{0}” 仅指类型,但在此处用作值。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为 es2015 或更高版本。", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "“{0}”指 UMD 全局,但当前文件是模块。请考虑改为添加导入。", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "“{0}”表示值,但在此处用作类型。是否指“类型 {0}”?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "\"{0}\" 解析为仅类型声明,并且在同时启用了 \"preserveValueImports\" 和 \"isolatedModules\" 时,必须使用仅类型导入进行导入。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "\"{0}\" 解析为仅类型声明,并且在启用 \"isolatedModules\" 时必须使用仅类型重新导出进行重新导出。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}”解析为仅类型声明,并且必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}”解析为仅类型声明,并且在启用“{1}”时必须使用仅类型重新导出进行重新导出。", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "应在 config json 文件的 “compilerOptions” 对象中设置 “{0}”", "_0_tag_already_specified_1223": "已指定“{0}”标记。", "_0_was_also_declared_here_6203": "此处也声明了 \"{0}\"。", @@ -1780,19 +1981,22 @@ "and_here_6204": "并在这里。", "arguments_cannot_be_referenced_in_property_initializers_2815": "无法在属性初始化表达式中引用 \"arguments\"。", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "“auto”: 将带有导入、导出、import.meta、jsx (带有 jsx: react-jsx)或 esm 格式(带模块: node16+)的文件视为模块。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "\"await\" 表达式不能在类静态块内使用。", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "仅当文件是模块时,才允许在该文件的顶层使用 \"await\" 表达式,但此文件没有导入或导出。请考虑添加空的 \"export {}\" 以将此文件变为模块。", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "仅允许在异步函数和模块顶级使用 \"await\" 表达式。", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "不能在参数初始化表达式中使用 \"await\" 表达式。", "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" 对此表达式的类型没有影响。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "只有当文件是模块时,才允许在该文件的顶层使用 \"await using\" 语句,但此文件没有导入或导出。可考虑添加空的 \"export {}\" 将此文件变为模块。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "\"await using\" 语句仅允许在异步函数和顶级模块中使用。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "\"await using\" 语句不能在类静态块内使用。", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "\"baseUrl\" 选项设置为“{0}”,可使用此值解析非相关模块名称“{1}”。", + "c_must_be_followed_by_an_ASCII_letter_1512": "\"\\c\" 后面必须有一个 ASCII 字母。", "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" 只能用在文件的开头。", "case_or_default_expected_1130": "应为 \"case\" 或 \"default\"。", "catch_or_finally_expected_1472": "应为 “catch” 或 “finally”。", - "const_declarations_can_only_be_declared_inside_a_block_1156": "\"const\" 声明只能在块的内部声明。", - "const_declarations_must_be_initialized_1155": "必须初始化 \"const\" 声明。", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "\"const\" 枚举成员初始化表达式的求值结果为非有限值。", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "\"const\" 枚举成员初始化表达式的求值结果为不允许使用的值 \"NaN\"。", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "常量枚举成员初始值设定项只能包含字面量值和其他计算的枚举值。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 枚举成员初始值设定项必须是常量表达式。", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "\"const\" 枚举仅可在属性、索引访问表达式、导入声明的右侧、导出分配或类型查询中使用。", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "“构造函数”不能用作参数属性名称。", "constructor_is_a_reserved_word_18012": "\"#constructor\" 是保留字。", @@ -1811,13 +2015,14 @@ "file_6025": "文件", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "仅当文件是模块且没有导入或导出项时,才允许在该文件的顶层使用“for await”循环。可考虑添加空的“export {}”将此文件变为模块。", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "仅允许在异步函数和模块顶层使用“for await”循环。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "\"for await\" 循环不能在类静态块内使用。", "get_and_set_accessors_cannot_declare_this_parameters_2784": "\"get\" 和 \"set\" 访问器无法声明 \"this\" 参数。", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定了 \"files\",则为 \"[]\",否则为\"[\"**/*\"]5D;\"", "implements_clause_already_seen_1175": "已看到 \"implements\" 子句。", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "\"implements\" 子句只能在 TypeScript 文件中使用。", "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" 只能在 TypeScript 文件中使用。", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "仅条件类型的 \"extends\" 子句中才允许 \"infer\" 声明。", - "let_declarations_can_only_be_declared_inside_a_block_1157": "\"let\" 声明只能在块的内部声明。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "\"\\k\" 后面必须有一个括在尖括号中的捕获组名称。", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" 不能用作 \"let\" 或 \"const\" 声明中的名称。", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === 'AMD' 或 'UMD' 或 'System' 或 'ES6',然后 'Classic', 否则为 'Node'", "module_system_or_esModuleInterop_6904": "module === \"system\" 或 esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package. json\" 没有与版本 \"{0}\" 匹配的 \"typesVersions\" 项。", "package_json_had_a_falsy_0_field_6220": "\"package. json\" 具有错误的 \"{0}\" 字段。", "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" 具有引用“{2}”的“{0}”字段“{1}”。", + "package_json_has_a_peerDependencies_field_6281": "\"package.json\" 具有 \"peerDependencies\" 字段。", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package. json\" 具有 \"typesVersions\" 项 \"{0}\",它不是有效的 semver 范围。", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package. json\" 具有与编译器版本 \"{1}\" 匹配的 \"typesVersions\" 项 \"{0}\",它需要与模块名称 \"{2}\" 匹配的模式。", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package. json\" 具有 \"typesVersions\" 字段,它具有特定于版本的路径映射。", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 作用域 '{0}' 的说明符 '{1}' 的目标类型无效", "package_json_scope_0_has_no_imports_defined_6273": "package.json 作用域 '{0}' 未定义导入。", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "指定了 \"paths“ 选项,正在查找模式以匹配模块名“{0}”。", + "q_is_only_available_inside_character_class_1511": "\"\\q\" 仅在字符类内可用。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "\"\\q\" 后面必须是括在大括号中的字符串替代项。", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "\"readonly\" 修饰符仅可出现在属性声明或索引签名中。", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "仅允许对数组和元组字面量类型使用 \"readonly\" 类型修饰符。", "require_call_may_be_converted_to_an_import_80005": "可将 \"require\" 调用转换为 import 语句。", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "仅当“moduleResolution”为“node16”或“nodenext”时才支持“resolution-mode”断言。", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "“resolution-mode”断言不稳定。请使用夜间 TypeScript 消除此错误。请尝试使用“npm install -D typescript@next”进行更新。", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能为仅类型导入设置 \"resolution-mode\"。", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" 是类型导入断言的唯一有效密钥。", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "\"resolution-mode\" 是类型导入属性的唯一有效键。", "resolution_mode_should_be_either_require_or_import_1453": "“resolution-mode”应为“require”或“import”。", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "设置了 \"rootDirs\" 选项,可将其用于解析相对模块名称“{0}”。", "super_can_only_be_referenced_in_a_derived_class_2335": "只能在派生类中引用 \"super\"。", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "不能在计算属性名中引用 \"this\"。", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "不能在模块或命名空间体中引用 \"this\"。", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "不能在静态属性初始化表达式中引用 \"this\"。", - "this_cannot_be_referenced_in_constructor_arguments_2333": "不能在构造函数参数中引用 \"this\"。", "this_cannot_be_referenced_in_current_location_2332": "不能在当前位置引用 \"this\"。", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" 隐式具有类型 \"any\",因为它没有类型注释。", "true_for_ES2022_and_above_including_ESNext_6930": "对于 ES2022 及更高版本为 `true`,包括 ESNext。", "true_if_composite_false_otherwise_6909": "如果为 \"composite\",则为 \"true\",否则为 \"false\"", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "当 \"moduleResolution\" 为 \"node16\"、\"nodenext \"或 \"bundler\" 时为 `true`;否则为 `false`。", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 编译器", "type_Colon_6902": "类型:", "unique_symbol_types_are_not_allowed_here_1335": "此处不允许使用 \"unique symbol\" 类型。", diff --git a/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json b/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json index b53887e8cc..5423c18d4b 100644 --- a/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +++ b/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json @@ -2,14 +2,20 @@ "ALL_COMPILER_OPTIONS_6917": "所有編譯器選項", "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾元無法與匯入宣告並用。", "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 參數必須為第一個參數。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 標籤不能接在 '@typedef'、'@callback' 或 '@overload' 標籤後面", "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 註解不能包含多個 '@type' 標籤。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "無法使用 'bigint' 常值做為屬性名稱。", "A_bigint_literal_cannot_use_exponential_notation_1352": "Bigint 常值不可使用指數標記法。", "A_bigint_literal_must_be_an_integer_1353": "Bigint 常值必須為整數。", "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "實作簽章中不得省略繫結模式參數。", "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 陳述式只可在封入的反覆項目或 switch 陳述式內使用。", "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 陳述式只可跳至封入之陳述式的標籤。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字元類別不得包含保留的雙標點符號。您是要使用反斜線將其逸出嗎?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字元類別範圍不得被另一個字元類別限制。", "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "類別只能實作具有選擇性型別引數的識別碼/限定名稱。", "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "類別只能使用靜態已知成員來實作物件類型或物件類型的交集。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "無法延伸基本類型的類別,例如 '{0}'。類別只能延伸可建構值。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "無法實作基本類型的類別,例如 '{0}'。該類別只能實作其他具名物件類型。", "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不具 'default' 修飾元的類別宣告必須要有名稱。", "A_class_member_cannot_have_the_0_keyword_1248": "類別成員不能含有 '{0}' 關鍵字。", "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "計算的屬性名稱中不可有逗點運算式。", @@ -27,6 +33,7 @@ "A_constructor_cannot_have_a_this_parameter_2681": "建構函式不能含有 'this' 參數。", "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 陳述式只可在封入的反覆項目陳述式內使用。", "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 陳述式只可跳至封入之反覆項目陳述式的標籤。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "沒有 'import type' 就無法匯入宣告檔案。您是否想要改為匯入實作檔案 '{0}'?", "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不得在現有環境內容中使用 'declare' 修飾元。", "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "一個裝飾項目只能裝飾一項方法實作,而不能多載。", "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 子句在 'switch' 陳述式中不得出現一次以上。", @@ -34,12 +41,12 @@ "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "預設匯出必須位於檔案或模組宣告的最上層。", "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此內容不允許明確的指派判斷提示 '!'。", "A_destructuring_declaration_must_have_an_initializer_1182": "解構宣告中必須包含初始設定式。", - "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 '--lib' 選項中包括 'ES2015'。", "A_file_cannot_have_a_reference_to_itself_1006": "檔案不得參考自己。", "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "會傳回 'never' 的功能不得具有可聯繫的端點。", "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "透過 'new' 關鍵字呼叫的函式不能含有為 'viod' 的 'this' 類型。", - "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'void' 也不是 'any',則必須傳回值。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'undefined'、'void' 也不是 'any',則必須傳回值。", "A_generator_cannot_have_a_void_type_annotation_2505": "產生器不得有 'void' 類型註釋。", "A_get_accessor_cannot_have_parameters_1054": "'get' 存取子不得有參數。", "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 存取子必須至少要跟 setter 一樣可供存取", @@ -55,9 +62,9 @@ "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空間宣告的所在檔案位置,不得與其要合併的類別或函式不同。", "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空間宣告的位置不得先於其要合併的類別或函式。", "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空間宣告只允許在命名空間或模組的頂層。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不應該使用 'module' 關鍵字宣告 'namespace' 宣告。請改為使用 'namespace' 關鍵字。", "A_non_dry_build_would_build_project_0_6357": "非 -dry 組建會建置專案 '{0}'", "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 組建會刪除下列檔案: {0}", - "A_non_dry_build_would_update_output_of_project_0_6375": "非 DRY 組建將會更新專案 '{0}' 的輸出", "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 DRY 組建將會更新專案 '{0}' 輸出的時間戳記", "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只有函式或建構函式實作才可使用參數初始設定式。", "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "無法使用剩餘參數宣告參數屬性。", @@ -92,6 +99,7 @@ "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "當衍生類別包含已初始化的屬性、參數屬性或私人識別碼時,'super' 呼叫必須為建構函式中第一個參照 'super' 或 'this' 的陳述式。", "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "以 'this' 為基礎的類型成立條件,和以參數為基礎的類型成立條件不相容。", "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 類型只適用於類別或介面的非靜態成員。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中的值宣告不得使用最上層 'export' 修飾元。", "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 檔案已定義於: '{0}'。", "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元組成員不能同時為選用及待用。", "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "元組類型無法以負值編製索引。", @@ -107,12 +115,21 @@ "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只有產生器主體才允許 'yield' 運算式。", "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "無法透過 super 運算式存取類別 '{1}' 中的抽象方法 '{0}'。", "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只可出現在抽象類別中。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象方法只可出現在抽象屬性中。", "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "無法從建構函式存取類別 '{1}' 中的抽象屬性 '{0}'。", "Accessibility_modifier_already_seen_1028": "已有存取範圍修飾元。", "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "只有當目標為 ECMAScript 5 及更高版本時,才可使用存取子。", "Accessors_must_both_be_abstract_or_non_abstract_2676": "存取子必須兩者均為抽象或非抽象。", "Add_0_to_unresolved_variable_90008": "對未解析的變數新增 '{0}.'", "Add_a_return_statement_95111": "新增 return 陳述式", + "Add_a_return_type_to_the_function_declaration_9031": "新增傳回類型到函數宣告。", + "Add_a_return_type_to_the_function_expression_9030": "新增傳回類型到函數運算式。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "新增傳回類型至 get 存取子宣告。", + "Add_a_return_type_to_the_method_9034": "新增傳回類型至方法", + "Add_a_type_annotation_to_the_parameter_0_9028": "新增類型註釋至參數 {0}。", + "Add_a_type_annotation_to_the_property_0_9029": "新增類型註釋至屬性 {0}。", + "Add_a_type_annotation_to_the_variable_0_9027": "新增類型註釋至變數 {0}。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "將類型新增至集合存取子宣告的參數。", "Add_all_missing_async_modifiers_95041": "新增缺少的所有 'async' 修飾元", "Add_all_missing_attributes_95168": "新增所有遺失的屬性", "Add_all_missing_call_parentheses_95068": "新增所有缺少的呼叫括號", @@ -120,9 +137,13 @@ "Add_all_missing_imports_95064": "新增所有缺少的匯入", "Add_all_missing_members_95022": "新增遺漏的所有成員", "Add_all_missing_override_modifiers_95162": "新增所有缺少的 'override' 修飾元", + "Add_all_missing_parameters_95190": "新增所有遺失的參數", "Add_all_missing_properties_95166": "新增所有遺失的屬性", "Add_all_missing_return_statement_95114": "新增所有遺漏的 return 陳述式", "Add_all_missing_super_calls_95039": "新增缺少的所有 super 呼叫", + "Add_all_missing_type_annotations_90067": "新增所有遺失的類型註釋", + "Add_all_optional_parameters_95193": "新增所有選用參數", + "Add_annotation_of_type_0_90062": "新增類型 '{0}' 的註釋", "Add_async_modifier_to_containing_function_90029": "將 async 修飾元新增至包含的函式", "Add_await_95083": "新增 'await'", "Add_await_to_initializer_for_0_95084": "將 'await' 新增至 '{0}' 的初始設定式", @@ -141,18 +162,26 @@ "Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式", "Add_missing_attributes_95167": "新增遺失的屬性", "Add_missing_call_parentheses_95067": "新增缺少的呼叫括號", + "Add_missing_comma_for_object_member_completion_0_95187": "為物件成員完成 '{0}' 新增遺漏的逗號。", "Add_missing_enum_member_0_95063": "新增缺少的列舉成員 '{0}'", "Add_missing_function_declaration_0_95156": "新增缺少的函式宣告 '{0}'", "Add_missing_new_operator_to_all_calls_95072": "將缺少的 'new' 運算子新增至所有呼叫", "Add_missing_new_operator_to_call_95071": "缺少的 'new' 運算子新增至呼叫", + "Add_missing_parameter_to_0_95188": "新增遺失的參數至 '{0}'", + "Add_missing_parameters_to_0_95189": "新增遺失的參數至 '{0}'", "Add_missing_properties_95165": "新增遺失的屬性", "Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫", "Add_missing_typeof_95052": "新增遺漏的 'typeof'", "Add_names_to_all_parameters_without_names_95073": "將名稱新增至所有沒有名稱的參數", + "Add_optional_parameter_to_0_95191": "新增選用參數至 '{0}'", + "Add_optional_parameters_to_0_95192": "將選用參數新增至 '{0}'", "Add_or_remove_braces_in_an_arrow_function_95058": "在箭號函式中新增或移除大括號", "Add_override_modifier_95160": "新增 'override' 修飾元", "Add_parameter_name_90034": "新增參數名稱", "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞", + "Add_return_type_0_90063": "新增傳回類型 '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "在此運算式中新增 satisfies 和類型判斷提示 (將 T 視為 T),使類型明確顯示。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "新增 satisfies 和具有 '{0}' 的內嵌類型判斷提示", "Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'", "Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'", "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引進行存取時,將 'undefined' 新增至類型。", @@ -177,6 +206,7 @@ "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。", "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "當模組沒有預設匯出時,允許 'import x from y'。", "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允許每個專案只從 tslib 匯入協助程式函式,而不是每個檔案都包含這些函式。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允許匯入包含 TypeScript 延伸模組。需要設定 '--moduleResolution bundler' 和 '--noEmit' 或 '--emitDeclarationOnly'。", "Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。", "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "在解析模組時,允許將多個資料夾視為一個資料夾。", "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的檔案名稱 '{0}' 與檔案名稱 '{1}' 僅大小寫不同。", @@ -192,7 +222,7 @@ "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供符合此繫結模式的引數。", "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術運算元必須屬於 'any'、'number'、'bigint' 或列舉類型。", "An_arrow_function_cannot_have_a_this_parameter_2730": "箭號函式不可具有 'this' 參數。", - "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或在 '--lib' 選項中包括 'ES2015'。", "An_async_iterator_must_have_a_next_method_2519": "非同步迭代器必須有 'next()' 方法。", "An_element_access_expression_should_take_an_argument_1011": "項目存取運算式應接受一個引數。", @@ -207,17 +237,22 @@ "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "匯出宣告只能在模組的頂層使用。", "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "匯出宣告只能在命名空間或模組的頂層使用。", "An_export_declaration_cannot_have_modifiers_1193": "匯出宣告不得有修飾元。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考值,但 '{0}' 僅參考類型。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "啟用 'verbatimModuleSyntax' 時,'export default' 必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "啟用 'verbatimModuleSyntax' 時,'export default' 宣告必須參考值,但 '{0}' 僅參考類型。", "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "無法對 'void' 類型的運算式測試真實性。", "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "擴充的 Unicode 逸出值必須介於 0x0 與 0x10FFFF (不含) 之間。", "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別碼或關鍵字不可直接接在數字常值後面。", "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不得在環境內容中宣告實作。", "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "匯入別名不能參考使用 'export type' 匯出的宣告。", "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "匯入別名不能參考使用 'import type' 匯入的宣告。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "啟用 'verbatimModuleSyntax' 時,無法解析匯入別名為類型或僅類型的宣告。", "An_import_alias_cannot_use_import_type_1392": "匯入別名不能使用 'import type'", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "匯入宣告只能在模組的頂層使用。", "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "匯入宣告只能在命名空間或模組的頂層使用。", "An_import_declaration_cannot_have_modifiers_1191": "匯入宣告不得有修飾元。", - "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691": "匯入路徑的結尾不得為 '{0}' 副檔名。請考慮改為匯入 '{1}'。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "當 'allowImportingTsExtensions' 啟用時,匯入路徑只能以 '{0}' 延伸模組結尾。", "An_index_signature_cannot_have_a_rest_parameter_1017": "索引簽章不得有剩餘參數。", "An_index_signature_cannot_have_a_trailing_comma_1025": "索引簽章結尾不可有逗號。", "An_index_signature_must_have_a_type_annotation_1021": "索引簽章必須有類型註釋。", @@ -231,7 +266,7 @@ "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "具現化運算式後面不能接著屬性存取。", "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "介面只能擴充具有選擇性型別引數的識別碼/限定名稱。", "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "介面只能延伸物件類型或具有靜態已知成員的物件類型交集。", - "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840": "介面無法延伸基本類型,例如 '{0}';介面只能延伸命名類型和類別", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "無法延伸基本類型的介面,例如 '{0}'。其只能延伸其他具名物件類型。", "An_interface_property_cannot_have_an_initializer_1246": "介面屬性不得有初始設定式。", "An_iterator_must_have_a_next_method_2489": "迭代器必須要有 'next()' 方法。", "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "在 JSX 片段使用 @jsx pragma 時,必須有 @jsxFrag pragma。", @@ -239,14 +274,18 @@ "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "物件常值不能有多個相同名稱的屬性。", "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "物件常值不得有同名的屬性與存取子。", "An_object_member_cannot_be_declared_optional_1162": "不得將物件成員宣告為選擇性。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "物件的 '[Symbol.hasInstance]' 方法必須傳回布林值,才能用於 『instanceof』 運算式的右側。", "An_optional_chain_cannot_contain_private_identifiers_18030": "選擇性鏈結不能包含私人識別碼。", "An_optional_element_cannot_follow_a_rest_element_1266": "選擇性元素不能跟在 REST 元素之後。", "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器已陰影 'this' 的外部值。", "An_overload_signature_cannot_be_declared_as_a_generator_1222": "不可將多載簽章宣告為產生器。", "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘冪運算式左邊不允許具 '{0}' 運算子的一元運算式。請考慮以括弧括住運算式。", "Annotate_everything_with_types_from_JSDoc_95043": "標註具備 JSDoc 之類型的所有項目 ", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "為命名空間中的屬性 expando 函式類型加上標註", "Annotate_with_type_from_JSDoc_95009": "為來自 JSDoc 的類型標註", "Another_export_default_is_here_2753": "其他匯出預設位於此處。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "只有在設定 Unicode 設定 (v) 旗標時,才能使用任何可能比對超過一個字元的 Unicode 屬性。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "在否定字元類別中,任何可能比對超過一個字元的專案都無效。", "Are_you_missing_a_semicolon_2734": "缺少分號嗎?", "Argument_expression_expected_1135": "必須是引數運算式。", "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 選項的引數必須是: {1}。", @@ -255,13 +294,15 @@ "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "類型 '{0}' 的引數無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}' 的參數。請考慮將 'undefined' 新增到目標屬性的類型。", "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供其餘參數 '{0}' 的引數。", "Array_element_destructuring_pattern_expected_1181": "必須是陣列項目解構模式。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "具有擴張元素的陣列無法使用 --isolatedDeclarations 推斷。", "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "判斷提示要求必須以明確的型別註解宣告呼叫目標中的每個名稱。", "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "判斷提示要求呼叫目標必須為識別碼或限定名稱。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "在未宣告的情況下,--isolatedDeclarations 不支援指派屬性給函式。新增指派給此函式之屬性的明確宣告。", "Asterisk_Slash_expected_1010": "必須是 '*/'。", + "At_least_one_accessor_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9009": "至少一個存取子必須有具備 --isolatedDeclarations 的明確傳回類型註解。", "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全域範圍的增強指定只能在外部模組宣告或環境模組宣告直接巢狀。", "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "除非全域範圍的增強指定已顯示在環境內容中,否則應含有 'declare' 修飾元。", "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "專案 '{0}' 中已啟用鍵入的自動探索。正在使用快取位置 '{2}' 執行模組 '{1}' 的額外解析傳遞。", - "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Await 運算式無法在類別靜態區塊內使用。", "BUILD_OPTIONS_6919": "建置選項", "Backwards_Compatibility_6253": "回溯相容性", "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底類別運算式無法參考類別型別參數。", @@ -271,12 +312,14 @@ "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "當目標低於 ES2020 時,無法使用 BigInt 常值。", "Binary_digit_expected_1177": "必須是二進位數字。", "Binding_element_0_implicitly_has_an_1_type_7031": "繫結元素 '{0}' 隱含擁有 '{1}' 類型。", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "無法使用 --isolatedDeclarations 直接匯出繫結元素。", "Block_scoped_variable_0_used_before_its_declaration_2448": "已在其宣告之前使用區塊範圍變數 '{0}'。", "Build_a_composite_project_in_the_working_directory_6925": "在工作目錄中建置複合專案。", "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "建置包括似乎已是最新狀態的所有專案。", "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "若已過期,則建置一或多個專案及其相依性", "Build_option_0_requires_a_value_of_type_1_5073": "組建選項 '{0}' 需要 {1} 類型的值。", "Building_project_0_6358": "正在建置專案 '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "內建 iterators 會以 'undefined' 而非 'any' 的 'TReturn' 類型具現化。", "COMMAND_LINE_FLAGS_6921": "命令列旗標", "COMMON_COMMANDS_6916": "一般命令", "COMMON_COMPILER_OPTIONS_6920": "一般編譯器選項", @@ -284,13 +327,13 @@ "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼叫簽章傳回型別 '{0}' 與 '{1}' 不相容。", "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少傳回型別註解的呼叫簽章隱含了 'any' 傳回型別。", "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "無引數呼叫簽章的傳回型別 '{0}' 與 '{1}' 不相容。", - "Call_target_does_not_contain_any_signatures_2346": "呼叫目標未包含任何特徵標記。", "Can_only_convert_logical_AND_access_chains_95142": "只可轉換邏輯 AND 存取鏈結", "Can_only_convert_named_export_95164": "只能轉換具名匯出", "Can_only_convert_property_with_modifier_95137": "只能轉換具有修飾元的屬性", - "Can_only_convert_string_concatenation_95154": "只能轉換字串串連", + "Can_only_convert_string_concatenations_and_string_literals_95154": "只能轉換字串串連和字串常值", "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "因為 '{0}' 是類型而非命名空間,所以無法存取 '{0}.{1}'。您要在 '{0}' 中使用 '{0}[\"{1}\"]' 擷取屬性 '{1}' 的類型嗎?", - "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "當提供 '--isolatedModules' 旗標時,則無法存取環境常數列舉。", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "啟用 '{1}' 時,無法從另一個不具備資格的檔案存取 '{0}'。請改用 '{2}'。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "啟用 '{0}' 時,無法存取環境連續列舉。", "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "無法將 '{0}' 建構函式類型指派至 '{1}' 建構函式類型。", "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "無法將抽象建構函式類型指派給非抽象建構函式類型。", "Cannot_assign_to_0_because_it_is_a_class_2629": "無法指派至 '{0}',因為其為類別。", @@ -317,7 +360,7 @@ "Cannot_find_lib_definition_for_0_2726": "找不到 '{0}' 的程式庫定義。", "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到 '{0}' 的程式庫定義。您是指 '{1}' 嗎?", "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模組 '{0}'。建議使用 '--resolveJsonModule',匯入副檔名為 '.json' 的模組。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792": "找不到模組 '{0}'。您是要將 'moduleResolution' 選項設為 'node',或是要將別名新增至 'paths' 選項嗎?", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模組 '{0}'。您是要將 'moduleResolution' 選項設為 'nodenext',或是要將別名新增至 'paths' 選項?", "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模組 '{0}' 或其對應的型別宣告。", "Cannot_find_name_0_2304": "找不到名稱 '{0}'。", "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名稱 '{0}'。您指的是 '{1}' 嗎?", @@ -326,6 +369,8 @@ "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名稱 '{0}'。您是否想要在非同步函數中寫入此專案?", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為「{1}」或更新版本。", "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為包含 'dom'。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`,然後將 'bun' 新增至 tsconfig 中的類型欄位。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱「{0}」。需要為測試執行器安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的類型欄位。", "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`。", @@ -345,16 +390,16 @@ "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列解構永遠會傳送 '{0}',所以無法逐一查看值。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列擴張永遠會傳送 '{0}',所以無法逐一查看值。", "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "因為值的迭代器 'next' 方法需要類型 '{1}',但 for-of 永遠會傳送 '{0}',所以無法逐一查看值。", - "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308": "因為專案 '{0}' 未設定 'outFile',所以無法於其前面加上任何內容", + "Cannot_move_statements_to_the_selected_file_95183": "無法將陳述式移動至選取的檔案", + "Cannot_move_to_file_selected_file_is_invalid_95179": "無法移動至檔案,選取的檔案無效", "Cannot_read_file_0_5083": "無法讀取檔案 '{0}'。", "Cannot_read_file_0_Colon_1_5012": "無法讀取檔案 '{0}': {1}。", "Cannot_redeclare_block_scoped_variable_0_2451": "無法重新宣告區塊範圍變數 '{0}'。", "Cannot_redeclare_exported_variable_0_2323": "無法重新宣告匯出的變數 '{0}'。", "Cannot_redeclare_identifier_0_in_catch_clause_2492": "無法在 Catch 子句中重新宣告識別碼 '{0}'。", "Cannot_start_a_function_call_in_a_type_annotation_1441": "無法在類型註釋中啟動函式呼叫。", - "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "因為讀取檔案 '{1}' 時發生錯誤,所以無法更新專案 '{0}' 的輸出", "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "除非有提供 '--jsx' 旗標,否則無法使用 JSX。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269": "提供 '--isolatedModules' 旗標時,無法在類型或僅類型命名空間上使用 'export import'。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "啟用 '{0}' 時,無法在類型或僅類型命名空間上使用 'export import'。", "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "當 '--module' 為 'none' 時,無法使用匯入、匯出或模組增強指定。", "Cannot_use_namespace_0_as_a_type_2709": "不得使用命名空間 '{0}' 作為類型。", "Cannot_use_namespace_0_as_a_value_2708": "不得使用命名空間 '{0}' 作為值。", @@ -371,6 +416,7 @@ "Change_extends_to_implements_90003": "將 [延伸] 變更至 [實作]5D;", "Change_spelling_to_0_90022": "將拼字變更為 '{0}'", "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "檢查是否已宣告但未在建構函式中設定的類別屬性。", + "Check_side_effect_imports_6806": "檢查副作用匯入。", "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "檢查 'bind'、'call' 和 'apply' 方法的引數是否與原始函式相符。", "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "檢查 '{0}' 是否為 '{1}' - '{2}' 的最長相符前置詞。", "Circular_definition_of_import_alias_0_2303": "匯入別名 '{0}' 的循環定義。", @@ -388,6 +434,7 @@ "Class_declaration_cannot_implement_overload_list_for_0_2813": "類別宣告無法為 '{0}' 實作多載清單。", "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告不能有一個以上的 `@augments` 或 `@extends` 標籤。", "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "類別裝飾項目無法與靜態私人識別碼一起使用。請考慮移除實驗性裝飾項目。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父類別所定義的類別欄位 '{0}' 無法透過超級在子類別中存取。", "Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。", "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 時,類別名稱不可為 'Object'。", "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。", @@ -397,6 +444,7 @@ "Command_line_Options_6171": "命令列選項", "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "當路徑為專案組態檔或為 'tsconfig.json' 所在的資料夾時編譯專案。", "Compiler_Diagnostics_6251": "編譯器診斷", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "編譯器選項 '{0}' 無法指定空字串。", "Compiler_option_0_expects_an_argument_6044": "編譯器選項 '{0}' 必須要有一個引數。", "Compiler_option_0_may_not_be_used_with_build_5094": "編譯器選項 '--{0}' 不能與 '--build' 一起使用。", "Compiler_option_0_may_only_be_used_with_build_5093": "編譯器選項 '--{0}' 只能與 '--build' 一起使用。", @@ -410,10 +458,12 @@ "Composite_projects_may_not_disable_declaration_emit_6304": "複合式專案可能未停用宣告發出。", "Composite_projects_may_not_disable_incremental_compilation_6379": "複合專案可能不會停用累加編譯。", "Computed_from_the_list_of_input_files_6911": "從輸入檔案清單計算", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算屬性必須是具有 --isolatedDeclarations 的數字或字串常值、變數或點狀運算式。", "Computed_property_names_are_not_allowed_in_enums_1164": "列舉中不能有計算的屬性名稱。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "無法使用 --isolatedDeclarations 推斷類別或物件常值上的計算屬性名稱。", "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "具有字串值成員的列舉中不允許計算值。", "Concatenate_and_emit_output_to_single_file_6001": "串連並發出輸出至單一檔案。", - "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "在 '{1}' 和 '{2}' 找到衝突的 '{0}' 定義。請考慮安裝此程式庫的特定版本以解決衝突。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析匯入時,除了解析程式特定預設值之外,還需要設定的條件。", "Conflicts_are_in_this_file_6201": "此檔案中有衝突。", "Consider_adding_a_declare_modifier_to_this_class_6506": "請考慮將 'declare' 修飾元加入此類別。", "Construct_signature_return_types_0_and_1_are_incompatible_2203": "建構簽章傳回型別 '{0}' 與 '{1}' 不相容。", @@ -433,7 +483,6 @@ "Convert_0_to_mapped_object_type_95055": "將 '{0}' 轉換為對應的物件類型", "Convert_all_const_to_let_95102": "將所有 'const' 轉換為 'let'", "Convert_all_constructor_functions_to_classes_95045": "將所有建構函式轉換為類別", - "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374": "將所有未作為值使用的匯入轉換為僅限類型的匯入", "Convert_all_invalid_characters_to_HTML_entity_code_95101": "將所有無效字元轉換為 HTML 實體代碼", "Convert_all_re_exported_types_to_type_only_exports_1365": "將所有重新匯出的類型轉換為僅限類型的匯出", "Convert_all_require_to_import_95048": "將所有 'require' 轉換至 'import'", @@ -441,6 +490,7 @@ "Convert_all_to_bigint_numeric_literals_95092": "全部轉換為 Bigint 數字常值", "Convert_all_to_default_imports_95035": "全部轉換為預設匯入", "Convert_all_type_literals_to_mapped_type_95021": "將所有類型常值轉換成相對應的類型", + "Convert_all_typedef_to_TypeScript_types_95177": "轉換所有 typedef 為 TypeScript 類型。", "Convert_arrow_function_or_function_expression_95122": "轉換箭頭函式或函式運算式", "Convert_const_to_let_95093": "將 'const' 轉換為 'let'", "Convert_default_export_to_named_export_95061": "將預設匯出轉換為具名匯出", @@ -465,7 +515,7 @@ "Convert_to_optional_chain_expression_95139": "轉換為選擇性鏈結運算式", "Convert_to_template_string_95096": "轉換為範本字串", "Convert_to_type_only_export_1364": "轉換為僅限類型的匯出", - "Convert_to_type_only_import_1373": "轉換為僅限類型的匯入", + "Convert_typedef_to_TypeScript_type_95176": "轉換 typedef 為 TypeScript 類型。", "Corrupted_locale_file_0_6051": "地區設定檔 {0} 已損毀。", "Could_not_convert_to_anonymous_function_95153": "無法轉換成匿名函式", "Could_not_convert_to_arrow_function_95151": "無法轉換成箭頭函式", @@ -480,15 +530,20 @@ "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名稱 '{0}'。您是不是指 '{1}'?", "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空間匯入或具名匯入", "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要為其產生存取子的屬性", + "Could_not_find_variable_to_inline_95185": "找不到要內嵌的變數。", "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "無法解析具有下列延伸模組的路徑 '{0}': {1}。", "Could_not_write_file_0_Colon_1_5033": "無法編寫檔案 '{0}': {1}。", "Create_source_map_files_for_emitted_JavaScript_files_6694": "建立發出 JavaScript 檔案的來源對應檔。", "Create_sourcemaps_for_d_ts_files_6614": "為 d.ts 檔案建立 sourcemap。", "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用建議設定在工作目錄中建立 tsconfig.json。", "DIRECTORY_6038": "目錄", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字元類別中不允許小數點逸出序列和反向參考。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "不允許前置為零的小數點。", "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "宣告會讓另一個檔案中的宣告增加。這無法序列化。", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "此檔案發出的宣告需要保留此匯入,以進行增強。該情況不受 --isolatedDeclarations 支援。", "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此檔案的宣告發出必須使用私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此檔案的宣告發出必須使用來自模組 '{1}' 的私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_it_s_type_This_is_not_su_9025": "此參數發出的宣告需要隱含地新增未定義值至其類型。該情況不受 --isolatedDeclarations 支援。", "Declaration_expected_1146": "必須是宣告。", "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣告名稱與內建全域識別碼 '{0}' 衝突。", "Declaration_or_statement_expected_1128": "必須是宣告或陳述式。", @@ -504,12 +559,14 @@ "Declare_static_property_0_90027": "宣告靜態屬性 '{0}'", "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "裝飾項目函式傳回類型 '{0}' 無法指派給類型 '{1}'。", "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "裝飾項目函式傳回類型是 '{0}',但必須是 'void' 或 'any'。", + "Decorator_used_before_export_here_1486": "在此處「匯出」之前使用的裝飾項目。", "Decorators_are_not_valid_here_1206": "裝飾項目在此處無效。", "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "無法將裝飾項目套用至多個同名的 get/set 存取子。", - "Decorators_may_not_be_applied_to_this_parameters_1433": "裝飾項目無法套用至 'this' 參數。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果裝飾項目也出現在 'export' 之前,就不能出現在 'export' 或 'export default' 後。", "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "裝飾項目必須在屬性宣告的名稱和所有關鍵詞之前。", "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "預設 catch 子句變數為 'unknown' 而非 'any'。", "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模組的預設匯出具有或正在使用私用名稱 '{0}'。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "無法使用 --isolatedDeclarations 推斷預設匯出。", "Default_library_1424": "預設程式庫", "Default_library_for_target_0_1425": "目標 '{0}' 的預設程式庫", "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "下列識別碼的定義與其他檔案中的定義衝突: {0}", @@ -541,6 +598,7 @@ "Disable_erasing_const_enum_declarations_in_generated_code_6682": "停用在產生的程式碼中抹除 'const enum' 宣告。", "Disable_error_reporting_for_unreachable_code_6603": "停用無法執行到的程式碼錯誤報告。", "Disable_error_reporting_for_unused_labels_6604": "停用未使用標籤的錯誤報表。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "停用完整類型檢查 (只回報重要剖析和發出錯誤訊息)。", "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "停用在編譯輸出中產生自訂的協助程式函式,例如 '__extends'。", "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "停用包括任何程式庫檔案,包括預設的 lib.d.ts。", "Disable_loading_referenced_projects_6235": "停用載入參考的專案。", @@ -569,6 +627,7 @@ "Do_not_report_errors_on_unreachable_code_6077": "請勿回報無法執行到之程式碼的錯誤。", "Do_not_report_errors_on_unused_labels_6074": "請勿回報未使用之標籤的錯誤。", "Do_not_resolve_the_real_path_of_symlinks_6013": "請勿解析符號連結的真實路徑。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "請勿轉換或省略任何未標示為僅限類型的匯入或匯出,請確保其是以輸出檔案的格式並根據 'module' 設定所撰寫。", "Do_not_truncate_error_messages_6165": "不要截斷錯誤訊息。", "Duplicate_function_implementation_2393": "函式實作重複。", "Duplicate_identifier_0_2300": "識別碼 '{0}' 重複。", @@ -583,10 +642,14 @@ "Duplicate_index_signature_for_type_0_2374": "類型 '{0}' 的索引簽章重複。", "Duplicate_label_0_1114": "標籤 '{0}' 重複。", "Duplicate_property_0_2718": "屬性 '{0}' 重複。", + "Duplicate_regular_expression_flag_1500": "重複的規則運算式旗標。", "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動態匯入的指定名稱必須屬於類型 'string',但這裡的類型為 '{0}'。", "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "只有在 '--module' 旗標設定為 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16' 或 'nodenext',才支援動態匯入。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450": "動態匯入只能接受模組指定名稱和選擇性判斷提示來做為引數", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324": "當 '--module' 選項設定為 'esnext'、'node16' 或 'nodenext' 時,動態匯入只支援第二個引數。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動態匯入只接受模組指定名稱和一系列選擇性屬性來做為引數", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324": "當 '--module' 選項設定為 'esnext'、'node16'、'nodenext' 或 'preserve' 時,動態匯入只支援第二個引數。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "當 'module' 設定為 'preserve' 時,CommonJS 模組中不允許 ESM 語法。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中不允許 ESM 語法。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' 的每個宣告值不同,其中應該要有 '{2}',但只包含 '{3}'。", "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "等位型別 '{0}' 的每個成員都有建構簽章,但這些簽章都互不相容。", "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "等位型別 '{0}' 的每個成員都有簽章,但這些簽章都互不相容。", "Editor_Support_6249": "編輯器支援", @@ -613,7 +676,8 @@ "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已完成型別檢查的 JavaScript 檔案中啟用錯誤報表。", "Enable_error_reporting_when_local_variables_aren_t_read_6675": "當未讀取區域變數時,啟用錯誤報吿。", "Enable_error_reporting_when_this_is_given_the_type_any_6668": "為 'this' 指定類型 'any' 時,啟用錯誤報表。", - "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "啟用 TC39 第 2 階段草稿裝飾項目的實驗性支援。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "啟用舊版實驗性裝飾項目的實驗性支援。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "啟用匯入具有任何延伸模組的檔案,並存在宣告檔案即可。", "Enable_importing_json_files_6689": "啟用匯入 json 檔案。", "Enable_project_compilation_6302": "啟用專案編譯", "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "對函式啟用嚴格的 'bind'、'call' 及 'apply' 方法。", @@ -632,6 +696,7 @@ "Ensure_that_casing_is_correct_in_imports_6637": "請確認 Imports 中的大小寫正確。", "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "確保每個檔案都可安全地轉譯,而不依賴其他匯入。", "Ensure_use_strict_is_always_emitted_6605": "確保永遠發出 'use strict'。", + "Entering_conditional_exports_6413": "正在進入條件式匯出。", "Entry_point_for_implicit_type_library_0_1420": "隱含型別程式庫 '{0}' 的進入點", "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "具有 packageId '{1}' 的隱含型別程式庫 '{0}' 進入點", "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", @@ -640,24 +705,32 @@ "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列舉宣告只能與命名空間或其他列舉宣告合併。", "Enum_declarations_must_all_be_const_or_non_const_2473": "列舉宣告必須都是 const 或非 const。", "Enum_member_expected_1132": "必須是列舉成員。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "啟用 'isolatedModules' 時,跟隨非常值數值成員的列舉成員必須有初始設定式。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列舉成員初始設定式必須是可計算,且不參考具有 --isolatedDeclarations 的外部符號。", "Enum_member_must_have_initializer_1061": "列舉成員必須有初始設定式。", "Enum_name_cannot_be_0_2431": "列舉名稱不得為 '{0}'。", - "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535": "列舉類型 '{0}' 有初始設定式非常值的成員。", "Errors_Files_6041": "錯誤檔案", + "Escape_sequence_0_is_not_allowed_1488": "不允許逸出序列 '{0}'。", "Examples_Colon_0_6026": "範例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "過度複雜性比較類型 '{0}' 和 '{1}'。", "Excessive_stack_depth_comparing_types_0_and_1_2321": "比較類型 '{0}' 與 '{1}' 的堆疊深度過深。", + "Exiting_conditional_exports_6416": "正在退出條件式匯出。", "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "必須是 {0}-{1} 型別引數; 請提供有 '@ extends' 標記的這類型引數。", "Expected_0_arguments_but_got_1_2554": "應有 {0} 個引數,但得到 {1} 個。", "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "應為 {0} 個引數,但現有 {1} 個。是否忘記將型別引數中的 'void' 納入 'Promise' 中?", "Expected_0_type_arguments_but_got_1_2558": "應有 {0} 個型別引數,但得到 {1} 個。", "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "必須是 {0} 型別引數; 請提供有 '@ extends' 標記的這類引數。", "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "需要 1 個引數,但得到 0。'new Promise()' 需要 JSDoc 提示,才能產生可以呼叫而不含引數的 'resolve'。", + "Expected_a_Unicode_property_name_1523": "必須是 Unicode 屬性名稱。", + "Expected_a_Unicode_property_name_or_value_1527": "必須是 Unicode 屬性名稱或值。", + "Expected_a_Unicode_property_value_1525": "必須是 Unicode 屬性值。", + "Expected_a_capturing_group_name_1514": "必須是擷取群組名稱。", + "Expected_a_class_set_operand_1520": "必須是類別集運算元。", "Expected_at_least_0_arguments_but_got_1_2555": "至少應有 {0} 個引數,但得到 {1} 個。", "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' 需要對應的 JSX 結尾標記。", "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 片段必須有對應的結尾標記。", "Expected_for_property_initializer_1442": "屬性初始設定式必須是 '='。", "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "在 'package.json' 中 '{0}' 欄位的類型必須為 '{1}',但取得 '{2}'。", - "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "裝飾項目的實驗性支援是未來版本中可能會變更的功能。在 'tsconfig' 或 'jsconfig' 中設定 'experimentalDecorators' 選項可移除此警告。", "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明確指定的模組解析種類: '{0}'。", "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 選項必須設定為 'es2016' 或更新版本,才可以對 'bigint' 值執行乘冪運算。", "Export_0_from_module_1_90059": "從模組 '{1}' 匯出 '{0}'", @@ -674,13 +747,20 @@ "Exported_variable_0_has_or_is_using_private_name_1_4025": "匯出的變數 '{0}' 具有或使用私用名稱 '{1}'。", "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模組增強指定中不允許匯出及匯出指派。", "Expression_expected_1109": "必須是運算式。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表達式必須包含在括弧內,才能做為裝飾項目使用。", "Expression_or_comma_expected_1137": "必須是運算式或逗號。", "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "運算式產生的元組類型太大而無法表示。", "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "運算式產生的等位型別過於複雜而無法表示。", "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "運算式會解析成 '_super',而編譯器會使用其來擷取基底類別參考。", "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "運算式將解析成變數宣告 '_newTarget',而供編譯器用來擷取 'new.target' 中繼屬性參考。", "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "運算式會解析成變數宣告 '_this',而編譯器會使用此宣告來擷取 'this' 參考 。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "無法使用 --isolatedDeclarations 推斷運算式類型。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "擴充子句不能包含具有 --isolatedDeclarations 的運算式。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推斷類型 '{0}' 的 'Extends' 子句包含或使用了私人名稱 '{1}'。", + "Extract_base_class_to_variable_90064": "擷取基底類別至變數", + "Extract_binding_expressions_to_variable_90066": "將繫結運算式擷取至變數", "Extract_constant_95006": "擷取常數", + "Extract_default_export_to_variable_90065": "擷取預設匯出至變數", "Extract_function_95005": "擷取函式", "Extract_to_0_in_1_95004": "擷取至 {1} 中的 {0}", "Extract_to_0_in_1_scope_95008": "擷取至 {1} 範圍中的 {0}", @@ -688,23 +768,25 @@ "Extract_to_interface_95090": "擷取至介面", "Extract_to_type_alias_95078": "擷取至類型別名", "Extract_to_typedef_95079": "擷取至 typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "擷取至變數,並以 '{0} as typeof {0}' 取代", "Extract_type_95077": "擷取類型", "FILE_6035": "檔案", "FILE_OR_DIRECTORY_6040": "檔案或目錄", - "Failed_to_parse_file_0_Colon_1_5014": "無法剖析檔案 '{0}': {1}。", + "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency '{0}'。", + "Failed_to_resolve_under_condition_0_6415": "在條件 '{0}' 下解析失敗。", "Fallthrough_case_in_switch_7029": "參數中的 fallthrough 案例。", "File_0_does_not_exist_6096": "檔案 '{0}' 不存在。", "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根據之前快取的查閱,檔案 '{0}' 不存在。", - "File_0_exist_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其作為名稱解析結果使用。", "File_0_exists_according_to_earlier_cached_lookups_6239": "根據之前快取的查閱,檔案 '{0}' 存在。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其做為名稱解析結果使用。", "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "不支援檔案 '{0}' 的副檔名。支援的副檔名只有 {1}。", - "File_0_has_an_unsupported_extension_so_skipping_it_6081": "因為不支援檔案 '{0}' 的副檔名,所以將其跳過。", "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "檔案 '{0}' 為 JavaScript 檔案。您是要啟用 'allowJs' 選項嗎?", "File_0_is_not_a_module_2306": "檔案 '{0}' 不是模組。", "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "檔案 '{0}' 未列於專案 '{1}' 的檔案清單內。專案必須列出所有檔案,或使用 'include' 模式。", "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "檔案 '{0}' 不在 'rootDir' '{1}' 之下。'rootDir' 必須包含所有原始程式檔。", "File_0_not_found_6053": "找不到檔案 '{0}'。", "File_Management_6245": "檔案管理", + "File_appears_to_be_binary_1490": "檔案顯示為二進位。", "File_change_detected_Starting_incremental_compilation_6032": "偵測到檔案變更。正在啟動累加編譯...", "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "檔案是 CommonJS 模組,因為 '{0}' 沒有 \"type\" 欄位", "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "檔案是 CommonJS 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", @@ -724,6 +806,7 @@ "File_is_output_of_project_reference_source_0_1428": "檔案是專案參考來源 '{0}' 的輸出", "File_is_source_from_referenced_project_specified_here_1416": "檔案是此處指定參考專案的來源。", "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "檔案名稱 '{0}' 與包含的檔案名稱 '{1}' 只差在大小寫。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "檔案名稱 '{0}' 具有 '{1}' 延伸模組 - 改為查詢 '{2}'。", "File_name_0_has_a_1_extension_stripping_it_6132": "檔案名稱 '{0}' 的副檔名為 '{1}'。正予以移除。", "File_redirects_to_file_0_1429": "檔案會重新導向檔案 '{0}'", "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "檔案規格不得包含出現在遞迴目錄萬用字元 ('**') 之後的父目錄 ('..'): '{0}'。", @@ -733,23 +816,25 @@ "Fix_all_expressions_possibly_missing_await_95085": "修正所有可能缺少 'await' 的運算式", "Fix_all_implicit_this_errors_95107": "修正所有隱含 'this' 的錯誤", "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修正非同步函式所有不正確的傳回型別", - "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。", + "Fix_all_with_type_only_imports_95182": "使用僅限類型匯入來修正所有問題", "Found_0_errors_6217": "找到 {0} 個錯誤。", "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 個錯誤。正在監看檔案變更。", "Found_0_errors_in_1_files_6261": "在 {1} 檔案中發現 {0} 個錯誤。", "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一個檔案中發現 {0} 個錯誤,開始位置: {1}", "Found_1_error_6216": "找到 1 個錯誤。", "Found_1_error_Watching_for_file_changes_6193": "找到 1 個錯誤。正在監看檔案變更。", - "Found_1_error_in_1_6259": "在 {1} 找到 1 個錯誤", + "Found_1_error_in_0_6259": "在 {0} 找到 1 個錯誤", "Found_package_json_at_0_6099": "在 '{0}' 找到 'package.json'。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250": "以 'ES3' 或 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251": "以 'ES3' 或 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。類別定義會自動進入 strict 模式。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252": "以 'ES3' 或 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。模組會自動進入 strict 模式。", + "Found_peerDependency_0_with_1_version_6282": "找到版本為 '{1}' 的 peerDependency '{0}'。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。類別定義會自動進入 strict 模式。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。模組會自動進入 strict 模式。", "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少傳回型別註解的函式運算式隱含了 '{0}' 傳回型別。", "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "遺漏函式實作,或函式實作未緊接在宣告之後。", "Function_implementation_name_must_be_0_2389": "函式實作名稱必須是 '{0}'。", "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "函式因為沒有傳回型別註解,並在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函式缺少結束 return 陳述式,且傳回類型不包括 'undefined'。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函式必須有具備 --isolatedDeclarations 的明確傳回型別註解。", "Function_not_implemented_95159": "未實作函式。", "Function_overload_must_be_static_2387": "函式多載必須為靜態。", "Function_overload_must_not_be_static_2388": "函式多載不可為靜態。", @@ -785,6 +870,7 @@ "Identifier_expected_1003": "必須是識別碼。", "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "必須有識別碼。'__esModule' 已保留為轉換 ECMAScript 模組時匯出的標記。", "Identifier_or_string_literal_expected_1478": "需要識別碼或字串常值。", + "Identifier_string_literal_or_number_literal_expected_1496": "必須是識別碼、字串常值或數字常值。", "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果「{0}」套件實際上公開了此模組,請考慮傳送提取要求以修改 「https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}」", "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果 '{0}' 套件的確公開了此模組,請嘗試新增包含 `declare module '{1}';` 的宣告 (.d.ts) 檔案。", "Ignore_this_error_message_90019": "略過此錯誤訊息", @@ -795,12 +881,18 @@ "Implement_interface_0_90006": "實作介面 '{0}'", "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "匯出類別 '{0}' 的 Implements 子句具有或使用私用名稱 '{1}'。", "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "在執行階段中無法將 'symbol' 隱含轉換為 'string'。請考慮將此運算式包裝在 'String(...)' 中。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "匯入 '{0}' 會與此檔案中使用的全域值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "匯入 '{0}' 會與本機值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", "Import_0_from_1_90013": "從 \"{1}\" 匯入 '{0}'", "Import_assertion_values_must_be_string_literal_expressions_2837": "匯入判斷提示值必須是字串常值運算式。", - "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836": "轉換為 commonjs 'require' 呼叫的陳述式上不允許匯入判斷提示。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821": "只有當 '--module' 選項設定為 'esnext' 時,才支援匯入判斷提示。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入判斷提示。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821": "只有當 '--module' 選項設定為 'esnext'、'nodenext' 或 'preserve' 時,才支援匯入判斷提示。", "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "匯入判斷提示不能與僅限類型的匯入或匯出搭配使用。", "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "當目標為 ECMAScript 模組時,無法使用匯入指派。請考慮改用 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' 或其他模組格式。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "匯入屬性值必須是字串常值運算式。", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入屬性。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823": "只有當 '--module' 選項設定為 'esnext'、'nodenext' 或 'preserve’ 時,才支援匯入屬性。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "匯入屬性不能與僅限類型的匯入或匯出搭配使用。", "Import_declaration_0_is_using_private_name_1_4000": "匯入宣告 '{0}' 使用私用名稱 '{1}'。", "Import_declaration_conflicts_with_local_declaration_of_0_2440": "匯入宣告與 '{0}' 的區域宣告衝突。", "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空間中的匯入宣告不得參考模組。", @@ -824,6 +916,7 @@ "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在發出的 JavaScript 中包含 sourcemap 檔案。", "Includes_imports_of_types_referenced_by_0_90054": "包括 '{0}' 參考的類型匯入", "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch、-w 會開始監看目前專案是否有檔案變更。設定之後,您便可以使用以下來設定監看式模式:", + "Incomplete_quantifier_Digit_expected_1505": "不完整的數量詞。必須是數字。", "Index_signature_for_type_0_is_missing_in_type_1_2329": "類型 '{0}' 的索引簽章在類型 '{1}' 中遺失。", "Index_signature_in_type_0_only_permits_reading_2542": "類型 '{0}' 中的索引簽章只允許讀取。", "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合併宣告 '{0}' 中的個別宣告必須全部匯出或全在本機上。", @@ -832,13 +925,14 @@ "Infer_parameter_types_from_usage_95012": "從使用方式推斷參數類型", "Infer_this_type_of_0_from_usage_95080": "從使用方式推斷 '{0}' 的 'this' 類型", "Infer_type_of_0_from_usage_95011": "從使用方式推斷 '{0}' 的類型", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支援來自類別運算式的推斷。", "Initialize_property_0_in_the_constructor_90020": "將建構函式中的屬性 '{0}' 初始化", "Initialize_static_property_0_90021": "將靜態屬性 '{0}' 初始化", "Initializer_for_property_0_2811": "屬性 '{0}' 的初始設定式", "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "執行個體成員變數 '{0}' 的初始設定式不得參考建構函式中所宣告的識別碼 '{1}'。", - "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初始設定式未提供任何值給這個繫結項目,且該繫結項目沒有預設值。", "Initializers_are_not_allowed_in_ambient_contexts_1039": "環境內容中不得有初始設定式。", "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 專案並建立 tsconfig.json 檔案。", + "Inline_variable_95184": "內嵌變數", "Insert_command_line_options_and_files_from_a_file_6030": "從檔案插入命令列選項與檔案。", "Install_0_95014": "安裝 '{0}'", "Install_all_missing_types_packages_95033": "安裝缺少的所有類型套件", @@ -855,9 +949,11 @@ "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "增強指定中的模組名稱無效,找不到模組 '{0}'。", "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新運算式的選擇性鏈結無效。您想要呼叫 '{0}()' 嗎?", "Invalid_reference_directive_syntax_1084": "無效的 'reference' 指示詞語法。", + "Invalid_syntax_in_decorator_1498": "裝飾項目中無效的語法。", "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' 的使用無效。不能在類別靜態區塊內使用。", "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' 的用法無效。模組會自動採用 strict 模式。", "Invalid_use_of_0_in_strict_mode_1100": "在 strict 模式中使用 '{0}' 無效。", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' 的值無效。", "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' 的值無效。'{0}' 不是有效的識別碼。", @@ -865,12 +961,15 @@ "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素類型 '{0}' 不是有效的 JSX 元素。", "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其執行個體類型 '{0}' 不是有效的 JSX 元素。", "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其傳回型別 '{0}' 不是有效的 JSX 元素。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其類型 '{0}' 不是有效的 JSX 元素類型。", "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' 不符合 'extends {2}' 子句。", "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc ''@{0}' 未連結到類別。", "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' 只能出現在特徵標記的最後一個參數中。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 標記的名稱為 '{0}',但沒有為該名稱的參數。", "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 標籤的名稱為 '{0}',但沒有任何參數使用該名稱。如有陣列類型,則會與 'arguments' 相符。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以轉換成 TypeScript 類型。", "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 標記應具有類型註解,或者其後接著 '@property' 或 '@member' 標記。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs 可以轉換成 TypeScript 類型。", "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 類型只能在文件註解中使用。", "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 類型可移為 TypeScript 類型。", "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能將非空白的 'expression' 指派給 JSX 屬性。", @@ -900,8 +999,8 @@ "List_of_folders_to_include_type_definitions_from_6161": "要包含之類型定義所屬資料夾的清單。", "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "資料夾的清單。這些資料夾內所含的合併內容代表了專案在執行階段時的結果。", "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在從根目錄 '{1}',候選位置 '{2}' 載入 '{0}'。", - "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型 '{1}'。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型 '{1}'。", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型: {1}。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型: {1}。", "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "地區設定的格式必須是 <語言> 或 <語言>-<國家/地區>。例如 '{0}' 或 '{1}'。", "Log_paths_used_during_the_moduleResolution_process_6706": "在 'moduleResolution' 處理序期間使用的記錄檔路徑。", "Longest_matching_prefix_for_0_is_1_6108": "符合 '{0}' 的前置詞最長為 '{1}'。", @@ -910,6 +1009,7 @@ "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "僅讓 keyof 傳回字串,而不是單一字串、數字或符號。舊版選項。", "Make_super_call_the_first_statement_in_the_constructor_90002": "使 'super()' 呼叫成為建構函式中的第一個陳述式", "Mapped_object_type_implicitly_has_an_any_template_type_7039": "對應的物件類型隱含具有 'any' 範本類型。", + "Mark_array_literal_as_const_90070": "標記陣列常值為常數", "Matched_0_condition_1_6403": "符合 '{0}' 條件 '{1}'。", "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "依預設比對包含模式 '**/*'", "Matched_by_include_pattern_0_in_1_1407": "依 '{1}' 中的包含模式 '{0}' 比對", @@ -921,6 +1021,7 @@ "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "因為方法 '{0}' 已標記為抽象,所以不可具有實作。", "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "匯出介面的方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "匯出介面的方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必須有具備 --isolatedDeclarations 的明確傳回型別註解。", "Method_not_implemented_95158": "未實作方法。", "Modifiers_cannot_appear_here_1184": "此處不得出現修飾元。", "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模組 '{0}' 只能依預設使用 '{1}' 旗標匯入", @@ -936,8 +1037,8 @@ "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模組 '{0}' 沒有匯出的成員 '{1}'。您是要改用 'import {1} from {0}' 嗎?", "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "同名的區域宣告隱藏了模組 '{0}'。", "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模組 '{0}' 使用 'export =',因而無法以 'export *' 的方式使用。", - "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145": "此檔案未修改,因此模組 '{0}' 已解析為在 '{1}' 中所宣告的環境模組。", "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模組 '{0}' 在檔案 '{1}' 中已解析為本機宣告的環境模組。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模組 '{0}' 已解析為 '{1}',但是尚未設定 '--allowArbitraryExtensions'。", "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模組 '{0}' 已解析為 '{1}',但未設定 '--jsx'。", "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模組 '{0}' 已解析為 '{1}',但未使用 '--resolveJsonModule'。", "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模組宣告名稱只能使用 ' 或 \" 引用的字串。", @@ -949,15 +1050,21 @@ "Module_resolution_using_rootDirs_has_failed_6111": "使用 'rootDirs' 解析模組失敗。", "Modules_6244": "模組", "Move_labeled_tuple_element_modifiers_to_labels_95117": "將標記的元組元素修飾元移至標籤", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "將預設匯出中的運算式移動到變數,並在其中新增類型註釋。", "Move_to_a_new_file_95049": "移至新檔", + "Move_to_file_95178": "移動至檔案", "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允許多個連續的數字分隔符號。", "Multiple_constructor_implementations_are_not_allowed_2392": "不允許多個建構函式實作。", "NEWLINE_6061": "新行", "Name_is_not_valid_95136": "名稱無效", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "只有以 'ES2018' 或更新版本為目標時,才可以使用具名擷取群組。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "具有相同名稱的命名擷取群組必須互相排除。", "Named_property_0_of_types_1_and_2_are_not_identical_2319": "類型 '{1}' 及 '{2}' 的具名屬性 '{0}' 不一致。", "Namespace_0_has_no_exported_member_1_2694": "命名空間 '{0}' 沒有匯出的成員 '{1}'。", "Namespace_must_be_given_a_name_1437": "必須為命名空間指定名稱。", "Namespace_name_cannot_be_0_2819": "命名空間名稱不得為 '{0}'。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "啟用 '{0}' 時,在全域指令碼檔案中不允許命名空間。如果此檔案不是預定為全域指令碼,將 'moduleDetection' 設定為 'force',或新增空白的 'export {}' 陳述式。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "裝飾項目和修飾元都無法套用至 'this' 參數。", "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "沒有任何基底建構函式具有指定的類型引數數量。", "No_constituent_of_type_0_is_callable_2755": "無法呼叫 '{0}' 類型的任何構件。", "No_constituent_of_type_0_is_constructable_2759": "無法建構 '{0}' 類型的任何構件。", @@ -970,13 +1077,18 @@ "No_type_could_be_extracted_from_this_type_node_95134": "無法從此類型節點擷取任何類型", "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速記屬性 '{0}' 的範圍中不存在任何值。請宣告一個值或提供初始設定式。", "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象類別 '{0}' 未實作從類別 '{2}' 繼承而來的抽象成員 '{1}'。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2} 和 {3} 等。", "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象類別運算式未實作從類別 '{1}' 繼承而來的抽象成員 '{0}'。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1} 和 {2} 等。", "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 Null 的判斷提示只可用於 TypeScript 檔案中。", "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "未設定 'baseUrl' 時,不得使用非相對路徑。是否忘記使用前置 './'?", "Non_simple_parameter_declared_here_1348": "非簡易參數已宣告於此處。", "Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。", "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 類型的構件並非都可呼叫。", "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 類型的構件並非都可構建。", + "Numbers_out_of_order_in_quantifier_1506": "數字在數量詞中失序。", "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絕對值等於或大於 2^53 的數字常值過大,無法準確地表示為整數。", "Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。", "Object_is_of_type_unknown_2571": "物件的類型為 '未知'。", @@ -986,46 +1098,58 @@ "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "物件常值只可指定已知的屬性,且類型 '{1}' 中沒有 '{0}'。", "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "物件常值只會指定已知的屬性,但類型 '{1}' 中沒有 '{0}'。您是否想要寫入 '{2}'?", "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "物件常值的屬性 '{0}' 隱含了 '{1}' 類型。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "無法使用 --isolatedDeclarations 推斷包含速記屬性的物件。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "無法使用 --isolatedDeclarations 推斷包含擴張作業的物件。", "Octal_digit_expected_1178": "必須是八進位數字。", - "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017": "八進位的常值類型必須使用 ES2015 語法。請使用語法 '{0}'。", - "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018": "列舉成員初始設定式中不允許八進位常值。請使用語法 '{0}'。", - "Octal_literals_are_not_allowed_in_strict_mode_1121": "strict 模式中不允許八進位常值。", - "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085": "當目標為 ECMAScript 5 及更高版本時,不可使用八進位的常值。請使用語法 '{0}'。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字元類別中不允許八進位逸出序列和反向參考。如果要做為逸出序列,請改用語法 '{0}'。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允許八進位逸出序列。請使用語法 '{0}'。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允許八進位常值。請使用語法 '{0}'。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' 的一個值是字串 '{2}',另一個值假設為未知的數值。", "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 陳述式中只可包含一個變數宣告。", "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 陳述式只能包含一個變數宣告。", "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "只有 void 函式可以使用 'new' 關鍵字進行呼叫。", "Only_ambient_modules_can_use_quoted_names_1035": "只有環境模組可以使用括以引號的名稱。", "Only_amd_and_system_modules_are_supported_alongside_0_6082": "只有 'amd' 與 'system' 模組連同受支援 --{0}。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "僅常數陣列可以使用 --isolatedDeclarations 推斷。", "Only_emit_d_ts_declaration_files_6014": "只發出 '.d.ts' 宣告檔案。", - "Only_named_exports_may_use_export_type_1383": "只有具名的匯出可以使用 'export type'。", - "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "只有數值列舉才可以有計算成員,但此運算式的類型為 '{0}'。若您不需要詳細檢查,請考慮改用物件常值。", "Only_output_d_ts_files_and_not_JavaScript_files_6623": "只輸出 d.ts 檔案,而不是 JavaScript 檔案。", "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "只有基底類別之公開且受保護的方法,才可透過 'super' 關鍵字存取。", "Operator_0_cannot_be_applied_to_type_1_2736": "無法將運算子 '{0}' 套用至類型 '{1}'。", "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "無法將運算子 '{0}' 套用至類型 '{1}' 和 '{2}'。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "運算子不得混合在字元類別中。改為將運算子包裝在巢狀類別中。", "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在編輯時從多專案參考檢查選擇一個專案。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "已移除選項 '{0}={1}'。請將該選項從您的設定中移除。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "選項 '{0}={1}' 已被取代,將在 TypeScript {2} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{3}\"' 以沉默此錯誤。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'false' 或 'null'。", "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'null'。", + "Option_0_can_only_be_specified_on_command_line_6266": "選項 '{0}' 只能在命令列中指定。", "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "只有在已提供選項 '--inlineSourceMap' 或選項 '--sourceMap' 時,才可使用選項 '{0}'。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有當 'moduleResolution' 設定為 'node16'、'nodenext' 或 'bundler' 時,才可以使用選項 '{0}'。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "只有當 'module' 設定為 'preserve'、'es2015' 或更新版本時,才能使用 '{0}' 選項。", "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "當選項 'jsx' 為 '{1}' 時,無法指定選項 '{0}'。", - "Option_0_cannot_be_specified_when_option_target_is_ES3_5048": "當選項 'target' 為 'ES3' 時,無法指定選項 '{0}'。", "Option_0_cannot_be_specified_with_option_1_5053": "不得同時指定選項 '{0}' 與選項 '{1}'。", "Option_0_cannot_be_specified_without_specifying_option_1_5052": "必須指定選項 '{1}' 才可指定選項 '{0}'。", "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "指定選項 '{0}' 時,必須指定選項 '{1}' 或選項 '{2}'。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "已移除選項 '{0}'。請將該選項從您的設定中移除。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "選項 '{0}' 已被取代,將在 TypeScript {1} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{2}\"' 以沉默此錯誤。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "選項 '{0}' 為多餘且不得與選項 '{1}'一起指定。", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "僅在已設定 'noEmit' 或 'emitDeclarationOnly' 時,才能使用選項 'allowImportingTsExtensions'。", "Option_build_must_be_the_first_command_line_argument_6369": "選項 '--build' 必須是第一個命令列引數。", "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "只有在使用 tsconfig、發出至單一檔案,或指定 '--tsBuildInfoFile' 選項時,才可指定 '--incremental'選項。", "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "只有在提供選項 '--module' 或是 'target' 為 'ES2015' 或更高項目時,才可使用選項 'isolatedModules'。", - "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "啟用 'isolatedModules' 時,無法停用選項 'preserveConstEnums'。", - "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095": "只有當 'module' 設定為 'es2015' 或更高版本時,才能使用 'preserveValueImports' 選項。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "當選項 'module' 設定為 '{1}' 時,選項 'moduleResolution' 必須設定為 '{0}' (或保留為未指定)。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "當選項 'moduleResolution' 設定為 '{1}' 時,選項 'module' 必須設定為 '{0}'。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "啟用 '{0}' 時,無法停用選項 'preserveConstEnums'。", "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "在命令列上,'project' 選項不得與原始程式檔並用。", - "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "只有在模組程式碼產生為 'commonjs'、'amd'、'es2015' 或 'esNext' 時,才可指定選項 '--resolveJsonModule'。", - "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "指定選項 '-resolveJsonModule' 時,不可沒有 'node' 模組解析策略。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "當 'moduleResolution' 設定為 'classic' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "當 'module' 設定為 'none'、'system' 或 'umd' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if__5111": "在未指定選項 'incremental' 或 'composite',或未執行 'tsc -b' 的情況下,無法指定選項 'tsBuildInfoFile'。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "當 'module' 設定為 'UMD'、'AMD' 或 'System' 時,無法使用選項 'verbatimModuleSyntax'。", "Options_0_and_1_cannot_be_combined_6370": "無法合併選項 '{0}' 與 '{1}'。", "Options_Colon_6027": "選項:", "Output_Formatting_6256": "輸出格式", "Output_compiler_performance_information_after_building_6615": "在組建後輸出編譯器效能資訊。", "Output_directory_for_generated_declaration_files_6166": "所產生之宣告檔案的輸出目錄。", - "Output_file_0_from_project_1_does_not_exist_6309": "沒有來自專案 '{1}' 的輸出檔 '{0}'", "Output_file_0_has_not_been_built_from_source_file_1_6305": "輸出檔 '{0}' 並非從原始程式檔 '{1}' 建置。", "Output_from_referenced_project_0_included_because_1_specified_1411": "因為指定了 '{1}',所以包含參考的專案 '{0}' 輸出", "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 輸出", @@ -1068,6 +1192,7 @@ "Parameter_declaration_expected_1138": "必須是參數宣告。", "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "參數具有名稱但沒有類型。您是指 '{0}: {1}' 嗎?", "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "參數修飾元只可用於 TypeScript 檔案中。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "參數必須有具備 --isolatedDeclarations 的明確類型註釋。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "匯出類別中公用 setter '{0}' 的參數類型具有或是正在使用私用模組 '{2}' 中的名稱 '{1}'。", "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "匯出類別中公用 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", @@ -1093,21 +1218,25 @@ "Print_the_names_of_emitted_files_after_a_compilation_6652": "在編譯後列印已發出檔案的名稱。", "Print_this_message_6017": "列印這則訊息。", "Private_accessor_was_defined_without_a_getter_2806": "私人存取子已在不使用 getter 的情況下定義。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "私人欄位 '{0}' 必須在封閉類別中宣告。", "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "變數宣告中不允許私人識別碼。", "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允許私人識別碼位於類別主體外。", "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "私人識別碼只能在類別主體中使用,且只能做為類別成員宣告、屬性存取或 'in' 運算式左側的一部分使用", "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "只有當目標為 ECMAScript 2015 及更新版本時,才可使用私人識別碼。", "Private_identifiers_cannot_be_used_as_parameters_18009": "私人識別碼不可用作為參數。", "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "無法在型別參數上存取私人或受保護的成員 '{0}'。", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以無法建置該專案", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "因為未建置專案 '{0}' 的相依性 '{1}',所以無法建置該專案", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Project '{0}' can't be built because its dependency '{1}' has errors", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Project '{0}' can't be built because its dependency '{1}' was not built", "Project_0_is_being_forcibly_rebuilt_6388": "正在強制重建專案 '{0}'", + "Project_0_is_out_of_date_because_1_6420": "由於 {1},專案 '{0}' 已過期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示檔案 '{2}' 曾經是編譯的根檔案,但已不再是。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 指出程式需要報告錯誤。", "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "因為 buildinfo 檔案 '{1}' 指出某些變更並未發出,所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示 compilerOptions 中有變更", "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "因為專案 '{0}' 的相依性 '{1}' 已過期,所以該專案已過期", "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "因為輸出 '{1}' 早於輸入 '{2}',所以專案 '{0}' 已過期", "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "因為輸出檔案 '{1}' 不存在,所以專案 '{0}' 已過期", "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "因為專案 '{0}' 的輸出使用版本 '{1}' 產生而成,與目前的版本 '{2}' 不同,所以該專案已過期", - "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372": "因為專案 '{0}' 的相依性 '{1}' 輸出已變更,所以該專案已過期", "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "專案 '{0}' 已過期,因為讀取檔案 '{1}' 時發生錯誤", "Project_0_is_up_to_date_6361": "專案 '{0}' 為最新狀態", "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "因為最新的輸入 '{1}' 早於最舊的輸出 '{2}',所以專案 '{0}' 為最新狀態", @@ -1149,7 +1278,7 @@ "Property_0_is_used_before_its_initialization_2729": "將屬性 '{0}' 初始化前已使用該屬性。", "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "類型 '{1}' 可能不存在屬性 '{0}'。您指的是 '{2}' 嗎?", "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 擴張屬性 (Attribute) 的屬性 (Property) '{0}' 不可指派給目標屬性 (Property)。", - "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "匯出之類別運算式的屬性 '{0}' 可能為私人或受保護。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "匯出之匿名類別類型的屬性 '{0}' 不可為私人或受保護的。", "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "匯出介面的屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "匯出介面的屬性 '{0}' 具有或使用私用名稱 '{1}'。", "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給 '{2}' 索引類型 '{3}'。", @@ -1157,9 +1286,10 @@ "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "屬性 '{0}' 將會覆寫 '{1}' 中的基底屬性。如果是故意覆寫的,請新增初始設定式。否則,請新增 'declare' 修飾元或移除多餘的宣告。", "Property_assignment_expected_1136": "必須是屬性指派。", "Property_destructuring_pattern_expected_1180": "必須是屬性解構模式。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "屬性必須有具備 --isolatedDeclarations 的明確類型註釋。", "Property_or_signature_expected_1131": "必須是屬性或簽章。", "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "屬性值僅能為字串常值、數值常值、'true'、'false'、'null'、物件常值或陣列常值。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179": "當目標為 'ES5' 或 'ES3' 時,為 'for-of'、擴張及解構提供完整的支援。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "當目標為 'ES5' 時,為 'for-of'、擴張及解構中的可疊代物件提供完整的支援。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "匯出類別的公用方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "匯出類別的公用方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "匯出類別的公用方法 '{0}' 具有或使用私用名稱 '{1}'。", @@ -1176,14 +1306,16 @@ "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "當函式參數未讀取時引發錯誤。", "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "當運算式及宣告包含隱含的 'any' 類型時顯示錯誤。", "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "對具有隱含 'any' 類型的 'this' 運算式引發錯誤。", - "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "提供 '--isolatedModules' 旗標時,必須使用 'export type' 重新匯出類型。", + "Range_out_of_order_in_character_class_1517": "字元類別中的範圍失序。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "啟用 '{0}' 時重新匯出類型需要使用 'export type'。", + "React_components_cannot_include_JSX_namespace_names_2639": "React 元件不得包含 JSX 命名空間名稱", "Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。", "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "減少 TypeScript 自動載入的專案數目。", "Referenced_project_0_may_not_disable_emit_6310": "參考的專案 '{0}' 不得停用發出。", "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。", "Referenced_via_0_from_file_1_1400": "透過 '{0}' 從檔案 '{1}' 參考", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 EcmaScript 匯入中需要明確的副檔名。請考慮將副檔名新增到匯入路徑。", - "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 EcmaScript 匯入中需要明確的副檔名。您是 指 '{0}' 嗎?", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。建議為匯入路徑新增副檔名。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。您是指 '{0}' 嗎?", "Remove_a_list_of_directories_from_the_watch_process_6628": "從監看處理序移除目錄清單。", "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "從監視模式的處理移除檔案清單。", "Remove_all_unnecessary_override_modifiers_95163": "移除所有不必要的 'override' 修飾元", @@ -1218,11 +1350,15 @@ "Report_errors_in_js_files_8019": "報告 .js 檔案中的錯誤。", "Report_errors_on_unused_locals_6134": "回報未使用之區域變數的錯誤。", "Report_errors_on_unused_parameters_6135": "回報未使用之參數的錯誤。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "匯出時需要足夠的註釋,讓其他工具可以簡單地產生宣告檔案。", "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "需要來自索引簽章的未宣告屬性,才能使用元素存取。", "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必要型別參數可能未遵循選擇性型別參數。", "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "從位置 '{1}' 的快取中找到模組 '{0}' 的解析。", "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "從位置 '{0}' 的快取記憶體找到類型參照指示詞 '{1}'。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相對名稱失敗; 嘗試停用新式節點解析功能,以查看 npm 程式庫是否需要更新設定。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相對名稱失敗; 嘗試使用 '--moduleResolution bundler' 查看專案是否可能需要更新設定。", "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只將 'keyof' 解析為字串值的屬性名稱 (無任何數字或符號)。", + "Resolved_under_condition_0_6414": "已在條件 '{0}' 下解析。", "Resolving_in_0_mode_with_conditions_1_6402": "正在以條件 {1} 在 {0} 模式中解析。", "Resolving_module_0_from_1_6086": "======== 正在從 '{1}' 解析模組 '{0}'。========", "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在解析與基底 URL '{1}' 相對的模組名稱 '{0}' - '{2}'。", @@ -1232,6 +1368,7 @@ "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',未設定根目錄。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,根目錄 '{1}'。========", "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,未設定根目錄。 ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自訂 typeRoots 程式的類型參考指示詞,並跳過 'node_modules' 資料夾中的查詢。", "Resolving_with_primary_search_path_0_6121": "正在解析主要搜尋路徑 '{0}'。", "Rest_parameter_0_implicitly_has_an_any_type_7019": "剩餘參數 '{0}' 隱含了 'any[]' 類型。", "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "其餘參數 '{0}' 隱含 'any[]' 類型,但可從使用方式推斷更適合的類型。", @@ -1276,12 +1413,15 @@ "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", "Rewrite_all_as_indexed_access_types_95034": "將全部重寫為經過編製索引的存取類型", "Rewrite_as_the_indexed_access_type_0_90026": "重寫為索引存取類型 '{0}'", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? 的右運算元無法連線,因為左運算元永遠不會是 nullish。", "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "無法判斷根目錄,將略過主要搜尋路徑。", "Root_file_specified_for_compilation_1427": "為編譯指定的根檔案", "STRATEGY_6039": "策略", "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "儲存 .tsbuildinfo 檔案,以允許對專案進行累加編譯。", "Saw_non_matching_condition_0_6405": "儲存不相符條件 '{0}'。", "Scoped_package_detected_looking_in_0_6182": "偵測到範圍套件,正於 '{0}' 尋找", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜尋所有上階 node_modules 目錄,以取得後援延伸模組: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜尋所有上階 node_modules 目錄,以取得慣用延伸模組: {0}。", "Selection_is_not_a_valid_statement_or_statements_95155": "選取項目非有效的一或多個陳述式", "Selection_is_not_a_valid_type_node_95133": "選取範圍不是有效的類型節點", "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "為發出的 JavaScript 設定 JavaScript 語言版本,並包含相容的程式庫宣告。", @@ -1295,11 +1435,14 @@ "Show_verbose_diagnostic_information_6150": "顯示詳細診斷資訊。", "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "顯示將會建置 (或刪除 - 若是指定有 '--clean') 的內容", "Signature_0_must_be_a_type_predicate_1224": "簽章 '{0}' 必須是型別述詞。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "簽章宣告僅能在 TypeScript 檔案中使用。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "上游專案發生錯誤時,略過建置下游專案。", "Skip_type_checking_all_d_ts_files_6693": "略過所有 .d.ts 檔案的型別檢查。", "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "略過 TypeScript 中包含 .d.ts 檔案的型別檢查。", "Skip_type_checking_of_declaration_files_6012": "跳過宣告檔案的類型檢查。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以跳過建置該專案", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "因為未建置專案 '{0}' 的相依性 '{1}',所以正在跳過該專案的組建", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Skipping build of project '{0}' because its dependency '{1}' has errors", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Skipping build of project '{0}' because its dependency '{1}' was not built", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳過看起來像絕對 URI 的模組 '{0}',目標檔案類型: {1}。", "Source_from_referenced_project_0_included_because_1_specified_1414": "因為指定了 '{1}',所以包含參考的專案 '{0}' 來源", "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 來源", "Source_has_0_element_s_but_target_allows_only_1_2619": "來源具有 {0} 個元素,但目標只允許 {1} 個。", @@ -1322,7 +1465,6 @@ "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 監看式模式的運作方式。", "Specify_library_files_to_be_included_in_the_compilation_6079": "請指定要併入編譯中的程式庫檔案。", "Specify_module_code_generation_6016": "指定模組程式碼產生。", - "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "指定模組解決方案策略: 'node' (Node.js) 或 'classic' (TypeScript 1.6 前)。", "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 'jsx: react-jsx*' 時,用來匯入 JSX Factory 函式的模組指定名稱。", "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多個資料夾,其作用類似 './node_modules/@types'。", "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定一或多個路徑或節點模組參考至繼承設定的基礎設定檔。", @@ -1360,8 +1502,10 @@ "Static_members_cannot_reference_class_type_parameters_2302": "靜態成員不得參考類別類型參數。", "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "靜態屬性 '{0}' 與建構函式 '{1}' 的內建屬性 'Function.{0}' 相衝突。", "String_literal_expected_1141": "必須是字串常值。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "當 '--module' 旗標設定為 'es2015' 或 'es2020' 時,不支援字串常值匯入和匯出名稱。", "String_literal_with_double_quotes_expected_1327": "應有具雙引號的字串常值。", "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用色彩及內容來設計錯誤與訊息的風格 (實驗)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "當有減號時,必須有子模式旗標。", "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後續的屬性宣告必須具有相同的類型。屬性 '{0}' 的類型必須是 '{1}',但此處卻是類型 '{2}'。", "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後續的變數宣告必須具有相同的類型。變數 '{0}' 的類型必須是 '{1}' 但卻是 '{2}'。", "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式 '{1}' 的替代 '{0}' 類型不正確,必須為 'string',但得到 '{2}'。", @@ -1380,14 +1524,16 @@ "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "選擇性鏈結中不允許已標記的範本運算式。", "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目標只允許 {0} 個元素,但來源的元素可能較多。", "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目標需要 {0} 個元素,但來源的元素可能較少。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目標特徵標記提供的引數過少。應有 {0} 個或更多,但只取得 {1} 個。", "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾元只可用於 TypeScript 檔案中。", "The_0_operator_cannot_be_applied_to_type_symbol_2469": "無法將 '{0}' 運算子套用至類型 'symbol'。", "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "布林類型不允許有 '{0}' 運算子。請考慮改用 '{1}'。", "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同步迭代器的 '{0}' 屬性必須為方法。", "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 '{0}' 屬性必須為方法。", "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 類型可指派給極少數的其他類型。要改用 'any' 類型嗎?", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "無法在 ES3 和 ES5 的箭號函式中參考 'arguments' 物件。請考慮使用標準函式運算式。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "在 ES3 與 ES5 的非同步函式或方法中,無法參考 'arguments' 物件。請考慮使用標準函式或方法。", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "無法同時設定 Unicode (u) 旗標和 Unicode Sets (v) 旗標。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "在 ES5 中,箭號函式內無法參考 'arguments' 物件。建議使用標準函式運算式。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "在 ES5 中,非同步函式或方法無法參考 'arguments' 物件。建議使用標準函式或方法。", "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 陳述式的主體不能是空白陳述式。", "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "對此實作的呼叫會成功,但多載的實作簽章未向外部顯示。", "The_character_set_of_the_input_files_6163": "輸入檔的字元集。", @@ -1414,6 +1560,8 @@ "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' 的推斷型別參考了具有迴圈結構且不是可完整序列化的型別。必須有型別註解。", "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' 的推斷型別參考了無法存取的 '{1}' 型別。必須有型別註解。", "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此節點的推斷型別超過編譯器將序列化的長度上限。需要明確的型別註解。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣告的初始設定式必須是具備 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣告的初始設定式必須是具備 '[Symbol.asyncDispose]()' 方法或 '[Symbol.dispose]5D;()' 方法的物件,或是 'null' 或 'undefined'。", "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "因為屬性 '{1}' 存在於多個部分,而且在某些部分為私人性質,所以交集 '{0}' 已縮減為 'never'。", "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "因為屬性 '{1}' 在某些部分有衝突的類型,所以交集 '{0}' 已縮減為 'never'。", "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' 關鍵字只可用於宣告編譯器提供的內建類型。", @@ -1421,6 +1569,8 @@ "The_last_overload_gave_the_following_error_2770": "最後一個多載出現下列錯誤。", "The_last_overload_is_declared_here_2771": "最後一個多載宣告於此處。", "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 陳述式的左側不得為解構模式。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' 陳述式左側不可為 'using' 宣告。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' 陳述式左側不可為 'await using' 宣告。", "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 陳述式左側不得使用類型註釋。", "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 陳述式的左側不可為選擇性屬性存取。", "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 陳述式的左邊必須是變數或屬性存取。", @@ -1432,6 +1582,7 @@ "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術運算的左側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "指派運算式的左側不可為選擇性屬性存取。", "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "指派運算式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 運算式的左側必須可指派至右側 '[Symbol.hasInstance]' 方法的第一個引數。", "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 運算式左側必須是類型 'any'、物件類型或型別參數。", "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "對使用者顯示訊息時所使用的地區設定 (例如 'zh-tw')", "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "在 node_modules 及載入 JavaScript 檔案下搜尋時的最大相依性深度。", @@ -1445,15 +1596,18 @@ "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "專案根目錄模棱兩可,但需要用以解決檔案 '{1}' 中的匯出對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "專案根目錄模稜兩可,但需要在檔案 '{1}' 中解析匯入對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "無法在此類別內的類型 '{1}' 上存取屬性 '{0}',原因是另一個拼字相同的私人識別碼已將其陰影。", - "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' 存取子的傳回型別必須可指派給其 'set' 存取子類型", "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "參數裝飾項目函式的傳回型別必須是 'void' 或 'any'。", "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "屬性裝飾項目函式的傳回型別必須是 'void' 或 'any'。", "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同步函式的傳回型別必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同步函式或方法的傳回類型必須為全域 Promise 類型。", "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同步函式或方法的傳回型別,必須為全域 Promise 類型。是否要寫入 'Promise<{0}>'?", "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 陳述式的右方必須是類型 'any'、物件類型或型別參數,但此處為類型 '{0}'。", "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術運算的右側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", - "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' 運算式的右側必須是 'any' 類型,或是可指派給 'Function' 介面類型的類型。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 運算式右側必須為 'any' 類型、類別、函式或其他可指派至 'Function' 介面型別的型別,或是具備 'Symbol.hasInstance' 方法的物件類型。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 運算式右側不可為具現化運算式。", "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 檔案的根值必須是物件。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目需要 {0} 個。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目至少需要 {0} 個。", "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' 的隱蔽宣告定義於此處", "The_signature_0_of_1_is_deprecated_6387": "'{1}' 的特徵標記 '{0}' 已淘汰。", "The_specified_path_does_not_exist_Colon_0_5058": "指定的路徑不存在: '{0}'。", @@ -1466,7 +1620,6 @@ "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "[類型修飾元] 無法在 [匯出類型]5D; 於其匯出陳述式上使用時,在命名的匯出上使用。", "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "[類型修飾元] 無法在 [匯入類型]5D; 於其匯入陳述式上使用時,在命名的匯入上使用。", "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "函式宣告的類型必須與函式的簽章相符。", - "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841": "沒有 'resolution-mode' 判斷提示,就無法命名此運算式的類型,這是不穩定的功能。請使用夜間 TypeScript 將此錯誤設為靜音。請嘗試使用 'npm install -D typescript@next' 更新。", "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "無法將此節點的類型序列化,因為無法將其屬性 '{0}' 序列化。", "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同步迭代器 '{0}()' 方法所傳回的類型,對具有 'value' 屬性的類型必須為 Promise。", "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器 '{0}()' 方法所傳回的類型必須具有 'value' 屬性。", @@ -1476,20 +1629,30 @@ "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 陳述式的變數宣告不得有初始設定式。", "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 陳述式的變數宣告不得有初始設定式。", "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支援 'with' 陳述式。'with' 區塊中的所有符號都會有類型 'any'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' 具有型別,不過在目前的 'moduleResolution' 設定下,無法解析此結果。建議更新為 'node16'、'nodenext' 或 'bundler'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' 具有型別,不過在採用 package.json \"exports\" 的狀態下,無法解析此結果。'{1}' 程式庫可能需要更新其 package.json 或輸入。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此規則運算式中沒有名為 '{0}' 的擷取群組。", + "There_is_nothing_available_for_repetition_1507": "沒有可重複的內容。", "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 標籤的 '{0}' 屬性只能有一個 '{1}' 類型的子系,但提供的子系卻有多個。", "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 標籤的 '{0}' 屬性需要必須有多個子系的類型 '{1}',但僅提供的子系只有一個。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此反向參考參照的群組不存在。此規則運算式中沒有任何擷取群組。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此反向參考參照的群組不存在。此規則運算式中只有 {0} 個擷取群組。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二進位運算式一律不會是 nullish。是否缺少括弧?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "此字元無法在規則運算式中逸出。", "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比較似乎是無意的,因為類型 '{0}' 和 '{1}' 沒有重疊。", "This_condition_will_always_return_0_2845": "此條件一律傳回 '{0}'。", "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此條件一律會傳回 '{0}',因為 JavaScript 會依參照而非值比較物件。", "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "因為此 '{0}' 一律會被定義,所以此條件一律傳回 True。", "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "因為永遠會定義此函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?", "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此建構函式可轉換為類別宣告。", + "This_expression_is_always_nullish_2871": "此運算式一律為 nullish.", "This_expression_is_not_callable_2349": "無法呼叫此運算式。", "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "因為此運算式為 'get' 存取子,所以無法呼叫。要在沒有 '()' 的情況下,使用該運算式嗎?", "This_expression_is_not_constructable_2351": "無法建構此運算式。", "This_file_already_has_a_default_export_95130": "此檔案已有預設匯出", - "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "因為 'importsNotUsedAsValues' 設為 'error',所以永遠不會使用此匯入作為值,且必須使用 'import type'。", "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "此宣告正在增加中。請考慮將正在增加的宣告移至相同的檔案中。", + "This_kind_of_expression_is_always_falsy_2873": "此種運算式的值一律為 false。", + "This_kind_of_expression_is_always_truthy_2872": "此種運算式的值一律為 true。", "This_may_be_converted_to_an_async_function_80006": "這可以轉換為非同步函式。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。", "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成員不能包含具有 'override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", @@ -1502,10 +1665,14 @@ "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "因為此成員會覆寫基底類別 '{0}' 中宣告的抽象方法,所以其必須具有 'override' 修飾元。", "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能以 ECMAScript 匯入/匯出來參考此模組,方法為開啟 '{0}' 旗標並參考其預設匯出。", "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模組使用 'export =' 宣告,只能在使用 '{0}' 旗標時搭配預設匯入使用。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "此作業可簡化。此班次與 `{0} {1} {2}` 完全相同。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "由於缺少傳回型別註解,故此多載會隱含傳回 '{0}' 型別。", "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此多載簽章與其實作簽章不相容。", "This_parameter_is_not_allowed_with_use_strict_directive_1346": "不允許此參數搭配 'use strict' 指示詞使用。", "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此參數屬性必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "因為此參數屬性會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "無法在子模式內切換此規則運算式旗標。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "只有以 '{0}' 或更新版本作為目標時,才能使用規則運算式旗標。", "This_spread_always_overwrites_this_property_2785": "此展開會永遠覆寫此屬性。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此語法是保留在具有 mts 或 cts 副檔名的檔案中。新增尾端逗號或明確條件約束。", "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此語法會保留在具有 mts 或 cts 副檔名的檔案中。請改用 `as` 運算式。", @@ -1518,15 +1685,15 @@ "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或將欄位 `\"type\": \"module\"` 新增至 '{1}'。", "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或使用 `{ \"type\": \"module\" }` 建立本機 package.json 檔案。", "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要將此檔案轉換為 ECMAScript 模組,請建立具有 `{ \"type\": \"module\" }` 的本機 package.json 檔案。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "只有在 'module' 選項設定為 'es2022'、'esnext'、'system'、'node16' 或 'nodenext',而且 'target' 選項設定為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16' 'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "只有當 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'nodenext' 或 'preserve',且 'target' 選項設為 'es2017' 或更高版本時,才能在最上層使用 'await using' 陳述式。", "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 檔案中的最上層宣告必須以 'declare' 或 'export' 修飾元開頭。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16' 或 'nodenext',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16' 'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。", "Trailing_comma_not_allowed_1009": "尾端不得為逗號。", "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "以個別模組的形式轉換每個檔案的語言 (類似於 'ts.transpileModule')。", "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "如有 `npm i --save-dev @types/{1}`,請嘗試使用,或新增包含 `declare module '{0}';` 的宣告 (.d.ts) 檔案", "Trying_other_entries_in_rootDirs_6110": "正在嘗試 'rootDirs' 中的其他項目。", "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在嘗試替代 '{0}',候選模組位置: '{1}'。", - "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "元組成員必須全數有名稱或都沒有名稱。", "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長度為 '{1}' 的元組類型 '{0}' 在索引 '{2}' 沒有項目。", "Tuple_type_arguments_circularly_reference_themselves_4110": "元組類型引數會循環參考自身。", "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有使用 '--downlevelIteration' 旗標或 'es2015' 或更新版本的 '--target' 時,才能逐一查看類型 '{0}'。", @@ -1539,10 +1706,11 @@ "Type_0_has_no_matching_index_signature_for_type_1_2537": "類型 '{0}' 沒有與類型 '{1}' 相符的索引簽章。", "Type_0_has_no_properties_in_common_with_type_1_2559": "類型 '{0}' 與類型 '{1}' 沒有任何共通的屬性。", "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "類型 '{0}' 沒有適用類型引數清單的簽章。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "類型 '{0}' 為泛型型別,只能針對讀取編製索引。", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2}", "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2},以及另外 {3} 個。", "Type_0_is_not_a_constructor_function_type_2507": "類型 '{0}' 不是建構函式類型。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055": "類型 '{0}' 不是 ES5/ES3 中的有效非同步函式傳回型別,因為它不是指與 Promise 相容的建構函式值。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "在 ES5 中,'{0}' 型別並非有效的非同步傳回型別,因為其不會參考與 Promise 相容的建構函式值。", "Type_0_is_not_an_array_type_2461": "類型 '{0}' 不是陣列類型。", "Type_0_is_not_an_array_type_or_a_string_type_2495": "類型 '{0}' 不是陣列類型或字串類型。", "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "類型 '{0}' 不是陣列類型或字串類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", @@ -1551,6 +1719,7 @@ "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "不得將類型 '{0}' 指派給類型 '{1}'。您指的是 '{2}' 嗎?", "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "無法將類型 '{0}' 指派給類型 '{1}'。有兩種使用此名稱的不同類型存在,但彼此並不相關。", "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "無法將型別 '{0}' 指派給型別 '{1}',如變異數註釋所隱含。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "無法將類型 '{0}' 指派給計算之列舉成員值所需的 '{1}'。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標屬性的類型。", "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標的類型。", "Type_0_is_not_comparable_to_type_1_2678": "類型 '{0}' 無法和類型 '{1}' 比較。", @@ -1570,14 +1739,15 @@ "Type_argument_expected_1140": "必須是型別引數。", "Type_argument_list_cannot_be_empty_1099": "型別引數清單不得為空白。", "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "類型引數只可用於 TypeScript 檔案中。", - "Type_arguments_cannot_be_used_here_1342": "此處不得使用型別引數。", "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' 的類型引數會循環參考自身。", "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "類型判斷提示運算式只可用於 TypeScript 檔案中。", "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "來源中位於 {0} 的類型與目標中位於 {1} 的類型不相容。", "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "來源中位於 {0} 到 {1} 的類型與目標中位於 {2} 的類型不相容。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "型別如包含私人名稱 '{0}',則無法搭配 --isolatedDeclarations 使用。", "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在編譯內的類型宣告檔案。", "Type_expected_1110": "必須是類型。", "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "輸入匯入判斷提示應該只有一個索引鍵 - 'resolution-mode' - 值為 'import' 或 'require'。", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "型別匯入屬性應只有一個索引鍵 'resolution-mode',且值為 'import' 或 'require'。", "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "類型具現化過深,可能會有無限深度。", "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "類型在其本身 'then' 方法的完成回撥中直接或間接受到參考。", "Type_library_referenced_via_0_from_file_1_1402": "透過 '{0}' 從檔案 '{1}' 參考的型別程式庫", @@ -1623,6 +1793,8 @@ "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "無法解析以運算式形式呼叫之方法裝飾項目的簽章。", "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "無法解析以運算式形式呼叫之參數裝飾項目的簽章。", "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "無法解析以運算式形式呼叫之屬性裝飾項目的簽章。", + "Undetermined_character_escape_1513": "未定字元逸出。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "未預期的 '{0}'。您是要使用反斜線將其逸出嗎?", "Unexpected_end_of_text_1126": "未預期的文字結尾。", "Unexpected_keyword_or_identifier_1434": "未預期的關鍵字或識別碼。", "Unexpected_token_1012": "未預期的語彙基元。", @@ -1631,12 +1803,19 @@ "Unexpected_token_Did_you_mean_or_gt_1382": "未預期的語彙基元。您是指 `{'>'}` 或 `>` 嗎?", "Unexpected_token_Did_you_mean_or_rbrace_1381": "未預期的語彙基元。您是指 `{'}'}` 或 `}` 嗎?", "Unexpected_token_expected_1179": "未預期的語彙基元。必須是 '{'。", + "Unicode_escape_sequence_cannot_appear_here_17021": "此處不可出現 Unicode 逸出序列。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 逸出序列。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 屬性值運算式。", + "Unknown_Unicode_property_name_1524": "未知的 Unicode 屬性名稱。", + "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 屬性名稱或值。", + "Unknown_Unicode_property_value_1526": "未知的 Unicode 屬性值。", "Unknown_build_option_0_5072": "未知的組建選項 '{0}'。", "Unknown_build_option_0_Did_you_mean_1_5077": "未知的組建選項 '{0}'。您是指 '{1}' 嗎?", "Unknown_compiler_option_0_5023": "不明的編譯器選項 '{0}'。", "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的編譯器選項 '{0}'。您是指 '{1}' 嗎?", "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的關鍵字或識別碼。您是不是指 '{0}'?", "Unknown_option_excludes_Did_you_mean_exclude_6114": "選項 'excludes' 未知。您是指 'exclude' 嗎?", + "Unknown_regular_expression_flag_1499": "未知的規則運算式旗標。", "Unknown_type_acquisition_option_0_17010": "未知的類型取得選項 '{0}'。", "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的類型擷取選項 '{0}'。您是指 '{1}' 嗎?", "Unknown_watch_option_0_5078": "未知的監看選項 '{0}'。", @@ -1651,14 +1830,19 @@ "Unused_label_7028": "未使用的標籤。", "Unused_ts_expect_error_directive_2578": "未使用的 '@ts-expect-error' 指示詞。", "Update_import_from_0_90058": "從 \"{0}\" 更新匯入", - "Updating_output_of_project_0_6373": "正在更新專案 '{0}' 的輸出...", + "Update_modifiers_of_0_90061": "更新 '{0}' 的修飾元", "Updating_output_timestamps_of_project_0_6359": "正在更新專案 '{0}' 的輸出時間戳記...", "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新專案 '{0}' 的未更變輸出時間戳記...", "Use_0_95174": "使用 `{0}`。", + "Use_0_instead_5106": "請改用 '{0}'。", "Use_Number_isNaN_in_all_conditions_95175": "在所有條件中都使用 'Number.isNaN'。", "Use_element_access_for_0_95145": "對 '{0}' 使用元素存取", "Use_element_access_for_all_undeclared_properties_95146": "對所有未宣告的屬性使用元素存取。", + "Use_import_type_95180": "請使用 'import type'", "Use_synthetic_default_member_95016": "使用綜合 'default' 成員。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析套件匯入時,請使用 package.json 'exports' 欄位。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析匯入時,請使用 package.json 'imports' 欄位。", + "Use_type_0_95181": "請使用 'type {0}'", "Using_0_subpath_1_with_target_2_6404": "使用 '{0}' 子路徑 '{1}' 與目標 '{2}'。", "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "只有在 ECMAScript 5 及更高版本中,才可在 'for...of' 陳述式中使用字串。", "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build、-b 會讓 tsc 的行為較編譯器更像是建置協調器。這可用於觸發建置複合專案,您可以在以下位置深入了解: {0}", @@ -1674,6 +1858,8 @@ "Variable_declaration_expected_1134": "必須是變數宣告。", "Variable_declaration_list_cannot_be_empty_1123": "變數宣告清單不得為空白。", "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允許變數宣告。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "變數必須有具備 --isolatedDeclarations 的明確型別註釋。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "無法內嵌有多個宣告的變數。", "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "來源中位於 {0} 的可變元素與目標中位於 {1} 的元素不相符。", "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "只有物件、函式、建構函式和對應類型的類型別名才支援差異註釋。", "Version_0_6029": "版本 {0}", @@ -1687,9 +1873,11 @@ "When_type_checking_take_into_account_null_and_undefined_6699": "當型別檢查時,請將 'null' 和 'undefined' 納入考慮。", "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否要將已過期的主控台輸出,維持在監看模式下,而非清除螢幕。", "Wrap_all_invalid_characters_in_an_expression_container_95109": "將所有無效字元包裝在運算式容器中", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "將所有無效的裝飾項目運算式以括弧包住", "Wrap_all_object_literal_with_parentheses_95116": "使用括弧括住所有物件常值", "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "將所有無上層 JSX 包裝至 JSX 片段中", "Wrap_in_JSX_fragment_95120": "包裝至 JSX 片段中", + "Wrap_in_parentheses_95194": "以括弧包住", "Wrap_invalid_character_in_an_expression_container_95108": "包裝在運算式容器中的字元無效", "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "使用括弧括住下列必須是物件常值的主體", "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "您可以在以下位置了解所有編譯器選項: {0}", @@ -1702,20 +1890,25 @@ "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 和 '{1}' 索引簽章不相容。", "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 與 '{1}' 作業無法在沒有括號的情況下同時使用。", "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' 指定了兩次。將會覆寫名為 '{0}' 的屬性。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型別以 '{0}' 作為結尾,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型別以 '{0}' 作為開頭,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能透過開啟 'esModuleInterop' 旗標並使用預設匯入來匯入 '{0}'。", "_0_can_only_be_imported_by_using_a_default_import_2595": "只能使用預設匯入來匯入 '{0}'。", "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能使用 'require' 呼叫,或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 'require' 呼叫或預設匯入來匯入 '{0}'。", "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "只能使用 'import {1} = require({2})' 或預設匯入來匯入 '{0}'。", "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "只能使用 'import {1} = require({2})',或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", - "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208": "因為系統將 '{0}' 視為全域指令檔,所以無法在 '--isolatedModules' 下編譯。請新增匯入、匯出或空白的 'export {}' 陳述式,使其成為模組。", "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' 不能用作 JSX 元件。", "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "因為 '{0}' 是使用 'export type' 匯出的,所以無法作為值使用。", "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "因為 '{0}' 是使用 'import type' 匯入的,所以無法作為值使用。", "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 元件不接受文字作為子項目。JSX 中的文字具有類型 'string',但 '{1}' 需要的類型為 '{2}'。", "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' 可以使用與 '{1}' 無關的任意類型來具現化。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "只能在區塊內宣告 '{0}' 宣告。", "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣告只可用於 TypeScript 檔案中。", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣告可能沒有繫結模式。", + "_0_declarations_must_be_initialized_1155": "必須初始化 '{0}' 宣告。", "_0_expected_1005": "必須是 '{0}'。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' 具有字串型別,但在啟用 'isolatedModules' 的狀態下,其語法必須是可辨識的字串語法。", "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' 沒有任何名稱為 '{1}' 的已匯出成員。您是指 '{2}' 嗎?", "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' 隱含 '{1}' 傳回型別,但可從使用方式推斷更適合的類型。", "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' 因為沒有傳回型別註解,且在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", @@ -1724,7 +1917,7 @@ "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 索引類型 '{1}' 無法指派給 '{2}' 索引類型 '{3}'。", "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' 為基元,但 '{1}' 為包裝函式物件。建議盡可能使用 '{0}'。", "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' 為類型,無法匯入 JavaScript 檔案。在 JSDoc 類型註釋中使用 '{1}'。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444": "'{0}' 是類型,而且當 'preserveValueImports' 和 'isolatedModules' 都啟用時,必須使用僅類型匯入來匯入。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' 為型別,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' 是未使用的 '{1}' 重新命名。您是否想要使用它作為類型註釋?", "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' 可指派給 '{1}' 類型的條件約束,但可能會將 '{1}' 以不同的條件約束 '{2}' 子類型來具現化。", "_0_is_automatically_exported_here_18044": "'{0}' 會自動匯出到此處。", @@ -1747,11 +1940,14 @@ "_0_list_cannot_be_empty_1097": "'{0}' 清單不得為空白。", "_0_modifier_already_seen_1030": "已有 '{0}' 修飾元。", "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾元只能出現在類別、介面或型別別名的型別參數上", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾元只能出現在方法或類別,或是函式的型別參數中。", "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "建構函式宣告不得有 '{0}' 修飾元。", "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "模組或命名空間元素不能有 '{0}' 修飾元。", "_0_modifier_cannot_appear_on_a_parameter_1090": "參數不得有 '{0}' 修飾元。", "_0_modifier_cannot_appear_on_a_type_member_1070": "類型成員不能有 '{0}' 修飾元。", "_0_modifier_cannot_appear_on_a_type_parameter_1273": "型別參數上不能出現 '{0}' 修飾元", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾元不可出現在 'using' 宣告中。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾元不可出現在 'await using' 宣告中。", "_0_modifier_cannot_appear_on_an_index_signature_1071": "索引簽章不能有 '{0}' 修飾元。", "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "不得在此種類別項目中使用 '{0}' 修飾元。", "_0_modifier_cannot_be_used_here_1042": "無法在此處使用 '{0}' 修飾元。", @@ -1759,6 +1955,7 @@ "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾元無法與 '{1}' 修飾元並用。", "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾元不可搭配私人識別碼一起使用。", "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾元必須在 '{1}' 修飾元之前。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 後必須是以大括弧括住的 Unicode 屬性值運算式。", "_0_needs_an_explicit_type_annotation_2782": "'{0}' 需要明確的型別註解。", "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' 只參考類型,但在這裡用作命名空間。", "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' 只會參考類型,但此處將其用為值。", @@ -1766,8 +1963,12 @@ "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "「{0}」僅指一種類型,但在此卻作為值使用。要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。", "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' 指的是全域的 UMD,但目前的檔案為模組。請考慮改為新增匯入。", "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' 為值,但在此處卻作為類型使用。您是否是指 'typeof {0}'?", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446": "'{0}' 解析為僅類型宣告,而且當 'preserveValueImports' 和 'isolatedModules' 都啟用時,必須使用僅類型匯入來匯入。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448": "'{0}' 解析為僅類型宣告,而且必須在啟用 'isolatedModules' 時,使用僅類型重新匯出來重新匯出。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' 會解析為僅限型別的宣告,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須透過僅限型別的重新匯出作業重新匯出。", "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' 應該在設定 json 檔案的 'compilerOptions' 物件內設定。", "_0_tag_already_specified_1223": "已指定 '{0}' 標記。", "_0_was_also_declared_here_6203": "'{0}' 也已宣告於此處。", @@ -1780,19 +1981,22 @@ "and_here_6204": "及此處。", "arguments_cannot_be_referenced_in_property_initializers_2815": "屬性初始設定式中不得參考 'arguments'。", "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 處理具有 imports、exports、import.meta, jsx (具有 jsx: react-jsx) 的檔案,或以 esm 格式 (具有 module: node16+) 作為模組。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 運算式無法在類別靜態區塊內使用。", "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "當檔案為模組時,只允許 'await' 運算式位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "只允許在非同步函式中與模組的最上層使用 'await' 運算式。", "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 運算式不得用於參數初始設定式。", "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' 對此運算式的類型沒有作用。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "當檔案為模組時,僅能在檔案最上層使用 'await using' 陳述式,但此檔案沒有任何匯入或匯出。建議新增空白的 'export {}',讓此檔案成為模組。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 陳述式僅能在非同步函式內,以及模組的最上層使用。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 陳述式無法在類別靜態區塊內使用。", "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 選項已設為 '{0}'。此值將用於解析非相對的模組名稱 '{1}'。", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 後必須是 ASCII 字母。", "can_only_be_used_at_the_start_of_a_file_18026": "'#!' 只能用於檔案開頭。", "case_or_default_expected_1130": "必須是 'case' 或 'default'。", "catch_or_finally_expected_1472": "必須是 'catch' 或 'finally'。", - "const_declarations_can_only_be_declared_inside_a_block_1156": "只能在區塊內宣告 'const' 宣告。", - "const_declarations_must_be_initialized_1155": "'const' 宣告必須初始化。", "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列舉成員初始設定式已評估為非有限值。", "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列舉成員初始設定式已評估為不允許的值 'NaN'。", - "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474": "常數列舉成員初始設定式只能包含常值與其他計算列舉值。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "常數列舉成員初始設定式必須為常數運算式。", "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列舉只可用於屬性或索引存取運算式中,或用於匯入宣告、匯出指派或類型查詢的右側。", "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' 不能作為參數屬性名稱使用。", "constructor_is_a_reserved_word_18012": "'#constructor' 為保留字。", @@ -1811,13 +2015,14 @@ "file_6025": "檔案", "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "當檔案為模組時,只允許 'for await' 迴圈位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "只允許在非同步函式中與模組的最上層使用 'for await' 迴圈。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。", "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 和 'set' 存取子不可宣告 'this' 參數。", "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定 `files`,則為 `[]`,否則為 `[\"**/*\"]5D;`", "implements_clause_already_seen_1175": "已經有 'implements' 子句。", "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 子句只可用於 TypeScript 檔案中。", "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' 只可用於 TypeScript 檔案中。", "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "只允許在條件式類型的 'extends' 子句中使用 'infer' 宣告。", - "let_declarations_can_only_be_declared_inside_a_block_1157": "只能在區塊內宣告 'let' 宣告。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 後必須是以角括弧括住的擷取群組名稱。", "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' 或 'const' 宣告中不得使用 'let' 作為名稱。", "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "模組 === `AMD` 或 `UMD` 或 `System` 或 `ES6`,則為 `Classic`,否則為 `Node`", "module_system_or_esModuleInterop_6904": "模組 === \"system\" 或 esModuleInterop", @@ -1832,6 +2037,7 @@ "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' 沒有任何符合 '{0}' 版本的 'typesVersions' 項目。", "package_json_had_a_falsy_0_field_6220": "'package.json' 具有假的 '{0}' 欄位。", "package_json_has_0_field_1_that_references_2_6101": "'package.json' 有參考 '{2}' 的 '{0}' 欄位 '{1}'。", + "package_json_has_a_peerDependencies_field_6281": "'package.json' 具有 'peerDependencies' 欄位。", "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' 具有 'typesVersions' 項目 '{0}',其非有效的 SemVer 範圍。", "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' 具有符合編譯器版本 '{1}' 的 'typesVersions' 項目 '{0}',要尋找符合模組名稱 '{2}' 的模式。", "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' 具有限定版本路徑對應的 'typesVersions' 欄位。", @@ -1839,13 +2045,14 @@ "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.js 範圍 '{0}' 對指定名稱 '{1}' 的目標具有無效類型", "package_json_scope_0_has_no_imports_defined_6273": "package.js 範圍 '{0}' 沒有定義的匯入。", "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 選項已指定,將尋找符合模組名稱 '{0}' 的模式。", + "q_is_only_available_inside_character_class_1511": "'\\q' 僅可在字元類別中使用。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 後必須是字串 (可選擇以大括弧括住該字串)。", "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾元只能出現在屬性宣告或索引簽章。", "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 類型修飾元只可用於陣列與元組常值類型。", "require_call_may_be_converted_to_an_import_80005": "'require' 呼叫可能會轉換為匯入。", - "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452": "只有當 'moduleResolution' 為 'node16' 或 'nodenext' 時,才支援 'resolution-mode' 判斷提示。", - "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125": "'resolution-mode' 判斷提示不穩定。使用夜間 TypeScript 將此錯誤設為靜音。請嘗試使用 'npm install -D typescript@next' 更新。", "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能針對僅限輸入的匯入設定 'resolution-mode'。", "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' 是輸入匯入判斷提示唯一有效的索引鍵。", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' 是型別匯入屬性唯一有效的索引鍵。", "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode` 應該是 `require` 或 `import`。", "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 選項已設定。該選項將用於解析相對的模組名稱 '{0}'。", "super_can_only_be_referenced_in_a_derived_class_2335": "只有衍生類別中才可參考 'super'。", @@ -1861,11 +2068,11 @@ "this_cannot_be_referenced_in_a_computed_property_name_2465": "計算的屬性名稱中不得參考 'this'。", "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "模組或命名空間主體中不得參考 'this'。", "this_cannot_be_referenced_in_a_static_property_initializer_2334": "靜態屬性初始設定式中不得參考 'this'。", - "this_cannot_be_referenced_in_constructor_arguments_2333": "建構函式引數中不得參考 'this'。", "this_cannot_be_referenced_in_current_location_2332": "目前的位置中不得參考 'this'。", "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "因為 'this' 沒有型別註解,所以隱含具有類型 'any'。", "true_for_ES2022_and_above_including_ESNext_6930": "ES2022 及以上為 true,包括 ESNext。", "true_if_composite_false_otherwise_6909": "如果為 `composite`,則為 `true`,否則為 `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "當 'moduleResolution' 為 'node16'、'nodenext' 或 'bundler' 時,為 `true`; 否則為 `false`。", "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 編譯器", "type_Colon_6902": "輸入:", "unique_symbol_types_are_not_allowed_here_1335": "這裡不允許 'unique symbol' 型別。", diff --git a/node_modules/typescript/package.json b/node_modules/typescript/package.json index e81058545b..e3d943e442 100644 --- a/node_modules/typescript/package.json +++ b/node_modules/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript", "author": "Microsoft Corp.", "homepage": "https://www.typescriptlang.org/", - "version": "5.5.4", + "version": "5.6.2", "license": "Apache-2.0", "description": "TypeScript is a language for application scale JavaScript development", "keywords": [ @@ -13,11 +13,11 @@ "javascript" ], "bugs": { - "url": "https://github.com/Microsoft/TypeScript/issues" + "url": "https://github.com/microsoft/TypeScript/issues" }, "repository": { "type": "git", - "url": "https://github.com/Microsoft/TypeScript.git" + "url": "https://github.com/microsoft/TypeScript.git" }, "main": "./lib/typescript.js", "typings": "./lib/typescript.d.ts", @@ -39,45 +39,50 @@ "!**/.gitattributes" ], "devDependencies": { - "@dprint/formatter": "^0.3.0", - "@dprint/typescript": "0.91.0", + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.91.6", "@esfx/canceltoken": "^1.0.0", - "@octokit/rest": "^20.1.1", - "@types/chai": "^4.3.16", - "@types/microsoft__typescript-etw": "^0.1.3", + "@eslint/js": "^9.9.0", + "@octokit/rest": "^21.0.1", + "@types/chai": "^4.3.17", + "@types/diff": "^5.2.1", "@types/minimist": "^1.2.5", - "@types/mocha": "^10.0.6", + "@types/mocha": "^10.0.7", "@types/ms": "^0.7.34", "@types/node": "latest", "@types/source-map-support": "^0.5.10", - "@types/which": "^3.0.3", - "@typescript-eslint/eslint-plugin": "^7.11.0", - "@typescript-eslint/parser": "^7.11.0", - "@typescript-eslint/utils": "^7.11.0", - "azure-devops-node-api": "^13.0.0", - "c8": "^9.1.0", - "chai": "^4.4.1", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.1.0", + "@typescript-eslint/type-utils": "^8.1.0", + "@typescript-eslint/utils": "^8.1.0", + "azure-devops-node-api": "^14.0.2", + "c8": "^10.1.2", + "chai": "^4.5.0", "chalk": "^4.1.2", "chokidar": "^3.6.0", "diff": "^5.2.0", - "dprint": "^0.46.1", - "esbuild": "^0.21.4", - "eslint": "^8.57.0", - "eslint-formatter-autolinkable-stylish": "^1.3.0", - "eslint-plugin-local": "^4.2.2", - "fast-xml-parser": "^4.4.0", - "glob": "^10.4.1", - "hereby": "^1.8.9", - "jsonc-parser": "^3.2.1", + "dprint": "^0.47.2", + "esbuild": "^0.23.0", + "eslint": "^9.9.0", + "eslint-formatter-autolinkable-stylish": "^1.4.0", + "eslint-plugin-regexp": "^2.6.0", + "fast-xml-parser": "^4.4.1", + "glob": "^10.4.5", + "globals": "^15.9.0", + "hereby": "^1.9.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.27.2", "minimist": "^1.2.8", - "mocha": "^10.4.0", + "mocha": "^10.7.3", "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.10.2", "ms": "^2.1.3", "node-fetch": "^3.3.2", - "playwright": "^1.44.1", + "playwright": "^1.46.0", "source-map-support": "^0.5.21", - "tslib": "^2.6.2", - "typescript": "^5.4.5", + "tslib": "^2.6.3", + "typescript": "^5.5.4", + "typescript-eslint": "^8.1.0", "which": "^3.0.1" }, "overrides": { @@ -93,6 +98,7 @@ "clean": "hereby clean", "gulp": "hereby", "lint": "hereby lint", + "knip": "hereby knip", "format": "dprint fmt", "setup-hooks": "node scripts/link-hooks.mjs" }, @@ -102,7 +108,6 @@ "path": false, "crypto": false, "buffer": false, - "@microsoft/typescript-etw": false, "source-map-support": false, "inspector": false, "perf_hooks": false @@ -112,5 +117,5 @@ "node": "20.1.0", "npm": "8.19.4" }, - "gitHead": "c8a7d589e647e19c94150d9892909f3aa93e48eb" + "gitHead": "a7e3374f13327483fbe94e32806d65785b0b6cda" } diff --git a/node_modules/which-typed-array/CHANGELOG.md b/node_modules/which-typed-array/CHANGELOG.md index 300d527cc4..e030db6342 100644 --- a/node_modules/which-typed-array/CHANGELOG.md +++ b/node_modules/which-typed-array/CHANGELOG.md @@ -5,6 +5,40 @@ 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.1.15](https://github.com/inspect-js/which-typed-array/compare/v1.1.14...v1.1.15) - 2024-03-10 + +### Commits + +- [types] use a namespace; improve type [`f42bec3`](https://github.com/inspect-js/which-typed-array/commit/f42bec34d5c47bd9e4ab1b48dcde60c09c666712) +- [types] use shared config [`464a9e3`](https://github.com/inspect-js/which-typed-array/commit/464a9e358c2597253c747970b12032406a19b8d2) +- [actions] remove redundant finisher; use reusable workflow [`d114ee8`](https://github.com/inspect-js/which-typed-array/commit/d114ee83ceb6c7898386f4b5935a3ed9e2ec61e4) +- [Dev Deps] update `@types/node`, `tape`, `typescript`; add `@arethetypeswrong/cli` [`9cc63d8`](https://github.com/inspect-js/which-typed-array/commit/9cc63d8635e80ce6dabcb352d23050111040d747) +- [types] add a helpful hover description [`29ccf8d`](https://github.com/inspect-js/which-typed-array/commit/29ccf8dab0f805cdac6ec56d7b9cc27476708273) +- [Deps] update `available-typed-arrays`, `call-bind`, `has-tostringtag` [`7ecfd8e`](https://github.com/inspect-js/which-typed-array/commit/7ecfd8e29d09f8708f7cab7cc41fea9ae5a20867) + +## [v1.1.14](https://github.com/inspect-js/which-typed-array/compare/v1.1.13...v1.1.14) - 2024-02-01 + +### Commits + +- [patch] add types [`49c4d4c`](https://github.com/inspect-js/which-typed-array/commit/49c4d4c5db9bebb8d6f8c18a01047e44eea15e17) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`e5fab7b`](https://github.com/inspect-js/which-typed-array/commit/e5fab7b3dc9df2bceb88f15c3d0a2c0176cf2567) +- [Deps] update `available-typed-arrays`, `call-bind` [`97e2b44`](https://github.com/inspect-js/which-typed-array/commit/97e2b44bad85c9183f1219e28211b3abd167677c) +- [Deps] update `has-tostringtag` [`1efa8bf`](https://github.com/inspect-js/which-typed-array/commit/1efa8bf910c080c14f011aa7c645ac88bc7a7078) + +## [v1.1.13](https://github.com/inspect-js/which-typed-array/compare/v1.1.12...v1.1.13) - 2023-10-19 + +### Commits + +- [Refactor] avoid call-binding entirely when there is no method to bind [`9ff452b`](https://github.com/inspect-js/which-typed-array/commit/9ff452b88fbd8e4419bd768d86d0ea9a87d7e310) + +## [v1.1.12](https://github.com/inspect-js/which-typed-array/compare/v1.1.11...v1.1.12) - 2023-10-19 + +### Commits + +- [Fix] somehow node 0.12 - 3 can hit here, and they lack slice but have set [`c28e9b8`](https://github.com/inspect-js/which-typed-array/commit/c28e9b84d6d68ad5f52236ba59c26b06cde6300b) +- [Deps] update `call-bind` [`a648554`](https://github.com/inspect-js/which-typed-array/commit/a64855495106235352ebb3550a860d3bfd4a1ce1) +- [Dev Deps] update `tape` [`7a094d6`](https://github.com/inspect-js/which-typed-array/commit/7a094d6f9219b903c9a9e13c559e68f0e9672b59) + ## [v1.1.11](https://github.com/inspect-js/which-typed-array/compare/v1.1.10...v1.1.11) - 2023-07-17 ### Commits diff --git a/node_modules/which-typed-array/index.d.ts b/node_modules/which-typed-array/index.d.ts new file mode 100644 index 0000000000..052bf4103c --- /dev/null +++ b/node_modules/which-typed-array/index.d.ts @@ -0,0 +1,61 @@ +/** + * Determines the type of the given collection, or returns false. + * + * @param {unknown} value The potential collection + * @returns {TypedArrayName | false | null} 'Int8Array' | 'Uint8Array' | 'Uint8ClampedArray' | 'Int16Array' | 'Uint16Array' | 'Int32Array' | 'Uint32Array' | 'Float32Array' | 'Float64Array' | 'BigInt64Array' | 'BigUint64Array' | false | null + */ +declare function whichTypedArray(value: Int8Array): 'Int8Array'; +declare function whichTypedArray(value: Uint8Array): 'Uint8Array'; +declare function whichTypedArray(value: Uint8ClampedArray): 'Uint8ClampedArray'; +declare function whichTypedArray(value: Int16Array): 'Int16Array'; +declare function whichTypedArray(value: Uint16Array): 'Uint16Array'; +declare function whichTypedArray(value: Int32Array): 'Int32Array'; +declare function whichTypedArray(value: Uint32Array): 'Uint32Array'; +declare function whichTypedArray(value: Float32Array): 'Float32Array'; +declare function whichTypedArray(value: Float64Array): 'Float64Array'; +declare function whichTypedArray(value: BigInt64Array): 'BigInt64Array'; +declare function whichTypedArray(value: BigUint64Array): 'BigUint64Array'; +declare function whichTypedArray(value: unknown): false | null; + +declare namespace whichTypedArray { + type TypedArrayName = + | 'Int8Array' + | 'Uint8Array' + | 'Uint8ClampedArray' + | 'Int16Array' + | 'Uint16Array' + | 'Int32Array' + | 'Uint32Array' + | 'Float32Array' + | 'Float64Array' + | 'BigInt64Array' + | 'BigUint64Array'; + + type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; + + type TypedArrayConstructor = + | Int8ArrayConstructor + | Uint8ArrayConstructor + | Uint8ClampedArrayConstructor + | Int16ArrayConstructor + | Uint16ArrayConstructor + | Int32ArrayConstructor + | Uint32ArrayConstructor + | Float32ArrayConstructor + | Float64ArrayConstructor + | BigInt64ArrayConstructor + | BigUint64ArrayConstructor; +} + +export = whichTypedArray; diff --git a/node_modules/which-typed-array/index.js b/node_modules/which-typed-array/index.js index 16d4b5bee9..1a6edc547a 100644 --- a/node_modules/which-typed-array/index.js +++ b/node_modules/which-typed-array/index.js @@ -6,6 +6,7 @@ var callBind = require('call-bind'); var callBound = require('call-bind/callBound'); var gOPD = require('gopd'); +/** @type {(O: object) => string} */ var $toString = callBound('Object.prototype.toString'); var hasToStringTag = require('has-tostringtag/shams')(); @@ -15,6 +16,7 @@ var typedArrays = availableTypedArrays(); var $slice = callBound('String.prototype.slice'); var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); +/** @type {(array: readonly T[], value: unknown) => number} */ var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { for (var i = 0; i < array.length; i += 1) { if (array[i] === value) { @@ -23,57 +25,82 @@ var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(ar } return -1; }; + +/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */ +/** @type {{ [k in `\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */ var cache = { __proto__: null }; if (hasToStringTag && gOPD && getPrototypeOf) { forEach(typedArrays, function (typedArray) { var arr = new g[typedArray](); if (Symbol.toStringTag in arr) { var proto = getPrototypeOf(arr); + // @ts-expect-error TS won't narrow inside a closure var descriptor = gOPD(proto, Symbol.toStringTag); if (!descriptor) { var superProto = getPrototypeOf(proto); + // @ts-expect-error TS won't narrow inside a closure descriptor = gOPD(superProto, Symbol.toStringTag); } + // @ts-expect-error TODO: fix cache['$' + typedArray] = callBind(descriptor.get); } }); } else { forEach(typedArrays, function (typedArray) { var arr = new g[typedArray](); - cache['$' + typedArray] = callBind(arr.slice); + var fn = arr.slice || arr.set; + if (fn) { + // @ts-expect-error TODO: fix + cache['$' + typedArray] = callBind(fn); + } }); } +/** @type {(value: object) => false | import('.').TypedArrayName} */ var tryTypedArrays = function tryAllTypedArrays(value) { - var found = false; - forEach(cache, function (getter, typedArray) { - if (!found) { - try { - if ('$' + getter(value) === typedArray) { - found = $slice(typedArray, 1); - } - } catch (e) { /**/ } + /** @type {ReturnType} */ var found = false; + forEach( + // eslint-disable-next-line no-extra-parens + /** @type {Record<`\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache), + /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ + function (getter, typedArray) { + if (!found) { + try { + // @ts-expect-error TODO: fix + if ('$' + getter(value) === typedArray) { + found = $slice(typedArray, 1); + } + } catch (e) { /**/ } + } } - }); + ); return found; }; +/** @type {(value: object) => false | import('.').TypedArrayName} */ var trySlices = function tryAllSlices(value) { - var found = false; - forEach(cache, function (getter, name) { - if (!found) { - try { - getter(value); - found = $slice(name, 1); - } catch (e) { /**/ } + /** @type {ReturnType} */ var found = false; + forEach( + // eslint-disable-next-line no-extra-parens + /** @type {Record<`\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache), + /** @type {(getter: typeof cache, name: `\$${import('.').TypedArrayName}`) => void} */ function (getter, name) { + if (!found) { + try { + // @ts-expect-error TODO: fix + getter(value); + found = $slice(name, 1); + } catch (e) { /**/ } + } } - }); + ); return found; }; +/** @type {import('.')} */ module.exports = function whichTypedArray(value) { if (!value || typeof value !== 'object') { return false; } if (!hasToStringTag) { + /** @type {string} */ var tag = $slice($toString(value), 8, -1); if ($indexOf(typedArrays, tag) > -1) { return tag; diff --git a/node_modules/which-typed-array/package.json b/node_modules/which-typed-array/package.json index 4d0044a747..930c8ba07a 100644 --- a/node_modules/which-typed-array/package.json +++ b/node_modules/which-typed-array/package.json @@ -1,6 +1,6 @@ { "name": "which-typed-array", - "version": "1.1.11", + "version": "1.1.15", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", @@ -19,6 +19,7 @@ "description": "Which kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.", "license": "MIT", "main": "index.js", + "types": "./index.d.ts", "sideEffects": false, "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", @@ -30,6 +31,7 @@ "test:harmony": "nyc node --harmony --es-staging test", "posttest": "aud --production", "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", "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)\")\"" }, @@ -58,25 +60,36 @@ "@@toStringTag" ], "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "devDependencies": { + "@arethetypeswrong/cli": "^0.15.1", "@ljharb/eslint-config": "^21.1.0", - "aud": "^2.0.3", + "@ljharb/tsconfig": "^0.2.0", + "@types/call-bind": "^1.0.5", + "@types/for-each": "^0.3.3", + "@types/gopd": "^1.0.3", + "@types/is-callable": "^1.1.2", + "@types/make-arrow-function": "^1.2.2", + "@types/make-generator-function": "^2.0.3", + "@types/node": "^20.11.25", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", "in-publish": "^2.0.1", "is-callable": "^1.2.7", "make-arrow-function": "^1.2.0", "make-generator-function": "^2.0.0", - "npmignore": "^0.3.0", + "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.6.5" + "tape": "^5.7.5", + "typescript": "next" }, "testling": { "files": "test/index.js", diff --git a/node_modules/which-typed-array/test/index.js b/node_modules/which-typed-array/test/index.js index 6d79a363b1..d79453ada7 100644 --- a/node_modules/which-typed-array/test/index.js +++ b/node_modules/which-typed-array/test/index.js @@ -24,6 +24,7 @@ var typedArrayNames = [ test('not arrays', function (t) { t.test('non-number/string primitives', function (st) { + // @ts-expect-error st.equal(false, whichTypedArray(), 'undefined is not typed array'); st.equal(false, whichTypedArray(null), 'null is not typed array'); st.equal(false, whichTypedArray(false), 'false is not typed array'); @@ -74,9 +75,13 @@ test('Arrow functions', { skip: arrows.length === 0 }, function (t) { test('@@toStringTag', { skip: !hasToStringTag }, function (t) { forEach(typedArrayNames, function (typedArray) { + // @ts-expect-error TODO: fix if (typeof global[typedArray] === 'function') { + // @ts-expect-error TODO: fix var fakeTypedArray = []; + // @ts-expect-error TODO: fix fakeTypedArray[Symbol.toStringTag] = typedArray; + // @ts-expect-error TODO: fix t.equal(false, whichTypedArray(fakeTypedArray), 'faked ' + typedArray + ' is not typed array'); } else { t.comment('# SKIP ' + typedArray + ' is not supported'); @@ -87,7 +92,8 @@ test('@@toStringTag', { skip: !hasToStringTag }, function (t) { test('Typed Arrays', function (t) { forEach(typedArrayNames, function (typedArray) { - var TypedArray = global[typedArray]; + // @ts-expect-error TODO: fix + /** @type {import('../').TypedArrayConstructor} */ var TypedArray = global[typedArray]; if (isCallable(TypedArray)) { var arr = new TypedArray(10); t.equal(whichTypedArray(arr), typedArray, 'new ' + typedArray + '(10) is typed array of type ' + typedArray); diff --git a/node_modules/which-typed-array/tsconfig.json b/node_modules/which-typed-array/tsconfig.json new file mode 100644 index 0000000000..6716d81ce2 --- /dev/null +++ b/node_modules/which-typed-array/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ES2021", + }, + "exclude": [ + "coverage" + ] +} From 65efd221e92803a83b4c116a19abb920d2606c2e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:41:48 +0000 Subject: [PATCH 03/23] Update changelog and version after v3.26.8 --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e550f412a..46618ff28a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th Note that the only difference between `v2` and `v3` of the CodeQL Action is the node version they support, with `v3` running on node 20 while we continue to release `v2` to support running on node 16. For example `3.22.11` was the first `v3` release and is functionally identical to `2.22.11`. This approach ensures an easy way to track exactly which features are included in different versions, indicated by the minor and patch version numbers. +## [UNRELEASED] + +No user facing changes. + ## 3.26.8 - 19 Sep 2024 - Update default CodeQL bundle version to 2.19.0. [#2483](https://github.com/github/codeql-action/pull/2483) diff --git a/package-lock.json b/package-lock.json index 178b75d5f8..8fc02bb428 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codeql", - "version": "3.26.8", + "version": "3.26.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codeql", - "version": "3.26.8", + "version": "3.26.9", "license": "MIT", "dependencies": { "@actions/artifact": "^1.1.2", diff --git a/package.json b/package.json index d0a3185f96..6c063f4505 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "3.26.8", + "version": "3.26.9", "private": true, "description": "CodeQL action", "scripts": { From c38521e7111183db6727914a76fd61363f605c34 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:45:04 +0000 Subject: [PATCH 04/23] Update checked-in dependencies --- node_modules/.package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 2a7fc585ec..79a98d4074 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "3.26.8", + "version": "3.26.9", "lockfileVersion": 3, "requires": true, "packages": { From 7513a95cdc963825d775381a1a0e0f7e3ff98dbd Mon Sep 17 00:00:00 2001 From: Remco Vermeulen Date: Thu, 19 Sep 2024 08:28:19 -0700 Subject: [PATCH 05/23] Use workflow token for `update-release-branch.py` This explicitly passes the workflow token and restores this to the original invocation. The split is now App token for `git` and workflow token for everything else. --- .github/workflows/update-release-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-release-branch.yml b/.github/workflows/update-release-branch.yml index 7d1f745ed8..2418fee447 100644 --- a/.github/workflows/update-release-branch.yml +++ b/.github/workflows/update-release-branch.yml @@ -134,7 +134,7 @@ jobs: echo SOURCE_BRANCH=${SOURCE_BRANCH} echo TARGET_BRANCH=${TARGET_BRANCH} python .github/update-release-branch.py \ - --github-token ${{ steps.app-token.outputs.token }} \ + --github-token ${{ secrets.GITHUB_TOKEN }} \ --repository-nwo ${{ github.repository }} \ --source-branch ${SOURCE_BRANCH} \ --target-branch ${TARGET_BRANCH} \ From a7b66734ccf6c01643b3c9512a0511e7e5876afd Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 23 Sep 2024 16:02:38 +0100 Subject: [PATCH 06/23] Run some tests against only `latest` and `nightly-latest` CLIs These features have stabilized so it isn't that helpful to test them against the full range of CLIs. So let's speed up the PR checks and save some Actions minutes. --- .github/workflows/__go-custom-queries.yml | 46 +---------------------- .github/workflows/__remote-config.yml | 46 +---------------------- .github/workflows/__unset-environment.yml | 14 +------ pr-checks/checks/go-custom-queries.yml | 5 +++ pr-checks/checks/remote-config.yml | 5 +++ pr-checks/checks/unset-environment.yml | 7 +++- 6 files changed, 18 insertions(+), 105 deletions(-) diff --git a/.github/workflows/__go-custom-queries.yml b/.github/workflows/__go-custom-queries.yml index 0c9a2c0b97..191fd9a75e 100644 --- a/.github/workflows/__go-custom-queries.yml +++ b/.github/workflows/__go-custom-queries.yml @@ -28,52 +28,8 @@ jobs: matrix: include: - os: ubuntu-latest - version: stable-v2.13.5 - - os: macos-12 - version: stable-v2.13.5 - - os: windows-latest - version: stable-v2.13.5 + version: latest - os: ubuntu-latest - version: stable-v2.14.6 - - os: macos-12 - version: stable-v2.14.6 - - os: windows-latest - version: stable-v2.14.6 - - os: ubuntu-latest - version: stable-v2.15.5 - - os: macos-latest - version: stable-v2.15.5 - - os: windows-latest - version: stable-v2.15.5 - - os: ubuntu-latest - version: stable-v2.16.6 - - os: macos-latest - version: stable-v2.16.6 - - os: windows-latest - version: stable-v2.16.6 - - os: ubuntu-latest - version: stable-v2.17.6 - - os: macos-latest - version: stable-v2.17.6 - - os: windows-latest - version: stable-v2.17.6 - - os: ubuntu-latest - version: default - - os: macos-latest - version: default - - os: windows-latest - version: default - - os: ubuntu-latest - version: linked - - os: macos-latest - version: linked - - os: windows-latest - version: linked - - os: ubuntu-latest - version: nightly-latest - - os: macos-latest - version: nightly-latest - - os: windows-latest version: nightly-latest name: 'Go: Custom queries' permissions: diff --git a/.github/workflows/__remote-config.yml b/.github/workflows/__remote-config.yml index de2fdfe213..918eef69a5 100644 --- a/.github/workflows/__remote-config.yml +++ b/.github/workflows/__remote-config.yml @@ -28,52 +28,8 @@ jobs: matrix: include: - os: ubuntu-latest - version: stable-v2.13.5 - - os: macos-12 - version: stable-v2.13.5 - - os: windows-latest - version: stable-v2.13.5 + version: latest - os: ubuntu-latest - version: stable-v2.14.6 - - os: macos-12 - version: stable-v2.14.6 - - os: windows-latest - version: stable-v2.14.6 - - os: ubuntu-latest - version: stable-v2.15.5 - - os: macos-latest - version: stable-v2.15.5 - - os: windows-latest - version: stable-v2.15.5 - - os: ubuntu-latest - version: stable-v2.16.6 - - os: macos-latest - version: stable-v2.16.6 - - os: windows-latest - version: stable-v2.16.6 - - os: ubuntu-latest - version: stable-v2.17.6 - - os: macos-latest - version: stable-v2.17.6 - - os: windows-latest - version: stable-v2.17.6 - - os: ubuntu-latest - version: default - - os: macos-latest - version: default - - os: windows-latest - version: default - - os: ubuntu-latest - version: linked - - os: macos-latest - version: linked - - os: windows-latest - version: linked - - os: ubuntu-latest - version: nightly-latest - - os: macos-latest - version: nightly-latest - - os: windows-latest version: nightly-latest name: Remote config file permissions: diff --git a/.github/workflows/__unset-environment.yml b/.github/workflows/__unset-environment.yml index 2480b73cb1..94e2a00627 100644 --- a/.github/workflows/__unset-environment.yml +++ b/.github/workflows/__unset-environment.yml @@ -28,19 +28,7 @@ jobs: matrix: include: - os: ubuntu-latest - version: stable-v2.13.5 - - os: ubuntu-latest - version: stable-v2.14.6 - - os: ubuntu-latest - version: stable-v2.15.5 - - os: ubuntu-latest - version: stable-v2.16.6 - - os: ubuntu-latest - version: stable-v2.17.6 - - os: ubuntu-latest - version: default - - os: ubuntu-latest - version: linked + version: latest - os: ubuntu-latest version: nightly-latest name: Test unsetting environment variables diff --git a/pr-checks/checks/go-custom-queries.yml b/pr-checks/checks/go-custom-queries.yml index d7748760b8..83be4b149f 100644 --- a/pr-checks/checks/go-custom-queries.yml +++ b/pr-checks/checks/go-custom-queries.yml @@ -1,5 +1,10 @@ name: "Go: Custom queries" description: "Checks that Go works in conjunction with a config file specifying custom queries" +operatingSystems: + - ubuntu +versions: + - latest + - nightly-latest env: DOTNET_GENERATE_ASPNET_CERTIFICATE: "false" steps: diff --git a/pr-checks/checks/remote-config.yml b/pr-checks/checks/remote-config.yml index 918c1cd0da..d4fdee7083 100644 --- a/pr-checks/checks/remote-config.yml +++ b/pr-checks/checks/remote-config.yml @@ -1,5 +1,10 @@ name: "Remote config file" description: "Checks that specifying packages using only a config file works" +operatingSystems: + - ubuntu +versions: + - latest + - nightly-latest steps: - uses: ./../action/init with: diff --git a/pr-checks/checks/unset-environment.yml b/pr-checks/checks/unset-environment.yml index bc164bd44a..feea15fbd7 100644 --- a/pr-checks/checks/unset-environment.yml +++ b/pr-checks/checks/unset-environment.yml @@ -1,7 +1,10 @@ name: "Test unsetting environment variables" description: "An end-to-end integration test that unsets some environment variables" -operatingSystems: ["ubuntu"] - +operatingSystems: + - ubuntu +versions: + - latest + - nightly-latest steps: - uses: ./../action/init id: init From b78ab6c6605cdcaa1dc31c3ebaf9da07d3d1cac7 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 23 Sep 2024 16:07:27 +0100 Subject: [PATCH 07/23] s/latest/linked/ --- .github/workflows/__go-custom-queries.yml | 2 +- .github/workflows/__remote-config.yml | 2 +- .github/workflows/__unset-environment.yml | 2 +- pr-checks/checks/go-custom-queries.yml | 2 +- pr-checks/checks/remote-config.yml | 2 +- pr-checks/checks/unset-environment.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/__go-custom-queries.yml b/.github/workflows/__go-custom-queries.yml index 191fd9a75e..b52f120e46 100644 --- a/.github/workflows/__go-custom-queries.yml +++ b/.github/workflows/__go-custom-queries.yml @@ -28,7 +28,7 @@ jobs: matrix: include: - os: ubuntu-latest - version: latest + version: linked - os: ubuntu-latest version: nightly-latest name: 'Go: Custom queries' diff --git a/.github/workflows/__remote-config.yml b/.github/workflows/__remote-config.yml index 918eef69a5..3493b99ede 100644 --- a/.github/workflows/__remote-config.yml +++ b/.github/workflows/__remote-config.yml @@ -28,7 +28,7 @@ jobs: matrix: include: - os: ubuntu-latest - version: latest + version: linked - os: ubuntu-latest version: nightly-latest name: Remote config file diff --git a/.github/workflows/__unset-environment.yml b/.github/workflows/__unset-environment.yml index 94e2a00627..6f316cba95 100644 --- a/.github/workflows/__unset-environment.yml +++ b/.github/workflows/__unset-environment.yml @@ -28,7 +28,7 @@ jobs: matrix: include: - os: ubuntu-latest - version: latest + version: linked - os: ubuntu-latest version: nightly-latest name: Test unsetting environment variables diff --git a/pr-checks/checks/go-custom-queries.yml b/pr-checks/checks/go-custom-queries.yml index 83be4b149f..dd3819911f 100644 --- a/pr-checks/checks/go-custom-queries.yml +++ b/pr-checks/checks/go-custom-queries.yml @@ -3,7 +3,7 @@ description: "Checks that Go works in conjunction with a config file specifying operatingSystems: - ubuntu versions: - - latest + - linked - nightly-latest env: DOTNET_GENERATE_ASPNET_CERTIFICATE: "false" diff --git a/pr-checks/checks/remote-config.yml b/pr-checks/checks/remote-config.yml index d4fdee7083..75798dec03 100644 --- a/pr-checks/checks/remote-config.yml +++ b/pr-checks/checks/remote-config.yml @@ -3,7 +3,7 @@ description: "Checks that specifying packages using only a config file works" operatingSystems: - ubuntu versions: - - latest + - linked - nightly-latest steps: - uses: ./../action/init diff --git a/pr-checks/checks/unset-environment.yml b/pr-checks/checks/unset-environment.yml index feea15fbd7..48cc7e9b3c 100644 --- a/pr-checks/checks/unset-environment.yml +++ b/pr-checks/checks/unset-environment.yml @@ -3,7 +3,7 @@ description: "An end-to-end integration test that unsets some environment variab operatingSystems: - ubuntu versions: - - latest + - linked - nightly-latest steps: - uses: ./../action/init From f9ae1f1149fa827967779657095ed0d8d47e3bef Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 23 Sep 2024 16:17:24 +0100 Subject: [PATCH 08/23] Downgrade `eslint-plugin-import` for now --- node_modules/.package-lock.json | 30 +- node_modules/@rtsao/scc/LICENSE | 21 - node_modules/@rtsao/scc/README.md | 49 - node_modules/@rtsao/scc/index.d.ts | 1 - node_modules/@rtsao/scc/index.js | 51 -- node_modules/@rtsao/scc/index.js.flow | 5 - node_modules/@rtsao/scc/package.json | 7 - .../eslint-plugin-import/CHANGELOG.md | 68 +- .../eslint-plugin-import/CONTRIBUTING.md | 84 ++ node_modules/eslint-plugin-import/README.md | 205 ++--- node_modules/eslint-plugin-import/RELEASE.md | 54 ++ .../config/flat/errors.js | 14 - .../eslint-plugin-import/config/flat/react.js | 19 - .../config/flat/recommended.js | 26 - .../config/flat/warnings.js | 11 - .../eslint-plugin-import/config/react.js | 2 + .../eslint-plugin-import/config/typescript.js | 2 +- .../docs/rules/dynamic-import-chunkname.md | 44 +- .../docs/rules/no-empty-named-blocks.md | 2 +- .../docs/rules/no-extraneous-dependencies.md | 2 +- .../docs/rules/no-unused-modules.md | 15 +- .../eslint-plugin-import/docs/rules/order.md | 45 +- .../eslint-plugin-import/lib/ExportMap.js | 856 ++++++++++++++++++ .../eslint-plugin-import/lib/core/fsWalk.js | 49 - .../lib/core/importType.js | 19 +- .../lib/core/packagePath.js | 8 +- .../lib/exportMap/builder.js | 206 ----- .../lib/exportMap/captureDependency.js | 61 -- .../lib/exportMap/childContext.js | 33 - .../eslint-plugin-import/lib/exportMap/doc.js | 90 -- .../lib/exportMap/index.js | 180 ---- .../lib/exportMap/namespace.js | 39 - .../lib/exportMap/patternCapture.js | 41 - .../lib/exportMap/remotePath.js | 12 - .../lib/exportMap/specifier.js | 33 - .../lib/exportMap/typescript.js | 44 - .../lib/exportMap/visitor.js | 171 ---- .../eslint-plugin-import/lib/index.js | 35 +- .../eslint-plugin-import/lib/rules/default.js | 6 +- .../lib/rules/dynamic-import-chunkname.js | 64 +- .../eslint-plugin-import/lib/rules/export.js | 9 +- .../eslint-plugin-import/lib/rules/named.js | 8 +- .../lib/rules/namespace.js | 13 +- .../lib/rules/newline-after-import.js | 22 +- .../lib/rules/no-cycle.js | 36 +- .../lib/rules/no-deprecated.js | 9 +- .../lib/rules/no-duplicates.js | 184 ++-- .../lib/rules/no-extraneous-dependencies.js | 19 +- .../lib/rules/no-named-as-default-member.js | 6 +- .../lib/rules/no-named-as-default.js | 6 +- .../lib/rules/no-namespace.js | 149 +-- .../lib/rules/no-restricted-paths.js | 20 +- .../lib/rules/no-unused-modules.js | 266 ++---- .../eslint-plugin-import/lib/rules/order.js | 20 +- node_modules/eslint-plugin-import/lib/scc.js | 86 -- .../eslint-plugin-import/package.json | 27 +- package-lock.json | 32 +- package.json | 2 +- 58 files changed, 1441 insertions(+), 2177 deletions(-) delete mode 100644 node_modules/@rtsao/scc/LICENSE delete mode 100644 node_modules/@rtsao/scc/README.md delete mode 100644 node_modules/@rtsao/scc/index.d.ts delete mode 100644 node_modules/@rtsao/scc/index.js delete mode 100644 node_modules/@rtsao/scc/index.js.flow delete mode 100644 node_modules/@rtsao/scc/package.json create mode 100644 node_modules/eslint-plugin-import/CONTRIBUTING.md create mode 100644 node_modules/eslint-plugin-import/RELEASE.md delete mode 100644 node_modules/eslint-plugin-import/config/flat/errors.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/react.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/recommended.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/warnings.js create mode 100644 node_modules/eslint-plugin-import/lib/ExportMap.js delete mode 100644 node_modules/eslint-plugin-import/lib/core/fsWalk.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/builder.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/childContext.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/doc.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/index.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/namespace.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/remotePath.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/specifier.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/typescript.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/visitor.js delete mode 100644 node_modules/eslint-plugin-import/lib/scc.js diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 4783d859ea..78ccec9fd7 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -803,12 +803,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -2772,27 +2766,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/node_modules/@rtsao/scc/LICENSE b/node_modules/@rtsao/scc/LICENSE deleted file mode 100644 index a7cb450bed..0000000000 --- a/node_modules/@rtsao/scc/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Ryan Tsao - -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/@rtsao/scc/README.md b/node_modules/@rtsao/scc/README.md deleted file mode 100644 index 4697edd2ef..0000000000 --- a/node_modules/@rtsao/scc/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# `@rtsao/scc` - -Find strongly connected components of a directed graph using [Tarjan's algorithm](https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm). - -This algorithm efficiently yields both a topological order and list of any cycles. - -## Installation - -``` -yarn add @rtsao/scc -``` - -``` -npm install @rtsao/scc -``` - -## Usage - -```js -const scc = require("@rtsao/scc"); - -const digraph = new Map([ - ["a", new Set(["c", "d"])], - ["b", new Set(["a"])], - ["c", new Set(["b"])], - ["d", new Set(["e"])], - ["e", new Set()] -]); - -const components = scc(digraph); -// [ Set { 'e' }, Set { 'd' }, Set { 'b', 'c', 'a' } ] -``` - -#### Illustration of example input digraph -``` -┌───┐ ┌───┐ -│ d │ ◀── │ a │ ◀┐ -└───┘ └───┘ │ - │ │ │ - ▼ ▼ │ -┌───┐ ┌───┐ │ -│ e │ │ c │ │ -└───┘ └───┘ │ - │ │ - ▼ │ - ┌───┐ │ - │ b │ ─┘ - └───┘ -``` diff --git a/node_modules/@rtsao/scc/index.d.ts b/node_modules/@rtsao/scc/index.d.ts deleted file mode 100644 index ed46b8bc09..0000000000 --- a/node_modules/@rtsao/scc/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function tarjan(graph: Map>): Array> diff --git a/node_modules/@rtsao/scc/index.js b/node_modules/@rtsao/scc/index.js deleted file mode 100644 index b7dd5bb479..0000000000 --- a/node_modules/@rtsao/scc/index.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; - -module.exports = tarjan; - -// Adapted from https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm#The_algorithm_in_pseudocode - -function tarjan(graph) { - const indices = new Map(); - const lowlinks = new Map(); - const onStack = new Set(); - const stack = []; - const scc = []; - let idx = 0; - - function strongConnect(v) { - indices.set(v, idx); - lowlinks.set(v, idx); - idx++; - stack.push(v); - onStack.add(v); - - const deps = graph.get(v); - for (const dep of deps) { - if (!indices.has(dep)) { - strongConnect(dep); - lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(dep))); - } else if (onStack.has(dep)) { - lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(dep))); - } - } - - if (lowlinks.get(v) === indices.get(v)) { - const vertices = new Set(); - let w = null; - while (v !== w) { - w = stack.pop(); - onStack.delete(w); - vertices.add(w); - } - scc.push(vertices); - } - } - - for (const v of graph.keys()) { - if (!indices.has(v)) { - strongConnect(v); - } - } - - return scc; -} diff --git a/node_modules/@rtsao/scc/index.js.flow b/node_modules/@rtsao/scc/index.js.flow deleted file mode 100644 index 479ff4ff6a..0000000000 --- a/node_modules/@rtsao/scc/index.js.flow +++ /dev/null @@ -1,5 +0,0 @@ -// @flow - -declare function tarjan(graph: Map>): Array>; - -declare module.exports: typeof tarjan; diff --git a/node_modules/@rtsao/scc/package.json b/node_modules/@rtsao/scc/package.json deleted file mode 100644 index 67f67ccd99..0000000000 --- a/node_modules/@rtsao/scc/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@rtsao/scc", - "version": "1.1.0", - "repository": "rtsao/scc", - "main": "index.js", - "license": "MIT" -} diff --git a/node_modules/eslint-plugin-import/CHANGELOG.md b/node_modules/eslint-plugin-import/CHANGELOG.md index cf97fff94d..b81ad61a61 100644 --- a/node_modules/eslint-plugin-import/CHANGELOG.md +++ b/node_modules/eslint-plugin-import/CHANGELOG.md @@ -6,34 +6,6 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ## [Unreleased] -## [2.30.0] - 2024-09-02 - -### Added -- [`dynamic-import-chunkname`]: add `allowEmpty` option to allow empty leading comments ([#2942], thanks [@JiangWeixian]) -- [`dynamic-import-chunkname`]: Allow empty chunk name when webpackMode: 'eager' is set; add suggestions to remove name in eager mode ([#3004], thanks [@amsardesai]) -- [`no-unused-modules`]: Add `ignoreUnusedTypeExports` option ([#3011], thanks [@silverwind]) -- add support for Flat Config ([#3018], thanks [@michaelfaith]) - -### Fixed -- [`no-extraneous-dependencies`]: allow wrong path ([#3012], thanks [@chabb]) -- [`no-cycle`]: use scc algorithm to optimize ([#2998], thanks [@soryy708]) -- [`no-duplicates`]: Removing duplicates breaks in TypeScript ([#3033], thanks [@yesl-kim]) -- [`newline-after-import`]: fix considerComments option when require ([#2952], thanks [@developer-bandi]) -- [`order`]: do not compare first path segment for relative paths ([#2682]) ([#2885], thanks [@mihkeleidast]) - -### Changed -- [Docs] `no-extraneous-dependencies`: Make glob pattern description more explicit ([#2944], thanks [@mulztob]) -- [`no-unused-modules`]: add console message to help debug [#2866] -- [Refactor] `ExportMap`: make procedures static instead of monkeypatching exportmap ([#2982], thanks [@soryy708]) -- [Refactor] `ExportMap`: separate ExportMap instance from its builder logic ([#2985], thanks [@soryy708]) -- [Docs] `order`: Add a quick note on how unbound imports and --fix ([#2640], thanks [@minervabot]) -- [Tests] appveyor -> GHA (run tests on Windows in both pwsh and WSL + Ubuntu) ([#2987], thanks [@joeyguerra]) -- [actions] migrate OSX tests to GHA ([ljharb#37], thanks [@aks-]) -- [Refactor] `exportMapBuilder`: avoid hoisting ([#2989], thanks [@soryy708]) -- [Refactor] `ExportMap`: extract "builder" logic to separate files ([#2991], thanks [@soryy708]) -- [Docs] [`order`]: update the description of the `pathGroupsExcludedImportTypes` option ([#3036], thanks [@liby]) -- [readme] Clarify how to install the plugin ([#2993], thanks [@jwbth]) - ## [2.29.1] - 2023-12-14 ### Fixed @@ -1129,26 +1101,8 @@ for info on changes for earlier releases. [`memo-parser`]: ./memo-parser/README.md -[#3036]: https://github.com/import-js/eslint-plugin-import/pull/3036 -[#3033]: https://github.com/import-js/eslint-plugin-import/pull/3033 -[#3018]: https://github.com/import-js/eslint-plugin-import/pull/3018 -[#3012]: https://github.com/import-js/eslint-plugin-import/pull/3012 -[#3011]: https://github.com/import-js/eslint-plugin-import/pull/3011 -[#3004]: https://github.com/import-js/eslint-plugin-import/pull/3004 -[#2998]: https://github.com/import-js/eslint-plugin-import/pull/2998 -[#2993]: https://github.com/import-js/eslint-plugin-import/pull/2993 -[#2991]: https://github.com/import-js/eslint-plugin-import/pull/2991 -[#2989]: https://github.com/import-js/eslint-plugin-import/pull/2989 -[#2987]: https://github.com/import-js/eslint-plugin-import/pull/2987 -[#2985]: https://github.com/import-js/eslint-plugin-import/pull/2985 -[#2982]: https://github.com/import-js/eslint-plugin-import/pull/2982 -[#2952]: https://github.com/import-js/eslint-plugin-import/pull/2952 -[#2944]: https://github.com/import-js/eslint-plugin-import/pull/2944 -[#2942]: https://github.com/import-js/eslint-plugin-import/pull/2942 [#2919]: https://github.com/import-js/eslint-plugin-import/pull/2919 -[#2885]: https://github.com/import-js/eslint-plugin-import/pull/2885 [#2884]: https://github.com/import-js/eslint-plugin-import/pull/2884 -[#2866]: https://github.com/import-js/eslint-plugin-import/pull/2866 [#2854]: https://github.com/import-js/eslint-plugin-import/pull/2854 [#2851]: https://github.com/import-js/eslint-plugin-import/pull/2851 [#2850]: https://github.com/import-js/eslint-plugin-import/pull/2850 @@ -1162,7 +1116,6 @@ for info on changes for earlier releases. [#2735]: https://github.com/import-js/eslint-plugin-import/pull/2735 [#2699]: https://github.com/import-js/eslint-plugin-import/pull/2699 [#2664]: https://github.com/import-js/eslint-plugin-import/pull/2664 -[#2640]: https://github.com/import-js/eslint-plugin-import/pull/2640 [#2613]: https://github.com/import-js/eslint-plugin-import/pull/2613 [#2608]: https://github.com/import-js/eslint-plugin-import/pull/2608 [#2605]: https://github.com/import-js/eslint-plugin-import/pull/2605 @@ -1487,12 +1440,9 @@ for info on changes for earlier releases. [#164]: https://github.com/import-js/eslint-plugin-import/pull/164 [#157]: https://github.com/import-js/eslint-plugin-import/pull/157 -[ljharb#37]: https://github.com/ljharb/eslint-plugin-import/pull/37 - [#2930]: https://github.com/import-js/eslint-plugin-import/issues/2930 [#2687]: https://github.com/import-js/eslint-plugin-import/issues/2687 [#2684]: https://github.com/import-js/eslint-plugin-import/issues/2684 -[#2682]: https://github.com/import-js/eslint-plugin-import/issues/2682 [#2674]: https://github.com/import-js/eslint-plugin-import/issues/2674 [#2668]: https://github.com/import-js/eslint-plugin-import/issues/2668 [#2666]: https://github.com/import-js/eslint-plugin-import/issues/2666 @@ -1617,8 +1567,7 @@ for info on changes for earlier releases. [#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.30.0...HEAD -[2.30.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0 +[Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...HEAD [2.29.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.0...v2.29.1 [2.29.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.1...v2.29.0 [2.28.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.0...v2.28.1 @@ -1723,11 +1672,9 @@ for info on changes for earlier releases. [@adjerbetian]: https://github.com/adjerbetian [@AdriAt360]: https://github.com/AdriAt360 [@ai]: https://github.com/ai -[@aks-]: https://github.com/aks- [@aladdin-add]: https://github.com/aladdin-add [@alex-page]: https://github.com/alex-page [@alexgorbatchev]: https://github.com/alexgorbatchev -[@amsardesai]: https://github.com/amsardesai [@andreubotella]: https://github.com/andreubotella [@AndrewLeedham]: https://github.com/AndrewLeedham [@andyogo]: https://github.com/andyogo @@ -1752,13 +1699,11 @@ for info on changes for earlier releases. [@bicstone]: https://github.com/bicstone [@Blasz]: https://github.com/Blasz [@bmish]: https://github.com/bmish -[@developer-bandi]: https://github.com/developer-bandi [@borisyankov]: https://github.com/borisyankov [@bradennapier]: https://github.com/bradennapier [@bradzacher]: https://github.com/bradzacher [@brendo]: https://github.com/brendo [@brettz9]: https://github.com/brettz9 -[@chabb]: https://github.com/chabb [@Chamion]: https://github.com/Chamion [@charlessuh]: https://github.com/charlessuh [@charpeni]: https://github.com/charpeni @@ -1825,12 +1770,10 @@ for info on changes for earlier releases. [@jeffshaver]: https://github.com/jeffshaver [@jf248]: https://github.com/jf248 [@jfmengels]: https://github.com/jfmengels -[@JiangWeixian]: https://github.com/JiangWeixian [@jimbolla]: https://github.com/jimbolla [@jkimbo]: https://github.com/jkimbo [@joaovieira]: https://github.com/joaovieira [@joe-matsec]: https://github.com/joe-matsec -[@joeyguerra]: https://github.com/joeyguerra [@johndevedu]: https://github.com/johndevedu [@johnthagen]: https://github.com/johnthagen [@jonboiser]: https://github.com/jonboiser @@ -1840,7 +1783,6 @@ for info on changes for earlier releases. [@jseminck]: https://github.com/jseminck [@julien1619]: https://github.com/julien1619 [@justinanastos]: https://github.com/justinanastos -[@jwbth]: https://github.com/jwbth [@k15a]: https://github.com/k15a [@kentcdodds]: https://github.com/kentcdodds [@kevin940726]: https://github.com/kevin940726 @@ -1888,15 +1830,11 @@ for info on changes for earlier releases. [@meowtec]: https://github.com/meowtec [@mgwalker]: https://github.com/mgwalker [@mhmadhamster]: https://github.com/MhMadHamster -[@michaelfaith]: https://github.com/michaelfaith -[@mihkeleidast]: https://github.com/mihkeleidast [@MikeyBeLike]: https://github.com/MikeyBeLike -[@minervabot]: https://github.com/minervabot [@mpint]: https://github.com/mpint [@mplewis]: https://github.com/mplewis [@mrmckeb]: https://github.com/mrmckeb [@msvab]: https://github.com/msvab -[@mulztob]: https://github.com/mulztob [@mx-bernhard]: https://github.com/mx-bernhard [@Nfinished]: https://github.com/Nfinished [@nickofthyme]: https://github.com/nickofthyme @@ -1905,9 +1843,9 @@ for info on changes for earlier releases. [@ntdb]: https://github.com/ntdb [@nwalters512]: https://github.com/nwalters512 [@ombene]: https://github.com/ombene +[@Pandemic1617]: https://github.com/Pandemic1617 [@ota-meshi]: https://github.com/ota-meshi [@OutdatedVersion]: https://github.com/OutdatedVersion -[@Pandemic1617]: https://github.com/Pandemic1617 [@panrafal]: https://github.com/panrafal [@paztis]: https://github.com/paztis [@pcorpet]: https://github.com/pcorpet @@ -1939,7 +1877,6 @@ for info on changes for earlier releases. [@sergei-startsev]: https://github.com/sergei-startsev [@sharmilajesupaul]: https://github.com/sharmilajesupaul [@sheepsteak]: https://github.com/sheepsteak -[@silverwind]: https://github.com/silverwind [@silviogutierrez]: https://github.com/silviogutierrez [@SimenB]: https://github.com/SimenB [@simmo]: https://github.com/simmo @@ -1982,7 +1919,6 @@ for info on changes for earlier releases. [@wtgtybhertgeghgtwtg]: https://github.com/wtgtybhertgeghgtwtg [@xM8WVqaG]: https://github.com/xM8WVqaG [@xpl]: https://github.com/xpl -[@yesl-kim]: https://github.com/yesl-kim [@yndajas]: https://github.com/yndajas [@yordis]: https://github.com/yordis [@Zamiell]: https://github.com/Zamiell diff --git a/node_modules/eslint-plugin-import/CONTRIBUTING.md b/node_modules/eslint-plugin-import/CONTRIBUTING.md new file mode 100644 index 0000000000..871e90ad8c --- /dev/null +++ b/node_modules/eslint-plugin-import/CONTRIBUTING.md @@ -0,0 +1,84 @@ +# Contributing + +Thanks for your interest in helping out! Here are a **few** _weird_ tricks to ~~cut your mortgage in half~~ maximize the global net efficiency of your efforts! + +## TL;DR: Checklist + +When opening an [issue](#issues): + + - [ ] search open/closed issues + - [ ] discuss bug/enhancement in new or old issue + +[PR](#prs) time: + + - [ ] write tests + - [ ] implement feature/fix bug + - [ ] update docs + - [ ] make a note in change log + +Remember, you don't need to do it all yourself; any of these are helpful! 😎 + +## How to get started + +If you are new to `eslint`, below are a few resources that will help you to familiarize yourself with the project. + + - Watch [this presentation](https://www.youtube.com/watch?v=2W9tUnALrLg) to learn the fundamental concept of Abstract Syntax Trees (AST) and the way `eslint` works under the hood. + - Familiarize yourself with the [AST explorer](https://astexplorer.net/) tool. Look into rules in `docs/rules`, create patterns in the rules, then analyze its AST. + - Explore the blog posts on how to create a custom rule. [One blog post](https://blog.yonatan.dev/writing-a-custom-eslint-rule-to-spot-undeclared-props/). [Second blog post](https://betterprogramming.pub/creating-custom-eslint-rules-cdc579694608). + - Read the official `eslint` [developer guide](https://eslint.org/docs/latest/developer-guide/architecture/). + +## Issues + +### Search open + closed issues for similar cases + + You may find an open issue that closely matches what you are thinking. You may also find a closed issue with discussion that either solves your problem or explains why we are unlikely to solve it in the near future. + + If you find a matching issue that is open, and marked `accepted` and/or `help wanted`, you might want to [open a PR](#prs). + +### Open an issue + + Let's discuss your issue. Could be as simple as unclear documentation or a wonky config file. + If you're suggesting a feature, it might exist and need better documentation, or it might be in process. Even given those, some discussion might be warranted to ensure the enhancement is clear. + + You're welcome to jump right to a PR, but without a discussion, can't make any guarantees about merging. + + That said: sometimes seeing the code makes the discussion clearer.😄 + +This is a helpful contribution all by itself. Thanks! + +## PRs + +If you would like to implement something, firstly: thanks! Community contributions are a magical thing. Like Redux or [the flux capacitor](https://youtu.be/SR5BfQ4rEqQ?t=2m25s), they make open source possible. + +**Working on your first Pull Request?** +You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). + +Here are some things to keep in mind when working on a PR: + +**Trying to update an inactive Pull Request?** +If a PR is open, but unfortunately the author is, for any reason, not available to apply code review fixes or rebase the source branch, then please **do not open a new PR**. +Instead, paste a link to your own branch in the PR, and the maintainers can pull in your changes and update the existing PR in-place. + +### Tests + +A PR that is just failing test cases for an existing issue is very helpful, as this can take as much time (if not more) as it takes to implement a new feature or fix a bug. + +If you only have enough time to write tests, fantastic! Submit away. This is a great jumping-off point for a core contributor or even another PR to continue what you've started. + +### Docs + +For enhancements to rules, please update the docs in `docs/rules` matching the rule filename from `src/rules` or the rule description in `meta.docs.description`. Running `npm run update:eslint-docs` will update the [README.md] and rule doc header. + +Bugfixes may not warrant docs changes, though it's worth skimming the existing docs to see if there are any relevant caveats that need to be removed. + +### Changelog + +Please add a quick blurb to the [**Unreleased**](./CHANGELOG.md#unreleased) section of the change log. Give yourself some credit, and please link back to the PR for future reference. This is especially helpful for resolver changes, as the resolvers are less frequently modified and published. + +Note also that the change log can't magically link back to Github entities (i.e. PRs, issues, users) or rules; there are a handful of footnote URL definitions at the bottom. You may need to add one or more URL if you've square-bracketed any such items. + +## Code of Conduct + +Please familiarize yourself with the [Code of Conduct](https://github.com/import-js/.github/blob/main/CODE_OF_CONDUCT.md). + +[README.md]: ./README.md diff --git a/node_modules/eslint-plugin-import/README.md b/node_modules/eslint-plugin-import/README.md index 8cc723423f..1baa0069b3 100644 --- a/node_modules/eslint-plugin-import/README.md +++ b/node_modules/eslint-plugin-import/README.md @@ -23,7 +23,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a ⌨️ Set in the `typescript` configuration.\ 🚸 Set in the `warnings` configuration.\ 🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\ -💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\ +💡 Manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\ ❌ Deprecated. ### Helpful warnings @@ -73,7 +73,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a | Name                            | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | :------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :- | :---- | :- | :- | :- | :- | | [consistent-type-specifier-style](docs/rules/consistent-type-specifier-style.md) | Enforce or ban the use of inline type-only markers for named imports. | | | | 🔧 | | | -| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | 💡 | | +| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | | | | [exports-last](docs/rules/exports-last.md) | Ensure all exports appear after other statements. | | | | | | | | [extensions](docs/rules/extensions.md) | Ensure consistent use of file extension within the import path. | | | | | | | | [first](docs/rules/first.md) | Ensure all imports appear before other statements. | | | | 🔧 | | | @@ -106,60 +106,29 @@ The maintainers of `eslint-plugin-import` and thousands of other packages are wo npm install eslint-plugin-import --save-dev ``` -### Config - Legacy (`.eslintrc`) +All rules are off by default. However, you may configure them manually +in your `.eslintrc.(yml|json|js)`, or extend one of the canned configs: -All rules are off by default. However, you may extend one of the preset configs, or configure them manually in your `.eslintrc.(yml|json|js)`. - - - Extending a preset config: - -```jsonc -{ - "extends": [ - "eslint:recommended", - "plugin:import/recommended", - ], -} -``` - - - Configuring manually: - -```jsonc -{ - "rules": { - "import/no-unresolved": ["error", { "commonjs": true, "amd": true }] - "import/named": "error", - "import/namespace": "error", - "import/default": "error", - "import/export": "error", - // etc... - }, -}, -``` - -### Config - Flat (`eslint.config.js`) - -All rules are off by default. However, you may configure them manually in your `eslint.config.(js|cjs|mjs)`, or extend one of the preset configs: - -```js -import importPlugin from 'eslint-plugin-import'; -import js from '@eslint/js'; - -export default [ - js.configs.recommended, - importPlugin.flatConfigs.recommended, - { - files: ['**/*.{js,mjs,cjs}'], - languageOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - }, - rules: { - 'no-unused-vars': 'off', - 'import/no-dynamic-require': 'warn', - 'import/no-nodejs-modules': 'warn', - }, - }, -]; +```yaml +--- +extends: + - eslint:recommended + - plugin:import/recommended + # alternatively, 'recommended' is the combination of these two rule sets: + - plugin:import/errors + - plugin:import/warnings + +# or configure manually: +plugins: + - import + +rules: + import/no-unresolved: [2, {commonjs: true, amd: true}] + import/named: 2 + import/namespace: 2 + import/default: 2 + import/export: 2 + # etc... ``` ## TypeScript @@ -168,23 +137,18 @@ You may use the following snippet or assemble your own config using the granular Make sure you have installed [`@typescript-eslint/parser`] and [`eslint-import-resolver-typescript`] which are used in the following configuration. -```jsonc -{ - "extends": [ - "eslint:recommended", - "plugin:import/recommended", -// the following lines do the trick - "plugin:import/typescript", - ], - "settings": { - "import/resolver": { - // You will also need to install and configure the TypeScript resolver - // See also https://github.com/import-js/eslint-import-resolver-typescript#configuration - "typescript": true, - "node": true, - }, - }, -} +```yaml +extends: + - eslint:recommended + - plugin:import/recommended +# the following lines do the trick + - plugin:import/typescript +settings: + import/resolver: + # You will also need to install and configure the TypeScript resolver + # See also https://github.com/import-js/eslint-import-resolver-typescript#configuration + typescript: true + node: true ``` [`@typescript-eslint/parser`]: https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser @@ -213,16 +177,6 @@ You can reference resolvers in several ways (in order of precedence): - as a conventional `eslint-import-resolver` name, like `eslint-import-resolver-foo`: - ```jsonc -// .eslintrc -{ - "settings": { - // uses 'eslint-import-resolver-foo': - "import/resolver": "foo", - }, -} -``` - ```yaml # .eslintrc.yml settings: @@ -243,15 +197,6 @@ module.exports = { - with a full npm module name, like `my-awesome-npm-module`: -```jsonc -// .eslintrc -{ - "settings": { - "import/resolver": "my-awesome-npm-module", - }, -} -``` - ```yaml # .eslintrc.yml settings: @@ -347,15 +292,11 @@ In practice, this means rules other than [`no-unresolved`](./docs/rules/no-unres `no-unresolved` has its own [`ignore`](./docs/rules/no-unresolved.md#ignore) setting. -```jsonc -{ - "settings": { - "import/ignore": [ - "\.coffee$", // fraught with parse errors - "\.(scss|less|css)$", // can't parse unprocessed CSS modules, either - ], - }, -} +```yaml +settings: + import/ignore: + - \.coffee$ # fraught with parse errors + - \.(scss|less|css)$ # can't parse unprocessed CSS modules, either ``` ### `import/core-modules` @@ -374,13 +315,10 @@ import 'electron' // without extra config, will be flagged as unresolved! that would otherwise be unresolved. To avoid this, you may provide `electron` as a core module: -```jsonc -// .eslintrc -{ - "settings": { - "import/core-modules": ["electron"], - }, -} +```yaml +# .eslintrc.yml +settings: + import/core-modules: [ electron ] ``` In Electron's specific case, there is a shared config named `electron` @@ -413,15 +351,11 @@ dependency parser will require and use the map key as the parser instead of the configured ESLint parser. This is useful if you're inter-op-ing with TypeScript directly using webpack, for example: -```jsonc -// .eslintrc -{ - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"], - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/parsers: + "@typescript-eslint/parser": [ .ts, .tsx ] ``` In this case, [`@typescript-eslint/parser`](https://www.npmjs.com/package/@typescript-eslint/parser) @@ -451,28 +385,20 @@ For long-lasting processes, like [`eslint_d`] or [`eslint-loader`], however, it' If you never use [`eslint_d`] or [`eslint-loader`], you may set the cache lifetime to `Infinity` and everything should be fine: -```jsonc -// .eslintrc -{ - "settings": { - "import/cache": { - "lifetime": "∞", // or Infinity, in a JS config - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/cache: + lifetime: ∞ # or Infinity ``` Otherwise, set some integer, and cache entries will be evicted after that many seconds have elapsed: -```jsonc -// .eslintrc -{ - "settings": { - "import/cache": { - "lifetime": 5, // 30 is the default - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/cache: + lifetime: 5 # 30 is the default ``` [`eslint_d`]: https://www.npmjs.com/package/eslint_d @@ -486,13 +412,10 @@ By default, any package referenced from [`import/external-module-folders`](#impo For example, if your packages in a monorepo are all in `@scope`, you can configure `import/internal-regex` like this -```jsonc -// .eslintrc -{ - "settings": { - "import/internal-regex": "^@scope/", - }, -} +```yaml +# .eslintrc.yml +settings: + import/internal-regex: ^@scope/ ``` ## SublimeLinter-eslint diff --git a/node_modules/eslint-plugin-import/RELEASE.md b/node_modules/eslint-plugin-import/RELEASE.md new file mode 100644 index 0000000000..6c048dc093 --- /dev/null +++ b/node_modules/eslint-plugin-import/RELEASE.md @@ -0,0 +1,54 @@ +# Release steps + +1. create a `release-[x.y.z]` branch from tip of `main` (or whatever release commit) + + ```bash + git checkout main && git pull && git checkout -b release-2.1.0 + ``` + +2. bump `package.json` + update CHANGELOG version links for all releasing packages (i.e., root + any resolvers) + + In changelog for core plugin, normally leave [Unreleased] but update its link at the bottom + to be rooted at the new version's tag, and add a link for the new version rooted + at last version's tag. + + ```markdown + [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...HEAD + [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 + ``` + + becomes + + ```markdown + [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.1.0...HEAD + [2.1.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...v2.1.0 + [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 + ``` + + Generally, don't use `npm version` for this because it creates a tag, which I normally + wait until signoff from contributors and actually `npm publish`-ing to snap the tag. + +3. create pull request from `release-[x.y.z]` into `release` branch + + I like this because it + - lists all commits in the release + - provides a commentary location to discuss the release + - builds in CI and provides test results + +4. iterate on feedback + - handle other issues + - merge more PRs + - fix issues in changelog/docs + +5. `npm publish` from `release-[x.y.z]` branch + - don't forget resolvers! + +6. tag commit (`v[x.y.z]`) + - again, not forgetting resolvers, if needed (`resolvers/[name]/v[t.u.v]`) + +7. merge `release-[x.y.z]` into `release` ( + - ideally fast-forward, probably with Git CLI instead of Github + +8. merge `release` into `main` + +Done! diff --git a/node_modules/eslint-plugin-import/config/flat/errors.js b/node_modules/eslint-plugin-import/config/flat/errors.js deleted file mode 100644 index 98c19f824d..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/errors.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * unopinionated config. just the things that are necessarily runtime errors - * waiting to happen. - * @type {Object} - */ -module.exports = { - rules: { - 'import/no-unresolved': 2, - 'import/named': 2, - 'import/namespace': 2, - 'import/default': 2, - 'import/export': 2, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/react.js b/node_modules/eslint-plugin-import/config/flat/react.js deleted file mode 100644 index 0867471422..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/react.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Adds `.jsx` as an extension, and enables JSX parsing. - * - * Even if _you_ aren't using JSX (or .jsx) directly, if your dependencies - * define jsnext:main and have JSX internally, you may run into problems - * if you don't enable these settings at the top level. - */ -module.exports = { - settings: { - 'import/extensions': ['.js', '.jsx', '.mjs', '.cjs'], - }, - languageOptions: { - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/recommended.js b/node_modules/eslint-plugin-import/config/flat/recommended.js deleted file mode 100644 index 11bc1f52a4..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/recommended.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * The basics. - * @type {Object} - */ -module.exports = { - rules: { - // analysis/correctness - 'import/no-unresolved': 'error', - 'import/named': 'error', - 'import/namespace': 'error', - 'import/default': 'error', - 'import/export': 'error', - - // red flags (thus, warnings) - 'import/no-named-as-default': 'warn', - 'import/no-named-as-default-member': 'warn', - 'import/no-duplicates': 'warn', - }, - - // need all these for parsing dependencies (even if _your_ code doesn't need - // all of them) - languageOptions: { - ecmaVersion: 2018, - sourceType: 'module', - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/warnings.js b/node_modules/eslint-plugin-import/config/flat/warnings.js deleted file mode 100644 index e788ff9cde..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/warnings.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * more opinionated config. - * @type {Object} - */ -module.exports = { - rules: { - 'import/no-named-as-default': 1, - 'import/no-named-as-default-member': 1, - 'import/no-duplicates': 1, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/react.js b/node_modules/eslint-plugin-import/config/react.js index 1ae8e1a51a..68555512d7 100644 --- a/node_modules/eslint-plugin-import/config/react.js +++ b/node_modules/eslint-plugin-import/config/react.js @@ -6,6 +6,7 @@ * if you don't enable these settings at the top level. */ module.exports = { + settings: { 'import/extensions': ['.js', '.jsx'], }, @@ -13,4 +14,5 @@ module.exports = { parserOptions: { ecmaFeatures: { jsx: true }, }, + }; diff --git a/node_modules/eslint-plugin-import/config/typescript.js b/node_modules/eslint-plugin-import/config/typescript.js index d5eb57a465..ff7d0795c8 100644 --- a/node_modules/eslint-plugin-import/config/typescript.js +++ b/node_modules/eslint-plugin-import/config/typescript.js @@ -9,7 +9,7 @@ // `.ts`/`.tsx`/`.js`/`.jsx` implementation. const typeScriptExtensions = ['.ts', '.cts', '.mts', '.tsx']; -const allExtensions = [...typeScriptExtensions, '.js', '.jsx', '.mjs', '.cjs']; +const allExtensions = [...typeScriptExtensions, '.js', '.jsx']; module.exports = { settings: { diff --git a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md index de554148ee..35ae9df516 100644 --- a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md +++ b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md @@ -1,7 +1,5 @@ # import/dynamic-import-chunkname -💡 This rule is manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). - This rule reports any dynamic imports without a webpackChunkName specified in a leading block comment in the proper format. @@ -17,8 +15,7 @@ You can also configure the regex format you'd like to accept for the webpackChun { "dynamic-import-chunkname": [2, { importFunctions: ["dynamicImport"], - webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+", - allowEmpty: false + webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+" }] } ``` @@ -58,13 +55,6 @@ import( // webpackChunkName: "someModule" 'someModule', ); - -// chunk names are disallowed when eager mode is set -import( - /* webpackMode: "eager" */ - /* webpackChunkName: "someModule" */ - 'someModule', -) ``` ### valid @@ -97,38 +87,6 @@ The following patterns are valid: ); ``` -### `allowEmpty: true` - -If you want to allow dynamic imports without a webpackChunkName, you can set `allowEmpty: true` in the rule config. This will allow dynamic imports without a leading comment, or with a leading comment that does not contain a webpackChunkName. - -Given `{ "allowEmpty": true }`: - - -### valid - -The following patterns are valid: - -```javascript -import('someModule'); - -import( - /* webpackChunkName: "someModule" */ - 'someModule', -); -``` - -### invalid - -The following patterns are invalid: - -```javascript -// incorrectly formatted comment -import( - /*webpackChunkName:"someModule"*/ - 'someModule', -); -``` - ## When Not To Use It If you don't care that webpack will autogenerate chunk names and may blow up browser caches and bundle size reports. diff --git a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md index ad83c535f8..85821d8afe 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md @@ -1,6 +1,6 @@ # import/no-empty-named-blocks -🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). +🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions). diff --git a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md index 848d5bb0da..547e5c2e57 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md @@ -32,7 +32,7 @@ You can also use an array of globs instead of literal booleans: "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js"]}] ``` -When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted (i.e. not the imported file/module) matches a single glob in the array, and `false` otherwise. +When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted matches a single glob in the array, and `false` otherwise. There are 2 boolean options to opt into checking extra imports that are normally ignored: `includeInternal`, which enables the checking of internal modules, and `includeTypes`, which enables checking of type imports in TypeScript. 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 359c341ea0..53c2479272 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 @@ -29,9 +29,8 @@ This rule takes the following option: - **`missingExports`**: if `true`, files without any exports are reported (defaults to `false`) - **`unusedExports`**: if `true`, exports without any static usage within other modules are reported (defaults to `false`) - - **`ignoreUnusedTypeExports`**: if `true`, TypeScript type exports without any static usage within other modules are reported (defaults to `false` and has no effect unless `unusedExports` is `true`) - - **`src`**: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided - - **`ignoreExports`**: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) + - `src`: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided + - `ignoreExports`: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) ### Example for missing exports @@ -117,16 +116,6 @@ export function doAnything() { export default 5 // will not be reported ``` -### Unused exports with `ignoreUnusedTypeExports` set to `true` - -The following will not be reported: - -```ts -export type Foo = {}; // will not be reported -export interface Foo = {}; // will not be reported -export enum Foo {}; // will not be reported -``` - #### Important Note Exports from files listed as a main file (`main`, `browser`, or `bin` fields in `package.json`) will be ignored by default. This only applies if the `package.json` is not set to `private: true` diff --git a/node_modules/eslint-plugin-import/docs/rules/order.md b/node_modules/eslint-plugin-import/docs/rules/order.md index 67849bb7ed..2335699e6c 100644 --- a/node_modules/eslint-plugin-import/docs/rules/order.md +++ b/node_modules/eslint-plugin-import/docs/rules/order.md @@ -77,25 +77,6 @@ import foo from './foo'; var path = require('path'); ``` -## Limitations of `--fix` - -Unbound imports are assumed to have side effects, and will never be moved/reordered. This can cause other imports to get "stuck" around them, and the fix to fail. - -```javascript -import b from 'b' -import 'format.css'; // This will prevent --fix from working. -import a from 'a' -``` - -As a workaround, move unbound imports to be entirely above or below bound ones. - -```javascript -import 'format1.css'; // OK -import b from 'b' -import a from 'a' -import 'format2.css'; // OK -``` - ## Options This rule supports the following options: @@ -193,7 +174,7 @@ Example: ### `pathGroupsExcludedImportTypes: [array]` This defines import types that are not handled by configured pathGroups. -If you have added path groups with patterns that look like `"builtin"` or `"external"` imports, you have to remove this group (`"builtin"` and/or `"external"`) from the default exclusion list (e.g., `["builtin", "external", "object"]`, etc) to sort these path groups correctly. +This is mostly needed when you want to handle path groups that look like external imports. Example: @@ -212,7 +193,29 @@ Example: } ``` -[Import Type](https://github.com/import-js/eslint-plugin-import/blob/HEAD/src/core/importType.js#L90) is resolved as a fixed string in predefined set, it can't be a `patterns`(e.g., `react`, `react-router-dom`, etc). See [#2156] for details. +You can also use `patterns`(e.g., `react`, `react-router-dom`, etc). + +Example: + +```json +{ + "import/order": [ + "error", + { + "pathGroups": [ + { + "pattern": "react", + "group": "builtin", + "position": "before" + } + ], + "pathGroupsExcludedImportTypes": ["react"] + } + ] +} +``` + +The default value is `["builtin", "external", "object"]`. ### `newlines-between: [ignore|always|always-and-inside-groups|never]` diff --git a/node_modules/eslint-plugin-import/lib/ExportMap.js b/node_modules/eslint-plugin-import/lib/ExportMap.js new file mode 100644 index 0000000000..ad841b8593 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/ExportMap.js @@ -0,0 +1,856 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();exports. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +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 + */this.dependencies = new Set(); /** + * dependencies of this module that are not explicitly re-exported + * @type {Map} from path = () => ExportMap + */this.imports = new Map();this.errors = []; /** + * type {'ambiguous' | 'Module' | 'Script'} + */this.parseGoal = 'ambiguous';}_createClass(ExportMap, [{ key: 'has', /** + * Note that this does not check explicitly re-exported names for existence + * in the base namespace, but it will expand all `export * from '...'` exports + * if not found in the explicit namespace. + * @param {string} name + * @return {Boolean} true if `name` is exported by this module. + */value: function () {function has(name) {if (this.namespace.has(name)) {return true;}if (this.reexports.has(name)) {return true;} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value;var innerMap = dep(); // todo: report as unresolved? + if (!innerMap) {continue;}if (innerMap.has(name)) {return true;}}} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}}return false;}return has;}() /** + * ensure that imported name fully resolves. + * @param {string} name + * @return {{ found: boolean, path: ExportMap[] }} + */ }, { key: 'hasDeep', value: function () {function hasDeep(name) {if (this.namespace.has(name)) {return { found: true, path: [this] };}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' + if (imported == null) {return { found: true, path: [this] };} // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) {return { found: false, path: [this] };}var deep = imported.hasDeep(reexports.local);deep.path.unshift(this);return deep;} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value;var innerMap = dep();if (innerMap == null) {return { found: true, path: [this] };} // todo: report as unresolved? + if (!innerMap) {continue;} // safeguard against cycles + if (innerMap.path === this.path) {continue;}var innerValue = innerMap.hasDeep(name);if (innerValue.found) {innerValue.path.unshift(this);return innerValue;}}} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}}}return { found: false, path: [this] };}return hasDeep;}() }, { key: 'get', value: function () {function get(name) {if (this.namespace.has(name)) {return this.namespace.get(name);}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' + if (imported == null) {return null;} // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) {return undefined;}return imported.get(reexports.local);} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value;var innerMap = dep(); // todo: report as unresolved? + if (!innerMap) {continue;} // safeguard against cycles + if (innerMap.path === this.path) {continue;}var innerValue = innerMap.get(name);if (innerValue !== undefined) {return innerValue;}}} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}}return undefined;}return get;}() }, { key: 'forEach', value: function () {function forEach(callback, thisArg) {var _this = this;this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);});this.reexports.forEach(function (reexports, name) {var reexported = reexports.getImport(); // can't look up meta for ignored re-exports (#348) + callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this);});this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;}d.forEach(function (v, n) {if (n !== 'default') {callback.call(thisArg, v, n, _this);}});});}return forEach;}() // todo: keys, values, entries? + }, { key: 'reportErrors', value: function () {function reportErrors(context, declaration) {var msg = this.errors.map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}).join(', ');context.report({ node: declaration.source, message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) });}return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has + }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}(); /** + * parse docs from the first node that has leading comments + */exports['default'] = ExportMap;function captureDoc(source, docStyleParsers) {var metadata = {}; // 'some' short-circuits on first 'true' + for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) {try {var leadingComments = void 0; // n.leadingComments is legacy `attachComments` behavior + if ('leadingComments' in n) {leadingComments = n.leadingComments;} else if (n.range) {leadingComments = source.getCommentsBefore(n);}if (!leadingComments || leadingComments.length === 0) {return false;}for (var name in docStyleParsers) {var doc = docStyleParsers[name](leadingComments);if (doc) {metadata.doc = doc;}}return true;} catch (err) {return false;}});return metadata;}var availableDocStyleParsers = { jsdoc: captureJsDoc, tomdoc: captureTomDoc }; /** + * parse JSDoc from leading comments + * @param {object[]} comments + * @return {{ doc: object }} + */function captureJsDoc(comments) {var doc = void 0; // capture XSDoc + comments.forEach(function (comment) {// skip non-block comments + if (comment.type !== 'Block') {return;}try {doc = _doctrine2['default'].parse(comment.value, { unwrap: true });} catch (err) {/* don't care, for now? maybe add to `errors?` */}});return doc;} /** + * parse TomDoc section from comments + */function captureTomDoc(comments) {// collect lines up to first paragraph break + var lines = [];for (var i = 0; i < comments.length; i++) {var comment = comments[i];if (comment.value.match(/^\s*$/)) {break;}lines.push(comment.value.trim());} // return doctrine-like object + var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/);if (statusMatch) {return { description: statusMatch[2], tags: [{ title: statusMatch[1].toLowerCase(), description: statusMatch[2] }] };}}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);ExportMap.get = function (source, context) {var path = (0, _resolve2['default'])(source, context);if (path == null) {return null;}return ExportMap['for'](childContext(path, context));};ExportMap['for'] = function (context) {var path = context.path;var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex');var exportMap = exportCache.get(cacheKey); // return cached ignore + if (exportMap === null) {return null;}var stats = _fs2['default'].statSync(path);if (exportMap != null) {// date equality check + if (exportMap.mtime - stats.mtime === 0) {return exportMap;} // future: check content equality? + } // check valid extensions first + 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) {log('ignored path due to ambiguous parse:', path);exportCache.set(cacheKey, 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, dynamic: true }]) });}(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;}() });var unambiguouslyESM = unambiguous.isModule(ast);if (!unambiguouslyESM && !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 || s.exported.value, addNamespace(exportMeta, s.source.value));return;case 'ExportSpecifier':if (!n.source) {m.namespace.set(s.exported.name || s.exported.value, 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 captureDependencyWithSpecifiers(n) {// import type { Foo } (TS and Flow); import typeof { Foo } (Flow) + var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and + // shouldn't be considered to be just importing types + var specifiersOnlyImportingTypes = n.specifiers.length > 0;var importedSpecifiers = new Set();n.specifiers.forEach(function (specifier) {if (specifier.type === 'ImportSpecifier') {importedSpecifiers.add(specifier.imported.name || specifier.imported.value);} else if (supportedImportTypes.has(specifier.type)) {importedSpecifiers.add(specifier.type);} // import { type Foo } (Flow); import { typeof Foo } (Flow) + specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && (specifier.importKind === 'type' || specifier.importKind === 'typeof');});captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, importedSpecifiers);}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(context) {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');} // eslint-disable-line import/no-extraneous-dependencies + 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') {captureDependencyWithSpecifiers(n);var ns = n.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';});if (ns) {namespaces.set(ns.local.name, n.source.value);}return;}if (n.type === 'ExportNamedDeclaration') {captureDependencyWithSpecifiers(n); // capture declaration + if (n.declaration != null) {switch (n.declaration.type) {case 'FunctionDeclaration':case 'ClassDeclaration':case 'TypeAlias': // flowtype with babel-eslint parser + case 'InterfaceDeclaration':case 'DeclareFunction':case 'TSDeclareFunction':case 'TSEnumDeclaration':case 'TSTypeAliasDeclaration':case 'TSInterfaceDeclaration':case 'TSAbstractClassDeclaration':case 'TSModuleDeclaration':m.namespace.set(n.declaration.id.name, captureDoc(source, docStyleParsers, n));break;case 'VariableDeclaration':n.declaration.declarations.forEach(function (d) {recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, d, n));});});break;default:}}n.specifiers.forEach(function (s) {return processSpecifier(s, n, m);});}var exports = ['TSExportAssignment'];if (isEsModuleInteropTrue) {exports.push('TSNamespaceExportDeclaration');} // This doesn't declare anything, but changes what's being exported. + if ((0, _arrayIncludes2['default'])(exports, n.type)) {var exportedName = n.type === 'TSNamespaceExportDeclaration' ? (n.id || n.name).name : n.expression && n.expression.name || n.expression.id && n.expression.id.name || null;var declTypes = ['VariableDeclaration', 'ClassDeclaration', 'TSDeclareFunction', 'TSEnumDeclaration', 'TSTypeAliasDeclaration', 'TSInterfaceDeclaration', 'TSAbstractClassDeclaration', 'TSModuleDeclaration'];var exportedDecls = ast.body.filter(function (_ref2) {var type = _ref2.type,id = _ref2.id,declarations = _ref2.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && (id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));});if (exportedDecls.length === 0) {// Export is not referencing any local declaration, must be re-exporting + m.namespace.set('default', captureDoc(source, docStyleParsers, n));return;}if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && !m.namespace.has('default') // and default isn't added already + ) {m.namespace.set('default', {}); // add default export + }exportedDecls.forEach(function (decl) {if (decl.type === 'TSModuleDeclaration') {if (decl.body && decl.body.type === 'TSModuleDeclaration') {m.namespace.set(decl.body.id.name, captureDoc(source, docStyleParsers, decl.body));} else if (decl.body && decl.body.body) {decl.body.body.forEach(function (moduleBlockNode) {// Export-assignment exports all members in the namespace, + // explicitly exported or not. + var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? moduleBlockNode.declaration : moduleBlockNode;if (!namespaceDecl) {// TypeScript can check this for us; we needn't + } else if (namespaceDecl.type === 'VariableDeclaration') {namespaceDecl.declarations.forEach(function (d) {return recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, decl, namespaceDecl, moduleBlockNode));});});} else {m.namespace.set(namespaceDecl.id.name, captureDoc(source, docStyleParsers, moduleBlockNode));}});}} else {// Export as default + m.namespace.set('default', captureDoc(source, docStyleParsers, decl));}});}});if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && m.namespace.size > 0 // anything is exported + && !m.namespace.has('default') // and default isn't added already + ) {m.namespace.set('default', {}); // add default export + }if (unambiguouslyESM) {m.parseGoal = 'Module';}return m;}; /** + * The creation of this closure is isolated from other scopes + * to avoid over-retention of unrelated variables, which has + * caused memory leaks. See #1266. + */function thunkFor(p, context) {return function () {return ExportMap['for'](childContext(p, context));};} /** + * Traverse a pattern/identifier node, calling 'callback' + * for each leaf identifier. + * @param {node} pattern + * @param {Function} callback + * @return {void} + */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case + callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) {if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') {callback(p.argument);return;}recursivePatternCapture(p.value, callback);});break;case 'ArrayPattern':pattern.elements.forEach(function (element) {if (element == null) {return;}if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') {callback(element.argument);return;}recursivePatternCapture(element, callback);});break;case 'AssignmentPattern':callback(pattern.left);break;default:}}var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** + * don't hold full context object in memory, just grab what we need. + * also calculate a cacheKey, where parts of the cacheKey hash are memoized + */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) {settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex');prevSettings = JSON.stringify(settings);}if (JSON.stringify(parserOptions) !== prevParserOptions) {parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex');prevParserOptions = JSON.stringify(parserOptions);}return { cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), settings: settings, parserOptions: parserOptions, parserPath: parserPath, path: path };} /** + * sometimes legacy support isn't _that_ hard... right? + */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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInRzIiwibG9nIiwiZXhwb3J0Q2FjaGUiLCJNYXAiLCJ0c2NvbmZpZ0NhY2hlIiwiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiLCJjYXB0dXJlRG9jIiwiZG9jU3R5bGVQYXJzZXJzIiwibWV0YWRhdGEiLCJub2RlcyIsInNvbWUiLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwiZG9jIiwiZXJyIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJjYXB0dXJlSnNEb2MiLCJ0b21kb2MiLCJjYXB0dXJlVG9tRG9jIiwiY29tbWVudHMiLCJjb21tZW50IiwidHlwZSIsImRvY3RyaW5lIiwicGFyc2UiLCJ1bndyYXAiLCJsaW5lcyIsImkiLCJtYXRjaCIsInB1c2giLCJ0cmltIiwic3RhdHVzTWF0Y2giLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwic3VwcG9ydGVkSW1wb3J0VHlwZXMiLCJjaGlsZENvbnRleHQiLCJjYWNoZUtleSIsImRpZ2VzdCIsImV4cG9ydE1hcCIsInN0YXRzIiwiZnMiLCJzdGF0U3luYyIsIm10aW1lIiwic2V0IiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwidGVzdCIsIm0iLCJpc0VzTW9kdWxlSW50ZXJvcFRydWUiLCJpc0VzTW9kdWxlSW50ZXJvcCIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiaGFzRHluYW1pY0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInAiLCJyZW1vdGVQYXRoIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwiYWRkIiwiZ2V0dGVyIiwidGh1bmtGb3IiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIkNhbGxFeHByZXNzaW9uIiwiY2FsbGVlIiwiYXJndW1lbnRzIiwidW5hbWJpZ3VvdXNseUVTTSIsImlzTW9kdWxlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsInN0eWxlIiwiYyIsInQiLCJuYW1lc3BhY2VzIiwicmVzb2x2ZSIsInJlbGF0aXZlIiwicmVzb2x2ZUltcG9ydCIsInJwIiwiZ2V0TmFtZXNwYWNlIiwiaWRlbnRpZmllciIsImFkZE5hbWVzcGFjZSIsIm9iamVjdCIsIm5zZm4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb2Nlc3NTcGVjaWZpZXIiLCJzIiwibnNvdXJjZSIsImV4cG9ydE1ldGEiLCJleHBvcnRlZCIsImNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMiLCJkZWNsYXJhdGlvbklzVHlwZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsImNhcHR1cmVEZXBlbmRlbmN5IiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJkZWNsYXJhdGlvbk1ldGFkYXRhIiwiZXhpc3RpbmciLCJtYWtlU291cmNlQ29kZSIsInJlYWRUc0NvbmZpZyIsInRzY29uZmlnSW5mbyIsImN3ZCIsInBhcnNlck9wdGlvbnMiLCJ0c2NvbmZpZ1Jvb3REaXIiLCJwcm9jZXNzIiwiZ2V0RW52Iiwia2V5IiwiZW52IiwidHNDb25maWdQYXRoIiwicmVxdWlyZSIsImNvbmZpZ0ZpbGUiLCJyZWFkQ29uZmlnRmlsZSIsInN5cyIsInJlYWRGaWxlIiwicGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQiLCJjb25maWciLCJ0c0NvbmZpZyIsIm9wdGlvbnMiLCJlc01vZHVsZUludGVyb3AiLCJib2R5IiwiZXhwb3J0S2luZCIsIm5zIiwiZmluZCIsImlkIiwiZXhwb3J0cyIsImV4cG9ydGVkTmFtZSIsImV4cHJlc3Npb24iLCJkZWNsVHlwZXMiLCJleHBvcnRlZERlY2xzIiwiZmlsdGVyIiwiZGVjbCIsIm1vZHVsZUJsb2NrTm9kZSIsIm5hbWVzcGFjZURlY2wiLCJwYXR0ZXJuIiwicHJvcGVydGllcyIsImFyZ3VtZW50IiwiZWxlbWVudHMiLCJlbGVtZW50IiwibGVmdCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXJzZXJQYXRoIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0cmluZyIsInRleHQiLCJTb3VyY2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFlLEVBQUVELFVBQUYsRUFBUXJHLFFBQVIsRUFBZixDQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiJFeHBvcnRNYXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHBhcnNlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGFyc2UnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBpc0lnbm9yZWQsIHsgaGFzVmFsaWRFeHRlbnNpb24gfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5cbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0ICogYXMgdW5hbWJpZ3VvdXMgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5cbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5cbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5cbmxldCB0cztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IHRzY29uZmlnQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcCB7XG4gIGNvbnN0cnVjdG9yKHBhdGgpIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMubmFtZXNwYWNlID0gbmV3IE1hcCgpO1xuICAgIC8vIHRvZG86IHJlc3RydWN0dXJlIHRvIGtleSBvbiBwYXRoLCB2YWx1ZSBpcyByZXNvbHZlciArIG1hcCBvZiBuYW1lc1xuICAgIHRoaXMucmVleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIHN0YXItZXhwb3J0c1xuICAgICAqIEB0eXBlIHtTZXR9IG9mICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXB9IGZyb20gcGF0aCA9ICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlIGRvY3MgZnJvbSB0aGUgZmlyc3Qgbm9kZSB0aGF0IGhhcyBsZWFkaW5nIGNvbW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIC4uLm5vZGVzKSB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge307XG5cbiAgLy8gJ3NvbWUnIHNob3J0LWNpcmN1aXRzIG9uIGZpcnN0ICd0cnVlJ1xuICBub2Rlcy5zb21lKChuKSA9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGxlYWRpbmdDb21tZW50cztcblxuICAgICAgLy8gbi5sZWFkaW5nQ29tbWVudHMgaXMgbGVnYWN5IGBhdHRhY2hDb21tZW50c2AgYmVoYXZpb3JcbiAgICAgIGlmICgnbGVhZGluZ0NvbW1lbnRzJyBpbiBuKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IG4ubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgfSBlbHNlIGlmIChuLnJhbmdlKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IHNvdXJjZS5nZXRDb21tZW50c0JlZm9yZShuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsZWFkaW5nQ29tbWVudHMgfHwgbGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRvY1N0eWxlUGFyc2Vycykge1xuICAgICAgICBjb25zdCBkb2MgPSBkb2NTdHlsZVBhcnNlcnNbbmFtZV0obGVhZGluZ0NvbW1lbnRzKTtcbiAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgIG1ldGFkYXRhLmRvYyA9IGRvYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuY29uc3QgYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzID0ge1xuICBqc2RvYzogY2FwdHVyZUpzRG9jLFxuICB0b21kb2M6IGNhcHR1cmVUb21Eb2MsXG59O1xuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRlZEltcG9ydFR5cGVzID0gbmV3IFNldChbJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLCAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJ10pO1xuXG5FeHBvcnRNYXAuZ2V0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpO1xuICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgcmV0dXJuIEV4cG9ydE1hcC5mb3IoY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpKTtcbn07XG5cbkV4cG9ydE1hcC5mb3IgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgY2FjaGVLZXkgPSBjb250ZXh0LmNhY2hlS2V5IHx8IGhhc2hPYmplY3QoY29udGV4dCkuZGlnZXN0KCdoZXgnKTtcbiAgbGV0IGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChjYWNoZUtleSk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aCk7XG4gIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICBpZiAoZXhwb3J0TWFwLm10aW1lIC0gc3RhdHMubXRpbWUgPT09IDApIHtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgfVxuICAgIC8vIGZ1dHVyZTogY2hlY2sgY29udGVudCBlcXVhbGl0eT9cbiAgfVxuXG4gIC8vIGNoZWNrIHZhbGlkIGV4dGVuc2lvbnMgZmlyc3RcbiAgaWYgKCFoYXNWYWxpZEV4dGVuc2lvbihwYXRoLCBjb250ZXh0KSkge1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICBpZiAoaXNJZ25vcmVkKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGlnbm9yZSBzZXR0aW5nczonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSB1bmFtYmlndW91cyBtb2R1bGVzXG4gIGlmICghdW5hbWJpZ3VvdXMudGVzdChjb250ZW50KSkge1xuICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbG9nKCdjYWNoZSBtaXNzJywgY2FjaGVLZXksICdmb3IgcGF0aCcsIHBhdGgpO1xuICBleHBvcnRNYXAgPSBFeHBvcnRNYXAucGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG5cbiAgLy8gYW1iaWd1b3VzIG1vZHVsZXMgcmV0dXJuIG51bGxcbiAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGFtYmlndW91cyBwYXJzZTonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwb3J0TWFwLm10aW1lID0gc3RhdHMubXRpbWU7XG5cbiAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICByZXR1cm4gZXhwb3J0TWFwO1xufTtcblxuRXhwb3J0TWFwLnBhcnNlID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgbSA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gIGNvbnN0IGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSA9IGlzRXNNb2R1bGVJbnRlcm9wKCk7XG5cbiAgbGV0IGFzdDtcbiAgbGV0IHZpc2l0b3JLZXlzO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpO1xuICAgIGFzdCA9IHJlc3VsdC5hc3Q7XG4gICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG0uZXJyb3JzLnB1c2goZXJyKTtcbiAgICByZXR1cm4gbTsgLy8gY2FuJ3QgY29udGludWVcbiAgfVxuXG4gIG0udmlzaXRvcktleXMgPSB2aXNpdG9yS2V5cztcblxuICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBwcm9jZXNzRHluYW1pY0ltcG9ydChzb3VyY2UpIHtcbiAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgaWYgKHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZCgnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgbS5pbXBvcnRzLnNldChwLCB7XG4gICAgICBnZXR0ZXIsXG4gICAgICBkZWNsYXJhdGlvbnM6IG5ldyBTZXQoW3tcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgIHZhbHVlOiBzb3VyY2UudmFsdWUsXG4gICAgICAgICAgbG9jOiBzb3VyY2UubG9jLFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMsXG4gICAgICAgIGR5bmFtaWM6IHRydWUsXG4gICAgICB9XSksXG4gICAgfSk7XG4gIH1cblxuICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgSW1wb3J0RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBwcm9jZXNzRHluYW1pY0ltcG9ydChub2RlLnNvdXJjZSk7XG4gICAgfSxcbiAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHVuYW1iaWd1b3VzbHlFU00gPSB1bmFtYmlndW91cy5pc01vZHVsZShhc3QpO1xuICBpZiAoIXVuYW1iaWd1b3VzbHlFU00gJiYgIWhhc0R5bmFtaWNJbXBvcnRzKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZG9jc3R5bGUgPSBjb250ZXh0LnNldHRpbmdzICYmIGNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgY29uc3QgZG9jU3R5bGVQYXJzZXJzID0ge307XG4gIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgZG9jU3R5bGVQYXJzZXJzW3N0eWxlXSA9IGF2YWlsYWJsZURvY1N0eWxlUGFyc2Vyc1tzdHlsZV07XG4gIH0pO1xuXG4gIC8vIGF0dGVtcHQgdG8gY29sbGVjdCBtb2R1bGUgZG9jXG4gIGlmIChhc3QuY29tbWVudHMpIHtcbiAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgaWYgKGMudHlwZSAhPT0gJ0Jsb2NrJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICBpZiAoZG9jLnRhZ3Muc29tZSgodCkgPT4gdC50aXRsZSA9PT0gJ21vZHVsZScpKSB7XG4gICAgICAgICAgbS5kb2MgPSBkb2M7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiByZW1vdGVQYXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUucmVsYXRpdmUodmFsdWUsIHBhdGgsIGNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gcmVtb3RlUGF0aCh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihjaGlsZENvbnRleHQocnAsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5hbWVzcGFjZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhpZGVudGlmaWVyLm5hbWUpKSB7IHJldHVybjsgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlSW1wb3J0KG5hbWVzcGFjZXMuZ2V0KGlkZW50aWZpZXIubmFtZSkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGROYW1lc3BhY2Uob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IGdldE5hbWVzcGFjZShpZGVudGlmaWVyKTtcbiAgICBpZiAobnNmbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ25hbWVzcGFjZScsIHsgZ2V0OiBuc2ZuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzU3BlY2lmaWVyKHMsIG4sIG0pIHtcbiAgICBjb25zdCBuc291cmNlID0gbi5zb3VyY2UgJiYgbi5zb3VyY2UudmFsdWU7XG4gICAgY29uc3QgZXhwb3J0TWV0YSA9IHt9O1xuICAgIGxldCBsb2NhbDtcblxuICAgIHN3aXRjaCAocy50eXBlKSB7XG4gICAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuc291cmNlKSB7IHJldHVybjsgfVxuICAgICAgICBsb2NhbCA9ICdkZWZhdWx0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgICBnZXQoKSB7IHJldHVybiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpOyB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ0V4cG9ydEFsbERlY2xhcmF0aW9uJzpcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSB8fCBzLmV4cG9ydGVkLnZhbHVlLCBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgcy5zb3VyY2UudmFsdWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnRXhwb3J0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuLnNvdXJjZSkge1xuICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChzLmV4cG9ydGVkLm5hbWUgfHwgcy5leHBvcnRlZC52YWx1ZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMubG9jYWwpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIC8vIGVsc2UgZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9jYWwgPSBzLmxvY2FsLm5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHRvZG86IEpTRG9jXG4gICAgbS5yZWV4cG9ydHMuc2V0KHMuZXhwb3J0ZWQubmFtZSwgeyBsb2NhbCwgZ2V0SW1wb3J0OiAoKSA9PiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FwdHVyZURlcGVuZGVuY3lXaXRoU3BlY2lmaWVycyhuKSB7XG4gICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpOyBpbXBvcnQgdHlwZW9mIHsgRm9vIH0gKEZsb3cpXG4gICAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAgIC8vIGltcG9ydCAnLi9mb28nIG9yIGltcG9ydCB7fSBmcm9tICcuL2ZvbycgKGJvdGggMCBzcGVjaWZpZXJzKSBpcyBhIHNpZGUgZWZmZWN0IGFuZFxuICAgIC8vIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIHRvIGJlIGp1c3QgaW1wb3J0aW5nIHR5cGVzXG4gICAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMuYWRkKHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnRlZEltcG9ydFR5cGVzLmhhcyhzcGVjaWZpZXIudHlwZSkpIHtcbiAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpOyBpbXBvcnQgeyB0eXBlb2YgRm9vIH0gKEZsb3cpXG4gICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgICAmJiAoc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpO1xuICAgIH0pO1xuICAgIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIGltcG9ydGVkU3BlY2lmaWVycyk7XG4gIH1cblxuICBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeSh7IHNvdXJjZSB9LCBpc09ubHlJbXBvcnRpbmdUeXBlcywgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICAgIHNvdXJjZTogeyB2YWx1ZTogc291cmNlLnZhbHVlLCBsb2M6IHNvdXJjZS5sb2MgfSxcbiAgICAgIGlzT25seUltcG9ydGluZ1R5cGVzLFxuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZyA9IG0uaW1wb3J0cy5nZXQocCk7XG4gICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3RpbmcuZ2V0dGVyO1xuICAgIH1cblxuICAgIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICAgIG0uaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICAgIHJldHVybiBnZXR0ZXI7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuXG4gIGZ1bmN0aW9uIHJlYWRUc0NvbmZpZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgICAgY3dkOiBjb250ZXh0LnBhcnNlck9wdGlvbnMgJiYgY29udGV4dC5wYXJzZXJPcHRpb25zLnRzY29uZmlnUm9vdERpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgZ2V0RW52OiAoa2V5KSA9PiBwcm9jZXNzLmVudltrZXldLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgICAgaWYgKCF0cykgeyB0cyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQnKTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgICAgY29uZmlnRmlsZS5jb25maWcsXG4gICAgICAgICAgdHMuc3lzLFxuICAgICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gICAgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgdHNDb25maWcgPSB0c2NvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRzQ29uZmlnID0gcmVhZFRzQ29uZmlnKGNvbnRleHQpO1xuICAgICAgdHNjb25maWdDYWNoZS5zZXQoY2FjaGVLZXksIHRzQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHNDb25maWcgJiYgdHNDb25maWcub3B0aW9ucyA/IHRzQ29uZmlnLm9wdGlvbnMuZXNNb2R1bGVJbnRlcm9wIDogZmFsc2U7XG4gIH1cblxuICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKTtcbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgbi5kZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBleHBvcnRNZXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBnZXR0ZXIgPSBjYXB0dXJlRGVwZW5kZW5jeShuLCBuLmV4cG9ydEtpbmQgPT09ICd0eXBlJyk7XG4gICAgICBpZiAoZ2V0dGVyKSB7IG0uZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICBpZiAobi5leHBvcnRlZCkge1xuICAgICAgICBwcm9jZXNzU3BlY2lmaWVyKG4sIG4uZXhwb3J0ZWQsIG0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydFxuICAgIGlmIChuLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIGNvbnN0IG5zID0gbi5zcGVjaWZpZXJzLmZpbmQoKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgaWYgKG5zKSB7XG4gICAgICAgIG5hbWVzcGFjZXMuc2V0KG5zLmxvY2FsLm5hbWUsIG4uc291cmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIC8vIGNhcHR1cmUgZGVjbGFyYXRpb25cbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChuLmRlY2xhcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUeXBlQWxpYXMnOiAvLyBmbG93dHlwZSB3aXRoIGJhYmVsLWVzbGludCBwYXJzZXJcbiAgICAgICAgICBjYXNlICdJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU0RlY2xhcmVGdW5jdGlvbic6XG4gICAgICAgICAgY2FzZSAnVFNFbnVtRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChuLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG4pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgbi5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICBkLmlkLFxuICAgICAgICAgICAgICAgIChpZCkgPT4gbS5uYW1lc3BhY2Uuc2V0KGlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIGQsIG4pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBuLCBtKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwb3J0cyA9IFsnVFNFeHBvcnRBc3NpZ25tZW50J107XG4gICAgaWYgKGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSkge1xuICAgICAgZXhwb3J0cy5wdXNoKCdUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBkb2Vzbid0IGRlY2xhcmUgYW55dGhpbmcsIGJ1dCBjaGFuZ2VzIHdoYXQncyBiZWluZyBleHBvcnRlZC5cbiAgICBpZiAoaW5jbHVkZXMoZXhwb3J0cywgbi50eXBlKSkge1xuICAgICAgY29uc3QgZXhwb3J0ZWROYW1lID0gbi50eXBlID09PSAnVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbidcbiAgICAgICAgPyAobi5pZCB8fCBuLm5hbWUpLm5hbWVcbiAgICAgICAgOiBuLmV4cHJlc3Npb24gJiYgbi5leHByZXNzaW9uLm5hbWUgfHwgbi5leHByZXNzaW9uLmlkICYmIG4uZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgICBjb25zdCBkZWNsVHlwZXMgPSBbXG4gICAgICAgICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNEZWNsYXJlRnVuY3Rpb24nLFxuICAgICAgICAnVFNFbnVtRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGVjbHMgPSBhc3QuYm9keS5maWx0ZXIoKHsgdHlwZSwgaWQsIGRlY2xhcmF0aW9ucyB9KSA9PiBpbmNsdWRlcyhkZWNsVHlwZXMsIHR5cGUpICYmIChcbiAgICAgICAgaWQgJiYgaWQubmFtZSA9PT0gZXhwb3J0ZWROYW1lIHx8IGRlY2xhcmF0aW9ucyAmJiBkZWNsYXJhdGlvbnMuZmluZCgoZCkgPT4gZC5pZC5uYW1lID09PSBleHBvcnRlZE5hbWUpXG4gICAgICApKTtcbiAgICAgIGlmIChleHBvcnRlZERlY2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeHBvcnQgaXMgbm90IHJlZmVyZW5jaW5nIGFueSBsb2NhbCBkZWNsYXJhdGlvbiwgbXVzdCBiZSByZS1leHBvcnRpbmdcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgbikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICAgJiYgIW0ubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICAgICkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICAgICAgfVxuICAgICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICAgIGlmIChkZWNsLnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgIGlmIChkZWNsLmJvZHkgJiYgZGVjbC5ib2R5LnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KGRlY2wuYm9keS5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLmJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgICAgZGVjbC5ib2R5LmJvZHkuZm9yRWFjaCgobW9kdWxlQmxvY2tOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4cG9ydC1hc3NpZ25tZW50IGV4cG9ydHMgYWxsIG1lbWJlcnMgaW4gdGhlIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZURlY2wgPSBtb2R1bGVCbG9ja05vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nXG4gICAgICAgICAgICAgICAgPyBtb2R1bGVCbG9ja05vZGUuZGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZURlY2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNhbiBjaGVjayB0aGlzIGZvciB1czsgd2UgbmVlZG4ndFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4gcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZC5pZCwgKGlkKSA9PiBtLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZGVjbCwgbmFtZXNwYWNlRGVjbCwgbW9kdWxlQmxvY2tOb2RlKSxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuaWQubmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG1vZHVsZUJsb2NrTm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKFxuICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAmJiBtLm5hbWVzcGFjZS5zaXplID4gMCAvLyBhbnl0aGluZyBpcyBleHBvcnRlZFxuICAgICYmICFtLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICkge1xuICAgIG0ubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gIH1cblxuICBpZiAodW5hbWJpZ3VvdXNseUVTTSkge1xuICAgIG0ucGFyc2VHb2FsID0gJ01vZHVsZSc7XG4gIH1cbiAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBvZiB0aGlzIGNsb3N1cmUgaXMgaXNvbGF0ZWQgZnJvbSBvdGhlciBzY29wZXNcbiAqIHRvIGF2b2lkIG92ZXItcmV0ZW50aW9uIG9mIHVucmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGhhc1xuICogY2F1c2VkIG1lbW9yeSBsZWFrcy4gU2VlICMxMjY2LlxuICovXG5mdW5jdGlvbiB0aHVua0ZvcihwLCBjb250ZXh0KSB7XG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbi8qKlxuICogVHJhdmVyc2UgYSBwYXR0ZXJuL2lkZW50aWZpZXIgbm9kZSwgY2FsbGluZyAnY2FsbGJhY2snXG4gKiBmb3IgZWFjaCBsZWFmIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gIHtub2RlfSAgIHBhdHRlcm5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cblxubGV0IHBhcnNlck9wdGlvbnNIYXNoID0gJyc7XG5sZXQgcHJldlBhcnNlck9wdGlvbnMgPSAnJztcbmxldCBzZXR0aW5nc0hhc2ggPSAnJztcbmxldCBwcmV2U2V0dGluZ3MgPSAnJztcbi8qKlxuICogZG9uJ3QgaG9sZCBmdWxsIGNvbnRleHQgb2JqZWN0IGluIG1lbW9yeSwganVzdCBncmFiIHdoYXQgd2UgbmVlZC5cbiAqIGFsc28gY2FsY3VsYXRlIGEgY2FjaGVLZXksIHdoZXJlIHBhcnRzIG9mIHRoZSBjYWNoZUtleSBoYXNoIGFyZSBtZW1vaXplZFxuICovXG5mdW5jdGlvbiBjaGlsZENvbnRleHQocGF0aCwgY29udGV4dCkge1xuICBjb25zdCB7IHNldHRpbmdzLCBwYXJzZXJPcHRpb25zLCBwYXJzZXJQYXRoIH0gPSBjb250ZXh0O1xuXG4gIGlmIChKU09OLnN0cmluZ2lmeShzZXR0aW5ncykgIT09IHByZXZTZXR0aW5ncykge1xuICAgIHNldHRpbmdzSGFzaCA9IGhhc2hPYmplY3QoeyBzZXR0aW5ncyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZTZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdzKTtcbiAgfVxuXG4gIGlmIChKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKSAhPT0gcHJldlBhcnNlck9wdGlvbnMpIHtcbiAgICBwYXJzZXJPcHRpb25zSGFzaCA9IGhhc2hPYmplY3QoeyBwYXJzZXJPcHRpb25zIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcHJldlBhcnNlck9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FjaGVLZXk6IFN0cmluZyhwYXJzZXJQYXRoKSArIHBhcnNlck9wdGlvbnNIYXNoICsgc2V0dGluZ3NIYXNoICsgU3RyaW5nKHBhdGgpLFxuICAgIHNldHRpbmdzLFxuICAgIHBhcnNlck9wdGlvbnMsXG4gICAgcGFyc2VyUGF0aCxcbiAgICBwYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIHNvbWV0aW1lcyBsZWdhY3kgc3VwcG9ydCBpc24ndCBfdGhhdF8gaGFyZC4uLiByaWdodD9cbiAqL1xuZnVuY3Rpb24gbWFrZVNvdXJjZUNvZGUodGV4dCwgYXN0KSB7XG4gIGlmIChTb3VyY2VDb2RlLmxlbmd0aCA+IDEpIHtcbiAgICAvLyBFU0xpbnQgM1xuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh0ZXh0LCBhc3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVTTGludCA0LCA1XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VDb2RlKHsgdGV4dCwgYXN0IH0pO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/core/fsWalk.js b/node_modules/eslint-plugin-import/lib/core/fsWalk.js deleted file mode 100644 index fd3ef73eb5..0000000000 --- a/node_modules/eslint-plugin-import/lib/core/fsWalk.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. - - - - - - - - - - - - - - - - - - - - -walkSync = walkSync;var _path = require('path');var _path2 = _interopRequireDefault(_path);var _fs = require('fs');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** @typedef {{ name: string, path: string, dirent: import('fs').Dirent }} Entry */ /** - * Do a comprehensive walk of the provided src directory, and collect all entries. Filter out - * any directories or entries using the optional filter functions. - * @param {string} root - path to the root of the folder we're walking - * @param {{ deepFilter?: (entry: Entry) => boolean, entryFilter?: (entry: Entry) => boolean }} options - * @param {Entry} currentEntry - entry for the current directory we're working in - * @param {Entry[]} existingEntries - list of all entries so far - * @returns {Entry[]} an array of directory entries - */ /** - * This is intended to provide similar capability as the sync api from @nodelib/fs.walk, until `eslint-plugin-import` - * is willing to modernize and update their minimum node version to at least v16. I intentionally made the - * shape of the API (for the part we're using) the same as @nodelib/fs.walk so that that can be swapped in - * when the repo is ready for it. - */function walkSync(root, options, currentEntry, existingEntries) {// Extract the filter functions. Default to evaluating true, if no filter passed in. - var _options$deepFilter = options.deepFilter,deepFilter = _options$deepFilter === undefined ? function () {return true;} : _options$deepFilter,_options$entryFilter = options.entryFilter,entryFilter = _options$entryFilter === undefined ? function () {return true;} : _options$entryFilter;var entryList = existingEntries || [];var currentRelativePath = currentEntry ? currentEntry.path : '.';var fullPath = currentEntry ? _path2['default'].join(root, currentEntry.path) : root;var dirents = (0, _fs.readdirSync)(fullPath, { withFileTypes: true });dirents.forEach(function (dirent) {/** @type {Entry} */var entry = { name: dirent.name, path: _path2['default'].join(currentRelativePath, dirent.name), dirent: dirent }; - - - if (dirent.isDirectory() && deepFilter(entry)) { - entryList.push(entry); - entryList = walkSync(root, options, entry, entryList); - } else if (dirent.isFile() && entryFilter(entry)) { - entryList.push(entry); - } - }); - - return entryList; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ZzV2Fsay5qcyJdLCJuYW1lcyI6WyJ3YWxrU3luYyIsInJvb3QiLCJvcHRpb25zIiwiY3VycmVudEVudHJ5IiwiZXhpc3RpbmdFbnRyaWVzIiwiZGVlcEZpbHRlciIsImVudHJ5RmlsdGVyIiwiZW50cnlMaXN0IiwiY3VycmVudFJlbGF0aXZlUGF0aCIsInBhdGgiLCJmdWxsUGF0aCIsImpvaW4iLCJkaXJlbnRzIiwid2l0aEZpbGVUeXBlcyIsImZvckVhY2giLCJkaXJlbnQiLCJlbnRyeSIsIm5hbWUiLCJpc0RpcmVjdG9yeSIsInB1c2giLCJpc0ZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCZ0JBLFEsR0FBQUEsUSxDQWRoQiw0QiwyQ0FDQSx3QixnR0FFQSxtRixDQUVBOzs7Ozs7OzsyU0FaQTs7Ozs7OFNBcUJPLFNBQVNBLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCQyxPQUF4QixFQUFpQ0MsWUFBakMsRUFBK0NDLGVBQS9DLEVBQWdFLENBQ3JFO0FBRHFFLDRCQUVQRixPQUZPLENBRTdERyxVQUY2RCxDQUU3REEsVUFGNkQsdUNBRWhELG9CQUFNLElBQU4sRUFGZ0QsOENBRVBILE9BRk8sQ0FFcENJLFdBRm9DLENBRXBDQSxXQUZvQyx3Q0FFdEIsb0JBQU0sSUFBTixFQUZzQix3QkFJckUsSUFBSUMsWUFBWUgsbUJBQW1CLEVBQW5DLENBQ0EsSUFBTUksc0JBQXNCTCxlQUFlQSxhQUFhTSxJQUE1QixHQUFtQyxHQUEvRCxDQUNBLElBQU1DLFdBQVdQLGVBQWVNLGtCQUFLRSxJQUFMLENBQVVWLElBQVYsRUFBZ0JFLGFBQWFNLElBQTdCLENBQWYsR0FBb0RSLElBQXJFLENBRUEsSUFBTVcsVUFBVSxxQkFBWUYsUUFBWixFQUFzQixFQUFFRyxlQUFlLElBQWpCLEVBQXRCLENBQWhCLENBQ0FELFFBQVFFLE9BQVIsQ0FBZ0IsVUFBQ0MsTUFBRCxFQUFZLENBQzFCLG9CQUNBLElBQU1DLFFBQVEsRUFDWkMsTUFBTUYsT0FBT0UsSUFERCxFQUVaUixNQUFNQSxrQkFBS0UsSUFBTCxDQUFVSCxtQkFBVixFQUErQk8sT0FBT0UsSUFBdEMsQ0FGTSxFQUdaRixjQUhZLEVBQWQ7OztBQU1BLFFBQUlBLE9BQU9HLFdBQVAsTUFBd0JiLFdBQVdXLEtBQVgsQ0FBNUIsRUFBK0M7QUFDN0NULGdCQUFVWSxJQUFWLENBQWVILEtBQWY7QUFDQVQsa0JBQVlQLFNBQVNDLElBQVQsRUFBZUMsT0FBZixFQUF3QmMsS0FBeEIsRUFBK0JULFNBQS9CLENBQVo7QUFDRCxLQUhELE1BR08sSUFBSVEsT0FBT0ssTUFBUCxNQUFtQmQsWUFBWVUsS0FBWixDQUF2QixFQUEyQztBQUNoRFQsZ0JBQVVZLElBQVYsQ0FBZUgsS0FBZjtBQUNEO0FBQ0YsR0FkRDs7QUFnQkEsU0FBT1QsU0FBUDtBQUNEIiwiZmlsZSI6ImZzV2Fsay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHNpbWlsYXIgY2FwYWJpbGl0eSBhcyB0aGUgc3luYyBhcGkgZnJvbSBAbm9kZWxpYi9mcy53YWxrLCB1bnRpbCBgZXNsaW50LXBsdWdpbi1pbXBvcnRgXG4gKiBpcyB3aWxsaW5nIHRvIG1vZGVybml6ZSBhbmQgdXBkYXRlIHRoZWlyIG1pbmltdW0gbm9kZSB2ZXJzaW9uIHRvIGF0IGxlYXN0IHYxNi4gIEkgaW50ZW50aW9uYWxseSBtYWRlIHRoZVxuICogc2hhcGUgb2YgdGhlIEFQSSAoZm9yIHRoZSBwYXJ0IHdlJ3JlIHVzaW5nKSB0aGUgc2FtZSBhcyBAbm9kZWxpYi9mcy53YWxrIHNvIHRoYXQgdGhhdCBjYW4gYmUgc3dhcHBlZCBpblxuICogd2hlbiB0aGUgcmVwbyBpcyByZWFkeSBmb3IgaXQuXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcblxuLyoqIEB0eXBlZGVmIHt7IG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBkaXJlbnQ6IGltcG9ydCgnZnMnKS5EaXJlbnQgfX0gRW50cnkgKi9cblxuLyoqXG4gKiBEbyBhIGNvbXByZWhlbnNpdmUgd2FsayBvZiB0aGUgcHJvdmlkZWQgc3JjIGRpcmVjdG9yeSwgYW5kIGNvbGxlY3QgYWxsIGVudHJpZXMuICBGaWx0ZXIgb3V0XG4gKiBhbnkgZGlyZWN0b3JpZXMgb3IgZW50cmllcyB1c2luZyB0aGUgb3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb290IC0gcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHdlJ3JlIHdhbGtpbmdcbiAqIEBwYXJhbSB7eyBkZWVwRmlsdGVyPzogKGVudHJ5OiBFbnRyeSkgPT4gYm9vbGVhbiwgZW50cnlGaWx0ZXI/OiAoZW50cnk6IEVudHJ5KSA9PiBib29sZWFuIH19IG9wdGlvbnNcbiAqIEBwYXJhbSB7RW50cnl9IGN1cnJlbnRFbnRyeSAtIGVudHJ5IGZvciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2UncmUgd29ya2luZyBpblxuICogQHBhcmFtIHtFbnRyeVtdfSBleGlzdGluZ0VudHJpZXMgLSBsaXN0IG9mIGFsbCBlbnRyaWVzIHNvIGZhclxuICogQHJldHVybnMge0VudHJ5W119IGFuIGFycmF5IG9mIGRpcmVjdG9yeSBlbnRyaWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWxrU3luYyhyb290LCBvcHRpb25zLCBjdXJyZW50RW50cnksIGV4aXN0aW5nRW50cmllcykge1xuICAvLyBFeHRyYWN0IHRoZSBmaWx0ZXIgZnVuY3Rpb25zLiBEZWZhdWx0IHRvIGV2YWx1YXRpbmcgdHJ1ZSwgaWYgbm8gZmlsdGVyIHBhc3NlZCBpbi5cbiAgY29uc3QgeyBkZWVwRmlsdGVyID0gKCkgPT4gdHJ1ZSwgZW50cnlGaWx0ZXIgPSAoKSA9PiB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIGxldCBlbnRyeUxpc3QgPSBleGlzdGluZ0VudHJpZXMgfHwgW107XG4gIGNvbnN0IGN1cnJlbnRSZWxhdGl2ZVBhdGggPSBjdXJyZW50RW50cnkgPyBjdXJyZW50RW50cnkucGF0aCA6ICcuJztcbiAgY29uc3QgZnVsbFBhdGggPSBjdXJyZW50RW50cnkgPyBwYXRoLmpvaW4ocm9vdCwgY3VycmVudEVudHJ5LnBhdGgpIDogcm9vdDtcblxuICBjb25zdCBkaXJlbnRzID0gcmVhZGRpclN5bmMoZnVsbFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcbiAgICAvKiogQHR5cGUge0VudHJ5fSAqL1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgbmFtZTogZGlyZW50Lm5hbWUsXG4gICAgICBwYXRoOiBwYXRoLmpvaW4oY3VycmVudFJlbGF0aXZlUGF0aCwgZGlyZW50Lm5hbWUpLFxuICAgICAgZGlyZW50LFxuICAgIH07XG5cbiAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkgJiYgZGVlcEZpbHRlcihlbnRyeSkpIHtcbiAgICAgIGVudHJ5TGlzdC5wdXNoKGVudHJ5KTtcbiAgICAgIGVudHJ5TGlzdCA9IHdhbGtTeW5jKHJvb3QsIG9wdGlvbnMsIGVudHJ5LCBlbnRyeUxpc3QpO1xuICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpICYmIGVudHJ5RmlsdGVyKGVudHJ5KSkge1xuICAgICAgZW50cnlMaXN0LnB1c2goZW50cnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJ5TGlzdDtcbn1cbiJdfQ== \ 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 fd76a54638..749a15a39c 100644 --- a/node_modules/eslint-plugin-import/lib/core/importType.js +++ b/node_modules/eslint-plugin-import/lib/core/importType.js @@ -5,7 +5,6 @@ -isScoped = isScoped;exports. @@ -19,24 +18,26 @@ isScoped = isScoped;exports. +isAbsolute = isAbsolute;exports. -isAbsolute = isAbsolute;exports. +isBuiltIn = isBuiltIn;exports. -isBuiltIn = isBuiltIn;exports. +isExternalModule = isExternalModule;exports. +isExternalModuleMain = isExternalModuleMain;exports. @@ -54,10 +55,13 @@ isBuiltIn = isBuiltIn;exports. +isScoped = isScoped;exports. +isScopedMain = isScopedMain;exports['default'] = + @@ -103,14 +107,12 @@ isBuiltIn = isBuiltIn;exports. -isExternalModule = isExternalModule;exports. -isExternalModuleMain = isExternalModuleMain;exports. @@ -118,11 +120,10 @@ isExternalModuleMain = isExternalModuleMain;exports. -isScopedMain = isScopedMain;exports['default'] = -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 };}var scopedRegExp = /^@[^/]+\/?[^/]+/;function isScoped(name) {return name && scopedRegExp.test(name);}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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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;}var moduleRegExp = /^\w/;function isModule(name) {return name && moduleRegExp.test(name);}var moduleMainRegExp = /^[\w]((?!\/).)*$/;function isModuleMain(name) {return name && moduleMainRegExp.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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function isExternalModule(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}var scopedMainRegExp = /^@[^/]+\/?[^/]+$/;function isScopedMain(name) {return name && scopedMainRegExp.test(name);}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); +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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNTY29wZWQiLCJpc0Fic29sdXRlIiwiaXNCdWlsdEluIiwiaXNFeHRlcm5hbE1vZHVsZSIsImlzRXh0ZXJuYWxNb2R1bGVNYWluIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJzY29wZWRSZWdFeHAiLCJuYW1lIiwidGVzdCIsImJhc2VNb2R1bGUiLCJzcGxpdCIsInNjb3BlIiwicGtnIiwiaXNJbnRlcm5hbFJlZ2V4TWF0Y2giLCJzZXR0aW5ncyIsImludGVybmFsU2NvcGUiLCJSZWdFeHAiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJtb2R1bGVSZWdFeHAiLCJpc01vZHVsZSIsIm1vZHVsZU1haW5SZWdFeHAiLCJpc01vZHVsZU1haW4iLCJpc1JlbGF0aXZlVG9QYXJlbnQiLCJpbmRleEZpbGVzIiwiaXNJbmRleCIsImlzUmVsYXRpdmVUb1NpYmxpbmciLCJpc0V4dGVybmFsUGF0aCIsImNvbnRleHQiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSIsInR5cGVUZXN0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwic2NvcGVkTWFpblJlZ0V4cCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9nQkEsUSxHQUFBQSxROzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkFDLFUsR0FBQUEsVTs7Ozs7QUFLQUMsUyxHQUFBQSxTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRUFDLGdCLEdBQUFBLGdCOzs7Ozs7O0FBT0FDLG9CLEdBQUFBLG9COzs7Ozs7OztBQVFBQyxZLEdBQUFB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QUFULEVBQWV1QixPQUFmLEVBQXdCYixJQUF4QixNQUFrQyxVQUEvRCxDQUNELENBRUQsSUFBTTJCLG1CQUFtQixrQkFBekIsQ0FDTyxTQUFTeEMsWUFBVCxDQUFzQkcsSUFBdEIsRUFBNEIsQ0FDakMsT0FBT0EsUUFBUXFDLGlCQUFpQnBDLElBQWpCLENBQXNCRCxJQUF0QixDQUFmLENBQ0QsQ0FFYyxTQUFTRixpQkFBVCxDQUEyQkUsSUFBM0IsRUFBaUN1QixPQUFqQyxFQUEwQyxDQUN2RCxPQUFPVSxTQUFTakMsSUFBVCxFQUFldUIsT0FBZixFQUF3QiwwQkFBUXZCLElBQVIsRUFBY3VCLE9BQWQsQ0FBeEIsQ0FBUDtBQUNEIiwiZmlsZSI6ImltcG9ydFR5cGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Fic29sdXRlIGFzIG5vZGVJc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSBhcyBub2RlUmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IGlzQ29yZU1vZHVsZSBmcm9tICdpcy1jb3JlLW1vZHVsZSc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgeyBnZXRDb250ZXh0UGFja2FnZVBhdGggfSBmcm9tICcuL3BhY2thZ2VQYXRoJztcblxuY29uc3Qgc2NvcGVkUmVnRXhwID0gL15AW14vXStcXC8/W14vXSsvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmNvbnN0IG1vZHVsZVJlZ0V4cCA9IC9eXFx3LztcbmZ1bmN0aW9uIGlzTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IG1vZHVsZU1haW5SZWdFeHAgPSAvXltcXHddKCg/IVxcLykuKSokLztcbmZ1bmN0aW9uIGlzTW9kdWxlTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIG1vZHVsZU1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUpIHtcbiAgcmV0dXJuICgvXlxcLlxcLiR8XlxcLlxcLltcXFxcL10vKS50ZXN0KG5hbWUpO1xufVxuY29uc3QgaW5kZXhGaWxlcyA9IFsnLicsICcuLycsICcuL2luZGV4JywgJy4vaW5kZXguanMnXTtcbmZ1bmN0aW9uIGlzSW5kZXgobmFtZSkge1xuICByZXR1cm4gaW5kZXhGaWxlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvU2libGluZyhuYW1lKSB7XG4gIHJldHVybiAoL15cXC5bXFxcXC9dLykudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNFeHRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcblxuICBpZiAocmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlcnMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2V4dGVybmFsLW1vZHVsZS1mb2xkZXJzJ10gfHwgWydub2RlX21vZHVsZXMnXTtcbiAgcmV0dXJuIGZvbGRlcnMuc29tZSgoZm9sZGVyKSA9PiB7XG4gICAgY29uc3QgZm9sZGVyUGF0aCA9IG5vZGVSZXNvbHZlKHBhY2thZ2VQYXRoLCBmb2xkZXIpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKGZvbGRlclBhdGgsIHBhdGgpO1xuICAgIHJldHVybiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcbiAgcmV0dXJuICFyZWxhdGl2ZShwYWNrYWdlUGF0aCwgcGF0aCkuc3RhcnRzV2l0aCgnLi4vJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSB7XG4gIHJldHVybiBpc01vZHVsZShuYW1lKSB8fCBpc1Njb3BlZChuYW1lKTtcbn1cblxuZnVuY3Rpb24gdHlwZVRlc3QobmFtZSwgY29udGV4dCwgcGF0aCkge1xuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBpZiAoaXNJbnRlcm5hbFJlZ2V4TWF0Y2gobmFtZSwgc2V0dGluZ3MpKSB7IHJldHVybiAnaW50ZXJuYWwnOyB9XG4gIGlmIChpc0Fic29sdXRlKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2Fic29sdXRlJzsgfVxuICBpZiAoaXNCdWlsdEluKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2J1aWx0aW4nOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAncGFyZW50JzsgfVxuICBpZiAoaXNJbmRleChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdpbmRleCc7IH1cbiAgaWYgKGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnc2libGluZyc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIGlmIChpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNFeHRlcm5hbExvb2tpbmdOYW1lKG5hbWUpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIHJldHVybiAndW5rbm93bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNBYnNvbHV0ZSIsImlzQnVpbHRJbiIsImlzRXh0ZXJuYWxNb2R1bGUiLCJpc0V4dGVybmFsTW9kdWxlTWFpbiIsImlzU2NvcGVkIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJiYXNlTW9kdWxlIiwibmFtZSIsInNwbGl0Iiwic2NvcGUiLCJwa2ciLCJpc0ludGVybmFsUmVnZXhNYXRjaCIsInNldHRpbmdzIiwiaW50ZXJuYWxTY29wZSIsIlJlZ0V4cCIsInRlc3QiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJjb250ZXh0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwiaXNNb2R1bGUiLCJ0eXBlVGVzdCIsImlzTW9kdWxlTWFpbiIsIm1vZHVsZVJlZ0V4cCIsIm1vZHVsZU1haW5SZWdFeHAiLCJzY29wZWRSZWdFeHAiLCJzY29wZWRNYWluUmVnRXhwIiwiaXNSZWxhdGl2ZVRvUGFyZW50IiwiaW5kZXhGaWxlcyIsImlzSW5kZXgiLCJpc1JlbGF0aXZlVG9TaWJsaW5nIiwiaXNFeHRlcm5hbFBhdGgiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQmdCQSxVLEdBQUFBLFU7Ozs7O0FBS0FDLFMsR0FBQUEsUzs7Ozs7OztBQU9BQyxnQixHQUFBQSxnQjs7Ozs7OztBQU9BQyxvQixHQUFBQSxvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBQyxRLEdBQUFBLFE7Ozs7O0FBS0FDLFksR0FBQUEsWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFKLEVBQW1DLENBQUUsT0FBTyxVQUFQLENBQW9CLENBQ3pELElBQUl1QixlQUFlM0IsSUFBZixFQUFxQkksT0FBckIsQ0FBSixFQUFtQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN6RCxJQUFJd0Isc0JBQXNCckMsSUFBdEIsQ0FBSixFQUFpQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN2RCxPQUFPLFNBQVAsQ0FDRCxDQUVjLFNBQVNGLGlCQUFULENBQTJCRSxJQUEzQixFQUFpQ2EsT0FBakMsRUFBMEMsQ0FDdkQsT0FBT0ssU0FBU2xCLElBQVQsRUFBZWEsT0FBZixFQUF3QiwwQkFBUWIsSUFBUixFQUFjYSxPQUFkLENBQXhCLENBQVA7QUFDRCIsImZpbGUiOiJpbXBvcnRUeXBlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZSBhcyBub2RlSXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUgYXMgbm9kZVJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCBpc0NvcmVNb2R1bGUgZnJvbSAnaXMtY29yZS1tb2R1bGUnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFBhY2thZ2VQYXRoIH0gZnJvbSAnLi9wYWNrYWdlUGF0aCc7XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3QgbW9kdWxlUmVnRXhwID0gL15cXHcvO1xuZnVuY3Rpb24gaXNNb2R1bGUobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBtb2R1bGVSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3QgbW9kdWxlTWFpblJlZ0V4cCA9IC9eW1xcd10oKD8hXFwvKS4pKiQvO1xuZnVuY3Rpb24gaXNNb2R1bGVNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5jb25zdCBzY29wZWRSZWdFeHAgPSAvXkBbXi9dK1xcLz9bXi9dKy87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWQobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBzY29wZWRSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSkge1xuICByZXR1cm4gKC9eXFwuXFwuJHxeXFwuXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IGluZGV4RmlsZXMgPSBbJy4nLCAnLi8nLCAnLi9pbmRleCcsICcuL2luZGV4LmpzJ107XG5mdW5jdGlvbiBpc0luZGV4KG5hbWUpIHtcbiAgcmV0dXJuIGluZGV4RmlsZXMuaW5kZXhPZihuYW1lKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSkge1xuICByZXR1cm4gKC9eXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG5cbiAgaWYgKHJlbGF0aXZlKHBhY2thZ2VQYXRoLCBwYXRoKS5zdGFydHNXaXRoKCcuLicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmb2xkZXJzID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9leHRlcm5hbC1tb2R1bGUtZm9sZGVycyddIHx8IFsnbm9kZV9tb2R1bGVzJ107XG4gIHJldHVybiBmb2xkZXJzLnNvbWUoKGZvbGRlcikgPT4ge1xuICAgIGNvbnN0IGZvbGRlclBhdGggPSBub2RlUmVzb2x2ZShwYWNrYWdlUGF0aCwgZm9sZGVyKTtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShmb2xkZXJQYXRoLCBwYXRoKTtcbiAgICByZXR1cm4gIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLicpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG4gIHJldHVybiAhcmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uLycpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsTG9va2luZ05hbWUobmFtZSkge1xuICByZXR1cm4gaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpIHtcbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgaWYgKGlzSW50ZXJuYWxSZWdleE1hdGNoKG5hbWUsIHNldHRpbmdzKSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNBYnNvbHV0ZShuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdhYnNvbHV0ZSc7IH1cbiAgaWYgKGlzQnVpbHRJbihuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdidWlsdGluJzsgfVxuICBpZiAoaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3BhcmVudCc7IH1cbiAgaWYgKGlzSW5kZXgobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnaW5kZXgnOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9TaWJsaW5nKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3NpYmxpbmcnOyB9XG4gIGlmIChpc0V4dGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICBpZiAoaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkpIHsgcmV0dXJuICdpbnRlcm5hbCc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ 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 74bedc3172..84eb212ade 100644 --- a/node_modules/eslint-plugin-import/lib/core/packagePath.js +++ b/node_modules/eslint-plugin-import/lib/core/packagePath.js @@ -2,16 +2,16 @@ -getFilePackagePath = getFilePackagePath;exports. +getContextPackagePath = getContextPackagePath;exports. +getFilePackagePath = getFilePackagePath;exports. -getContextPackagePath = getContextPackagePath;exports. -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 getFilePackagePath(filePath) {var fp = (0, _pkgUp2['default'])({ cwd: filePath });return (0, _path.dirname)(fp);}function getContextPackagePath(context) {return getFilePackagePath(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());}function getFilePackageName(filePath) {var _readPkgUp = +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 @@ -19,4 +19,4 @@ getFilePackageName = getFilePackageName;var _path = require('path');var _pkgUp = } return null; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldEZpbGVQYWNrYWdlUGF0aCIsImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImZpbGVQYXRoIiwiZnAiLCJjd2QiLCJjb250ZXh0IiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxxQixHQUFBQSxxQjs7OztBQUlBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixrQkFBVCxDQUE0QkcsUUFBNUIsRUFBc0MsQ0FDM0MsSUFBTUMsS0FBSyx3QkFBTSxFQUFFQyxLQUFLRixRQUFQLEVBQU4sQ0FBWCxDQUNBLE9BQU8sbUJBQVFDLEVBQVIsQ0FBUCxDQUNELENBRU0sU0FBU0gscUJBQVQsQ0FBK0JLLE9BQS9CLEVBQXdDLENBQzdDLE9BQU9OLG1CQUFtQk0sUUFBUUMsbUJBQVIsR0FBOEJELFFBQVFDLG1CQUFSLEVBQTlCLEdBQThERCxRQUFRRSxXQUFSLEVBQWpGLENBQVAsQ0FDRCxDQUVNLFNBQVNOLGtCQUFULENBQTRCQyxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCTSxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYWNrYWdlUGF0aChmaWxlUGF0aCkge1xuICBjb25zdCBmcCA9IHBrZ1VwKHsgY3dkOiBmaWxlUGF0aCB9KTtcbiAgcmV0dXJuIGRpcm5hbWUoZnApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dFBhY2thZ2VQYXRoKGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEZpbGVQYWNrYWdlUGF0aChjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImNvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJmaWxlUGF0aCIsImZwIiwiY3dkIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLHFCLEdBQUFBLHFCOzs7O0FBSUFDLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixxQkFBVCxDQUErQkcsT0FBL0IsRUFBd0MsQ0FDN0MsT0FBT0YsbUJBQW1CRSxRQUFRQyxtQkFBUixHQUE4QkQsUUFBUUMsbUJBQVIsRUFBOUIsR0FBOERELFFBQVFFLFdBQVIsRUFBakYsQ0FBUCxDQUNELENBRU0sU0FBU0osa0JBQVQsQ0FBNEJLLFFBQTVCLEVBQXNDLENBQzNDLElBQU1DLEtBQUssd0JBQU0sRUFBRUMsS0FBS0YsUUFBUCxFQUFOLENBQVgsQ0FDQSxPQUFPLG1CQUFRQyxFQUFSLENBQVAsQ0FDRCxDQUVNLFNBQVNMLGtCQUFULENBQTRCSSxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCRyxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSB7XG4gIHJldHVybiBnZXRGaWxlUGFja2FnZVBhdGgoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVBhY2thZ2VQYXRoKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZwID0gcGtnVXAoeyBjd2Q6IGZpbGVQYXRoIH0pO1xuICByZXR1cm4gZGlybmFtZShmcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/builder.js b/node_modules/eslint-plugin-import/lib/exportMap/builder.js deleted file mode 100644 index f68aae2ade..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/builder.js +++ /dev/null @@ -1,206 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();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 _parse2 = require('eslint-module-utils/parse');var _parse3 = _interopRequireDefault(_parse2); -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 _ = require('.');var _2 = _interopRequireDefault(_); -var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); -var _typescript = require('./typescript'); -var _remotePath = require('./remotePath'); -var _visitor = require('./visitor');var _visitor2 = _interopRequireDefault(_visitor);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 log = (0, _debug2['default'])('eslint-plugin-import:ExportMap'); - -var exportCache = new Map(); - -/** - * The creation of this closure is isolated from other scopes - * to avoid over-retention of unrelated variables, which has - * caused memory leaks. See #1266. - */ -function thunkFor(p, context) { - // eslint-disable-next-line no-use-before-define - return function () {return ExportMapBuilder['for']((0, _childContext2['default'])(p, context));}; -}var - -ExportMapBuilder = function () {function ExportMapBuilder() {_classCallCheck(this, ExportMapBuilder);}_createClass(ExportMapBuilder, null, [{ key: 'get', value: function () {function get( - source, context) { - var path = (0, _resolve2['default'])(source, context); - if (path == null) {return null;} - - return ExportMapBuilder['for']((0, _childContext2['default'])(path, context)); - }return get;}() }, { key: 'for', value: function () {function _for( - - context) {var - path = context.path; - - var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); - var exportMap = exportCache.get(cacheKey); - - // return cached ignore - if (exportMap === null) {return null;} - - var stats = _fs2['default'].statSync(path); - if (exportMap != null) { - // date equality check - if (exportMap.mtime - stats.mtime === 0) { - return exportMap; - } - // future: check content equality? - } - - // check valid extensions first - 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 = ExportMapBuilder.parse(path, content, context); - - // ambiguous modules return null - if (exportMap == null) { - log('ignored path due to ambiguous parse:', path); - exportCache.set(cacheKey, null); - return null; - } - - exportMap.mtime = stats.mtime; - - exportCache.set(cacheKey, exportMap); - return exportMap; - }return _for;}() }, { key: 'parse', value: function () {function parse( - - path, content, context) { - var exportMap = new _2['default'](path); - var isEsModuleInteropTrue = (0, _typescript.isEsModuleInterop)(context); - - var ast = void 0; - var visitorKeys = void 0; - try { - var result = (0, _parse3['default'])(path, content, context); - ast = result.ast; - visitorKeys = result.visitorKeys; - } catch (err) { - exportMap.errors.push(err); - return exportMap; // can't continue - } - - exportMap.visitorKeys = visitorKeys; - - var hasDynamicImports = false; - - var remotePathResolver = new _remotePath.RemotePath(path, context); - - function processDynamicImport(source) { - hasDynamicImports = true; - if (source.type !== 'Literal') { - return null; - } - var p = remotePathResolver.resolve(source.value); - if (p == null) { - return null; - } - var importedSpecifiers = new Set(); - importedSpecifiers.add('ImportNamespaceSpecifier'); - var getter = thunkFor(p, context); - exportMap.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, - dynamic: true }]) }); - - - } - - (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;}() }); - - - var unambiguouslyESM = unambiguous.isModule(ast); - if (!unambiguouslyESM && !hasDynamicImports) {return null;} - - // 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';})) { - exportMap.doc = doc; - return true; - } - } catch (err) {/* ignore */} - return false; - }); - } - - var visitorBuilder = new _visitor2['default']( - path, - context, - exportMap, - ExportMapBuilder, - content, - ast, - isEsModuleInteropTrue, - thunkFor); - - ast.body.forEach(function (astNode) { - var visitor = visitorBuilder.build(astNode); - - if (visitor[astNode.type]) { - visitor[astNode.type].call(visitorBuilder); - } - }); - - if ( - isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && exportMap.namespace.size > 0 // anything is exported - && !exportMap.namespace.has('default') // and default isn't added already - ) { - exportMap.namespace.set('default', {}); // add default export - } - - if (unambiguouslyESM) { - exportMap.parseGoal = 'Module'; - } - return exportMap; - }return parse;}() }]);return ExportMapBuilder;}();exports['default'] = ExportMapBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJ1bmFtYmlndW91cyIsImxvZyIsImV4cG9ydENhY2hlIiwiTWFwIiwidGh1bmtGb3IiLCJwIiwiY29udGV4dCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJzb3VyY2UiLCJwYXRoIiwiY2FjaGVLZXkiLCJkaWdlc3QiLCJleHBvcnRNYXAiLCJnZXQiLCJzdGF0cyIsImZzIiwic3RhdFN5bmMiLCJtdGltZSIsInNldCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRlc3QiLCJwYXJzZSIsIkV4cG9ydE1hcCIsImlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiZXJyIiwiZXJyb3JzIiwicHVzaCIsImhhc0R5bmFtaWNJbXBvcnRzIiwicmVtb3RlUGF0aFJlc29sdmVyIiwiUmVtb3RlUGF0aCIsInByb2Nlc3NEeW5hbWljSW1wb3J0IiwidHlwZSIsInJlc29sdmUiLCJ2YWx1ZSIsImltcG9ydGVkU3BlY2lmaWVycyIsIlNldCIsImFkZCIsImdldHRlciIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIm5vZGUiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsInVuYW1iaWd1b3VzbHlFU00iLCJpc01vZHVsZSIsImNvbW1lbnRzIiwic29tZSIsImMiLCJkb2MiLCJkb2N0cmluZSIsInVud3JhcCIsInRhZ3MiLCJ0IiwidGl0bGUiLCJ2aXNpdG9yQnVpbGRlciIsIkltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIiwiYm9keSIsImZvckVhY2giLCJhc3ROb2RlIiwidmlzaXRvciIsImJ1aWxkIiwiY2FsbCIsIm5hbWVzcGFjZSIsInNpemUiLCJoYXMiLCJwYXJzZUdvYWwiXSwibWFwcGluZ3MiOiJnbkJBQUEsd0I7O0FBRUEsb0M7O0FBRUEs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dUJBQU8sSUFBUDtBQUNEO0FBQ0YsYUFORCxDQU1FLE9BQU81QixHQUFQLEVBQVksQ0FBRSxZQUFjO0FBQzlCLG1CQUFPLEtBQVA7QUFDRCxXQVZEO0FBV0Q7O0FBRUQsWUFBTWtDLGlCQUFpQixJQUFJQyxvQkFBSjtBQUNyQnZELFlBRHFCO0FBRXJCSCxlQUZxQjtBQUdyQk0saUJBSHFCO0FBSXJCTCx3QkFKcUI7QUFLckJZLGVBTHFCO0FBTXJCTyxXQU5xQjtBQU9yQkQsNkJBUHFCO0FBUXJCckIsZ0JBUnFCLENBQXZCOztBQVVBc0IsWUFBSXVDLElBQUosQ0FBU0MsT0FBVCxDQUFpQixVQUFVQyxPQUFWLEVBQW1CO0FBQ2xDLGNBQU1DLFVBQVVMLGVBQWVNLEtBQWYsQ0FBcUJGLE9BQXJCLENBQWhCOztBQUVBLGNBQUlDLFFBQVFELFFBQVEvQixJQUFoQixDQUFKLEVBQTJCO0FBQ3pCZ0Msb0JBQVFELFFBQVEvQixJQUFoQixFQUFzQmtDLElBQXRCLENBQTJCUCxjQUEzQjtBQUNEO0FBQ0YsU0FORDs7QUFRQTtBQUNFdEMsOEJBQXNCO0FBQXRCLFdBQ0diLFVBQVUyRCxTQUFWLENBQW9CQyxJQUFwQixHQUEyQixDQUQ5QixDQUNnQztBQURoQyxXQUVHLENBQUM1RCxVQUFVMkQsU0FBVixDQUFvQkUsR0FBcEIsQ0FBd0IsU0FBeEIsQ0FITixDQUd5QztBQUh6QyxVQUlFO0FBQ0E3RCxzQkFBVTJELFNBQVYsQ0FBb0JyRCxHQUFwQixDQUF3QixTQUF4QixFQUFtQyxFQUFuQyxFQURBLENBQ3dDO0FBQ3pDOztBQUVELFlBQUlrQyxnQkFBSixFQUFzQjtBQUNwQnhDLG9CQUFVOEQsU0FBVixHQUFzQixRQUF0QjtBQUNEO0FBQ0QsZUFBTzlELFNBQVA7QUFDRCxPLHNFQTFLa0JMLGdCIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuJztcbmltcG9ydCBjaGlsZENvbnRleHQgZnJvbSAnLi9jaGlsZENvbnRleHQnO1xuaW1wb3J0IHsgaXNFc01vZHVsZUludGVyb3AgfSBmcm9tICcuL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgUmVtb3RlUGF0aCB9IGZyb20gJy4vcmVtb3RlUGF0aCc7XG5pbXBvcnQgSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIgZnJvbSAnLi92aXNpdG9yJztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBUaGUgY3JlYXRpb24gb2YgdGhpcyBjbG9zdXJlIGlzIGlzb2xhdGVkIGZyb20gb3RoZXIgc2NvcGVzXG4gKiB0byBhdm9pZCBvdmVyLXJldGVudGlvbiBvZiB1bnJlbGF0ZWQgdmFyaWFibGVzLCB3aGljaCBoYXNcbiAqIGNhdXNlZCBtZW1vcnkgbGVha3MuIFNlZSAjMTI2Ni5cbiAqL1xuZnVuY3Rpb24gdGh1bmtGb3IocCwgY29udGV4dCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgcmV0dXJuICgpID0+IEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcEJ1aWxkZXIge1xuICBzdGF0aWMgZ2V0KHNvdXJjZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKHNvdXJjZSwgY29udGV4dCk7XG4gICAgaWYgKHBhdGggPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgcmV0dXJuIEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGxldCBleHBvcnRNYXAgPSBleHBvcnRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgICBpZiAoZXhwb3J0TWFwID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgaWYgKGV4cG9ydE1hcC5tdGltZSAtIHN0YXRzLm10aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmFsaWQgZXh0ZW5zaW9ucyBmaXJzdFxuICAgIGlmICghaGFzVmFsaWRFeHRlbnNpb24ocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICAgIGlmIChpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byBpZ25vcmUgc2V0dGluZ3M6JywgcGF0aCk7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIHVuYW1iaWd1b3VzIG1vZHVsZXNcbiAgICBpZiAoIXVuYW1iaWd1b3VzLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2coJ2NhY2hlIG1pc3MnLCBjYWNoZUtleSwgJ2ZvciBwYXRoJywgcGF0aCk7XG4gICAgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5wYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcblxuICAgIC8vIGFtYmlndW91cyBtb2R1bGVzIHJldHVybiBudWxsXG4gICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gYW1iaWd1b3VzIHBhcnNlOicsIHBhdGgpO1xuICAgICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV4cG9ydE1hcC5tdGltZSA9IHN0YXRzLm10aW1lO1xuXG4gICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICAgIHJldHVybiBleHBvcnRNYXA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IGV4cG9ydE1hcCA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gICAgY29uc3QgaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCk7XG5cbiAgICBsZXQgYXN0O1xuICAgIGxldCB2aXNpdG9yS2V5cztcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG4gICAgICBhc3QgPSByZXN1bHQuYXN0O1xuICAgICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBleHBvcnRNYXAuZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7IC8vIGNhbid0IGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZXhwb3J0TWFwLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXM7XG5cbiAgICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbW90ZVBhdGhSZXNvbHZlciA9IG5ldyBSZW1vdGVQYXRoKHBhdGgsIGNvbnRleHQpO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0R5bmFtaWNJbXBvcnQoc291cmNlKSB7XG4gICAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICAgICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGltcG9ydGVkU3BlY2lmaWVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5hZGQoJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwge1xuICAgICAgICBnZXR0ZXIsXG4gICAgICAgIGRlY2xhcmF0aW9uczogbmV3IFNldChbe1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgICAgICAgIGxvYzogc291cmNlLmxvYyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycyxcbiAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICB9XSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5zb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJbXBvcnQnKSB7XG4gICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5hbWJpZ3VvdXNseUVTTSA9IHVuYW1iaWd1b3VzLmlzTW9kdWxlKGFzdCk7XG4gICAgaWYgKCF1bmFtYmlndW91c2x5RVNNICYmICFoYXNEeW5hbWljSW1wb3J0cykgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgICBpZiAoYXN0LmNvbW1lbnRzKSB7XG4gICAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgICBpZiAoYy50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2MudGFncy5zb21lKCh0KSA9PiB0LnRpdGxlID09PSAnbW9kdWxlJykpIHtcbiAgICAgICAgICAgIGV4cG9ydE1hcC5kb2MgPSBkb2M7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpdG9yQnVpbGRlciA9IG5ldyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlcihcbiAgICAgIHBhdGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgZXhwb3J0TWFwLFxuICAgICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhc3QsXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgICB0aHVua0ZvcixcbiAgICApO1xuICAgIGFzdC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGFzdE5vZGUpIHtcbiAgICAgIGNvbnN0IHZpc2l0b3IgPSB2aXNpdG9yQnVpbGRlci5idWlsZChhc3ROb2RlKTtcblxuICAgICAgaWYgKHZpc2l0b3JbYXN0Tm9kZS50eXBlXSkge1xuICAgICAgICB2aXNpdG9yW2FzdE5vZGUudHlwZV0uY2FsbCh2aXNpdG9yQnVpbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgICAmJiBleHBvcnRNYXAubmFtZXNwYWNlLnNpemUgPiAwIC8vIGFueXRoaW5nIGlzIGV4cG9ydGVkXG4gICAgICAmJiAhZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gICAgfVxuXG4gICAgaWYgKHVuYW1iaWd1b3VzbHlFU00pIHtcbiAgICAgIGV4cG9ydE1hcC5wYXJzZUdvYWwgPSAnTW9kdWxlJztcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js b/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js deleted file mode 100644 index 5a863b60d1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.captureDependency = captureDependency;exports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -captureDependencyWithSpecifiers = captureDependencyWithSpecifiers;function captureDependency(_ref, isOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor) {var source = _ref.source;var importedSpecifiers = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Set();if (source == null) {return null;}var p = remotePathResolver.resolve(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 = exportMap.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}var getter = thunkFor(p, context);exportMap.imports.set(p, { getter: getter, declarations: new Set([declarationMetadata]) });return getter;}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);function captureDependencyWithSpecifiers(n, -remotePathResolver, -exportMap, -context, -thunkFor) -{ - // import type { Foo } (TS and Flow); import typeof { Foo } (Flow) - var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; - // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and - // shouldn't be considered to be just importing types - var specifiersOnlyImportingTypes = n.specifiers.length > 0; - var importedSpecifiers = new Set(); - n.specifiers.forEach(function (specifier) { - if (specifier.type === 'ImportSpecifier') { - importedSpecifiers.add(specifier.imported.name || specifier.imported.value); - } else if (supportedImportTypes.has(specifier.type)) { - importedSpecifiers.add(specifier.type); - } - - // import { type Foo } (Flow); import { typeof Foo } (Flow) - specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && ( - specifier.importKind === 'type' || specifier.importKind === 'typeof'); - }); - captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor, importedSpecifiers); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2FwdHVyZURlcGVuZGVuY3kuanMiXSwibmFtZXMiOlsiY2FwdHVyZURlcGVuZGVuY3kiLCJjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJleHBvcnRNYXAiLCJjb250ZXh0IiwidGh1bmtGb3IiLCJzb3VyY2UiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJTZXQiLCJwIiwicmVzb2x2ZSIsInZhbHVlIiwiZGVjbGFyYXRpb25NZXRhZGF0YSIsImxvYyIsImV4aXN0aW5nIiwiaW1wb3J0cyIsImdldCIsImRlY2xhcmF0aW9ucyIsImFkZCIsImdldHRlciIsInNldCIsInN1cHBvcnRlZEltcG9ydFR5cGVzIiwibiIsImRlY2xhcmF0aW9uSXNUeXBlIiwiaW1wb3J0S2luZCIsInNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMiLCJzcGVjaWZpZXJzIiwibGVuZ3RoIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInR5cGUiLCJpbXBvcnRlZCIsIm5hbWUiLCJoYXMiXSwibWFwcGluZ3MiOiJtRkFBZ0JBLGlCLEdBQUFBLGlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBQywrQixHQUFBQSwrQixDQWxDVCxTQUFTRCxpQkFBVCxPQUVMRSxvQkFGSyxFQUdMQyxrQkFISyxFQUlMQyxTQUpLLEVBS0xDLE9BTEssRUFNTEMsUUFOSyxFQVFMLEtBUEVDLE1BT0YsUUFQRUEsTUFPRixLQURBQyxrQkFDQSx1RUFEcUIsSUFBSUMsR0FBSixFQUNyQixDQUNBLElBQUlGLFVBQVUsSUFBZCxFQUFvQixDQUFFLE9BQU8sSUFBUCxDQUFjLENBRXBDLElBQU1HLElBQUlQLG1CQUFtQlEsT0FBbkIsQ0FBMkJKLE9BQU9LLEtBQWxDLENBQVYsQ0FDQSxJQUFJRixLQUFLLElBQVQsRUFBZSxDQUFFLE9BQU8sSUFBUCxDQUFjLENBRS9CLElBQU1HLHNCQUFzQixFQUMxQjtBQUNBTixZQUFRLEVBQUVLLE9BQU9MLE9BQU9LLEtBQWhCLEVBQXVCRSxLQUFLUCxPQUFPTyxHQUFuQyxFQUZrQixFQUcxQlosMENBSDBCLEVBSTFCTSxzQ0FKMEIsRUFBNUIsQ0FPQSxJQUFNTyxXQUFXWCxVQUFVWSxPQUFWLENBQWtCQyxHQUFsQixDQUFzQlAsQ0FBdEIsQ0FBakIsQ0FDQSxJQUFJSyxZQUFZLElBQWhCLEVBQXNCLENBQ3BCQSxTQUFTRyxZQUFULENBQXNCQyxHQUF0QixDQUEwQk4sbUJBQTFCLEVBQ0EsT0FBT0UsU0FBU0ssTUFBaEIsQ0FDRCxDQUVELElBQU1BLFNBQVNkLFNBQVNJLENBQVQsRUFBWUwsT0FBWixDQUFmLENBQ0FELFVBQVVZLE9BQVYsQ0FBa0JLLEdBQWxCLENBQXNCWCxDQUF0QixFQUF5QixFQUFFVSxjQUFGLEVBQVVGLGNBQWMsSUFBSVQsR0FBSixDQUFRLENBQUNJLG1CQUFELENBQVIsQ0FBeEIsRUFBekIsRUFDQSxPQUFPTyxNQUFQLENBQ0QsQ0FFRCxJQUFNRSx1QkFBdUIsSUFBSWIsR0FBSixDQUFRLENBQUMsd0JBQUQsRUFBMkIsMEJBQTNCLENBQVIsQ0FBN0IsQ0FFTyxTQUFTUiwrQkFBVCxDQUNMc0IsQ0FESztBQUVMcEIsa0JBRks7QUFHTEMsU0FISztBQUlMQyxPQUpLO0FBS0xDLFFBTEs7QUFNTDtBQUNBO0FBQ0EsTUFBTWtCLG9CQUFvQkQsRUFBRUUsVUFBRixLQUFpQixNQUFqQixJQUEyQkYsRUFBRUUsVUFBRixLQUFpQixRQUF0RTtBQUNBO0FBQ0E7QUFDQSxNQUFJQywrQkFBK0JILEVBQUVJLFVBQUYsQ0FBYUMsTUFBYixHQUFzQixDQUF6RDtBQUNBLE1BQU1wQixxQkFBcUIsSUFBSUMsR0FBSixFQUEzQjtBQUNBYyxJQUFFSSxVQUFGLENBQWFFLE9BQWIsQ0FBcUIsVUFBQ0MsU0FBRCxFQUFlO0FBQ2xDLFFBQUlBLFVBQVVDLElBQVYsS0FBbUIsaUJBQXZCLEVBQTBDO0FBQ3hDdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUUsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJILFVBQVVFLFFBQVYsQ0FBbUJwQixLQUFyRTtBQUNELEtBRkQsTUFFTyxJQUFJVSxxQkFBcUJZLEdBQXJCLENBQXlCSixVQUFVQyxJQUFuQyxDQUFKLEVBQThDO0FBQ25EdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUMsSUFBakM7QUFDRDs7QUFFRDtBQUNBTCxtQ0FBK0JBO0FBQ3pCSSxjQUFVTCxVQUFWLEtBQXlCLE1BQXpCLElBQW1DSyxVQUFVTCxVQUFWLEtBQXlCLFFBRG5DLENBQS9CO0FBRUQsR0FWRDtBQVdBekIsb0JBQWtCdUIsQ0FBbEIsRUFBcUJDLHFCQUFxQkUsNEJBQTFDLEVBQXdFdkIsa0JBQXhFLEVBQTRGQyxTQUE1RixFQUF1R0MsT0FBdkcsRUFBZ0hDLFFBQWhILEVBQTBIRSxrQkFBMUg7QUFDRCIsImZpbGUiOiJjYXB0dXJlRGVwZW5kZW5jeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeShcbiAgeyBzb3VyY2UgfSxcbiAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0ZvcixcbiAgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpLFxuKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICBpZiAocCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb25NZXRhZGF0YSA9IHtcbiAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICBzb3VyY2U6IHsgdmFsdWU6IHNvdXJjZS52YWx1ZSwgbG9jOiBzb3VyY2UubG9jIH0sXG4gICAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gZXhwb3J0TWFwLmltcG9ydHMuZ2V0KHApO1xuICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkge1xuICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgcmV0dXJuIGV4aXN0aW5nLmdldHRlcjtcbiAgfVxuXG4gIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICByZXR1cm4gZ2V0dGVyO1xufVxuXG5jb25zdCBzdXBwb3J0ZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQoWydJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllciddKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoXG4gIG4sXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0Zvcixcbikge1xuICAvLyBpbXBvcnQgdHlwZSB7IEZvbyB9IChUUyBhbmQgRmxvdyk7IGltcG9ydCB0eXBlb2YgeyBGb28gfSAoRmxvdylcbiAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAvLyBpbXBvcnQgJy4vZm9vJyBvciBpbXBvcnQge30gZnJvbSAnLi9mb28nIChib3RoIDAgc3BlY2lmaWVycykgaXMgYSBzaWRlIGVmZmVjdCBhbmRcbiAgLy8gc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQgdG8gYmUganVzdCBpbXBvcnRpbmcgdHlwZXNcbiAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICBuLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydGVkSW1wb3J0VHlwZXMuaGFzKHNwZWNpZmllci50eXBlKSkge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgfVxuXG4gICAgLy8gaW1wb3J0IHsgdHlwZSBGb28gfSAoRmxvdyk7IGltcG9ydCB7IHR5cGVvZiBGb28gfSAoRmxvdylcbiAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgJiYgKHNwZWNpZmllci5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKTtcbiAgfSk7XG4gIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIHJlbW90ZVBhdGhSZXNvbHZlciwgZXhwb3J0TWFwLCBjb250ZXh0LCB0aHVua0ZvciwgaW1wb3J0ZWRTcGVjaWZpZXJzKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/childContext.js b/node_modules/eslint-plugin-import/lib/exportMap/childContext.js deleted file mode 100644 index aaa31ef98f..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/childContext.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = - - - - - - - - - - -childContext;var _hash = require('eslint-module-utils/hash');var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** - * don't hold full context object in memory, just grab what we need. - * also calculate a cacheKey, where parts of the cacheKey hash are memoized - */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) { - settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex'); - prevSettings = JSON.stringify(settings); - } - - if (JSON.stringify(parserOptions) !== prevParserOptions) { - parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex'); - prevParserOptions = JSON.stringify(parserOptions); - } - - return { - cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), - settings: settings, - parserOptions: parserOptions, - parserPath: parserPath, - path: path }; - -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2hpbGRDb250ZXh0LmpzIl0sIm5hbWVzIjpbImNoaWxkQ29udGV4dCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXRoIiwiY29udGV4dCIsInNldHRpbmdzIiwicGFyc2VyT3B0aW9ucyIsInBhcnNlclBhdGgiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwiY2FjaGVLZXkiLCJTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBV3dCQSxZLENBWHhCLGdEQUVBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLGVBQWUsRUFBbkIsQ0FDQSxJQUFJQyxlQUFlLEVBQW5CLEMsQ0FFQTs7O21LQUllLFNBQVNKLFlBQVQsQ0FBc0JLLElBQXRCLEVBQTRCQyxPQUE1QixFQUFxQyxLQUMxQ0MsUUFEMEMsR0FDRkQsT0FERSxDQUMxQ0MsUUFEMEMsQ0FDaENDLGFBRGdDLEdBQ0ZGLE9BREUsQ0FDaENFLGFBRGdDLENBQ2pCQyxVQURpQixHQUNGSCxPQURFLENBQ2pCRyxVQURpQixDQUdsRCxJQUFJQyxLQUFLQyxTQUFMLENBQWVKLFFBQWYsTUFBNkJILFlBQWpDLEVBQStDO0FBQzdDRCxtQkFBZSxzQkFBVyxFQUFFSSxrQkFBRixFQUFYLEVBQXlCSyxNQUF6QixDQUFnQyxLQUFoQyxDQUFmO0FBQ0FSLG1CQUFlTSxLQUFLQyxTQUFMLENBQWVKLFFBQWYsQ0FBZjtBQUNEOztBQUVELE1BQUlHLEtBQUtDLFNBQUwsQ0FBZUgsYUFBZixNQUFrQ04saUJBQXRDLEVBQXlEO0FBQ3ZERCx3QkFBb0Isc0JBQVcsRUFBRU8sNEJBQUYsRUFBWCxFQUE4QkksTUFBOUIsQ0FBcUMsS0FBckMsQ0FBcEI7QUFDQVYsd0JBQW9CUSxLQUFLQyxTQUFMLENBQWVILGFBQWYsQ0FBcEI7QUFDRDs7QUFFRCxTQUFPO0FBQ0xLLGNBQVVDLE9BQU9MLFVBQVAsSUFBcUJSLGlCQUFyQixHQUF5Q0UsWUFBekMsR0FBd0RXLE9BQU9ULElBQVAsQ0FEN0Q7QUFFTEUsc0JBRks7QUFHTEMsZ0NBSEs7QUFJTEMsMEJBSks7QUFLTEosY0FMSyxFQUFQOztBQU9EIiwiZmlsZSI6ImNoaWxkQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuXG5sZXQgcGFyc2VyT3B0aW9uc0hhc2ggPSAnJztcbmxldCBwcmV2UGFyc2VyT3B0aW9ucyA9ICcnO1xubGV0IHNldHRpbmdzSGFzaCA9ICcnO1xubGV0IHByZXZTZXR0aW5ncyA9ICcnO1xuXG4vKipcbiAqIGRvbid0IGhvbGQgZnVsbCBjb250ZXh0IG9iamVjdCBpbiBtZW1vcnksIGp1c3QgZ3JhYiB3aGF0IHdlIG5lZWQuXG4gKiBhbHNvIGNhbGN1bGF0ZSBhIGNhY2hlS2V5LCB3aGVyZSBwYXJ0cyBvZiB0aGUgY2FjaGVLZXkgaGFzaCBhcmUgbWVtb2l6ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcblxuICBpZiAoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpICE9PSBwcmV2U2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nc0hhc2ggPSBoYXNoT2JqZWN0KHsgc2V0dGluZ3MgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBwcmV2U2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5ncyk7XG4gIH1cblxuICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucykgIT09IHByZXZQYXJzZXJPcHRpb25zKSB7XG4gICAgcGFyc2VyT3B0aW9uc0hhc2ggPSBoYXNoT2JqZWN0KHsgcGFyc2VyT3B0aW9ucyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZQYXJzZXJPcHRpb25zID0gSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhY2hlS2V5OiBTdHJpbmcocGFyc2VyUGF0aCkgKyBwYXJzZXJPcHRpb25zSGFzaCArIHNldHRpbmdzSGFzaCArIFN0cmluZyhwYXRoKSxcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/doc.js b/node_modules/eslint-plugin-import/lib/exportMap/doc.js deleted file mode 100644 index e2ceaa98a6..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/doc.js +++ /dev/null @@ -1,90 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.availableDocStyleParsers = undefined;exports. - - - - -captureDoc = captureDoc;var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** - * parse docs from the first node that has leading comments - */function captureDoc(source, docStyleParsers) {var metadata = {}; - // 'some' short-circuits on first 'true' - for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) { - try { - - var leadingComments = void 0; - - // n.leadingComments is legacy `attachComments` behavior - if ('leadingComments' in n) { - leadingComments = n.leadingComments; - } else if (n.range) { - leadingComments = source.getCommentsBefore(n); - } - - if (!leadingComments || leadingComments.length === 0) {return false;} - - for (var name in docStyleParsers) { - var doc = docStyleParsers[name](leadingComments); - if (doc) { - metadata.doc = doc; - } - } - - return true; - } catch (err) { - return false; - } - }); - - return metadata; -} - -/** - * parse JSDoc from leading comments - * @param {object[]} comments - * @return {{ doc: object }} - */ -function captureJsDoc(comments) { - var doc = void 0; - - // capture XSDoc - comments.forEach(function (comment) { - // skip non-block comments - if (comment.type !== 'Block') {return;} - try { - doc = _doctrine2['default'].parse(comment.value, { unwrap: true }); - } catch (err) { - /* don't care, for now? maybe add to `errors?` */ - } - }); - - return doc; -} - -/** - * parse TomDoc section from comments - */ -function captureTomDoc(comments) { - // collect lines up to first paragraph break - var lines = []; - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; - if (comment.value.match(/^\s*$/)) {break;} - lines.push(comment.value.trim()); - } - - // return doctrine-like object - var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/); - if (statusMatch) { - return { - description: statusMatch[2], - tags: [{ - title: statusMatch[1].toLowerCase(), - description: statusMatch[2] }] }; - - - } -} - -var availableDocStyleParsers = exports.availableDocStyleParsers = { - jsdoc: captureJsDoc, - tomdoc: captureTomDoc }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvZG9jLmpzIl0sIm5hbWVzIjpbImNhcHR1cmVEb2MiLCJzb3VyY2UiLCJkb2NTdHlsZVBhcnNlcnMiLCJtZXRhZGF0YSIsIm5vZGVzIiwic29tZSIsIm4iLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwibmFtZSIsImRvYyIsImVyciIsImNhcHR1cmVKc0RvYyIsImNvbW1lbnRzIiwiZm9yRWFjaCIsImNvbW1lbnQiLCJ0eXBlIiwiZG9jdHJpbmUiLCJwYXJzZSIsInZhbHVlIiwidW53cmFwIiwiY2FwdHVyZVRvbURvYyIsImxpbmVzIiwiaSIsIm1hdGNoIiwicHVzaCIsInRyaW0iLCJzdGF0dXNNYXRjaCIsImpvaW4iLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJ0b21kb2MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS2dCQSxVLEdBQUFBLFUsQ0FMaEIsb0MsbUpBRUE7O2tOQUdPLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCQyxlQUE1QixFQUF1RCxDQUM1RCxJQUFNQyxXQUFXLEVBQWpCO0FBRUE7QUFINEQsb0NBQVBDLEtBQU8sbUVBQVBBLEtBQU8sOEJBSTVEQSxNQUFNQyxJQUFOLENBQVcsVUFBQ0MsQ0FBRCxFQUFPO0FBQ2hCLFFBQUk7O0FBRUYsVUFBSUMsd0JBQUo7O0FBRUE7QUFDQSxVQUFJLHFCQUFxQkQsQ0FBekIsRUFBNEI7QUFDMUJDLDBCQUFrQkQsRUFBRUMsZUFBcEI7QUFDRCxPQUZELE1BRU8sSUFBSUQsRUFBRUUsS0FBTixFQUFhO0FBQ2xCRCwwQkFBa0JOLE9BQU9RLGlCQUFQLENBQXlCSCxDQUF6QixDQUFsQjtBQUNEOztBQUVELFVBQUksQ0FBQ0MsZUFBRCxJQUFvQkEsZ0JBQWdCRyxNQUFoQixLQUEyQixDQUFuRCxFQUFzRCxDQUFFLE9BQU8sS0FBUCxDQUFlOztBQUV2RSxXQUFLLElBQU1DLElBQVgsSUFBbUJULGVBQW5CLEVBQW9DO0FBQ2xDLFlBQU1VLE1BQU1WLGdCQUFnQlMsSUFBaEIsRUFBc0JKLGVBQXRCLENBQVo7QUFDQSxZQUFJSyxHQUFKLEVBQVM7QUFDUFQsbUJBQVNTLEdBQVQsR0FBZUEsR0FBZjtBQUNEO0FBQ0Y7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0FyQkQsQ0FxQkUsT0FBT0MsR0FBUCxFQUFZO0FBQ1osYUFBTyxLQUFQO0FBQ0Q7QUFDRixHQXpCRDs7QUEyQkEsU0FBT1YsUUFBUDtBQUNEOztBQUVEOzs7OztBQUtBLFNBQVNXLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDO0FBQzlCLE1BQUlILFlBQUo7O0FBRUE7QUFDQUcsV0FBU0MsT0FBVCxDQUFpQixVQUFDQyxPQUFELEVBQWE7QUFDNUI7QUFDQSxRQUFJQSxRQUFRQyxJQUFSLEtBQWlCLE9BQXJCLEVBQThCLENBQUUsT0FBUztBQUN6QyxRQUFJO0FBQ0ZOLFlBQU1PLHNCQUFTQyxLQUFULENBQWVILFFBQVFJLEtBQXZCLEVBQThCLEVBQUVDLFFBQVEsSUFBVixFQUE5QixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9ULEdBQVAsRUFBWTtBQUNaO0FBQ0Q7QUFDRixHQVJEOztBQVVBLFNBQU9ELEdBQVA7QUFDRDs7QUFFRDs7O0FBR0EsU0FBU1csYUFBVCxDQUF1QlIsUUFBdkIsRUFBaUM7QUFDL0I7QUFDQSxNQUFNUyxRQUFRLEVBQWQ7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSVYsU0FBU0wsTUFBN0IsRUFBcUNlLEdBQXJDLEVBQTBDO0FBQ3hDLFFBQU1SLFVBQVVGLFNBQVNVLENBQVQsQ0FBaEI7QUFDQSxRQUFJUixRQUFRSSxLQUFSLENBQWNLLEtBQWQsQ0FBb0IsT0FBcEIsQ0FBSixFQUFrQyxDQUFFLE1BQVE7QUFDNUNGLFVBQU1HLElBQU4sQ0FBV1YsUUFBUUksS0FBUixDQUFjTyxJQUFkLEVBQVg7QUFDRDs7QUFFRDtBQUNBLE1BQU1DLGNBQWNMLE1BQU1NLElBQU4sQ0FBVyxHQUFYLEVBQWdCSixLQUFoQixDQUFzQix1Q0FBdEIsQ0FBcEI7QUFDQSxNQUFJRyxXQUFKLEVBQWlCO0FBQ2YsV0FBTztBQUNMRSxtQkFBYUYsWUFBWSxDQUFaLENBRFI7QUFFTEcsWUFBTSxDQUFDO0FBQ0xDLGVBQU9KLFlBQVksQ0FBWixFQUFlSyxXQUFmLEVBREY7QUFFTEgscUJBQWFGLFlBQVksQ0FBWixDQUZSLEVBQUQsQ0FGRCxFQUFQOzs7QUFPRDtBQUNGOztBQUVNLElBQU1NLDhEQUEyQjtBQUN0Q0MsU0FBT3RCLFlBRCtCO0FBRXRDdUIsVUFBUWQsYUFGOEIsRUFBakMiLCJmaWxlIjoiZG9jLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJztcblxuLyoqXG4gKiBwYXJzZSBkb2NzIGZyb20gdGhlIGZpcnN0IG5vZGUgdGhhdCBoYXMgbGVhZGluZyBjb21tZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgLi4ubm9kZXMpIHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcblxuICAvLyAnc29tZScgc2hvcnQtY2lyY3VpdHMgb24gZmlyc3QgJ3RydWUnXG4gIG5vZGVzLnNvbWUoKG4pID0+IHtcbiAgICB0cnkge1xuXG4gICAgICBsZXQgbGVhZGluZ0NvbW1lbnRzO1xuXG4gICAgICAvLyBuLmxlYWRpbmdDb21tZW50cyBpcyBsZWdhY3kgYGF0dGFjaENvbW1lbnRzYCBiZWhhdmlvclxuICAgICAgaWYgKCdsZWFkaW5nQ29tbWVudHMnIGluIG4pIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gbi5sZWFkaW5nQ29tbWVudHM7XG4gICAgICB9IGVsc2UgaWYgKG4ucmFuZ2UpIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlLmdldENvbW1lbnRzQmVmb3JlKG4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZG9jU3R5bGVQYXJzZXJzKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY1N0eWxlUGFyc2Vyc1tuYW1lXShsZWFkaW5nQ29tbWVudHMpO1xuICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgbWV0YWRhdGEuZG9jID0gZG9jO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMgPSB7XG4gIGpzZG9jOiBjYXB0dXJlSnNEb2MsXG4gIHRvbWRvYzogY2FwdHVyZVRvbURvYyxcbn07XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/index.js b/node_modules/eslint-plugin-import/lib/exportMap/index.js deleted file mode 100644 index 802da1e873..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/index.js +++ /dev/null @@ -1,180 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}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<() => ExportMap>} - */ - this.dependencies = new Set(); - /** - * dependencies of this module that are not explicitly re-exported - * @type {Map ExportMap>} - */ - this.imports = new Map(); - this.errors = []; - /** - * type {'ambiguous' | 'Module' | 'Script'} - */ - this.parseGoal = 'ambiguous'; - }_createClass(ExportMap, [{ key: 'has', - - - - - - - - - - - - - - - /** - * Note that this does not check explicitly re-exported names for existence - * in the base namespace, but it will expand all `export * from '...'` exports - * if not found in the explicit namespace. - * @param {string} name - * @return {boolean} true if `name` is exported by this module. - */value: function () {function has( - name) { - if (this.namespace.has(name)) {return true;} - if (this.reexports.has(name)) {return true;} - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { - for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value; - var innerMap = dep(); - - // todo: report as unresolved? - if (!innerMap) {continue;} - - if (innerMap.has(name)) {return true;} - }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} - } - - return false; - }return has;}() - - /** - * ensure that imported name fully resolves. - * @param {string} name - * @return {{ found: boolean, path: ExportMap[] }} - */ }, { key: 'hasDeep', value: function () {function hasDeep( - name) { - if (this.namespace.has(name)) {return { found: true, path: [this] };} - - if (this.reexports.has(name)) { - var reexports = this.reexports.get(name); - var imported = reexports.getImport(); - - // if import is ignored, return explicit 'null' - if (imported == null) {return { found: true, path: [this] };} - - // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) { - return { found: false, path: [this] }; - } - - var deep = imported.hasDeep(reexports.local); - deep.path.unshift(this); - - return deep; - } - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { - for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value; - var innerMap = dep(); - if (innerMap == null) {return { found: true, path: [this] };} - // todo: report as unresolved? - if (!innerMap) {continue;} - - // safeguard against cycles - if (innerMap.path === this.path) {continue;} - - var innerValue = innerMap.hasDeep(name); - if (innerValue.found) { - innerValue.path.unshift(this); - return innerValue; - } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} - } - - return { found: false, path: [this] }; - }return hasDeep;}() }, { key: 'get', value: function () {function get( - - name) { - if (this.namespace.has(name)) {return this.namespace.get(name);} - - if (this.reexports.has(name)) { - var reexports = this.reexports.get(name); - var imported = reexports.getImport(); - - // if import is ignored, return explicit 'null' - if (imported == null) {return null;} - - // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) {return undefined;} - - return imported.get(reexports.local); - } - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value; - var innerMap = dep(); - // todo: report as unresolved? - if (!innerMap) {continue;} - - // safeguard against cycles - if (innerMap.path === this.path) {continue;} - - var innerValue = innerMap.get(name); - if (innerValue !== undefined) {return innerValue;} - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} - } - - return undefined; - }return get;}() }, { key: 'forEach', value: function () {function forEach( - - callback, thisArg) {var _this = this; - this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);}); - - this.reexports.forEach(function (reexports, name) { - var reexported = reexports.getImport(); - // can't look up meta for ignored re-exports (#348) - callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this); - }); - - this.dependencies.forEach(function (dep) { - var d = dep(); - // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;} - - d.forEach(function (v, n) { - if (n !== 'default') { - callback.call(thisArg, v, n, _this); - } - }); - }); - }return forEach;}() - - // todo: keys, values, entries? - }, { key: 'reportErrors', value: function () {function reportErrors( - context, declaration) { - var msg = this.errors. - map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}). - join(', '); - context.report({ - node: declaration.source, - message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) }); - - }return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has - }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}();exports['default'] = ExportMap; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvaW5kZXguanMiXSwibmFtZXMiOlsiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsIk1hcCIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiXSwibWFwcGluZ3MiOiJ5d0JBQXFCQSxTO0FBQ25CLHFCQUFZQyxJQUFaLEVBQWtCO0FBQ2hCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBSUMsR0FBSixFQUFqQjtBQUNBO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixJQUFJRCxHQUFKLEVBQWpCO0FBQ0E7Ozs7QUFJQSxTQUFLRSxZQUFMLEdBQW9CLElBQUlDLEdBQUosRUFBcEI7QUFDQTs7OztBQUlBLFNBQUtDLE9BQUwsR0FBZSxJQUFJSixHQUFKLEVBQWY7QUFDQSxTQUFLSyxNQUFMLEdBQWMsRUFBZDtBQUNBOzs7QUFHQSxTQUFLQyxTQUFMLEdBQWlCLFdBQWpCO0FBQ0QsRzs7Ozs7Ozs7Ozs7Ozs7O0FBZUQ7Ozs7Ozs7QUFPSUMsVSxFQUFNO0FBQ1IsWUFBSSxLQUFLUixTQUFMLENBQWVTLEdBQWYsQ0FBbUJELElBQW5CLENBQUosRUFBOEIsQ0FBRSxPQUFPLElB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SyxJQUFULEVBQWUsQ0FBRSxPQUFTLENBQzFCYyxRQUFRZCxFQUFFYyxJQUFWLENBQ0QsQ0FMRCxFQU1BLE9BQU9BLElBQVAsQ0FDRCxDLDZEQWxDa0I3QyxTIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0TWFwIHtcbiAgY29uc3RydWN0b3IocGF0aCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTWFwKCk7XG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogc3Rhci1leHBvcnRzXG4gICAgICogQHR5cGUge1NldDwoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCAoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/namespace.js b/node_modules/eslint-plugin-import/lib/exportMap/namespace.js deleted file mode 100644 index 0b07bdd8c1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/namespace.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); -var _remotePath = require('./remotePath');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 - -Namespace = function () { - function Namespace( - path, - context, - ExportMapBuilder) - {_classCallCheck(this, Namespace); - this.remotePathResolver = new _remotePath.RemotePath(path, context); - this.context = context; - this.ExportMapBuilder = ExportMapBuilder; - this.namespaces = new Map(); - }_createClass(Namespace, [{ key: 'resolveImport', value: function () {function resolveImport( - - value) { - var rp = this.remotePathResolver.resolve(value); - if (rp == null) {return null;} - return this.ExportMapBuilder['for']((0, _childContext2['default'])(rp, this.context)); - }return resolveImport;}() }, { key: 'getNamespace', value: function () {function getNamespace( - - identifier) {var _this = this; - if (!this.namespaces.has(identifier.name)) {return;} - return function () {return _this.resolveImport(_this.namespaces.get(identifier.name));}; - }return getNamespace;}() }, { key: 'add', value: function () {function add( - - object, identifier) { - var nsfn = this.getNamespace(identifier); - if (nsfn) { - Object.defineProperty(object, 'namespace', { get: nsfn }); - } - - return object; - }return add;}() }, { key: 'rawSet', value: function () {function rawSet( - - name, value) { - this.namespaces.set(name, value); - }return rawSet;}() }]);return Namespace;}();exports['default'] = Namespace; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvbmFtZXNwYWNlLmpzIl0sIm5hbWVzIjpbIk5hbWVzcGFjZSIsInBhdGgiLCJjb250ZXh0IiwiRXhwb3J0TWFwQnVpbGRlciIsInJlbW90ZVBhdGhSZXNvbHZlciIsIlJlbW90ZVBhdGgiLCJuYW1lc3BhY2VzIiwiTWFwIiwidmFsdWUiLCJycCIsInJlc29sdmUiLCJpZGVudGlmaWVyIiwiaGFzIiwibmFtZSIsInJlc29sdmVJbXBvcnQiLCJnZXQiLCJvYmplY3QiLCJuc2ZuIiwiZ2V0TmFtZXNwYWNlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJzZXQiXSwibWFwcGluZ3MiOiJnbkJBQUEsOEM7QUFDQSwwQzs7QUFFcUJBLFM7QUFDbkI7QUFDRUMsTUFERjtBQUVFQyxTQUZGO0FBR0VDLGtCQUhGO0FBSUU7QUFDQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQkFBSixDQUFlSixJQUFmLEVBQXFCQyxPQUFyQixDQUExQjtBQUNBLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCQSxnQkFBeEI7QUFDQSxTQUFLRyxVQUFMLEdBQWtCLElBQUlDLEdBQUosRUFBbEI7QUFDRCxHOztBQUVhQyxXLEVBQU87QUFDbkIsWUFBTUMsS0FBSyxLQUFLTCxrQkFBTCxDQUF3Qk0sT0FBeEIsQ0FBZ0NGLEtBQWhDLENBQVg7QUFDQSxZQUFJQyxNQUFNLElBQVYsRUFBZ0IsQ0FBRSxPQUFPLElBQVAsQ0FBYztBQUNoQyxlQUFPLEtBQUtOLGdCQUFMLFFBQTBCLCtCQUFhTSxFQUFiLEVBQWlCLEtBQUtQLE9BQXRCLENBQTFCLENBQVA7QUFDRCxPOztBQUVZUyxnQixFQUFZO0FBQ3ZCLFlBQUksQ0FBQyxLQUFLTCxVQUFMLENBQWdCTSxHQUFoQixDQUFvQkQsV0FBV0UsSUFBL0IsQ0FBTCxFQUEyQyxDQUFFLE9BQVM7QUFDdEQsZUFBTyxvQkFBTSxNQUFLQyxhQUFMLENBQW1CLE1BQUtSLFVBQUwsQ0FBZ0JTLEdBQWhCLENBQW9CSixXQUFXRSxJQUEvQixDQUFuQixDQUFOLEVBQVA7QUFDRCxPOztBQUVHRyxZLEVBQVFMLFUsRUFBWTtBQUN0QixZQUFNTSxPQUFPLEtBQUtDLFlBQUwsQ0FBa0JQLFVBQWxCLENBQWI7QUFDQSxZQUFJTSxJQUFKLEVBQVU7QUFDUkUsaUJBQU9DLGNBQVAsQ0FBc0JKLE1BQXRCLEVBQThCLFdBQTlCLEVBQTJDLEVBQUVELEtBQUtFLElBQVAsRUFBM0M7QUFDRDs7QUFFRCxlQUFPRCxNQUFQO0FBQ0QsTzs7QUFFTUgsVSxFQUFNTCxLLEVBQU87QUFDbEIsYUFBS0YsVUFBTCxDQUFnQmUsR0FBaEIsQ0FBb0JSLElBQXBCLEVBQTBCTCxLQUExQjtBQUNELE8sZ0VBbENrQlIsUyIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hpbGRDb250ZXh0IGZyb20gJy4vY2hpbGRDb250ZXh0JztcbmltcG9ydCB7IFJlbW90ZVBhdGggfSBmcm9tICcuL3JlbW90ZVBhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lc3BhY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXRoLFxuICAgIGNvbnRleHQsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgKSB7XG4gICAgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIgPSBuZXcgUmVtb3RlUGF0aChwYXRoLCBjb250ZXh0KTtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuRXhwb3J0TWFwQnVpbGRlciA9IEV4cG9ydE1hcEJ1aWxkZXI7XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZSh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gdGhpcy5FeHBvcnRNYXBCdWlsZGVyLmZvcihjaGlsZENvbnRleHQocnAsIHRoaXMuY29udGV4dCkpO1xuICB9XG5cbiAgZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpIHtcbiAgICBpZiAoIXRoaXMubmFtZXNwYWNlcy5oYXMoaWRlbnRpZmllci5uYW1lKSkgeyByZXR1cm47IH1cbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZXNvbHZlSW1wb3J0KHRoaXMubmFtZXNwYWNlcy5nZXQoaWRlbnRpZmllci5uYW1lKSk7XG4gIH1cblxuICBhZGQob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IHRoaXMuZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpO1xuICAgIGlmIChuc2ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnbmFtZXNwYWNlJywgeyBnZXQ6IG5zZm4gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHJhd1NldChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubmFtZXNwYWNlcy5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js b/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js deleted file mode 100644 index de0888a884..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = - - - - - - -recursivePatternCapture; /** - * Traverse a pattern/identifier node, calling 'callback' - * for each leaf identifier. - * @param {node} pattern - * @param {Function} callback - * @return {void} - */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case - callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) { - if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') { - callback(p.argument); - return; - } - recursivePatternCapture(p.value, callback); - }); - break; - - case 'ArrayPattern': - pattern.elements.forEach(function (element) { - if (element == null) {return;} - if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') { - callback(element.argument); - return; - } - recursivePatternCapture(element, callback); - }); - break; - - case 'AssignmentPattern': - callback(pattern.left); - break; - default:} - -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJwYXR0ZXJuIiwiY2FsbGJhY2siLCJ0eXBlIiwicHJvcGVydGllcyIsImZvckVhY2giLCJwIiwiYXJndW1lbnQiLCJ2YWx1ZSIsImVsZW1lbnRzIiwiZWxlbWVudCIsImxlZnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPd0JBLHVCLEVBUHhCOzs7Ozs7NEJBT2UsU0FBU0EsdUJBQVQsQ0FBaUNDLE9BQWpDLEVBQTBDQyxRQUExQyxFQUFvRCxDQUNqRSxRQUFRRCxRQUFRRSxJQUFoQixHQUNFLEtBQUssWUFBTCxFQUFtQjtBQUNqQkQsZUFBU0QsT0FBVCxFQUNBLE1BRUYsS0FBSyxlQUFMLENBQ0VBLFFBQVFHLFVBQVIsQ0FBbUJDLE9BQW5CLENBQTJCLFVBQUNDLENBQUQsRUFBTztBQUNoQyxZQUFJQSxFQUFFSCxJQUFGLEtBQVcsMEJBQVgsSUFBeUNHLEVBQUVILElBQUYsS0FBVyxhQUF4RCxFQUF1RTtBQUNyRUQsbUJBQVNJLEVBQUVDLFFBQVg7QUFDQTtBQUNEO0FBQ0RQLGdDQUF3Qk0sRUFBRUUsS0FBMUIsRUFBaUNOLFFBQWpDO0FBQ0QsT0FORDtBQU9BOztBQUVGLFNBQUssY0FBTDtBQUNFRCxjQUFRUSxRQUFSLENBQWlCSixPQUFqQixDQUF5QixVQUFDSyxPQUFELEVBQWE7QUFDcEMsWUFBSUEsV0FBVyxJQUFmLEVBQXFCLENBQUUsT0FBUztBQUNoQyxZQUFJQSxRQUFRUCxJQUFSLEtBQWlCLDBCQUFqQixJQUErQ08sUUFBUVAsSUFBUixLQUFpQixhQUFwRSxFQUFtRjtBQUNqRkQsbUJBQVNRLFFBQVFILFFBQWpCO0FBQ0E7QUFDRDtBQUNEUCxnQ0FBd0JVLE9BQXhCLEVBQWlDUixRQUFqQztBQUNELE9BUEQ7QUFRQTs7QUFFRixTQUFLLG1CQUFMO0FBQ0VBLGVBQVNELFFBQVFVLElBQWpCO0FBQ0E7QUFDRixZQTdCRjs7QUErQkQiLCJmaWxlIjoicGF0dGVybkNhcHR1cmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYXZlcnNlIGEgcGF0dGVybi9pZGVudGlmaWVyIG5vZGUsIGNhbGxpbmcgJ2NhbGxiYWNrJ1xuICogZm9yIGVhY2ggbGVhZiBpZGVudGlmaWVyLlxuICogQHBhcmFtICB7bm9kZX0gICBwYXR0ZXJuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js b/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js deleted file mode 100644 index c9906d3cf4..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.RemotePath = undefined;var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _resolve2 = require('eslint-module-utils/resolve');var _resolve3 = _interopRequireDefault(_resolve2);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 - -RemotePath = exports.RemotePath = function () { - function RemotePath(path, context) {_classCallCheck(this, RemotePath); - this.path = path; - this.context = context; - }_createClass(RemotePath, [{ key: 'resolve', value: function () {function resolve( - - value) { - return _resolve3['default'].relative(value, this.path, this.context.settings); - }return resolve;}() }]);return RemotePath;}(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcmVtb3RlUGF0aC5qcyJdLCJuYW1lcyI6WyJSZW1vdGVQYXRoIiwicGF0aCIsImNvbnRleHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJyZWxhdGl2ZSIsInNldHRpbmdzIl0sIm1hcHBpbmdzIjoiK29CQUFBLHVEOztBQUVhQSxVLFdBQUFBLFU7QUFDWCxzQkFBWUMsSUFBWixFQUFrQkMsT0FBbEIsRUFBMkI7QUFDekIsU0FBS0QsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0QsRzs7QUFFT0MsVyxFQUFPO0FBQ2IsZUFBT0MscUJBQVFDLFFBQVIsQ0FBaUJGLEtBQWpCLEVBQXdCLEtBQUtGLElBQTdCLEVBQW1DLEtBQUtDLE9BQUwsQ0FBYUksUUFBaEQsQ0FBUDtBQUNELE8iLCJmaWxlIjoicmVtb3RlUGF0aC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5cbmV4cG9ydCBjbGFzcyBSZW1vdGVQYXRoIHtcbiAgY29uc3RydWN0b3IocGF0aCwgY29udGV4dCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWUpIHtcbiAgICByZXR1cm4gcmVzb2x2ZS5yZWxhdGl2ZSh2YWx1ZSwgdGhpcy5wYXRoLCB0aGlzLmNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/specifier.js b/node_modules/eslint-plugin-import/lib/exportMap/specifier.js deleted file mode 100644 index 7670c0cde2..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/specifier.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = processSpecifier;function processSpecifier(specifier, astNode, exportMap, namespace) { - var nsource = astNode.source && astNode.source.value; - var exportMeta = {}; - var local = void 0; - - switch (specifier.type) { - case 'ExportDefaultSpecifier': - if (!nsource) {return;} - local = 'default'; - break; - case 'ExportNamespaceSpecifier': - exportMap.namespace.set(specifier.exported.name, Object.defineProperty(exportMeta, 'namespace', { - get: function () {function get() {return namespace.resolveImport(nsource);}return get;}() })); - - return; - case 'ExportAllDeclaration': - exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.source.value)); - return; - case 'ExportSpecifier': - if (!astNode.source) { - exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.local)); - return; - } - // else falls through - default: - local = specifier.local.name; - break;} - - - // todo: JSDoc - exportMap.reexports.set(specifier.exported.name, { local: local, getImport: function () {function getImport() {return namespace.resolveImport(nsource);}return getImport;}() }); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvc3BlY2lmaWVyLmpzIl0sIm5hbWVzIjpbInByb2Nlc3NTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJhc3ROb2RlIiwiZXhwb3J0TWFwIiwibmFtZXNwYWNlIiwibnNvdXJjZSIsInNvdXJjZSIsInZhbHVlIiwiZXhwb3J0TWV0YSIsImxvY2FsIiwidHlwZSIsInNldCIsImV4cG9ydGVkIiwibmFtZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwicmVzb2x2ZUltcG9ydCIsImFkZCIsInJlZXhwb3J0cyIsImdldEltcG9ydCJdLCJtYXBwaW5ncyI6ImdHQUF3QkEsZ0IsQ0FBVCxTQUFTQSxnQkFBVCxDQUEwQkMsU0FBMUIsRUFBcUNDLE9BQXJDLEVBQThDQyxTQUE5QyxFQUF5REMsU0FBekQsRUFBb0U7QUFDakYsTUFBTUMsVUFBVUgsUUFBUUksTUFBUixJQUFrQkosUUFBUUksTUFBUixDQUFlQyxLQUFqRDtBQUNBLE1BQU1DLGFBQWEsRUFBbkI7QUFDQSxNQUFJQyxjQUFKOztBQUVBLFVBQVFSLFVBQVVTLElBQWxCO0FBQ0UsU0FBSyx3QkFBTDtBQUNFLFVBQUksQ0FBQ0wsT0FBTCxFQUFjLENBQUUsT0FBUztBQUN6QkksY0FBUSxTQUFSO0FBQ0E7QUFDRixTQUFLLDBCQUFMO0FBQ0VOLGdCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaURDLE9BQU9DLGNBQVAsQ0FBc0JQLFVBQXRCLEVBQWtDLFdBQWxDLEVBQStDO0FBQzlGUSxXQUQ4Riw4QkFDeEYsQ0FBRSxPQUFPWixVQUFVYSxhQUFWLENBQXdCWixPQUF4QixDQUFQLENBQTBDLENBRDRDLGdCQUEvQyxDQUFqRDs7QUFHQTtBQUNGLFNBQUssc0JBQUw7QUFDRUYsZ0JBQVVDLFNBQVYsQ0FBb0JPLEdBQXBCLENBQXdCVixVQUFVVyxRQUFWLENBQW1CQyxJQUFuQixJQUEyQlosVUFBVVcsUUFBVixDQUFtQkwsS0FBdEUsRUFBNkVILFVBQVVjLEdBQVYsQ0FBY1YsVUFBZCxFQUEwQlAsVUFBVUssTUFBVixDQUFpQkMsS0FBM0MsQ0FBN0U7QUFDQTtBQUNGLFNBQUssaUJBQUw7QUFDRSxVQUFJLENBQUNMLFFBQVFJLE1BQWIsRUFBcUI7QUFDbkJILGtCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJaLFVBQVVXLFFBQVYsQ0FBbUJMLEtBQXRFLEVBQTZFSCxVQUFVYyxHQUFWLENBQWNWLFVBQWQsRUFBMEJQLFVBQVVRLEtBQXBDLENBQTdFO0FBQ0E7QUFDRDtBQUNIO0FBQ0E7QUFDRUEsY0FBUVIsVUFBVVEsS0FBVixDQUFnQkksSUFBeEI7QUFDQSxZQXJCSjs7O0FBd0JBO0FBQ0FWLFlBQVVnQixTQUFWLENBQW9CUixHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaUQsRUFBRUosWUFBRixFQUFTVyx3QkFBVyw2QkFBTWhCLFVBQVVhLGFBQVYsQ0FBd0JaLE9BQXhCLENBQU4sRUFBWCxvQkFBVCxFQUFqRDtBQUNEIiwiZmlsZSI6InNwZWNpZmllci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb2Nlc3NTcGVjaWZpZXIoc3BlY2lmaWVyLCBhc3ROb2RlLCBleHBvcnRNYXAsIG5hbWVzcGFjZSkge1xuICBjb25zdCBuc291cmNlID0gYXN0Tm9kZS5zb3VyY2UgJiYgYXN0Tm9kZS5zb3VyY2UudmFsdWU7XG4gIGNvbnN0IGV4cG9ydE1ldGEgPSB7fTtcbiAgbGV0IGxvY2FsO1xuXG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgIGlmICghbnNvdXJjZSkgeyByZXR1cm47IH1cbiAgICAgIGxvY2FsID0gJ2RlZmF1bHQnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzpcbiAgICAgIGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KHNwZWNpZmllci5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgZ2V0KCkgeyByZXR1cm4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSk7IH0sXG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOlxuICAgICAgZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlLCBuYW1lc3BhY2UuYWRkKGV4cG9ydE1ldGEsIHNwZWNpZmllci5zb3VyY2UudmFsdWUpKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdFeHBvcnRTcGVjaWZpZXInOlxuICAgICAgaWYgKCFhc3ROb2RlLnNvdXJjZSkge1xuICAgICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldChzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIG5hbWVzcGFjZS5hZGQoZXhwb3J0TWV0YSwgc3BlY2lmaWVyLmxvY2FsKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAvLyBlbHNlIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OlxuICAgICAgbG9jYWwgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gdG9kbzogSlNEb2NcbiAgZXhwb3J0TWFwLnJlZXhwb3J0cy5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsIHsgbG9jYWwsIGdldEltcG9ydDogKCkgPT4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSkgfSk7XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/typescript.js b/node_modules/eslint-plugin-import/lib/exportMap/typescript.js deleted file mode 100644 index 5aad0ce08b..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/typescript.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -isEsModuleInterop = isEsModuleInterop;var _path = require('path');var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _hash = require('eslint-module-utils/hash');var ts = void 0;var tsconfigCache = new Map();function readTsConfig(context) {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');} // eslint-disable-line import/no-extraneous-dependencies - 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(context) {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; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdHlwZXNjcmlwdC5qcyJdLCJuYW1lcyI6WyJpc0VzTW9kdWxlSW50ZXJvcCIsInRzIiwidHNjb25maWdDYWNoZSIsIk1hcCIsInJlYWRUc0NvbmZpZyIsImNvbnRleHQiLCJ0c2NvbmZpZ0luZm8iLCJjd2QiLCJwYXJzZXJPcHRpb25zIiwidHNjb25maWdSb290RGlyIiwicHJvY2VzcyIsImdldEVudiIsImtleSIsImVudiIsInRzQ29uZmlnUGF0aCIsInVuZGVmaW5lZCIsInJlcXVpcmUiLCJjb25maWdGaWxlIiwicmVhZENvbmZpZ0ZpbGUiLCJzeXMiLCJyZWFkRmlsZSIsInBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50IiwiY29uZmlnIiwiZSIsImNhY2hlS2V5IiwiZGlnZXN0IiwidHNDb25maWciLCJnZXQiLCJzZXQiLCJvcHRpb25zIiwiZXNNb2R1bGVJbnRlcm9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JnQkEsaUIsR0FBQUEsaUIsQ0EvQmhCLDRCQUNBLG9FQUNBLGdEQUVBLElBQUlDLFdBQUosQ0FDQSxJQUFNQyxnQkFBZ0IsSUFBSUMsR0FBSixFQUF0QixDQUVBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCLENBQzdCLElBQU1DLGVBQWUsb0NBQWUsRUFDbENDLEtBQUtGLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBQS9DLElBQWtFQyxRQUFRSCxHQUFSLEVBRHJDLEVBRWxDSSxxQkFBUSxnQkFBQ0MsR0FBRCxVQUFTRixRQUFRRyxHQUFSLENBQVlELEdBQVosQ0FBVCxFQUFSLGlCQUZrQyxFQUFmLENBQXJCLENBSUEsSUFBSSxDQUNGLElBQUlOLGFBQWFRLFlBQWIsS0FBOEJDLFNBQWxDLEVBQTZDLENBQzNDO0FBQ0EsVUFBSSxDQUFDZCxFQUFMLEVBQVMsQ0FBRUEsS0FBS2UsUUFBUSxZQUFSLENBQUwsQ0FBNkIsQ0FGRyxDQUVGO0FBRXpDLFVBQU1DLGFBQWFoQixHQUFHaUIsY0FBSCxDQUFrQlosYUFBYVEsWUFBL0IsRUFBNkNiLEdBQUdrQixHQUFILENBQU9DLFFBQXBELENBQW5CLENBQ0EsT0FBT25CLEdBQUdvQiwwQkFBSCxDQUNMSixXQUFXSyxNQUROLEVBRUxyQixHQUFHa0IsR0FGRSxFQUdMLG1CQUFRYixhQUFhUSxZQUFyQixDQUhLLENBQVAsQ0FLRCxDQUNGLENBWkQsQ0FZRSxPQUFPUyxDQUFQLEVBQVUsQ0FDVjtBQUNELEdBRUQsT0FBTyxJQUFQLENBQ0QsQ0FFTSxTQUFTdkIsaUJBQVQsQ0FBMkJLLE9BQTNCLEVBQW9DLENBQ3pDLElBQU1tQixXQUFXLHNCQUFXLEVBQzFCZixpQkFBaUJKLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBRHRDLEVBQVgsRUFFZGdCLE1BRmMsQ0FFUCxLQUZPLENBQWpCO0FBR0EsTUFBSUMsV0FBV3hCLGNBQWN5QixHQUFkLENBQWtCSCxRQUFsQixDQUFmO0FBQ0EsTUFBSSxPQUFPRSxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ25DQSxlQUFXdEIsYUFBYUMsT0FBYixDQUFYO0FBQ0FILGtCQUFjMEIsR0FBZCxDQUFrQkosUUFBbEIsRUFBNEJFLFFBQTVCO0FBQ0Q7O0FBRUQsU0FBT0EsWUFBWUEsU0FBU0csT0FBckIsR0FBK0JILFNBQVNHLE9BQVQsQ0FBaUJDLGVBQWhELEdBQWtFLEtBQXpFO0FBQ0QiLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5pbXBvcnQgeyBoYXNoT2JqZWN0IH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9oYXNoJztcblxubGV0IHRzO1xuY29uc3QgdHNjb25maWdDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gcmVhZFRzQ29uZmlnKGNvbnRleHQpIHtcbiAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgIGN3ZDogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHByb2Nlc3MuZW52W2tleV0sXG4gIH0pO1xuICB0cnkge1xuICAgIGlmICh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgIGlmICghdHMpIHsgdHMgPSByZXF1aXJlKCd0eXBlc2NyaXB0Jyk7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblxuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHRzY29uZmlnSW5mby50c0NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG4gICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgICAgICB0cy5zeXMsXG4gICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIENhdGNoIGFueSBlcnJvcnNcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCkge1xuICBjb25zdCBjYWNoZUtleSA9IGhhc2hPYmplY3Qoe1xuICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCB0c0NvbmZpZyA9IHRzY29uZmlnQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0c0NvbmZpZyA9IHJlYWRUc0NvbmZpZyhjb250ZXh0KTtcbiAgICB0c2NvbmZpZ0NhY2hlLnNldChjYWNoZUtleSwgdHNDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHRzQ29uZmlnICYmIHRzQ29uZmlnLm9wdGlvbnMgPyB0c0NvbmZpZy5vcHRpb25zLmVzTW9kdWxlSW50ZXJvcCA6IGZhbHNlO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/visitor.js b/node_modules/eslint-plugin-import/lib/exportMap/visitor.js deleted file mode 100644 index 38f51889f1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/visitor.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); -var _eslint = require('eslint'); -var _doc = require('./doc'); -var _namespace = require('./namespace');var _namespace2 = _interopRequireDefault(_namespace); -var _specifier = require('./specifier');var _specifier2 = _interopRequireDefault(_specifier); -var _captureDependency = require('./captureDependency'); -var _patternCapture = require('./patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); -var _remotePath = require('./remotePath');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");}} - -/** - * sometimes legacy support isn't _that_ hard... right? - */ -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 }); - } -}var - -ImportExportVisitorBuilder = function () { - function ImportExportVisitorBuilder( - path, - context, - exportMap, - ExportMapBuilder, - content, - ast, - isEsModuleInteropTrue, - thunkFor) - {var _this = this;_classCallCheck(this, ImportExportVisitorBuilder); - this.context = context; - this.namespace = new _namespace2['default'](path, context, ExportMapBuilder); - this.remotePathResolver = new _remotePath.RemotePath(path, context); - this.source = makeSourceCode(content, ast); - this.exportMap = exportMap; - this.ast = ast; - this.isEsModuleInteropTrue = isEsModuleInteropTrue; - this.thunkFor = thunkFor; - var docstyle = this.context.settings && this.context.settings['import/docstyle'] || ['jsdoc']; - this.docStyleParsers = {}; - docstyle.forEach(function (style) { - _this.docStyleParsers[style] = _doc.availableDocStyleParsers[style]; - }); - }_createClass(ImportExportVisitorBuilder, [{ key: 'build', value: function () {function build( - - astNode) {var _this3 = this; - return Object.assign({ - ExportDefaultDeclaration: function () {function ExportDefaultDeclaration() { - var exportMeta = (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode); - if (astNode.declaration.type === 'Identifier') { - this.namespace.add(exportMeta, astNode.declaration); - } - this.exportMap.namespace.set('default', exportMeta); - }return ExportDefaultDeclaration;}(), - ExportAllDeclaration: function () {function ExportAllDeclaration() { - var getter = (0, _captureDependency.captureDependency)(astNode, astNode.exportKind === 'type', this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - if (getter) {this.exportMap.dependencies.add(getter);} - if (astNode.exported) { - (0, _specifier2['default'])(astNode, astNode.exported, this.exportMap, this.namespace); - } - }return ExportAllDeclaration;}(), - /** capture namespaces in case of later export */ - ImportDeclaration: function () {function ImportDeclaration() { - (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - var ns = astNode.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';}); - if (ns) { - this.namespace.rawSet(ns.local.name, astNode.source.value); - } - }return ImportDeclaration;}(), - ExportNamedDeclaration: function () {function ExportNamedDeclaration() {var _this2 = this; - (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - // capture declaration - if (astNode.declaration != null) { - switch (astNode.declaration.type) { - case 'FunctionDeclaration': - case 'ClassDeclaration': - case 'TypeAlias': // flowtype with babel-eslint parser - case 'InterfaceDeclaration': - case 'DeclareFunction': - case 'TSDeclareFunction': - case 'TSEnumDeclaration': - case 'TSTypeAliasDeclaration': - case 'TSInterfaceDeclaration': - case 'TSAbstractClassDeclaration': - case 'TSModuleDeclaration': - this.exportMap.namespace.set(astNode.declaration.id.name, (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); - break; - case 'VariableDeclaration': - astNode.declaration.declarations.forEach(function (d) { - (0, _patternCapture2['default'])( - d.id, - function (id) {return _this2.exportMap.namespace.set(id.name, (0, _doc.captureDoc)(_this2.source, _this2.docStyleParsers, d, astNode));}); - - }); - break; - default:} - - } - astNode.specifiers.forEach(function (s) {return (0, _specifier2['default'])(s, astNode, _this2.exportMap, _this2.namespace);}); - }return ExportNamedDeclaration;}(), - TSExportAssignment: function () {function TSExportAssignment() {return _this3.typeScriptExport(astNode);}return TSExportAssignment;}() }, - this.isEsModuleInteropTrue && { TSNamespaceExportDeclaration: function () {function TSNamespaceExportDeclaration() {return _this3.typeScriptExport(astNode);}return TSNamespaceExportDeclaration;}() }); - - }return build;}() - - // This doesn't declare anything, but changes what's being exported. - }, { key: 'typeScriptExport', value: function () {function typeScriptExport(astNode) {var _this4 = this; - var exportedName = astNode.type === 'TSNamespaceExportDeclaration' ? - (astNode.id || astNode.name).name : - astNode.expression && astNode.expression.name || astNode.expression.id && astNode.expression.id.name || null; - var declTypes = [ - 'VariableDeclaration', - 'ClassDeclaration', - 'TSDeclareFunction', - 'TSEnumDeclaration', - 'TSTypeAliasDeclaration', - 'TSInterfaceDeclaration', - 'TSAbstractClassDeclaration', - 'TSModuleDeclaration']; - - var exportedDecls = this.ast.body.filter(function (_ref) {var type = _ref.type,id = _ref.id,declarations = _ref.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && ( - id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));}); - - if (exportedDecls.length === 0) { - // Export is not referencing any local declaration, must be re-exporting - this.exportMap.namespace.set('default', (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); - return; - } - if ( - this.isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && !this.exportMap.namespace.has('default') // and default isn't added already - ) { - this.exportMap.namespace.set('default', {}); // add default export - } - exportedDecls.forEach(function (decl) { - if (decl.type === 'TSModuleDeclaration') { - if (decl.body && decl.body.type === 'TSModuleDeclaration') { - _this4.exportMap.namespace.set(decl.body.id.name, (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl.body)); - } else if (decl.body && decl.body.body) { - decl.body.body.forEach(function (moduleBlockNode) { - // Export-assignment exports all members in the namespace, - // explicitly exported or not. - var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? - moduleBlockNode.declaration : - moduleBlockNode; - - if (!namespaceDecl) { - // TypeScript can check this for us; we needn't - } else if (namespaceDecl.type === 'VariableDeclaration') { - namespaceDecl.declarations.forEach(function (d) {return (0, _patternCapture2['default'])(d.id, function (id) {return _this4.exportMap.namespace.set( - id.name, - (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl, namespaceDecl, moduleBlockNode));});}); - - - } else { - _this4.exportMap.namespace.set( - namespaceDecl.id.name, - (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, moduleBlockNode)); - } - }); - } - } else { - // Export as default - _this4.exportMap.namespace.set('default', (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl)); - } - }); - }return typeScriptExport;}() }]);return ImportExportVisitorBuilder;}();exports['default'] = ImportExportVisitorBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdmlzaXRvci5qcyJdLCJuYW1lcyI6WyJtYWtlU291cmNlQ29kZSIsInRleHQiLCJhc3QiLCJTb3VyY2VDb2RlIiwibGVuZ3RoIiwiSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIiLCJwYXRoIiwiY29udGV4dCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJjb250ZW50IiwiaXNFc01vZHVsZUludGVyb3BUcnVlIiwidGh1bmtGb3IiLCJuYW1lc3BhY2UiLCJOYW1lc3BhY2UiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJSZW1vdGVQYXRoIiwic291cmNlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsImRvY1N0eWxlUGFyc2VycyIsImZvckVhY2giLCJzdHlsZSIsImF2YWlsYWJsZURvY1N0eWxlUGFyc2VycyIsImFzdE5vZGUiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJleHBvcnRNZXRhIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiYWRkIiwic2V0IiwiRXhwb3J0QWxsRGVjbGFyYXRpb24iLCJnZXR0ZXIiLCJleHBvcnRLaW5kIiwiZGVwZW5kZW5jaWVzIiwiZXhwb3J0ZWQiLCJJbXBvcnREZWNsYXJhdGlvbiIsIm5zIiwic3BlY2lmaWVycyIsImZpbmQiLCJzIiwicmF3U2V0IiwibG9jYWwiLCJuYW1lIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaWQiLCJkZWNsYXJhdGlvbnMiLCJkIiwiVFNFeHBvcnRBc3NpZ25tZW50IiwidHlwZVNjcmlwdEV4cG9ydCIsIlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iLCJleHBvcnRlZE5hbWUiLCJleHByZXNzaW9uIiwiZGVjbFR5cGVzIiwiZXhwb3J0ZWREZWNscyIsImJvZHkiLCJmaWx0ZXIiLCJoYXMiLCJkZWNsIiwibW9kdWxlQmxvY2tOb2RlIiwibmFtZXNwYWNlRGVjbCJdLCJtYXBwaW5ncyI6ImduQkFBQSwrQztBQUNBO0FBQ0E7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QTdCLEVBQXdDLHFCQUFXLE9BQUtiLE1BQWhCLEVBQXdCLE9BQUtHLGVBQTdCLEVBQThDdUMsSUFBOUMsQ0FBeEM7QUFDRDtBQUNGLFNBL0JEO0FBZ0NELE8sMkZBbkprQnRELDBCIiwiZmlsZSI6InZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IHsgU291cmNlQ29kZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgeyBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMsIGNhcHR1cmVEb2MgfSBmcm9tICcuL2RvYyc7XG5pbXBvcnQgTmFtZXNwYWNlIGZyb20gJy4vbmFtZXNwYWNlJztcbmltcG9ydCBwcm9jZXNzU3BlY2lmaWVyIGZyb20gJy4vc3BlY2lmaWVyJztcbmltcG9ydCB7IGNhcHR1cmVEZXBlbmRlbmN5LCBjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIH0gZnJvbSAnLi9jYXB0dXJlRGVwZW5kZW5jeSc7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi9wYXR0ZXJuQ2FwdHVyZSc7XG5pbXBvcnQgeyBSZW1vdGVQYXRoIH0gZnJvbSAnLi9yZW1vdGVQYXRoJztcblxuLyoqXG4gKiBzb21ldGltZXMgbGVnYWN5IHN1cHBvcnQgaXNuJ3QgX3RoYXRfIGhhcmQuLi4gcmlnaHQ/XG4gKi9cbmZ1bmN0aW9uIG1ha2VTb3VyY2VDb2RlKHRleHQsIGFzdCkge1xuICBpZiAoU291cmNlQ29kZS5sZW5ndGggPiAxKSB7XG4gICAgLy8gRVNMaW50IDNcbiAgICByZXR1cm4gbmV3IFNvdXJjZUNvZGUodGV4dCwgYXN0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBFU0xpbnQgNCwgNVxuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh7IHRleHQsIGFzdCB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdGgsXG4gICAgY29udGV4dCxcbiAgICBleHBvcnRNYXAsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICBjb250ZW50LFxuICAgIGFzdCxcbiAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgdGh1bmtGb3IsXG4gICkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTmFtZXNwYWNlKHBhdGgsIGNvbnRleHQsIEV4cG9ydE1hcEJ1aWxkZXIpO1xuICAgIHRoaXMucmVtb3RlUGF0aFJlc29sdmVyID0gbmV3IFJlbW90ZVBhdGgocGF0aCwgY29udGV4dCk7XG4gICAgdGhpcy5zb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuICAgIHRoaXMuZXhwb3J0TWFwID0gZXhwb3J0TWFwO1xuICAgIHRoaXMuYXN0ID0gYXN0O1xuICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3BUcnVlO1xuICAgIHRoaXMudGh1bmtGb3IgPSB0aHVua0ZvcjtcbiAgICBjb25zdCBkb2NzdHlsZSA9IHRoaXMuY29udGV4dC5zZXR0aW5ncyAmJiB0aGlzLmNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgICB0aGlzLmRvY1N0eWxlUGFyc2VycyA9IHt9O1xuICAgIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICB0aGlzLmRvY1N0eWxlUGFyc2Vyc1tzdHlsZV0gPSBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnNbc3R5bGVdO1xuICAgIH0pO1xuICB9XG5cbiAgYnVpbGQoYXN0Tm9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHRoaXMuc291cmNlLCB0aGlzLmRvY1N0eWxlUGFyc2VycywgYXN0Tm9kZSk7XG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHRoaXMubmFtZXNwYWNlLmFkZChleHBvcnRNZXRhLCBhc3ROb2RlLmRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgZXhwb3J0TWV0YSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNhcHR1cmVEZXBlbmRlbmN5KGFzdE5vZGUsIGFzdE5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnLCB0aGlzLnJlbW90ZVBhdGhSZXNvbHZlciwgdGhpcy5leHBvcnRNYXAsIHRoaXMuY29udGV4dCwgdGhpcy50aHVua0Zvcik7XG4gICAgICAgIGlmIChnZXR0ZXIpIHsgdGhpcy5leHBvcnRNYXAuZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICAgIGlmIChhc3ROb2RlLmV4cG9ydGVkKSB7XG4gICAgICAgICAgcHJvY2Vzc1NwZWNpZmllcihhc3ROb2RlLCBhc3ROb2RlLmV4cG9ydGVkLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydCAqL1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICBjb25zdCBucyA9IGFzdE5vZGUuc3BlY2lmaWVycy5maW5kKChzKSA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgdGhpcy5uYW1lc3BhY2UucmF3U2V0KG5zLmxvY2FsLm5hbWUsIGFzdE5vZGUuc291cmNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFzdE5vZGUuZGVjbGFyYXRpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1R5cGVBbGlhcyc6IC8vIGZsb3d0eXBlIHdpdGggYmFiZWwtZXNsaW50IHBhcnNlclxuICAgICAgICAgICAgY2FzZSAnSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRW51bURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU0Fic3RyYWN0Q2xhc3NEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChhc3ROb2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgIGFzdE5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICAgIGQuaWQsXG4gICAgICAgICAgICAgICAgICAoaWQpID0+IHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGQsIGFzdE5vZGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBhc3ROb2RlLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpKTtcbiAgICAgIH0sXG4gICAgICBUU0V4cG9ydEFzc2lnbm1lbnQ6ICgpID0+IHRoaXMudHlwZVNjcmlwdEV4cG9ydChhc3ROb2RlKSxcbiAgICAgIC4uLnRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlICYmIHsgVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjogKCkgPT4gdGhpcy50eXBlU2NyaXB0RXhwb3J0KGFzdE5vZGUpIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoaXMgZG9lc24ndCBkZWNsYXJlIGFueXRoaW5nLCBidXQgY2hhbmdlcyB3aGF0J3MgYmVpbmcgZXhwb3J0ZWQuXG4gIHR5cGVTY3JpcHRFeHBvcnQoYXN0Tm9kZSkge1xuICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IGFzdE5vZGUudHlwZSA9PT0gJ1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24nXG4gICAgICA/IChhc3ROb2RlLmlkIHx8IGFzdE5vZGUubmFtZSkubmFtZVxuICAgICAgOiBhc3ROb2RlLmV4cHJlc3Npb24gJiYgYXN0Tm9kZS5leHByZXNzaW9uLm5hbWUgfHwgYXN0Tm9kZS5leHByZXNzaW9uLmlkICYmIGFzdE5vZGUuZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgY29uc3QgZGVjbFR5cGVzID0gW1xuICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTRGVjbGFyZUZ1bmN0aW9uJyxcbiAgICAgICdUU0VudW1EZWNsYXJhdGlvbicsXG4gICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgIF07XG4gICAgY29uc3QgZXhwb3J0ZWREZWNscyA9IHRoaXMuYXN0LmJvZHkuZmlsdGVyKCh7IHR5cGUsIGlkLCBkZWNsYXJhdGlvbnMgfSkgPT4gaW5jbHVkZXMoZGVjbFR5cGVzLCB0eXBlKSAmJiAoXG4gICAgICBpZCAmJiBpZC5uYW1lID09PSBleHBvcnRlZE5hbWUgfHwgZGVjbGFyYXRpb25zICYmIGRlY2xhcmF0aW9ucy5maW5kKChkKSA9PiBkLmlkLm5hbWUgPT09IGV4cG9ydGVkTmFtZSlcbiAgICApKTtcbiAgICBpZiAoZXhwb3J0ZWREZWNscy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEV4cG9ydCBpcyBub3QgcmVmZXJlbmNpbmcgYW55IGxvY2FsIGRlY2xhcmF0aW9uLCBtdXN0IGJlIHJlLWV4cG9ydGluZ1xuICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlIC8vIGVzTW9kdWxlSW50ZXJvcCBpcyBvbiBpbiB0c2NvbmZpZ1xuICAgICAgJiYgIXRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0Jywge30pOyAvLyBhZGQgZGVmYXVsdCBleHBvcnRcbiAgICB9XG4gICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICBpZiAoZGVjbC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbicpIHtcbiAgICAgICAgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkudHlwZSA9PT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChkZWNsLmJvZHkuaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGRlY2wuYm9keSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgIGRlY2wuYm9keS5ib2R5LmZvckVhY2goKG1vZHVsZUJsb2NrTm9kZSkgPT4ge1xuICAgICAgICAgICAgLy8gRXhwb3J0LWFzc2lnbm1lbnQgZXhwb3J0cyBhbGwgbWVtYmVycyBpbiB0aGUgbmFtZXNwYWNlLFxuICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VEZWNsID0gbW9kdWxlQmxvY2tOb2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJ1xuICAgICAgICAgICAgICA/IG1vZHVsZUJsb2NrTm9kZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VEZWNsKSB7XG4gICAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgY2FuIGNoZWNrIHRoaXMgZm9yIHVzOyB3ZSBuZWVkbid0XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGQuaWQsIChpZCkgPT4gdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsLCBuYW1lc3BhY2VEZWNsLCBtb2R1bGVCbG9ja05vZGUpLFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5pZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBtb2R1bGVCbG9ja05vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/index.js b/node_modules/eslint-plugin-import/lib/index.js index 9f53379f91..daf8d74398 100644 --- a/node_modules/eslint-plugin-import/lib/index.js +++ b/node_modules/eslint-plugin-import/lib/index.js @@ -1,6 +1,4 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.flatConfigs = exports.configs = exports.rules = undefined;var _package = require('../package.json'); - -var rules = exports.rules = { +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var rules = exports.rules = { 'no-unresolved': require('./rules/no-unresolved'), named: require('./rules/named'), 'default': require('./rules/default'), @@ -70,33 +68,4 @@ var configs = exports.configs = { 'react-native': require('../config/react-native'), electron: require('../config/electron'), typescript: require('../config/typescript') }; - - -// Base Plugin Object -var importPlugin = { - meta: { name: _package.name, version: _package.version }, - rules: rules }; - - -// Create flat configs (Only ones that declare plugins and parser options need to be different from the legacy config) -var createFlatConfig = function createFlatConfig(baseConfig, configName) {return Object.assign({}, - baseConfig, { - name: 'import/' + String(configName), - plugins: { 'import': importPlugin } });}; - - -var flatConfigs = exports.flatConfigs = { - recommended: createFlatConfig( - require('../config/flat/recommended'), - 'recommended'), - - - errors: createFlatConfig(require('../config/flat/errors'), 'errors'), - warnings: createFlatConfig(require('../config/flat/warnings'), 'warnings'), - - // useful stuff for folks using various environments - react: require('../config/flat/react'), - 'react-native': configs['react-native'], - electron: configs.electron, - typescript: configs.typescript }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0IiwiaW1wb3J0UGx1Z2luIiwibWV0YSIsIm5hbWUiLCJ2ZXJzaW9uIiwiY3JlYXRlRmxhdENvbmZpZyIsImJhc2VDb25maWciLCJjb25maWdOYW1lIiwicGx1Z2lucyIsImZsYXRDb25maWdzIl0sIm1hcHBpbmdzIjoiNklBQUE7O0FBRU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQjs7O0FBZ0JQO0FBQ0EsSUFBTWMsZUFBZTtBQUNuQkMsUUFBTSxFQUFFQyxtQkFBRixFQUFRQyx5QkFBUixFQURhO0FBRW5CbEIsY0FGbUIsRUFBckI7OztBQUtBO0FBQ0EsSUFBTW1CLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQUNDLFVBQUQsRUFBYUMsVUFBYjtBQUNwQkQsWUFEb0I7QUFFdkJILDZCQUFnQkksVUFBaEIsQ0FGdUI7QUFHdkJDLGFBQVMsRUFBRSxVQUFRUCxZQUFWLEVBSGMsS0FBekI7OztBQU1PLElBQU1RLG9DQUFjO0FBQ3pCZCxlQUFhVTtBQUNYbEIsVUFBUSw0QkFBUixDQURXO0FBRVgsZUFGVyxDQURZOzs7QUFNekJTLFVBQVFTLGlCQUFpQmxCLFFBQVEsdUJBQVIsQ0FBakIsRUFBbUQsUUFBbkQsQ0FOaUI7QUFPekJVLFlBQVVRLGlCQUFpQmxCLFFBQVEseUJBQVIsQ0FBakIsRUFBcUQsVUFBckQsQ0FQZTs7QUFTekI7QUFDQVcsU0FBT1gsUUFBUSxzQkFBUixDQVZrQjtBQVd6QixrQkFBZ0JPLFFBQVEsY0FBUixDQVhTO0FBWXpCSyxZQUFVTCxRQUFRSyxRQVpPO0FBYXpCQyxjQUFZTixRQUFRTSxVQWJLLEVBQXBCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmFtZSwgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcblxuLy8gQmFzZSBQbHVnaW4gT2JqZWN0XG5jb25zdCBpbXBvcnRQbHVnaW4gPSB7XG4gIG1ldGE6IHsgbmFtZSwgdmVyc2lvbiB9LFxuICBydWxlcyxcbn07XG5cbi8vIENyZWF0ZSBmbGF0IGNvbmZpZ3MgKE9ubHkgb25lcyB0aGF0IGRlY2xhcmUgcGx1Z2lucyBhbmQgcGFyc2VyIG9wdGlvbnMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVnYWN5IGNvbmZpZylcbmNvbnN0IGNyZWF0ZUZsYXRDb25maWcgPSAoYmFzZUNvbmZpZywgY29uZmlnTmFtZSkgPT4gKHtcbiAgLi4uYmFzZUNvbmZpZyxcbiAgbmFtZTogYGltcG9ydC8ke2NvbmZpZ05hbWV9YCxcbiAgcGx1Z2luczogeyBpbXBvcnQ6IGltcG9ydFBsdWdpbiB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBmbGF0Q29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IGNyZWF0ZUZsYXRDb25maWcoXG4gICAgcmVxdWlyZSgnLi4vY29uZmlnL2ZsYXQvcmVjb21tZW5kZWQnKSxcbiAgICAncmVjb21tZW5kZWQnLFxuICApLFxuXG4gIGVycm9yczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC9lcnJvcnMnKSwgJ2Vycm9ycycpLFxuICB3YXJuaW5nczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC93YXJuaW5ncycpLCAnd2FybmluZ3MnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvZmxhdC9yZWFjdCcpLFxuICAncmVhY3QtbmF0aXZlJzogY29uZmlnc1sncmVhY3QtbmF0aXZlJ10sXG4gIGVsZWN0cm9uOiBjb25maWdzLmVsZWN0cm9uLFxuICB0eXBlc2NyaXB0OiBjb25maWdzLnR5cGVzY3JpcHQsXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0Il0sIm1hcHBpbmdzIjoiMkVBQU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcbiJdfQ== \ 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 fbb4f6cbcb..f3e7d58d28 100644 --- a/node_modules/eslint-plugin-import/lib/rules/default.js +++ b/node_modules/eslint-plugin-import/lib/rules/default.js @@ -1,4 +1,4 @@ -'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} module.exports = { @@ -19,7 +19,7 @@ module.exports = { if (!defaultSpecifier) {return;} - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -37,4 +37,4 @@ module.exports = { ExportNamedDeclaration: checkDefault.bind(null, 'ExportDefaultSpecifier') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSwrQztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMscUJBQWlCQyxHQUFqQixDQUFxQlAsS0FBS1EsTUFBTCxDQUFZQyxLQUFqQyxFQUF3Q1osT0FBeEMsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBhIGRlZmF1bHQgZXhwb3J0IGlzIHByZXNlbnQsIGdpdmVuIGEgZGVmYXVsdCBpbXBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGZ1bmN0aW9uIGNoZWNrRGVmYXVsdChzcGVjaWZpZXJUeXBlLCBub2RlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzLmZpbmQoXG4gICAgICAgIChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSBzcGVjaWZpZXJUeXBlLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFkZWZhdWx0U3BlY2lmaWVyKSB7IHJldHVybjsgfVxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGltcG9ydHMuZ2V0KCdkZWZhdWx0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBtZXNzYWdlOiBgTm8gZGVmYXVsdCBleHBvcnQgZm91bmQgaW4gaW1wb3J0ZWQgbW9kdWxlIFwiJHtub2RlLnNvdXJjZS52YWx1ZX1cIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyksXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSx5QztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMsdUJBQVFDLEdBQVIsQ0FBWVAsS0FBS1EsTUFBTCxDQUFZQyxLQUF4QixFQUErQlosT0FBL0IsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgYSBkZWZhdWx0IGV4cG9ydCBpcyBwcmVzZW50LCBnaXZlbiBhIGRlZmF1bHQgaW1wb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ2RlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQoc3BlY2lmaWVyVHlwZSwgbm9kZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gc3BlY2lmaWVyVHlwZSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghZGVmYXVsdFNwZWNpZmllcikgeyByZXR1cm47IH1cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRzLmdldCgnZGVmYXVsdCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IGRlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgbWVzc2FnZTogYE5vIGRlZmF1bHQgZXhwb3J0IGZvdW5kIGluIGltcG9ydGVkIG1vZHVsZSBcIiR7bm9kZS5zb3VyY2UudmFsdWV9XCIuYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInKSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ 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 b05d61d648..926dcf7e26 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 @@ -19,28 +19,22 @@ module.exports = { type: 'string' } }, - allowEmpty: { - type: 'boolean' }, - webpackChunknameFormat: { - type: 'string' } } }], + type: 'string' } } }] }, - hasSuggestions: true }, create: function () {function create(context) { var config = context.options[0];var _ref = - config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions,_ref$allowEmpty = _ref.allowEmpty,allowEmpty = _ref$allowEmpty === undefined ? false : _ref$allowEmpty;var _ref2 = + config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions;var _ref2 = config || {},_ref2$webpackChunknam = _ref2.webpackChunknameFormat,webpackChunknameFormat = _ref2$webpackChunknam === undefined ? '([0-9a-zA-Z-_/.]|\\[(request|index)\\])+' : _ref2$webpackChunknam; var paddedCommentRegex = /^ (\S[\s\S]+\S) $/; var commentStyleRegex = /^( ((webpackChunkName: .+)|((webpackPrefetch|webpackPreload): (true|false|-?[0-9]+))|(webpackIgnore: (true|false))|((webpackInclude|webpackExclude): \/.*\/)|(webpackMode: ["'](lazy|lazy-once|eager|weak)["'])|(webpackExports: (['"]\w+['"]|\[(['"]\w+['"], *)+(['"]\w+['"]*)\]))),?)+ $/; - var chunkSubstrFormat = 'webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; + var chunkSubstrFormat = ' webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; var chunkSubstrRegex = new RegExp(chunkSubstrFormat); - var eagerModeFormat = 'webpackMode: ["\']eager["\'],? '; - var eagerModeRegex = new RegExp(eagerModeFormat); function run(node, arg) { var sourceCode = context.getSourceCode(); @@ -48,7 +42,7 @@ module.exports = { sourceCode.getCommentsBefore(arg) // This method is available in ESLint >= 4. : sourceCode.getComments(arg).leading; // This method is deprecated in ESLint 7. - if ((!leadingComments || leadingComments.length === 0) && !allowEmpty) { + if (!leadingComments || leadingComments.length === 0) { context.report({ node: node, message: 'dynamic imports require a leading comment with the webpack chunkname' }); @@ -56,8 +50,7 @@ module.exports = { return; } - var isChunknamePresent = false; - var isEagerModePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + var isChunknamePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = leadingComments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var comment = _step.value; if (comment.type !== 'Block') { @@ -96,55 +89,12 @@ module.exports = { return; } - if (eagerModeRegex.test(comment.value)) { - isEagerModePresent = true; - } - if (chunkSubstrRegex.test(comment.value)) { isChunknamePresent = true; } }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} - if (isChunknamePresent && isEagerModePresent) { - context.report({ - node: node, - message: 'dynamic imports using eager mode do not need a webpackChunkName', - suggest: [ - { - desc: 'Remove webpackChunkName', - fix: function () {function fix(fixer) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { - for (var _iterator2 = leadingComments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var _comment = _step2.value; - if (chunkSubstrRegex.test(_comment.value)) { - var replacement = _comment.value.replace(chunkSubstrRegex, '').trim().replace(/,$/, ''); - if (replacement === '') { - return fixer.remove(_comment); - } else { - return fixer.replaceText(_comment, '/* ' + String(replacement) + ' */'); - } - } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} - }return fix;}() }, - - { - desc: 'Remove webpackMode', - fix: function () {function fix(fixer) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = leadingComments[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _comment2 = _step3.value; - if (eagerModeRegex.test(_comment2.value)) { - var replacement = _comment2.value.replace(eagerModeRegex, '').trim().replace(/,$/, ''); - if (replacement === '') { - return fixer.remove(_comment2); - } else { - return fixer.replaceText(_comment2, '/* ' + String(replacement) + ' */'); - } - } - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} - }return fix;}() }] }); - - - - } - - if (!isChunknamePresent && !allowEmpty && !isEagerModePresent) { + if (!isChunknamePresent) { context.report({ node: node, message: 'dynamic imports require a leading comment in the form /*' + @@ -167,4 +117,4 @@ module.exports = { }return CallExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsImFsbG93RW1wdHkiLCJ3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0IiwiaGFzU3VnZ2VzdGlvbnMiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwiZWFnZXJNb2RlRm9ybWF0IiwiZWFnZXJNb2RlUmVnZXgiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImdldFNvdXJjZUNvZGUiLCJsZWFkaW5nQ29tbWVudHMiLCJnZXRDb21tZW50c0JlZm9yZSIsImdldENvbW1lbnRzIiwibGVhZGluZyIsImxlbmd0aCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0NodW5rbmFtZVByZXNlbnQiLCJpc0VhZ2VyTW9kZVByZXNlbnQiLCJjb21tZW50IiwidGVzdCIsInZhbHVlIiwidm0iLCJydW5Jbk5ld0NvbnRleHQiLCJlcnJvciIsInN1Z2dlc3QiLCJkZXNjIiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlbWVudCIsInJlcGxhY2UiLCJ0cmltIiwicmVtb3ZlIiwicmVwbGFjZVRleHQiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FB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Y0FBdEIsRUFBc0MsRUFBdEMsRUFBMEMyQixJQUExQyxHQUFpREQsT0FBakQsQ0FBeUQsSUFBekQsRUFBK0QsRUFBL0QsQ0FBcEI7QUFDQSw0QkFBSUQsZ0JBQWdCLEVBQXBCLEVBQXdCO0FBQ3RCLGlDQUFPRCxNQUFNSSxNQUFOLENBQWFiLFNBQWIsQ0FBUDtBQUNELHlCQUZELE1BRU87QUFDTCxpQ0FBT1MsTUFBTUssV0FBTixDQUFrQmQsU0FBbEIsaUJBQWlDVSxXQUFqQyxVQUFQO0FBQ0Q7QUFDRjtBQUNGLHFCQVZRO0FBV1YsaUJBYkgsZ0JBaEJPLENBSEksRUFBZjs7OztBQW9DRDs7QUFFRCxZQUFJLENBQUNaLGtCQUFELElBQXVCLENBQUMxQixVQUF4QixJQUFzQyxDQUFDMkIsa0JBQTNDLEVBQStEO0FBQzdEdkIsa0JBQVFvQixNQUFSLENBQWU7QUFDYlQsc0JBRGE7QUFFYlU7QUFDNkRoQiw2QkFEN0QsT0FGYSxFQUFmOztBQUtEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMa0Msd0JBREsseUNBQ1k1QixJQURaLEVBQ2tCO0FBQ3JCRCxnQkFBSUMsSUFBSixFQUFVQSxLQUFLNkIsTUFBZjtBQUNELFdBSEk7O0FBS0xDLHNCQUxLLHVDQUtVOUIsSUFMVixFQUtnQjtBQUNuQixnQkFBSUEsS0FBSytCLE1BQUwsQ0FBWXhELElBQVosS0FBcUIsUUFBckIsSUFBaUNPLGdCQUFnQmtELE9BQWhCLENBQXdCaEMsS0FBSytCLE1BQUwsQ0FBWUUsSUFBcEMsSUFBNEMsQ0FBakYsRUFBb0Y7QUFDbEY7QUFDRDs7QUFFRGxDLGdCQUFJQyxJQUFKLEVBQVVBLEtBQUtrQyxTQUFMLENBQWUsQ0FBZixDQUFWO0FBQ0QsV0FYSSwyQkFBUDs7QUFhRCxLQXJLYyxtQkFBakIiLCJmaWxlIjoiZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZtIGZyb20gJ3ZtJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSBhIGxlYWRpbmcgY29tbWVudCB3aXRoIHRoZSB3ZWJwYWNrQ2h1bmtOYW1lIGZvciBkeW5hbWljIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW1wb3J0RnVuY3Rpb25zOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dFbXB0eToge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2VicGFja0NodW5rbmFtZUZvcm1hdDoge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1swXTtcbiAgICBjb25zdCB7IGltcG9ydEZ1bmN0aW9ucyA9IFtdLCBhbGxvd0VtcHR5ID0gZmFsc2UgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYHdlYnBhY2tDaHVua05hbWU6IFtcIiddJHt3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0fVtcIiddLD8gYDtcbiAgICBjb25zdCBjaHVua1N1YnN0clJlZ2V4ID0gbmV3IFJlZ0V4cChjaHVua1N1YnN0ckZvcm1hdCk7XG4gICAgY29uc3QgZWFnZXJNb2RlRm9ybWF0ID0gYHdlYnBhY2tNb2RlOiBbXCInXWVhZ2VyW1wiJ10sPyBgO1xuICAgIGNvbnN0IGVhZ2VyTW9kZVJlZ2V4ID0gbmV3IFJlZ0V4cChlYWdlck1vZGVGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICgoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSAmJiAhYWxsb3dFbXB0eSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgd2l0aCB0aGUgd2VicGFjayBjaHVua25hbWUnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXNDaHVua25hbWVQcmVzZW50ID0gZmFsc2U7XG4gICAgICBsZXQgaXNFYWdlck1vZGVQcmVzZW50ID0gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBsZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgaWYgKGNvbW1lbnQudHlwZSAhPT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSAvKiBmb28gKi8gc3R5bGUgY29tbWVudCwgbm90IGEgLy8gZm9vIGNvbW1lbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFkZGVkQ29tbWVudFJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgYmxvY2sgY29tbWVudCBwYWRkZWQgd2l0aCBzcGFjZXMgLSAvKiBmb28gKi9gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8ganVzdCBsaWtlIHdlYnBhY2sgaXRzZWxmIGRvZXNcbiAgICAgICAgICB2bS5ydW5Jbk5ld0NvbnRleHQoYChmdW5jdGlvbigpIHtyZXR1cm4geyR7Y29tbWVudC52YWx1ZX19fSkoKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBcIndlYnBhY2tcIiBjb21tZW50IHdpdGggdmFsaWQgc3ludGF4YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbW1lbnRTdHlsZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVhZ2VyTW9kZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0VhZ2VyTW9kZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNodW5rU3Vic3RyUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgIGlzQ2h1bmtuYW1lUHJlc2VudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2h1bmtuYW1lUHJlc2VudCAmJiBpc0VhZ2VyTW9kZVByZXNlbnQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyB1c2luZyBlYWdlciBtb2RlIGRvIG5vdCBuZWVkIGEgd2VicGFja0NodW5rTmFtZScsXG4gICAgICAgICAgc3VnZ2VzdDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkZXNjOiAnUmVtb3ZlIHdlYnBhY2tDaHVua05hbWUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2h1bmtTdWJzdHJSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gY29tbWVudC52YWx1ZS5yZXBsYWNlKGNodW5rU3Vic3RyUmVnZXgsICcnKS50cmltKCkucmVwbGFjZSgvLCQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4ZXIucmVtb3ZlKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChjb21tZW50LCBgLyogJHtyZXBsYWNlbWVudH0gKi9gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRlc2M6ICdSZW1vdmUgd2VicGFja01vZGUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWFnZXJNb2RlUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGNvbW1lbnQudmFsdWUucmVwbGFjZShlYWdlck1vZGVSZWdleCwgJycpLnRyaW0oKS5yZXBsYWNlKC8sJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZW1vdmUoY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlcGxhY2VUZXh0KGNvbW1lbnQsIGAvKiAke3JlcGxhY2VtZW50fSAqL2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0NodW5rbmFtZVByZXNlbnQgJiYgIWFsbG93RW1wdHkgJiYgIWlzRWFnZXJNb2RlUHJlc2VudCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IGluIHRoZSBmb3JtIC8qJHtjaHVua1N1YnN0ckZvcm1hdH0qL2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09ICdJbXBvcnQnICYmIGltcG9ydEZ1bmN0aW9ucy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpIDwgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bihub2RlLCBub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsIndlYnBhY2tDaHVua25hbWVGb3JtYXQiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwicnVuIiwibm9kZSIsImFyZyIsInNvdXJjZUNvZGUiLCJnZXRTb3VyY2VDb2RlIiwibGVhZGluZ0NvbW1lbnRzIiwiZ2V0Q29tbWVudHNCZWZvcmUiLCJnZXRDb21tZW50cyIsImxlYWRpbmciLCJsZW5ndGgiLCJyZXBvcnQiLCJtZXNzYWdlIiwiaXNDaHVua25hbWVQcmVzZW50IiwiY29tbWVudCIsInRlc3QiLCJ2YWx1ZSIsInZtIiwicnVuSW5OZXdDb250ZXh0IiwiZXJyb3IiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsMEVBRlQ7QUFHSkMsV0FBSywwQkFBUSwwQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsQ0FBQztBQUNQTCxZQUFNLFFBREM7QUFFUE0sa0JBQVk7QUFDVkMseUJBQWlCO0FBQ2ZQLGdCQUFNLE9BRFM7QUFF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cUIsTUFBTCxDQUFZRSxJQUFwQyxJQUE0QyxDQUFqRixFQUFvRjtBQUNsRjtBQUNEOztBQUVEeEIsZ0JBQUlDLElBQUosRUFBVUEsS0FBS3dCLFNBQUwsQ0FBZSxDQUFmLENBQVY7QUFDRCxXQVhJLDJCQUFQOztBQWFELEtBbkhjLG1CQUFqQiIsImZpbGUiOiJkeW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2tDaHVua05hbWUgZm9yIGR5bmFtaWMgaW1wb3J0cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbXBvcnRGdW5jdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzBdO1xuICAgIGNvbnN0IHsgaW1wb3J0RnVuY3Rpb25zID0gW10gfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYCB3ZWJwYWNrQ2h1bmtOYW1lOiBbXCInXSR7d2VicGFja0NodW5rbmFtZUZvcm1hdH1bXCInXSw/IGA7XG4gICAgY29uc3QgY2h1bmtTdWJzdHJSZWdleCA9IG5ldyBSZWdFeHAoY2h1bmtTdWJzdHJGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICghbGVhZGluZ0NvbW1lbnRzIHx8IGxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2sgY2h1bmtuYW1lJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2h1bmtuYW1lUHJlc2VudCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgIGlmIChjb21tZW50LnR5cGUgIT09ICdCbG9jaycpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgLyogZm9vICovIHN0eWxlIGNvbW1lbnQsIG5vdCBhIC8vIGZvbyBjb21tZW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhZGRlZENvbW1lbnRSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGJsb2NrIGNvbW1lbnQgcGFkZGVkIHdpdGggc3BhY2VzIC0gLyogZm9vICovYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGp1c3QgbGlrZSB3ZWJwYWNrIGl0c2VsZiBkb2VzXG4gICAgICAgICAgdm0ucnVuSW5OZXdDb250ZXh0KGAoZnVuY3Rpb24oKSB7cmV0dXJuIHske2NvbW1lbnQudmFsdWV9fX0pKClgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tZW50U3R5bGVSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIFwid2VicGFja1wiIGNvbW1lbnQgd2l0aCB2YWxpZCBzeW50YXhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua1N1YnN0clJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0NodW5rbmFtZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDaHVua25hbWVQcmVzZW50KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgaW4gdGhlIGZvcm0gLyoke2NodW5rU3Vic3RyRm9ybWF0fSovYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBydW4obm9kZSwgbm9kZS5zb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSAhPT0gJ0ltcG9ydCcgJiYgaW1wb3J0RnVuY3Rpb25zLmluZGV4T2Yobm9kZS5jYWxsZWUubmFtZSkgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuYXJndW1lbnRzWzBdKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 a155254c8e..97228ec5aa 100644 --- a/node_modules/eslint-plugin-import/lib/rules/export.js +++ b/node_modules/eslint-plugin-import/lib/rules/export.js @@ -1,5 +1,4 @@ -'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 _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); +'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 _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl); var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -187,7 +186,7 @@ module.exports = { if (node.declaration.declarations != null) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = node.declaration.declarations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var declaration = _step.value; - (0, _patternCapture2['default'])(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); + (0, _ExportMap.recursivePatternCapture)(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } }return ExportNamedDeclaration;}(), @@ -198,7 +197,7 @@ module.exports = { // `export * as X from 'path'` does not conflict if (node.exported && node.exported.name) {return;} - var remoteExports = _builder2['default'].get(node.source.value, context); + var remoteExports = _ExportMap2['default'].get(node.source.value, context); if (remoteExports == null) {return;} if (remoteExports.errors.length) { @@ -248,4 +247,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiYW55IiwiZm9yRWFjaCIsInJlcG9ydCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiJxb0JBQUEsK0M7QUFDQSw2RDtBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFB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LHNCQUFNLElBQU4sQ0FEc0IsQ0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi4vZXhwb3J0TWFwL3BhdHRlcm5DYXB0dXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlbW90ZUV4cG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3RlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50KG5vZGUpO1xuXG4gICAgICAgIGxldCBhbnkgPSBmYWxzZTtcbiAgICAgICAgcmVtb3RlRXhwb3J0cy5mb3JFYWNoKCh2LCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgYW55ID0gdHJ1ZTsgLy8gcG9vciBtYW4ncyBmaWx0ZXJcbiAgICAgICAgICAgIGFkZE5hbWVkKG5hbWUsIG5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFueSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbm9kZS5zb3VyY2UsXG4gICAgICAgICAgICBgTm8gbmFtZWQgZXhwb3J0cyBmb3VuZCBpbiBtb2R1bGUgJyR7bm9kZS5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIG5hbWVkXSBvZiBuYW1lc3BhY2UpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBub2Rlc10gb2YgbmFtZWQpIHtcbiAgICAgICAgICAgIGlmIChub2Rlcy5zaXplIDw9IDEpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgaWYgKGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB8fCBpc1R5cGVzY3JpcHROYW1lc3BhY2VNZXJnaW5nKG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAnTXVsdGlwbGUgZGVmYXVsdCBleHBvcnRzLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgIGBNdWx0aXBsZSBleHBvcnRzIG9mIG5hbWUgJyR7bmFtZS5yZXBsYWNlKHRzVHlwZVByZWZpeCwgJycpfScuYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJlcnJvcnMiLCJyZXBvcnRFcnJvcnMiLCJhbnkiLCJmb3JFYWNoIiwicmVwb3J0IiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6InFvQkFBQSx5QztBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7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Q0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwLCB7IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlIH0gZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcC5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChyZW1vdGVFeHBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICByZW1vdGVFeHBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRQYXJlbnQobm9kZSk7XG5cbiAgICAgICAgbGV0IGFueSA9IGZhbHNlO1xuICAgICAgICByZW1vdGVFeHBvcnRzLmZvckVhY2goKHYsIG5hbWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBhbnkgPSB0cnVlOyAvLyBwb29yIG1hbidzIGZpbHRlclxuICAgICAgICAgICAgYWRkTmFtZWQobmFtZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghYW55KSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLnNvdXJjZSxcbiAgICAgICAgICAgIGBObyBuYW1lZCBleHBvcnRzIGZvdW5kIGluIG1vZHVsZSAnJHtub2RlLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgbmFtZWRdIG9mIG5hbWVzcGFjZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG5vZGVzXSBvZiBuYW1lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGVzLnNpemUgPD0gMSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBpZiAoaXNUeXBlc2NyaXB0RnVuY3Rpb25PdmVybG9hZHMobm9kZXMpIHx8IGlzVHlwZXNjcmlwdE5hbWVzcGFjZU1lcmdpbmcobm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBpZiAoc2hvdWxkU2tpcFR5cGVzY3JpcHROYW1lc3BhY2Uobm9kZSwgbm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICdNdWx0aXBsZSBkZWZhdWx0IGV4cG9ydHMuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgYE11bHRpcGxlIGV4cG9ydHMgb2YgbmFtZSAnJHtuYW1lLnJlcGxhY2UodHNUeXBlUHJlZml4LCAnJyl9Jy5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 f71a966db8..96d9fd8493 100644 --- a/node_modules/eslint-plugin-import/lib/rules/named.js +++ b/node_modules/eslint-plugin-import/lib/rules/named.js @@ -1,5 +1,5 @@ '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 path = _interopRequireWildcard(_path); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}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;}} module.exports = { @@ -41,7 +41,7 @@ module.exports = { return; // no named imports/exports } - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null || imports.parseGoal === 'ambiguous') { return; } @@ -93,7 +93,7 @@ module.exports = { var call = node.init;var _call$arguments = _slicedToArray( call.arguments, 1),source = _call$arguments[0]; var variableImports = node.id.properties; - var variableExports = _builder2['default'].get(source.value, context); + var variableExports = _ExportMap2['default'].get(source.value, context); if ( // return if it's not a commonjs require statement @@ -140,4 +140,4 @@ module.exports = { VariableDeclarator: checkRequire }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLCtDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FB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LEVBQXVCO0FBQ3JCLGdCQUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIG5hbWVkIGltcG9ydHMgY29ycmVzcG9uZCB0byBhIG5hbWVkIGV4cG9ydCBpbiB0aGUgcmVtb3RlIGZpbGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbW1vbmpzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhrZXksIHR5cGUsIG5vZGUpIHtcbiAgICAgIC8vIGlnbm9yZSBsb2NhbCBleHBvcnRzIGFuZCB0eXBlIGltcG9ydHMvZXhwb3J0c1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnNvdXJjZSA9PSBudWxsXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgfHwgbm9kZS5leHBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbm9kZS5zcGVjaWZpZXJzLnNvbWUoKGltKSA9PiBpbS50eXBlID09PSB0eXBlKSkge1xuICAgICAgICByZXR1cm47IC8vIG5vIG5hbWVkIGltcG9ydHMvZXhwb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCB8fCBpbXBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW0udHlwZSAhPT0gdHlwZVxuICAgICAgICAgIC8vIGlnbm9yZSB0eXBlIGltcG9ydHNcbiAgICAgICAgICB8fCBpbS5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGltW2tleV0ubmFtZSB8fCBpbVtrZXldLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSBpbXBvcnRzLmhhc0RlZXAobmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSksIGkucGF0aCkpXG4gICAgICAgICAgICAgIC5qb2luKCcgLT4gJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCB2aWEgJHtkZWVwUGF0aH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1ba2V5XSwgYCR7bmFtZX0gbm90IGZvdW5kIGluICcke25vZGUuc291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrUmVxdWlyZShub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFvcHRpb25zLmNvbW1vbmpzXG4gICAgICAgIHx8IG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAgICAgLy8gcmV0dXJuIGlmIGl0J3Mgbm90IGFuIG9iamVjdCBkZXN0cnVjdHVyZSBvciBpdCdzIGFuIGVtcHR5IG9iamVjdCBkZXN0cnVjdHVyZVxuICAgICAgICB8fCAhbm9kZS5pZCB8fCBub2RlLmlkLnR5cGUgIT09ICdPYmplY3RQYXR0ZXJuJyB8fCBub2RlLmlkLnByb3BlcnRpZXMubGVuZ3RoID09PSAwXG4gICAgICAgIC8vIHJldHVybiBpZiB0aGVyZSBpcyBubyBjYWxsIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAgICAgfHwgIW5vZGUuaW5pdCB8fCBub2RlLmluaXQudHlwZSAhPT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbCA9IG5vZGUuaW5pdDtcbiAgICAgIGNvbnN0IFtzb3VyY2VdID0gY2FsbC5hcmd1bWVudHM7XG4gICAgICBjb25zdCB2YXJpYWJsZUltcG9ydHMgPSBub2RlLmlkLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCB2YXJpYWJsZUV4cG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChzb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIGNvbW1vbmpzIHJlcXVpcmUgc3RhdGVtZW50XG4gICAgICAgIGNhbGwuY2FsbGVlLnR5cGUgIT09ICdJZGVudGlmaWVyJyB8fCBjYWxsLmNhbGxlZS5uYW1lICE9PSAncmVxdWlyZScgfHwgY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIHN0cmluZyBzb3VyY2VcbiAgICAgICAgfHwgc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJ1xuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMgPT0gbnVsbFxuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMucGFyc2VHb2FsID09PSAnYW1iaWd1b3VzJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHZhcmlhYmxlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyaWFibGVJbXBvcnRzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgIGlmIChpbS50eXBlICE9PSAnUHJvcGVydHknIHx8ICFpbS5rZXkgfHwgaW0ua2V5LnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSB2YXJpYWJsZUV4cG9ydHMuaGFzRGVlcChpbS5rZXkubmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltLmtleSwgYCR7aW0ua2V5Lm5hbWV9IG5vdCBmb3VuZCBpbiAnJHtzb3VyY2UudmFsdWV9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnaW1wb3J0ZWQnLCAnSW1wb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGNoZWNrU3BlY2lmaWVycy5iaW5kKG51bGwsICdsb2NhbCcsICdFeHBvcnRTcGVjaWZpZXInKSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBjaGVja1JlcXVpcmUsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLHlDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FBQ047QUFDRUws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QUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBuYW1lZCBpbXBvcnRzIGNvcnJlc3BvbmQgdG8gYSBuYW1lZCBleHBvcnQgaW4gdGhlIHJlbW90ZSBmaWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25hbWVkJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21tb25qczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMoa2V5LCB0eXBlLCBub2RlKSB7XG4gICAgICAvLyBpZ25vcmUgbG9jYWwgZXhwb3J0cyBhbmQgdHlwZSBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5zb3VyY2UgPT0gbnVsbFxuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUuc3BlY2lmaWVycy5zb21lKChpbSkgPT4gaW0udHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBubyBuYW1lZCBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwgfHwgaW1wb3J0cy5wYXJzZUdvYWwgPT09ICdhbWJpZ3VvdXMnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGltLnR5cGUgIT09IHR5cGVcbiAgICAgICAgICAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8IGltLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBpbVtrZXldLm5hbWUgfHwgaW1ba2V5XS52YWx1ZTtcblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gaW1wb3J0cy5oYXNEZWVwKG5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbVtrZXldLCBgJHtuYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCBpbiAnJHtub2RlLnNvdXJjZS52YWx1ZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1JlcXVpcmUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9ucy5jb21tb25qc1xuICAgICAgICB8fCBub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhbiBvYmplY3QgZGVzdHJ1Y3R1cmUgb3IgaXQncyBhbiBlbXB0eSBvYmplY3QgZGVzdHJ1Y3R1cmVcbiAgICAgICAgfHwgIW5vZGUuaWQgfHwgbm9kZS5pZC50eXBlICE9PSAnT2JqZWN0UGF0dGVybicgfHwgbm9kZS5pZC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlcmUgaXMgbm8gY2FsbCBleHByZXNzaW9uIG9uIHRoZSByaWdodCBzaWRlXG4gICAgICAgIHx8ICFub2RlLmluaXQgfHwgbm9kZS5pbml0LnR5cGUgIT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGwgPSBub2RlLmluaXQ7XG4gICAgICBjb25zdCBbc291cmNlXSA9IGNhbGwuYXJndW1lbnRzO1xuICAgICAgY29uc3QgdmFyaWFibGVJbXBvcnRzID0gbm9kZS5pZC5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgdmFyaWFibGVFeHBvcnRzID0gRXhwb3J0cy5nZXQoc291cmNlLnZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKFxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBjb21tb25qcyByZXF1aXJlIHN0YXRlbWVudFxuICAgICAgICBjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBzdHJpbmcgc291cmNlXG4gICAgICAgIHx8IHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCdcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzID09IG51bGxcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cydcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YXJpYWJsZUV4cG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB2YXJpYWJsZUV4cG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhcmlhYmxlSW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoaW0udHlwZSAhPT0gJ1Byb3BlcnR5JyB8fCAhaW0ua2V5IHx8IGltLmtleS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gdmFyaWFibGVFeHBvcnRzLmhhc0RlZXAoaW0ua2V5Lm5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRGaWxlbmFtZSgpKSwgaS5wYXRoKSlcbiAgICAgICAgICAgICAgLmpvaW4oJyAtPiAnKTtcblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW0ua2V5LCBgJHtpbS5rZXkubmFtZX0gbm90IGZvdW5kIHZpYSAke2RlZXBQYXRofWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgaW4gJyR7c291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogY2hlY2tTcGVjaWZpZXJzLmJpbmQobnVsbCwgJ2ltcG9ydGVkJywgJ0ltcG9ydFNwZWNpZmllcicpLFxuXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnbG9jYWwnLCAnRXhwb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogY2hlY2tSZXF1aXJlLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/rules/namespace.js b/node_modules/eslint-plugin-import/lib/rules/namespace.js index 56744fca80..574d89a60d 100644 --- a/node_modules/eslint-plugin-import/lib/rules/namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/namespace.js @@ -1,6 +1,5 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -9,7 +8,7 @@ function processBodyStatement(context, namespaces, declaration) { if (declaration.specifiers.length === 0) {return;} - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length > 0) { @@ -89,7 +88,7 @@ module.exports = { ExportNamespaceSpecifier: function () {function ExportNamespaceSpecifier(namespace) { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length) { @@ -123,7 +122,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { if (dereference.computed) { if (!allowComputed) { context.report( @@ -162,7 +161,7 @@ module.exports = { // DFS traverse child namespaces function testKey(pattern, namespace) {var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [init.name]; - if (!(namespace instanceof _exportMap2['default'])) {return;} + if (!(namespace instanceof _ExportMap2['default'])) {return;} if (pattern.type !== 'ObjectPattern') {return;}var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { @@ -216,4 +215,4 @@ module.exports = { }return JSXMemberExpression;}() }; }return namespaceRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiRXhwb3J0TWFwIiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EsK0M7QUFDQSx5QztBQUNBLHlEO0FBQ0EscUM7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLE9BQTlCLEVB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QjNDLFVBQVVkLEdBQVYsQ0FBYzZDLFNBQVNTLEdBQVQsQ0FBYTNDLElBQTNCLENBQTVCO0FBQ0E7QUFDQSxzQkFBSThDLHdCQUF3QixJQUE1QixFQUFrQztBQUNoQ04sNEJBQVFOLFNBQVMzQyxLQUFqQixFQUF3QnVELG9CQUFvQjNDLFNBQTVDLEVBQXVEdUMsSUFBdkQ7QUFDRDtBQUNEQSx1QkFBS0ssR0FBTDtBQUNELGlCQXJDc0Q7QUFzQ3hEOztBQUVEUCxvQkFBUUYsRUFBUixFQUFZeEQsV0FBV08sR0FBWCxDQUFla0QsS0FBS3ZDLElBQXBCLENBQVo7QUFDRCxXQTNISTs7QUE2SExnRCwyQkE3SEssbURBNkhxQyxLQUFwQnBCLE1BQW9CLFNBQXBCQSxNQUFvQixDQUFaTSxRQUFZLFNBQVpBLFFBQVk7QUFDeEMsZ0JBQUksQ0FBQ3BELFdBQVcrQyxHQUFYLENBQWVELE9BQU81QixJQUF0QixDQUFMLEVBQWtDLENBQUUsT0FBUztBQUM3QyxnQkFBTUcsWUFBWXJCLFdBQVdPLEdBQVgsQ0FBZXVDLE9BQU81QixJQUF0QixDQUFsQjtBQUNBLGdCQUFJLENBQUNHLFVBQVUwQixHQUFWLENBQWNLLFNBQVNsQyxJQUF2QixDQUFMLEVBQW1DO0FBQ2pDbkIsc0JBQVFnQixNQUFSLENBQWU7QUFDYitDLHNCQUFNVixRQURPO0FBRWJXLHlCQUFTM0IsWUFBWWdCLFFBQVosRUFBc0IsQ0FBQ04sT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuLi9leHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCBkZWNsYXJhdGlvbikge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cblxuICBpZiAoZGVjbGFyYXRpb24uc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWNsYXJhdGlvbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic6XG4gICAgICAgIGlmICghaW1wb3J0cy5zaXplKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBzcGVjaWZpZXIsXG4gICAgICAgICAgICBgTm8gZXhwb3J0ZWQgbmFtZXMgZm91bmQgaW4gbW9kdWxlICcke2RlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgaW1wb3J0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6XG4gICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOiB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpbXBvcnRzLmdldChcbiAgICAgICAgLy8gZGVmYXVsdCB0byAnZGVmYXVsdCcgZm9yIGRlZmF1bHQgaHR0cHM6Ly9pLmltZ3VyLmNvbS9uajZxQVd5LmpwZ1xuICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZCA/IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSA6ICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtZXRhIHx8ICFtZXRhLm5hbWVzcGFjZSkgeyBicmVhazsgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgbWV0YS5uYW1lc3BhY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgaW1wb3J0ZWQgbmFtZXNwYWNlcyBjb250YWluIGRlcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHRoZXkgYXJlIGRlcmVmZXJlbmNlZC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduYW1lc3BhY2UnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3dDb21wdXRlZDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBjb21wdXRlZCAoYW5kIHRodXMsIHVuLWxpbnRhYmxlKSByZWZlcmVuY2VzIHRvIG5hbWVzcGFjZSBtZW1iZXJzLicsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBuYW1lc3BhY2VSdWxlKGNvbnRleHQpIHtcbiAgICAvLyByZWFkIG9wdGlvbnNcbiAgICBjb25zdCB7XG4gICAgICBhbGxvd0NvbXB1dGVkID0gZmFsc2UsXG4gICAgfSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBtYWtlTWVzc2FnZShsYXN0LCBuYW1lcGF0aCkge1xuICAgICAgcmV0dXJuIGAnJHtsYXN0Lm5hbWV9JyBub3QgZm91bmQgaW4gJHtuYW1lcGF0aC5sZW5ndGggPiAxID8gJ2RlZXBseSAnIDogJyd9aW1wb3J0ZWQgbmFtZXNwYWNlICcke25hbWVwYXRoLmpvaW4oJy4nKX0nLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHBpY2sgdXAgYWxsIGltcG9ydHMgYXQgYm9keSBlbnRyeSB0aW1lLCB0byBwcm9wZXJseSByZXNwZWN0IGhvaXN0aW5nXG4gICAgICBQcm9ncmFtKHsgYm9keSB9KSB7XG4gICAgICAgIGJvZHkuZm9yRWFjaCgoeCkgPT4geyBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCB4KTsgfSk7XG4gICAgICB9LFxuXG4gICAgICAvLyBzYW1lIGFzIGFib3ZlLCBidXQgZG9lcyBub3QgYWRkIG5hbWVzIHRvIGxvY2FsIG1hcFxuICAgICAgRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIHRvZG86IGNoZWNrIGZvciBwb3NzaWJsZSByZWRlZmluaXRpb25cblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLnBhcmVudC50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nICYmIGRlcmVmZXJlbmNlLnBhcmVudC5sZWZ0ID09PSBkZXJlZmVyZW5jZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgZGVyZWZlcmVuY2UucGFyZW50LFxuICAgICAgICAgICAgYEFzc2lnbm1lbnQgdG8gbWVtYmVyIG9mIG5hbWVzcGFjZSAnJHtkZXJlZmVyZW5jZS5vYmplY3QubmFtZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgaWYgKGRlcmVmZXJlbmNlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93Q29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgZGVyZWZlcmVuY2UucHJvcGVydHksXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byB2YWxpZGF0ZSBjb21wdXRlZCByZWZlcmVuY2UgdG8gaW1wb3J0ZWQgbmFtZXNwYWNlICcke2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lfScuYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgbWFrZU1lc3NhZ2UoZGVyZWZlcmVuY2UucHJvcGVydHksIG5hbWVwYXRoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRlZCA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgaWYgKGV4cG9ydGVkID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvLyBzdGFzaCBhbmQgcG9wXG4gICAgICAgICAgbmFtZXBhdGgucHVzaChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBuYW1lc3BhY2UgPSBleHBvcnRlZC5uYW1lc3BhY2U7XG4gICAgICAgICAgZGVyZWZlcmVuY2UgPSBkZXJlZmVyZW5jZS5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcih7IGlkLCBpbml0IH0pIHtcbiAgICAgICAgaWYgKGluaXQgPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKGluaXQudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluaXQubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIHJlZGVmaW5pdGlvbiBpbiBpbnRlcm1lZGlhdGUgc2NvcGVzXG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGluaXQubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIERGUyB0cmF2ZXJzZSBjaGlsZCBuYW1lc3BhY2VzXG4gICAgICAgIGZ1bmN0aW9uIHRlc3RLZXkocGF0dGVybiwgbmFtZXNwYWNlLCBwYXRoID0gW2luaXQubmFtZV0pIHtcbiAgICAgICAgICBpZiAoIShuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXApKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBLFNBQVNBLG9CQUFULENBQThCQyxPQUE5QixFQUF1Q0MsVUFBdkMsRUFBbURDLFdBQW5ELEVBQWdF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QyxJQUEzQixDQUE1QjtBQUNBO0FBQ0Esc0JBQUk2Qyx3QkFBd0IsSUFBNUIsRUFBa0M7QUFDaENOLDRCQUFRTixTQUFTMUMsS0FBakIsRUFBd0JzRCxvQkFBb0IxQyxTQUE1QyxFQUF1RHNDLElBQXZEO0FBQ0Q7QUFDREEsdUJBQUtLLEdBQUw7QUFDRCxpQkFyQ3NEO0FBc0N4RDs7QUFFRFAsb0JBQVFGLEVBQVIsRUFBWXZELFdBQVdPLEdBQVgsQ0FBZWlELEtBQUt0QyxJQUFwQixDQUFaO0FBQ0QsV0EzSEk7O0FBNkhMK0MsMkJBN0hLLG1EQTZIcUMsS0FBcEJuQixNQUFvQixTQUFwQkEsTUFBb0IsQ0FBWkssUUFBWSxTQUFaQSxRQUFZO0FBQ3hDLGdCQUFJLENBQUNuRCxXQUFXK0MsR0FBWCxDQUFlRCxPQUFPNUIsSUFBdEIsQ0FBTCxFQUFrQyxDQUFFLE9BQVM7QUFDN0MsZ0JBQU1HLFlBQVlyQixXQUFXTyxHQUFYLENBQWV1QyxPQUFPNUIsSUFBdEIsQ0FBbEI7QUFDQSxnQkFBSSxDQUFDRyxVQUFVMEIsR0FBVixDQUFjSSxTQUFTakMsSUFBdkIsQ0FBTCxFQUFtQztBQUNqQ25CLHNCQUFRZ0IsTUFBUixDQUFlO0FBQ2I4QyxzQkFBTVYsUUFETztBQUViVyx5QkFBUzFCLFlBQVllLFFBQVosRUFBc0IsQ0FBQ0wsT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBpbXBvcnREZWNsYXJhdGlvbiBmcm9tICcuLi9pbXBvcnREZWNsYXJhdGlvbic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgZGVjbGFyYXRpb24pIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHsgcmV0dXJuOyB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uLnNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVjbGFyYXRpb24uc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgc3BlY2lmaWVyLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgY2FzZSAnSW1wb3J0U3BlY2lmaWVyJzoge1xuICAgICAgICBjb25zdCBtZXRhID0gaW1wb3J0cy5nZXQoXG4gICAgICAgIC8vIGRlZmF1bHQgdG8gJ2RlZmF1bHQnIGZvciBkZWZhdWx0IGh0dHBzOi8vaS5pbWd1ci5jb20vbmo2cUFXeS5qcGdcbiAgICAgICAgICBzcGVjaWZpZXIuaW1wb3J0ZWQgPyBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUgOiAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWV0YSB8fCAhbWV0YS5uYW1lc3BhY2UpIHsgYnJlYWs7IH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIG1ldGEubmFtZXNwYWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIGltcG9ydGVkIG5hbWVzcGFjZXMgY29udGFpbiBkZXJlZmVyZW5jZWQgcHJvcGVydGllcyBhcyB0aGV5IGFyZSBkZXJlZmVyZW5jZWQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZXNwYWNlJyksXG4gICAgfSxcblxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFsbG93Q29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgY29tcHV0ZWQgKGFuZCB0aHVzLCB1bi1saW50YWJsZSkgcmVmZXJlbmNlcyB0byBuYW1lc3BhY2UgbWVtYmVycy4nLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gbmFtZXNwYWNlUnVsZShjb250ZXh0KSB7XG4gICAgLy8gcmVhZCBvcHRpb25zXG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dDb21wdXRlZCA9IGZhbHNlLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gbWFrZU1lc3NhZ2UobGFzdCwgbmFtZXBhdGgpIHtcbiAgICAgIHJldHVybiBgJyR7bGFzdC5uYW1lfScgbm90IGZvdW5kIGluICR7bmFtZXBhdGgubGVuZ3RoID4gMSA/ICdkZWVwbHkgJyA6ICcnfWltcG9ydGVkIG5hbWVzcGFjZSAnJHtuYW1lcGF0aC5qb2luKCcuJyl9Jy5gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBwaWNrIHVwIGFsbCBpbXBvcnRzIGF0IGJvZHkgZW50cnkgdGltZSwgdG8gcHJvcGVybHkgcmVzcGVjdCBob2lzdGluZ1xuICAgICAgUHJvZ3JhbSh7IGJvZHkgfSkge1xuICAgICAgICBib2R5LmZvckVhY2goKHgpID0+IHsgcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgeCk7IH0pO1xuICAgICAgfSxcblxuICAgICAgLy8gc2FtZSBhcyBhYm92ZSwgYnV0IGRvZXMgbm90IGFkZCBuYW1lcyB0byBsb2NhbCBtYXBcbiAgICAgIEV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcihuYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIGBObyBleHBvcnRlZCBuYW1lcyBmb3VuZCBpbiBtb2R1bGUgJyR7ZGVjbGFyYXRpb24uc291cmNlLnZhbHVlfScuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyB0b2RvOiBjaGVjayBmb3IgcG9zc2libGUgcmVkZWZpbml0aW9uXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24oZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLm9iamVjdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5wYXJlbnQudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyAmJiBkZXJlZmVyZW5jZS5wYXJlbnQubGVmdCA9PT0gZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIGRlcmVmZXJlbmNlLnBhcmVudCxcbiAgICAgICAgICAgIGBBc3NpZ25tZW50IHRvIG1lbWJlciBvZiBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dDb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIHZhbGlkYXRlIGNvbXB1dGVkIHJlZmVyZW5jZSB0byBpbXBvcnRlZCBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgIGRlcmVmZXJlbmNlLnByb3BlcnR5LFxuICAgICAgICAgICAgICBtYWtlTWVzc2FnZShkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbmFtZXBhdGgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4cG9ydGVkID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IGV4cG9ydGVkLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKHsgaWQsIGluaXQgfSkge1xuICAgICAgICBpZiAoaW5pdCA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoaW5pdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaW5pdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgcmVkZWZpbml0aW9uIGluIGludGVybWVkaWF0ZSBzY29wZXNcbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgaW5pdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gREZTIHRyYXZlcnNlIGNoaWxkIG5hbWVzcGFjZXNcbiAgICAgICAgZnVuY3Rpb24gdGVzdEtleShwYXR0ZXJuLCBuYW1lc3BhY2UsIHBhdGggPSBbaW5pdC5uYW1lXSkge1xuICAgICAgICAgIGlmICghKG5hbWVzcGFjZSBpbnN0YW5jZW9mIEV4cG9ydHMpKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 f2421e17a6..6cc1568646 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 @@ -124,7 +124,7 @@ module.exports = { } } - function commentAfterImport(node, nextComment, type) { + function commentAfterImport(node, nextComment) { var lineDifference = getLineDifference(node, nextComment); var EXPECTED_LINE_DIFFERENCE = options.count + 1; @@ -140,7 +140,7 @@ module.exports = { line: node.loc.end.line, column: column }, - message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after ' + String(type) + ' statement not followed by another ' + String(type) + '.', + message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after import statement not followed by another import.', fix: options.exactCount && EXPECTED_LINE_DIFFERENCE < lineDifference ? undefined : function (fixer) {return fixer.insertTextAfter( node, '\n'.repeat(EXPECTED_LINE_DIFFERENCE - lineDifference));} }); @@ -178,7 +178,7 @@ module.exports = { } if (nextComment && typeof nextComment !== 'undefined') { - commentAfterImport(node, nextComment, 'import'); + commentAfterImport(node, nextComment); } else if (nextNode && nextNode.type !== 'ImportDeclaration' && (nextNode.type !== 'TSImportEqualsDeclaration' || nextNode.isExport)) { checkForNewLine(node, nextNode, 'import'); } @@ -215,18 +215,8 @@ module.exports = { !containsNodeOrEqual(nextStatement, nextRequireCall))) { - var nextComment = void 0; - if (typeof statementWithRequireCall.parent.comments !== 'undefined' && options.considerComments) { - var endLine = node.loc.end.line; - nextComment = statementWithRequireCall.parent.comments.find(function (o) {return o.loc.start.line >= endLine && o.loc.start.line <= endLine + options.count + 1;}); - } - - if (nextComment && typeof nextComment !== 'undefined') { - - commentAfterImport(statementWithRequireCall, nextComment, 'require'); - } else { - checkForNewLine(statementWithRequireCall, nextStatement, 'require'); - } + + checkForNewLine(statementWithRequireCall, nextStatement, 'require'); } }); }return ProgramExit;}(), @@ -244,4 +234,4 @@ module.exports = { 'Decorator:exit': decrementLevel }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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QUFDTGIsa0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0Y7QUFDRixhQS9CRDtBQWdDRCxXQTdDSTtBQThDTEUsNkJBQXFCeEIsY0E5Q2hCO0FBK0NMeUIsNEJBQW9CekIsY0EvQ2Y7QUFnREwwQixpQ0FBeUIxQixjQWhEcEI7QUFpREwyQix3QkFBZ0IzQixjQWpEWDtBQWtETDRCLDBCQUFrQjVCLGNBbERiO0FBbURMNkIsbUJBQVc3QixjQW5ETjtBQW9ETCxvQ0FBNEJDLGNBcER2QjtBQXFETCxtQ0FBMkJBLGNBckR0QjtBQXNETCx3Q0FBZ0NBLGNBdEQzQjtBQXVETCwrQkFBdUJBLGNBdkRsQjtBQXdETCxpQ0FBeUJBLGNBeERwQjtBQXlETCwwQkFBa0JBLGNBekRiLEVBQVA7O0FBMkRELEtBL0xjLG1CQUFqQiIsImZpbGUiOiJuZXdsaW5lLWFmdGVyLWltcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgbmV3IGxpbmUgYWZ0ZXIgaW1wb3J0IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIGltcG9ydC5cbiAqIEBhdXRob3IgUmFkZWsgQmVua2VsXG4gKi9cblxuaW1wb3J0IGlzU3RhdGljUmVxdWlyZSBmcm9tICcuLi9jb3JlL3N0YXRpY1JlcXVpcmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5jb25zdCBsb2cgPSBkZWJ1ZygnZXNsaW50LXBsdWdpbi1pbXBvcnQ6cnVsZXM6bmV3bGluZS1hZnRlci1pbXBvcnQnKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlT3JFcXVhbChvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICByZXR1cm4gb3V0ZXJOb2RlLnJhbmdlWzBdIDw9IGlubmVyTm9kZS5yYW5nZVswXSAmJiBvdXRlck5vZGUucmFuZ2VbMV0gPj0gaW5uZXJOb2RlLnJhbmdlWzFdO1xufVxuXG5mdW5jdGlvbiBnZXRTY29wZUJvZHkoc2NvcGUpIHtcbiAgaWYgKHNjb3BlLmJsb2NrLnR5cGUgPT09ICdTd2l0Y2hTdGF0ZW1lbnQnKSB7XG4gICAgbG9nKCdTd2l0Y2hTdGF0ZW1lbnQgc2NvcGVzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgYm9keSB9ID0gc2NvcGUuYmxvY2s7XG4gIGlmIChib2R5ICYmIGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIHJldHVybiBib2R5LmJvZHk7XG4gIH1cblxuICByZXR1cm4gYm9keTtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGVJbmRleEluU2NvcGVCb2R5KGJvZHksIG5vZGVUb0ZpbmQpIHtcbiAgcmV0dXJuIGJvZHkuZmluZEluZGV4KChub2RlKSA9PiBjb250YWluc05vZGVPckVxdWFsKG5vZGUsIG5vZGVUb0ZpbmQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpIHtcbiAgcmV0dXJuIG5leHROb2RlLmxvYy5zdGFydC5saW5lIC0gbm9kZS5sb2MuZW5kLmxpbmU7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjb3JhdG9ycyAmJiBub2RlLmRlY29yYXRvcnMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydERlZmF1bHRDbGFzcyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydE5hbWVDbGFzcyhub2RlKSB7XG5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24gJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ2xheW91dCcsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBuZXdsaW5lIGFmdGVyIGltcG9ydCBzdGF0ZW1lbnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnd2hpdGVzcGFjZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFjdENvdW50OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICAgIGNvbnNpZGVyQ29tbWVudHM6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGNvbnN0IHJlcXVpcmVDYWxscyA9IFtdO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjb3VudDogMSxcbiAgICAgIGV4YWN0Q291bnQ6IGZhbHNlLFxuICAgICAgY29uc2lkZXJDb21tZW50czogZmFsc2UsXG4gICAgICAuLi5jb250ZXh0Lm9wdGlvbnNbMF0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yTmV3TGluZShub2RlLCBuZXh0Tm9kZSwgdHlwZSkge1xuICAgICAgaWYgKGlzRXhwb3J0RGVmYXVsdENsYXNzKG5leHROb2RlKSB8fCBpc0V4cG9ydE5hbWVDbGFzcyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOb2RlID0gbmV4dE5vZGUuZGVjbGFyYXRpb247XG5cbiAgICAgICAgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKGNsYXNzTm9kZSkpIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IGNsYXNzTm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5leHROb2RlKSkge1xuICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLmRlY29yYXRvcnNbMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVEaWZmZXJlbmNlID0gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpO1xuICAgICAgY29uc3QgRVhQRUNURURfTElORV9ESUZGRVJFTkNFID0gb3B0aW9ucy5jb3VudCArIDE7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICAgfHwgb3B0aW9ucy5leGFjdENvdW50ICYmIGxpbmVEaWZmZXJlbmNlICE9PSBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICkge1xuICAgICAgICBsZXQgY29sdW1uID0gbm9kZS5sb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgICAgIGlmIChub2RlLmxvYy5zdGFydC5saW5lICE9PSBub2RlLmxvYy5lbmQubGluZSkge1xuICAgICAgICAgIGNvbHVtbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICBsaW5lOiBub2RlLmxvYy5lbmQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke29wdGlvbnMuY291bnR9IGVtcHR5IGxpbmUke29wdGlvbnMuY291bnQgPiAxID8gJ3MnIDogJyd9IGFmdGVyICR7dHlwZX0gc3RhdGVtZW50IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyICR7dHlwZX0uYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWVudEFmdGVySW1wb3J0KG5vZGUsIG5leHRDb21tZW50LCB0eXBlKSB7XG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHRDb21tZW50KTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAobGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UpIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY3JlbWVudExldmVsKCkge1xuICAgICAgbGV2ZWwrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbC0tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW1wb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuXG4gICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LmJvZHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBwYXJlbnQuYm9keS5pbmRleE9mKG5vZGUpO1xuICAgICAgY29uc3QgbmV4dE5vZGUgPSBwYXJlbnQuYm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgIGNvbnN0IGVuZExpbmUgPSBub2RlLmxvYy5lbmQubGluZTtcbiAgICAgIGxldCBuZXh0Q29tbWVudDtcblxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICBuZXh0Q29tbWVudCA9IHBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBza2lwIFwiZXhwb3J0IGltcG9ydFwic1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21tZW50QWZ0ZXJJbXBvcnQobm9kZSwgbmV4dENvbW1lbnQsICdpbXBvcnQnKTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAobmV4dE5vZGUudHlwZSAhPT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nIHx8IG5leHROb2RlLmlzRXhwb3J0KSkge1xuICAgICAgICBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsICdpbXBvcnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogY2hlY2tJbXBvcnQsXG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY1JlcXVpcmUobm9kZSkgJiYgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICByZXF1aXJlQ2FsbHMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBsb2coJ2V4aXQgcHJvY2Vzc2luZyBmb3InLCBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlQm9keSA9IGdldFNjb3BlQm9keShjb250ZXh0LmdldFNjb3BlKCkpO1xuICAgICAgICBsb2coJ2dvdCBzY29wZTonLCBzY29wZUJvZHkpO1xuXG4gICAgICAgIHJlcXVpcmVDYWxscy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShzY29wZUJvZHksIG5vZGUpO1xuICAgICAgICAgIGxvZygnbm9kZSBwb3NpdGlvbiBpbiBzY29wZTonLCBub2RlUG9zaXRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsID0gc2NvcGVCb2R5W25vZGVQb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgbmV4dFN0YXRlbWVudCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0UmVxdWlyZUNhbGwgPSByZXF1aXJlQ2FsbHNbaW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmIChuZXh0UmVxdWlyZUNhbGwgJiYgY29udGFpbnNOb2RlT3JFcXVhbChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRSZXF1aXJlQ2FsbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXh0U3RhdGVtZW50ICYmIChcbiAgICAgICAgICAgICAgIW5leHRSZXF1aXJlQ2FsbFxuICAgICAgICAgICAgICB8fCAhY29udGFpbnNOb2RlT3JFcXVhbChuZXh0U3RhdGVtZW50LCBuZXh0UmVxdWlyZUNhbGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmV4dENvbW1lbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbC5wYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICAgICAgICBjb25zdCBlbmRMaW5lID0gbm9kZS5sb2MuZW5kLmxpbmU7XG4gICAgICAgICAgICAgIG5leHRDb21tZW50ID0gc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLnBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuXG4gICAgICAgICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRDb21tZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2tGb3JOZXdMaW5lKHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCwgbmV4dFN0YXRlbWVudCwgJ3JlcXVpcmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IGluY3JlbWVudExldmVsLFxuICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEJsb2NrU3RhdGVtZW50OiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIE9iamVjdEV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgRGVjb3JhdG9yOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdCbG9ja1N0YXRlbWVudDpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnT2JqZWN0RXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnRGVjb3JhdG9yOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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Qm1FLFNBQXpCLEVBQW9DaEUsSUFBcEMsQ0FBckI7QUFDQWIsa0JBQUkseUJBQUosRUFBK0JnRSxZQUEvQjs7QUFFQSxrQkFBTWlCLDJCQUEyQkosVUFBVWIsWUFBVixDQUFqQztBQUNBLGtCQUFNa0IsZ0JBQWdCTCxVQUFVYixlQUFlLENBQXpCLENBQXRCO0FBQ0Esa0JBQU1tQixrQkFBa0J2QyxhQUFhb0MsUUFBUSxDQUFyQixDQUF4Qjs7QUFFQSxrQkFBSUcsbUJBQW1CbEYsb0JBQW9CZ0Ysd0JBQXBCLEVBQThDRSxlQUE5QyxDQUF2QixFQUF1RjtBQUNyRjtBQUNEOztBQUVEO0FBQ0VEO0FBQ0UsZUFBQ0MsZUFBRDtBQUNHLGVBQUNsRixvQkFBb0JpRixhQUFwQixFQUFtQ0MsZUFBbkMsQ0FGTixDQURGOztBQUtFOztBQUVBckMsZ0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0YsYUFyQkQ7QUFzQkQsV0FuQ0k7QUFvQ0xFLDZCQUFxQnhCLGNBcENoQjtBQXFDTHlCLDRCQUFvQnpCLGNBckNmO0FBc0NMMEIsaUNBQXlCMUIsY0F0Q3BCO0FBdUNMMkIsd0JBQWdCM0IsY0F2Q1g7QUF3Q0w0QiwwQkFBa0I1QixjQXhDYjtBQXlDTDZCLG1CQUFXN0IsY0F6Q047QUEwQ0wsb0NBQTRCQyxjQTFDdkI7QUEyQ0wsbUNBQTJCQSxjQTNDdEI7QUE0Q0wsd0NBQWdDQSxjQTVDM0I7QUE2Q0wsK0JBQXVCQSxjQTdDbEI7QUE4Q0wsaUNBQXlCQSxjQTlDcEI7QUErQ0wsMEJBQWtCQSxjQS9DYixFQUFQOztBQWlERCxLQXJMYyxtQkFBakIiLCJmaWxlIjoibmV3bGluZS1hZnRlci1pbXBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIG5ldyBsaW5lIGFmdGVyIGltcG9ydCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuXG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OnJ1bGVzOm5ld2xpbmUtYWZ0ZXItaW1wb3J0Jyk7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZU9yRXF1YWwob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgcmV0dXJuIG91dGVyTm9kZS5yYW5nZVswXSA8PSBpbm5lck5vZGUucmFuZ2VbMF0gJiYgb3V0ZXJOb2RlLnJhbmdlWzFdID49IGlubmVyTm9kZS5yYW5nZVsxXTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGVCb2R5KHNjb3BlKSB7XG4gIGlmIChzY29wZS5ibG9jay50eXBlID09PSAnU3dpdGNoU3RhdGVtZW50Jykge1xuICAgIGxvZygnU3dpdGNoU3RhdGVtZW50IHNjb3BlcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGJvZHkgfSA9IHNjb3BlLmJsb2NrO1xuICBpZiAoYm9keSAmJiBib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gYm9keS5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShib2R5LCBub2RlVG9GaW5kKSB7XG4gIHJldHVybiBib2R5LmZpbmRJbmRleCgobm9kZSkgPT4gY29udGFpbnNOb2RlT3JFcXVhbChub2RlLCBub2RlVG9GaW5kKSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKSB7XG4gIHJldHVybiBuZXh0Tm9kZS5sb2Muc3RhcnQubGluZSAtIG5vZGUubG9jLmVuZC5saW5lO1xufVxuXG5mdW5jdGlvbiBpc0NsYXNzV2l0aERlY29yYXRvcihub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJyAmJiBub2RlLmRlY29yYXRvcnMgJiYgbm9kZS5kZWNvcmF0b3JzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnREZWZhdWx0Q2xhc3Mobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnROYW1lQ2xhc3Mobm9kZSkge1xuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdsYXlvdXQnLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbmV3bGluZSBhZnRlciBpbXBvcnQgc3RhdGVtZW50cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ3doaXRlc3BhY2UnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvdW50OiB7XG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhY3RDb3VudDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICBjb25zaWRlckNvbW1lbnRzOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGxldmVsID0gMDtcbiAgICBjb25zdCByZXF1aXJlQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgY291bnQ6IDEsXG4gICAgICBleGFjdENvdW50OiBmYWxzZSxcbiAgICAgIGNvbnNpZGVyQ29tbWVudHM6IGZhbHNlLFxuICAgICAgLi4uY29udGV4dC5vcHRpb25zWzBdLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsIHR5cGUpIHtcbiAgICAgIGlmIChpc0V4cG9ydERlZmF1bHRDbGFzcyhuZXh0Tm9kZSkgfHwgaXNFeHBvcnROYW1lQ2xhc3MobmV4dE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTm9kZSA9IG5leHROb2RlLmRlY2xhcmF0aW9uO1xuXG4gICAgICAgIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihjbGFzc05vZGUpKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBjbGFzc05vZGUuZGVjb3JhdG9yc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihuZXh0Tm9kZSkpIHtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICAgIHx8IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBsaW5lRGlmZmVyZW5jZSAhPT0gRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCkge1xuICAgICAgY29uc3QgbGluZURpZmZlcmVuY2UgPSBnZXRMaW5lRGlmZmVyZW5jZShub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICBjb25zdCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPSBvcHRpb25zLmNvdW50ICsgMTtcblxuICAgICAgaWYgKGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFKSB7XG4gICAgICAgIGxldCBjb2x1bW4gPSBub2RlLmxvYy5zdGFydC5jb2x1bW47XG5cbiAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgIT09IG5vZGUubG9jLmVuZC5saW5lKSB7XG4gICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBsb2M6IHtcbiAgICAgICAgICAgIGxpbmU6IG5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7b3B0aW9ucy5jb3VudH0gZW1wdHkgbGluZSR7b3B0aW9ucy5jb3VudCA+IDEgPyAncycgOiAnJ30gYWZ0ZXIgaW1wb3J0IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWNyZW1lbnRMZXZlbCgpIHtcbiAgICAgIGxldmVsLS07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tJbXBvcnQobm9kZSkge1xuICAgICAgY29uc3QgeyBwYXJlbnQgfSA9IG5vZGU7XG5cbiAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuYm9keSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHBhcmVudC5ib2R5LmluZGV4T2Yobm9kZSk7XG4gICAgICBjb25zdCBuZXh0Tm9kZSA9IHBhcmVudC5ib2R5W25vZGVQb3NpdGlvbiArIDFdO1xuICAgICAgY29uc3QgZW5kTGluZSA9IG5vZGUubG9jLmVuZC5saW5lO1xuICAgICAgbGV0IG5leHRDb21tZW50O1xuXG4gICAgICBpZiAodHlwZW9mIHBhcmVudC5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucy5jb25zaWRlckNvbW1lbnRzKSB7XG4gICAgICAgIG5leHRDb21tZW50ID0gcGFyZW50LmNvbW1lbnRzLmZpbmQoKG8pID0+IG8ubG9jLnN0YXJ0LmxpbmUgPj0gZW5kTGluZSAmJiBvLmxvYy5zdGFydC5saW5lIDw9IGVuZExpbmUgKyBvcHRpb25zLmNvdW50ICsgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5pc0V4cG9ydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0Q29tbWVudCAmJiB0eXBlb2YgbmV4dENvbW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHROb2RlICYmIG5leHROb2RlLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKG5leHROb2RlLnR5cGUgIT09ICdUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uJyB8fCBuZXh0Tm9kZS5pc0V4cG9ydCkpIHtcbiAgICAgICAgY2hlY2tGb3JOZXdMaW5lKG5vZGUsIG5leHROb2RlLCAnaW1wb3J0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0ltcG9ydCxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAoaXNTdGF0aWNSZXF1aXJlKG5vZGUpICYmIGxldmVsID09PSAwKSB7XG4gICAgICAgICAgcmVxdWlyZUNhbGxzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgbG9nKCdleGl0IHByb2Nlc3NpbmcgZm9yJywgY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xuICAgICAgICBjb25zdCBzY29wZUJvZHkgPSBnZXRTY29wZUJvZHkoY29udGV4dC5nZXRTY29wZSgpKTtcbiAgICAgICAgbG9nKCdnb3Qgc2NvcGU6Jywgc2NvcGVCb2R5KTtcblxuICAgICAgICByZXF1aXJlQ2FsbHMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkoc2NvcGVCb2R5LCBub2RlKTtcbiAgICAgICAgICBsb2coJ25vZGUgcG9zaXRpb24gaW4gc2NvcGU6Jywgbm9kZVBvc2l0aW9uKTtcblxuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb25dO1xuICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZW1lbnQgPSBzY29wZUJvZHlbbm9kZVBvc2l0aW9uICsgMV07XG4gICAgICAgICAgY29uc3QgbmV4dFJlcXVpcmVDYWxsID0gcmVxdWlyZUNhbGxzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobmV4dFJlcXVpcmVDYWxsICYmIGNvbnRhaW5zTm9kZU9yRXF1YWwoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0UmVxdWlyZUNhbGwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmV4dFN0YXRlbWVudCAmJiAoXG4gICAgICAgICAgICAgICFuZXh0UmVxdWlyZUNhbGxcbiAgICAgICAgICAgICAgfHwgIWNvbnRhaW5zTm9kZU9yRXF1YWwobmV4dFN0YXRlbWVudCwgbmV4dFJlcXVpcmVDYWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuXG4gICAgICAgICAgICBjaGVja0Zvck5ld0xpbmUoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0U3RhdGVtZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQmxvY2tTdGF0ZW1lbnQ6IGluY3JlbWVudExldmVsLFxuICAgICAgT2JqZWN0RXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBEZWNvcmF0b3I6IGluY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Jsb2NrU3RhdGVtZW50OmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdPYmplY3RFeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdEZWNvcmF0b3I6ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 5cc9bd7861..c728eafed7 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-cycle.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-cycle.js @@ -4,18 +4,13 @@ */ var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _scc = require('../scc');var _scc2 = _interopRequireDefault(_scc); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importType = require('../core/importType'); var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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);}} var traversed = new Set(); -function routeString(route) { - return route.map(function (s) {return String(s.value) + ':' + String(s.loc.start.line);}).join('=>'); -} - module.exports = { meta: { type: 'suggestion', @@ -46,11 +41,6 @@ module.exports = { allowUnsafeDynamicCyclicDependency: { description: 'Allow cyclic dependency if there is at least one dynamic import in the chain', type: 'boolean', - 'default': false }, - - disableScc: { - description: 'When true, don\'t calculate a strongly-connected-components graph. SCC is used to reduce the time-complexity of cycle detection, but adds overhead.', - type: 'boolean', 'default': false } })] }, @@ -68,8 +58,6 @@ module.exports = { context);}return ignoreModule;}(); - var scc = options.disableScc ? {} : _scc2['default'].get(myPath, context); - function checkSourceValue(sourceNode, importer) { if (ignoreModule(sourceNode.value)) { return; // ignore external modules @@ -96,7 +84,7 @@ module.exports = { return; // ignore type imports } - var imported = _builder2['default'].get(sourceNode.value, context); + var imported = _ExportMap2['default'].get(sourceNode.value, context); if (imported == null) { return; // no-unresolved territory @@ -106,16 +94,6 @@ module.exports = { return; // no-self-import territory } - /* If we're in the same Strongly Connected Component, - * Then there exists a path from each node in the SCC to every other node in the SCC, - * Then there exists at least one path from them to us and from us to them, - * Then we have a cycle between us. - */ - var hasDependencyCycle = options.disableScc || scc[myPath] === scc[imported.path]; - if (!hasDependencyCycle) { - return; - } - var untraversed = [{ mget: function () {function mget() {return imported;}return mget;}(), route: [] }]; function detectCycle(_ref2) {var mget = _ref2.mget,route = _ref2.route; var m = mget(); @@ -124,9 +102,6 @@ module.exports = { traversed.add(m.path);var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = m.imports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref3 = _step.value;var _ref4 = _slicedToArray(_ref3, 2);var path = _ref4[0];var _ref4$ = _ref4[1];var getter = _ref4$.getter;var declarations = _ref4$.declarations; - // If we're in different SCCs, we can't have a circular dependency - if (!options.disableScc && scc[myPath] !== scc[path]) {continue;} - if (traversed.has(path)) {continue;} var toTraverse = [].concat(_toConsumableArray(declarations)).filter(function (_ref5) {var source = _ref5.source,isOnlyImportingTypes = _ref5.isOnlyImportingTypes;return !ignoreModule(source.value) // Ignore only type imports @@ -175,4 +150,9 @@ module.exports = { }return ProgramExit;}() }); }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJyb3V0ZVN0cmluZyIsInJvdXRlIiwibWFwIiwicyIsInZhbHVlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwibWF4RGVwdGgiLCJhbnlPZiIsIm1pbmltdW0iLCJpZ25vcmVFeHRlcm5hbCIsImFsbG93VW5zYWZlRHluYW1pY0N5Y2xpY0RlcGVuZGVuY3kiLCJkaXNhYmxlU2NjIiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJzY2MiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwiZ2V0IiwiY2hlY2tTb3VyY2VWYWx1ZSIsInNvdXJjZU5vZGUiLCJpbXBvcnRlciIsImNhbGxlZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJpbXBvcnRlZCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJwYXRoIiwiaGFzRGVwZW5kZW5jeUN5Y2xlIiwidW50cmF2ZXJzZWQiLCJtZ2V0IiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiT2JqZWN0IiwiYXNzaWduIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJzb0JBQUE7Ozs7O0FBS0Es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L0IsUUFBZixFQUF5QjhCLE9BQXpCO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsYUFBT0UsT0FBT0MsTUFBUCxDQUFjLGdDQUFjbkMsZ0JBQWQsRUFBZ0NYLFFBQVFJLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBaEMsQ0FBZCxFQUFtRTtBQUN4RSxzQkFEd0Usc0NBQ3ZEO0FBQ2YvQixzQkFBVTBFLEtBQVY7QUFDRCxXQUh1RSx3QkFBbkUsQ0FBUDs7QUFLRCxLQTlKYyxtQkFBakIiLCJmaWxlIjoibm8tY3ljbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG5vIGltcG9ydGVkIG1vZHVsZSBpbXBvcnRzIHRoZSBsaW50ZWQgbW9kdWxlLlxuICogQGF1dGhvciBCZW4gTW9zaGVyXG4gKi9cblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIGZyb20gJy4uL3NjYyc7XG5pbXBvcnQgeyBpc0V4dGVybmFsTW9kdWxlIH0gZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCB0cmF2ZXJzZWQgPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBhIG1vZHVsZSBmcm9tIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEgZGVwZW5kZW5jeSBwYXRoIGJhY2sgdG8gaXRzZWxmLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWN5Y2xlJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFttYWtlT3B0aW9uc1NjaGVtYSh7XG4gICAgICBtYXhEZXB0aDoge1xuICAgICAgICBhbnlPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWF4aW11bSBkZXBlbmRlbmN5IGRlcHRoIHRvIHRyYXZlcnNlJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnVtOiBbJ+KIniddLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpZ25vcmVFeHRlcm5hbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ2lnbm9yZSBleHRlcm5hbCBtb2R1bGVzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxsb3cgY3ljbGljIGRlcGVuZGVuY3kgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGR5bmFtaWMgaW1wb3J0IGluIHRoZSBjaGFpbicsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVNjYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZW4gdHJ1ZSwgZG9uXFwndCBjYWxjdWxhdGUgYSBzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyBncmFwaC4gU0NDIGlzIHVzZWQgdG8gcmVkdWNlIHRoZSB0aW1lLWNvbXBsZXhpdHkgb2YgY3ljbGUgZGV0ZWN0aW9uLCBidXQgYWRkcyBvdmVyaGVhZC4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBjb25zdCBzY2MgPSBvcHRpb25zLmRpc2FibGVTY2MgPyB7fSA6IFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZ2V0KG15UGF0aCwgY29udGV4dCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICAvKiBJZiB3ZSdyZSBpbiB0aGUgc2FtZSBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50LFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYSBwYXRoIGZyb20gZWFjaCBub2RlIGluIHRoZSBTQ0MgdG8gZXZlcnkgb3RoZXIgbm9kZSBpbiB0aGUgU0NDLFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lIHBhdGggZnJvbSB0aGVtIHRvIHVzIGFuZCBmcm9tIHVzIHRvIHRoZW0sXG4gICAgICAgKiBUaGVuIHdlIGhhdmUgYSBjeWNsZSBiZXR3ZWVuIHVzLlxuICAgICAgICovXG4gICAgICBjb25zdCBoYXNEZXBlbmRlbmN5Q3ljbGUgPSBvcHRpb25zLmRpc2FibGVTY2MgfHwgc2NjW215UGF0aF0gPT09IHNjY1tpbXBvcnRlZC5wYXRoXTtcbiAgICAgIGlmICghaGFzRGVwZW5kZW5jeUN5Y2xlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW50cmF2ZXJzZWQgPSBbeyBtZ2V0OiAoKSA9PiBpbXBvcnRlZCwgcm91dGU6IFtdIH1dO1xuICAgICAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGUoeyBtZ2V0LCByb3V0ZSB9KSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZ2V0KCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKG0ucGF0aCkpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRyYXZlcnNlZC5hZGQobS5wYXRoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCB7IGdldHRlciwgZGVjbGFyYXRpb25zIH1dIG9mIG0uaW1wb3J0cykge1xuICAgICAgICAgIC8vIElmIHdlJ3JlIGluIGRpZmZlcmVudCBTQ0NzLCB3ZSBjYW4ndCBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlU2NjICYmIHNjY1tteVBhdGhdICE9PSBzY2NbcGF0aF0pIHsgY29udGludWU7IH1cblxuICAgICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKHBhdGgpKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi5kZWNsYXJhdGlvbnNdLmZpbHRlcigoeyBzb3VyY2UsIGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpZ25vcmVNb2R1bGUoc291cmNlLnZhbHVlKVxuICAgICAgICAgICAgLy8gSWdub3JlIG9ubHkgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgICAmJiAhaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8qXG4gICAgICAgICAgSWYgY3ljbGljIGRlcGVuZGVuY3kgaXMgYWxsb3dlZCB2aWEgZHluYW1pYyBpbXBvcnQsIHNraXAgY2hlY2tpbmcgaWYgYW55IG1vZHVsZSBpcyBpbXBvcnRlZCBkeW5hbWljYWxseVxuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeSAmJiB0b1RyYXZlcnNlLnNvbWUoKGQpID0+IGQuZHluYW1pYykpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgIE9ubHkgcmVwb3J0IGFzIGEgY3ljbGUgaWYgdGhlcmUgYXJlIGFueSBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGNvbnNpZGVyZWQgYnlcbiAgICAgICAgICB0aGUgcnVsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICAgICAgICBhLnRzOlxuICAgICAgICAgIGltcG9ydCB7IGZvbyB9IGZyb20gJy4vYicgLy8gc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBhcyBhIGN5Y2xlXG5cbiAgICAgICAgICBiLnRzOlxuICAgICAgICAgIGltcG9ydCB0eXBlIHsgQmFyIH0gZnJvbSAnLi9hJ1xuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBhdGggPT09IG15UGF0aCAmJiB0b1RyYXZlcnNlLmxlbmd0aCA+IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgICBpZiAocm91dGUubGVuZ3RoICsgMSA8IG1heERlcHRoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgc291cmNlIH0gb2YgdG9UcmF2ZXJzZSkge1xuICAgICAgICAgICAgICB1bnRyYXZlcnNlZC5wdXNoKHsgbWdldDogZ2V0dGVyLCByb3V0ZTogcm91dGUuY29uY2F0KHNvdXJjZSkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh1bnRyYXZlcnNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB1bnRyYXZlcnNlZC5zaGlmdCgpOyAvLyBiZnMhXG4gICAgICAgIGlmIChkZXRlY3RDeWNsZShuZXh0KSkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXh0LnJvdXRlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYERlcGVuZGVuY3kgY3ljbGUgdmlhICR7cm91dGVTdHJpbmcobmV4dC5yb3V0ZSl9YFxuICAgICAgICAgICAgOiAnRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZC4nO1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltcG9ydGVyLCBtZXNzYWdlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtb2R1bGVWaXNpdG9yKGNoZWNrU291cmNlVmFsdWUsIGNvbnRleHQub3B0aW9uc1swXSksIHtcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICB0cmF2ZXJzZWQuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG59O1xuIl19 \ No newline at end of file + + +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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsIm1heERlcHRoIiwiYW55T2YiLCJtaW5pbXVtIiwiaWdub3JlRXh0ZXJuYWwiLCJhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5IiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJjaGVja1NvdXJjZVZhbHVlIiwic291cmNlTm9kZSIsImltcG9ydGVyIiwidmFsdWUiLCJjYWxsZWUiLCJpbXBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5IiwiaW1wb3J0ZWQiLCJFeHBvcnRzIiwiZ2V0IiwicGF0aCIsInVudHJhdmVyc2VkIiwibWdldCIsInJvdXRlIiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicm91dGVTdHJpbmciLCJyZXBvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJjbGVhciIsIm1hcCIsInMiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJqb2luIl0sIm1hcHBpbmdzIjoic29CQUFBOzs7OztBQUtBLHNEO0FBQ0EseUM7QUFDQTtBQUNBLGtFO0FBQ0EscUM7O0FBRUEsSUFBTUEsWUFBWSxJQUFJQyxHQUFKLEVBQWxCOztBQUVBQyxPQUFPQyxPQUFQLEdB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TUFBWixHQUFxQixDQUE1QixFQUErQjtBQUM3QixjQUFNRyxPQUFPcEIsWUFBWXFCLEtBQVosRUFBYixDQUQ2QixDQUNLO0FBQ2xDLGNBQUlsQixZQUFZaUIsSUFBWixDQUFKLEVBQXVCO0FBQ3JCLGdCQUFNRSxVQUFVRixLQUFLbEIsS0FBTCxDQUFXZSxNQUFYLEdBQW9CLENBQXBCO0FBQ1lNLHdCQUFZSCxLQUFLbEIsS0FBakIsQ0FEWjtBQUVaLHdDQUZKO0FBR0F0QixvQkFBUTRDLE1BQVIsQ0FBZWxDLFFBQWYsRUFBeUJnQyxPQUF6QjtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUVELGFBQU9HLE9BQU9DLE1BQVAsQ0FBYyxnQ0FBY3RDLGdCQUFkLEVBQWdDUixRQUFRSSxPQUFSLENBQWdCLENBQWhCLENBQWhDLENBQWQsRUFBbUU7QUFDeEUsc0JBRHdFLHNDQUN2RDtBQUNmckIsc0JBQVVnRSxLQUFWO0FBQ0QsV0FIdUUsd0JBQW5FLENBQVA7O0FBS0QsS0ExSWMsbUJBQWpCOzs7QUE2SUEsU0FBU0osV0FBVCxDQUFxQnJCLEtBQXJCLEVBQTRCO0FBQzFCLFNBQU9BLE1BQU0wQixHQUFOLENBQVUsVUFBQ0MsQ0FBRCxpQkFBVUEsRUFBRXRDLEtBQVosaUJBQXFCc0MsRUFBRUMsR0FBRixDQUFNQyxLQUFOLENBQVlDLElBQWpDLEdBQVYsRUFBbURDLElBQW5ELENBQXdELElBQXhELENBQVA7QUFDRCIsImZpbGUiOiJuby1jeWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbm8gaW1wb3J0ZWQgbW9kdWxlIGltcG9ydHMgdGhlIGxpbnRlZCBtb2R1bGUuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxNb2R1bGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmNvbnN0IHRyYXZlcnNlZCA9IG5ldyBTZXQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgYSBtb2R1bGUgZnJvbSBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBhIGRlcGVuZGVuY3kgcGF0aCBiYWNrIHRvIGl0c2VsZi4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1jeWNsZScpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbbWFrZU9wdGlvbnNTY2hlbWEoe1xuICAgICAgbWF4RGVwdGg6IHtcbiAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ21heGltdW0gZGVwZW5kZW5jeSBkZXB0aCB0byB0cmF2ZXJzZScsXG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW51bTogWyfiiJ4nXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgaWdub3JlRXh0ZXJuYWw6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgZXh0ZXJuYWwgbW9kdWxlcycsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93IGN5Y2xpYyBkZXBlbmRlbmN5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkeW5hbWljIGltcG9ydCBpbiB0aGUgY2hhaW4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydHMuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bnRyYXZlcnNlZCA9IFt7IG1nZXQ6ICgpID0+IGltcG9ydGVkLCByb3V0ZTogW10gfV07XG4gICAgICBmdW5jdGlvbiBkZXRlY3RDeWNsZSh7IG1nZXQsIHJvdXRlIH0pIHtcbiAgICAgICAgY29uc3QgbSA9IG1nZXQoKTtcbiAgICAgICAgaWYgKG0gPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMobS5wYXRoKSkgeyByZXR1cm47IH1cbiAgICAgICAgdHJhdmVyc2VkLmFkZChtLnBhdGgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHsgZ2V0dGVyLCBkZWNsYXJhdGlvbnMgfV0gb2YgbS5pbXBvcnRzKSB7XG4gICAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMocGF0aCkpIHsgY29udGludWU7IH1cbiAgICAgICAgICBjb25zdCB0b1RyYXZlcnNlID0gWy4uLmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IHNvdXJjZSwgaXNPbmx5SW1wb3J0aW5nVHlwZXMgfSkgPT4gIWlnbm9yZU1vZHVsZShzb3VyY2UudmFsdWUpXG4gICAgICAgICAgICAvLyBJZ25vcmUgb25seSB0eXBlIGltcG9ydHNcbiAgICAgICAgICAgICYmICFpc09ubHlJbXBvcnRpbmdUeXBlcyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLypcbiAgICAgICAgICBJZiBjeWNsaWMgZGVwZW5kZW5jeSBpcyBhbGxvd2VkIHZpYSBkeW5hbWljIGltcG9ydCwgc2tpcCBjaGVja2luZyBpZiBhbnkgbW9kdWxlIGlzIGltcG9ydGVkIGR5bmFtaWNhbGx5XG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIHRvVHJhdmVyc2Uuc29tZSgoZCkgPT4gZC5keW5hbWljKSkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8qXG4gICAgICAgICAgT25seSByZXBvcnQgYXMgYSBjeWNsZSBpZiB0aGVyZSBhcmUgYW55IGltcG9ydCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgY29uc2lkZXJlZCBieVxuICAgICAgICAgIHRoZSBydWxlLiBGb3IgZXhhbXBsZTpcblxuICAgICAgICAgIGEudHM6XG4gICAgICAgICAgaW1wb3J0IHsgZm9vIH0gZnJvbSAnLi9iJyAvLyBzaG91bGQgbm90IGJlIHJlcG9ydGVkIGFzIGEgY3ljbGVcblxuICAgICAgICAgIGIudHM6XG4gICAgICAgICAgaW1wb3J0IHR5cGUgeyBCYXIgfSBmcm9tICcuL2EnXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAocGF0aCA9PT0gbXlQYXRoICYmIHRvVHJhdmVyc2UubGVuZ3RoID4gMCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAgIGlmIChyb3V0ZS5sZW5ndGggKyAxIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBzb3VyY2UgfSBvZiB0b1RyYXZlcnNlKSB7XG4gICAgICAgICAgICAgIHVudHJhdmVyc2VkLnB1c2goeyBtZ2V0OiBnZXR0ZXIsIHJvdXRlOiByb3V0ZS5jb25jYXQoc291cmNlKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHVudHJhdmVyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHVudHJhdmVyc2VkLnNoaWZ0KCk7IC8vIGJmcyFcbiAgICAgICAgaWYgKGRldGVjdEN5Y2xlKG5leHQpKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5leHQucm91dGUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgRGVwZW5kZW5jeSBjeWNsZSB2aWEgJHtyb3V0ZVN0cmluZyhuZXh0LnJvdXRlKX1gXG4gICAgICAgICAgICA6ICdEZXBlbmRlbmN5IGN5Y2xlIGRldGVjdGVkLic7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1wb3J0ZXIsIG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgY29udGV4dC5vcHRpb25zWzBdKSwge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIHRyYXZlcnNlZC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuIl19 \ 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 27a40843fe..3aea5b5ca0 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js @@ -1,6 +1,5 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} function message(deprecation) { @@ -32,7 +31,7 @@ module.exports = { if (node.type !== 'ImportDeclaration') {return;} if (node.source == null) {return;} // local export, ignore - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null) {return;} var moduleDeprecation = imports.doc && imports.doc.tags.find(function (t) {return t.title === 'deprecated';}); @@ -115,7 +114,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { // ignore computed parts for now if (dereference.computed) {return;} @@ -136,4 +135,4 @@ module.exports = { }return MemberExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsIkV4cG9ydE1hcCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSwrQztBQUNBLHlDO0FBQ0EscUM7O0FBRUEsU0FBU0EsT0FBVCxDQUFpQkMsV0FBakIsRUFBOEI7QUFDNUIseUJBQW9CQSxZQUFZQyxXQUFaLGlCQUErQkQsWUFBWUMsV0FBM0MsSUFBMkQsR0FBL0U7QUFDRDs7QUFFRCxTQUFTQyxjQUFULENBQXdCQyxRQUF4QixFQUFrQztBQUNoQyxNQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDQSxTQUFTQyxHQUEzQixFQUFnQyxDQUFFLE9BQVM7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RUFBa0UsQ0FBRSxPQUFTOztBQUU3RTtBQUNBLGdCQUFJRSxZQUFZdEIsV0FBV00sR0FBWCxDQUFleUIsWUFBWUMsTUFBWixDQUFtQlosSUFBbEMsQ0FBaEI7QUFDQSxnQkFBTWEsV0FBVyxDQUFDRixZQUFZQyxNQUFaLENBQW1CWixJQUFwQixDQUFqQjtBQUNBO0FBQ0EsbUJBQU9FLHFCQUFxQlksc0JBQXJCLElBQWtDSCxZQUFZeEMsSUFBWixLQUFxQixrQkFBOUQsRUFBa0Y7QUFDaEY7QUFDQSxrQkFBSXdDLFlBQVlJLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1yRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0csSUFBVCxDQUFjTCxZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgRXhwb3J0TWFwIGZyb20gJy4uL2V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gbWVzc2FnZShkZXByZWNhdGlvbikge1xuICByZXR1cm4gYERlcHJlY2F0ZWQke2RlcHJlY2F0aW9uLmRlc2NyaXB0aW9uID8gYDogJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbn1gIDogJy4nfWA7XG59XG5cbmZ1bmN0aW9uIGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKSB7XG4gIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLmRvYykgeyByZXR1cm47IH1cblxuICByZXR1cm4gbWV0YWRhdGEuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGltcG9ydGVkIG5hbWVzIG1hcmtlZCB3aXRoIGBAZGVwcmVjYXRlZGAgZG9jdW1lbnRhdGlvbiB0YWcuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZGVwcmVjYXRlZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcHJlY2F0ZWQgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7IHJldHVybjsgfVxuICAgICAgaWYgKG5vZGUuc291cmNlID09IG51bGwpIHsgcmV0dXJuOyB9IC8vIGxvY2FsIGV4cG9ydCwgaWdub3JlXG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBtb2R1bGVEZXByZWNhdGlvbiA9IGltcG9ydHMuZG9jICYmIGltcG9ydHMuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbiAgICAgIGlmIChtb2R1bGVEZXByZWNhdGlvbikge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2U6IG1lc3NhZ2UobW9kdWxlRGVwcmVjYXRpb24pIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBsZXQgaW1wb3J0ZWQ7IGxldCBsb2NhbDtcbiAgICAgICAgc3dpdGNoIChpbS50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOiB7XG4gICAgICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KGltLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydFNwZWNpZmllcic6XG4gICAgICAgICAgICBpbXBvcnRlZCA9IGltLmltcG9ydGVkLm5hbWU7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjsgLy8gY2FuJ3QgaGFuZGxlIHRoaXMgb25lXG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bmtub3duIHRoaW5nIGNhbid0IGJlIGRlcHJlY2F0ZWRcbiAgICAgICAgY29uc3QgZXhwb3J0ZWQgPSBpbXBvcnRzLmdldChpbXBvcnRlZCk7XG4gICAgICAgIGlmIChleHBvcnRlZCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGNhcHR1cmUgaW1wb3J0IG9mIGRlZXAgbmFtZXNwYWNlXG4gICAgICAgIGlmIChleHBvcnRlZC5uYW1lc3BhY2UpIHsgbmFtZXNwYWNlcy5zZXQobG9jYWwsIGV4cG9ydGVkLm5hbWVzcGFjZSk7IH1cblxuICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKGltcG9ydHMuZ2V0KGltcG9ydGVkKSk7XG4gICAgICAgIGlmICghZGVwcmVjYXRpb24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBpbSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG5cbiAgICAgICAgZGVwcmVjYXRlZC5zZXQobG9jYWwsIGRlcHJlY2F0aW9uKTtcblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFByb2dyYW06ICh7IGJvZHkgfSkgPT4gYm9keS5mb3JFYWNoKGNoZWNrU3BlY2lmaWVycyksXG5cbiAgICAgIElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG5vZGUucGFyZW50LnByb3BlcnR5ID09PSBub2RlKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBoYW5kbGVkIGJ5IE1lbWJlckV4cHJlc3Npb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBzcGVjaWZpZXIgaWRlbnRpZmllcnNcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUuc2xpY2UoMCwgNikgPT09ICdJbXBvcnQnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghZGVwcmVjYXRlZC5oYXMobm9kZS5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBub2RlLm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGVkLmdldChub2RlLm5hbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKGRlcmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5vYmplY3QudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGNvbXB1dGVkIHBhcnRzIGZvciBub3dcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7IGJyZWFrOyB9XG4gICAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihtZXRhZGF0YSk7XG5cbiAgICAgICAgICBpZiAoZGVwcmVjYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogZGVyZWZlcmVuY2UucHJvcGVydHksIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IG1ldGFkYXRhLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSx5QztBQUNBLHFDOztBQUVBLFNBQVNBLE9BQVQsQ0FBaUJDLFdBQWpCLEVBQThCO0FBQzVCLHlCQUFvQkEsWUFBWUMsV0FBWixpQkFBK0JELFlBQVlDLFdBQTNDLElBQTJELEdBQS9FO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0MsQ0FBRSxPQUFTOztBQUUzQyxTQUFPRCxTQUFTQyxHQUFULENBQWFD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SUUsWUFBWXRCLFdBQVdNLEdBQVgsQ0FBZXlCLFlBQVlDLE1BQVosQ0FBbUJaLElBQWxDLENBQWhCO0FBQ0EsZ0JBQU1hLFdBQVcsQ0FBQ0YsWUFBWUMsTUFBWixDQUFtQlosSUFBcEIsQ0FBakI7QUFDQTtBQUNBLG1CQUFPRSxxQkFBcUJqQixzQkFBckIsSUFBZ0MwQixZQUFZeEMsSUFBWixLQUFxQixrQkFBNUQsRUFBZ0Y7QUFDOUU7QUFDQSxrQkFBSXdDLFlBQVlHLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1wRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0UsSUFBVCxDQUFjSixZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIG1lc3NhZ2UoZGVwcmVjYXRpb24pIHtcbiAgcmV0dXJuIGBEZXByZWNhdGVkJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbiA/IGA6ICR7ZGVwcmVjYXRpb24uZGVzY3JpcHRpb259YCA6ICcuJ31gO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGlvbihtZXRhZGF0YSkge1xuICBpZiAoIW1ldGFkYXRhIHx8ICFtZXRhZGF0YS5kb2MpIHsgcmV0dXJuOyB9XG5cbiAgcmV0dXJuIG1ldGFkYXRhLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBpbXBvcnRlZCBuYW1lcyBtYXJrZWQgd2l0aCBgQGRlcHJlY2F0ZWRgIGRvY3VtZW50YXRpb24gdGFnLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWRlcHJlY2F0ZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXByZWNhdGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMobm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cbiAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBsb2NhbCBleHBvcnQsIGlnbm9yZVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgbW9kdWxlRGVwcmVjYXRpb24gPSBpbXBvcnRzLmRvYyAmJiBpbXBvcnRzLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG4gICAgICBpZiAobW9kdWxlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBtZXNzYWdlKG1vZHVsZURlcHJlY2F0aW9uKSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgbGV0IGltcG9ydGVkOyBsZXQgbG9jYWw7XG4gICAgICAgIHN3aXRjaCAoaW0udHlwZSkge1xuXG4gICAgICAgICAgY2FzZSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzoge1xuICAgICAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBuYW1lc3BhY2VzLnNldChpbS5sb2NhbC5uYW1lLCBpbXBvcnRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgICAgIGltcG9ydGVkID0gJ2RlZmF1bHQnO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSBpbS5pbXBvcnRlZC5uYW1lO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OiByZXR1cm47IC8vIGNhbid0IGhhbmRsZSB0aGlzIG9uZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5rbm93biB0aGluZyBjYW4ndCBiZSBkZXByZWNhdGVkXG4gICAgICAgIGNvbnN0IGV4cG9ydGVkID0gaW1wb3J0cy5nZXQoaW1wb3J0ZWQpO1xuICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjYXB0dXJlIGltcG9ydCBvZiBkZWVwIG5hbWVzcGFjZVxuICAgICAgICBpZiAoZXhwb3J0ZWQubmFtZXNwYWNlKSB7IG5hbWVzcGFjZXMuc2V0KGxvY2FsLCBleHBvcnRlZC5uYW1lc3BhY2UpOyB9XG5cbiAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihpbXBvcnRzLmdldChpbXBvcnRlZCkpO1xuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogaW0sIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuXG4gICAgICAgIGRlcHJlY2F0ZWQuc2V0KGxvY2FsLCBkZXByZWNhdGlvbik7XG5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtOiAoeyBib2R5IH0pID0+IGJvZHkuZm9yRWFjaChjaGVja1NwZWNpZmllcnMpLFxuXG4gICAgICBJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJiBub2RlLnBhcmVudC5wcm9wZXJ0eSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybjsgLy8gaGFuZGxlZCBieSBNZW1iZXJFeHByZXNzaW9uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgc3BlY2lmaWVyIGlkZW50aWZpZXJzXG4gICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlLnNsaWNlKDAsIDYpID09PSAnSW1wb3J0JykgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWRlcHJlY2F0ZWQuaGFzKG5vZGUubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgbm9kZS5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRlZC5nZXQobm9kZS5uYW1lKSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgY29tcHV0ZWQgcGFydHMgZm9yIG5vd1xuICAgICAgICAgIGlmIChkZXJlZmVyZW5jZS5jb21wdXRlZCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEpIHsgYnJlYWs7IH1cbiAgICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKTtcblxuICAgICAgICAgIGlmIChkZXByZWNhdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3Rhc2ggYW5kIHBvcFxuICAgICAgICAgIG5hbWVwYXRoLnB1c2goZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgbmFtZXNwYWNlID0gbWV0YWRhdGEubmFtZXNwYWNlO1xuICAgICAgICAgIGRlcmVmZXJlbmNlID0gZGVyZWZlcmVuY2UucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 585a17d873..8b512d083b 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js @@ -9,68 +9,28 @@ try { typescriptPkg = require('typescript/package.json'); // eslint-disable-line import/no-extraneous-dependencies } catch (e) {/**/} -function isPunctuator(node, value) { - return node.type === 'Punctuator' && node.value === value; -} - -// Get the name of the default import of `node`, if any. -function getDefaultImportName(node) { - var defaultSpecifier = node.specifiers. - find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); - return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; -} - -// Checks whether `node` has a namespace import. -function hasNamespace(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); - return specifiers.length > 0; -} - -// Checks whether `node` has any non-default specifiers. -function hasSpecifiers(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); - return specifiers.length > 0; -} - -// Checks whether `node` has a comment (that ends) on the previous line or on -// the same line as `node` (starts). -function hasCommentBefore(node, sourceCode) { - return sourceCode.getCommentsBefore(node). - some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); -} - -// Checks whether `node` has a comment (that starts) on the same line as `node` -// (ends). -function hasCommentAfter(node, sourceCode) { - return sourceCode.getCommentsAfter(node). - some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); -} +function checkImports(imported, context) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + for (var _iterator = imported.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref = _step.value;var _ref2 = _slicedToArray(_ref, 2);var _module = _ref2[0];var nodes = _ref2[1]; + if (nodes.length > 1) { + var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( + nodes),first = _nodes[0],rest = _nodes.slice(1); + var sourceCode = context.getSourceCode(); + var fix = getFix(first, rest, sourceCode, context); -// Checks whether `node` has any comments _inside,_ except inside the `{...}` -// part (if any). -function hasCommentInsideNonSpecifiers(node, sourceCode) { - var tokens = sourceCode.getTokens(node); - var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); - var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); - // Slice away the first token, since we're no looking for comments _before_ - // `node` (only inside). If there's a `{...}` part, look for comments before - // the `{`, but not before the `}` (hence the `+1`s). - var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? - tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : - tokens.slice(1); - return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); -} + context.report({ + node: first.source, + message: message, + fix: fix // Attach the autofix (if any) to the first import. + });var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { -// It's not obvious what the user wants to do with comments associated with -// duplicate imports, so skip imports with comments when autofixing. -function hasProblematicComments(node, sourceCode) { - return ( - hasCommentBefore(node, sourceCode) || - hasCommentAfter(node, sourceCode) || - hasCommentInsideNonSpecifiers(node, sourceCode)); + for (var _iterator2 = rest[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; + context.report({ + node: node.source, + message: message }); + }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + } + }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } function getFix(first, rest, sourceCode, context) { @@ -132,7 +92,6 @@ function getFix(first, rest, sourceCode, context) { var shouldAddDefault = getDefaultImportName(first) == null && defaultImportNames.size === 1; var shouldAddSpecifiers = specifiers.length > 0; var shouldRemoveUnnecessary = unnecessaryImports.length > 0; - var preferInline = context.options[0] && context.options[0]['prefer-inline']; if (!(shouldAddDefault || shouldAddSpecifiers || shouldRemoveUnnecessary)) { return undefined; @@ -155,16 +114,17 @@ function getFix(first, rest, sourceCode, context) { specifiers.reduce( - function (_ref, specifier) {var _ref2 = _slicedToArray(_ref, 3),result = _ref2[0],needsComma = _ref2[1],existingIdentifiers = _ref2[2]; + function (_ref3, specifier) {var _ref4 = _slicedToArray(_ref3, 3),result = _ref4[0],needsComma = _ref4[1],existingIdentifiers = _ref4[2]; var isTypeSpecifier = specifier.importNode.importKind === 'type'; - // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. + var preferInline = context.options[0] && context.options[0]['prefer-inline']; + // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. if (preferInline && (!typescriptPkg || !_semver2['default'].satisfies(typescriptPkg.version, '>= 4.5'))) { throw new Error('Your version of TypeScript does not support inline type imports.'); } // Add *only* the new identifiers that don't already exist, and track any new identifiers so we don't add them again in the next loop - var _specifier$identifier = specifier.identifiers.reduce(function (_ref3, cur) {var _ref4 = _slicedToArray(_ref3, 2),text = _ref4[0],set = _ref4[1]; + var _specifier$identifier = specifier.identifiers.reduce(function (_ref5, cur) {var _ref6 = _slicedToArray(_ref5, 2),text = _ref6[0],set = _ref6[1]; var trimmed = cur.trim(); // Trim whitespace before/after to compare to our set of existing identifiers var curWithType = trimmed.length > 0 && preferInline && isTypeSpecifier ? 'type ' + String(cur) : cur; if (existingIdentifiers.has(trimmed)) { @@ -186,18 +146,6 @@ function getFix(first, rest, sourceCode, context) { var fixes = []; - if (shouldAddSpecifiers && preferInline && first.importKind === 'type') { - // `import type {a} from './foo'` → `import {type a} from './foo'` - var typeIdentifierToken = tokens.find(function (token) {return token.type === 'Identifier' && token.value === 'type';}); - fixes.push(fixer.removeRange([typeIdentifierToken.range[0], typeIdentifierToken.range[1] + 1])); - - tokens. - filter(function (token) {return firstExistingIdentifiers.has(token.value);}). - forEach(function (identifier) { - fixes.push(fixer.replaceTextRange([identifier.range[0], identifier.range[1]], 'type ' + String(identifier.value))); - }); - } - if (shouldAddDefault && openBrace == null && shouldAddSpecifiers) { // `import './foo'` → `import def, {...} from './foo'` fixes.push( @@ -227,7 +175,7 @@ function getFix(first, rest, sourceCode, context) { } // Remove imports whose specifiers have been moved into the first import. - var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = specifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var specifier = _step.value; + var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = specifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var specifier = _step3.value; var importNode = specifier.importNode; fixes.push(fixer.remove(importNode)); @@ -241,7 +189,7 @@ function getFix(first, rest, sourceCode, context) { // Remove imports whose default import has been moved to the first import, // and side-effect-only imports that are unnecessary due to the first // import. - } catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = unnecessaryImports[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; + } catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try {for (var _iterator4 = unnecessaryImports[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; fixes.push(fixer.remove(node)); var charAfterImportRange = [node.range[1], node.range[1] + 1]; @@ -249,34 +197,74 @@ function getFix(first, rest, sourceCode, context) { if (charAfterImport === '\n') { fixes.push(fixer.removeRange(charAfterImportRange)); } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} return fixes; }; } -function checkImports(imported, context) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = imported.entries()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _ref5 = _step3.value;var _ref6 = _slicedToArray(_ref5, 2);var _module = _ref6[0];var nodes = _ref6[1]; - if (nodes.length > 1) { - var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( - nodes),first = _nodes[0],rest = _nodes.slice(1); - var sourceCode = context.getSourceCode(); - var fix = getFix(first, rest, sourceCode, context); +function isPunctuator(node, value) { + return node.type === 'Punctuator' && node.value === value; +} - context.report({ - node: first.source, - message: message, - fix: fix // Attach the autofix (if any) to the first import. - });var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try { +// Get the name of the default import of `node`, if any. +function getDefaultImportName(node) { + var defaultSpecifier = node.specifiers. + find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); + return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; +} - for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; - context.report({ - node: node.source, - message: message }); +// Checks whether `node` has a namespace import. +function hasNamespace(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); + return specifiers.length > 0; +} - }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} - } - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} +// Checks whether `node` has any non-default specifiers. +function hasSpecifiers(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); + return specifiers.length > 0; +} + +// It's not obvious what the user wants to do with comments associated with +// duplicate imports, so skip imports with comments when autofixing. +function hasProblematicComments(node, sourceCode) { + return ( + hasCommentBefore(node, sourceCode) || + hasCommentAfter(node, sourceCode) || + hasCommentInsideNonSpecifiers(node, sourceCode)); + +} + +// Checks whether `node` has a comment (that ends) on the previous line or on +// the same line as `node` (starts). +function hasCommentBefore(node, sourceCode) { + return sourceCode.getCommentsBefore(node). + some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); +} + +// Checks whether `node` has a comment (that starts) on the same line as `node` +// (ends). +function hasCommentAfter(node, sourceCode) { + return sourceCode.getCommentsAfter(node). + some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); +} + +// Checks whether `node` has any comments _inside,_ except inside the `{...}` +// part (if any). +function hasCommentInsideNonSpecifiers(node, sourceCode) { + var tokens = sourceCode.getTokens(node); + var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); + var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); + // Slice away the first token, since we're no looking for comments _before_ + // `node` (only inside). If there's a `{...}` part, look for comments before + // the `{`, but not before the `}` (hence the `+1`s). + var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? + tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : + tokens.slice(1); + return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); } module.exports = { @@ -363,4 +351,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImlzUHVuY3R1YXRvciIsIm5vZGUiLCJ2YWx1ZSIsInR5cGUiLCJnZXREZWZhdWx0SW1wb3J0TmFtZSIsImRlZmF1bHRTcGVjaWZpZXIiLCJzcGVjaWZpZXJzIiwiZmluZCIsInNwZWNpZmllciIsImxvY2FsIiwibmFtZSIsInVuZGVmaW5lZCIsImhhc05hbWVzcGFjZSIsImZpbHRlciIsImxlbmd0aCIsImhhc1NwZWNpZmllcnMiLCJoYXNDb21tZW50QmVmb3JlIiwic291cmNlQ29kZSIsImdldENvbW1lbnRzQmVmb3JlIiwic29tZSIsImNvbW1lbnQiLCJsb2MiLCJlbmQiLCJsaW5lIiwic3RhcnQiLCJoYXNDb21tZW50QWZ0ZXIiLCJnZXRDb21tZW50c0FmdGVyIiwiaGFzQ29tbWVudEluc2lkZU5vblNwZWNpZmllcnMiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsInRva2VuIiwiY2xvc2VCcmFjZUluZGV4Iiwic29tZVRva2VucyIsInNsaWNlIiwiY29uY2F0IiwiaGFzUHJvYmxlbWF0aWNDb21tZW50cyIsImdldEZpeCIsImZpcnN0IiwicmVzdCIsImNvbnRleHQiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJ4Iiwic2l6ZSIsInJlc3RXaXRob3V0Q29tbWVudHMiLCJtYXAiLCJvcGVuQnJhY2UiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInJhbmdlIiwic3BsaXQiLCJpc0VtcHR5IiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNob3VsZEFkZERlZmF1bHQiLCJzaG91bGRBZGRTcGVjaWZpZXJzIiwic2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkiLCJwcmVmZXJJbmxpbmUiLCJvcHRpb25zIiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwic2VtdmVyIiwic2F0aXNmaWVzIiwidmVyc2lvbiIsIkVycm9yIiwiY3VyIiwic2V0IiwidHJpbW1lZCIsImN1cldpdGhUeXBlIiwiaGFzIiwiYWRkIiwic3BlY2lmaWVyVGV4dCIsInVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzIiwic3BlY2lmaWVyc1RleHQiLCJmaXhlcyIsInR5cGVJZGVudGlmaWVyVG9rZW4iLCJwdXNoIiwicmVtb3ZlUmFuZ2UiLCJmb3JFYWNoIiwiaWRlbnRpZmllciIsInJlcGxhY2VUZXh0UmFuZ2UiLCJpbnNlcnRUZXh0QWZ0ZXIiLCJpbnNlcnRUZXh0QmVmb3JlIiwicmVtb3ZlIiwiY2hhckFmdGVySW1wb3J0UmFuZ2UiLCJjaGFyQWZ0ZXJJbXBvcnQiLCJzdWJzdHJpbmciLCJjaGVja0ltcG9ydHMiLCJpbXBvcnRlZCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsIm1lc3NhZ2UiLCJnZXRTb3VyY2VDb2RlIiwiZml4IiwicmVwb3J0Iiwic291cmNlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29uc2lkZXJRdWVyeVN0cmluZyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiIsImRlZmF1bHRSZXNvbHZlciIsInNvdXJjZVBhdGgiLCJyZXNvbHZlciIsInBhcnRzIiwibWF0Y2giLCJtb2R1bGVNYXBzIiwiTWFwIiwiZ2V0SW1wb3J0TWFwIiwibiIsInBhcmVudCIsIm5zSW1wb3J0ZWQiLCJkZWZhdWx0VHlwZXNJbXBvcnRlZCIsIm5hbWVkVHlwZXNJbXBvcnRlZCIsImdldCIsInNwZWMiLCJJbXBvcnREZWNsYXJhdGlvbiIsInJlc29sdmVkUGF0aCIsImltcG9ydE1hcCIsInZhbHVlcyJdLCJtYXBwaW5ncyI6InFvQkFBQSxzRDtBQUNBLGdDO0FBQ0EseUQ7O0FBRUEscUM7O0FBRUEsSUFBSUEsc0JBQUo7QUFDQSxJQUFJO0FBQ0ZBLGtCQUFnQkMsUUFBUSx5QkFBUixDQUFoQixDQURFLENBQ2tEO0FBQ3JELENBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVUsQ0FBRSxJQUFNOztBQUVwQixTQUFTQyxZQUFULENBQXNCQyxJQUF0QixFQUE0QkMsS0FBNUIsRUFBbUM7QUFDakMsU0FBT0QsS0FBS0UsSUFBTCxLQUFjLFlBQWQsSUFBOEJGLEtBQUtDLEtBQUwsS0FBZUEsS0FBcEQ7QUFDRDs7QUFFRDtBQUNBLFNBQVNFLG9CQUFULENBQThCSCxJQUE5QixFQUFvQztBQUNsQyxNQUFNSSxtQkFBbUJKLEtBQUtLLFVBQUw7QUFDdEJDLE1BRHNCLENBQ2pCLFVBQUNDLFNBQUQsVUFBZUEsVUFBVUwsSUFBVixLQUFtQix3QkFBbEMsRUFEaUIsQ0FBekI7QUFFQSxTQUFPRSxvQkFBb0IsSUFBcEIsR0FBMkJBLGlCQUFpQkksS0FBakIsQ0FBdUJDLElBQWxELEdBQXlEQyxTQUFoRTtBQUNEOztBQUVEO0FBQ0EsU0FBU0MsWUFBVCxDQUFzQlgsSUFBdEIsRUFBNEI7QUFDMUIsTUFBTUssYUFBYUwsS0FBS0ssVUFBTDtBQUNoQk8sUUFEZ0IsQ0FDVCxVQUFDTCxTQUFELFVBQWVBLFVBQVVMLElBQVYsS0FBbUIsMEJBQWxDLEVBRFMsQ0FBbkI7QUFFQSxTQUFPRyxXQUFXUSxNQUFYLEdBQW9CLENBQTNCO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTQyxhQUFULENBQXVCZCxJQUF2QixFQUE2QjtBQUMzQixNQUFNSyxhQUFhTCxLQUFLSyxVQUFMO0FBQ2hCTyxRQURnQixDQUNULFVBQUNMLFNBQUQsVUFBZUEsVUFBVUwsSUFBVixLQUFtQixpQkFBbEMsRUFEUyxDQUFuQjtBQUVBLFNBQU9HLFdBQVdRLE1BQVgsR0FBb0IsQ0FBM0I7QUFDRDs7QUFFRDtBQUNBO0FBQ0EsU0FBU0UsZ0JBQVQsQ0FBMEJmLElBQTFCLEVBQWdDZ0IsVUFBaEMsRUFBNEM7QUFDMUMsU0FBT0EsV0FBV0MsaUJBQVgsQ0FBNkJqQixJQUE3QjtBQUNKa0IsTUFESSxDQUNDLFVBQUNDLE9BQUQsVUFBYUEsUUFBUUMsR0FBUixDQUFZQyxHQUFaLENBQWdCQyxJQUFoQixJQUF3QnRCLEtBQUtvQixHQUFMLENBQVNHLEtBQVQsQ0FBZUQsSUFBZixHQUFzQixDQUEzRCxFQURELENBQVA7QUFFRDs7QUFFRDtBQUNBO0FBQ0EsU0FBU0UsZUFBVCxDQUF5QnhCLElBQXpCLEVBQStCZ0IsVUFBL0IsRUFBMkM7QUFDekMsU0FBT0EsV0FBV1MsZ0JBQVgsQ0FBNEJ6QixJQUE1QjtBQUNKa0IsTUFESSxDQUNDLFVBQUNDLE9BQUQsVUFBYUEsUUFBUUMsR0FBUixDQUFZRyxLQUFaLENBQWtCRCxJQUFsQixLQUEyQnRCLEtBQUtvQixHQUFMLENBQVNDLEdBQVQsQ0FBYUMsSUFBckQsRUFERCxDQUFQO0FBRUQ7O0FBRUQ7QUFDQTtBQUNBLFNBQVNJLDZCQUFULENBQXVDMUIsSUFBdkMsRUFBNkNnQixVQUE3QyxFQUF5RDtBQUN2RCxNQUFNVyxTQUFTWCxXQUFXWSxTQUFYLENBQXFCNUIsSUFBckIsQ0FBZjtBQUNBLE1BQU02QixpQkFBaUJGLE9BQU9HLFNBQVAsQ0FBaUIsVUFBQ0MsS0FBRCxVQUFXaEMsYUFBYWdDLEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFqQixDQUF2QjtBQUNBLE1BQU1DLGtCQUFrQkwsT0FBT0csU0FBUCxDQUFpQixVQUFDQyxLQUFELFVBQVdoQyxhQUFhZ0MsS0FBYixFQUFvQixHQUFwQixDQUFYLEVBQWpCLENBQXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUUsYUFBYUosa0JBQWtCLENBQWxCLElBQXVCRyxtQkFBbUIsQ0FBMUM7QUFDZkwsU0FBT08sS0FBUCxDQUFhLENBQWIsRUFBZ0JMLGlCQUFpQixDQUFqQyxFQUFvQ00sTUFBcEMsQ0FBMkNSLE9BQU9PLEtBQVAsQ0FBYUYsa0JBQWtCLENBQS9CLENBQTNDLENBRGU7QUFFZkwsU0FBT08sS0FBUCxDQUFhLENBQWIsQ0FGSjtBQUdBLFNBQU9ELFdBQVdmLElBQVgsQ0FBZ0IsVUFBQ2EsS0FBRCxVQUFXZixXQUFXQyxpQkFBWCxDQUE2QmMsS0FBN0IsRUFBb0NsQixNQUFwQyxHQUE2QyxDQUF4RCxFQUFoQixDQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBLFNBQVN1QixzQkFBVCxDQUFnQ3BDLElBQWhDLEVBQXNDZ0IsVUFBdEMsRUFBa0Q7QUFDaEQ7QUFDRUQscUJBQWlCZixJQUFqQixFQUF1QmdCLFVBQXZCO0FBQ0dRLG9CQUFnQnhCLElBQWhCLEVBQXNCZ0IsVUFBdEIsQ0FESDtBQUVHVSxrQ0FBOEIxQixJQUE5QixFQUFvQ2dCLFVBQXBDLENBSEw7O0FBS0Q7O0FBRUQsU0FBU3FCLE1BQVQsQ0FBZ0JDLEtBQWhCLEVBQXVCQyxJQUF2QixFQUE2QnZCLFVBQTdCLEVBQXlDd0IsT0FBekMsRUFBa0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSSxPQUFPeEIsV0FBV0MsaUJBQWxCLEtBQXdDLFVBQTVDLEVBQXdEO0FBQ3RELFdBQU9QLFNBQVA7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUkwQix1QkFBdUJFLEtBQXZCLEVBQThCdEIsVUFBOUIsS0FBNkNMLGFBQWEyQixLQUFiLENBQWpELEVBQXNFO0FBQ3BFLFdBQU81QixTQUFQO0FBQ0Q7O0FBRUQsTUFBTStCLHFCQUFxQixJQUFJQyxHQUFKO0FBQ3pCLG1DQUFRLEdBQUdQLE1BQUgsQ0FBVUcsS0FBVixFQUFpQkMsUUFBUSxFQUF6QixDQUFSLEVBQXNDLFVBQUNJLENBQUQsVUFBT3hDLHFCQUFxQndDLENBQXJCLEtBQTJCLEVBQWxDLEVBQXRDLENBRHlCLENBQTNCOzs7QUFJQTtBQUNBO0FBQ0EsTUFBSUYsbUJBQW1CRyxJQUFuQixHQUEwQixDQUE5QixFQUFpQztBQUMvQixXQUFPbEMsU0FBUDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxNQUFNbUMsc0JBQXNCTixLQUFLM0IsTUFBTCxDQUFZLFVBQUNaLElBQUQsVUFBVSxDQUFDb0MsdUJBQXVCcEMsSUFBdkIsRUFBNkJnQixVQUE3QixDQUFELElBQTZDLENBQUNMLGFBQWFYLElBQWIsQ0FBeEQsRUFBWixDQUE1Qjs7QUFFQSxNQUFNSyxhQUFhd0M7QUFDaEJDLEtBRGdCLENBQ1osVUFBQzlDLElBQUQsRUFBVTtBQUNiLFFBQU0yQixTQUFTWCxXQUFXWSxTQUFYLENBQXFCNUIsSUFBckIsQ0FBZjtBQUNBLFFBQU0rQyxZQUFZcEIsT0FBT3JCLElBQVAsQ0FBWSxVQUFDeUIsS0FBRCxVQUFXaEMsYUFBYWdDLEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFaLENBQWxCO0FBQ0EsUUFBTWlCLGFBQWFyQixPQUFPckIsSUFBUCxDQUFZLFVBQUN5QixLQUFELFVBQVdoQyxhQUFhZ0MsS0FBYixFQUFvQixHQUFwQixDQUFYLEVBQVosQ0FBbkI7O0FBRUEsUUFBSWdCLGFBQWEsSUFBYixJQUFxQkMsY0FBYyxJQUF2QyxFQUE2QztBQUMzQyxhQUFPdEMsU0FBUDtBQUNEOztBQUVELFdBQU87QUFDTHVDLGtCQUFZakQsSUFEUDtBQUVMa0QsbUJBQWFsQyxXQUFXbUMsSUFBWCxDQUFnQmpCLEtBQWhCLENBQXNCYSxVQUFVSyxLQUFWLENBQWdCLENBQWhCLENBQXRCLEVBQTBDSixXQUFXSSxLQUFYLENBQWlCLENBQWpCLENBQTFDLEVBQStEQyxLQUEvRCxDQUFxRSxHQUFyRSxDQUZSLEVBRW1GO0FBQ3hGQyxlQUFTLENBQUN4QyxjQUFjZCxJQUFkLENBSEwsRUFBUDs7QUFLRCxHQWZnQjtBQWdCaEJZLFFBaEJnQixDQWdCVDJDLE9BaEJTLENBQW5COztBQWtCQSxNQUFNQyxxQkFBcUJYLG9CQUFvQmpDLE1BQXBCLENBQTJCLFVBQUNaLElBQUQsVUFBVSxDQUFDYyxjQUFjZCxJQUFkLENBQUQ7QUFDM0QsS0FBQ1csYUFBYVgsSUFBYixDQUQwRDtBQUUzRCxLQUFDSyxXQUFXYSxJQUFYLENBQWdCLFVBQUNYLFNBQUQsVUFBZUEsVUFBVTBDLFVBQVYsS0FBeUJqRCxJQUF4QyxFQUFoQixDQUZnRCxFQUEzQixDQUEzQjs7O0FBS0EsTUFBTXlELG1CQUFtQnRELHFCQUFxQm1DLEtBQXJCLEtBQStCLElBQS9CLElBQXVDRyxtQkFBbUJHLElBQW5CLEtBQTRCLENBQTVGO0FBQ0EsTUFBTWMsc0JBQXNCckQsV0FBV1EsTUFBWCxHQUFvQixDQUFoRDtBQUNBLE1BQU04QywwQkFBMEJILG1CQUFtQjNDLE1BQW5CLEdBQTRCLENBQTVEO0FBQ0EsTUFBTStDLGVBQWVwQixRQUFRcUIsT0FBUixDQUFnQixDQUFoQixLQUFzQnJCLFFBQVFxQixPQUFSLENBQWdCLENBQWhCLEVBQW1CLGVBQW5CLENBQTNDOztBQUVBLE1BQUksRUFBRUosb0JBQW9CQyxtQkFBcEIsSUFBMkNDLHVCQUE3QyxDQUFKLEVBQTJFO0FBQ3pFLFdBQU9qRCxTQUFQO0FBQ0Q7O0FBRUQsU0FBTyxVQUFDb0QsS0FBRCxFQUFXO0FBQ2hCLFFBQU1uQyxTQUFTWCxXQUFXWSxTQUFYLENBQXFCVSxLQUFyQixDQUFmO0FBQ0EsUUFBTVMsWUFBWXBCLE9BQU9yQixJQUFQLENBQVksVUFBQ3lCLEtBQUQsVUFBV2hDLGFBQWFnQyxLQUFiLEVBQW9CLEdBQXBCLENBQVgsRUFBWixDQUFsQjtBQUNBLFFBQU1pQixhQUFhckIsT0FBT3JCLElBQVAsQ0FBWSxVQUFDeUIsS0FBRCxVQUFXaEMsYUFBYWdDLEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFaLENBQW5CO0FBQ0EsUUFBTWdDLGFBQWEvQyxXQUFXZ0QsYUFBWCxDQUF5QjFCLEtBQXpCLENBQW5CLENBSmdCO0FBS1lHLHNCQUxaLEtBS1R3QixpQkFMUzs7QUFPaEIsUUFBTUMsd0JBQXdCbEIsY0FBYyxJQUFkLElBQXNCakQsYUFBYWlCLFdBQVdtRCxjQUFYLENBQTBCbkIsVUFBMUIsQ0FBYixFQUFvRCxHQUFwRCxDQUFwRDtBQUNBLFFBQU1vQixlQUFlLENBQUN0RCxjQUFjd0IsS0FBZCxDQUF0QjtBQUNBLFFBQU0rQiwyQkFBMkJEO0FBQzdCLFFBQUkxQixHQUFKLEVBRDZCO0FBRTdCLFFBQUlBLEdBQUosQ0FBUTFCLFdBQVdtQyxJQUFYLENBQWdCakIsS0FBaEIsQ0FBc0JhLFVBQVVLLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsRUFBMENKLFdBQVdJLEtBQVgsQ0FBaUIsQ0FBakIsQ0FBMUM7QUFDUEMsU0FETyxDQUNELEdBREM7QUFFUFAsT0FGTyxDQUVILFVBQUNILENBQUQsVUFBT0EsRUFBRTJCLElBQUYsRUFBUCxFQUZHLENBQVIsQ0FGSixDQVRnQjs7O0FBZ0JTakUsZUFBV2tFLE1BQVg7QUFDdkIsb0JBQTRDaEUsU0FBNUMsRUFBMEQscUNBQXhEaUUsTUFBd0QsWUFBaERDLFVBQWdELFlBQXBDQyxtQkFBb0M7QUFDeEQsVUFBTUMsa0JBQWtCcEUsVUFBVTBDLFVBQVYsQ0FBcUIyQixVQUFyQixLQUFvQyxNQUE1RDs7QUFFQTtBQUNBLFVBQUloQixpQkFBaUIsQ0FBQ2hFLGFBQUQsSUFBa0IsQ0FBQ2lGLG9CQUFPQyxTQUFQLENBQWlCbEYsY0FBY21GLE9BQS9CLEVBQXdDLFFBQXhDLENBQXBDLENBQUosRUFBNEY7QUFDMUYsY0FBTSxJQUFJQyxLQUFKLENBQVUsa0VBQVYsQ0FBTjtBQUNEOztBQUVEO0FBUndELGtDQVNKekUsVUFBVTJDLFdBQVYsQ0FBc0JxQixNQUF0QixDQUE2QixpQkFBY1UsR0FBZCxFQUFzQixzQ0FBcEI5QixJQUFvQixZQUFkK0IsR0FBYztBQUNyRyxZQUFNQyxVQUFVRixJQUFJWCxJQUFKLEVBQWhCLENBRHFHLENBQ3pFO0FBQzVCLFlBQU1jLGNBQWNELFFBQVF0RSxNQUFSLEdBQWlCLENBQWpCLElBQXNCK0MsWUFBdEIsSUFBc0NlLGVBQXRDLG9CQUFnRU0sR0FBaEUsSUFBd0VBLEdBQTVGO0FBQ0EsWUFBSVAsb0JBQW9CVyxHQUFwQixDQUF3QkYsT0FBeEIsQ0FBSixFQUFzQztBQUNwQyxpQkFBTyxDQUFDaEMsSUFBRCxFQUFPK0IsR0FBUCxDQUFQO0FBQ0Q7QUFDRCxlQUFPLENBQUMvQixLQUFLdEMsTUFBTCxHQUFjLENBQWQsVUFBcUJzQyxJQUFyQixpQkFBNkJpQyxXQUE3QixJQUE2Q0EsV0FBOUMsRUFBMkRGLElBQUlJLEdBQUosQ0FBUUgsT0FBUixDQUEzRCxDQUFQO0FBQ0QsT0FQbUQsRUFPakQsQ0FBQyxFQUFELEVBQUtULG1CQUFMLENBUGlELENBVEksbUVBU2pEYSxhQVRpRCw2QkFTbENDLDBCQVRrQzs7QUFrQnhELGFBQU87QUFDTGYsb0JBQWMsQ0FBQ2xFLFVBQVUrQyxPQUF6QixJQUFvQ2lDLGNBQWMxRSxNQUFkLEdBQXVCLENBQTNEO0FBQ08yRCxZQURQLGlCQUNpQmUsYUFEakI7QUFFT2YsWUFGUCxXQUVnQmUsYUFGaEIsQ0FESztBQUlMaEYsZ0JBQVUrQyxPQUFWLEdBQW9CbUIsVUFBcEIsR0FBaUMsSUFKNUI7QUFLTGUsZ0NBTEssQ0FBUDs7QUFPRCxLQTFCc0I7QUEyQnZCLEtBQUMsRUFBRCxFQUFLLENBQUN0QixxQkFBRCxJQUEwQixDQUFDRSxZQUFoQyxFQUE4Q0Msd0JBQTlDLENBM0J1QixDQWhCVCw2REFnQlRvQixjQWhCUzs7O0FBOENoQixRQUFNQyxRQUFRLEVBQWQ7O0FBRUEsUUFBSWhDLHVCQUF1QkUsWUFBdkIsSUFBdUN0QixNQUFNc0MsVUFBTixLQUFxQixNQUFoRSxFQUF3RTtBQUN0RTtBQUNBLFVBQU1lLHNCQUFzQmhFLE9BQU9yQixJQUFQLENBQVksVUFBQ3lCLEtBQUQsVUFBV0EsTUFBTTdCLElBQU4sS0FBZSxZQUFmLElBQStCNkIsTUFBTTlCLEtBQU4sS0FBZ0IsTUFBMUQsRUFBWixDQUE1QjtBQUNBeUYsWUFBTUUsSUFBTixDQUFXOUIsTUFBTStCLFdBQU4sQ0FBa0IsQ0FBQ0Ysb0JBQW9CdkMsS0FBcEIsQ0FBMEIsQ0FBMUIsQ0FBRCxFQUErQnVDLG9CQUFvQnZDLEtBQXBCLENBQTBCLENBQTFCLElBQStCLENBQTlELENBQWxCLENBQVg7O0FBRUF6QjtBQUNHZixZQURILENBQ1UsVUFBQ21CLEtBQUQsVUFBV3NDLHlCQUF5QmdCLEdBQXpCLENBQTZCdEQsTUFBTTlCLEtBQW5DLENBQVgsRUFEVjtBQUVHNkYsYUFGSCxDQUVXLFVBQUNDLFVBQUQsRUFBZ0I7QUFDdkJMLGNBQU1FLElBQU4sQ0FBVzlCLE1BQU1rQyxnQkFBTixDQUF1QixDQUFDRCxXQUFXM0MsS0FBWCxDQUFpQixDQUFqQixDQUFELEVBQXNCMkMsV0FBVzNDLEtBQVgsQ0FBaUIsQ0FBakIsQ0FBdEIsQ0FBdkIsbUJBQTJFMkMsV0FBVzlGLEtBQXRGLEVBQVg7QUFDRCxPQUpIO0FBS0Q7O0FBRUQsUUFBSXdELG9CQUFvQlYsYUFBYSxJQUFqQyxJQUF5Q1csbUJBQTdDLEVBQWtFO0FBQ2hFO0FBQ0FnQyxZQUFNRSxJQUFOO0FBQ0U5QixZQUFNbUMsZUFBTixDQUFzQmxDLFVBQXRCLGVBQXNDRSxpQkFBdEMsbUJBQTZEd0IsY0FBN0QsYUFERjs7QUFHRCxLQUxELE1BS08sSUFBSWhDLG9CQUFvQlYsYUFBYSxJQUFqQyxJQUF5QyxDQUFDVyxtQkFBOUMsRUFBbUU7QUFDeEU7QUFDQWdDLFlBQU1FLElBQU4sQ0FBVzlCLE1BQU1tQyxlQUFOLENBQXNCbEMsVUFBdEIsZUFBc0NFLGlCQUF0QyxZQUFYO0FBQ0QsS0FITSxNQUdBLElBQUlSLG9CQUFvQlYsYUFBYSxJQUFqQyxJQUF5Q0MsY0FBYyxJQUEzRCxFQUFpRTtBQUN0RTtBQUNBMEMsWUFBTUUsSUFBTixDQUFXOUIsTUFBTW1DLGVBQU4sQ0FBc0JsQyxVQUF0QixlQUFzQ0UsaUJBQXRDLFFBQVg7QUFDQSxVQUFJUCxtQkFBSixFQUF5QjtBQUN2QjtBQUNBZ0MsY0FBTUUsSUFBTixDQUFXOUIsTUFBTW9DLGdCQUFOLENBQXVCbEQsVUFBdkIsRUFBbUN5QyxjQUFuQyxDQUFYO0FBQ0Q7QUFDRixLQVBNLE1BT0EsSUFBSSxDQUFDaEMsZ0JBQUQsSUFBcUJWLGFBQWEsSUFBbEMsSUFBMENXLG1CQUE5QyxFQUFtRTtBQUN4RSxVQUFJcEIsTUFBTWpDLFVBQU4sQ0FBaUJRLE1BQWpCLEtBQTRCLENBQWhDLEVBQW1DO0FBQ2pDO0FBQ0E2RSxjQUFNRSxJQUFOLENBQVc5QixNQUFNbUMsZUFBTixDQUFzQmxDLFVBQXRCLGdCQUF1QzBCLGNBQXZDLGFBQVg7QUFDRCxPQUhELE1BR087QUFDTDtBQUNBQyxjQUFNRSxJQUFOLENBQVc5QixNQUFNbUMsZUFBTixDQUFzQjNELE1BQU1qQyxVQUFOLENBQWlCLENBQWpCLENBQXRCLGlCQUFpRG9GLGNBQWpELFFBQVg7QUFDRDtBQUNGLEtBUk0sTUFRQSxJQUFJLENBQUNoQyxnQkFBRCxJQUFxQlYsYUFBYSxJQUFsQyxJQUEwQ0MsY0FBYyxJQUE1RCxFQUFrRTtBQUN2RTtBQUNBMEMsWUFBTUUsSUFBTixDQUFXOUIsTUFBTW9DLGdCQUFOLENBQXVCbEQsVUFBdkIsRUFBbUN5QyxjQUFuQyxDQUFYO0FBQ0Q7O0FBRUQ7QUF4RmdCLDJHQXlGaEIscUJBQXdCcEYsVUFBeEIsOEhBQW9DLEtBQXpCRSxTQUF5QjtBQUNsQyxZQUFNMEMsYUFBYTFDLFVBQVUwQyxVQUE3QjtBQUNBeUMsY0FBTUUsSUFBTixDQUFXOUIsTUFBTXFDLE1BQU4sQ0FBYWxELFVBQWIsQ0FBWDs7QUFFQSxZQUFNbUQsdUJBQXVCLENBQUNuRCxXQUFXRyxLQUFYLENBQWlCLENBQWpCLENBQUQsRUFBc0JILFdBQVdHLEtBQVgsQ0FBaUIsQ0FBakIsSUFBc0IsQ0FBNUMsQ0FBN0I7QUFDQSxZQUFNaUQsa0JBQWtCckYsV0FBV21DLElBQVgsQ0FBZ0JtRCxTQUFoQixDQUEwQkYscUJBQXFCLENBQXJCLENBQTFCLEVBQW1EQSxxQkFBcUIsQ0FBckIsQ0FBbkQsQ0FBeEI7QUFDQSxZQUFJQyxvQkFBb0IsSUFBeEIsRUFBOEI7QUFDNUJYLGdCQUFNRSxJQUFOLENBQVc5QixNQUFNK0IsV0FBTixDQUFrQk8sb0JBQWxCLENBQVg7QUFDRDtBQUNGOztBQUVEO0FBQ0E7QUFDQTtBQXRHZ0IscVVBdUdoQixzQkFBbUI1QyxrQkFBbkIsbUlBQXVDLEtBQTVCeEQsSUFBNEI7QUFDckMwRixjQUFNRSxJQUFOLENBQVc5QixNQUFNcUMsTUFBTixDQUFhbkcsSUFBYixDQUFYOztBQUVBLFlBQU1vRyx1QkFBdUIsQ0FBQ3BHLEtBQUtvRCxLQUFMLENBQVcsQ0FBWCxDQUFELEVBQWdCcEQsS0FBS29ELEtBQUwsQ0FBVyxDQUFYLElBQWdCLENBQWhDLENBQTdCO0FBQ0EsWUFBTWlELGtCQUFrQnJGLFdBQVdtQyxJQUFYLENBQWdCbUQsU0FBaEIsQ0FBMEJGLHFCQUFxQixDQUFyQixDQUExQixFQUFtREEscUJBQXFCLENBQXJCLENBQW5ELENBQXhCO0FBQ0EsWUFBSUMsb0JBQW9CLElBQXhCLEVBQThCO0FBQzVCWCxnQkFBTUUsSUFBTixDQUFXOUIsTUFBTStCLFdBQU4sQ0FBa0JPLG9CQUFsQixDQUFYO0FBQ0Q7QUFDRixPQS9HZTs7QUFpSGhCLFdBQU9WLEtBQVA7QUFDRCxHQWxIRDtBQW1IRDs7QUFFRCxTQUFTYSxZQUFULENBQXNCQyxRQUF0QixFQUFnQ2hFLE9BQWhDLEVBQXlDO0FBQ3ZDLDBCQUE4QmdFLFNBQVNDLE9BQVQsRUFBOUIsbUlBQWtELG1FQUF0Q0MsT0FBc0MsZ0JBQTlCQyxLQUE4QjtBQUNoRCxVQUFJQSxNQUFNOUYsTUFBTixHQUFlLENBQW5CLEVBQXNCO0FBQ3BCLFlBQU0rRix3QkFBY0YsT0FBZCxpQ0FBTixDQURvQjtBQUVLQyxhQUZMLEVBRWJyRSxLQUZhLGFBRUhDLElBRkc7QUFHcEIsWUFBTXZCLGFBQWF3QixRQUFRcUUsYUFBUixFQUFuQjtBQUNBLFlBQU1DLE1BQU16RSxPQUFPQyxLQUFQLEVBQWNDLElBQWQsRUFBb0J2QixVQUFwQixFQUFnQ3dCLE9BQWhDLENBQVo7O0FBRUFBLGdCQUFRdUUsTUFBUixDQUFlO0FBQ2IvRyxnQkFBTXNDLE1BQU0wRSxNQURDO0FBRWJKLDBCQUZhO0FBR2JFLGtCQUhhLENBR1I7QUFIUSxTQUFmLEVBTm9COztBQVlwQixnQ0FBbUJ2RSxJQUFuQixtSUFBeUIsS0FBZHZDLElBQWM7QUFDdkJ3QyxvQkFBUXVFLE1BQVIsQ0FBZTtBQUNiL0csb0JBQU1BLEtBQUtnSCxNQURFO0FBRWJKLDhCQUZhLEVBQWY7O0FBSUQsV0FqQm1CO0FBa0JyQjtBQUNGLEtBckJzQztBQXNCeEM7O0FBRURGLE9BQU9PLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKaEgsVUFBTSxTQURGO0FBRUppSCxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsK0RBRlQ7QUFHSkMsV0FBSywwQkFBUSxlQUFSLENBSEQsRUFGRjs7QUFPSkMsYUFBUyxNQVBMO0FBUUpDLFlBQVE7QUFDTjtBQUNFdEgsWUFBTSxRQURSO0FBRUV1SCxrQkFBWTtBQUNWQyw2QkFBcUI7QUFDbkJ4SCxnQkFBTSxTQURhLEVBRFg7O0FBSVYseUJBQWlCO0FBQ2ZBLGdCQUFNLFNBRFMsRUFKUCxFQUZkOzs7QUFVRXlILDRCQUFzQixLQVZ4QixFQURNLENBUkosRUFEUzs7Ozs7QUF5QmZDLFFBekJlLCtCQXlCUnBGLE9BekJRLEVBeUJDO0FBQ2Q7QUFDQSxVQUFNcUYsNEJBQTRCckYsUUFBUXFCLE9BQVIsQ0FBZ0IsQ0FBaEI7QUFDN0JyQixjQUFRcUIsT0FBUixDQUFnQixDQUFoQixFQUFtQjZELG1CQUR4QjtBQUVBLFVBQU1JLCtCQUFrQixTQUFsQkEsZUFBa0IsQ0FBQ0MsVUFBRCxVQUFnQiwwQkFBUUEsVUFBUixFQUFvQnZGLE9BQXBCLEtBQWdDdUYsVUFBaEQsRUFBbEIsMEJBQU47QUFDQSxVQUFNQyxXQUFXSCw0QkFBNEIsVUFBQ0UsVUFBRCxFQUFnQjtBQUMzRCxZQUFNRSxRQUFRRixXQUFXRyxLQUFYLENBQWlCLGlCQUFqQixDQUFkO0FBQ0EsWUFBSSxDQUFDRCxLQUFMLEVBQVk7QUFDVixpQkFBT0gsZ0JBQWdCQyxVQUFoQixDQUFQO0FBQ0Q7QUFDRCxzQkFBVUQsZ0JBQWdCRyxNQUFNLENBQU4sQ0FBaEIsQ0FBVixpQkFBdUNBLE1BQU0sQ0FBTixDQUF2QztBQUNELE9BTmdCLEdBTWJILGVBTko7O0FBUUEsVUFBTUssYUFBYSxJQUFJQyxHQUFKLEVBQW5COztBQUVBLGVBQVNDLFlBQVQsQ0FBc0JDLENBQXRCLEVBQXlCO0FBQ3ZCLFlBQUksQ0FBQ0gsV0FBVzlDLEdBQVgsQ0FBZWlELEVBQUVDLE1BQWpCLENBQUwsRUFBK0I7QUFDN0JKLHFCQUFXakQsR0FBWCxDQUFlb0QsRUFBRUMsTUFBakIsRUFBeUI7QUFDdkIvQixzQkFBVSxJQUFJNEIsR0FBSixFQURhO0FBRXZCSSx3QkFBWSxJQUFJSixHQUFKLEVBRlc7QUFHdkJLLGtDQUFzQixJQUFJTCxHQUFKLEVBSEM7QUFJdkJNLGdDQUFvQixJQUFJTixHQUFKLEVBSkcsRUFBekI7O0FBTUQ7QUFDRCxZQUFNdEYsTUFBTXFGLFdBQVdRLEdBQVgsQ0FBZUwsRUFBRUMsTUFBakIsQ0FBWjtBQUNBLFlBQU0zRSxlQUFlcEIsUUFBUXFCLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0JyQixRQUFRcUIsT0FBUixDQUFnQixDQUFoQixFQUFtQixlQUFuQixDQUEzQztBQUNBLFlBQUksQ0FBQ0QsWUFBRCxJQUFpQjBFLEVBQUUxRCxVQUFGLEtBQWlCLE1BQXRDLEVBQThDO0FBQzVDLGlCQUFPMEQsRUFBRWpJLFVBQUYsQ0FBYVEsTUFBYixHQUFzQixDQUF0QixJQUEyQnlILEVBQUVqSSxVQUFGLENBQWEsQ0FBYixFQUFnQkgsSUFBaEIsS0FBeUIsd0JBQXBELEdBQStFNEMsSUFBSTJGLG9CQUFuRixHQUEwRzNGLElBQUk0RixrQkFBckg7QUFDRDtBQUNELFlBQUksQ0FBQzlFLFlBQUQsSUFBaUIwRSxFQUFFakksVUFBRixDQUFhYSxJQUFiLENBQWtCLFVBQUMwSCxJQUFELFVBQVVBLEtBQUtoRSxVQUFMLEtBQW9CLE1BQTlCLEVBQWxCLENBQXJCLEVBQThFO0FBQzVFLGlCQUFPOUIsSUFBSTRGLGtCQUFYO0FBQ0Q7O0FBRUQsZUFBTy9ILGFBQWEySCxDQUFiLElBQWtCeEYsSUFBSTBGLFVBQXRCLEdBQW1DMUYsSUFBSTBELFFBQTlDO0FBQ0Q7O0FBRUQsYUFBTztBQUNMcUMseUJBREssMENBQ2FQLENBRGIsRUFDZ0I7QUFDbkI7QUFDQSxnQkFBTVEsZUFBZWQsU0FBU00sRUFBRXRCLE1BQUYsQ0FBUy9HLEtBQWxCLENBQXJCO0FBQ0EsZ0JBQU04SSxZQUFZVixhQUFhQyxDQUFiLENBQWxCOztBQUVBLGdCQUFJUyxVQUFVMUQsR0FBVixDQUFjeUQsWUFBZCxDQUFKLEVBQWlDO0FBQy9CQyx3QkFBVUosR0FBVixDQUFjRyxZQUFkLEVBQTRCbEQsSUFBNUIsQ0FBaUMwQyxDQUFqQztBQUNELGFBRkQsTUFFTztBQUNMUyx3QkFBVTdELEdBQVYsQ0FBYzRELFlBQWQsRUFBNEIsQ0FBQ1IsQ0FBRCxDQUE1QjtBQUNEO0FBQ0YsV0FYSTs7QUFhTCxzQkFiSyxzQ0FhWTtBQUNmLG9DQUFrQkgsV0FBV2EsTUFBWCxFQUFsQixtSUFBdUMsS0FBNUJsRyxHQUE0QjtBQUNyQ3lELDZCQUFhekQsSUFBSTBELFFBQWpCLEVBQTJCaEUsT0FBM0I7QUFDQStELDZCQUFhekQsSUFBSTBGLFVBQWpCLEVBQTZCaEcsT0FBN0I7QUFDQStELDZCQUFhekQsSUFBSTJGLG9CQUFqQixFQUF1Q2pHLE9BQXZDO0FBQ0ErRCw2QkFBYXpELElBQUk0RixrQkFBakIsRUFBcUNsRyxPQUFyQztBQUNELGVBTmM7QUFPaEIsV0FwQkksd0JBQVA7O0FBc0JELEtBbkZjLG1CQUFqQiIsImZpbGUiOiJuby1kdXBsaWNhdGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBpc1B1bmN0dWF0b3Iobm9kZSwgdmFsdWUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1B1bmN0dWF0b3InICYmIG5vZGUudmFsdWUgPT09IHZhbHVlO1xufVxuXG4vLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgaW1wb3J0IG9mIGBub2RlYCwgaWYgYW55LlxuZnVuY3Rpb24gZ2V0RGVmYXVsdEltcG9ydE5hbWUobm9kZSkge1xuICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbmQoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyk7XG4gIHJldHVybiBkZWZhdWx0U3BlY2lmaWVyICE9IG51bGwgPyBkZWZhdWx0U3BlY2lmaWVyLmxvY2FsLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBuYW1lc3BhY2UgaW1wb3J0LlxuZnVuY3Rpb24gaGFzTmFtZXNwYWNlKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgbm9uLWRlZmF1bHQgc3BlY2lmaWVycy5cbmZ1bmN0aW9uIGhhc1NwZWNpZmllcnMobm9kZSkge1xuICBjb25zdCBzcGVjaWZpZXJzID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbHRlcigoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuICByZXR1cm4gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBlbmRzKSBvbiB0aGUgcHJldmlvdXMgbGluZSBvciBvblxuLy8gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWAgKHN0YXJ0cykuXG5mdW5jdGlvbiBoYXNDb21tZW50QmVmb3JlKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2MuZW5kLmxpbmUgPj0gbm9kZS5sb2Muc3RhcnQubGluZSAtIDEpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBzdGFydHMpIG9uIHRoZSBzYW1lIGxpbmUgYXMgYG5vZGVgXG4vLyAoZW5kcykuXG5mdW5jdGlvbiBoYXNDb21tZW50QWZ0ZXIobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0FmdGVyKG5vZGUpXG4gICAgLnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgPT09IG5vZGUubG9jLmVuZC5saW5lKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgY29tbWVudHMgX2luc2lkZSxfIGV4Y2VwdCBpbnNpZGUgdGhlIGB7Li4ufWBcbi8vIHBhcnQgKGlmIGFueSkuXG5mdW5jdGlvbiBoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICBjb25zdCBjbG9zZUJyYWNlSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgLy8gU2xpY2UgYXdheSB0aGUgZmlyc3QgdG9rZW4sIHNpbmNlIHdlJ3JlIG5vIGxvb2tpbmcgZm9yIGNvbW1lbnRzIF9iZWZvcmVfXG4gIC8vIGBub2RlYCAob25seSBpbnNpZGUpLiBJZiB0aGVyZSdzIGEgYHsuLi59YCBwYXJ0LCBsb29rIGZvciBjb21tZW50cyBiZWZvcmVcbiAgLy8gdGhlIGB7YCwgYnV0IG5vdCBiZWZvcmUgdGhlIGB9YCAoaGVuY2UgdGhlIGArMWBzKS5cbiAgY29uc3Qgc29tZVRva2VucyA9IG9wZW5CcmFjZUluZGV4ID49IDAgJiYgY2xvc2VCcmFjZUluZGV4ID49IDBcbiAgICA/IHRva2Vucy5zbGljZSgxLCBvcGVuQnJhY2VJbmRleCArIDEpLmNvbmNhdCh0b2tlbnMuc2xpY2UoY2xvc2VCcmFjZUluZGV4ICsgMSkpXG4gICAgOiB0b2tlbnMuc2xpY2UoMSk7XG4gIHJldHVybiBzb21lVG9rZW5zLnNvbWUoKHRva2VuKSA9PiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKHRva2VuKS5sZW5ndGggPiAwKTtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCkge1xuICAvLyBTb3JyeSBFU0xpbnQgPD0gMyB1c2Vycywgbm8gYXV0b2ZpeCBmb3IgeW91LiBBdXRvZml4aW5nIGR1cGxpY2F0ZSBpbXBvcnRzXG4gIC8vIHJlcXVpcmVzIG11bHRpcGxlIGBmaXhlci53aGF0ZXZlcigpYCBjYWxscyBpbiB0aGUgYGZpeGA6IFdlIGJvdGggbmVlZCB0b1xuICAvLyB1cGRhdGUgdGhlIGZpcnN0IG9uZSwgYW5kIHJlbW92ZSB0aGUgcmVzdC4gU3VwcG9ydCBmb3IgbXVsdGlwbGVcbiAgLy8gYGZpeGVyLndoYXRldmVyKClgIGluIGEgc2luZ2xlIGBmaXhgIHdhcyBhZGRlZCBpbiBFU0xpbnQgNC4xLlxuICAvLyBgc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZWAgd2FzIGFkZGVkIGluIDQuMCwgc28gdGhhdCdzIGFuIGVhc3kgdGhpbmcgdG9cbiAgLy8gY2hlY2sgZm9yLlxuICBpZiAodHlwZW9mIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQWRqdXN0aW5nIHRoZSBmaXJzdCBpbXBvcnQgbWlnaHQgbWFrZSBpdCBtdWx0aWxpbmUsIHdoaWNoIGNvdWxkIGJyZWFrXG4gIC8vIGBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVgIGNvbW1lbnRzIGFuZCBzaW1pbGFyLCBzbyBiYWlsIGlmIHRoZSBmaXJzdFxuICAvLyBpbXBvcnQgaGFzIGNvbW1lbnRzLiBBbHNvLCBpZiB0aGUgZmlyc3QgaW1wb3J0IGlzIGBpbXBvcnQgKiBhcyBucyBmcm9tXG4gIC8vICcuL2ZvbydgIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uXG4gIGlmIChoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKGZpcnN0LCBzb3VyY2VDb2RlKSB8fCBoYXNOYW1lc3BhY2UoZmlyc3QpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRJbXBvcnROYW1lcyA9IG5ldyBTZXQoXG4gICAgZmxhdE1hcChbXS5jb25jYXQoZmlyc3QsIHJlc3QgfHwgW10pLCAoeCkgPT4gZ2V0RGVmYXVsdEltcG9ydE5hbWUoeCkgfHwgW10pLFxuICApO1xuXG4gIC8vIEJhaWwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGRpZmZlcmVudCBkZWZhdWx0IGltcG9ydCBuYW1lcyDigJMgaXQncyB1cCB0byB0aGVcbiAgLy8gdXNlciB0byBjaG9vc2Ugd2hpY2ggb25lIHRvIGtlZXAuXG4gIGlmIChkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA+IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTGVhdmUgaXQgdG8gdGhlIHVzZXIgdG8gaGFuZGxlIGNvbW1lbnRzLiBBbHNvIHNraXAgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgaW1wb3J0cywgc2luY2UgdGhleSBjYW5ub3QgYmUgbWVyZ2VkIGludG8gYW5vdGhlciBpbXBvcnQuXG4gIGNvbnN0IHJlc3RXaXRob3V0Q29tbWVudHMgPSByZXN0LmZpbHRlcigobm9kZSkgPT4gIWhhc1Byb2JsZW1hdGljQ29tbWVudHMobm9kZSwgc291cmNlQ29kZSkgJiYgIWhhc05hbWVzcGFjZShub2RlKSk7XG5cbiAgY29uc3Qgc3BlY2lmaWVycyA9IHJlc3RXaXRob3V0Q29tbWVudHNcbiAgICAubWFwKChub2RlKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBzb3VyY2VDb2RlLmdldFRva2Vucyhub2RlKTtcbiAgICAgIGNvbnN0IG9wZW5CcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgICAgIGNvbnN0IGNsb3NlQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ30nKSk7XG5cbiAgICAgIGlmIChvcGVuQnJhY2UgPT0gbnVsbCB8fCBjbG9zZUJyYWNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1wb3J0Tm9kZTogbm9kZSxcbiAgICAgICAgaWRlbnRpZmllcnM6IHNvdXJjZUNvZGUudGV4dC5zbGljZShvcGVuQnJhY2UucmFuZ2VbMV0sIGNsb3NlQnJhY2UucmFuZ2VbMF0pLnNwbGl0KCcsJyksIC8vIFNwbGl0IHRoZSB0ZXh0IGludG8gc2VwYXJhdGUgaWRlbnRpZmllcnMgKHJldGFpbmluZyBhbnkgd2hpdGVzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIpXG4gICAgICAgIGlzRW1wdHk6ICFoYXNTcGVjaWZpZXJzKG5vZGUpLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgY29uc3QgdW5uZWNlc3NhcnlJbXBvcnRzID0gcmVzdFdpdGhvdXRDb21tZW50cy5maWx0ZXIoKG5vZGUpID0+ICFoYXNTcGVjaWZpZXJzKG5vZGUpXG4gICAgJiYgIWhhc05hbWVzcGFjZShub2RlKVxuICAgICYmICFzcGVjaWZpZXJzLnNvbWUoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydE5vZGUgPT09IG5vZGUpLFxuICApO1xuXG4gIGNvbnN0IHNob3VsZEFkZERlZmF1bHQgPSBnZXREZWZhdWx0SW1wb3J0TmFtZShmaXJzdCkgPT0gbnVsbCAmJiBkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA9PT0gMTtcbiAgY29uc3Qgc2hvdWxkQWRkU3BlY2lmaWVycyA9IHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkgPSB1bm5lY2Vzc2FyeUltcG9ydHMubGVuZ3RoID4gMDtcbiAgY29uc3QgcHJlZmVySW5saW5lID0gY29udGV4dC5vcHRpb25zWzBdICYmIGNvbnRleHQub3B0aW9uc1swXVsncHJlZmVyLWlubGluZSddO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICAvLyBhIHVzZXIgbWlnaHQgc2V0IHByZWZlci1pbmxpbmUgYnV0IG5vdCBoYXZlIGEgc3VwcG9ydGluZyBUeXBlU2NyaXB0IHZlcnNpb24uIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMgJiYgcHJlZmVySW5saW5lICYmIGZpcnN0LmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgLy8gYGltcG9ydCB0eXBlIHthfSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IHt0eXBlIGF9IGZyb20gJy4vZm9vJ2BcbiAgICAgIGNvbnN0IHR5cGVJZGVudGlmaWVyVG9rZW4gPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IHRva2VuLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3R5cGUnKTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoW3R5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMF0sIHR5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMV0gKyAxXSkpO1xuXG4gICAgICB0b2tlbnNcbiAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IGZpcnN0RXhpc3RpbmdJZGVudGlmaWVycy5oYXModG9rZW4udmFsdWUpKVxuICAgICAgICAuZm9yRWFjaCgoaWRlbnRpZmllcikgPT4ge1xuICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHRSYW5nZShbaWRlbnRpZmllci5yYW5nZVswXSwgaWRlbnRpZmllci5yYW5nZVsxXV0sIGB0eXBlICR7aWRlbnRpZmllci52YWx1ZX1gKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIC8vIGBpbXBvcnQgJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKFxuICAgICAgICBmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSwgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiAhc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSBmcm9tYCkpO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgIT0gbnVsbCAmJiBjbG9zZUJyYWNlICE9IG51bGwpIHtcbiAgICAgIC8vIGBpbXBvcnQgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0sYCkpO1xuICAgICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiBzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoZmlyc3Quc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3Quc3BlY2lmaWVyc1swXSwgYCwgeyR7c3BlY2lmaWVyc1RleHR9fWApKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShjbG9zZUJyYWNlLCBzcGVjaWZpZXJzVGV4dCkpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIHNwZWNpZmllcnMgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGZpcnN0IGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBzcGVjaWZpZXJzKSB7XG4gICAgICBjb25zdCBpbXBvcnROb2RlID0gc3BlY2lmaWVyLmltcG9ydE5vZGU7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShpbXBvcnROb2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW2ltcG9ydE5vZGUucmFuZ2VbMV0sIGltcG9ydE5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaW1wb3J0cyB3aG9zZSBkZWZhdWx0IGltcG9ydCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QgaW1wb3J0LFxuICAgIC8vIGFuZCBzaWRlLWVmZmVjdC1vbmx5IGltcG9ydHMgdGhhdCBhcmUgdW5uZWNlc3NhcnkgZHVlIHRvIHRoZSBmaXJzdFxuICAgIC8vIGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdW5uZWNlc3NhcnlJbXBvcnRzKSB7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShub2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW25vZGUucmFuZ2VbMV0sIG5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZml4ZXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW1wb3J0cyhpbXBvcnRlZCwgY29udGV4dCkge1xuICBmb3IgKGNvbnN0IFttb2R1bGUsIG5vZGVzXSBvZiBpbXBvcnRlZC5lbnRyaWVzKCkpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAnJHttb2R1bGV9JyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcy5gO1xuICAgICAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IG5vZGVzO1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgZml4ID0gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBmaXJzdC5zb3VyY2UsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGZpeCwgLy8gQXR0YWNoIHRoZSBhdXRvZml4IChpZiBhbnkpIHRvIHRoZSBmaXJzdCBpbXBvcnQuXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlc3QpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IG5vZGUuc291cmNlLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJjb25jYXQiLCJ4IiwiZ2V0RGVmYXVsdEltcG9ydE5hbWUiLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsImZpbHRlciIsInNwZWNpZmllcnMiLCJtYXAiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwidG9rZW4iLCJpc1B1bmN0dWF0b3IiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInNsaWNlIiwicmFuZ2UiLCJzcGxpdCIsImlzRW1wdHkiLCJoYXNTcGVjaWZpZXJzIiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNvbWUiLCJzcGVjaWZpZXIiLCJzaG91bGRBZGREZWZhdWx0Iiwic2hvdWxkQWRkU3BlY2lmaWVycyIsInNob3VsZFJlbW92ZVVubmVjZXNzYXJ5IiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwicHJlZmVySW5saW5lIiwib3B0aW9ucyIsInNlbXZlciIsInNhdGlzZmllcyIsInZlcnNpb24iLCJFcnJvciIsImN1ciIsInNldCIsInRyaW1tZWQiLCJjdXJXaXRoVHlwZSIsImhhcyIsImFkZCIsInNwZWNpZmllclRleHQiLCJ1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVycyIsInNwZWNpZmllcnNUZXh0IiwiZml4ZXMiLCJwdXNoIiwiaW5zZXJ0VGV4dEFmdGVyIiwiaW5zZXJ0VGV4dEJlZm9yZSIsInJlbW92ZSIsImNoYXJBZnRlckltcG9ydFJhbmdlIiwiY2hhckFmdGVySW1wb3J0Iiwic3Vic3RyaW5nIiwicmVtb3ZlUmFuZ2UiLCJ2YWx1ZSIsInR5cGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwibG9jYWwiLCJuYW1lIiwiaGFzQ29tbWVudEJlZm9yZSIsImhhc0NvbW1lbnRBZnRlciIsImhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzIiwiY29tbWVudCIsImxvYyIsImVuZCIsImxpbmUiLCJzdGFydCIsImdldENvbW1lbnRzQWZ0ZXIiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsImNsb3NlQnJhY2VJbmRleCIsInNvbWVUb2tlbnMiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwiZGVmYXVsdFJlc29sdmVyIiwic291cmNlUGF0aCIsInJlc29sdmVyIiwicGFydHMiLCJtYXRjaCIsIm1vZHVsZU1hcHMiLCJNYXAiLCJnZXRJbXBvcnRNYXAiLCJuIiwicGFyZW50IiwibnNJbXBvcnRlZCIsImRlZmF1bHRUeXBlc0ltcG9ydGVkIiwibmFtZWRUeXBlc0ltcG9ydGVkIiwiZ2V0Iiwic3BlYyIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EsZ0M7QUFDQSx5RDs7QUFFQSxxQzs7QUFFQSxJQUFJQSxzQkFBSjtBQUNBLElBQUk7QUFDRkEsa0JBQWdCQyxRQUFRLHlCQUFSLENBQWhCLENBREUsQ0FDa0Q7QUFDckQsQ0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVSxDQUFFLElBQU07O0FBRXBCLFNBQVNDLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUN2Qyx5QkFBOEJELFNBQVNFLE9BQVQsRUFBOUIsOEhBQWtELGdFQUF0Q0MsT0FBc0MsZ0JBQTlCQyxLQUE4QjtBQUNoRCxVQUFJQSxNQUFNQyxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsWUFBTUMsd0JBQWNILE9BQWQsaUNBQU4sQ0FEb0I7QUFFS0MsYUFGTCxFQUViRyxLQUZhLGFBRUhDLElBRkc7QUFHcEIsWUFBTUMsYUFBYVIsUUFBUVMsYUFBUixFQUFuQjtBQUNBLFlBQU1DLE1BQU1DLE9BQU9MLEtBQVAsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsRUFBZ0NSLE9BQWhDLENBQVo7O0FBRUFBLGdCQUFRWSxNQUFSLENBQWU7QUFDYkMsZ0JBQU1QLE1BQU1RLE1BREM7QUFFYlQsMEJBRmE7QUFHYkssa0JBSGEsQ0FHUjtBQUhRLFNBQWYsRUFOb0I7O0FBWXBCLGdDQUFtQkgsSUFBbkIsbUlBQXlCLEtBQWRNLElBQWM7QUFDdkJiLG9CQUFRWSxNQUFSLENBQWU7QUFDYkMsb0JBQU1BLEtBQUtDLE1BREU7QUFFYlQsOEJBRmEsRUFBZjs7QUFJRCxXQWpCbUI7QUFrQnJCO0FBQ0YsS0FyQnNDO0FBc0J4Qzs7QUFFRCxTQUFTTSxNQUFULENBQWdCTCxLQUFoQixFQUF1QkMsSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDUixPQUF6QyxFQUFr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LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBjaGVja0ltcG9ydHMoaW1wb3J0ZWQsIGNvbnRleHQpIHtcbiAgZm9yIChjb25zdCBbbW9kdWxlLCBub2Rlc10gb2YgaW1wb3J0ZWQuZW50cmllcygpKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJyR7bW9kdWxlfScgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMuYDtcbiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBub2RlcztcbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgIGNvbnN0IGZpeCA9IGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogZmlyc3Quc291cmNlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBmaXgsIC8vIEF0dGFjaCB0aGUgYXV0b2ZpeCAoaWYgYW55KSB0byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZXN0KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBub2RlLnNvdXJjZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KSB7XG4gIC8vIFNvcnJ5IEVTTGludCA8PSAzIHVzZXJzLCBubyBhdXRvZml4IGZvciB5b3UuIEF1dG9maXhpbmcgZHVwbGljYXRlIGltcG9ydHNcbiAgLy8gcmVxdWlyZXMgbXVsdGlwbGUgYGZpeGVyLndoYXRldmVyKClgIGNhbGxzIGluIHRoZSBgZml4YDogV2UgYm90aCBuZWVkIHRvXG4gIC8vIHVwZGF0ZSB0aGUgZmlyc3Qgb25lLCBhbmQgcmVtb3ZlIHRoZSByZXN0LiBTdXBwb3J0IGZvciBtdWx0aXBsZVxuICAvLyBgZml4ZXIud2hhdGV2ZXIoKWAgaW4gYSBzaW5nbGUgYGZpeGAgd2FzIGFkZGVkIGluIEVTTGludCA0LjEuXG4gIC8vIGBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlYCB3YXMgYWRkZWQgaW4gNC4wLCBzbyB0aGF0J3MgYW4gZWFzeSB0aGluZyB0b1xuICAvLyBjaGVjayBmb3IuXG4gIGlmICh0eXBlb2Ygc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGp1c3RpbmcgdGhlIGZpcnN0IGltcG9ydCBtaWdodCBtYWtlIGl0IG11bHRpbGluZSwgd2hpY2ggY291bGQgYnJlYWtcbiAgLy8gYGVzbGludC1kaXNhYmxlLW5leHQtbGluZWAgY29tbWVudHMgYW5kIHNpbWlsYXIsIHNvIGJhaWwgaWYgdGhlIGZpcnN0XG4gIC8vIGltcG9ydCBoYXMgY29tbWVudHMuIEFsc28sIGlmIHRoZSBmaXJzdCBpbXBvcnQgaXMgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby5cbiAgaWYgKGhhc1Byb2JsZW1hdGljQ29tbWVudHMoZmlyc3QsIHNvdXJjZUNvZGUpIHx8IGhhc05hbWVzcGFjZShmaXJzdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdEltcG9ydE5hbWVzID0gbmV3IFNldChcbiAgICBmbGF0TWFwKFtdLmNvbmNhdChmaXJzdCwgcmVzdCB8fCBbXSksICh4KSA9PiBnZXREZWZhdWx0SW1wb3J0TmFtZSh4KSB8fCBbXSksXG4gICk7XG5cbiAgLy8gQmFpbCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGlmZmVyZW50IGRlZmF1bHQgaW1wb3J0IG5hbWVzIOKAkyBpdCdzIHVwIHRvIHRoZVxuICAvLyB1c2VyIHRvIGNob29zZSB3aGljaCBvbmUgdG8ga2VlcC5cbiAgaWYgKGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID4gMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBMZWF2ZSBpdCB0byB0aGUgdXNlciB0byBoYW5kbGUgY29tbWVudHMuIEFsc28gc2tpcCBgaW1wb3J0ICogYXMgbnMgZnJvbVxuICAvLyAnLi9mb28nYCBpbXBvcnRzLCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBtZXJnZWQgaW50byBhbm90aGVyIGltcG9ydC5cbiAgY29uc3QgcmVzdFdpdGhvdXRDb21tZW50cyA9IHJlc3QuZmlsdGVyKChub2RlKSA9PiAhaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpKTtcblxuICBjb25zdCBzcGVjaWZpZXJzID0gcmVzdFdpdGhvdXRDb21tZW50c1xuICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICAgICAgY29uc3Qgb3BlbkJyYWNlID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICAgICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcblxuICAgICAgaWYgKG9wZW5CcmFjZSA9PSBudWxsIHx8IGNsb3NlQnJhY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnROb2RlOiBub2RlLFxuICAgICAgICBpZGVudGlmaWVyczogc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSkuc3BsaXQoJywnKSwgLy8gU3BsaXQgdGhlIHRleHQgaW50byBzZXBhcmF0ZSBpZGVudGlmaWVycyAocmV0YWluaW5nIGFueSB3aGl0ZXNwYWNlIGJlZm9yZSBvciBhZnRlcilcbiAgICAgICAgaXNFbXB0eTogIWhhc1NwZWNpZmllcnMobm9kZSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCB1bm5lY2Vzc2FyeUltcG9ydHMgPSByZXN0V2l0aG91dENvbW1lbnRzLmZpbHRlcigobm9kZSkgPT4gIWhhc1NwZWNpZmllcnMobm9kZSlcbiAgICAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpXG4gICAgJiYgIXNwZWNpZmllcnMuc29tZSgoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIuaW1wb3J0Tm9kZSA9PT0gbm9kZSksXG4gICk7XG5cbiAgY29uc3Qgc2hvdWxkQWRkRGVmYXVsdCA9IGdldERlZmF1bHRJbXBvcnROYW1lKGZpcnN0KSA9PSBudWxsICYmIGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID09PSAxO1xuICBjb25zdCBzaG91bGRBZGRTcGVjaWZpZXJzID0gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xuICBjb25zdCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSA9IHVubmVjZXNzYXJ5SW1wb3J0cy5sZW5ndGggPiAwO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICAgIC8vIGEgdXNlciBtaWdodCBzZXQgcHJlZmVyLWlubGluZSBidXQgbm90IGhhdmUgYSBzdXBwb3J0aW5nIFR5cGVTY3JpcHQgdmVyc2lvbi4gIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goXG4gICAgICAgIGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9LCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmICFzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9IGZyb21gKSk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSxgKSk7XG4gICAgICBpZiAoc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRCZWZvcmUoY2xvc2VCcmFjZSwgc3BlY2lmaWVyc1RleHQpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChmaXJzdC5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdC5zcGVjaWZpZXJzWzBdLCBgLCB7JHtzcGVjaWZpZXJzVGV4dH19YCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlICE9IG51bGwgJiYgY2xvc2VCcmFjZSAhPSBudWxsKSB7XG4gICAgICAvLyBgaW1wb3J0IHsuLi59ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGltcG9ydHMgd2hvc2Ugc3BlY2lmaWVycyBoYXZlIGJlZW4gbW92ZWQgaW50byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHNwZWNpZmllcnMpIHtcbiAgICAgIGNvbnN0IGltcG9ydE5vZGUgPSBzcGVjaWZpZXIuaW1wb3J0Tm9kZTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKGltcG9ydE5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbaW1wb3J0Tm9kZS5yYW5nZVsxXSwgaW1wb3J0Tm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIGRlZmF1bHQgaW1wb3J0IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBmaXJzdCBpbXBvcnQsXG4gICAgLy8gYW5kIHNpZGUtZWZmZWN0LW9ubHkgaW1wb3J0cyB0aGF0IGFyZSB1bm5lY2Vzc2FyeSBkdWUgdG8gdGhlIGZpcnN0XG4gICAgLy8gaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB1bm5lY2Vzc2FyeUltcG9ydHMpIHtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKG5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbbm9kZS5yYW5nZVsxXSwgbm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaXhlcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQdW5jdHVhdG9yKG5vZGUsIHZhbHVlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdQdW5jdHVhdG9yJyAmJiBub2RlLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGltcG9ydCBvZiBgbm9kZWAsIGlmIGFueS5cbmZ1bmN0aW9uIGdldERlZmF1bHRJbXBvcnROYW1lKG5vZGUpIHtcbiAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maW5kKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpO1xuICByZXR1cm4gZGVmYXVsdFNwZWNpZmllciAhPSBudWxsID8gZGVmYXVsdFNwZWNpZmllci5sb2NhbC5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgbmFtZXNwYWNlIGltcG9ydC5cbmZ1bmN0aW9uIGhhc05hbWVzcGFjZShub2RlKSB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gIHJldHVybiBzcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYW55IG5vbi1kZWZhdWx0IHNwZWNpZmllcnMuXG5mdW5jdGlvbiBoYXNTcGVjaWZpZXJzKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IGVuZHMpIG9uIHRoZSBwcmV2aW91cyBsaW5lIG9yIG9uXG4vLyB0aGUgc2FtZSBsaW5lIGFzIGBub2RlYCAoc3RhcnRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRCZWZvcmUobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZShub2RlKVxuICAgIC5zb21lKChjb21tZW50KSA9PiBjb21tZW50LmxvYy5lbmQubGluZSA+PSBub2RlLmxvYy5zdGFydC5saW5lIC0gMSk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IHN0YXJ0cykgb24gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWBcbi8vIChlbmRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQWZ0ZXIobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2Muc3RhcnQubGluZSA9PT0gbm9kZS5sb2MuZW5kLmxpbmUpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGFueSBjb21tZW50cyBfaW5zaWRlLF8gZXhjZXB0IGluc2lkZSB0aGUgYHsuLi59YFxuLy8gcGFydCAoaWYgYW55KS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgY29uc3QgdG9rZW5zID0gc291cmNlQ29kZS5nZXRUb2tlbnMobm9kZSk7XG4gIGNvbnN0IG9wZW5CcmFjZUluZGV4ID0gdG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gIGNvbnN0IGNsb3NlQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd9JykpO1xuICAvLyBTbGljZSBhd2F5IHRoZSBmaXJzdCB0b2tlbiwgc2luY2Ugd2UncmUgbm8gbG9va2luZyBmb3IgY29tbWVudHMgX2JlZm9yZV9cbiAgLy8gYG5vZGVgIChvbmx5IGluc2lkZSkuIElmIHRoZXJlJ3MgYSBgey4uLn1gIHBhcnQsIGxvb2sgZm9yIGNvbW1lbnRzIGJlZm9yZVxuICAvLyB0aGUgYHtgLCBidXQgbm90IGJlZm9yZSB0aGUgYH1gIChoZW5jZSB0aGUgYCsxYHMpLlxuICBjb25zdCBzb21lVG9rZW5zID0gb3BlbkJyYWNlSW5kZXggPj0gMCAmJiBjbG9zZUJyYWNlSW5kZXggPj0gMFxuICAgID8gdG9rZW5zLnNsaWNlKDEsIG9wZW5CcmFjZUluZGV4ICsgMSkuY29uY2F0KHRva2Vucy5zbGljZShjbG9zZUJyYWNlSW5kZXggKyAxKSlcbiAgICA6IHRva2Vucy5zbGljZSgxKTtcbiAgcmV0dXJuIHNvbWVUb2tlbnMuc29tZSgodG9rZW4pID0+IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUodG9rZW4pLmxlbmd0aCA+IDApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 220e15a25a..cbe024a71f 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 @@ -42,11 +42,8 @@ function extractDepFields(pkg) { function getPackageDepFields(packageJsonPath, throwAtRead) { if (!depFieldCache.has(packageJsonPath)) { - var packageJson = readJSON(packageJsonPath, throwAtRead); - if (packageJson) { - var depFields = extractDepFields(packageJson); - depFieldCache.set(packageJsonPath, depFields); - } + var depFields = extractDepFields(readJSON(packageJsonPath, throwAtRead)); + depFieldCache.set(packageJsonPath, depFields); } return depFieldCache.get(packageJsonPath); @@ -75,12 +72,10 @@ function getDependencies(context, packageDir) { // use rule config to find package.json paths.forEach(function (dir) { var packageJsonPath = _path2['default'].join(dir, 'package.json'); - var _packageContent = getPackageDepFields(packageJsonPath, paths.length === 1); - if (_packageContent) { - Object.keys(packageContent).forEach(function (depsKey) { - Object.assign(packageContent[depsKey], _packageContent[depsKey]); - }); - } + var _packageContent = getPackageDepFields(packageJsonPath, true); + Object.keys(packageContent).forEach(function (depsKey) { + Object.assign(packageContent[depsKey], _packageContent[depsKey]); + }); }); } else { var packageJsonPath = (0, _pkgUp2['default'])({ @@ -303,4 +298,4 @@ module.exports = { 'Program:exit': function () {function ProgramExit() { depFieldCache.clear(); }return ProgramExit;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwicGFja2FnZUpzb24iLCJkZXBGaWVsZHMiLCJzZXQiLCJnZXQiLCJnZXREZXBlbmRlbmNpZXMiLCJjb250ZXh0IiwicGFja2FnZURpciIsInBhdGhzIiwicGFja2FnZUNvbnRlbnQiLCJwYXRoIiwicmVzb2x2ZSIsIm1hcCIsImRpciIsImZvckVhY2giLCJqb2luIiwiX3BhY2thZ2VDb250ZW50IiwiZGVwc0tleSIsImFzc2lnbiIsImN3ZCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm5vcm1hbGl6ZSIsInNvbWUiLCJlIiwiY29kZSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJsb2MiLCJsaW5lIiwiY29sdW1uIiwibmFtZSIsIlN5bnRheEVycm9yIiwibWlzc2luZ0Vycm9yTWVzc2FnZSIsInBhY2thZ2VOYW1lIiwiZGV2RGVwRXJyb3JNZXNzYWdlIiwib3B0RGVwRXJyb3JNZXNzYWdlIiwiZ2V0TW9kdWxlT3JpZ2luYWxOYW1lIiwic3BsaXQiLCJmaXJzdCIsInNlY29uZCIsInN0YXJ0c1dpdGgiLCJnZXRNb2R1bGVSZWFsTmFtZSIsInJlc29sdmVkIiwiY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24iLCJkZXBzIiwiZGVjbGFyYXRpb25TdGF0dXMiLCJuZXdEZWNsYXJhdGlvblN0YXR1cyIsImlzSW5EZXBzIiwiaXNJbkRldkRlcHMiLCJpc0luT3B0RGVwcyIsImlzSW5QZWVyRGVwcyIsImlzSW5CdW5kbGVkRGVwcyIsInBhY2thZ2VIaWVyYXJjaHkiLCJwYWNrYWdlTmFtZVBhcnRzIiwibmFtZVBhcnQiLCJpbmRleCIsImFuY2VzdG9yIiwic2xpY2UiLCJwdXNoIiwicmVkdWNlIiwicmVzdWx0IiwiYW5jZXN0b3JOYW1lIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInJlcG9ydElmTWlzc2luZyIsImRlcHNPcHRpb25zIiwibm9kZSIsInZlcmlmeVR5cGVJbXBvcnRzIiwiaW1wb3J0S2luZCIsImV4cG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJzcGVjaWZpZXIiLCJ0eXBlT2ZJbXBvcnQiLCJ2ZXJpZnlJbnRlcm5hbERlcHMiLCJpbXBvcnRQYWNrYWdlTmFtZSIsImFsbG93RGV2RGVwcyIsImFsbG93UGVlckRlcHMiLCJhbGxvd09wdERlcHMiLCJhbGxvd0J1bmRsZWREZXBzIiwicmVhbFBhY2thZ2VOYW1lIiwidGVzdENvbmZpZyIsImNvbmZpZyIsImZpbGVuYW1lIiwiYyIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJpbmNsdWRlSW50ZXJuYWwiLCJpbmNsdWRlVHlwZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsIm9wdGlvbnMiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEI7QUFDQSx3QjtBQUNB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V0FBV21CLFFBQVE1RyxvQkFBbkIsRUFBeUMyRixRQUF6QyxNQUF1RCxLQUZuRDtBQUdsQk4sdUJBQWVJLFdBQVdtQixRQUFRM0csZ0JBQW5CLEVBQXFDMEYsUUFBckMsTUFBbUQsS0FIaEQ7QUFJbEJKLDBCQUFrQkUsV0FBV21CLFFBQVExRyxtQkFBbkIsRUFBd0N5RixRQUF4QyxNQUFzRCxLQUp0RDtBQUtsQlQsNEJBQW9CLENBQUMsQ0FBQzBCLFFBQVFKLGVBTFo7QUFNbEI3QiwyQkFBbUIsQ0FBQyxDQUFDaUMsUUFBUUgsWUFOWCxFQUFwQjs7O0FBU0EsYUFBTyxnQ0FBYyxVQUFDSSxNQUFELEVBQVNuQyxJQUFULEVBQWtCO0FBQ3JDRix3QkFBZ0IzRCxPQUFoQixFQUF5QnVDLElBQXpCLEVBQStCcUIsV0FBL0IsRUFBNENDLElBQTVDLEVBQWtEbUMsT0FBT0MsS0FBekQ7QUFDRCxPQUZNLEVBRUosRUFBRUMsVUFBVSxJQUFaLEVBRkksQ0FBUDtBQUdELEtBM0NjOztBQTZDZixnQkE3Q2Usc0NBNkNFO0FBQ2Z0SSxvQkFBY3VJLEtBQWQ7QUFDRCxLQS9DYyx3QkFBakIiLCJmaWxlIjoibm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgeyBnZXRGaWxlUGFja2FnZU5hbWUgfSBmcm9tICcuLi9jb3JlL3BhY2thZ2VQYXRoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZXBGaWVsZENhY2hlID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBoYXNLZXlzKG9iaiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGFycmF5T3JLZXlzKGFycmF5T3JPYmplY3QpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyYXlPck9iamVjdCkgPyBhcnJheU9yT2JqZWN0IDogT2JqZWN0LmtleXMoYXJyYXlPck9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRKU09OKGpzb25QYXRoLCB0aHJvd0V4Y2VwdGlvbikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhqc29uUGF0aCwgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVwRmllbGRzKHBrZykge1xuICByZXR1cm4ge1xuICAgIGRlcGVuZGVuY2llczogcGtnLmRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBkZXZEZXBlbmRlbmNpZXM6IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHBrZy5vcHRpb25hbERlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBwZWVyRGVwZW5kZW5jaWVzOiBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICAvLyBCdW5kbGVkRGVwcyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXksIGJ1dCBvYmplY3Qgbm90YXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQgYnlcbiAgICAvLyBgbnBtYCwgc28gd2UgY29udmVydCBpdCB0byBhbiBhcnJheSBpZiBpdCBpcyBhbiBvYmplY3RcbiAgICBidW5kbGVkRGVwZW5kZW5jaWVzOiBhcnJheU9yS2V5cyhwa2cuYnVuZGxlRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IFtdKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZURlcEZpZWxkcyhwYWNrYWdlSnNvblBhdGgsIHRocm93QXRSZWFkKSB7XG4gIGlmICghZGVwRmllbGRDYWNoZS5oYXMocGFja2FnZUpzb25QYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gcmVhZEpTT04ocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCk7XG4gICAgaWYgKHBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHBhY2thZ2VKc29uKTtcbiAgICAgIGRlcEZpZWxkQ2FjaGUuc2V0KHBhY2thZ2VKc29uUGF0aCwgZGVwRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgcGF0aHMubGVuZ3RoID09PSAxKTtcbiAgICAgICAgaWYgKF9wYWNrYWdlQ29udGVudCkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDb250ZW50W2RlcHNLZXldLCBfcGFja2FnZUNvbnRlbnRbZGVwc0tleV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwiZGVwRmllbGRzIiwic2V0IiwiZ2V0IiwiZ2V0RGVwZW5kZW5jaWVzIiwiY29udGV4dCIsInBhY2thZ2VEaXIiLCJwYXRocyIsInBhY2thZ2VDb250ZW50IiwicGF0aCIsInJlc29sdmUiLCJtYXAiLCJkaXIiLCJmb3JFYWNoIiwiam9pbiIsIl9wYWNrYWdlQ29udGVudCIsImRlcHNLZXkiLCJhc3NpZ24iLCJjd2QiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJub3JtYWxpemUiLCJzb21lIiwiZSIsImNvZGUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibG9jIiwibGluZSIsImNvbHVtbiIsIm5hbWUiLCJTeW50YXhFcnJvciIsIm1pc3NpbmdFcnJvck1lc3NhZ2UiLCJwYWNrYWdlTmFtZSIsImRldkRlcEVycm9yTWVzc2FnZSIsIm9wdERlcEVycm9yTWVzc2FnZSIsImdldE1vZHVsZU9yaWdpbmFsTmFtZSIsInNwbGl0IiwiZmlyc3QiLCJzZWNvbmQiLCJzdGFydHNXaXRoIiwiZ2V0TW9kdWxlUmVhbE5hbWUiLCJyZXNvbHZlZCIsImNoZWNrRGVwZW5kZW5jeURlY2xhcmF0aW9uIiwiZGVwcyIsImRlY2xhcmF0aW9uU3RhdHVzIiwibmV3RGVjbGFyYXRpb25TdGF0dXMiLCJpc0luRGVwcyIsImlzSW5EZXZEZXBzIiwiaXNJbk9wdERlcHMiLCJpc0luUGVlckRlcHMiLCJpc0luQnVuZGxlZERlcHMiLCJwYWNrYWdlSGllcmFyY2h5IiwicGFja2FnZU5hbWVQYXJ0cyIsIm5hbWVQYXJ0IiwiaW5kZXgiLCJhbmNlc3RvciIsInNsaWNlIiwicHVzaCIsInJlZHVjZSIsInJlc3VsdCIsImFuY2VzdG9yTmFtZSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJyZXBvcnRJZk1pc3NpbmciLCJkZXBzT3B0aW9ucyIsIm5vZGUiLCJ2ZXJpZnlUeXBlSW1wb3J0cyIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5Iiwic3BlY2lmaWVyIiwidHlwZU9mSW1wb3J0IiwidmVyaWZ5SW50ZXJuYWxEZXBzIiwiaW1wb3J0UGFja2FnZU5hbWUiLCJhbGxvd0RldkRlcHMiLCJhbGxvd1BlZXJEZXBzIiwiYWxsb3dPcHREZXBzIiwiYWxsb3dCdW5kbGVkRGVwcyIsInJlYWxQYWNrYWdlTmFtZSIsInRlc3RDb25maWciLCJjb25maWciLCJmaWxlbmFtZSIsImMiLCJwcm9jZXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW5jbHVkZUludGVybmFsIiwiaW5jbHVkZVR5cGVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyIsImNsZWFyIl0sIm1hcHBpbmdzIjoicW9CQUFBLDRCO0FBQ0Esd0I7QUFDQSxrRDtBQUNBLHNDO0FB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QkFBa0JFLFdBQVdtQixRQUFRekcsbUJBQW5CLEVBQXdDd0YsUUFBeEMsTUFBc0QsS0FKdEQ7QUFLbEJULDRCQUFvQixDQUFDLENBQUMwQixRQUFRSixlQUxaO0FBTWxCN0IsMkJBQW1CLENBQUMsQ0FBQ2lDLFFBQVFILFlBTlgsRUFBcEI7OztBQVNBLGFBQU8sZ0NBQWMsVUFBQ0ksTUFBRCxFQUFTbkMsSUFBVCxFQUFrQjtBQUNyQ0Ysd0JBQWdCM0QsT0FBaEIsRUFBeUJ1QyxJQUF6QixFQUErQnFCLFdBQS9CLEVBQTRDQyxJQUE1QyxFQUFrRG1DLE9BQU9DLEtBQXpEO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQTNDYzs7QUE2Q2YsZ0JBN0NlLHNDQTZDRTtBQUNmckksb0JBQWNzSSxLQUFkO0FBQ0QsS0EvQ2Msd0JBQWpCIiwiZmlsZSI6Im5vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGtnVXAnO1xuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgaW1wb3J0VHlwZSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IHsgZ2V0RmlsZVBhY2thZ2VOYW1lIH0gZnJvbSAnLi4vY29yZS9wYWNrYWdlUGF0aCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVwRmllbGRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gaGFzS2V5cyhvYmogPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcnJheU9yS2V5cyhhcnJheU9yT2JqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5T3JPYmplY3QpID8gYXJyYXlPck9iamVjdCA6IE9iamVjdC5rZXlzKGFycmF5T3JPYmplY3QpO1xufVxuXG5mdW5jdGlvbiByZWFkSlNPTihqc29uUGF0aCwgdGhyb3dFeGNlcHRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoanNvblBhdGgsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFeGNlcHRpb24pIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlcEZpZWxkcyhwa2cpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgZGV2RGVwZW5kZW5jaWVzOiBwa2cuZGV2RGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBwa2cub3B0aW9uYWxEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgLy8gQnVuZGxlZERlcHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5LCBidXQgb2JqZWN0IG5vdGF0aW9uIGlzIGFsc28gc3VwcG9ydGVkIGJ5XG4gICAgLy8gYG5wbWAsIHNvIHdlIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgaWYgaXQgaXMgYW4gb2JqZWN0XG4gICAgYnVuZGxlZERlcGVuZGVuY2llczogYXJyYXlPcktleXMocGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBwa2cuYnVuZGxlZERlcGVuZGVuY2llcyB8fCBbXSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCkge1xuICBpZiAoIWRlcEZpZWxkQ2FjaGUuaGFzKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHJlYWRKU09OKHBhY2thZ2VKc29uUGF0aCwgdGhyb3dBdFJlYWQpKTtcbiAgICBkZXBGaWVsZENhY2hlLnNldChwYWNrYWdlSnNvblBhdGgsIGRlcEZpZWxkcyk7XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgdHJ1ZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYWNrYWdlQ29udGVudFtkZXBzS2V5XSwgX3BhY2thZ2VDb250ZW50W2RlcHNLZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ 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 1f3fa1d0d8..0c15051e02 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 @@ -4,7 +4,7 @@ -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -36,7 +36,7 @@ module.exports = { return { ImportDefaultSpecifier: function () {function ImportDefaultSpecifier(node) { var declaration = (0, _importDeclaration2['default'])(context); - var exportMap = _builder2['default'].get(declaration.source.value, context); + var exportMap = _ExportMap2['default'].get(declaration.source.value, context); if (exportMap == null) {return;} if (exportMap.errors.length) { @@ -93,4 +93,4 @@ module.exports = { * @copyright 2016 Desmond Brand. All rights reserved. * See LICENSE in root directory for full license. */ -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRNYXBCdWlsZGVyIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLCtDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxV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SCx5QkFBeUk0QixXQUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBwcm9wZXJ0eSBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbFByb3BlcnR5TG9va3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpIHtcbiAgICAgIGNvbnN0IGxvb2t1cHMgPSBhbGxQcm9wZXJ0eUxvb2t1cHMuZ2V0KG9iamVjdE5hbWUpIHx8IFtdO1xuICAgICAgbG9va3Vwcy5wdXNoKHsgbm9kZSwgcHJvcE5hbWUgfSk7XG4gICAgICBhbGxQcm9wZXJ0eUxvb2t1cHMuc2V0KG9iamVjdE5hbWUsIGxvb2t1cHMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChleHBvcnRNYXAuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGV4cG9ydE1hcC5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVJbXBvcnRzLnNldChub2RlLmxvY2FsLm5hbWUsIHtcbiAgICAgICAgICBleHBvcnRNYXAsXG4gICAgICAgICAgc291cmNlUGF0aDogZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBjb25zdCBvYmplY3ROYW1lID0gbm9kZS5vYmplY3QubmFtZTtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7XG4gICAgICAgIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpO1xuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNEZXN0cnVjdHVyZSA9IG5vZGUuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nXG4gICAgICAgICAgJiYgbm9kZS5pbml0ICE9IG51bGxcbiAgICAgICAgICAmJiBub2RlLmluaXQudHlwZSA9PT0gJ0lkZW50aWZpZXInO1xuICAgICAgICBpZiAoIWlzRGVzdHJ1Y3R1cmUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUuaW5pdC5uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IHsga2V5IH0gb2Ygbm9kZS5pZC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7IGNvbnRpbnVlOyB9ICAvLyB0cnVlIGZvciByZXN0IHByb3BlcnRpZXNcbiAgICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIGtleS5uYW1lLCBrZXkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgYWxsUHJvcGVydHlMb29rdXBzLmZvckVhY2goKGxvb2t1cHMsIG9iamVjdE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlSW1wb3J0ID0gZmlsZUltcG9ydHMuZ2V0KG9iamVjdE5hbWUpO1xuICAgICAgICAgIGlmIChmaWxlSW1wb3J0ID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvcE5hbWUsIG5vZGUgfSBvZiBsb29rdXBzKSB7XG4gICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBpbXBvcnQgY2FuIGhhdmUgYSBcImRlZmF1bHRcIiBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAnZGVmYXVsdCcpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmICghZmlsZUltcG9ydC5leHBvcnRNYXAubmFtZXNwYWNlLmhhcyhwcm9wTmFtZSkpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2F1dGlvbjogXFxgJHtvYmplY3ROYW1lfVxcYCBhbHNvIGhhcyBhIG5hbWVkIGV4cG9ydCBcXGAke3Byb3BOYW1lfVxcYC4gQ2hlY2sgaWYgeW91IG1lYW50IHRvIHdyaXRlIFxcYGltcG9ydCB7JHtwcm9wTmFtZX19IGZyb20gJyR7ZmlsZUltcG9ydC5zb3VyY2VQYXRofSdcXGAgaW5zdGVhZC5gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRzIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLHlDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxVQUFNQyxxQkFBcUIsSUFBSUQsR0FBSixFQUEzQjs7QUFFQSxlQUFTRSxtQkFBVCxDQUE2QkMsVUFBN0IsRUFBeUNDLFFBQXpDLEVBQW1EQyxJQUFuRCxFQUF5RDtBQUN2RCxZQUFNQyxVQUFVTCxtQkFBbUJNLEdBQW5CLENBQXVCSixVQUF2QixLQUFzQyxFQUF0RDtBQUNBRyxnQkFBUUUsSUFBUixDQUFhLEVBQUVILFVBQUYsRUFBUUQsa0JBQVIsRUFBYjtBQUNBSCwyQkFBbUJRLEdBQW5CLENBQXVCTixVQUF2QixFQUFtQ0csT0FBbkM7QUFDRDs7QUFFRCxhQUFPO0FBQ0xJLDhCQURLLCtDQUNrQkwsSUFEbEIsRUFDd0I7QUFDM0IsZ0JBQU1NLGNBQWMsb0NBQWtCYixPQUFsQixDQUFwQjtBQUNBLGdCQUFNYyxZQUFZQyx1QkFBUU4sR0FBUixDQUFZSSxZQUFZRyxNQUFaLENBQW1CQyxLQUEvQixFQUFzQ2pCLE9BQXRDLENBQWxCO0FBQ0EsZ0JBQUljLGFBQWEsSUFBakIsRUFBdUIsQ0FBRSxPQUFTOztBQUVsQyxnQkFBSUEsVUFBVUksTUFBVixDQUFpQkMsTUFBckIsRUFBNkI7QUFDM0JMLHdCQUFVTSxZQUFWLENBQXVCcEIsT0FBdkIsRUFBZ0NhLFdBQWhDO0FBQ0E7QUFDRDs7QUFFRFosd0JBQVlVLEdBQVosQ0FBZ0JKLEtBQUtjLEtBQUwsQ0FBV0MsSUFBM0IsRUFBaUM7QUFDL0JSLGtDQUQrQjtBQUUvQlMsMEJBQVlWLFlBQVlHLE1BQVosQ0FBbUJDLEtBRkEsRUFBakM7O0FBSUQsV0FmSTs7QUFpQkxPLHdCQWpCSyx5Q0FpQllqQixJQWpCWixFQWlCa0I7QUFDckIsZ0JBQU1GLGFBQWFFLEtBQUtrQixNQUFMLENBQVlILElBQS9CO0FBQ0EsZ0JBQU1oQixXQUFXQyxLQUFLbUIsUUFBTCxDQUFjSixJQUEvQjtBQUNBbEIsZ0NBQW9CQyxVQUFwQixFQUFnQ0MsUUFBaEMsRUFBMENDLElBQTFDO0FBQ0QsV0FyQkk7O0FBdUJMb0IsMEJBdkJLLDJDQXVCY3BCLElBdkJkLEVBdUJvQjtBQUN2QixnQkFBTXFCLGdCQUFnQnJCLEtBQUtzQixFQUFMLENBQVFwQyxJQUFSLEtBQWlCLGVBQWpCO0FBQ2pCYyxpQkFBS3VCLElBQUwsSUFBYSxJQURJO0FBRWpCdkIsaUJBQUt1QixJQUFMLENBQVVyQyxJQUFWLEtBQW1CLFlBRnhCO0FBR0EsZ0JBQUksQ0FBQ21DLGFBQUwsRUFBb0IsQ0FBRSxPQUFTOztBQUUvQixnQkFBTXZCLGFBQWFFLEtBQUt1QixJQUFMLENBQVVSLElBQTdCLENBTnVCO0FBT3ZCLG1DQUFzQmYsS0FBS3NCLEVBQUwsQ0FBUUUsVUFBOUIsOEhBQTBDLDRCQUE3QkMsR0FBNkIsUUFBN0JBLEdBQTZCO0FBQ3hDLG9CQUFJQSxPQUFPLElBQVgsRUFBaUIsQ0FBRSxTQUFXLENBRFUsQ0FDUjtBQUNoQzVCLG9DQUFvQkMsVUFBcEIsRUFBZ0MyQixJQUFJVixJQUFwQyxFQUEwQ1UsR0FBMUM7QUFDRCxlQVZzQjtBQVd4QixXQWxDSTs7QUFvQ0wsc0JBcENLLHNDQW9DWTtBQUNmN0IsK0JBQW1COEIsT0FBbkIsQ0FBMkIsVUFBQ3pCLE9BQUQsRUFBVUgsVUFBVixFQUF5QjtBQUNsRCxrQkFBTTZCLGFBQWFqQyxZQUFZUSxHQUFaLENBQWdCSixVQUFoQixDQUFuQjtBQUNBLGtCQUFJNkIsY0FBYyxJQUFsQixFQUF3QixDQUFFLE9BQVMsQ0FGZTs7QUFJbEQsc0NBQWlDMUIsT0FBakMsbUlBQTBDLDhCQUE3QkYsUUFBNkIsU0FBN0JBLFFBQTZCLENBQW5CQyxJQUFtQixTQUFuQkEsSUFBbUI7QUFDeEM7QUFDQSxzQkFBSUQsYUFBYSxTQUFqQixFQUE0QixDQUFFLFNBQVc7QUFDekMsc0JBQUksQ0FBQzRCLFdBQVdwQixTQUFYLENBQXFCcUIsU0FBckIsQ0FBK0JDLEdBQS9CLENBQW1DOUIsUUFBbkMsQ0FBTCxFQUFtRCxDQUFFLFNBQVc7O0FBRWhFTiwwQkFBUXFDLE1BQVIsQ0FBZTtBQUNiOUIsOEJBRGE7QUFFYitCLG1EQUF1QmpDLFVBQXZCLDJDQUFpRUMsUUFBakUsd0RBQXNIQSxRQUF0SCx5QkFBeUk0QixXQUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgcHJvcGVydHkgb2YgZGVmYXVsdCBleHBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXInKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBmaWxlSW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBhbGxQcm9wZXJ0eUxvb2t1cHMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKSB7XG4gICAgICBjb25zdCBsb29rdXBzID0gYWxsUHJvcGVydHlMb29rdXBzLmdldChvYmplY3ROYW1lKSB8fCBbXTtcbiAgICAgIGxvb2t1cHMucHVzaCh7IG5vZGUsIHByb3BOYW1lIH0pO1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLnNldChvYmplY3ROYW1lLCBsb29rdXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gaW1wb3J0RGVjbGFyYXRpb24oY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1hcCA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChleHBvcnRNYXAgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZXhwb3J0TWFwLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBleHBvcnRNYXAucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlSW1wb3J0cy5zZXQobm9kZS5sb2NhbC5uYW1lLCB7XG4gICAgICAgICAgZXhwb3J0TWFwLFxuICAgICAgICAgIHNvdXJjZVBhdGg6IGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0Lm5hbWU7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lO1xuICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKTtcbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzRGVzdHJ1Y3R1cmUgPSBub2RlLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJ1xuICAgICAgICAgICYmIG5vZGUuaW5pdCAhPSBudWxsXG4gICAgICAgICAgJiYgbm9kZS5pbml0LnR5cGUgPT09ICdJZGVudGlmaWVyJztcbiAgICAgICAgaWYgKCFpc0Rlc3RydWN0dXJlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLmluaXQubmFtZTtcbiAgICAgICAgZm9yIChjb25zdCB7IGtleSB9IG9mIG5vZGUuaWQucHJvcGVydGllcykge1xuICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgeyBjb250aW51ZTsgfSAgLy8gdHJ1ZSBmb3IgcmVzdCBwcm9wZXJ0aWVzXG4gICAgICAgICAgc3RvcmVQcm9wZXJ0eUxvb2t1cChvYmplY3ROYW1lLCBrZXkubmFtZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGFsbFByb3BlcnR5TG9va3Vwcy5mb3JFYWNoKChsb29rdXBzLCBvYmplY3ROYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZUltcG9ydCA9IGZpbGVJbXBvcnRzLmdldChvYmplY3ROYW1lKTtcbiAgICAgICAgICBpZiAoZmlsZUltcG9ydCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCB7IHByb3BOYW1lLCBub2RlIH0gb2YgbG9va3Vwcykge1xuICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgaW1wb3J0IGNhbiBoYXZlIGEgXCJkZWZhdWx0XCIgcHJvcGVydHlcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2RlZmF1bHQnKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBpZiAoIWZpbGVJbXBvcnQuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMocHJvcE5hbWUpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYENhdXRpb246IFxcYCR7b2JqZWN0TmFtZX1cXGAgYWxzbyBoYXMgYSBuYW1lZCBleHBvcnQgXFxgJHtwcm9wTmFtZX1cXGAuIENoZWNrIGlmIHlvdSBtZWFudCB0byB3cml0ZSBcXGBpbXBvcnQgeyR7cHJvcE5hbWV9fSBmcm9tICcke2ZpbGVJbXBvcnQuc291cmNlUGF0aH0nXFxgIGluc3RlYWQuYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 58bbb65799..63378a33a1 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 @@ -1,4 +1,4 @@ -'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -20,7 +20,7 @@ module.exports = { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -42,4 +42,4 @@ module.exports = { ExportDefaultSpecifier: checkDefault.bind(null, 'exported') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEsK0M7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHFCQUFpQkMsR0FBakIsQ0FBcUJILFlBQVlJLE1BQVosQ0FBbUJDLEtBQXhDLEVBQStDVixPQUEvQyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBpZGVudGlmaWVyIG9mIGRlZmF1bHQgZXhwb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQobmFtZUtleSwgZGVmYXVsdFNwZWNpZmllcikge1xuICAgICAgLy8gIzU2NjogZGVmYXVsdCBpcyBhIHZhbGlkIHNwZWNpZmllclxuICAgICAgaWYgKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSA9PT0gJ2RlZmF1bHQnKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmhhcygnZGVmYXVsdCcpICYmIGltcG9ydHMuaGFzKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSkpIHtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICBkZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgIGBVc2luZyBleHBvcnRlZCBuYW1lICcke2RlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZX0nIGFzIGlkZW50aWZpZXIgZm9yIGRlZmF1bHQgZXhwb3J0LmAsXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdsb2NhbCcpLFxuICAgICAgRXhwb3J0RGVmYXVsdFNwZWNpZmllcjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ2V4cG9ydGVkJyksXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHVCQUFRQyxHQUFSLENBQVlILFlBQVlJLE1BQVosQ0FBbUJDLEtBQS9CLEVBQXNDVixPQUF0QyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgaWRlbnRpZmllciBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gY2hlY2tEZWZhdWx0KG5hbWVLZXksIGRlZmF1bHRTcGVjaWZpZXIpIHtcbiAgICAgIC8vICM1NjY6IGRlZmF1bHQgaXMgYSB2YWxpZCBzcGVjaWZpZXJcbiAgICAgIGlmIChkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUgPT09ICdkZWZhdWx0JykgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5oYXMoJ2RlZmF1bHQnKSAmJiBpbXBvcnRzLmhhcyhkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUpKSB7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBgVXNpbmcgZXhwb3J0ZWQgbmFtZSAnJHtkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWV9JyBhcyBpZGVudGlmaWVyIGZvciBkZWZhdWx0IGV4cG9ydC5gLFxuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnbG9jYWwnKSxcbiAgICAgIEV4cG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdleHBvcnRlZCcpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 4bd4145245..2b0c783ade 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-namespace.js @@ -6,78 +6,13 @@ var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ /** - * @param {MemberExpression} memberExpression - * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` - */ /** - * @fileoverview Rule to disallow namespace import - * @author Radek Benkel - */function getMemberPropertyName(memberExpression) {return memberExpression.property.type === 'Identifier' ? memberExpression.property.name : - memberExpression.property.value; -} - -/** - * @param {ScopeManager} scopeManager - * @param {ASTNode} node - * @return {Set} - */ -function getVariableNamesInScope(scopeManager, node) { - var currentNode = node; - var scope = scopeManager.acquire(currentNode); - while (scope == null) { - currentNode = currentNode.parent; - scope = scopeManager.acquire(currentNode, true); - } - return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); -} - -/** - * - * @param {*} names - * @param {*} nameConflicts - * @param {*} namespaceName - */ -function generateLocalNames(names, nameConflicts, namespaceName) { - var localNames = {}; - names.forEach(function (name) { - var localName = void 0; - if (!nameConflicts[name].has(name)) { - localName = name; - } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { - localName = String(namespaceName) + '_' + String(name); - } else { - for (var i = 1; i < Infinity; i++) { - if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { - localName = String(namespaceName) + '_' + String(name) + '_' + String(i); - break; - } - } - } - localNames[name] = localName; - }); - return localNames; -} - -/** - * @param {Identifier[]} namespaceIdentifiers - * @returns {boolean} `true` if the namespace variable is more than just a glorified constant - */ -function usesNamespaceAsObject(namespaceIdentifiers) { - return !namespaceIdentifiers.every(function (identifier) { - var parent = identifier.parent; - - // `namespace.x` or `namespace['x']` - return ( - parent && - parent.type === 'MemberExpression' && ( - parent.property.type === 'Identifier' || parent.property.type === 'Literal')); - - }); -} - -module.exports = { - meta: { - type: 'suggestion', + * @fileoverview Rule to disallow namespace import + * @author Radek Benkel + */module.exports = { meta: { type: 'suggestion', docs: { category: 'Style guide', description: 'Forbid namespace (a.k.a. "wildcard" `*`) imports.', @@ -167,4 +102,74 @@ module.exports = { }return ImportNamespaceSpecifier;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibWVtYmVyRXhwcmVzc2lvbiIsInByb3BlcnR5IiwidHlwZSIsIm5hbWUiLCJ2YWx1ZSIsImdldFZhcmlhYmxlTmFtZXNJblNjb3BlIiwic2NvcGVNYW5hZ2VyIiwibm9kZSIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwicGFyZW50IiwiU2V0IiwidmFyaWFibGVzIiwiY29uY2F0IiwidXBwZXIiLCJtYXAiLCJ2YXJpYWJsZSIsImdlbmVyYXRlTG9jYWxOYW1lcyIsIm5hbWVzIiwibmFtZUNvbmZsaWN0cyIsIm5hbWVzcGFjZU5hbWUiLCJsb2NhbE5hbWVzIiwiZm9yRWFjaCIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSIsInVzZXNOYW1lc3BhY2VBc09iamVjdCIsIm5hbWVzcGFjZUlkZW50aWZpZXJzIiwiZXZlcnkiLCJpZGVudGlmaWVyIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaWdub3JlIiwiaXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNyZWF0ZSIsImNvbnRleHQiLCJmaXJzdE9wdGlvbiIsIm9wdGlvbnMiLCJpZ25vcmVHbG9icyIsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsImZpbmQiLCJnbG9iIiwic291cmNlIiwibWF0Y2hCYXNlIiwic2NvcGVWYXJpYWJsZXMiLCJnZXRTY29wZSIsIm5hbWVzcGFjZVZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNlIiwiY2FuRml4IiwibGVuZ3RoIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImltcG9ydE5hbWUiLCJsb2NhbENvbmZsaWN0cyIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwibmFtZWRJbXBvcnRTcGVjaWZpZXJzIiwicHVzaCIsInJlcGxhY2VUZXh0Iiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBOzs7MExBUkE7Ozs2TEFZQSxTQUFTQSxxQkFBVCxDQUErQkMsZ0JBQS9CLEVBQWlELENBQy9DLE9BQU9BLGlCQUFpQkMsUUFBakIsQ0FBMEJDLElBQTFCLEtBQW1DLFlBQW5DLEdBQ0hGLGlCQUFpQkMsUUFBakIsQ0FBMEJFLElBRHZCO0FBRUhILG1CQUFpQkMsUUFBakIsQ0FBMEJHLEtBRjlCO0FBR0Q7O0FBRUQ7Ozs7O0FBS0EsU0FBU0MsdUJBQVQsQ0FBaUNDLFlBQWpDLEVBQStDQyxJQUEvQyxFQUFxRDtBQUNuRCxNQUFJQyxjQUFjRCxJQUFsQjtBQUNBLE1BQUlFLFFBQVFILGFBQWFJLE9BQWIsQ0FBcUJGLFdBQXJCLENBQVo7QUFDQSxTQUFPQyxTQUFTLElBQWhCLEVBQXNCO0FBQ3BCRCxrQkFBY0EsWUFBWUcsTUFBMUI7QUFDQUYsWUFBUUgsYUFBYUksT0FBYixDQUFxQkYsV0FBckIsRUFBa0MsSUFBbEMsQ0FBUjtBQUNEO0FBQ0QsU0FBTyxJQUFJSSxHQUFKLENBQVFILE1BQU1JLFNBQU4sQ0FBZ0JDLE1BQWhCLENBQXVCTCxNQUFNTSxLQUFOLENBQVlGLFNBQW5DLEVBQThDRyxHQUE5QyxDQUFrRCxVQUFDQyxRQUFELFVBQWNBLFNBQVNkLElBQXZCLEVBQWxELENBQVIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7QUFNQSxTQUFTZSxrQkFBVCxDQUE0QkMsS0FBNUIsRUFBbUNDLGFBQW5DLEVBQWtEQyxhQUFsRCxFQUFpRTtBQUMvRCxNQUFNQyxhQUFhLEVBQW5CO0FBQ0FILFFBQU1JLE9BQU4sQ0FBYyxVQUFDcEIsSUFBRCxFQUFVO0FBQ3RCLFFB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RnVELG9CQUV0Q08saUJBQWlCUCxVQUFqQixDQUZzQyxDQUFoQixFQUFoQixDQUE5Qjs7QUFJQUYsc0JBQU1XLElBQU4sQ0FBV2IsTUFBTWMsV0FBTixDQUFrQjFFLElBQWxCLGdCQUE2QndFLHNCQUFzQkcsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBN0IsU0FBWDs7QUFFQTtBQUNBckQscUNBQXFCTixPQUFyQixDQUE2QixVQUFDUSxVQUFELEVBQWdCO0FBQzNDLHNCQUFNcEIsU0FBU29CLFdBQVdwQixNQUExQjtBQUNBLHNCQUFJQSxVQUFVQSxPQUFPVCxJQUFQLEtBQWdCLGtCQUE5QixFQUFrRDtBQUNoRCx3QkFBTXFFLGFBQWF4RSxzQkFBc0JZLE1BQXRCLENBQW5CO0FBQ0EwRCwwQkFBTVcsSUFBTixDQUFXYixNQUFNYyxXQUFOLENBQWtCdEUsTUFBbEIsRUFBMEJtRSxpQkFBaUJQLFVBQWpCLENBQTFCLENBQVg7QUFDRDtBQUNGLGlCQU5EOztBQVFBLHVCQUFPRixLQUFQO0FBQ0QsZUFoRFksRUFBZjs7QUFrREQsV0E5REkscUNBQVA7O0FBZ0VELEtBM0ZjLG1CQUFqQiIsImZpbGUiOiJuby1uYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBuYW1lc3BhY2UgaW1wb3J0XG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG5hbWVzcGFjZSAoYS5rLmEuIFwid2lsZGNhcmRcIiBgKmApIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZXNwYWNlJyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbe1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlnbm9yZToge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgZmlyc3RPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgaWdub3JlR2xvYnMgPSBmaXJzdE9wdGlvbi5pZ25vcmU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKGlnbm9yZUdsb2JzICYmIGlnbm9yZUdsb2JzLmZpbmQoKGdsb2IpID0+IG1pbmltYXRjaChub2RlLnBhcmVudC5zb3VyY2UudmFsdWUsIGdsb2IsIHsgbWF0Y2hCYXNlOiB0cnVlIH0pKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjb3BlVmFyaWFibGVzID0gY29udGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlVmFyaWFibGUgPSBzY29wZVZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4gdmFyaWFibGUuZGVmc1swXS5ub2RlID09PSBub2RlKTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlUmVmZXJlbmNlcyA9IG5hbWVzcGFjZVZhcmlhYmxlLnJlZmVyZW5jZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZUlkZW50aWZpZXJzID0gbmFtZXNwYWNlUmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBjYW5GaXggPSBuYW1lc3BhY2VJZGVudGlmaWVycy5sZW5ndGggPiAwICYmICF1c2VzTmFtZXNwYWNlQXNPYmplY3QobmFtZXNwYWNlSWRlbnRpZmllcnMpO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIG5hbWVzcGFjZSBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY29wZU1hbmFnZXIgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5zY29wZU1hbmFnZXI7XG4gICAgICAgICAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgICAgICAgICAvLyBQYXNzIDE6IENvbGxlY3QgdmFyaWFibGUgbmFtZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiBzY29wZSBmb3IgZWFjaCByZWZlcmVuY2Ugd2Ugd2FudFxuICAgICAgICAgICAgLy8gdG8gdHJhbnNmb3JtLCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRoYXQgd2UgY2hvb3NlIG5vbi1jb25mbGljdGluZyBpbXBvcnQgbmFtZXNcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWVDb25mbGljdHMgPSB7fTtcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbENvbmZsaWN0cyA9IGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgcGFyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0gPSBsb2NhbENvbmZsaWN0cztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbG9jYWxDb25mbGljdHMuZm9yRWFjaCgoYykgPT4gaW1wb3J0TmFtZUNvbmZsaWN0c1tpbXBvcnROYW1lXS5hZGQoYykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENob29zZSBuZXcgbmFtZXMgZm9yIGVhY2ggaW1wb3J0XG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lcyA9IE9iamVjdC5rZXlzKGltcG9ydE5hbWVDb25mbGljdHMpO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0TG9jYWxOYW1lcyA9IGdlbmVyYXRlTG9jYWxOYW1lcyhcbiAgICAgICAgICAgICAgaW1wb3J0TmFtZXMsXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHMsXG4gICAgICAgICAgICAgIG5hbWVzcGFjZVZhcmlhYmxlLm5hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgd2l0aCBhIGxpc3Qgb2YgSW1wb3J0U3BlY2lmaWVyc1xuICAgICAgICAgICAgY29uc3QgbmFtZWRJbXBvcnRTcGVjaWZpZXJzID0gaW1wb3J0TmFtZXMubWFwKChpbXBvcnROYW1lKSA9PiBpbXBvcnROYW1lID09PSBpbXBvcnRMb2NhbE5hbWVzW2ltcG9ydE5hbWVdXG4gICAgICAgICAgICAgID8gaW1wb3J0TmFtZVxuICAgICAgICAgICAgICA6IGAke2ltcG9ydE5hbWV9IGFzICR7aW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYHsgJHtuYW1lZEltcG9ydFNwZWNpZmllcnMuam9pbignLCAnKX0gfWApKTtcblxuICAgICAgICAgICAgLy8gUGFzcyAyOiBSZXBsYWNlIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVzcGFjZSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGltcG9ydHNcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KHBhcmVudCwgaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file + + +/** + * @param {Identifier[]} namespaceIdentifiers + * @returns {boolean} `true` if the namespace variable is more than just a glorified constant + */ +function usesNamespaceAsObject(namespaceIdentifiers) { + return !namespaceIdentifiers.every(function (identifier) { + var parent = identifier.parent; + + // `namespace.x` or `namespace['x']` + return ( + parent && + parent.type === 'MemberExpression' && ( + parent.property.type === 'Identifier' || parent.property.type === 'Literal')); + + }); +} + +/** + * @param {MemberExpression} memberExpression + * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` + */ +function getMemberPropertyName(memberExpression) { + return memberExpression.property.type === 'Identifier' ? + memberExpression.property.name : + memberExpression.property.value; +} + +/** + * @param {ScopeManager} scopeManager + * @param {ASTNode} node + * @return {Set} + */ +function getVariableNamesInScope(scopeManager, node) { + var currentNode = node; + var scope = scopeManager.acquire(currentNode); + while (scope == null) { + currentNode = currentNode.parent; + scope = scopeManager.acquire(currentNode, true); + } + return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); +} + +/** + * + * @param {*} names + * @param {*} nameConflicts + * @param {*} namespaceName + */ +function generateLocalNames(names, nameConflicts, namespaceName) { + var localNames = {}; + names.forEach(function (name) { + var localName = void 0; + if (!nameConflicts[name].has(name)) { + localName = name; + } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { + localName = String(namespaceName) + '_' + String(name); + } else { + for (var i = 1; i < Infinity; i++) { + if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { + localName = String(namespaceName) + '_' + String(name) + '_' + String(i); + break; + } + } + } + localNames[name] = localName; + }); + return localNames; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwicHJvcGVydGllcyIsImlnbm9yZSIsIml0ZW1zIiwidW5pcXVlSXRlbXMiLCJjcmVhdGUiLCJjb250ZXh0IiwiZmlyc3RPcHRpb24iLCJvcHRpb25zIiwiaWdub3JlR2xvYnMiLCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJub2RlIiwiZmluZCIsImdsb2IiLCJwYXJlbnQiLCJzb3VyY2UiLCJ2YWx1ZSIsIm1hdGNoQmFzZSIsInNjb3BlVmFyaWFibGVzIiwiZ2V0U2NvcGUiLCJ2YXJpYWJsZXMiLCJuYW1lc3BhY2VWYXJpYWJsZSIsInZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwibmFtZXNwYWNlSWRlbnRpZmllcnMiLCJtYXAiLCJyZWZlcmVuY2UiLCJpZGVudGlmaWVyIiwiY2FuRml4IiwibGVuZ3RoIiwidXNlc05hbWVzcGFjZUFzT2JqZWN0IiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwic2NvcGVNYW5hZ2VyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImZvckVhY2giLCJpbXBvcnROYW1lIiwiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibG9jYWxDb25mbGljdHMiLCJnZXRWYXJpYWJsZU5hbWVzSW5TY29wZSIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwiZ2VuZXJhdGVMb2NhbE5hbWVzIiwibmFtZSIsIm5hbWVkSW1wb3J0U3BlY2lmaWVycyIsInB1c2giLCJyZXBsYWNlVGV4dCIsImpvaW4iLCJldmVyeSIsInByb3BlcnR5IiwibWVtYmVyRXhwcmVzc2lvbiIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwiU2V0IiwiY29uY2F0IiwidXBwZXIiLCJuYW1lcyIsIm5hbWVDb25mbGljdHMiLCJuYW1lc3BhY2VOYW1lIiwibG9jYWxOYW1lcyIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBO0FBQ0E7QUFDQTtBQVZBOzs7R0FZQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNLEVBQ0pDLE1BQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsbURBRlQ7QUFHSkMsV0FBSywwQkFBUSxjQUFSLENBSEQsRUFGRjs7QUFPSkMsYUFBUyxNQVBMO0FBUUpDLFlBQVEsQ0FBQztBQUNQTixZQUFNLFFBREM7QUFFUE8sa0JBQVk7QUFDVkMsZ0JBQVE7QUFDTlIsZ0JBQU0sT0FEQTtBQUVOUyxpQkFBTztBQUNMVCxrQkFBTSxRQURELEVBRkQ7O0FBS05VLHVCQUFhLElBTFAsRUFERSxFQUZMLEVBQUQsQ0FSSixFQURTOzs7Ozs7QUF1QmZDLFFBdkJlLCtCQXVCUkMsT0F2QlEsRUF1QkM7QUFDZCxVQUFNQyxjQUFjRCxRQUFRRSxPQUFSLENBQWdCLENBQWhCLEtBQXNCLEVBQTFDO0FBQ0EsVUFBTUMsY0FBY0YsWUFBWUwsTUFBaEM7O0FBRUEsYUFBTztBQUNMUSxnQ0FESyxpREFDb0JDLElBRHBCLEVBQzBCO0FBQzdCLGdCQUFJRixlQUFlQSxZQUFZRyxJQUFaLENBQWlCLFVBQUNDLElBQUQsVUFBVSw0QkFBVUYsS0FBS0csTUFBTCxDQUFZQyxNQUFaLENBQW1CQyxLQUE3QixFQUFvQ0gsSUFBcEMsRUFBMEMsRUFBRUksV0FBVyxJQUFiLEVBQTFDLENBQVYsRUFBakIsQ0FBbkIsRUFBK0c7QUFDN0c7QUFDRDs7QUFFRCxnQkFBTUMsaUJBQWlCWixRQUFRYSxRQUFSLEdBQW1CQyxTQUExQztBQUNBLGdCQUFNQyxvQkFB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QW9CbUIsR0FBcEIsQ0FBd0JuQixJQUF4QixDQUFMLEVBQW9DO0FBQ2xDa0Isa0JBQVlsQixJQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUksQ0FBQ2UsY0FBY2YsSUFBZCxFQUFvQm1CLEdBQXBCLFFBQTJCSCxhQUEzQixpQkFBNENoQixJQUE1QyxFQUFMLEVBQTBEO0FBQy9Ea0IseUJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEM7QUFDRCxLQUZNLE1BRUE7QUFDTCxXQUFLLElBQUlvQixJQUFJLENBQWIsRUFBZ0JBLElBQUlDLFFBQXBCLEVBQThCRCxHQUE5QixFQUFtQztBQUNqQyxZQUFJLENBQUNMLGNBQWNmLElBQWQsRUFBb0JtQixHQUFwQixRQUEyQkgsYUFBM0IsaUJBQTRDaEIsSUFBNUMsaUJBQW9Eb0IsQ0FBcEQsRUFBTCxFQUErRDtBQUM3REYsNkJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEMsaUJBQXdDb0IsQ0FBeEM7QUFDQTtBQUNEO0FBQ0Y7QUFDRjtBQUNESCxlQUFXakIsSUFBWCxJQUFtQmtCLFNBQW5CO0FBQ0QsR0FmRDtBQWdCQSxTQUFPRCxVQUFQO0FBQ0QiLCJmaWxlIjoibm8tbmFtZXNwYWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgbmFtZXNwYWNlIGltcG9ydFxuICogQGF1dGhvciBSYWRlayBCZW5rZWxcbiAqL1xuXG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBuYW1lc3BhY2UgKGEuay5hLiBcIndpbGRjYXJkXCIgYCpgKSBpbXBvcnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVzcGFjZScpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZ25vcmU6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGlnbm9yZUdsb2JzID0gZmlyc3RPcHRpb24uaWdub3JlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChpZ25vcmVHbG9icyAmJiBpZ25vcmVHbG9icy5maW5kKChnbG9iKSA9PiBtaW5pbWF0Y2gobm9kZS5wYXJlbnQuc291cmNlLnZhbHVlLCBnbG9iLCB7IG1hdGNoQmFzZTogdHJ1ZSB9KSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY29wZVZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVZhcmlhYmxlID0gc2NvcGVWYXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLmRlZnNbMF0ubm9kZSA9PT0gbm9kZSk7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVJlZmVyZW5jZXMgPSBuYW1lc3BhY2VWYXJpYWJsZS5yZWZlcmVuY2VzO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VJZGVudGlmaWVycyA9IG5hbWVzcGFjZVJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgY2FuRml4ID0gbmFtZXNwYWNlSWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJiAhdXNlc05hbWVzcGFjZUFzT2JqZWN0KG5hbWVzcGFjZUlkZW50aWZpZXJzKTtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBuYW1lc3BhY2UgaW1wb3J0LmAsXG4gICAgICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVNYW5hZ2VyID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuc2NvcGVNYW5hZ2VyO1xuICAgICAgICAgICAgY29uc3QgZml4ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gUGFzcyAxOiBDb2xsZWN0IHZhcmlhYmxlIG5hbWVzIHRoYXQgYXJlIGFscmVhZHkgaW4gc2NvcGUgZm9yIGVhY2ggcmVmZXJlbmNlIHdlIHdhbnRcbiAgICAgICAgICAgIC8vIHRvIHRyYW5zZm9ybSwgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIGNob29zZSBub24tY29uZmxpY3RpbmcgaW1wb3J0IG5hbWVzXG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lQ29uZmxpY3RzID0ge307XG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxDb25mbGljdHMgPSBnZXRWYXJpYWJsZU5hbWVzSW5TY29wZShzY29wZU1hbmFnZXIsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdID0gbG9jYWxDb25mbGljdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29uZmxpY3RzLmZvckVhY2goKGMpID0+IGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0uYWRkKGMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDaG9vc2UgbmV3IG5hbWVzIGZvciBlYWNoIGltcG9ydFxuICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZXMgPSBPYmplY3Qua2V5cyhpbXBvcnROYW1lQ29uZmxpY3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydExvY2FsTmFtZXMgPSBnZW5lcmF0ZUxvY2FsTmFtZXMoXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVzLFxuICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzLFxuICAgICAgICAgICAgICBuYW1lc3BhY2VWYXJpYWJsZS5uYW1lLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIHdpdGggYSBsaXN0IG9mIEltcG9ydFNwZWNpZmllcnNcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkSW1wb3J0U3BlY2lmaWVycyA9IGltcG9ydE5hbWVzLm1hcCgoaW1wb3J0TmFtZSkgPT4gaW1wb3J0TmFtZSA9PT0gaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXVxuICAgICAgICAgICAgICA/IGltcG9ydE5hbWVcbiAgICAgICAgICAgICAgOiBgJHtpbXBvcnROYW1lfSBhcyAke2ltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV19YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGB7ICR7bmFtZWRJbXBvcnRTcGVjaWZpZXJzLmpvaW4oJywgJyl9IH1gKSk7XG5cbiAgICAgICAgICAgIC8vIFBhc3MgMjogUmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lc3BhY2Ugd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCBpbXBvcnRzXG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChwYXJlbnQsIGltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuIl19 \ 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 b75cff0d02..e0c9a5c894 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 @@ -12,15 +12,6 @@ var containsPath = function containsPath(filepath, target) { return relative === '' || !relative.startsWith('..'); }; -function isMatchingTargetPath(filename, targetPath) { - if ((0, _isGlob2['default'])(targetPath)) { - var mm = new _minimatch.Minimatch(targetPath); - return mm.match(filename); - } - - return containsPath(filename, targetPath); -} - module.exports = { meta: { type: 'problem', @@ -92,6 +83,15 @@ module.exports = { some(function (targetPath) {return isMatchingTargetPath(currentFilename, targetPath);});}); + function isMatchingTargetPath(filename, targetPath) { + if ((0, _isGlob2['default'])(targetPath)) { + var mm = new _minimatch.Minimatch(targetPath); + return mm.match(filename); + } + + return containsPath(filename, targetPath); + } + function isValidExceptionPath(absoluteFromPath, absoluteExceptionPath) { var relativeExceptionPath = _path2['default'].relative(absoluteFromPath, absoluteExceptionPath); @@ -242,4 +242,4 @@ module.exports = { checkForRestrictedImportPath(source.value, source); }, { commonjs: true }); }return noRestrictedPaths;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsImlzTWF0Y2hpbmdUYXJnZXRQYXRoIiwiZmlsZW5hbWUiLCJ0YXJnZXRQYXRoIiwibW0iLCJNaW5pbWF0Y2giLCJtYXRjaCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFB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QUEzRztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNnRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQWhLRCxPQUFpQjlELGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGZpbGVuYW1lLCB0YXJnZXRQYXRoKSB7XG4gIGlmIChpc0dsb2IodGFyZ2V0UGF0aCkpIHtcbiAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgcmV0dXJuIG1tLm1hdGNoKGZpbGVuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2Ugd2hpY2ggZmlsZXMgY2FuIGJlIGltcG9ydGVkIGluIGEgZ2l2ZW4gZm9sZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXJlc3RyaWN0ZWQtcGF0aHMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgem9uZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhjZXB0OiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYXNlUGF0aDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBub1Jlc3RyaWN0ZWRQYXRocyhjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCByZXN0cmljdGVkUGF0aHMgPSBvcHRpb25zLnpvbmVzIHx8IFtdO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGNvbnN0IG1hdGNoaW5nWm9uZXMgPSByZXN0cmljdGVkUGF0aHMuZmlsdGVyKFxuICAgICAgKHpvbmUpID0+IFtdLmNvbmNhdCh6b25lLnRhcmdldClcbiAgICAgICAgLm1hcCgodGFyZ2V0KSA9PiBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHRhcmdldCkpXG4gICAgICAgIC5zb21lKCh0YXJnZXRQYXRoKSA9PiBpc01hdGNoaW5nVGFyZ2V0UGF0aChjdXJyZW50RmlsZW5hbWUsIHRhcmdldFBhdGgpKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tUGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZUV4Y2VwdGlvblBhdGggPSBwYXRoLnJlbGF0aXZlKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCk7XG5cbiAgICAgIHJldHVybiBpbXBvcnRUeXBlKHJlbGF0aXZlRXhjZXB0aW9uUGF0aCwgY29udGV4dCkgIT09ICdwYXJlbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFyZUJvdGhHbG9iUGF0dGVybkFuZEFic29sdXRlUGF0aChhcmVHbG9iUGF0dGVybnMpIHtcbiAgICAgIHJldHVybiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiBpc0dsb2IpICYmIGFyZUdsb2JQYXR0ZXJucy5zb21lKChpc0dsb2IpID0+ICFpc0dsb2IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbmZpZ3VyZWQgYGZyb21gIHBhdGggZm9yIHRoYXQgem9uZS4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2Iobm9kZSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlLFxuICAgICAgICBtZXNzYWdlOiAnUmVzdHJpY3RlZCBwYXRoIGBmcm9tYCBtdXN0IGNvbnRhaW4gZWl0aGVyIG9ubHkgZ2xvYiBwYXR0ZXJucyBvciBub25lJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZ2xvYiBwYXR0ZXJucyB3aGVuIGBmcm9tYCBjb250YWlucyBnbG9iIHBhdHRlcm5zJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnM6IGZhbHNlLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uOiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChhYnNvbHV0ZUZyb20pO1xuICAgICAgY29uc3QgaXNQYXRoUmVzdHJpY3RlZCA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IG1tLm1hdGNoKGFic29sdXRlSW1wb3J0UGF0aCk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSB6b25lRXhjZXB0LmV2ZXJ5KGlzR2xvYik7XG5cbiAgICAgIGlmIChoYXNWYWxpZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXhjZXB0aW9uc01tID0gem9uZUV4Y2VwdC5tYXAoKGV4Y2VwdCkgPT4gbmV3IE1pbmltYXRjaChleGNlcHQpKTtcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gZXhjZXB0aW9uc01tLnNvbWUoKG1tKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUZyb20pO1xuXG4gICAgICBjb25zdCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzID0gem9uZUV4Y2VwdFxuICAgICAgICAubWFwKChleGNlcHRpb25QYXRoKSA9PiBwYXRoLnJlc29sdmUoYWJzb2x1dGVGcm9tLCBleGNlcHRpb25QYXRoKSk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzXG4gICAgICAgIC5ldmVyeSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb20sIGFic29sdXRlRXhjZXB0aW9uUGF0aCkpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGFic29sdXRlRXhjZXB0aW9uUGF0aHMuc29tZShcbiAgICAgICAgICAoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBvcnRJbnZhbGlkRXhjZXB0aW9uID0gcmVwb3J0SW52YWxpZEV4Y2VwdGlvblBhdGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUGF0aFJlc3RyaWN0ZWQsXG4gICAgICAgIGhhc1ZhbGlkRXhjZXB0aW9ucyxcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9ucyh2YWxpZGF0b3JzLCBub2RlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLnJlcG9ydEludmFsaWRFeGNlcHRpb24obm9kZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKHZhbGlkYXRvcnMsIG5vZGUsIGltcG9ydFBhdGgsIGN1c3RvbU1lc3NhZ2UpIHtcbiAgICAgIHZhbGlkYXRvcnMuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHBhdGggXCJ7e2ltcG9ydFBhdGh9fVwiIGltcG9ydGVkIGluIHJlc3RyaWN0ZWQgem9uZS4ke2N1c3RvbU1lc3NhZ2UgPyBgICR7Y3VzdG9tTWVzc2FnZX1gIDogJyd9YCxcbiAgICAgICAgICBkYXRhOiB7IGltcG9ydFBhdGggfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlUGF0aFZhbGlkYXRvcnMgPSAoem9uZUZyb20sIHpvbmVFeGNlcHQgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsWm9uZUZyb20gPSBbXS5jb25jYXQoem9uZUZyb20pO1xuICAgICAgY29uc3QgYXJlR2xvYlBhdHRlcm5zID0gYWxsWm9uZUZyb20ubWFwKGlzR2xvYik7XG5cbiAgICAgIGlmIChhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSkge1xuICAgICAgICByZXR1cm4gW2NvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzR2xvYlBhdHRlcm4gPSBhcmVHbG9iUGF0dGVybnMuZXZlcnkoKGlzR2xvYikgPT4gaXNHbG9iKTtcblxuICAgICAgcmV0dXJuIGFsbFpvbmVGcm9tLm1hcCgoc2luZ2xlWm9uZUZyb20pID0+IHtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVGcm9tID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCBzaW5nbGVab25lRnJvbSk7XG5cbiAgICAgICAgaWYgKGlzR2xvYlBhdHRlcm4pIHtcbiAgICAgICAgICByZXR1cm4gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wdXRlQWJzb2x1dGVQYXRoVmFsaWRhdG9yKGFic29sdXRlRnJvbSwgem9uZUV4Y2VwdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tGb3JSZXN0cmljdGVkSW1wb3J0UGF0aChpbXBvcnRQYXRoLCBub2RlKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZUltcG9ydFBhdGggPSByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWFic29sdXRlSW1wb3J0UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoaW5nWm9uZXMuZm9yRWFjaCgoem9uZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JzW2luZGV4XSkge1xuICAgICAgICAgIHZhbGlkYXRvcnNbaW5kZXhdID0gbWFrZVBhdGhWYWxpZGF0b3JzKHpvbmUuZnJvbSwgem9uZS5leGNlcHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoID0gdmFsaWRhdG9yc1tpbmRleF0uZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5pc1BhdGhSZXN0cmljdGVkKGFic29sdXRlSW1wb3J0UGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGguZmlsdGVyKCh2YWxpZGF0b3IpID0+ICF2YWxpZGF0b3IuaGFzVmFsaWRFeGNlcHRpb25zKTtcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9yc1dpdGhJbnZhbGlkRXhjZXB0aW9ucywgbm9kZSk7XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyA9IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aFxuICAgICAgICAgIC5maWx0ZXIoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyAmJiAhdmFsaWRhdG9yLmlzUGF0aEV4Y2VwdGlvbihhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgICAgcmVwb3J0SW1wb3J0c0luUmVzdHJpY3RlZFpvbmUoYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucywgbm9kZSwgaW1wb3J0UGF0aCwgem9uZS5tZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IHtcbiAgICAgIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoc291cmNlLnZhbHVlLCBzb3VyY2UpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJ0YXJnZXRQYXRoIiwiaXNNYXRjaGluZ1RhcmdldFBhdGgiLCJmaWxlbmFtZSIsIm1tIiwiTWluaW1hdGNoIiwibWF0Y2giLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFB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RztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNzRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQXpLRCxPQUFpQnBFLGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSB3aGljaCBmaWxlcyBjYW4gYmUgaW1wb3J0ZWQgaW4gYSBnaXZlbiBmb2xkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB6b25lczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleGNlcHQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQYXRoOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIG5vUmVzdHJpY3RlZFBhdGhzKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQYXRocyA9IG9wdGlvbnMuem9uZXMgfHwgW107XG4gICAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2VQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgY3VycmVudEZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgbWF0Y2hpbmdab25lcyA9IHJlc3RyaWN0ZWRQYXRocy5maWx0ZXIoXG4gICAgICAoem9uZSkgPT4gW10uY29uY2F0KHpvbmUudGFyZ2V0KVxuICAgICAgICAubWFwKCh0YXJnZXQpID0+IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgdGFyZ2V0KSlcbiAgICAgICAgLnNvbWUoKHRhcmdldFBhdGgpID0+IGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGN1cnJlbnRGaWxlbmFtZSwgdGFyZ2V0UGF0aCkpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBpc01hdGNoaW5nVGFyZ2V0UGF0aChmaWxlbmFtZSwgdGFyZ2V0UGF0aCkge1xuICAgICAgaWYgKGlzR2xvYih0YXJnZXRQYXRoKSkge1xuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgICAgIHJldHVybiBtbS5tYXRjaChmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFeGNlcHRpb25QYXRoKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVFeGNlcHRpb25QYXRoID0gcGF0aC5yZWxhdGl2ZShhYnNvbHV0ZUZyb21QYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpO1xuXG4gICAgICByZXR1cm4gaW1wb3J0VHlwZShyZWxhdGl2ZUV4Y2VwdGlvblBhdGgsIGNvbnRleHQpICE9PSAncGFyZW50JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gYXJlR2xvYlBhdHRlcm5zLnNvbWUoKGlzR2xvYikgPT4gaXNHbG9iKSAmJiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiAhaXNHbG9iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aChub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb25maWd1cmVkIGBmcm9tYCBwYXRoIGZvciB0aGF0IHpvbmUuJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25NaXhlZEdsb2JBbmROb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBgZnJvbWAgbXVzdCBjb250YWluIGVpdGhlciBvbmx5IGdsb2IgcGF0dGVybnMgb3Igbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYihub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGdsb2IgcGF0dGVybnMgd2hlbiBgZnJvbWAgY29udGFpbnMgZ2xvYiBwYXR0ZXJucycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zOiBmYWxzZSxcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbjogcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goYWJzb2x1dGVGcm9tKTtcbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gem9uZUV4Y2VwdC5ldmVyeShpc0dsb2IpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGV4Y2VwdGlvbnNNbSA9IHpvbmVFeGNlcHQubWFwKChleGNlcHQpID0+IG5ldyBNaW5pbWF0Y2goZXhjZXB0KSk7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGV4Y2VwdGlvbnNNbS5zb21lKChtbSkgPT4gbW0ubWF0Y2goYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcG9ydEludmFsaWRFeGNlcHRpb24gPSByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZCxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zLFxuICAgICAgICBpc1BhdGhFeGNlcHRpb24sXG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBpc1BhdGhSZXN0cmljdGVkID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVGcm9tKTtcblxuICAgICAgY29uc3QgYWJzb2x1dGVFeGNlcHRpb25QYXRocyA9IHpvbmVFeGNlcHRcbiAgICAgICAgLm1hcCgoZXhjZXB0aW9uUGF0aCkgPT4gcGF0aC5yZXNvbHZlKGFic29sdXRlRnJvbSwgZXhjZXB0aW9uUGF0aCkpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gYWJzb2x1dGVFeGNlcHRpb25QYXRoc1xuICAgICAgICAuZXZlcnkoKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpKTtcblxuICAgICAgaWYgKGhhc1ZhbGlkRXhjZXB0aW9ucykge1xuICAgICAgICBpc1BhdGhFeGNlcHRpb24gPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzLnNvbWUoXG4gICAgICAgICAgKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9ycywgbm9kZSkge1xuICAgICAgdmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5yZXBvcnRJbnZhbGlkRXhjZXB0aW9uKG5vZGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSh2YWxpZGF0b3JzLCBub2RlLCBpbXBvcnRQYXRoLCBjdXN0b21NZXNzYWdlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBwYXRoIFwie3tpbXBvcnRQYXRofX1cIiBpbXBvcnRlZCBpbiByZXN0cmljdGVkIHpvbmUuJHtjdXN0b21NZXNzYWdlID8gYCAke2N1c3RvbU1lc3NhZ2V9YCA6ICcnfWAsXG4gICAgICAgICAgZGF0YTogeyBpbXBvcnRQYXRoIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhdGhWYWxpZGF0b3JzID0gKHpvbmVGcm9tLCB6b25lRXhjZXB0ID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGFsbFpvbmVGcm9tID0gW10uY29uY2F0KHpvbmVGcm9tKTtcbiAgICAgIGNvbnN0IGFyZUdsb2JQYXR0ZXJucyA9IGFsbFpvbmVGcm9tLm1hcChpc0dsb2IpO1xuXG4gICAgICBpZiAoYXJlQm90aEdsb2JQYXR0ZXJuQW5kQWJzb2x1dGVQYXRoKGFyZUdsb2JQYXR0ZXJucykpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCldO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0dsb2JQYXR0ZXJuID0gYXJlR2xvYlBhdHRlcm5zLmV2ZXJ5KChpc0dsb2IpID0+IGlzR2xvYik7XG5cbiAgICAgIHJldHVybiBhbGxab25lRnJvbS5tYXAoKHNpbmdsZVpvbmVGcm9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic29sdXRlRnJvbSA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgc2luZ2xlWm9uZUZyb20pO1xuXG4gICAgICAgIGlmIChpc0dsb2JQYXR0ZXJuKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoaW1wb3J0UGF0aCwgbm9kZSkge1xuICAgICAgY29uc3QgYWJzb2x1dGVJbXBvcnRQYXRoID0gcmVzb2x2ZShpbXBvcnRQYXRoLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFhYnNvbHV0ZUltcG9ydFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGluZ1pvbmVzLmZvckVhY2goKHpvbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yc1tpbmRleF0pIHtcbiAgICAgICAgICB2YWxpZGF0b3JzW2luZGV4XSA9IG1ha2VQYXRoVmFsaWRhdG9ycyh6b25lLmZyb20sIHpvbmUuZXhjZXB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aCA9IHZhbGlkYXRvcnNbaW5kZXhdLmZpbHRlcigodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IuaXNQYXRoUmVzdHJpY3RlZChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zID0gYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoLmZpbHRlcigodmFsaWRhdG9yKSA9PiAhdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyk7XG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb25zKHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMsIG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGhcbiAgICAgICAgICAuZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5oYXNWYWxpZEV4Y2VwdGlvbnMgJiYgIXZhbGlkYXRvci5pc1BhdGhFeGNlcHRpb24oYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICAgIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMsIG5vZGUsIGltcG9ydFBhdGgsIHpvbmUubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlKSA9PiB7XG4gICAgICBjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoKHNvdXJjZS52YWx1ZSwgc291cmNlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ== \ 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 4347b2c4a0..f6f6348b16 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 @@ -13,171 +13,54 @@ var _object = require('object.values');var _object2 = _interopRequireDefault(_ob var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype); -var _fsWalk = require('../core/fsWalk'); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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 - */ /** - * Attempt to load the internal `FileEnumerator` class, which has existed in a couple - * of different places, depending on the version of `eslint`. Try requiring it from both - * locations. - * @returns Returns the `FileEnumerator` class if its requirable, otherwise `undefined`. - */function requireFileEnumerator() {var FileEnumerator = void 0; - - // Try getting it from the eslint private / deprecated api - try {var _require = - require('eslint/use-at-your-own-risk');FileEnumerator = _require.FileEnumerator; - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - // If not there, then try getting it from eslint/lib/cli-engine/file-enumerator (moved there in v6) - try {var _require2 = - require('eslint/lib/cli-engine/file-enumerator');FileEnumerator = _require2.FileEnumerator; - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } + */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.concat((0, _arrayPrototype2['default'])(src, function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); + + return _originalListFilesToProcess(patterns); + }; } } - return FileEnumerator; } -/** - * - * @param FileEnumerator the `FileEnumerator` class from `eslint`'s internal api - * @param {string} src path to the src root - * @param {string[]} extensions list of supported extensions - * @returns {{ filename: string, ignored: boolean }[]} list of files to operate on - */ -function listFilesUsingFileEnumerator(FileEnumerator, src, extensions) { - var e = new FileEnumerator({ - extensions: extensions }); - - - return Array.from( - e.iterateFiles(src), - function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { filename: filePath, ignored: ignored };}); - -} - -/** - * Attempt to require old versions of the file enumeration capability from v6 `eslint` and earlier, and use - * those functions to provide the list of files to operate on - * @param {string} src path to the src root - * @param {string[]} extensions list of supported extensions - * @returns {string[]} list of files to operate on - */ -function listFilesWithLegacyFunctions(src, extensions) { - 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 - - return originalListFilesToProcess(src, { +if (FileEnumerator) { + listFilesToProcess = function listFilesToProcess(src, extensions) { + var e = new FileEnumerator({ extensions: extensions }); - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - // Last place to try (pre v5.3) - var _require4 = - - require('eslint/lib/util/glob-util'),_originalListFilesToProcess = _require4.listFilesToProcess; - var patterns = src.concat( - (0, _arrayPrototype2['default'])( - src, - function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); - - - - return _originalListFilesToProcess(patterns); - } -} - -/** - * Given a source root and list of supported extensions, use fsWalk and the - * new `eslint` `context.session` api to build the list of files we want to operate on - * @param {string[]} srcPaths array of source paths (for flat config this should just be a singular root (e.g. cwd)) - * @param {string[]} extensions list of supported extensions - * @param {{ isDirectoryIgnored: (path: string) => boolean, isFileIgnored: (path: string) => boolean }} session eslint context session object - * @returns {string[]} list of files to operate on - */ -function listFilesWithModernApi(srcPaths, extensions, session) { - /** @type {string[]} */ - var files = [];var _loop = function _loop( - - i) { - var src = srcPaths[i]; - // Use walkSync along with the new session api to gather the list of files - var entries = (0, _fsWalk.walkSync)(src, { - deepFilter: function () {function deepFilter(entry) { - var fullEntryPath = (0, _path.resolve)(src, entry.path); - - // Include the directory if it's not marked as ignore by eslint - return !session.isDirectoryIgnored(fullEntryPath); - }return deepFilter;}(), - entryFilter: function () {function entryFilter(entry) { - var fullEntryPath = (0, _path.resolve)(src, entry.path); - - // Include the file if it's not marked as ignore by eslint and its extension is included in our list - return ( - !session.isFileIgnored(fullEntryPath) && - extensions.find(function (extension) {return entry.path.endsWith(extension);})); - - }return entryFilter;}() }); - - // Filter out directories and map entries to their paths - files.push.apply(files, _toConsumableArray( - entries. - filter(function (entry) {return !entry.dirent.isDirectory();}). - map(function (entry) {return entry.path;})));};for (var i = 0; i < srcPaths.length; i++) {_loop(i); + return Array.from(e.iterateFiles(src), function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { + ignored: ignored, + filename: filePath };}); - } - return files; -} - -/** - * Given a src pattern and list of supported extensions, return a list of files to process - * with this rule. - * @param {string} src - file, directory, or glob pattern of files to act on - * @param {string[]} extensions - list of supported file extensions - * @param {import('eslint').Rule.RuleContext} context - the eslint context object - * @returns {string[] | { filename: string, ignored: boolean }[]} the list of files that this rule will evaluate. - */ -function listFilesToProcess(src, extensions, context) { - // If the context object has the new session functions, then prefer those - // Otherwise, fallback to using the deprecated `FileEnumerator` for legacy support. - // https://github.com/eslint/eslint/issues/18087 - if ( - context.session && - context.session.isFileIgnored && - context.session.isDirectoryIgnored) - { - return listFilesWithModernApi(src, extensions, context.session); - } - - // Fallback to og FileEnumerator - var FileEnumerator = requireFileEnumerator(); - - // If we got the FileEnumerator, then let's go with that - if (FileEnumerator) { - return listFilesUsingFileEnumerator(FileEnumerator, src, extensions); - } - // If not, then we can try even older versions of this capability (listFilesToProcess) - return listFilesWithLegacyFunctions(src, extensions); + }; } var EXPORT_DEFAULT_DECLARATION = 'ExportDefaultDeclaration'; @@ -199,30 +82,28 @@ var DEFAULT = 'default'; function forEachDeclarationIdentifier(declaration, cb) { if (declaration) { - var isTypeDeclaration = declaration.type === TS_INTERFACE_DECLARATION || - declaration.type === TS_TYPE_ALIAS_DECLARATION || - declaration.type === TS_ENUM_DECLARATION; - if ( declaration.type === FUNCTION_DECLARATION || declaration.type === CLASS_DECLARATION || - isTypeDeclaration) + declaration.type === TS_INTERFACE_DECLARATION || + declaration.type === TS_TYPE_ALIAS_DECLARATION || + declaration.type === TS_ENUM_DECLARATION) { - cb(declaration.id.name, isTypeDeclaration); + cb(declaration.id.name); } else if (declaration.type === VARIABLE_DECLARATION) { declaration.declarations.forEach(function (_ref2) {var id = _ref2.id; if (id.type === OBJECT_PATTERN) { - (0, _patternCapture2['default'])(id, function (pattern) { + (0, _ExportMap.recursivePatternCapture)(id, function (pattern) { if (pattern.type === IDENTIFIER) { - cb(pattern.name, false); + cb(pattern.name); } }); } else if (id.type === ARRAY_PATTERN) { id.elements.forEach(function (_ref3) {var name = _ref3.name; - cb(name, false); + cb(name); }); } else { - cb(id.name, false); + cb(id.name); } }); } @@ -279,7 +160,6 @@ var exportList = new Map(); var visitorKeyMap = new Map(); -/** @type {Set} */ var ignoredFiles = new Set(); var filesOutsideSrc = new Set(); @@ -289,40 +169,32 @@ var isNodeModule = function isNodeModule(path) {return (/\/(node_modules)\//.tes * read all files matching the patterns in src and ignoreExports * * return all files matching src pattern, which are not matching the ignoreExports pattern - * @type {(src: string, ignoreExports: string, context: import('eslint').Rule.RuleContext) => Set} */ -function resolveFiles(src, ignoreExports, context) { +var resolveFiles = function resolveFiles(src, ignoreExports, context) { var extensions = Array.from((0, _ignore.getFileExtensions)(context.settings)); - var srcFileList = listFilesToProcess(src, extensions, context); + var srcFileList = listFilesToProcess(src, extensions); // prepare list of ignored files - var ignoredFilesList = listFilesToProcess(ignoreExports, extensions, context); - - // The modern api will return a list of file paths, rather than an object - if (ignoredFilesList.length && typeof ignoredFilesList[0] === 'string') { - ignoredFilesList.forEach(function (filename) {return ignoredFiles.add(filename);}); - } else { - ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); - } + var ignoredFilesList = listFilesToProcess(ignoreExports, extensions); + ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); // prepare list of source files, don't consider files from node_modules - var resolvedFiles = srcFileList.length && typeof srcFileList[0] === 'string' ? - srcFileList.filter(function (filePath) {return !isNodeModule(filePath);}) : - (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;}); - return new Set(resolvedFiles); -} + return new Set( + (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;})); + +}; /** - * parse all source files and build up 2 maps containing the existing imports and exports - */ + * parse all source files and build up 2 maps containing the existing imports and exports + */ var prepareImportsAndExports = function prepareImportsAndExports(srcFiles, context) { var exportAll = new Map(); srcFiles.forEach(function (file) { var exports = new Map(); var imports = new Map(); - var currentExports = _builder2['default'].get(file, context); + var currentExports = _ExportMap2['default'].get(file, context); if (currentExports) {var dependencies = @@ -454,7 +326,6 @@ var getSrc = function getSrc(src) { * prepare the lists of existing imports and exports - should only be executed once at * the start of a new eslint run */ -/** @type {Set} */ var srcFiles = void 0; var lastPrepareKey = void 0; var doPreparation = function doPreparation(src, ignoreExports, context) { @@ -569,10 +440,6 @@ module.exports = { unusedExports: { description: 'report exports without any usage', - type: 'boolean' }, - - ignoreUnusedTypeExports: { - description: 'ignore type exports without any usage', type: 'boolean' } }, @@ -602,8 +469,7 @@ module.exports = { - - context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports,ignoreUnusedTypeExports = _ref9.ignoreUnusedTypeExports; + context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports; if (unusedExports) { doPreparation(src, ignoreExports, context); @@ -635,15 +501,11 @@ module.exports = { exportCount.set(IMPORT_NAMESPACE_SPECIFIER, namespaceImports); }return checkExportPresence;}(); - var checkUsage = function () {function checkUsage(node, exportedValue, isTypeExport) { + var checkUsage = function () {function checkUsage(node, exportedValue) { if (!unusedExports) { return; } - if (isTypeExport && ignoreUnusedTypeExports) { - return; - } - if (ignoredFiles.has(file)) { return; } @@ -667,10 +529,6 @@ module.exports = { exports = exportList.get(file); - if (!exports) { - console.error('file `' + String(file) + '` has no exports. Please update to the latest, and if it still happens, report this on https://github.com/import-js/eslint-plugin-import/issues/2866!'); - } - // special case: export * from var exportAll = exports.get(EXPORT_ALL_DECLARATION); if (typeof exportAll !== 'undefined' && exportedValue !== IMPORT_DEFAULT_SPECIFIER) { @@ -1072,16 +930,16 @@ module.exports = { checkExportPresence(node); }return ProgramExit;}(), ExportDefaultDeclaration: function () {function ExportDefaultDeclaration(node) { - checkUsage(node, IMPORT_DEFAULT_SPECIFIER, false); + checkUsage(node, IMPORT_DEFAULT_SPECIFIER); }return ExportDefaultDeclaration;}(), ExportNamedDeclaration: function () {function ExportNamedDeclaration(node) { node.specifiers.forEach(function (specifier) { - checkUsage(specifier, specifier.exported.name || specifier.exported.value, false); + checkUsage(specifier, specifier.exported.name || specifier.exported.value); }); - forEachDeclarationIdentifier(node.declaration, function (name, isTypeExport) { - checkUsage(node, name, isTypeExport); + forEachDeclarationIdentifier(node.declaration, function (name) { + checkUsage(node, name); }); }return ExportNamedDeclaration;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlRmlsZUVudW1lcmF0b3IiLCJGaWxlRW51bWVyYXRvciIsInJlcXVpcmUiLCJlIiwiY29kZSIsImxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IiLCJzcmMiLCJleHRlbnNpb25zIiwiQXJyYXkiLCJmcm9tIiwiaXRlcmF0ZUZpbGVzIiwiZmlsZVBhdGgiLCJpZ25vcmVkIiwiZmlsZW5hbWUiLCJsaXN0RmlsZXNXaXRoTGVnYWN5RnVuY3Rpb25zIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJsaXN0RmlsZXNUb1Byb2Nlc3MiLCJwYXR0ZXJucyIsImNvbmNhdCIsInBhdHRlcm4iLCJtYXAiLCJleHRlbnNpb24iLCJ0ZXN0IiwibGlzdEZpbGVzV2l0aE1vZGVybkFwaSIsInNyY1BhdGhzIiwic2Vzc2lvbiIsImZpbGVzIiwiaSIsImVudHJpZXMiLCJkZWVwRmlsdGVyIiwiZW50cnkiLCJmdWxsRW50cnlQYXRoIiwicGF0aCIsImlzRGlyZWN0b3J5SWdub3JlZCIsImVudHJ5RmlsdGVyIiwiaXNGaWxlSWdub3JlZCIsImZpbmQiLCJlbmRzV2l0aCIsInB1c2giLCJmaWx0ZXIiLCJkaXJlbnQiLCJpc0RpcmVjdG9yeSIsImxlbmd0aCIsImNvbnRleHQiLCJFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiIsIkVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiIsIkVYUE9SVF9BTExfREVDTEFSQVRJT04iLCJJTVBPUlRfREVDTEFSQVRJT04iLCJJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiIsIklNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiIsIlZBUklBQkxFX0RFQ0xBUkFUSU9OIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJDTEFTU19ERUNMQVJBVElPTiIsIklERU5USUZJRVIiLCJPQkpFQ1RfUEFUVEVSTiIsIkFSUkFZX1BBVFRFUk4iLCJUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04iLCJUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OIiwiVFNfRU5VTV9ERUNMQVJBVElPTiIsIkRFRkFVTFQiLCJmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyIiwiZGVjbGFyYXRpb24iLCJjYiIsImlzVHlwZURlY2xhcmF0aW9uIiwidHlwZSIsImlkIiwibmFtZSIsImRlY2xhcmF0aW9ucyIsImZvckVhY2giLCJlbGVtZW50cyIsImltcG9ydExpc3QiLCJNYXAiLCJleHBvcnRMaXN0IiwidmlzaXRvcktleU1hcCIsImlnbm9yZWRGaWxlcyIsIlNldCIsImZpbGVzT3V0c2lkZVNyYyIsImlzTm9kZU1vZHVsZSIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJzZXR0aW5ncyIsInNyY0ZpbGVMaXN0IiwiaWdub3JlZEZpbGVzTGlzdCIsImFkZCIsInJlc29sdmVkRmlsZXMiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiaWdub3JlVW51c2VkVHlwZUV4cG9ydHMiLCJhbnlPZiIsIm1pbkl0ZW1zIiwicmVxdWlyZWQiLCJjcmVhdGUiLCJvcHRpb25zIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiY2hlY2tFeHBvcnRQcmVzZW5jZSIsIm5vZGUiLCJleHBvcnRDb3VudCIsIm5hbWVzcGFjZUltcG9ydHMiLCJzaXplIiwicmVwb3J0IiwiYm9keSIsImNoZWNrVXNhZ2UiLCJleHBvcnRlZFZhbHVlIiwiaXNUeXBlRXhwb3J0IiwiY29uc29sZSIsImVycm9yIiwiZXhwb3J0c0tleSIsInVwZGF0ZUV4cG9ydFVzYWdlIiwibmV3RXhwb3J0cyIsIm5ld0V4cG9ydElkZW50aWZpZXJzIiwiZXhwb3J0ZWQiLCJ1cGRhdGVJbXBvcnRVc2FnZSIsIm9sZEltcG9ydFBhdGhzIiwib2xkTmFtZXNwYWNlSW1wb3J0cyIsIm5ld05hbWVzcGFjZUltcG9ydHMiLCJvbGRFeHBvcnRBbGwiLCJuZXdFeHBvcnRBbGwiLCJvbGREZWZhdWx0SW1wb3J0cyIsIm5ld0RlZmF1bHRJbXBvcnRzIiwib2xkSW1wb3J0cyIsIm5ld0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInNvdXJjZSIsInAiLCJJbXBvcnRFeHByZXNzaW9uIiwiY2hpbGQiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsImFzdE5vZGUiLCJyZXNvbHZlZFBhdGgiLCJyYXciLCJyZXBsYWNlIiwiaW1wb3J0ZWQiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQTtBQUNBLHNEO0FBQ0Esa0Q7QUFDQTtBQUNBLDJEO0FBQ0EsdUM7QUFDQSwrQztBQUNBLHlEOztBQUVBO0FBQ0EsK0M7QUFDQSw2RDtBQUNBLHFDLDJVQWxCQTs7OztvWEFvQkE7Ozs7O3VYQU1BLFNBQVNBLHFCQUFULEdBQWlDLENBQy9CLElBQUlDLHVCQUFKOztBQUVBO0FBQ0EsTUFBSTtBQUNvQkMsWUFBUSw2QkFBUixDQURwQixDQUNDRCxjQURELFlBQ0NBLGNBREQ7QUFFSCxHQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxRQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsWUFBTUQsQ0FBTjtBQUNEOztBQUVEO0FBQ0EsUUFBSTtBQUNvQkQsY0FBUSx1Q0FBUixDQURwQixDQUNDRCxjQURELGFBQ0NBLGNBREQ7QUFFSCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxVQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsY0FBTUQsQ0FBTjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU9GLGNBQVA7QUFDRDs7QUFFRDs7Ozs7OztBQU9BLFNBQVNJLDRCQUFULENBQXNDSixjQUF0QyxFQUFzREssR0FBdEQsRUFBMkRDLFVBQTNELEVBQXVFO0FBQ3JFLE1BQU1KLElBQUksSUFBSUYsY0FBSixDQUFtQjtBQUMzQk0sMEJBRDJCLEVBQW5CLENBQVY7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QW1CckgsSUFBbkIsSUFBMkI4QyxVQUFVdUUsUUFBVixDQUFtQmhGLEtBQXBFLEVBQTJFLEtBQTNFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCNEcsS0FBSzNHLFdBQWxDLEVBQStDLFVBQUNLLElBQUQsRUFBTzhHLFlBQVAsRUFBd0I7QUFDckVGLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakIsRUFBdUI4RyxZQUF2QjtBQUNELGFBRkQ7QUFHRCxXQWhCSSxtQ0FBUDs7QUFrQkQsS0FwaUJjLG1CQUFqQiIsImZpbGUiOiJuby11bnVzZWQtbW9kdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbW9kdWxlcyBjb250YWluIGV4cG9ydHMgYW5kL29yIGFsbFxuICogbW9kdWxlcyBhcmUgY29uc3VtZWQgd2l0aGluIG90aGVyIG1vZHVsZXMuXG4gKiBAYXV0aG9yIFJlbsOpIEZlcm1hbm5cbiAqL1xuXG5pbXBvcnQgeyBnZXRGaWxlRXh0ZW5zaW9ucyB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnb2JqZWN0LnZhbHVlcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IGZsYXRNYXAgZnJvbSAnYXJyYXkucHJvdG90eXBlLmZsYXRtYXAnO1xuXG5pbXBvcnQgeyB3YWxrU3luYyB9IGZyb20gJy4uL2NvcmUvZnNXYWxrJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZSBmcm9tICcuLi9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8qKlxuICogQXR0ZW1wdCB0byBsb2FkIHRoZSBpbnRlcm5hbCBgRmlsZUVudW1lcmF0b3JgIGNsYXNzLCB3aGljaCBoYXMgZXhpc3RlZCBpbiBhIGNvdXBsZVxuICogb2YgZGlmZmVyZW50IHBsYWNlcywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIGBlc2xpbnRgLiAgVHJ5IHJlcXVpcmluZyBpdCBmcm9tIGJvdGhcbiAqIGxvY2F0aW9ucy5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGBGaWxlRW51bWVyYXRvcmAgY2xhc3MgaWYgaXRzIHJlcXVpcmFibGUsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCkge1xuICBsZXQgRmlsZUVudW1lcmF0b3I7XG5cbiAgLy8gVHJ5IGdldHRpbmcgaXQgZnJvbSB0aGUgZXNsaW50IHByaXZhdGUgLyBkZXByZWNhdGVkIGFwaVxuICB0cnkge1xuICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBBYnNvcmIgdGhpcyBpZiBpdCdzIE1PRFVMRV9OT1RfRk9VTkRcbiAgICBpZiAoZS5jb2RlICE9PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IHRoZXJlLCB0aGVuIHRyeSBnZXR0aW5nIGl0IGZyb20gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciAobW92ZWQgdGhlcmUgaW4gdjYpXG4gICAgdHJ5IHtcbiAgICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL2NsaS1lbmdpbmUvZmlsZS1lbnVtZXJhdG9yJykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFic29yYiB0aGlzIGlmIGl0J3MgTU9EVUxFX05PVF9GT1VORFxuICAgICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBGaWxlRW51bWVyYXRvcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIEZpbGVFbnVtZXJhdG9yIHRoZSBgRmlsZUVudW1lcmF0b3JgIGNsYXNzIGZyb20gYGVzbGludGAncyBpbnRlcm5hbCBhcGlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3sgZmlsZW5hbWU6IHN0cmluZywgaWdub3JlZDogYm9vbGVhbiB9W119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNVc2luZ0ZpbGVFbnVtZXJhdG9yKEZpbGVFbnVtZXJhdG9yLCBzcmMsIGV4dGVuc2lvbnMpIHtcbiAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgZXh0ZW5zaW9ucyxcbiAgfSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgZS5pdGVyYXRlRmlsZXMoc3JjKSxcbiAgICAoeyBmaWxlUGF0aCwgaWdub3JlZCB9KSA9PiAoeyBmaWxlbmFtZTogZmlsZVBhdGgsIGlnbm9yZWQgfSksXG4gICk7XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byByZXF1aXJlIG9sZCB2ZXJzaW9ucyBvZiB0aGUgZmlsZSBlbnVtZXJhdGlvbiBjYXBhYmlsaXR5IGZyb20gdjYgYGVzbGludGAgYW5kIGVhcmxpZXIsIGFuZCB1c2VcbiAqIHRob3NlIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3N0cmluZ1tdfSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzV2l0aExlZ2FjeUZ1bmN0aW9ucyhzcmMsIGV4dGVuc2lvbnMpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICBjb25zdCB7IGxpc3RGaWxlc1RvUHJvY2Vzczogb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MgfSA9IHJlcXVpcmUoJ2VzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzJyk7XG4gICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjE2LjAvbGliL3V0aWwvZ2xvYi11dGlscy5qcyNMMTc4LUwyODBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjIuMC9saWIvdXRpbC9nbG9iLXV0aWwuanMjTDE3NC1MMjY5XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gQWJzb3JiIHRoaXMgaWYgaXQncyBNT0RVTEVfTk9UX0ZPVU5EXG4gICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIC8vIExhc3QgcGxhY2UgdG8gdHJ5IChwcmUgdjUuMylcbiAgICBjb25zdCB7XG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3M6IG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzLFxuICAgIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsJyk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBzcmMuY29uY2F0KFxuICAgICAgZmxhdE1hcChcbiAgICAgICAgc3JjLFxuICAgICAgICAocGF0dGVybikgPT4gZXh0ZW5zaW9ucy5tYXAoKGV4dGVuc2lvbikgPT4gKC9cXCpcXCp8XFwqXFwuLykudGVzdChwYXR0ZXJuKSA/IHBhdHRlcm4gOiBgJHtwYXR0ZXJufS8qKi8qJHtleHRlbnNpb259YCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MocGF0dGVybnMpO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzb3VyY2Ugcm9vdCBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgdXNlIGZzV2FsayBhbmQgdGhlXG4gKiBuZXcgYGVzbGludGAgYGNvbnRleHQuc2Vzc2lvbmAgYXBpIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIGZpbGVzIHdlIHdhbnQgdG8gb3BlcmF0ZSBvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3JjUGF0aHMgYXJyYXkgb2Ygc291cmNlIHBhdGhzIChmb3IgZmxhdCBjb25maWcgdGhpcyBzaG91bGQganVzdCBiZSBhIHNpbmd1bGFyIHJvb3QgKGUuZy4gY3dkKSlcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHt7IGlzRGlyZWN0b3J5SWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiwgaXNGaWxlSWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB9fSBzZXNzaW9uIGVzbGludCBjb250ZXh0IHNlc3Npb24gb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyY1BhdGhzLCBleHRlbnNpb25zLCBzZXNzaW9uKSB7XG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IGZpbGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmNQYXRocy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHNyYyA9IHNyY1BhdGhzW2ldO1xuICAgIC8vIFVzZSB3YWxrU3luYyBhbG9uZyB3aXRoIHRoZSBuZXcgc2Vzc2lvbiBhcGkgdG8gZ2F0aGVyIHRoZSBsaXN0IG9mIGZpbGVzXG4gICAgY29uc3QgZW50cmllcyA9IHdhbGtTeW5jKHNyYywge1xuICAgICAgZGVlcEZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBkaXJlY3RvcnkgaWYgaXQncyBub3QgbWFya2VkIGFzIGlnbm9yZSBieSBlc2xpbnRcbiAgICAgICAgcmV0dXJuICFzZXNzaW9uLmlzRGlyZWN0b3J5SWdub3JlZChmdWxsRW50cnlQYXRoKTtcbiAgICAgIH0sXG4gICAgICBlbnRyeUZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBmaWxlIGlmIGl0J3Mgbm90IG1hcmtlZCBhcyBpZ25vcmUgYnkgZXNsaW50IGFuZCBpdHMgZXh0ZW5zaW9uIGlzIGluY2x1ZGVkIGluIG91ciBsaXN0XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIXNlc3Npb24uaXNGaWxlSWdub3JlZChmdWxsRW50cnlQYXRoKVxuICAgICAgICAgICYmIGV4dGVuc2lvbnMuZmluZCgoZXh0ZW5zaW9uKSA9PiBlbnRyeS5wYXRoLmVuZHNXaXRoKGV4dGVuc2lvbikpXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIG91dCBkaXJlY3RvcmllcyBhbmQgbWFwIGVudHJpZXMgdG8gdGhlaXIgcGF0aHNcbiAgICBmaWxlcy5wdXNoKFxuICAgICAgLi4uZW50cmllc1xuICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkucGF0aCksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzcmMgcGF0dGVybiBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgcmV0dXJuIGEgbGlzdCBvZiBmaWxlcyB0byBwcm9jZXNzXG4gKiB3aXRoIHRoaXMgcnVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBmaWxlLCBkaXJlY3RvcnksIG9yIGdsb2IgcGF0dGVybiBvZiBmaWxlcyB0byBhY3Qgb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgLSBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7aW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0fSBjb250ZXh0IC0gdGhlIGVzbGludCBjb250ZXh0IG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ1tdIHwgeyBmaWxlbmFtZTogc3RyaW5nLCBpZ25vcmVkOiBib29sZWFuIH1bXX0gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB0aGlzIHJ1bGUgd2lsbCBldmFsdWF0ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzVG9Qcm9jZXNzKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dCkge1xuICAvLyBJZiB0aGUgY29udGV4dCBvYmplY3QgaGFzIHRoZSBuZXcgc2Vzc2lvbiBmdW5jdGlvbnMsIHRoZW4gcHJlZmVyIHRob3NlXG4gIC8vIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgYEZpbGVFbnVtZXJhdG9yYCBmb3IgbGVnYWN5IHN1cHBvcnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8xODA4N1xuICBpZiAoXG4gICAgY29udGV4dC5zZXNzaW9uXG4gICAgJiYgY29udGV4dC5zZXNzaW9uLmlzRmlsZUlnbm9yZWRcbiAgICAmJiBjb250ZXh0LnNlc3Npb24uaXNEaXJlY3RvcnlJZ25vcmVkXG4gICkge1xuICAgIHJldHVybiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dC5zZXNzaW9uKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIG9nIEZpbGVFbnVtZXJhdG9yXG4gIGNvbnN0IEZpbGVFbnVtZXJhdG9yID0gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCk7XG5cbiAgLy8gSWYgd2UgZ290IHRoZSBGaWxlRW51bWVyYXRvciwgdGhlbiBsZXQncyBnbyB3aXRoIHRoYXRcbiAgaWYgKEZpbGVFbnVtZXJhdG9yKSB7XG4gICAgcmV0dXJuIGxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IoRmlsZUVudW1lcmF0b3IsIHNyYywgZXh0ZW5zaW9ucyk7XG4gIH1cbiAgLy8gSWYgbm90LCB0aGVuIHdlIGNhbiB0cnkgZXZlbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGNhcGFiaWxpdHkgKGxpc3RGaWxlc1RvUHJvY2VzcylcbiAgcmV0dXJuIGxpc3RGaWxlc1dpdGhMZWdhY3lGdW5jdGlvbnMoc3JjLCBleHRlbnNpb25zKTtcbn1cblxuY29uc3QgRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04gPSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiA9ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9BTExfREVDTEFSQVRJT04gPSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX0RFQ0xBUkFUSU9OID0gJ0ltcG9ydERlY2xhcmF0aW9uJztcbmNvbnN0IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSID0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic7XG5jb25zdCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic7XG5jb25zdCBWQVJJQUJMRV9ERUNMQVJBVElPTiA9ICdWYXJpYWJsZURlY2xhcmF0aW9uJztcbmNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xuY29uc3QgQ0xBU1NfREVDTEFSQVRJT04gPSAnQ2xhc3NEZWNsYXJhdGlvbic7XG5jb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuY29uc3QgT0JKRUNUX1BBVFRFUk4gPSAnT2JqZWN0UGF0dGVybic7XG5jb25zdCBBUlJBWV9QQVRURVJOID0gJ0FycmF5UGF0dGVybic7XG5jb25zdCBUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04gPSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic7XG5jb25zdCBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OID0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nO1xuY29uc3QgVFNfRU5VTV9ERUNMQVJBVElPTiA9ICdUU0VudW1EZWNsYXJhdGlvbic7XG5jb25zdCBERUZBVUxUID0gJ2RlZmF1bHQnO1xuXG5mdW5jdGlvbiBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKGRlY2xhcmF0aW9uLCBjYikge1xuICBpZiAoZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBpc1R5cGVEZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLnR5cGUgPT09IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfRU5VTV9ERUNMQVJBVElPTjtcblxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgaXNUeXBlRGVjbGFyYXRpb25cbiAgICApIHtcbiAgICAgIGNiKGRlY2xhcmF0aW9uLmlkLm5hbWUsIGlzVHlwZURlY2xhcmF0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpZC50eXBlID09PSBBUlJBWV9QQVRURVJOKSB7XG4gICAgICAgICAgaWQuZWxlbWVudHMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGNiKG5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYihpZC5uYW1lLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbmNvbnN0IGlnbm9yZWRGaWxlcyA9IG5ldyBTZXQoKTtcbmNvbnN0IGZpbGVzT3V0c2lkZVNyYyA9IG5ldyBTZXQoKTtcblxuY29uc3QgaXNOb2RlTW9kdWxlID0gKHBhdGgpID0+ICgvXFwvKG5vZGVfbW9kdWxlcylcXC8vKS50ZXN0KHBhdGgpO1xuXG4vKipcbiAqIHJlYWQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJucyBpbiBzcmMgYW5kIGlnbm9yZUV4cG9ydHNcbiAqXG4gKiByZXR1cm4gYWxsIGZpbGVzIG1hdGNoaW5nIHNyYyBwYXR0ZXJuLCB3aGljaCBhcmUgbm90IG1hdGNoaW5nIHRoZSBpZ25vcmVFeHBvcnRzIHBhdHRlcm5cbiAqIEB0eXBlIHsoc3JjOiBzdHJpbmcsIGlnbm9yZUV4cG9ydHM6IHN0cmluZywgY29udGV4dDogaW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0KSA9PiBTZXQ8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbGVzKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkge1xuICBjb25zdCBleHRlbnNpb25zID0gQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSk7XG5cbiAgY29uc3Qgc3JjRmlsZUxpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCBleHRlbnNpb25zLCBjb250ZXh0KTtcblxuICAvLyBwcmVwYXJlIGxpc3Qgb2YgaWdub3JlZCBmaWxlc1xuICBjb25zdCBpZ25vcmVkRmlsZXNMaXN0ID0gbGlzdEZpbGVzVG9Qcm9jZXNzKGlnbm9yZUV4cG9ydHMsIGV4dGVuc2lvbnMsIGNvbnRleHQpO1xuXG4gIC8vIFRoZSBtb2Rlcm4gYXBpIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBmaWxlIHBhdGhzLCByYXRoZXIgdGhhbiBhbiBvYmplY3RcbiAgaWYgKGlnbm9yZWRGaWxlc0xpc3QubGVuZ3RoICYmIHR5cGVvZiBpZ25vcmVkRmlsZXNMaXN0WzBdID09PSAnc3RyaW5nJykge1xuICAgIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoZmlsZW5hbWUpID0+IGlnbm9yZWRGaWxlcy5hZGQoZmlsZW5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICBpZ25vcmVkRmlsZXNMaXN0LmZvckVhY2goKHsgZmlsZW5hbWUgfSkgPT4gaWdub3JlZEZpbGVzLmFkZChmaWxlbmFtZSkpO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcbiAgY29uc3QgcmVzb2x2ZWRGaWxlcyA9IHNyY0ZpbGVMaXN0Lmxlbmd0aCAmJiB0eXBlb2Ygc3JjRmlsZUxpc3RbMF0gPT09ICdzdHJpbmcnXG4gICAgPyBzcmNGaWxlTGlzdC5maWx0ZXIoKGZpbGVQYXRoKSA9PiAhaXNOb2RlTW9kdWxlKGZpbGVQYXRoKSlcbiAgICA6IGZsYXRNYXAoc3JjRmlsZUxpc3QsICh7IGZpbGVuYW1lIH0pID0+IGlzTm9kZU1vZHVsZShmaWxlbmFtZSkgPyBbXSA6IGZpbGVuYW1lKTtcblxuICByZXR1cm4gbmV3IFNldChyZXNvbHZlZEZpbGVzKTtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbGwgc291cmNlIGZpbGVzIGFuZCBidWlsZCB1cCAyIG1hcHMgY29udGFpbmluZyB0aGUgZXhpc3RpbmcgaW1wb3J0cyBhbmQgZXhwb3J0c1xuICovXG5jb25zdCBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMgPSAoc3JjRmlsZXMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZXhwb3J0QWxsID0gbmV3IE1hcCgpO1xuICBzcmNGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgY29uc3QgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZmlsZSwgY29udGV4dCk7XG4gICAgaWYgKGN1cnJlbnRFeHBvcnRzKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcmVleHBvcnRzLFxuICAgICAgICBpbXBvcnRzOiBsb2NhbEltcG9ydExpc3QsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgdmlzaXRvcktleXMsXG4gICAgICB9ID0gY3VycmVudEV4cG9ydHM7XG5cbiAgICAgIHZpc2l0b3JLZXlNYXAuc2V0KGZpbGUsIHZpc2l0b3JLZXlzKTtcbiAgICAgIC8vIGRlcGVuZGVuY2llcyA9PT0gZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgY3VycmVudEV4cG9ydEFsbCA9IG5ldyBTZXQoKTtcbiAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKChnZXREZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBnZXREZXBlbmRlbmN5KCk7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEV4cG9ydEFsbC5hZGQoZGVwZW5kZW5jeS5wYXRoKTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0QWxsLnNldChmaWxlLCBjdXJyZW50RXhwb3J0QWxsKTtcblxuICAgICAgcmVleHBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gREVGQVVMVCkge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBvcnRzLnNldChrZXksIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVleHBvcnQgPSB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG4vKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xubGV0IHNyY0ZpbGVzO1xubGV0IGxhc3RQcmVwYXJlS2V5O1xuY29uc3QgZG9QcmVwYXJhdGlvbiA9IChzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgcHJlcGFyZUtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzcmM6IChzcmMgfHwgW10pLnNvcnQoKSxcbiAgICBpZ25vcmVFeHBvcnRzOiAoaWdub3JlRXhwb3J0cyB8fCBbXSkuc29ydCgpLFxuICAgIGV4dGVuc2lvbnM6IEFycmF5LmZyb20oZ2V0RmlsZUV4dGVuc2lvbnMoY29udGV4dC5zZXR0aW5ncykpLnNvcnQoKSxcbiAgfSk7XG4gIGlmIChwcmVwYXJlS2V5ID09PSBsYXN0UHJlcGFyZUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGltcG9ydExpc3QuY2xlYXIoKTtcbiAgZXhwb3J0TGlzdC5jbGVhcigpO1xuICBpZ25vcmVkRmlsZXMuY2xlYXIoKTtcbiAgZmlsZXNPdXRzaWRlU3JjLmNsZWFyKCk7XG5cbiAgc3JjRmlsZXMgPSByZXNvbHZlRmlsZXMoZ2V0U3JjKHNyYyksIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMoc3JjRmlsZXMsIGNvbnRleHQpO1xuICBkZXRlcm1pbmVVc2FnZSgpO1xuICBsYXN0UHJlcGFyZUtleSA9IHByZXBhcmVLZXk7XG59O1xuXG5jb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG5jb25zdCBuZXdEZWZhdWx0SW1wb3J0RXhpc3RzID0gKHNwZWNpZmllcnMpID0+IHNwZWNpZmllcnMuc29tZSgoeyB0eXBlIH0pID0+IHR5cGUgPT09IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG5cbmNvbnN0IGZpbGVJc0luUGtnID0gKGZpbGUpID0+IHtcbiAgY29uc3QgeyBwYXRoLCBwa2cgfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZSB9KTtcbiAgY29uc3QgYmFzZVBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGRTdHJpbmcgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAoam9pbihiYXNlUGF0aCwgcGtnRmllbGQpID09PSBmaWxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZE9iamVjdCA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGNvbnN0IHBrZ0ZpZWxkRmlsZXMgPSBmbGF0TWFwKHZhbHVlcyhwa2dGaWVsZCksICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyBbXSA6IGpvaW4oYmFzZVBhdGgsIHZhbHVlKSk7XG5cbiAgICBpZiAoaW5jbHVkZXMocGtnRmllbGRGaWxlcywgZmlsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwa2dGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZ0ZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRPYmplY3QocGtnRmllbGQpO1xuICAgIH1cbiAgfTtcblxuICBpZiAocGtnLnByaXZhdGUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGtnLmJpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5iaW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGtnLmJyb3dzZXIpIHtcbiAgICBpZiAoY2hlY2tQa2dGaWVsZChwa2cuYnJvd3NlcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cubWFpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZy5tYWluKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG1vZHVsZXMgd2l0aG91dCBleHBvcnRzLCBvciBleHBvcnRzIHdpdGhvdXQgbWF0Y2hpbmcgaW1wb3J0IGluIGFub3RoZXIgbW9kdWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXVudXNlZC1tb2R1bGVzJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHNyYzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgdG8gYmUgYW5hbHl6ZWQgKG9ubHkgZm9yIHVudXNlZCBleHBvcnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgZm9yIHdoaWNoIHVudXNlZCBleHBvcnRzIHdpbGwgbm90IGJlIHJlcG9ydGVkIChlLmcgbW9kdWxlIGVudHJ5IHBvaW50cyknLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdyZXBvcnQgbW9kdWxlcyB3aXRob3V0IGFueSBleHBvcnRzJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIHVudXNlZEV4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgdHlwZSBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVudXNlZEV4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgICBzcmM6IHtcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndW51c2VkRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWydtaXNzaW5nRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNyYyxcbiAgICAgIGlnbm9yZUV4cG9ydHMgPSBbXSxcbiAgICAgIG1pc3NpbmdFeHBvcnRzLFxuICAgICAgdW51c2VkRXhwb3J0cyxcbiAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSwgaXNUeXBlRXhwb3J0KSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlRXhwb3J0ICYmIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIGlmICghZXhwb3J0cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBmaWxlIFxcYCR7ZmlsZX1cXGAgaGFzIG5vIGV4cG9ydHMuIFBsZWFzZSB1cGRhdGUgdG8gdGhlIGxhdGVzdCwgYW5kIGlmIGl0IHN0aWxsIGhhcHBlbnMsIHJlcG9ydCB0aGlzIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbXBvcnQtanMvZXNsaW50LXBsdWdpbi1pbXBvcnQvaXNzdWVzLzI4NjYhYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uoc3BlY2lmaWVyLCBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIobm9kZS5kZWNsYXJhdGlvbiwgKG5hbWUsIGlzVHlwZUV4cG9ydCkgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uobm9kZSwgbmFtZSwgaXNUeXBlRXhwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJGaWxlRW51bWVyYXRvciIsImxpc3RGaWxlc1RvUHJvY2VzcyIsInJlcXVpcmUiLCJlIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJzcmMiLCJleHRlbnNpb25zIiwicGF0dGVybnMiLCJjb25jYXQiLCJwYXR0ZXJuIiwibWFwIiwiZXh0ZW5zaW9uIiwidGVzdCIsIkFycmF5IiwiZnJvbSIsIml0ZXJhdGVGaWxlcyIsImZpbGVQYXRoIiwiaWdub3JlZCIsImZpbGVuYW1lIiwiRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04iLCJFWFBPUlRfTkFNRURfREVDTEFSQVRJT04iLCJFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIiLCJJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIiLCJWQVJJQUJMRV9ERUNMQVJBVElPTiIsIkZVTkNUSU9OX0RFQ0xBUkFUSU9OIiwiQ0xBU1NfREVDTEFSQVRJT04iLCJJREVOVElGSUVSIiwiT0JKRUNUX1BBVFRFUk4iLCJBUlJBWV9QQVRURVJOIiwiVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OIiwiVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTiIsIlRTX0VOVU1fREVDTEFSQVRJT04iLCJERUZBVUxUIiwiZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllciIsImRlY2xhcmF0aW9uIiwiY2IiLCJ0eXBlIiwiaWQiLCJuYW1lIiwiZGVjbGFyYXRpb25zIiwiZm9yRWFjaCIsImVsZW1lbnRzIiwiaW1wb3J0TGlzdCIsIk1hcCIsImV4cG9ydExpc3QiLCJ2aXNpdG9yS2V5TWFwIiwiaWdub3JlZEZpbGVzIiwiU2V0IiwiZmlsZXNPdXRzaWRlU3JjIiwiaXNOb2RlTW9kdWxlIiwicGF0aCIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJjb250ZXh0Iiwic2V0dGluZ3MiLCJzcmNGaWxlTGlzdCIsImlnbm9yZWRGaWxlc0xpc3QiLCJhZGQiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0cyIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiYW55T2YiLCJtaW5JdGVtcyIsInJlcXVpcmVkIiwiY3JlYXRlIiwib3B0aW9ucyIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsImNoZWNrRXhwb3J0UHJlc2VuY2UiLCJub2RlIiwiZXhwb3J0Q291bnQiLCJuYW1lc3BhY2VJbXBvcnRzIiwic2l6ZSIsInJlcG9ydCIsImJvZHkiLCJjaGVja1VzYWdlIiwiZXhwb3J0ZWRWYWx1ZSIsImV4cG9ydHNLZXkiLCJ1cGRhdGVFeHBvcnRVc2FnZSIsIm5ld0V4cG9ydHMiLCJuZXdFeHBvcnRJZGVudGlmaWVycyIsImxlbmd0aCIsImV4cG9ydGVkIiwidXBkYXRlSW1wb3J0VXNhZ2UiLCJvbGRJbXBvcnRQYXRocyIsIm9sZE5hbWVzcGFjZUltcG9ydHMiLCJuZXdOYW1lc3BhY2VJbXBvcnRzIiwib2xkRXhwb3J0QWxsIiwibmV3RXhwb3J0QWxsIiwib2xkRGVmYXVsdEltcG9ydHMiLCJuZXdEZWZhdWx0SW1wb3J0cyIsIm9sZEltcG9ydHMiLCJuZXdJbXBvcnRzIiwicHJvY2Vzc0R5bmFtaWNJbXBvcnQiLCJzb3VyY2UiLCJwIiwiSW1wb3J0RXhwcmVzc2lvbiIsImNoaWxkIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJhc3ROb2RlIiwicmVzb2x2ZWRQYXRoIiwicmF3IiwicmVwbGFjZSIsImZpbHRlciIsImltcG9ydGVkIiwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUE7QUFDQSxzRDtBQUNBLGtEO0FBQ0E7QUFDQSwyRDtBQUNBLHVDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQSx5QztBQUNBLHFDLDJVQWhCQTs7OzttWEFrQkEsSUFBSUEsdUJBQUosQ0FDQSxJQUFJQywyQkFBSjtBQUVBLElBQUk7QUFD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QmpFLE9BQWhCLENBQXdCLFVBQUM2QyxTQUFELEVBQWU7QUFDckM2RCx5QkFBVzdELFNBQVgsRUFBc0JBLFVBQVVvRSxRQUFWLENBQW1CbkgsSUFBbkIsSUFBMkIrQyxVQUFVb0UsUUFBVixDQUFtQjdFLEtBQXBFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCMkcsS0FBSzFHLFdBQWxDLEVBQStDLFVBQUNJLElBQUQsRUFBVTtBQUN2RDRHLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakI7QUFDRCxhQUZEO0FBR0QsV0FoQkksbUNBQVA7O0FBa0JELEtBdmhCYyxtQkFBakIiLCJmaWxlIjoibm8tdW51c2VkLW1vZHVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG1vZHVsZXMgY29udGFpbiBleHBvcnRzIGFuZC9vciBhbGxcbiAqIG1vZHVsZXMgYXJlIGNvbnN1bWVkIHdpdGhpbiBvdGhlciBtb2R1bGVzLlxuICogQGF1dGhvciBSZW7DqSBGZXJtYW5uXG4gKi9cblxuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbnMgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRQa2dVcCBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3JlYWRQa2dVcCc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJ29iamVjdC52YWx1ZXMnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IEV4cG9ydHMsIHsgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgfSBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCBGaWxlRW51bWVyYXRvcjtcbmxldCBsaXN0RmlsZXNUb1Byb2Nlc3M7XG5cbnRyeSB7XG4gICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG59IGNhdGNoIChlKSB7XG4gIHRyeSB7XG4gICAgLy8gaGFzIGJlZW4gbW92ZWQgdG8gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciBpbiB2ZXJzaW9uIDZcbiAgICAoeyBGaWxlRW51bWVyYXRvciB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvcicpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbHMnKTtcblxuICAgICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2Jsb2IvdjUuMTYuMC9saWIvdXRpbC9nbG9iLXV0aWxzLmpzI0wxNzgtTDI4MFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvYmxvYi92NS4yLjAvbGliL3V0aWwvZ2xvYi11dGlsLmpzI0wxNzQtTDI2OVxuICAgICAgbGlzdEZpbGVzVG9Qcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgZXh0ZW5zaW9ucykge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbCcpO1xuXG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gc3JjLmNvbmNhdChmbGF0TWFwKHNyYywgKHBhdHRlcm4pID0+IGV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+ICgvXFwqXFwqfFxcKlxcLi8pLnRlc3QocGF0dGVybikgPyBwYXR0ZXJuIDogYCR7cGF0dGVybn0vKiovKiR7ZXh0ZW5zaW9ufWApKSk7XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzKHBhdHRlcm5zKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmlmIChGaWxlRW51bWVyYXRvcikge1xuICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZS5pdGVyYXRlRmlsZXMoc3JjKSwgKHsgZmlsZVBhdGgsIGlnbm9yZWQgfSkgPT4gKHtcbiAgICAgIGlnbm9yZWQsXG4gICAgICBmaWxlbmFtZTogZmlsZVBhdGgsXG4gICAgfSkpO1xuICB9O1xufVxuXG5jb25zdCBFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiA9ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX0FMTF9ERUNMQVJBVElPTiA9ICdFeHBvcnRBbGxEZWNsYXJhdGlvbic7XG5jb25zdCBJTVBPUlRfREVDTEFSQVRJT04gPSAnSW1wb3J0RGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIgPSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJztcbmNvbnN0IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiA9ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJztcbmNvbnN0IFZBUklBQkxFX0RFQ0xBUkFUSU9OID0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nO1xuY29uc3QgRlVOQ1RJT05fREVDTEFSQVRJT04gPSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG5jb25zdCBDTEFTU19ERUNMQVJBVElPTiA9ICdDbGFzc0RlY2xhcmF0aW9uJztcbmNvbnN0IElERU5USUZJRVIgPSAnSWRlbnRpZmllcic7XG5jb25zdCBPQkpFQ1RfUEFUVEVSTiA9ICdPYmplY3RQYXR0ZXJuJztcbmNvbnN0IEFSUkFZX1BBVFRFUk4gPSAnQXJyYXlQYXR0ZXJuJztcbmNvbnN0IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTiA9ICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJztcbmNvbnN0IFRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04gPSAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbic7XG5jb25zdCBUU19FTlVNX0RFQ0xBUkFUSU9OID0gJ1RTRW51bURlY2xhcmF0aW9uJztcbmNvbnN0IERFRkFVTFQgPSAnZGVmYXVsdCc7XG5cbmZ1bmN0aW9uIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIGNiKSB7XG4gIGlmIChkZWNsYXJhdGlvbikge1xuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19FTlVNX0RFQ0xBUkFUSU9OXG4gICAgKSB7XG4gICAgICBjYihkZWNsYXJhdGlvbi5pZC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlkLnR5cGUgPT09IEFSUkFZX1BBVFRFUk4pIHtcbiAgICAgICAgICBpZC5lbGVtZW50cy5mb3JFYWNoKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgY2IobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IoaWQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuY29uc3QgaWdub3JlZEZpbGVzID0gbmV3IFNldCgpO1xuY29uc3QgZmlsZXNPdXRzaWRlU3JjID0gbmV3IFNldCgpO1xuXG5jb25zdCBpc05vZGVNb2R1bGUgPSAocGF0aCkgPT4gKC9cXC8obm9kZV9tb2R1bGVzKVxcLy8pLnRlc3QocGF0aCk7XG5cbi8qKlxuICogcmVhZCBhbGwgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHNyYyBhbmQgaWdub3JlRXhwb3J0c1xuICpcbiAqIHJldHVybiBhbGwgZmlsZXMgbWF0Y2hpbmcgc3JjIHBhdHRlcm4sIHdoaWNoIGFyZSBub3QgbWF0Y2hpbmcgdGhlIGlnbm9yZUV4cG9ydHMgcGF0dGVyblxuICovXG5jb25zdCByZXNvbHZlRmlsZXMgPSAoc3JjLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBBcnJheS5mcm9tKGdldEZpbGVFeHRlbnNpb25zKGNvbnRleHQuc2V0dGluZ3MpKTtcblxuICBjb25zdCBzcmNGaWxlTGlzdCA9IGxpc3RGaWxlc1RvUHJvY2VzcyhzcmMsIGV4dGVuc2lvbnMpO1xuXG4gIC8vIHByZXBhcmUgbGlzdCBvZiBpZ25vcmVkIGZpbGVzXG4gIGNvbnN0IGlnbm9yZWRGaWxlc0xpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3MoaWdub3JlRXhwb3J0cywgZXh0ZW5zaW9ucyk7XG4gIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoeyBmaWxlbmFtZSB9KSA9PiBpZ25vcmVkRmlsZXMuYWRkKGZpbGVuYW1lKSk7XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcblxuICByZXR1cm4gbmV3IFNldChcbiAgICBmbGF0TWFwKHNyY0ZpbGVMaXN0LCAoeyBmaWxlbmFtZSB9KSA9PiBpc05vZGVNb2R1bGUoZmlsZW5hbWUpID8gW10gOiBmaWxlbmFtZSksXG4gICk7XG59O1xuXG4vKipcbiAqIHBhcnNlIGFsbCBzb3VyY2UgZmlsZXMgYW5kIGJ1aWxkIHVwIDIgbWFwcyBjb250YWluaW5nIHRoZSBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzXG4gKi9cbmNvbnN0IHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyA9IChzcmNGaWxlcywgY29udGV4dCkgPT4ge1xuICBjb25zdCBleHBvcnRBbGwgPSBuZXcgTWFwKCk7XG4gIHNyY0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICBjb25zdCBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY3VycmVudEV4cG9ydHMgPSBFeHBvcnRzLmdldChmaWxlLCBjb250ZXh0KTtcbiAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICByZWV4cG9ydHMsXG4gICAgICAgIGltcG9ydHM6IGxvY2FsSW1wb3J0TGlzdCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB2aXNpdG9yS2V5cyxcbiAgICAgIH0gPSBjdXJyZW50RXhwb3J0cztcblxuICAgICAgdmlzaXRvcktleU1hcC5zZXQoZmlsZSwgdmlzaXRvcktleXMpO1xuICAgICAgLy8gZGVwZW5kZW5jaWVzID09PSBleHBvcnQgKiBmcm9tXG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goKGdldERlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IGdldERlcGVuZGVuY3koKTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RXhwb3J0QWxsLmFkZChkZXBlbmRlbmN5LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICBleHBvcnRBbGwuc2V0KGZpbGUsIGN1cnJlbnRFeHBvcnRBbGwpO1xuXG4gICAgICByZWV4cG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWV4cG9ydCA9ICB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG5sZXQgc3JjRmlsZXM7XG5sZXQgbGFzdFByZXBhcmVLZXk7XG5jb25zdCBkb1ByZXBhcmF0aW9uID0gKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkgPT4ge1xuICBjb25zdCBwcmVwYXJlS2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHNyYzogKHNyYyB8fCBbXSkuc29ydCgpLFxuICAgIGlnbm9yZUV4cG9ydHM6IChpZ25vcmVFeHBvcnRzIHx8IFtdKS5zb3J0KCksXG4gICAgZXh0ZW5zaW9uczogQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSkuc29ydCgpLFxuICB9KTtcbiAgaWYgKHByZXBhcmVLZXkgPT09IGxhc3RQcmVwYXJlS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW1wb3J0TGlzdC5jbGVhcigpO1xuICBleHBvcnRMaXN0LmNsZWFyKCk7XG4gIGlnbm9yZWRGaWxlcy5jbGVhcigpO1xuICBmaWxlc091dHNpZGVTcmMuY2xlYXIoKTtcblxuICBzcmNGaWxlcyA9IHJlc29sdmVGaWxlcyhnZXRTcmMoc3JjKSwgaWdub3JlRXhwb3J0cywgY29udGV4dCk7XG4gIHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyhzcmNGaWxlcywgY29udGV4dCk7XG4gIGRldGVybWluZVVzYWdlKCk7XG4gIGxhc3RQcmVwYXJlS2V5ID0gcHJlcGFyZUtleTtcbn07XG5cbmNvbnN0IG5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyA9IChzcGVjaWZpZXJzKSA9PiBzcGVjaWZpZXJzLnNvbWUoKHsgdHlwZSB9KSA9PiB0eXBlID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG5cbmNvbnN0IG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuY29uc3QgZmlsZUlzSW5Qa2cgPSAoZmlsZSkgPT4ge1xuICBjb25zdCB7IHBhdGgsIHBrZyB9ID0gcmVhZFBrZ1VwKHsgY3dkOiBmaWxlIH0pO1xuICBjb25zdCBiYXNlUGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZFN0cmluZyA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGlmIChqb2luKGJhc2VQYXRoLCBwa2dGaWVsZCkgPT09IGZpbGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkT2JqZWN0ID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgY29uc3QgcGtnRmllbGRGaWxlcyA9IGZsYXRNYXAodmFsdWVzKHBrZ0ZpZWxkKSwgKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IFtdIDogam9pbihiYXNlUGF0aCwgdmFsdWUpKTtcblxuICAgIGlmIChpbmNsdWRlcyhwa2dGaWVsZEZpbGVzLCBmaWxlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGQgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRTdHJpbmcocGtnRmllbGQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGtnRmllbGQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gY2hlY2tQa2dGaWVsZE9iamVjdChwa2dGaWVsZCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChwa2cucHJpdmF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwa2cuYmluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGQocGtnLmJpbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cuYnJvd3Nlcikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5icm93c2VyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBrZy5tYWluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGRTdHJpbmcocGtnLm1haW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgbW9kdWxlcyB3aXRob3V0IGV4cG9ydHMsIG9yIGV4cG9ydHMgd2l0aG91dCBtYXRjaGluZyBpbXBvcnQgaW4gYW5vdGhlciBtb2R1bGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tdW51c2VkLW1vZHVsZXMnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3JjOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyB0byBiZSBhbmFseXplZCAob25seSBmb3IgdW51c2VkIGV4cG9ydHMpJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyBmb3Igd2hpY2ggdW51c2VkIGV4cG9ydHMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgKGUuZyBtb2R1bGUgZW50cnkgcG9pbnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBtb2R1bGVzIHdpdGhvdXQgYW55IGV4cG9ydHMnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgdW51c2VkRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAncmVwb3J0IGV4cG9ydHMgd2l0aG91dCBhbnkgdXNhZ2UnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhbnlPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdW51c2VkRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICAgIHNyYzoge1xuICAgICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1bnVzZWRFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ21pc3NpbmdFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgc3JjLFxuICAgICAgaWdub3JlRXhwb3J0cyA9IFtdLFxuICAgICAgbWlzc2luZ0V4cG9ydHMsXG4gICAgICB1bnVzZWRFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCF1bnVzZWRFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShzcGVjaWZpZXIsIHNwZWNpZmllci5leHBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5leHBvcnRlZC52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKG5vZGUuZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 364f3e06aa..4b735ae4b4 100644 --- a/node_modules/eslint-plugin-import/lib/rules/order.js +++ b/node_modules/eslint-plugin-import/lib/rules/order.js @@ -92,12 +92,6 @@ function findRootNode(node) { return parent; } -function commentOnSameLineAs(node) { - return function (token) {return (token.type === 'Block' || token.type === 'Line') && - token.loc.start.line === token.loc.end.line && - token.loc.end.line === node.loc.end.line;}; -} - function findEndOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensAfterWhile(sourceCode, node, commentOnSameLineAs(node)); var endOfTokens = tokensToEndOfLine.length > 0 ? @@ -117,6 +111,12 @@ function findEndOfLineWithComments(sourceCode, node) { return result; } +function commentOnSameLineAs(node) { + return function (token) {return (token.type === 'Block' || token.type === 'Line') && + token.loc.start.line === token.loc.end.line && + token.loc.end.line === node.loc.end.line;}; +} + function findStartOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensBeforeWhile(sourceCode, node, commentOnSameLineAs(node)); var startOfTokens = tokensToEndOfLine.length > 0 ? tokensToEndOfLine[0].range[0] : node.range[0]; @@ -302,12 +302,6 @@ function getSorter(alphabetizeOptions) { var b = B.length; for (var i = 0; i < Math.min(a, b); i++) { - // Skip comparing the first path segment, if they are relative segments for both imports - if (i === 0 && (A[i] === '.' || A[i] === '..') && (B[i] === '.' || B[i] === '..')) { - // If one is sibling and the other parent import, no need to compare at all, since the paths belong in different groups - if (A[i] !== B[i]) {break;} - continue; - } result = compareString(A[i], B[i]); if (result) {break;} } @@ -788,4 +782,4 @@ module.exports = { }return reportAndReset;}() }; }return importOrderRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiY29tbWVudE9uU2FtZUxpbmVBcyIsInRva2VuIiwidHlwZSIsImxvYyIsInN0YXJ0IiwibGluZSIsImVuZCIsImZpbmRFbmRPZkxpbmVXaXRoQ29tbWVudHMiLCJ0b2tlbnNUb0VuZE9mTGluZSIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxP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QUFDbENzRCx5Q0FBeUI3RyxRQUF6QixFQUFtQytMLFdBQW5DO0FBQ0Q7O0FBRUQ3RyxtQ0FBcUI1QixPQUFyQixFQUE4QnRELFFBQTlCO0FBQ0QsYUFWRDs7QUFZQXFOLHNCQUFVZSxLQUFWO0FBQ0QsV0FkRCxPQUF5QkQsY0FBekIsSUF2RUssRUFBUDs7QUF1RkQsS0F6SEQsT0FBaUJsQixlQUFqQixJQXBGZSxFQUFqQiIsImZpbGUiOiJvcmRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ29iamVjdC5ncm91cGJ5JztcblxuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZWZhdWx0R3JvdXBzID0gWydidWlsdGluJywgJ2V4dGVybmFsJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4J107XG5cbi8vIFJFUE9SVElORyBBTkQgRklYSU5HXG5cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB7IC4uLnYsIHJhbms6IC12LnJhbmsgfTtcbiAgfSkucmV2ZXJzZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QWZ0ZXIoY3VycmVudE5vZGVPclRva2VuKTtcbiAgICBpZiAoY3VycmVudE5vZGVPclRva2VuID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QmVmb3JlKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNBZnRlcihzb3VyY2VDb2RlLCBub2RlLCAxMDApO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpIHtcbiAgaWYgKGltcG9ydGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgbWF4U2VlblJhbmtOb2RlID0gaW1wb3J0ZWRbMF07XG4gIHJldHVybiBpbXBvcnRlZC5maWx0ZXIoZnVuY3Rpb24gKGltcG9ydGVkTW9kdWxlKSB7XG4gICAgY29uc3QgcmVzID0gaW1wb3J0ZWRNb2R1bGUucmFuayA8IG1heFNlZW5SYW5rTm9kZS5yYW5rO1xuICAgIGlmIChtYXhTZWVuUmFua05vZGUucmFuayA8IGltcG9ydGVkTW9kdWxlLnJhbmspIHtcbiAgICAgIG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkTW9kdWxlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgbGV0IHBhcmVudCA9IG5vZGU7XG4gIHdoaWxlIChwYXJlbnQucGFyZW50ICE9IG51bGwgJiYgcGFyZW50LnBhcmVudC5ib2R5ID09IG51bGwpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBub2RlKSB7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IGVuZE9mVG9rZW5zID0gdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMFxuICAgID8gdG9rZW5zVG9FbmRPZkxpbmVbdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICA6IG5vZGUucmFuZ2VbMV07XG4gIGxldCByZXN1bHQgPSBlbmRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IGVuZE9mVG9rZW5zOyBpIDwgc291cmNlQ29kZS50ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSA9PT0gJ1xcbicpIHtcbiAgICAgIHJlc3VsdCA9IGkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzb3VyY2VDb2RlLnRleHRbaV0gIT09ICcgJyAmJiBzb3VyY2VDb2RlLnRleHRbaV0gIT09ICdcXHQnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xccicpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpICsgMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgbm9kZSkge1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNCZWZvcmVXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3Qgc3RhcnRPZlRva2VucyA9IHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDAgPyB0b2tlbnNUb0VuZE9mTGluZVswXS5yYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07XG4gIGxldCByZXN1bHQgPSBzdGFydE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gc3RhcnRPZlRva2VucyAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldICE9PSAnICcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFx0Jykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZXF1aXJlRXhwcmVzc2lvbihleHByKSB7XG4gIHJldHVybiBleHByICE9IG51bGxcbiAgICAmJiBleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBleHByLmNhbGxlZSAhPSBudWxsXG4gICAgJiYgZXhwci5jYWxsZWUubmFtZSA9PT0gJ3JlcXVpcmUnXG4gICAgJiYgZXhwci5hcmd1bWVudHMgIT0gbnVsbFxuICAgICYmIGV4cHIuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICYmIGV4cHIuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdMaXRlcmFsJztcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRSZXF1aXJlTW9kdWxlKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zWzBdO1xuICBjb25zdCBpc1BsYWluUmVxdWlyZSA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQpO1xuICBjb25zdCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbiA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgZGVjbC5pbml0ICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQuY2FsbGVlLm9iamVjdCk7XG4gIHJldHVybiBpc1BsYWluUmVxdWlyZSB8fCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgbm9kZS5zcGVjaWZpZXJzICE9IG51bGwgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGUpIHtcbiAgcmV0dXJuIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0TW9kdWxlKG5vZGUpIHx8IGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGNhblJlb3JkZXJJdGVtcyhmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gZmlyc3ROb2RlLnBhcmVudDtcbiAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IFtcbiAgICBwYXJlbnQuYm9keS5pbmRleE9mKGZpcnN0Tm9kZSksXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihzZWNvbmROb2RlKSxcbiAgXS5zb3J0KCk7XG4gIGNvbnN0IG5vZGVzQmV0d2VlbiA9IHBhcmVudC5ib2R5LnNsaWNlKGZpcnN0SW5kZXgsIHNlY29uZEluZGV4ICsgMSk7XG4gIGZvciAoY29uc3Qgbm9kZUJldHdlZW4gb2Ygbm9kZXNCZXR3ZWVuKSB7XG4gICAgaWYgKCFjYW5Dcm9zc05vZGVXaGlsZVJlb3JkZXIobm9kZUJldHdlZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYWtlSW1wb3J0RGVzY3JpcHRpb24obm9kZSkge1xuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgIHJldHVybiAndHlwZSBpbXBvcnQnO1xuICB9XG4gIGlmIChub2RlLm5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpIHtcbiAgICByZXR1cm4gJ3R5cGVvZiBpbXBvcnQnO1xuICB9XG4gIHJldHVybiAnaW1wb3J0Jztcbn1cblxuZnVuY3Rpb24gZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmaXJzdE5vZGUsIHNlY29uZE5vZGUsIG9yZGVyKSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcblxuICBjb25zdCBmaXJzdFJvb3QgPSBmaW5kUm9vdE5vZGUoZmlyc3ROb2RlLm5vZGUpO1xuICBjb25zdCBmaXJzdFJvb3RTdGFydCA9IGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuICBjb25zdCBmaXJzdFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGZpcnN0Um9vdCk7XG5cbiAgY29uc3Qgc2Vjb25kUm9vdCA9IGZpbmRSb290Tm9kZShzZWNvbmROb2RlLm5vZGUpO1xuICBjb25zdCBzZWNvbmRSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgc2Vjb25kUm9vdCk7XG4gIGNvbnN0IHNlY29uZFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBjYW5GaXggPSBjYW5SZW9yZGVySXRlbXMoZmlyc3RSb290LCBzZWNvbmRSb290KTtcblxuICBsZXQgbmV3Q29kZSA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdFN0YXJ0LCBzZWNvbmRSb290RW5kKTtcbiAgaWYgKG5ld0NvZGVbbmV3Q29kZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpIHtcbiAgICBuZXdDb2RlID0gYCR7bmV3Q29kZX1cXG5gO1xuICB9XG5cbiAgY29uc3QgZmlyc3RJbXBvcnQgPSBgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oZmlyc3ROb2RlKX0gb2YgXFxgJHtmaXJzdE5vZGUuZGlzcGxheU5hbWV9XFxgYDtcbiAgY29uc3Qgc2Vjb25kSW1wb3J0ID0gYFxcYCR7c2Vjb25kTm9kZS5kaXNwbGF5TmFtZX1cXGAgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oc2Vjb25kTm9kZSl9YDtcbiAgY29uc3QgbWVzc2FnZSA9IGAke3NlY29uZEltcG9ydH0gc2hvdWxkIG9jY3VyICR7b3JkZXJ9ICR7Zmlyc3RJbXBvcnR9YDtcblxuICBpZiAob3JkZXIgPT09ICdiZWZvcmUnKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZF0sXG4gICAgICAgIG5ld0NvZGUgKyBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGZpcnN0Um9vdFN0YXJ0LCBzZWNvbmRSb290U3RhcnQpLFxuICAgICAgKSksXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob3JkZXIgPT09ICdhZnRlcicpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBzZWNvbmROb2RlLm5vZGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4gZml4ZXIucmVwbGFjZVRleHRSYW5nZShcbiAgICAgICAgW3NlY29uZFJvb3RTdGFydCwgZmlyc3RSb290RW5kXSxcbiAgICAgICAgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhzZWNvbmRSb290RW5kLCBmaXJzdFJvb3RFbmQpICsgbmV3Q29kZSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydE91dE9mT3JkZXIoY29udGV4dCwgaW1wb3J0ZWQsIG91dE9mT3JkZXIsIG9yZGVyKSB7XG4gIG91dE9mT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoaW1wKSB7XG4gICAgY29uc3QgZm91bmQgPSBpbXBvcnRlZC5maW5kKGZ1bmN0aW9uIGhhc0hpZ2hlclJhbmsoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWRJdGVtLnJhbmsgPiBpbXAucmFuaztcbiAgICB9KTtcbiAgICBmaXhPdXRPZk9yZGVyKGNvbnRleHQsIGZvdW5kLCBpbXAsIG9yZGVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VPdXRPZk9yZGVyUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkKSB7XG4gIGNvbnN0IG91dE9mT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihpbXBvcnRlZCk7XG4gIGlmICghb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGVyZSBhcmUgdGhpbmdzIHRvIHJlcG9ydC4gVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVwb3J0ZWQgZXJyb3JzLlxuICBjb25zdCByZXZlcnNlZEltcG9ydGVkID0gcmV2ZXJzZShpbXBvcnRlZCk7XG4gIGNvbnN0IHJldmVyc2VkT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihyZXZlcnNlZEltcG9ydGVkKTtcbiAgaWYgKHJldmVyc2VkT3JkZXIubGVuZ3RoIDwgb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIHJldmVyc2VkSW1wb3J0ZWQsIHJldmVyc2VkT3JkZXIsICdhZnRlcicpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCAnYmVmb3JlJyk7XG59XG5cbmNvbnN0IGNvbXBhcmVTdHJpbmcgPSAoYSwgYikgPT4ge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG4vKiogU29tZSBwYXJzZXJzIChsYW5ndWFnZXMgd2l0aG91dCB0eXBlcykgZG9uJ3QgcHJvdmlkZSBJbXBvcnRLaW5kICovXG5jb25zdCBERUFGVUxUX0lNUE9SVF9LSU5EID0gJ3ZhbHVlJztcbmNvbnN0IGdldE5vcm1hbGl6ZWRWYWx1ZSA9IChub2RlLCB0b0xvd2VyQ2FzZSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIHJldHVybiB0b0xvd2VyQ2FzZSA/IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xufTtcblxuZnVuY3Rpb24gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBtdWx0aXBsaWVyID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgY29uc3Qgb3JkZXJJbXBvcnRLaW5kID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVySW1wb3J0S2luZDtcbiAgY29uc3QgbXVsdGlwbGllckltcG9ydEtpbmQgPSBvcmRlckltcG9ydEtpbmQgIT09ICdpZ25vcmUnXG4gICAgJiYgKGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQgPT09ICdhc2MnID8gMSA6IC0xKTtcblxuICByZXR1cm4gZnVuY3Rpb24gaW1wb3J0c1NvcnRlcihub2RlQSwgbm9kZUIpIHtcbiAgICBjb25zdCBpbXBvcnRBID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVBLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBjb25zdCBpbXBvcnRCID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVCLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgIGlmICghaW5jbHVkZXMoaW1wb3J0QSwgJy8nKSAmJiAhaW5jbHVkZXMoaW1wb3J0QiwgJy8nKSkge1xuICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhpbXBvcnRBLCBpbXBvcnRCKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgQSA9IGltcG9ydEEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IEIgPSBpbXBvcnRCLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBhID0gQS5sZW5ndGg7XG4gICAgICBjb25zdCBiID0gQi5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oYSwgYik7IGkrKykge1xuICAgICAgICAvLyBTa2lwIGNvbXBhcmluZyB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCBpZiB0aGV5IGFyZSByZWxhdGl2ZSBzZWdtZW50cyBmb3IgYm90aCBpbXBvcnRzXG4gICAgICAgIGlmIChpID09PSAwICYmICgoQVtpXSA9PT0gJy4nIHx8IEFbaV0gPT09ICcuLicpICYmIChCW2ldID09PSAnLicgfHwgQltpXSA9PT0gJy4uJykpKSB7XG4gICAgICAgICAgLy8gSWYgb25lIGlzIHNpYmxpbmcgYW5kIHRoZSBvdGhlciBwYXJlbnQgaW1wb3J0LCBubyBuZWVkIHRvIGNvbXBhcmUgYXQgYWxsLCBzaW5jZSB0aGUgcGF0aHMgYmVsb25nIGluIGRpZmZlcmVudCBncm91cHNcbiAgICAgICAgICBpZiAoQVtpXSAhPT0gQltpXSkgeyBicmVhazsgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoQVtpXSwgQltpXSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgYnJlYWs7IH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHQgJiYgYSAhPT0gYikge1xuICAgICAgICByZXN1bHQgPSBhIDwgYiA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgPSByZXN1bHQgKiBtdWx0aXBsaWVyO1xuXG4gICAgLy8gSW4gY2FzZSB0aGUgcGF0aHMgYXJlIGVxdWFsIChyZXN1bHQgPT09IDApLCBzb3J0IHRoZW0gYnkgaW1wb3J0S2luZFxuICAgIGlmICghcmVzdWx0ICYmIG11bHRpcGxpZXJJbXBvcnRLaW5kKSB7XG4gICAgICByZXN1bHQgPSBtdWx0aXBsaWVySW1wb3J0S2luZCAqIGNvbXBhcmVTdHJpbmcoXG4gICAgICAgIG5vZGVBLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgICBub2RlQi5ub2RlLmltcG9ydEtpbmQgfHwgREVBRlVMVF9JTVBPUlRfS0lORCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgZ3JvdXBlZEJ5UmFua3MgPSBncm91cEJ5KGltcG9ydGVkLCAoaXRlbSkgPT4gaXRlbS5yYW5rKTtcblxuICBjb25zdCBzb3J0ZXJGbiA9IGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpO1xuXG4gIC8vIHNvcnQgZ3JvdXAga2V5cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG9uIGluIG9yZGVyXG4gIGNvbnN0IGdyb3VwUmFua3MgPSBPYmplY3Qua2V5cyhncm91cGVkQnlSYW5rcykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfSk7XG5cbiAgLy8gc29ydCBpbXBvcnRzIGxvY2FsbHkgd2l0aGluIHRoZWlyIGdyb3VwXG4gIGdyb3VwUmFua3MuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBSYW5rKSB7XG4gICAgZ3JvdXBlZEJ5UmFua3NbZ3JvdXBSYW5rXS5zb3J0KHNvcnRlckZuKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGdsb2JhbGx5IHVuaXF1ZSByYW5rIHRvIGVhY2ggaW1wb3J0XG4gIGxldCBuZXdSYW5rID0gMDtcbiAgY29uc3QgYWxwaGFiZXRpemVkUmFua3MgPSBncm91cFJhbmtzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgICAgYWNjW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdID0gcGFyc2VJbnQoZ3JvdXBSYW5rLCAxMCkgKyBuZXdSYW5rO1xuICAgICAgbmV3UmFuayArPSAxO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBtdXRhdGUgdGhlIG9yaWdpbmFsIGdyb3VwLXJhbmsgd2l0aCBhbHBoYWJldGl6ZWQtcmFua1xuICBpbXBvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvcnRlZEl0ZW0pIHtcbiAgICBpbXBvcnRlZEl0ZW0ucmFuayA9IGFscGhhYmV0aXplZFJhbmtzW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdO1xuICB9KTtcbn1cblxuLy8gREVURUNUSU5HXG5cbmZ1bmN0aW9uIGNvbXB1dGVQYXRoUmFuayhyYW5rcywgcGF0aEdyb3VwcywgcGF0aCwgbWF4UG9zaXRpb24pIHtcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXRoR3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IHsgcGF0dGVybiwgcGF0dGVybk9wdGlvbnMsIGdyb3VwLCBwb3NpdGlvbiA9IDEgfSA9IHBhdGhHcm91cHNbaV07XG4gICAgaWYgKG1pbmltYXRjaChwYXRoLCBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucyB8fCB7IG5vY29tbWVudDogdHJ1ZSB9KSkge1xuICAgICAgcmV0dXJuIHJhbmtzW2dyb3VwXSArIHBvc2l0aW9uIC8gbWF4UG9zaXRpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcykge1xuICBsZXQgaW1wVHlwZTtcbiAgbGV0IHJhbms7XG4gIGlmIChpbXBvcnRFbnRyeS50eXBlID09PSAnaW1wb3J0Om9iamVjdCcpIHtcbiAgICBpbXBUeXBlID0gJ29iamVjdCc7XG4gIH0gZWxzZSBpZiAoaW1wb3J0RW50cnkubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScgJiYgcmFua3Mub21pdHRlZFR5cGVzLmluZGV4T2YoJ3R5cGUnKSA9PT0gLTEpIHtcbiAgICBpbXBUeXBlID0gJ3R5cGUnO1xuICB9IGVsc2Uge1xuICAgIGltcFR5cGUgPSBpbXBvcnRUeXBlKGltcG9ydEVudHJ5LnZhbHVlLCBjb250ZXh0KTtcbiAgfVxuICBpZiAoIWV4Y2x1ZGVkSW1wb3J0VHlwZXMuaGFzKGltcFR5cGUpKSB7XG4gICAgcmFuayA9IGNvbXB1dGVQYXRoUmFuayhyYW5rcy5ncm91cHMsIHJhbmtzLnBhdGhHcm91cHMsIGltcG9ydEVudHJ5LnZhbHVlLCByYW5rcy5tYXhQb3NpdGlvbik7XG4gIH1cbiAgaWYgKHR5cGVvZiByYW5rID09PSAndW5kZWZpbmVkJykge1xuICAgIHJhbmsgPSByYW5rcy5ncm91cHNbaW1wVHlwZV07XG4gIH1cbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgIT09ICdpbXBvcnQnICYmICFpbXBvcnRFbnRyeS50eXBlLnN0YXJ0c1dpdGgoJ2ltcG9ydDonKSkge1xuICAgIHJhbmsgKz0gMTAwO1xuICB9XG5cbiAgcmV0dXJuIHJhbms7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShjb250ZXh0LCBpbXBvcnRFbnRyeSwgcmFua3MsIGltcG9ydGVkLCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGNvbnN0IHJhbmsgPSBjb21wdXRlUmFuayhjb250ZXh0LCByYW5rcywgaW1wb3J0RW50cnksIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpO1xuICBpZiAocmFuayAhPT0gLTEpIHtcbiAgICBpbXBvcnRlZC5wdXNoKHsgLi4uaW1wb3J0RW50cnksIHJhbmsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpIHtcbiAgbGV0IG4gPSBub2RlO1xuICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBgY29uc3QgYmF6ID0gcmVxdWlyZSgnZm9vJykuYmFyLmJhemBcbiAgLy8gYW5kIGBjb25zdCBmb28gPSByZXF1aXJlKCdmb28nKSgpYFxuICB3aGlsZSAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG4ucGFyZW50Lm9iamVjdCA9PT0gblxuICAgIHx8IG4ucGFyZW50LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQuY2FsbGVlID09PSBuXG4gICkge1xuICAgIG4gPSBuLnBhcmVudDtcbiAgfVxuICBpZiAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nXG4gICAgJiYgbi5wYXJlbnQucGFyZW50LnBhcmVudC50eXBlID09PSAnUHJvZ3JhbSdcbiAgKSB7XG4gICAgcmV0dXJuIG4ucGFyZW50LnBhcmVudC5wYXJlbnQ7XG4gIH1cbn1cblxuY29uc3QgdHlwZXMgPSBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnaW50ZXJuYWwnLCAndW5rbm93bicsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCcsICdvYmplY3QnLCAndHlwZSddO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHR5cGUtcmFuayBwYWlycy5cbi8vIEV4YW1wbGU6IHsgaW5kZXg6IDAsIHNpYmxpbmc6IDEsIHBhcmVudDogMSwgZXh0ZXJuYWw6IDEsIGJ1aWx0aW46IDIsIGludGVybmFsOiAyIH1cbi8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgaXQgY29udGFpbnMgYSB0eXBlIHRoYXQgZG9lcyBub3QgZXhpc3QsIG9yIGhhcyBhIGR1cGxpY2F0ZVxuZnVuY3Rpb24gY29udmVydEdyb3Vwc1RvUmFua3MoZ3JvdXBzKSB7XG4gIGNvbnN0IHJhbmtPYmplY3QgPSBncm91cHMucmVkdWNlKGZ1bmN0aW9uIChyZXMsIGdyb3VwLCBpbmRleCkge1xuICAgIFtdLmNvbmNhdChncm91cCkuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBJdGVtKSB7XG4gICAgICBpZiAodHlwZXMuaW5kZXhPZihncm91cEl0ZW0pID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBVbmtub3duIHR5cGUgXFxgJHtKU09OLnN0cmluZ2lmeShncm91cEl0ZW0pfVxcYGApO1xuICAgICAgfVxuICAgICAgaWYgKHJlc1tncm91cEl0ZW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgcnVsZTogXFxgJHtncm91cEl0ZW19XFxgIGlzIGR1cGxpY2F0ZWRgKTtcbiAgICAgIH1cbiAgICAgIHJlc1tncm91cEl0ZW1dID0gaW5kZXggKiAyO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBvbWl0dGVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHJhbmtPYmplY3RbdHlwZV0gPT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBjb25zdCByYW5rcyA9IG9taXR0ZWRUeXBlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgdHlwZSkge1xuICAgIHJlc1t0eXBlXSA9IGdyb3Vwcy5sZW5ndGggKiAyO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHJhbmtPYmplY3QpO1xuXG4gIHJldHVybiB7IGdyb3VwczogcmFua3MsIG9taXR0ZWRUeXBlcyB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzKHBhdGhHcm91cHMpIHtcbiAgY29uc3QgYWZ0ZXIgPSB7fTtcbiAgY29uc3QgYmVmb3JlID0ge307XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXRoR3JvdXBzLm1hcCgocGF0aEdyb3VwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgZ3JvdXAsIHBvc2l0aW9uOiBwb3NpdGlvblN0cmluZyB9ID0gcGF0aEdyb3VwO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAoIWFmdGVyW2dyb3VwXSkge1xuICAgICAgICBhZnRlcltncm91cF0gPSAxO1xuICAgICAgfVxuICAgICAgcG9zaXRpb24gPSBhZnRlcltncm91cF0rKztcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKCFiZWZvcmVbZ3JvdXBdKSB7XG4gICAgICAgIGJlZm9yZVtncm91cF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGJlZm9yZVtncm91cF0ucHVzaChpbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGF0aEdyb3VwLCBwb3NpdGlvbiB9O1xuICB9KTtcblxuICBsZXQgbWF4UG9zaXRpb24gPSAxO1xuXG4gIE9iamVjdC5rZXlzKGJlZm9yZSkuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICBjb25zdCBncm91cExlbmd0aCA9IGJlZm9yZVtncm91cF0ubGVuZ3RoO1xuICAgIGJlZm9yZVtncm91cF0uZm9yRWFjaCgoZ3JvdXBJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgIHRyYW5zZm9ybWVkW2dyb3VwSW5kZXhdLnBvc2l0aW9uID0gLTEgKiAoZ3JvdXBMZW5ndGggLSBpbmRleCk7XG4gICAgfSk7XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBMZW5ndGgpO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhhZnRlcikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgZ3JvdXBOZXh0UG9zaXRpb24gPSBhZnRlcltrZXldO1xuICAgIG1heFBvc2l0aW9uID0gTWF0aC5tYXgobWF4UG9zaXRpb24sIGdyb3VwTmV4dFBvc2l0aW9uIC0gMSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aEdyb3VwczogdHJhbnNmb3JtZWQsXG4gICAgbWF4UG9zaXRpb246IG1heFBvc2l0aW9uID4gMTAgPyBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKE1hdGgubG9nMTAobWF4UG9zaXRpb24pKSkgOiAxMCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZml4TmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHByZXZSb290ID0gZmluZFJvb3ROb2RlKHByZXZpb3VzSW1wb3J0Lm5vZGUpO1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNBZnRlcldoaWxlKFxuICAgIGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLCBwcmV2Um9vdCwgY29tbWVudE9uU2FtZUxpbmVBcyhwcmV2Um9vdCkpO1xuXG4gIGxldCBlbmRPZkxpbmUgPSBwcmV2Um9vdC5yYW5nZVsxXTtcbiAgaWYgKHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDApIHtcbiAgICBlbmRPZkxpbmUgPSB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXTtcbiAgfVxuICByZXR1cm4gKGZpeGVyKSA9PiBmaXhlci5pbnNlcnRUZXh0QWZ0ZXJSYW5nZShbcHJldlJvb3QucmFuZ2VbMF0sIGVuZE9mTGluZV0sICdcXG4nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IGN1cnJSb290ID0gZmluZFJvb3ROb2RlKGN1cnJlbnRJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHJhbmdlVG9SZW1vdmUgPSBbXG4gICAgZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBwcmV2Um9vdCksXG4gICAgZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGN1cnJSb290KSxcbiAgXTtcbiAgaWYgKCgvXlxccyokLykudGVzdChzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHJhbmdlVG9SZW1vdmVbMF0sIHJhbmdlVG9SZW1vdmVbMV0pKSkge1xuICAgIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLnJlbW92ZVJhbmdlKHJhbmdlVG9SZW1vdmUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMsIGRpc3RpbmN0R3JvdXApIHtcbiAgY29uc3QgZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbiA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4ge1xuICAgIGNvbnN0IGxpbmVzQmV0d2VlbkltcG9ydHMgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5saW5lcy5zbGljZShcbiAgICAgIHByZXZpb3VzSW1wb3J0Lm5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgY3VycmVudEltcG9ydC5ub2RlLmxvYy5zdGFydC5saW5lIC0gMSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxpbmVzQmV0d2VlbkltcG9ydHMuZmlsdGVyKChsaW5lKSA9PiAhbGluZS50cmltKCkubGVuZ3RoKS5sZW5ndGg7XG4gIH07XG4gIGNvbnN0IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAgPSAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpID0+IGN1cnJlbnRJbXBvcnQucmFuayAtIDEgPj0gcHJldmlvdXNJbXBvcnQucmFuaztcbiAgbGV0IHByZXZpb3VzSW1wb3J0ID0gaW1wb3J0ZWRbMF07XG5cbiAgaW1wb3J0ZWQuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudEltcG9ydCkge1xuICAgIGNvbnN0IGVtcHR5TGluZXNCZXR3ZWVuID0gZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbihjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG4gICAgY29uc3QgaXNTdGFydE9mRGlzdGluY3RHcm91cCA9IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpO1xuXG4gICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMnXG4gICAgICAgIHx8IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICBpZiAoY3VycmVudEltcG9ydC5yYW5rICE9PSBwcmV2aW91c0ltcG9ydC5yYW5rICYmIGVtcHR5TGluZXNCZXR3ZWVuID09PSAwKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwIHx8ICFkaXN0aW5jdEdyb3VwICYmIGlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZW1wdHkgbGluZSBiZXR3ZWVuIGltcG9ydCBncm91cHMnLFxuICAgICAgICAgICAgZml4OiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMFxuICAgICAgICAmJiBuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJykge1xuICAgICAgICBpZiAoZGlzdGluY3RHcm91cCAmJiBjdXJyZW50SW1wb3J0LnJhbmsgPT09IHByZXZpb3VzSW1wb3J0LnJhbmsgfHwgIWRpc3RpbmN0R3JvdXAgJiYgIWlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIHdpdGhpbiBpbXBvcnQgZ3JvdXAnLFxuICAgICAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzQmV0d2VlbiA+IDApIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogcHJldmlvdXNJbXBvcnQubm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgIGZpeDogcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpb3VzSW1wb3J0ID0gY3VycmVudEltcG9ydDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpIHtcbiAgY29uc3QgYWxwaGFiZXRpemUgPSBvcHRpb25zLmFscGhhYmV0aXplIHx8IHt9O1xuICBjb25zdCBvcmRlciA9IGFscGhhYmV0aXplLm9yZGVyIHx8ICdpZ25vcmUnO1xuICBjb25zdCBvcmRlckltcG9ydEtpbmQgPSBhbHBoYWJldGl6ZS5vcmRlckltcG9ydEtpbmQgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IGNhc2VJbnNlbnNpdGl2ZSA9IGFscGhhYmV0aXplLmNhc2VJbnNlbnNpdGl2ZSB8fCBmYWxzZTtcblxuICByZXR1cm4geyBvcmRlciwgb3JkZXJJbXBvcnRLaW5kLCBjYXNlSW5zZW5zaXRpdmUgfTtcbn1cblxuLy8gVE9ETywgc2VtdmVyLW1ham9yOiBDaGFuZ2UgdGhlIGRlZmF1bHQgb2YgXCJkaXN0aW5jdEdyb3VwXCIgZnJvbSB0cnVlIHRvIGZhbHNlXG5jb25zdCBkZWZhdWx0RGlzdGluY3RHcm91cCA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgY29udmVudGlvbiBpbiBtb2R1bGUgaW1wb3J0IG9yZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ29yZGVyJyksXG4gICAgfSxcblxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3RpbmN0R3JvdXA6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHREaXN0aW5jdEdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGF0aEdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICBlbnVtOiB0eXBlcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IFsnYWZ0ZXInLCAnYmVmb3JlJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWydwYXR0ZXJuJywgJ2dyb3VwJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ25ld2xpbmVzLWJldHdlZW4nOiB7XG4gICAgICAgICAgICBlbnVtOiBbXG4gICAgICAgICAgICAgICdpZ25vcmUnLFxuICAgICAgICAgICAgICAnYWx3YXlzJyxcbiAgICAgICAgICAgICAgJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycsXG4gICAgICAgICAgICAgICduZXZlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXJJbXBvcnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YXJuT25VbmFzc2lnbmVkSW1wb3J0czoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gaW1wb3J0T3JkZXJSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPSBvcHRpb25zWyduZXdsaW5lcy1iZXR3ZWVuJ10gfHwgJ2lnbm9yZSc7XG4gICAgY29uc3QgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgPSBuZXcgU2V0KG9wdGlvbnMucGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgfHwgWydidWlsdGluJywgJ2V4dGVybmFsJywgJ29iamVjdCddKTtcbiAgICBjb25zdCBhbHBoYWJldGl6ZSA9IGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRpc3RpbmN0R3JvdXAgPSBvcHRpb25zLmRpc3RpbmN0R3JvdXAgPT0gbnVsbCA/IGRlZmF1bHREaXN0aW5jdEdyb3VwIDogISFvcHRpb25zLmRpc3RpbmN0R3JvdXA7XG4gICAgbGV0IHJhbmtzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF0aEdyb3VwcywgbWF4UG9zaXRpb24gfSA9IGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3Mob3B0aW9ucy5wYXRoR3JvdXBzIHx8IFtdKTtcbiAgICAgIGNvbnN0IHsgZ3JvdXBzLCBvbWl0dGVkVHlwZXMgfSA9IGNvbnZlcnRHcm91cHNUb1JhbmtzKG9wdGlvbnMuZ3JvdXBzIHx8IGRlZmF1bHRHcm91cHMpO1xuICAgICAgcmFua3MgPSB7XG4gICAgICAgIGdyb3VwcyxcbiAgICAgICAgb21pdHRlZFR5cGVzLFxuICAgICAgICBwYXRoR3JvdXBzLFxuICAgICAgICBtYXhQb3NpdGlvbixcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBjb25maWd1cmF0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9ncmFtKG5vZGUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGdldEJsb2NrSW1wb3J0cyhub2RlKSB7XG4gICAgICBpZiAoIWltcG9ydE1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgaW1wb3J0TWFwLnNldChub2RlLCBbXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1wb3J0TWFwLmdldChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICAvLyBJZ25vcmluZyB1bmFzc2lnbmVkIGltcG9ydHMgdW5sZXNzIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzIGlzIHNldFxuICAgICAgICBpZiAobm9kZS5zcGVjaWZpZXJzLmxlbmd0aCB8fCBvcHRpb25zLndhcm5PblVuYXNzaWduZWRJbXBvcnRzKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG5vZGUuc291cmNlLnZhbHVlO1xuICAgICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2ltcG9ydCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmFua3MsXG4gICAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgbGV0IHR5cGU7XG4gICAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICAgIGlmIChub2RlLmlzRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm1vZHVsZVJlZmVyZW5jZS50eXBlID09PSAnVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb24udmFsdWU7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICB0eXBlID0gJ2ltcG9ydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmdldFRleHQobm9kZS5tb2R1bGVSZWZlcmVuY2UpO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0Om9iamVjdCc7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKG5vZGUucGFyZW50KSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gaGFuZGxlUmVxdWlyZXMobm9kZSkge1xuICAgICAgICBpZiAoIWlzU3RhdGljUmVxdWlyZShub2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9jayA9IGdldFJlcXVpcmVCbG9jayhub2RlKTtcbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5hcmd1bWVudHNbMF0udmFsdWU7XG4gICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3JlcXVpcmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKGJsb2NrKSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gcmVwb3J0QW5kUmVzZXQoKSB7XG4gICAgICAgIGltcG9ydE1hcC5mb3JFYWNoKChpbXBvcnRlZCkgPT4ge1xuICAgICAgICAgIGlmIChuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFscGhhYmV0aXplLm9yZGVyICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWFrZU91dE9mT3JkZXJSZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbXBvcnRNYXAuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyIsInRva2Vuc1RvRW5kT2ZMaW5lIiwiY29tbWVudE9uU2FtZUxpbmVBcyIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwidG9rZW4iLCJ0eXBlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiZW5kIiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxP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SztBQWlETEsscUNBQWdCLFNBQVNDLGNBQVQsQ0FBd0JoUCxJQUF4QixFQUE4QjtBQUM1QyxnQkFBSSxDQUFDLGdDQUFnQkEsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQjtBQUNEO0FBQ0QsZ0JBQU1pUCxRQUFRcEYsZ0JBQWdCN0osSUFBaEIsQ0FBZDtBQUNBLGdCQUFJLENBQUNpUCxLQUFMLEVBQVk7QUFDVjtBQUNEO0FBQ0QsZ0JBQU16TSxPQUFPeEMsS0FBS3lDLFNBQUwsQ0FBZSxDQUFmLEVBQWtCaUUsS0FBL0I7QUFDQWtEO0FBQ0V2RixtQkFERjtBQUVFO0FBQ0VyRSx3QkFERjtBQUVFMEcscUJBQU9sRSxJQUZUO0FBR0UwQywyQkFBYTFDLElBSGY7QUFJRVYsb0JBQU0sU0FKUixFQUZGOztBQVFFNEcsaUJBUkY7QUFTRTRGLDRCQUFnQlcsS0FBaEIsQ0FURjtBQVVFdkIseUNBVkY7O0FBWUQsV0FyQkQsT0FBeUJzQixjQUF6QixJQWpESztBQXVFTCxxQ0FBZ0IsU0FBU0UsY0FBVCxHQUEwQjtBQUN4Q2Qsc0JBQVV6SSxPQUFWLENBQWtCLFVBQUM1RSxRQUFELEVBQWM7QUFDOUIsa0JBQUlvTCwyQkFBMkIsUUFBL0IsRUFBeUM7QUFDdkNELDBDQUEwQjdILE9BQTFCLEVBQW1DdEQsUUFBbkMsRUFBNkNvTCxzQkFBN0MsRUFBcUVDLGFBQXJFO0FBQ0Q7O0FBRUQsa0JBQUlVLFlBQVl4SSxLQUFaLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDc0QseUNBQXlCN0csUUFBekIsRUFBbUMrTCxXQUFuQztBQUNEOztBQUVEN0csbUNBQXFCNUIsT0FBckIsRUFBOEJ0RCxRQUE5QjtBQUNELGFBVkQ7O0FBWUFxTixzQkFBVWUsS0FBVjtBQUNELFdBZEQsT0FBeUJELGNBQXpCLElBdkVLLEVBQVA7O0FBdUZELEtBekhELE9BQWlCbEIsZUFBakIsSUFwRmUsRUFBakIiLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdvYmplY3QuZ3JvdXBieSc7XG5cbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgaXNTdGF0aWNSZXF1aXJlIGZyb20gJy4uL2NvcmUvc3RhdGljUmVxdWlyZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVmYXVsdEdyb3VwcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCddO1xuXG4vLyBSRVBPUlRJTkcgQU5EIEZJWElOR1xuXG5mdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4geyAuLi52LCByYW5rOiAtdi5yYW5rIH07XG4gIH0pLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5zT3JDb21tZW50c0FmdGVyKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEFmdGVyKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEJlZm9yZShjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICAgIGlmIChjdXJyZW50Tm9kZU9yVG9rZW4gPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIHRha2VUb2tlbnNBZnRlcldoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0JlZm9yZVdoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIDEwMCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdXRPZk9yZGVyKGltcG9ydGVkKSB7XG4gIGlmIChpbXBvcnRlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkWzBdO1xuICByZXR1cm4gaW1wb3J0ZWQuZmlsdGVyKGZ1bmN0aW9uIChpbXBvcnRlZE1vZHVsZSkge1xuICAgIGNvbnN0IHJlcyA9IGltcG9ydGVkTW9kdWxlLnJhbmsgPCBtYXhTZWVuUmFua05vZGUucmFuaztcbiAgICBpZiAobWF4U2VlblJhbmtOb2RlLnJhbmsgPCBpbXBvcnRlZE1vZHVsZS5yYW5rKSB7XG4gICAgICBtYXhTZWVuUmFua05vZGUgPSBpbXBvcnRlZE1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRSb290Tm9kZShub2RlKSB7XG4gIGxldCBwYXJlbnQgPSBub2RlO1xuICB3aGlsZSAocGFyZW50LnBhcmVudCAhPSBudWxsICYmIHBhcmVudC5wYXJlbnQuYm9keSA9PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3QgZW5kT2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwXG4gICAgPyB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgIDogbm9kZS5yYW5nZVsxXTtcbiAgbGV0IHJlc3VsdCA9IGVuZE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gZW5kT2ZUb2tlbnM7IGkgPCBzb3VyY2VDb2RlLnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldID09PSAnXFxuJykge1xuICAgICAgcmVzdWx0ID0gaSArIDE7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFxyJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGkgKyAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IHN0YXJ0T2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwID8gdG9rZW5zVG9FbmRPZkxpbmVbMF0ucmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdO1xuICBsZXQgcmVzdWx0ID0gc3RhcnRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IHN0YXJ0T2ZUb2tlbnMgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZUV4cHJlc3Npb24oZXhwcikge1xuICByZXR1cm4gZXhwciAhPSBudWxsXG4gICAgJiYgZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgJiYgZXhwci5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGV4cHIuY2FsbGVlLm5hbWUgPT09ICdyZXF1aXJlJ1xuICAgICYmIGV4cHIuYXJndW1lbnRzICE9IG51bGxcbiAgICAmJiBleHByLmFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAmJiBleHByLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCc7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1swXTtcbiAgY29uc3QgaXNQbGFpblJlcXVpcmUgPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0KTtcbiAgY29uc3QgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb24gPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGRlY2wuaW5pdCAhPSBudWxsXG4gICAgJiYgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJ1xuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0LmNhbGxlZS5vYmplY3QpO1xuICByZXR1cm4gaXNQbGFpblJlcXVpcmUgfHwgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRNb2R1bGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nICYmIG5vZGUuc3BlY2lmaWVycyAhPSBudWxsICYmIG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlcihub2RlKSB7XG4gIHJldHVybiBpc1N1cHBvcnRlZFJlcXVpcmVNb2R1bGUobm9kZSkgfHwgaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBjYW5SZW9yZGVySXRlbXMoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IGZpcnN0Tm9kZS5wYXJlbnQ7XG4gIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBbXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihmaXJzdE5vZGUpLFxuICAgIHBhcmVudC5ib2R5LmluZGV4T2Yoc2Vjb25kTm9kZSksXG4gIF0uc29ydCgpO1xuICBjb25zdCBub2Rlc0JldHdlZW4gPSBwYXJlbnQuYm9keS5zbGljZShmaXJzdEluZGV4LCBzZWNvbmRJbmRleCArIDEpO1xuICBmb3IgKGNvbnN0IG5vZGVCZXR3ZWVuIG9mIG5vZGVzQmV0d2Vlbikge1xuICAgIGlmICghY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGVCZXR3ZWVuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUltcG9ydERlc2NyaXB0aW9uKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gJ3R5cGUgaW1wb3J0JztcbiAgfVxuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKSB7XG4gICAgcmV0dXJuICd0eXBlb2YgaW1wb3J0JztcbiAgfVxuICByZXR1cm4gJ2ltcG9ydCc7XG59XG5cbmZ1bmN0aW9uIGZpeE91dE9mT3JkZXIoY29udGV4dCwgZmlyc3ROb2RlLCBzZWNvbmROb2RlLCBvcmRlcikge1xuICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG5cbiAgY29uc3QgZmlyc3RSb290ID0gZmluZFJvb3ROb2RlKGZpcnN0Tm9kZS5ub2RlKTtcbiAgY29uc3QgZmlyc3RSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgZmlyc3RSb290KTtcbiAgY29uc3QgZmlyc3RSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuXG4gIGNvbnN0IHNlY29uZFJvb3QgPSBmaW5kUm9vdE5vZGUoc2Vjb25kTm9kZS5ub2RlKTtcbiAgY29uc3Qgc2Vjb25kUm9vdFN0YXJ0ID0gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBzZWNvbmRSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBzZWNvbmRSb290KTtcbiAgY29uc3QgY2FuRml4ID0gY2FuUmVvcmRlckl0ZW1zKGZpcnN0Um9vdCwgc2Vjb25kUm9vdCk7XG5cbiAgbGV0IG5ld0NvZGUgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHNlY29uZFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZCk7XG4gIGlmIChuZXdDb2RlW25ld0NvZGUubGVuZ3RoIC0gMV0gIT09ICdcXG4nKSB7XG4gICAgbmV3Q29kZSA9IGAke25ld0NvZGV9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0SW1wb3J0ID0gYCR7bWFrZUltcG9ydERlc2NyaXB0aW9uKGZpcnN0Tm9kZSl9IG9mIFxcYCR7Zmlyc3ROb2RlLmRpc3BsYXlOYW1lfVxcYGA7XG4gIGNvbnN0IHNlY29uZEltcG9ydCA9IGBcXGAke3NlY29uZE5vZGUuZGlzcGxheU5hbWV9XFxgICR7bWFrZUltcG9ydERlc2NyaXB0aW9uKHNlY29uZE5vZGUpfWA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgJHtzZWNvbmRJbXBvcnR9IHNob3VsZCBvY2N1ciAke29yZGVyfSAke2ZpcnN0SW1wb3J0fWA7XG5cbiAgaWYgKG9yZGVyID09PSAnYmVmb3JlJykge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IHNlY29uZE5vZGUubm9kZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFxuICAgICAgICBbZmlyc3RSb290U3RhcnQsIHNlY29uZFJvb3RFbmRdLFxuICAgICAgICBuZXdDb2RlICsgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdFN0YXJ0KSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9yZGVyID09PSAnYWZ0ZXInKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtzZWNvbmRSb290U3RhcnQsIGZpcnN0Um9vdEVuZF0sXG4gICAgICAgIHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdEVuZCwgZmlyc3RSb290RW5kKSArIG5ld0NvZGUsXG4gICAgICApKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCBvcmRlcikge1xuICBvdXRPZk9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGltcCkge1xuICAgIGNvbnN0IGZvdW5kID0gaW1wb3J0ZWQuZmluZChmdW5jdGlvbiBoYXNIaWdoZXJSYW5rKGltcG9ydGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGltcG9ydGVkSXRlbS5yYW5rID4gaW1wLnJhbms7XG4gICAgfSk7XG4gICAgZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmb3VuZCwgaW1wLCBvcmRlcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCkge1xuICBjb25zdCBvdXRPZk9yZGVyID0gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpO1xuICBpZiAoIW91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlcmUgYXJlIHRoaW5ncyB0byByZXBvcnQuIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcG9ydGVkIGVycm9ycy5cbiAgY29uc3QgcmV2ZXJzZWRJbXBvcnRlZCA9IHJldmVyc2UoaW1wb3J0ZWQpO1xuICBjb25zdCByZXZlcnNlZE9yZGVyID0gZmluZE91dE9mT3JkZXIocmV2ZXJzZWRJbXBvcnRlZCk7XG4gIGlmIChyZXZlcnNlZE9yZGVyLmxlbmd0aCA8IG91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCByZXZlcnNlZEltcG9ydGVkLCByZXZlcnNlZE9yZGVyLCAnYWZ0ZXInKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCBpbXBvcnRlZCwgb3V0T2ZPcmRlciwgJ2JlZm9yZScpO1xufVxuXG5jb25zdCBjb21wYXJlU3RyaW5nID0gKGEsIGIpID0+IHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuLyoqIFNvbWUgcGFyc2VycyAobGFuZ3VhZ2VzIHdpdGhvdXQgdHlwZXMpIGRvbid0IHByb3ZpZGUgSW1wb3J0S2luZCAqL1xuY29uc3QgREVBRlVMVF9JTVBPUlRfS0lORCA9ICd2YWx1ZSc7XG5jb25zdCBnZXROb3JtYWxpemVkVmFsdWUgPSAobm9kZSwgdG9Mb3dlckNhc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICByZXR1cm4gdG9Mb3dlckNhc2UgPyBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgbXVsdGlwbGllciA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlciA9PT0gJ2FzYycgPyAxIDogLTE7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQ7XG4gIGNvbnN0IG11bHRpcGxpZXJJbXBvcnRLaW5kID0gb3JkZXJJbXBvcnRLaW5kICE9PSAnaWdub3JlJ1xuICAgICYmIChhbHBoYWJldGl6ZU9wdGlvbnMub3JkZXJJbXBvcnRLaW5kID09PSAnYXNjJyA/IDEgOiAtMSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGltcG9ydHNTb3J0ZXIobm9kZUEsIG5vZGVCKSB7XG4gICAgY29uc3QgaW1wb3J0QSA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQSwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgY29uc3QgaW1wb3J0QiA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQiwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgICBpZiAoIWluY2x1ZGVzKGltcG9ydEEsICcvJykgJiYgIWluY2x1ZGVzKGltcG9ydEIsICcvJykpIHtcbiAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoaW1wb3J0QSwgaW1wb3J0Qik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEEgPSBpbXBvcnRBLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBCID0gaW1wb3J0Qi5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgYSA9IEEubGVuZ3RoO1xuICAgICAgY29uc3QgYiA9IEIubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGEsIGIpOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhBW2ldLCBCW2ldKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgeyBicmVhazsgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdCAmJiBhICE9PSBiKSB7XG4gICAgICAgIHJlc3VsdCA9IGEgPCBiID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCA9IHJlc3VsdCAqIG11bHRpcGxpZXI7XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBwYXRocyBhcmUgZXF1YWwgKHJlc3VsdCA9PT0gMCksIHNvcnQgdGhlbSBieSBpbXBvcnRLaW5kXG4gICAgaWYgKCFyZXN1bHQgJiYgbXVsdGlwbGllckltcG9ydEtpbmQpIHtcbiAgICAgIHJlc3VsdCA9IG11bHRpcGxpZXJJbXBvcnRLaW5kICogY29tcGFyZVN0cmluZyhcbiAgICAgICAgbm9kZUEubm9kZS5pbXBvcnRLaW5kIHx8IERFQUZVTFRfSU1QT1JUX0tJTkQsXG4gICAgICAgIG5vZGVCLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBncm91cGVkQnlSYW5rcyA9IGdyb3VwQnkoaW1wb3J0ZWQsIChpdGVtKSA9PiBpdGVtLnJhbmspO1xuXG4gIGNvbnN0IHNvcnRlckZuID0gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucyk7XG5cbiAgLy8gc29ydCBncm91cCBrZXlzIHNvIHRoYXQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb24gaW4gb3JkZXJcbiAgY29uc3QgZ3JvdXBSYW5rcyA9IE9iamVjdC5rZXlzKGdyb3VwZWRCeVJhbmtzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KTtcblxuICAvLyBzb3J0IGltcG9ydHMgbG9jYWxseSB3aXRoaW4gdGhlaXIgZ3JvdXBcbiAgZ3JvdXBSYW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLnNvcnQoc29ydGVyRm4pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZ2xvYmFsbHkgdW5pcXVlIHJhbmsgdG8gZWFjaCBpbXBvcnRcbiAgbGV0IG5ld1JhbmsgPSAwO1xuICBjb25zdCBhbHBoYWJldGl6ZWRSYW5rcyA9IGdyb3VwUmFua3MucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGdyb3VwUmFuaykge1xuICAgIGdyb3VwZWRCeVJhbmtzW2dyb3VwUmFua10uZm9yRWFjaChmdW5jdGlvbiAoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICBhY2NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF0gPSBwYXJzZUludChncm91cFJhbmssIDEwKSArIG5ld1Jhbms7XG4gICAgICBuZXdSYW5rICs9IDE7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIG11dGF0ZSB0aGUgb3JpZ2luYWwgZ3JvdXAtcmFuayB3aXRoIGFscGhhYmV0aXplZC1yYW5rXG4gIGltcG9ydGVkLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgIGltcG9ydGVkSXRlbS5yYW5rID0gYWxwaGFiZXRpemVkUmFua3NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF07XG4gIH0pO1xufVxuXG4vLyBERVRFQ1RJTkdcblxuZnVuY3Rpb24gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLCBwYXRoR3JvdXBzLCBwYXRoLCBtYXhQb3NpdGlvbikge1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhdGhHcm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgeyBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucywgZ3JvdXAsIHBvc2l0aW9uID0gMSB9ID0gcGF0aEdyb3Vwc1tpXTtcbiAgICBpZiAobWluaW1hdGNoKHBhdGgsIHBhdHRlcm4sIHBhdHRlcm5PcHRpb25zIHx8IHsgbm9jb21tZW50OiB0cnVlIH0pKSB7XG4gICAgICByZXR1cm4gcmFua3NbZ3JvdXBdICsgcG9zaXRpb24gLyBtYXhQb3NpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJhbmsoY29udGV4dCwgcmFua3MsIGltcG9ydEVudHJ5LCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGxldCBpbXBUeXBlO1xuICBsZXQgcmFuaztcbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgPT09ICdpbXBvcnQ6b2JqZWN0Jykge1xuICAgIGltcFR5cGUgPSAnb2JqZWN0JztcbiAgfSBlbHNlIGlmIChpbXBvcnRFbnRyeS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJyAmJiByYW5rcy5vbWl0dGVkVHlwZXMuaW5kZXhPZigndHlwZScpID09PSAtMSkge1xuICAgIGltcFR5cGUgPSAndHlwZSc7XG4gIH0gZWxzZSB7XG4gICAgaW1wVHlwZSA9IGltcG9ydFR5cGUoaW1wb3J0RW50cnkudmFsdWUsIGNvbnRleHQpO1xuICB9XG4gIGlmICghZXhjbHVkZWRJbXBvcnRUeXBlcy5oYXMoaW1wVHlwZSkpIHtcbiAgICByYW5rID0gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLmdyb3VwcywgcmFua3MucGF0aEdyb3VwcywgaW1wb3J0RW50cnkudmFsdWUsIHJhbmtzLm1heFBvc2l0aW9uKTtcbiAgfVxuICBpZiAodHlwZW9mIHJhbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmFuayA9IHJhbmtzLmdyb3Vwc1tpbXBUeXBlXTtcbiAgfVxuICBpZiAoaW1wb3J0RW50cnkudHlwZSAhPT0gJ2ltcG9ydCcgJiYgIWltcG9ydEVudHJ5LnR5cGUuc3RhcnRzV2l0aCgnaW1wb3J0OicpKSB7XG4gICAgcmFuayArPSAxMDA7XG4gIH1cblxuICByZXR1cm4gcmFuaztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJOb2RlKGNvbnRleHQsIGltcG9ydEVudHJ5LCByYW5rcywgaW1wb3J0ZWQsIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpIHtcbiAgY29uc3QgcmFuayA9IGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcyk7XG4gIGlmIChyYW5rICE9PSAtMSkge1xuICAgIGltcG9ydGVkLnB1c2goeyAuLi5pbXBvcnRFbnRyeSwgcmFuayB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlQmxvY2sobm9kZSkge1xuICBsZXQgbiA9IG5vZGU7XG4gIC8vIEhhbmRsZSBjYXNlcyBsaWtlIGBjb25zdCBiYXogPSByZXF1aXJlKCdmb28nKS5iYXIuYmF6YFxuICAvLyBhbmQgYGNvbnN0IGZvbyA9IHJlcXVpcmUoJ2ZvbycpKClgXG4gIHdoaWxlIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQub2JqZWN0ID09PSBuXG4gICAgfHwgbi5wYXJlbnQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBuLnBhcmVudC5jYWxsZWUgPT09IG5cbiAgKSB7XG4gICAgbiA9IG4ucGFyZW50O1xuICB9XG4gIGlmIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdG9yJ1xuICAgICYmIG4ucGFyZW50LnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQucGFyZW50LnR5cGUgPT09ICdQcm9ncmFtJ1xuICApIHtcbiAgICByZXR1cm4gbi5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgfVxufVxuXG5jb25zdCB0eXBlcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdpbnRlcm5hbCcsICd1bmtub3duJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4JywgJ29iamVjdCcsICd0eXBlJ107XG5cbi8vIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdHlwZS1yYW5rIHBhaXJzLlxuLy8gRXhhbXBsZTogeyBpbmRleDogMCwgc2libGluZzogMSwgcGFyZW50OiAxLCBleHRlcm5hbDogMSwgYnVpbHRpbjogMiwgaW50ZXJuYWw6IDIgfVxuLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBpdCBjb250YWlucyBhIHR5cGUgdGhhdCBkb2VzIG5vdCBleGlzdCwgb3IgaGFzIGEgZHVwbGljYXRlXG5mdW5jdGlvbiBjb252ZXJ0R3JvdXBzVG9SYW5rcyhncm91cHMpIHtcbiAgY29uc3QgcmFua09iamVjdCA9IGdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgZ3JvdXAsIGluZGV4KSB7XG4gICAgW10uY29uY2F0KGdyb3VwKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cEl0ZW0pIHtcbiAgICAgIGlmICh0eXBlcy5pbmRleE9mKGdyb3VwSXRlbSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJ1bGU6IFVua25vd24gdHlwZSBcXGAke0pTT04uc3RyaW5naWZ5KGdyb3VwSXRlbSl9XFxgYCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzW2dyb3VwSXRlbV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBcXGAke2dyb3VwSXRlbX1cXGAgaXMgZHVwbGljYXRlZGApO1xuICAgICAgfVxuICAgICAgcmVzW2dyb3VwSXRlbV0gPSBpbmRleCAqIDI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pO1xuXG4gIGNvbnN0IG9taXR0ZWRUeXBlcyA9IHR5cGVzLmZpbHRlcihmdW5jdGlvbiAodHlwZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmFua09iamVjdFt0eXBlXSA9PT0gJ3VuZGVmaW5lZCc7XG4gIH0pO1xuXG4gIGNvbnN0IHJhbmtzID0gb21pdHRlZFR5cGVzLnJlZHVjZShmdW5jdGlvbiAocmVzLCB0eXBlKSB7XG4gICAgcmVzW3R5cGVdID0gZ3JvdXBzLmxlbmd0aCAqIDI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwgcmFua09iamVjdCk7XG5cbiAgcmV0dXJuIHsgZ3JvdXBzOiByYW5rcywgb21pdHRlZFR5cGVzIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3MocGF0aEdyb3Vwcykge1xuICBjb25zdCBhZnRlciA9IHt9O1xuICBjb25zdCBiZWZvcmUgPSB7fTtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhdGhHcm91cHMubWFwKChwYXRoR3JvdXAsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBncm91cCwgcG9zaXRpb246IHBvc2l0aW9uU3RyaW5nIH0gPSBwYXRoR3JvdXA7XG4gICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdhZnRlcicpIHtcbiAgICAgIGlmICghYWZ0ZXJbZ3JvdXBdKSB7XG4gICAgICAgIGFmdGVyW2dyb3VwXSA9IDE7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbiA9IGFmdGVyW2dyb3VwXSsrO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAoIWJlZm9yZVtncm91cF0pIHtcbiAgICAgICAgYmVmb3JlW2dyb3VwXSA9IFtdO1xuICAgICAgfVxuICAgICAgYmVmb3JlW2dyb3VwXS5wdXNoKGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXRoR3JvdXAsIHBvc2l0aW9uIH07XG4gIH0pO1xuXG4gIGxldCBtYXhQb3NpdGlvbiA9IDE7XG5cbiAgT2JqZWN0LmtleXMoYmVmb3JlKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gYmVmb3JlW2dyb3VwXS5sZW5ndGg7XG4gICAgYmVmb3JlW2dyb3VwXS5mb3JFYWNoKChncm91cEluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgdHJhbnNmb3JtZWRbZ3JvdXBJbmRleF0ucG9zaXRpb24gPSAtMSAqIChncm91cExlbmd0aCAtIGluZGV4KTtcbiAgICB9KTtcbiAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KG1heFBvc2l0aW9uLCBncm91cExlbmd0aCk7XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKGFmdGVyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBncm91cE5leHRQb3NpdGlvbiA9IGFmdGVyW2tleV07XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBOZXh0UG9zaXRpb24gLSAxKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoR3JvdXBzOiB0cmFuc2Zvcm1lZCxcbiAgICBtYXhQb3NpdGlvbjogbWF4UG9zaXRpb24gPiAxMCA/IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoTWF0aC5sb2cxMChtYXhQb3NpdGlvbikpKSA6IDEwLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoXG4gICAgY29udGV4dC5nZXRTb3VyY2VDb2RlKCksIHByZXZSb290LCBjb21tZW50T25TYW1lTGluZUFzKHByZXZSb290KSk7XG5cbiAgbGV0IGVuZE9mTGluZSA9IHByZXZSb290LnJhbmdlWzFdO1xuICBpZiAodG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMCkge1xuICAgIGVuZE9mTGluZSA9IHRva2Vuc1RvRW5kT2ZMaW5lW3Rva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCAtIDFdLnJhbmdlWzFdO1xuICB9XG4gIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlclJhbmdlKFtwcmV2Um9vdC5yYW5nZVswXSwgZW5kT2ZMaW5lXSwgJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICBjb25zdCBwcmV2Um9vdCA9IGZpbmRSb290Tm9kZShwcmV2aW91c0ltcG9ydC5ub2RlKTtcbiAgY29uc3QgY3VyclJvb3QgPSBmaW5kUm9vdE5vZGUoY3VycmVudEltcG9ydC5ub2RlKTtcbiAgY29uc3QgcmFuZ2VUb1JlbW92ZSA9IFtcbiAgICBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHByZXZSb290KSxcbiAgICBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgY3VyclJvb3QpLFxuICBdO1xuICBpZiAoKC9eXFxzKiQvKS50ZXN0KHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcocmFuZ2VUb1JlbW92ZVswXSwgcmFuZ2VUb1JlbW92ZVsxXSkpKSB7XG4gICAgcmV0dXJuIChmaXhlcikgPT4gZml4ZXIucmVtb3ZlUmFuZ2UocmFuZ2VUb1JlbW92ZSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCkge1xuICBjb25zdCBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuID0gKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSA9PiB7XG4gICAgY29uc3QgbGluZXNCZXR3ZWVuSW1wb3J0cyA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmxpbmVzLnNsaWNlKFxuICAgICAgcHJldmlvdXNJbXBvcnQubm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICBjdXJyZW50SW1wb3J0Lm5vZGUubG9jLnN0YXJ0LmxpbmUgLSAxLFxuICAgICk7XG5cbiAgICByZXR1cm4gbGluZXNCZXR3ZWVuSW1wb3J0cy5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnRyaW0oKS5sZW5ndGgpLmxlbmd0aDtcbiAgfTtcbiAgY29uc3QgZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4gY3VycmVudEltcG9ydC5yYW5rIC0gMSA+PSBwcmV2aW91c0ltcG9ydC5yYW5rO1xuICBsZXQgcHJldmlvdXNJbXBvcnQgPSBpbXBvcnRlZFswXTtcblxuICBpbXBvcnRlZC5zbGljZSgxKS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50SW1wb3J0KSB7XG4gICAgY29uc3QgZW1wdHlMaW5lc0JldHdlZW4gPSBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KTtcbiAgICBjb25zdCBpc1N0YXJ0T2ZEaXN0aW5jdEdyb3VwID0gZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG5cbiAgICBpZiAobmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cydcbiAgICAgICAgfHwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycpIHtcbiAgICAgIGlmIChjdXJyZW50SW1wb3J0LnJhbmsgIT09IHByZXZpb3VzSW1wb3J0LnJhbmsgJiYgZW1wdHlMaW5lc0JldHdlZW4gPT09IDApIHtcbiAgICAgICAgaWYgKGRpc3RpbmN0R3JvdXAgfHwgIWRpc3RpbmN0R3JvdXAgJiYgaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgICAgICBmaXg6IGZpeE5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lc0JldHdlZW4gPiAwXG4gICAgICAgICYmIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwICYmIGN1cnJlbnRJbXBvcnQucmFuayA9PT0gcHJldmlvdXNJbXBvcnQucmFuayB8fCAhZGlzdGluY3RHcm91cCAmJiAhaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgd2l0aGluIGltcG9ydCBncm91cCcsXG4gICAgICAgICAgICBmaXg6IHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgYmV0d2VlbiBpbXBvcnQgZ3JvdXBzJyxcbiAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNJbXBvcnQgPSBjdXJyZW50SW1wb3J0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucykge1xuICBjb25zdCBhbHBoYWJldGl6ZSA9IG9wdGlvbnMuYWxwaGFiZXRpemUgfHwge307XG4gIGNvbnN0IG9yZGVyID0gYWxwaGFiZXRpemUub3JkZXIgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplLm9yZGVySW1wb3J0S2luZCB8fCAnaWdub3JlJztcbiAgY29uc3QgY2FzZUluc2Vuc2l0aXZlID0gYWxwaGFiZXRpemUuY2FzZUluc2Vuc2l0aXZlIHx8IGZhbHNlO1xuXG4gIHJldHVybiB7IG9yZGVyLCBvcmRlckltcG9ydEtpbmQsIGNhc2VJbnNlbnNpdGl2ZSB9O1xufVxuXG4vLyBUT0RPLCBzZW12ZXItbWFqb3I6IENoYW5nZSB0aGUgZGVmYXVsdCBvZiBcImRpc3RpbmN0R3JvdXBcIiBmcm9tIHRydWUgdG8gZmFsc2VcbmNvbnN0IGRlZmF1bHREaXN0aW5jdEdyb3VwID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBjb252ZW50aW9uIGluIG1vZHVsZSBpbXBvcnQgb3JkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnb3JkZXInKSxcbiAgICB9LFxuXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzdGluY3RHcm91cDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdERpc3RpbmN0R3JvdXAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IHR5cGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgZW51bTogWydhZnRlcicsICdiZWZvcmUnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3BhdHRlcm4nLCAnZ3JvdXAnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnbmV3bGluZXMtYmV0d2Vlbic6IHtcbiAgICAgICAgICAgIGVudW06IFtcbiAgICAgICAgICAgICAgJ2lnbm9yZScsXG4gICAgICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgICAgICAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJyxcbiAgICAgICAgICAgICAgJ25ldmVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbHBoYWJldGl6ZToge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcmRlckltcG9ydEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBpbXBvcnRPcmRlclJ1bGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9IG9wdGlvbnNbJ25ld2xpbmVzLWJldHdlZW4nXSB8fCAnaWdub3JlJztcbiAgICBjb25zdCBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQob3B0aW9ucy5wYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyB8fCBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnb2JqZWN0J10pO1xuICAgIGNvbnN0IGFscGhhYmV0aXplID0gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucyk7XG4gICAgY29uc3QgZGlzdGluY3RHcm91cCA9IG9wdGlvbnMuZGlzdGluY3RHcm91cCA9PSBudWxsID8gZGVmYXVsdERpc3RpbmN0R3JvdXAgOiAhIW9wdGlvbnMuZGlzdGluY3RHcm91cDtcbiAgICBsZXQgcmFua3M7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBwYXRoR3JvdXBzLCBtYXhQb3NpdGlvbiB9ID0gY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyhvcHRpb25zLnBhdGhHcm91cHMgfHwgW10pO1xuICAgICAgY29uc3QgeyBncm91cHMsIG9taXR0ZWRUeXBlcyB9ID0gY29udmVydEdyb3Vwc1RvUmFua3Mob3B0aW9ucy5ncm91cHMgfHwgZGVmYXVsdEdyb3Vwcyk7XG4gICAgICByYW5rcyA9IHtcbiAgICAgICAgZ3JvdXBzLFxuICAgICAgICBvbWl0dGVkVHlwZXMsXG4gICAgICAgIHBhdGhHcm91cHMsXG4gICAgICAgIG1heFBvc2l0aW9uLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTWFsZm9ybWVkIGNvbmZpZ3VyYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb2dyYW0obm9kZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0TWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0QmxvY2tJbXBvcnRzKG5vZGUpIHtcbiAgICAgIGlmICghaW1wb3J0TWFwLmhhcyhub2RlKSkge1xuICAgICAgICBpbXBvcnRNYXAuc2V0KG5vZGUsIFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbXBvcnRNYXAuZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIHVuYXNzaWduZWQgaW1wb3J0cyB1bmxlc3Mgd2Fybk9uVW5hc3NpZ25lZEltcG9ydHMgaXMgc2V0XG4gICAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoIHx8IG9wdGlvbnMud2Fybk9uVW5hc3NpZ25lZEltcG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5zb3VyY2UudmFsdWU7XG4gICAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB0eXBlOiAnaW1wb3J0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByYW5rcyxcbiAgICAgICAgICAgIGdldEJsb2NrSW1wb3J0cyhub2RlLnBhcmVudCksXG4gICAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgLy8gc2tpcCBcImV4cG9ydCBpbXBvcnRcInNcbiAgICAgICAgaWYgKG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlUmVmZXJlbmNlLnR5cGUgPT09ICdUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlJykge1xuICAgICAgICAgIHZhbHVlID0gbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbi52YWx1ZTtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IHZhbHVlO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuZ2V0VGV4dChub2RlLm1vZHVsZVJlZmVyZW5jZSk7XG4gICAgICAgICAgdHlwZSA9ICdpbXBvcnQ6b2JqZWN0JztcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck5vZGUoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBoYW5kbGVSZXF1aXJlcyhub2RlKSB7XG4gICAgICAgIGlmICghaXNTdGF0aWNSZXF1aXJlKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAncmVxdWlyZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMoYmxvY2spLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnOiBmdW5jdGlvbiByZXBvcnRBbmRSZXNldCgpIHtcbiAgICAgICAgaW1wb3J0TWFwLmZvckVhY2goKGltcG9ydGVkKSA9PiB7XG4gICAgICAgICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtYWtlTmV3bGluZXNCZXR3ZWVuUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkLCBuZXdsaW5lc0JldHdlZW5JbXBvcnRzLCBkaXN0aW5jdEdyb3VwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWxwaGFiZXRpemUub3JkZXIgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGltcG9ydE1hcC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/scc.js b/node_modules/eslint-plugin-import/lib/scc.js deleted file mode 100644 index 82eff7196d..0000000000 --- a/node_modules/eslint-plugin-import/lib/scc.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _scc = require('@rtsao/scc');var _scc2 = _interopRequireDefault(_scc); -var _hash = require('eslint-module-utils/hash'); -var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); -var _builder = require('./exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _childContext = require('./exportMap/childContext');var _childContext2 = _interopRequireDefault(_childContext);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);}}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}} - -var cache = new Map();var - -StronglyConnectedComponentsBuilder = function () {function StronglyConnectedComponentsBuilder() {_classCallCheck(this, StronglyConnectedComponentsBuilder);}_createClass(StronglyConnectedComponentsBuilder, null, [{ key: 'clearCache', value: function () {function clearCache() - { - cache = new Map(); - }return clearCache;}() }, { key: 'get', value: function () {function get( - - source, context) { - var path = (0, _resolve2['default'])(source, context); - if (path == null) {return null;} - return StronglyConnectedComponentsBuilder['for']((0, _childContext2['default'])(path, context)); - }return get;}() }, { key: 'for', value: function () {function _for( - - context) { - var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); - if (cache.has(cacheKey)) { - return cache.get(cacheKey); - } - var scc = StronglyConnectedComponentsBuilder.calculate(context); - cache.set(cacheKey, scc); - return scc; - }return _for;}() }, { key: 'calculate', value: function () {function calculate( - - context) { - var exportMap = _builder2['default']['for'](context); - var adjacencyList = this.exportMapToAdjacencyList(exportMap); - var calculatedScc = (0, _scc2['default'])(adjacencyList); - return StronglyConnectedComponentsBuilder.calculatedSccToPlainObject(calculatedScc); - }return calculate;}() - - /** @returns {Map>} for each dep, what are its direct deps */ }, { key: 'exportMapToAdjacencyList', value: function () {function exportMapToAdjacencyList( - initialExportMap) { - var adjacencyList = new Map(); - // BFS - function visitNode(exportMap) { - if (!exportMap) { - return; - } - exportMap.imports.forEach(function (v, importedPath) { - var from = exportMap.path; - var to = importedPath; - - // Ignore type-only imports, because we care only about SCCs of value imports - var toTraverse = [].concat(_toConsumableArray(v.declarations)).filter(function (_ref) {var isOnlyImportingTypes = _ref.isOnlyImportingTypes;return !isOnlyImportingTypes;}); - if (toTraverse.length === 0) {return;} - - if (!adjacencyList.has(from)) { - adjacencyList.set(from, new Set()); - } - - if (adjacencyList.get(from).has(to)) { - return; // prevent endless loop - } - adjacencyList.get(from).add(to); - visitNode(v.getter()); - }); - } - visitNode(initialExportMap); - // Fill gaps - adjacencyList.forEach(function (values) { - values.forEach(function (value) { - if (!adjacencyList.has(value)) { - adjacencyList.set(value, new Set()); - } - }); - }); - return adjacencyList; - }return exportMapToAdjacencyList;}() - - /** @returns {Record} for each key, its SCC's index */ }, { key: 'calculatedSccToPlainObject', value: function () {function calculatedSccToPlainObject( - sccs) { - var obj = {}; - sccs.forEach(function (scc, index) { - scc.forEach(function (node) { - obj[node] = index; - }); - }); - return obj; - }return calculatedSccToPlainObject;}() }]);return StronglyConnectedComponentsBuilder;}();exports['default'] = StronglyConnectedComponentsBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2MuanMiXSwibmFtZXMiOlsiY2FjaGUiLCJNYXAiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwic291cmNlIiwiY29udGV4dCIsInBhdGgiLCJjYWNoZUtleSIsImRpZ2VzdCIsImhhcyIsImdldCIsInNjYyIsImNhbGN1bGF0ZSIsInNldCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJhZGphY2VuY3lMaXN0IiwiZXhwb3J0TWFwVG9BZGphY2VuY3lMaXN0IiwiY2FsY3VsYXRlZFNjYyIsImNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0IiwiaW5pdGlhbEV4cG9ydE1hcCIsInZpc2l0Tm9kZSIsImltcG9ydHMiLCJmb3JFYWNoIiwidiIsImltcG9ydGVkUGF0aCIsImZyb20iLCJ0byIsInRvVHJhdmVyc2UiLCJkZWNsYXJhdGlvbnMiLCJmaWx0ZXIiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsImxlbmd0aCIsIlNldCIsImFkZCIsImdldHRlciIsInZhbHVlcyIsInZhbHVlIiwic2NjcyIsIm9iaiIsImluZGV4Iiwibm9kZSJdLCJtYXBwaW5ncyI6ImduQkFBQSxpQztBQUNBO0FBQ0Esc0Q7QUFDQSw4QztBQUNBLHdEOztBQUVBLElBQUlBLFFBQVEsSUFBSUMsR0FBSixFQUFaLEM7O0FBRXFCQyxrQztBQUNDO0FBQ2xCRixnQkFBUSxJQUFJQyxHQUFKLEVBQVI7QUFDRCxPOztBQUVVRSxZLEVBQVFDLE8sRUFBUztBQUMxQixZQUFNQyxPQUFPLDBCQUFRRixNQUFSLEVBQWdCQyxPQUFoQixDQUFiO0FBQ0EsWUFBSUMsUUFBUSxJQUFaLEVBQWtCLENBQUUsT0FBTyxJQUFQLENBQWM7QUFDbEMsZUFBT0gsMENBQXVDLCtCQUFhRyxJQUFiLEVBQW1CRCxPQUFuQixDQUF2QyxDQUFQO0FBQ0QsTzs7QUFFVUEsYSxFQUFTO0FBQ2xCLFlBQU1FLFdBQVdGLFFBQVFFLFFBQVIsSUFBb0Isc0JBQVdGLE9BQVgsRUFBb0JHLE1BQXBCLENBQTJCLEtBQTNCLENBQXJDO0FBQ0EsWUFBSVAsTUFBTVEsR0FBTixDQUFVRixRQUFWLENBQUosRUFBeUI7QUFDdkIsaUJBQU9OLE1BQU1TLEdBQU4sQ0FBVUgsUUFBVixDQUFQO0FBQ0Q7QUFDRCxZQUFNSSxNQUFNUixtQ0FBbUNTLFNBQW5DLENBQTZDUCxPQUE3QyxDQUFaO0FBQ0FKLGNBQU1ZLEdBQU4sQ0FBVU4sUUFBVixFQUFvQkksR0FBcEI7QUFDQSxlQUFPQSxHQUFQO0FBQ0QsTzs7QUFFZ0JOLGEsRUFBUztBQUN4QixZQUFNUyxZQUFZQyw0QkFBcUJWLE9BQXJCLENBQWxCO0FBQ0EsWUFBTVcsZ0JBQWdCLEtBQUtDLHdCQUFMLENBQThCSCxTQUE5QixDQUF0QjtBQUNBLFlBQU1JLGdCQUFnQixzQkFBYUYsYUFBYixDQUF0QjtBQUNBLGVBQU9iLG1DQUFtQ2dCLDBCQUFuQyxDQUE4REQsYUFBOUQsQ0FBUDtBQUNELE87O0FBRUQscUY7QUFDZ0NFLHNCLEVBQWtCO0FBQ2hELFlBQU1KLGdCQUFnQixJQUFJZCxHQUFKLEVBQXRCO0FBQ0E7QUFDQSxpQkFBU21CLFNBQVQsQ0FBbUJQLFNBQW5CLEVBQThCO0FBQzVCLGNBQUksQ0FBQ0EsU0FBTCxFQUFnQjtBQUNkO0FBQ0Q7QUFDREEsb0JBQVVRLE9BQVYsQ0FBa0JDLE9BQWxCLENBQTBCLFVBQUNDLENBQUQsRUFBSUMsWUFBSixFQUFxQjtBQUM3QyxnQkFBTUMsT0FBT1osVUFBVVIsSUFBdkI7QUFDQSxnQkFBTXFCLEtBQUtGLFlBQVg7O0FBRUE7QUFDQSxnQkFBTUcsYUFBYSw2QkFBSUosRUFBRUssWUFBTixHQUFvQkMsTUFBcEIsQ0FBMkIscUJBQUdDLG9CQUFILFFBQUdBLG9CQUFILFFBQThCLENBQUNBLG9CQUEvQixFQUEzQixDQUFuQjtBQUNBLGdCQUFJSCxXQUFXSSxNQUFYLEtBQXNCLENBQTFCLEVBQTZCLENBQUUsT0FBUzs7QUFFeEMsZ0JBQUksQ0FBQ2hCLGNBQWNQLEdBQWQsQ0FBa0JpQixJQUFsQixDQUFMLEVBQThCO0FBQzVCViw0QkFBY0gsR0FBZCxDQUFrQmEsSUFBbEIsRUFBd0IsSUFBSU8sR0FBSixFQUF4QjtBQUNEOztBQUVELGdCQUFJakIsY0FBY04sR0FBZCxDQUFrQmdCLElBQWxCLEVBQXdCakIsR0FBeEIsQ0FBNEJrQixFQUE1QixDQUFKLEVBQXFDO0FBQ25DLHFCQURtQyxDQUMzQjtBQUNUO0FBQ0RYLDBCQUFjTixHQUFkLENBQWtCZ0IsSUFBbEIsRUFBd0JRLEdBQXhCLENBQTRCUCxFQUE1QjtBQUNBTixzQkFBVUcsRUFBRVcsTUFBRixFQUFWO0FBQ0QsV0FqQkQ7QUFrQkQ7QUFDRGQsa0JBQVVELGdCQUFWO0FBQ0E7QUFDQUosc0JBQWNPLE9BQWQsQ0FBc0IsVUFBQ2EsTUFBRCxFQUFZO0FBQ2hDQSxpQkFBT2IsT0FBUCxDQUFlLFVBQUNjLEtBQUQsRUFBVztBQUN4QixnQkFBSSxDQUFDckIsY0FBY1AsR0FBZCxDQUFrQjRCLEtBQWxCLENBQUwsRUFBK0I7QUFDN0JyQiw0QkFBY0gsR0FBZCxDQUFrQndCLEtBQWxCLEVBQXlCLElBQUlKLEdBQUosRUFBekI7QUFDRDtBQUNGLFdBSkQ7QUFLRCxTQU5EO0FBT0EsZUFBT2pCLGFBQVA7QUFDRCxPOztBQUVELDBFO0FBQ2tDc0IsVSxFQUFNO0FBQ3RDLFlBQU1DLE1BQU0sRUFBWjtBQUNBRCxhQUFLZixPQUFMLENBQWEsVUFBQ1osR0FBRCxFQUFNNkIsS0FBTixFQUFnQjtBQUMzQjdCLGNBQUlZLE9BQUosQ0FBWSxVQUFDa0IsSUFBRCxFQUFVO0FBQ3BCRixnQkFBSUUsSUFBSixJQUFZRCxLQUFaO0FBQ0QsV0FGRDtBQUdELFNBSkQ7QUFLQSxlQUFPRCxHQUFQO0FBQ0QsTyw2R0E1RWtCcEMsa0MiLCJmaWxlIjoic2NjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhbGN1bGF0ZVNjYyBmcm9tICdAcnRzYW8vc2NjJztcbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGNoaWxkQ29udGV4dCBmcm9tICcuL2V4cG9ydE1hcC9jaGlsZENvbnRleHQnO1xuXG5sZXQgY2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIge1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoc291cmNlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KTtcbiAgICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG4gICAgcmV0dXJuIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmIChjYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG4gICAgY29uc3Qgc2NjID0gU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzQnVpbGRlci5jYWxjdWxhdGUoY29udGV4dCk7XG4gICAgY2FjaGUuc2V0KGNhY2hlS2V5LCBzY2MpO1xuICAgIHJldHVybiBzY2M7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBleHBvcnRNYXAgPSBFeHBvcnRNYXBCdWlsZGVyLmZvcihjb250ZXh0KTtcbiAgICBjb25zdCBhZGphY2VuY3lMaXN0ID0gdGhpcy5leHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoZXhwb3J0TWFwKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkU2NjID0gY2FsY3VsYXRlU2NjKGFkamFjZW5jeUxpc3QpO1xuICAgIHJldHVybiBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyLmNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KGNhbGN1bGF0ZWRTY2MpO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59IGZvciBlYWNoIGRlcCwgd2hhdCBhcmUgaXRzIGRpcmVjdCBkZXBzICovXG4gIHN0YXRpYyBleHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoaW5pdGlhbEV4cG9ydE1hcCkge1xuICAgIGNvbnN0IGFkamFjZW5jeUxpc3QgPSBuZXcgTWFwKCk7XG4gICAgLy8gQkZTXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlKGV4cG9ydE1hcCkge1xuICAgICAgaWYgKCFleHBvcnRNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXhwb3J0TWFwLmltcG9ydHMuZm9yRWFjaCgodiwgaW1wb3J0ZWRQYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyb20gPSBleHBvcnRNYXAucGF0aDtcbiAgICAgICAgY29uc3QgdG8gPSBpbXBvcnRlZFBhdGg7XG5cbiAgICAgICAgLy8gSWdub3JlIHR5cGUtb25seSBpbXBvcnRzLCBiZWNhdXNlIHdlIGNhcmUgb25seSBhYm91dCBTQ0NzIG9mIHZhbHVlIGltcG9ydHNcbiAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi52LmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpc09ubHlJbXBvcnRpbmdUeXBlcyk7XG4gICAgICAgIGlmICh0b1RyYXZlcnNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKGZyb20pKSB7XG4gICAgICAgICAgYWRqYWNlbmN5TGlzdC5zZXQoZnJvbSwgbmV3IFNldCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGphY2VuY3lMaXN0LmdldChmcm9tKS5oYXModG8pKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGVuZGxlc3MgbG9vcFxuICAgICAgICB9XG4gICAgICAgIGFkamFjZW5jeUxpc3QuZ2V0KGZyb20pLmFkZCh0byk7XG4gICAgICAgIHZpc2l0Tm9kZSh2LmdldHRlcigpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdE5vZGUoaW5pdGlhbEV4cG9ydE1hcCk7XG4gICAgLy8gRmlsbCBnYXBzXG4gICAgYWRqYWNlbmN5TGlzdC5mb3JFYWNoKCh2YWx1ZXMpID0+IHtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGFkamFjZW5jeUxpc3Quc2V0KHZhbHVlLCBuZXcgU2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWRqYWNlbmN5TGlzdDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gZm9yIGVhY2gga2V5LCBpdHMgU0NDJ3MgaW5kZXggKi9cbiAgc3RhdGljIGNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KHNjY3MpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBzY2NzLmZvckVhY2goKHNjYywgaW5kZXgpID0+IHtcbiAgICAgIHNjYy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIG9ialtub2RlXSA9IGluZGV4O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/package.json b/node_modules/eslint-plugin-import/package.json index be150064d6..5c0af48543 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.30.0", + "version": "2.29.1", "description": "Import with sanity.", "engines": { "node": ">=4" @@ -11,7 +11,6 @@ }, "files": [ "*.md", - "!{CONTRIBUTING,RELEASE}.md", "LICENSE", "docs", "lib", @@ -31,9 +30,6 @@ "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", - "test-examples": "npm run build && npm run test-example:legacy && npm run test-example:flat", - "test-example:legacy": "cd examples/legacy && npm install && npm run lint", - "test-example:flat": "cd examples/flat && npm install && npm run lint", "prepublishOnly": "safe-publish-latest && npm run build", "prepublish": "not-in-publish || npm run prepublishOnly", "preupdate:eslint-docs": "npm run build", @@ -86,15 +82,13 @@ "eslint-plugin-eslint-plugin": "^2.3.0", "eslint-plugin-import": "2.x", "eslint-plugin-json": "^2.1.2", - "find-babel-config": "=1.2.0", "fs-copy-file-sync": "^1.1.1", "glob": "^7.2.3", "in-publish": "^2.0.1", "jackspeak": "=2.1.1", - "jsonc-parser": "=3.2.0", "linklocal": "^2.8.2", "lodash.isarray": "^4.0.0", - "markdownlint-cli": "~0.35", + "markdownlint-cli": "^0.38.0", "mocha": "^3.5.3", "npm-which": "^3.0.1", "nyc": "^11.9.0", @@ -109,22 +103,21 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" }, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" } diff --git a/package-lock.json b/package-lock.json index adc44551c1..f32fec3845 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "^2.30.0", + "eslint-plugin-import": "~2.29.1", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", @@ -867,12 +867,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -2836,27 +2830,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/package.json b/package.json index f2c21d05d2..44bc95a2f6 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "^2.30.0", + "eslint-plugin-import": "~2.29.1", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", From ed5036d7fa4c37474b222f4e32a99996a417638d Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Mon, 23 Sep 2024 09:28:18 -0700 Subject: [PATCH 09/23] Update `tsconfig.tsbuildinfo` --- tsconfig.tsbuildinfo | 1 + 1 file changed, 1 insertion(+) create mode 100644 tsconfig.tsbuildinfo diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..af273f913d --- /dev/null +++ b/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/actions-util.test.ts","./src/actions-util.ts","./src/analyze-action-env.test.ts","./src/analyze-action-input.test.ts","./src/analyze-action-post.ts","./src/analyze-action.ts","./src/analyze.test.ts","./src/analyze.ts","./src/api-client.test.ts","./src/api-client.ts","./src/autobuild-action.ts","./src/autobuild.ts","./src/cli-errors.ts","./src/codeql.test.ts","./src/codeql.ts","./src/config-utils.test.ts","./src/config-utils.ts","./src/database-upload.test.ts","./src/database-upload.ts","./src/debug-artifacts.test.ts","./src/debug-artifacts.ts","./src/diagnostics.ts","./src/doc-url.ts","./src/environment.ts","./src/feature-flags.test.ts","./src/feature-flags.ts","./src/fingerprints.test.ts","./src/fingerprints.ts","./src/init-action-post-helper.test.ts","./src/init-action-post-helper.ts","./src/init-action-post.ts","./src/init-action.ts","./src/init.test.ts","./src/init.ts","./src/languages.test.ts","./src/languages.ts","./src/logging.ts","./src/repository.ts","./src/resolve-environment-action.ts","./src/resolve-environment.ts","./src/setup-codeql.test.ts","./src/setup-codeql.ts","./src/start-proxy-action-post.ts","./src/start-proxy-action.ts","./src/status-report.test.ts","./src/status-report.ts","./src/tar.ts","./src/testing-utils.ts","./src/tools-features.test.ts","./src/tools-features.ts","./src/tracer-config.test.ts","./src/tracer-config.ts","./src/trap-caching.test.ts","./src/trap-caching.ts","./src/upload-lib.test.ts","./src/upload-lib.ts","./src/upload-sarif-action-post.ts","./src/upload-sarif-action.ts","./src/util.test.ts","./src/util.ts","./src/workflow.test.ts","./src/workflow.ts","./src/testdata/testfile3.ts"],"version":"5.6.2"} \ No newline at end of file From bff5ba0a535e0adb0a006901de834d4ec61c722d Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 23 Sep 2024 17:41:33 +0100 Subject: [PATCH 10/23] Check in new files when rebuilding --- .github/workflows/rebuild.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rebuild.yml b/.github/workflows/rebuild.yml index b534a0915d..c2dcb2c690 100644 --- a/.github/workflows/rebuild.yml +++ b/.github/workflows/rebuild.yml @@ -69,7 +69,8 @@ jobs: if [ ! -z "$(git status --porcelain)" ]; then git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" - git commit -am "Rebuild" + git add --all + git commit -m "Rebuild" git push origin "HEAD:$BRANCH" echo "Pushed a commit to rebuild the Action." \ "Please mark the PR as ready for review to trigger PR checks." | From 74e989e9a5722e65b3d6ce3d06088d2ff955d885 Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Mon, 23 Sep 2024 09:47:18 -0700 Subject: [PATCH 11/23] Stop tracking `tsconfig.tsbuildinfo` --- .gitignore | 2 ++ tsconfig.tsbuildinfo | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 tsconfig.tsbuildinfo diff --git a/.gitignore b/.gitignore index c1be11d2ac..e007cdf3c7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ node_modules/.cache/ .DS_Store # eslint sarif report eslint.sarif +# for local incremental compilation +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo deleted file mode 100644 index af273f913d..0000000000 --- a/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./src/actions-util.test.ts","./src/actions-util.ts","./src/analyze-action-env.test.ts","./src/analyze-action-input.test.ts","./src/analyze-action-post.ts","./src/analyze-action.ts","./src/analyze.test.ts","./src/analyze.ts","./src/api-client.test.ts","./src/api-client.ts","./src/autobuild-action.ts","./src/autobuild.ts","./src/cli-errors.ts","./src/codeql.test.ts","./src/codeql.ts","./src/config-utils.test.ts","./src/config-utils.ts","./src/database-upload.test.ts","./src/database-upload.ts","./src/debug-artifacts.test.ts","./src/debug-artifacts.ts","./src/diagnostics.ts","./src/doc-url.ts","./src/environment.ts","./src/feature-flags.test.ts","./src/feature-flags.ts","./src/fingerprints.test.ts","./src/fingerprints.ts","./src/init-action-post-helper.test.ts","./src/init-action-post-helper.ts","./src/init-action-post.ts","./src/init-action.ts","./src/init.test.ts","./src/init.ts","./src/languages.test.ts","./src/languages.ts","./src/logging.ts","./src/repository.ts","./src/resolve-environment-action.ts","./src/resolve-environment.ts","./src/setup-codeql.test.ts","./src/setup-codeql.ts","./src/start-proxy-action-post.ts","./src/start-proxy-action.ts","./src/status-report.test.ts","./src/status-report.ts","./src/tar.ts","./src/testing-utils.ts","./src/tools-features.test.ts","./src/tools-features.ts","./src/tracer-config.test.ts","./src/tracer-config.ts","./src/trap-caching.test.ts","./src/trap-caching.ts","./src/upload-lib.test.ts","./src/upload-lib.ts","./src/upload-sarif-action-post.ts","./src/upload-sarif-action.ts","./src/util.test.ts","./src/util.ts","./src/workflow.test.ts","./src/workflow.ts","./src/testdata/testfile3.ts"],"version":"5.6.2"} \ No newline at end of file From 65e62c7ee15f74ef85af16917e3a29b473241139 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:28:39 +0000 Subject: [PATCH 12/23] Bump the npm group with 4 updates Bumps the npm group with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin), [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) and [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import). Updates `@eslint/js` from 9.10.0 to 9.11.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.11.0/packages/js) Updates `@typescript-eslint/eslint-plugin` from 8.6.0 to 8.7.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.7.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.6.0 to 8.7.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.7.0/packages/parser) Updates `eslint-plugin-import` from 2.29.1 to 2.30.0 - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm ... Signed-off-by: dependabot[bot] --- package-lock.json | 128 ++++++++++++++++++++++++---------------------- package.json | 8 +-- 2 files changed, 71 insertions(+), 65 deletions(-) diff --git a/package-lock.json b/package-lock.json index 103e102cbc..0f079b13d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "@ava/typescript": "4.1.0", "@eslint/compat": "^1.1.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.10.0", + "@eslint/js": "^9.11.0", "@microsoft/eslint-formatter-sarif": "^3.1.0", "@types/adm-zip": "^0.5.5", "@types/console-log-level": "^1.4.5", @@ -52,14 +52,14 @@ "@types/node": "20.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^8.6.0", - "@typescript-eslint/parser": "^8.6.0", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", "ava": "^5.3.1", "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "~2.29.1", + "eslint-plugin-import": "~2.30.0", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", @@ -519,9 +519,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", + "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -867,6 +867,12 @@ "dev": true, "license": "0BSD" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -1013,16 +1019,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", - "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/type-utils": "8.6.0", - "@typescript-eslint/utils": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1046,15 +1052,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", - "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4" }, "engines": { @@ -1074,13 +1080,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", - "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1091,13 +1097,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", - "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1115,9 +1121,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", - "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1128,13 +1134,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", - "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1180,15 +1186,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", - "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1202,12 +1208,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", - "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2830,27 +2836,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/package.json b/package.json index dcdacc24fa..95b53f21a7 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@ava/typescript": "4.1.0", "@eslint/compat": "^1.1.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.10.0", + "@eslint/js": "^9.11.0", "@microsoft/eslint-formatter-sarif": "^3.1.0", "@types/adm-zip": "^0.5.5", "@types/console-log-level": "^1.4.5", @@ -68,14 +68,14 @@ "@types/node": "20.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^8.6.0", - "@typescript-eslint/parser": "^8.6.0", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", "ava": "^5.3.1", "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "~2.29.1", + "eslint-plugin-import": "~2.30.0", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", From 7a2719db0558b893d068d63d647540ecfc5f6acf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:29:51 +0000 Subject: [PATCH 13/23] Update checked-in dependencies --- node_modules/.package-lock.json | 120 +-- node_modules/@eslint/js/package.json | 2 +- node_modules/@rtsao/scc/LICENSE | 21 + node_modules/@rtsao/scc/README.md | 49 + node_modules/@rtsao/scc/index.d.ts | 1 + node_modules/@rtsao/scc/index.js | 51 ++ node_modules/@rtsao/scc/index.js.flow | 5 + node_modules/@rtsao/scc/package.json | 7 + .../rules/class-literal-property-style.js | 3 +- .../rules/class-literal-property-style.js.map | 2 +- .../dist/rules/class-methods-use-this.js | 2 +- .../dist/rules/class-methods-use-this.js.map | 2 +- .../dist/rules/consistent-type-exports.js | 96 +- .../dist/rules/consistent-type-exports.js.map | 2 +- .../rules/no-confusing-non-null-assertion.js | 125 ++- .../no-confusing-non-null-assertion.js.map | 2 +- .../eslint-plugin/dist/rules/no-deprecated.js | 120 ++- .../dist/rules/no-deprecated.js.map | 2 +- .../dist/rules/no-unsafe-call.js | 43 +- .../dist/rules/no-unsafe-call.js.map | 2 +- .../eslint-plugin/dist/util/index.js | 1 - .../eslint-plugin/dist/util/index.js.map | 2 +- .../util/isArrayMethodCallWithPredicate.js | 2 +- .../isArrayMethodCallWithPredicate.js.map | 2 +- .../eslint-plugin/dist/util/misc.js | 66 +- .../eslint-plugin/dist/util/misc.js.map | 2 +- .../rules/no-confusing-non-null-assertion.mdx | 19 +- .../docs/rules/no-floating-promises.mdx | 19 +- .../docs/rules/no-inferrable-types.mdx | 2 + .../rules/no-unnecessary-type-parameters.mdx | 123 ++- .../docs/rules/no-unsafe-call.mdx | 28 + .../docs/rules/no-unsafe-function-type.mdx | 1 + .../docs/rules/strict-boolean-expressions.mdx | 8 +- .../eslint-plugin/package.json | 14 +- .../@typescript-eslint/parser/package.json | 10 +- .../scope-manager/dist/definition/index.d.ts | 2 +- .../dist/definition/index.d.ts.map | 2 +- .../scope-manager/dist/definition/index.js | 1 - .../dist/definition/index.js.map | 2 +- .../scope-manager/dist/scope/index.d.ts | 2 +- .../scope-manager/dist/scope/index.d.ts.map | 2 +- .../scope-manager/dist/scope/index.js | 1 - .../scope-manager/dist/scope/index.js.map | 2 +- .../scope-manager/package.json | 8 +- .../type-utils/package.json | 8 +- .../@typescript-eslint/types/dist/index.d.ts | 4 +- .../types/dist/index.d.ts.map | 2 +- .../@typescript-eslint/types/dist/index.js | 2 - .../types/dist/index.js.map | 2 +- .../types/dist/ts-estree.d.ts | 2 +- .../types/dist/ts-estree.d.ts.map | 2 +- .../types/dist/ts-estree.js.map | 2 +- .../@typescript-eslint/types/package.json | 2 +- .../dist/ts-estree/index.d.ts | 4 +- .../dist/ts-estree/index.d.ts.map | 2 +- .../typescript-estree/dist/ts-estree/index.js | 16 - .../dist/ts-estree/index.js.map | 2 +- .../typescript-estree/package.json | 6 +- .../utils/dist/eslint-utils/index.d.ts | 2 +- .../utils/dist/eslint-utils/index.d.ts.map | 2 +- .../utils/dist/eslint-utils/index.js | 1 - .../utils/dist/eslint-utils/index.js.map | 2 +- .../@typescript-eslint/utils/dist/index.d.ts | 2 +- .../utils/dist/index.d.ts.map | 2 +- .../@typescript-eslint/utils/dist/index.js | 3 +- .../utils/dist/index.js.map | 2 +- .../utils/dist/ts-eslint/Rule.d.ts | 11 +- .../utils/dist/ts-eslint/Rule.d.ts.map | 2 +- .../utils/dist/ts-eslint/index.d.ts | 12 +- .../utils/dist/ts-eslint/index.d.ts.map | 2 +- .../utils/dist/ts-eslint/index.js | 6 - .../utils/dist/ts-eslint/index.js.map | 2 +- .../@typescript-eslint/utils/package.json | 8 +- .../visitor-keys/package.json | 4 +- .../eslint-plugin-import/CHANGELOG.md | 68 +- .../eslint-plugin-import/CONTRIBUTING.md | 84 -- node_modules/eslint-plugin-import/README.md | 205 +++-- node_modules/eslint-plugin-import/RELEASE.md | 54 -- .../config/flat/errors.js | 14 + .../eslint-plugin-import/config/flat/react.js | 19 + .../config/flat/recommended.js | 26 + .../config/flat/warnings.js | 11 + .../eslint-plugin-import/config/react.js | 2 - .../eslint-plugin-import/config/typescript.js | 2 +- .../docs/rules/dynamic-import-chunkname.md | 44 +- .../docs/rules/no-empty-named-blocks.md | 2 +- .../docs/rules/no-extraneous-dependencies.md | 2 +- .../docs/rules/no-unused-modules.md | 15 +- .../eslint-plugin-import/docs/rules/order.md | 45 +- .../eslint-plugin-import/lib/ExportMap.js | 856 ------------------ .../eslint-plugin-import/lib/core/fsWalk.js | 49 + .../lib/core/importType.js | 19 +- .../lib/core/packagePath.js | 8 +- .../lib/exportMap/builder.js | 206 +++++ .../lib/exportMap/captureDependency.js | 61 ++ .../lib/exportMap/childContext.js | 33 + .../eslint-plugin-import/lib/exportMap/doc.js | 90 ++ .../lib/exportMap/index.js | 180 ++++ .../lib/exportMap/namespace.js | 39 + .../lib/exportMap/patternCapture.js | 41 + .../lib/exportMap/remotePath.js | 12 + .../lib/exportMap/specifier.js | 33 + .../lib/exportMap/typescript.js | 44 + .../lib/exportMap/visitor.js | 171 ++++ .../eslint-plugin-import/lib/index.js | 35 +- .../eslint-plugin-import/lib/rules/default.js | 6 +- .../lib/rules/dynamic-import-chunkname.js | 64 +- .../eslint-plugin-import/lib/rules/export.js | 9 +- .../eslint-plugin-import/lib/rules/named.js | 8 +- .../lib/rules/namespace.js | 13 +- .../lib/rules/newline-after-import.js | 22 +- .../lib/rules/no-cycle.js | 36 +- .../lib/rules/no-deprecated.js | 9 +- .../lib/rules/no-duplicates.js | 184 ++-- .../lib/rules/no-extraneous-dependencies.js | 19 +- .../lib/rules/no-named-as-default-member.js | 6 +- .../lib/rules/no-named-as-default.js | 6 +- .../lib/rules/no-namespace.js | 149 ++- .../lib/rules/no-restricted-paths.js | 20 +- .../lib/rules/no-unused-modules.js | 266 ++++-- .../eslint-plugin-import/lib/rules/order.js | 20 +- node_modules/eslint-plugin-import/lib/scc.js | 86 ++ .../eslint-plugin-import/package.json | 27 +- 123 files changed, 2837 insertions(+), 1680 deletions(-) create mode 100644 node_modules/@rtsao/scc/LICENSE create mode 100644 node_modules/@rtsao/scc/README.md create mode 100644 node_modules/@rtsao/scc/index.d.ts create mode 100644 node_modules/@rtsao/scc/index.js create mode 100644 node_modules/@rtsao/scc/index.js.flow create mode 100644 node_modules/@rtsao/scc/package.json delete mode 100644 node_modules/eslint-plugin-import/CONTRIBUTING.md delete mode 100644 node_modules/eslint-plugin-import/RELEASE.md create mode 100644 node_modules/eslint-plugin-import/config/flat/errors.js create mode 100644 node_modules/eslint-plugin-import/config/flat/react.js create mode 100644 node_modules/eslint-plugin-import/config/flat/recommended.js create mode 100644 node_modules/eslint-plugin-import/config/flat/warnings.js delete mode 100644 node_modules/eslint-plugin-import/lib/ExportMap.js create mode 100644 node_modules/eslint-plugin-import/lib/core/fsWalk.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/builder.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/childContext.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/doc.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/index.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/namespace.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/remotePath.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/specifier.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/typescript.js create mode 100644 node_modules/eslint-plugin-import/lib/exportMap/visitor.js create mode 100644 node_modules/eslint-plugin-import/lib/scc.js diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 69164651ba..210a5101e3 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -455,9 +455,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", + "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -803,6 +803,12 @@ "dev": true, "license": "0BSD" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -949,16 +955,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", - "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/type-utils": "8.6.0", - "@typescript-eslint/utils": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -982,15 +988,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", - "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4" }, "engines": { @@ -1010,13 +1016,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", - "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1027,13 +1033,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", - "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1051,9 +1057,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", - "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1064,13 +1070,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", - "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1116,15 +1122,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", - "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1138,12 +1144,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", - "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2766,27 +2772,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/node_modules/@eslint/js/package.json b/node_modules/@eslint/js/package.json index 9889d7a967..c1d7b3408d 100644 --- a/node_modules/@eslint/js/package.json +++ b/node_modules/@eslint/js/package.json @@ -1,6 +1,6 @@ { "name": "@eslint/js", - "version": "9.10.0", + "version": "9.11.0", "description": "ESLint JavaScript language implementation", "main": "./src/index.js", "scripts": {}, diff --git a/node_modules/@rtsao/scc/LICENSE b/node_modules/@rtsao/scc/LICENSE new file mode 100644 index 0000000000..a7cb450bed --- /dev/null +++ b/node_modules/@rtsao/scc/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Ryan Tsao + +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/@rtsao/scc/README.md b/node_modules/@rtsao/scc/README.md new file mode 100644 index 0000000000..4697edd2ef --- /dev/null +++ b/node_modules/@rtsao/scc/README.md @@ -0,0 +1,49 @@ +# `@rtsao/scc` + +Find strongly connected components of a directed graph using [Tarjan's algorithm](https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm). + +This algorithm efficiently yields both a topological order and list of any cycles. + +## Installation + +``` +yarn add @rtsao/scc +``` + +``` +npm install @rtsao/scc +``` + +## Usage + +```js +const scc = require("@rtsao/scc"); + +const digraph = new Map([ + ["a", new Set(["c", "d"])], + ["b", new Set(["a"])], + ["c", new Set(["b"])], + ["d", new Set(["e"])], + ["e", new Set()] +]); + +const components = scc(digraph); +// [ Set { 'e' }, Set { 'd' }, Set { 'b', 'c', 'a' } ] +``` + +#### Illustration of example input digraph +``` +┌───┐ ┌───┐ +│ d │ ◀── │ a │ ◀┐ +└───┘ └───┘ │ + │ │ │ + ▼ ▼ │ +┌───┐ ┌───┐ │ +│ e │ │ c │ │ +└───┘ └───┘ │ + │ │ + ▼ │ + ┌───┐ │ + │ b │ ─┘ + └───┘ +``` diff --git a/node_modules/@rtsao/scc/index.d.ts b/node_modules/@rtsao/scc/index.d.ts new file mode 100644 index 0000000000..ed46b8bc09 --- /dev/null +++ b/node_modules/@rtsao/scc/index.d.ts @@ -0,0 +1 @@ +export default function tarjan(graph: Map>): Array> diff --git a/node_modules/@rtsao/scc/index.js b/node_modules/@rtsao/scc/index.js new file mode 100644 index 0000000000..b7dd5bb479 --- /dev/null +++ b/node_modules/@rtsao/scc/index.js @@ -0,0 +1,51 @@ +"use strict"; + +module.exports = tarjan; + +// Adapted from https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm#The_algorithm_in_pseudocode + +function tarjan(graph) { + const indices = new Map(); + const lowlinks = new Map(); + const onStack = new Set(); + const stack = []; + const scc = []; + let idx = 0; + + function strongConnect(v) { + indices.set(v, idx); + lowlinks.set(v, idx); + idx++; + stack.push(v); + onStack.add(v); + + const deps = graph.get(v); + for (const dep of deps) { + if (!indices.has(dep)) { + strongConnect(dep); + lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(dep))); + } else if (onStack.has(dep)) { + lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(dep))); + } + } + + if (lowlinks.get(v) === indices.get(v)) { + const vertices = new Set(); + let w = null; + while (v !== w) { + w = stack.pop(); + onStack.delete(w); + vertices.add(w); + } + scc.push(vertices); + } + } + + for (const v of graph.keys()) { + if (!indices.has(v)) { + strongConnect(v); + } + } + + return scc; +} diff --git a/node_modules/@rtsao/scc/index.js.flow b/node_modules/@rtsao/scc/index.js.flow new file mode 100644 index 0000000000..479ff4ff6a --- /dev/null +++ b/node_modules/@rtsao/scc/index.js.flow @@ -0,0 +1,5 @@ +// @flow + +declare function tarjan(graph: Map>): Array>; + +declare module.exports: typeof tarjan; diff --git a/node_modules/@rtsao/scc/package.json b/node_modules/@rtsao/scc/package.json new file mode 100644 index 0000000000..67f67ccd99 --- /dev/null +++ b/node_modules/@rtsao/scc/package.json @@ -0,0 +1,7 @@ +{ + "name": "@rtsao/scc", + "version": "1.1.0", + "repository": "rtsao/scc", + "main": "index.js", + "license": "MIT" +} diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js index 2454cd8537..c8c0aef6ef 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js @@ -79,8 +79,7 @@ exports.default = (0, util_1.createRule)({ function excludeAssignedProperty(node) { if ((0, util_1.isAssignee)(node)) { const { excludeSet } = propertiesInfoStack[propertiesInfoStack.length - 1]; - const name = (0, util_1.getStaticStringValue)(node.property) ?? - context.sourceCode.getText(node.property); + const name = (0, util_1.getStaticMemberAccessValue)(node, context); if (name) { excludeSet.add(name); } diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map index ae7cc600f5..fa784ce947 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-literal-property-style.js.map @@ -1 +1 @@ -{"version":3,"file":"class-literal-property-style.js","sourceRoot":"","sources":["../../src/rules/class-literal-property-style.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"class-literal-property-style.js","sourceRoot":"","sources":["../../src/rules/class-literal-property-style.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js index 6d4a871cb4..acaa45fde2 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js @@ -121,7 +121,7 @@ exports.default = (0, util_1.createRule)({ } const hashIfNeeded = node.key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier ? '#' : ''; const name = (0, util_1.getStaticMemberAccessValue)(node, context); - return !exceptMethods.has(hashIfNeeded + (name ?? '')); + return (typeof name !== 'string' || !exceptMethods.has(hashIfNeeded + name)); } /** * Checks if we are leaving a function that is a method, and reports if 'this' has not been used. diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js.map index e57cd633eb..4ae7545c9f 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/class-methods-use-this.js.map @@ -1 +1 @@ -{"version":3,"file":"class-methods-use-this.js","sourceRoot":"","sources":["../../src/rules/class-methods-use-this.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"class-methods-use-this.js","sourceRoot":"","sources":["../../src/rules/class-methods-use-this.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js index c2e51761be..00596c2a04 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js @@ -1,7 +1,31 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@typescript-eslint/utils"); -const typescript_1 = require("typescript"); +const tsutils = __importStar(require("ts-api-utils")); +const ts = __importStar(require("typescript")); const util_1 = require("../util"); exports.default = (0, util_1.createRule)({ name: 'consistent-type-exports', @@ -38,27 +62,79 @@ exports.default = (0, util_1.createRule)({ create(context, [{ fixMixedExportsWithInlineTypeSpecifier }]) { const sourceExportsMap = {}; const services = (0, util_1.getParserServices)(context); + const checker = services.program.getTypeChecker(); /** - * Helper for identifying if an export specifier resolves to a + * Helper for identifying if a symbol resolves to a * JavaScript value or a TypeScript type. * * @returns True/false if is a type or not, or undefined if the specifier * can't be resolved. */ - function isSpecifierTypeBased(specifier) { - const checker = services.program.getTypeChecker(); - const symbol = services.getSymbolAtLocation(specifier.exported); + function isSymbolTypeBased(symbol) { if (!symbol) { return undefined; } - const aliasedSymbol = checker.getAliasedSymbol(symbol); - // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison - if (aliasedSymbol.escapedName === 'unknown') { + const aliasedSymbol = tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias) + ? checker.getAliasedSymbol(symbol) + : symbol; + if (checker.isUnknownSymbol(aliasedSymbol)) { return undefined; } - return !(aliasedSymbol.flags & typescript_1.SymbolFlags.Value); + return !(aliasedSymbol.flags & ts.SymbolFlags.Value); } return { + ExportAllDeclaration(node) { + if (node.exportKind === 'type') { + return; + } + const sourceModule = ts.resolveModuleName(node.source.value, context.filename, services.program.getCompilerOptions(), ts.sys); + if (sourceModule.resolvedModule == null) { + return; + } + const sourceFile = services.program.getSourceFile(sourceModule.resolvedModule.resolvedFileName); + if (sourceFile == null) { + return; + } + const sourceFileSymbol = checker.getSymbolAtLocation(sourceFile); + if (sourceFileSymbol == null) { + return; + } + const sourceFileType = checker.getTypeOfSymbol(sourceFileSymbol); + // Module can explicitly export types or values, and it's not difficult + // to distinguish one from the other, since we can get the flags of + // the exported symbols or check if symbol export declaration has + // the "type" keyword in it. + // + // Things get a lot more complicated when we're dealing with + // export * from './module-with-type-only-exports' + // export type * from './module-with-type-and-value-exports' + // + // TS checker has an internal function getExportsOfModuleWorker that + // recursively visits all module exports, including "export *". It then + // puts type-only-star-exported symbols into the typeOnlyExportStarMap + // property of sourceFile's SymbolLinks. Since symbol links aren't + // exposed outside the checker, we cannot access it directly. + // + // Therefore, to filter out value properties, we use the following hack: + // checker.getPropertiesOfType returns all exports that were originally + // values, but checker.getPropertyOfType returns undefined for + // properties that are mentioned in the typeOnlyExportStarMap. + const isThereAnyExportedValue = checker + .getPropertiesOfType(sourceFileType) + .some(propertyTypeSymbol => checker.getPropertyOfType(sourceFileType, propertyTypeSymbol.escapedName.toString()) != null); + if (isThereAnyExportedValue) { + return; + } + context.report({ + node, + messageId: 'typeOverValue', + fix(fixer) { + const asteriskToken = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(node, token => token.type === utils_1.AST_TOKEN_TYPES.Punctuator && + token.value === '*'), util_1.NullThrowsReasons.MissingToken('asterisk', 'export all declaration')); + return fixer.insertTextBefore(asteriskToken, 'type '); + }, + }); + }, ExportNamedDeclaration(node) { // Coerce the source into a string for use as a lookup entry. const source = getSourceFromExport(node) ?? 'undefined'; @@ -93,7 +169,7 @@ exports.default = (0, util_1.createRule)({ inlineTypeSpecifiers.push(specifier); continue; } - const isTypeBased = isSpecifierTypeBased(specifier); + const isTypeBased = isSymbolTypeBased(services.getSymbolAtLocation(specifier.exported)); if (isTypeBased === true) { typeBasedSpecifiers.push(specifier); } diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js.map index 9746678775..9d6d7551dd 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/consistent-type-exports.js.map @@ -1 +1 @@ -{"version":3,"file":"consistent-type-exports.js","sourceRoot":"","sources":["../../src/rules/consistent-type-exports.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"consistent-type-exports.js","sourceRoot":"","sources":["../../src/rules/consistent-type-exports.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js index 36aa124d0c..7fd6f8265e 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js @@ -2,6 +2,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@typescript-eslint/utils"); const util_1 = require("../util"); +const confusingOperators = new Set([ + '=', + '==', + '===', + 'in', + 'instanceof', +]); +function isConfusingOperator(operator) { + return confusingOperators.has(operator); +} exports.default = (0, util_1.createRule)({ name: 'no-confusing-non-null-assertion', meta: { @@ -12,57 +22,108 @@ exports.default = (0, util_1.createRule)({ }, hasSuggestions: true, messages: { - confusingEqual: 'Confusing combinations of non-null assertion and equal test like "a! == b", which looks very similar to not equal "a !== b".', - confusingAssign: 'Confusing combinations of non-null assertion and equal test like "a! = b", which looks very similar to not equal "a != b".', - notNeedInEqualTest: 'Unnecessary non-null assertion (!) in equal test.', - notNeedInAssign: 'Unnecessary non-null assertion (!) in assignment left hand.', - wrapUpLeft: 'Wrap up left hand to avoid putting non-null assertion "!" and "=" together.', + confusingEqual: 'Confusing combination of non-null assertion and equality test like `a! == b`, which looks very similar to `a !== b`.', + confusingAssign: 'Confusing combination of non-null assertion and assignment like `a! = b`, which looks very similar to `a != b`.', + confusingOperator: 'Confusing combination of non-null assertion and `{{operator}}` operator like `a! {{operator}} b`, which might be misinterpreted as `!(a {{operator}} b)`.', + notNeedInEqualTest: 'Remove unnecessary non-null assertion (!) in equality test.', + notNeedInAssign: 'Remove unnecessary non-null assertion (!) in assignment left-hand side.', + notNeedInOperator: 'Remove possibly unnecessary non-null assertion (!) in the left operand of the `{{operator}}` operator.', + wrapUpLeft: 'Wrap the left-hand side in parentheses to avoid confusion with "{{operator}}" operator.', }, schema: [], }, defaultOptions: [], create(context) { + function confusingOperatorToMessageData(operator) { + switch (operator) { + case '=': + return { + messageId: 'confusingAssign', + }; + case '==': + case '===': + return { + messageId: 'confusingEqual', + }; + case 'in': + case 'instanceof': + return { + messageId: 'confusingOperator', + data: { operator }, + }; + // istanbul ignore next + default: + operator; + throw new Error(`Unexpected operator ${operator}`); + } + } return { 'BinaryExpression, AssignmentExpression'(node) { - function isLeftHandPrimaryExpression(node) { - return node.type === utils_1.AST_NODE_TYPES.TSNonNullExpression; - } - if (node.operator === '==' || - node.operator === '===' || - node.operator === '=') { - const isAssign = node.operator === '='; + const operator = node.operator; + if (isConfusingOperator(operator)) { + // Look for a non-null assertion as the last token on the left hand side. + // That way, we catch things like `1 + two! === 3`, even though the left + // hand side isn't a non-null assertion AST node. const leftHandFinalToken = context.sourceCode.getLastToken(node.left); const tokenAfterLeft = context.sourceCode.getTokenAfter(node.left); if (leftHandFinalToken?.type === utils_1.AST_TOKEN_TYPES.Punctuator && leftHandFinalToken.value === '!' && tokenAfterLeft?.value !== ')') { - if (isLeftHandPrimaryExpression(node.left)) { + if (node.left.type === utils_1.AST_NODE_TYPES.TSNonNullExpression) { + let suggestions; + switch (operator) { + case '=': + suggestions = [ + { + messageId: 'notNeedInAssign', + fix: (fixer) => fixer.remove(leftHandFinalToken), + }, + ]; + break; + case '==': + case '===': + suggestions = [ + { + messageId: 'notNeedInEqualTest', + fix: (fixer) => fixer.remove(leftHandFinalToken), + }, + ]; + break; + case 'in': + case 'instanceof': + suggestions = [ + { + messageId: 'notNeedInOperator', + data: { operator }, + fix: (fixer) => fixer.remove(leftHandFinalToken), + }, + { + messageId: 'wrapUpLeft', + data: { operator }, + fix: wrapUpLeftFixer(node), + }, + ]; + break; + // istanbul ignore next + default: + operator; + return; + } context.report({ node, - messageId: isAssign ? 'confusingAssign' : 'confusingEqual', - suggest: [ - { - messageId: isAssign - ? 'notNeedInAssign' - : 'notNeedInEqualTest', - fix: (fixer) => [ - fixer.remove(leftHandFinalToken), - ], - }, - ], + ...confusingOperatorToMessageData(operator), + suggest: suggestions, }); } else { context.report({ node, - messageId: isAssign ? 'confusingAssign' : 'confusingEqual', + ...confusingOperatorToMessageData(operator), suggest: [ { messageId: 'wrapUpLeft', - fix: (fixer) => [ - fixer.insertTextBefore(node.left, '('), - fixer.insertTextAfter(node.left, ')'), - ], + data: { operator }, + fix: wrapUpLeftFixer(node), }, ], }); @@ -73,4 +134,10 @@ exports.default = (0, util_1.createRule)({ }; }, }); +function wrapUpLeftFixer(node) { + return (fixer) => [ + fixer.insertTextBefore(node.left, '('), + fixer.insertTextAfter(node.left, ')'), + ]; +} //# sourceMappingURL=no-confusing-non-null-assertion.js.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map index f3289d2cce..9eb5f8adbb 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-confusing-non-null-assertion.js.map @@ -1 +1 @@ -{"version":3,"file":"no-confusing-non-null-assertion.js","sourceRoot":"","sources":["../../src/rules/no-confusing-non-null-assertion.ts"],"names":[],"mappings":";;AACA,oDAA2E;AAE3E,kCAAqC;AAErC,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,gEAAgE;YAClE,WAAW,EAAE,WAAW;SACzB;QACD,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE;YACR,cAAc,EACZ,8HAA8H;YAChI,eAAe,EACb,4HAA4H;YAC9H,kBAAkB,EAAE,mDAAmD;YACvE,eAAe,EACb,6DAA6D;YAC/D,UAAU,EACR,6EAA6E;SAChF;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,wCAAwC,CACtC,IAA+D;gBAE/D,SAAS,2BAA2B,CAClC,IAAsD;oBAEtD,OAAO,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,mBAAmB,CAAC;gBAC1D,CAAC;gBAED,IACE,IAAI,CAAC,QAAQ,KAAK,IAAI;oBACtB,IAAI,CAAC,QAAQ,KAAK,KAAK;oBACvB,IAAI,CAAC,QAAQ,KAAK,GAAG,EACrB,CAAC;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;oBACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnE,IACE,kBAAkB,EAAE,IAAI,KAAK,uBAAe,CAAC,UAAU;wBACvD,kBAAkB,CAAC,KAAK,KAAK,GAAG;wBAChC,cAAc,EAAE,KAAK,KAAK,GAAG,EAC7B,CAAC;wBACD,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC3C,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;gCACJ,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;gCAC1D,OAAO,EAAE;oCACP;wCACE,SAAS,EAAE,QAAQ;4CACjB,CAAC,CAAC,iBAAiB;4CACnB,CAAC,CAAC,oBAAoB;wCACxB,GAAG,EAAE,CAAC,KAAK,EAAsB,EAAE,CAAC;4CAClC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;yCACjC;qCACF;iCACF;6BACF,CAAC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI;gCACJ,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;gCAC1D,OAAO,EAAE;oCACP;wCACE,SAAS,EAAE,YAAY;wCACvB,GAAG,EAAE,CAAC,KAAK,EAAsB,EAAE,CAAC;4CAClC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4CACtC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;yCACtC;qCACF;iCACF;6BACF,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"no-confusing-non-null-assertion.js","sourceRoot":"","sources":["../../src/rules/no-confusing-non-null-assertion.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js index a5c873ebfa..24279626d1 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js @@ -50,6 +50,37 @@ exports.default = (0, util_1.createRule)({ } const services = (0, util_1.getParserServices)(context); const checker = services.program.getTypeChecker(); + // Deprecated jsdoc tags can be added on some symbol alias, e.g. + // + // export { /** @deprecated */ foo } + // + // When we import foo, its symbol is an alias of the exported foo (the one + // with the deprecated tag), which is itself an alias of the original foo. + // Therefore, we carefully go through the chain of aliases and check each + // immediate alias for deprecated tags + function searchForDeprecationInAliasesChain(symbol, checkDeprecationsOfAliasedSymbol) { + if (!symbol || !tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias)) { + return checkDeprecationsOfAliasedSymbol + ? getJsDocDeprecation(symbol) + : undefined; + } + const targetSymbol = checker.getAliasedSymbol(symbol); + while (tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias)) { + const reason = getJsDocDeprecation(symbol); + if (reason !== undefined) { + return reason; + } + const immediateAliasedSymbol = symbol.getDeclarations() && checker.getImmediateAliasedSymbol(symbol); + if (!immediateAliasedSymbol) { + break; + } + symbol = immediateAliasedSymbol; + if (checkDeprecationsOfAliasedSymbol && symbol === targetSymbol) { + return getJsDocDeprecation(symbol); + } + } + return undefined; + } function isDeclaration(node) { const { parent } = node; switch (parent.type) { @@ -149,48 +180,63 @@ exports.default = (0, util_1.createRule)({ function getCallLikeDeprecation(node) { const tsNode = services.esTreeNodeToTSNodeMap.get(node.parent); // If the node is a direct function call, we look for its signature. - const signature = checker.getResolvedSignature(tsNode); + const signature = (0, util_1.nullThrows)(checker.getResolvedSignature(tsNode), 'Expected call like node to have signature'); const symbol = services.getSymbolAtLocation(node); - if (signature) { - const signatureDeprecation = getJsDocDeprecation(signature); - if (signatureDeprecation !== undefined) { - return signatureDeprecation; - } - // Properties with function-like types have "deprecated" jsdoc - // on their symbols, not on their signatures: - // - // interface Props { - // /** @deprecated */ - // property: () => 'foo' - // ^symbol^ ^signature^ - // } - const symbolDeclarationKind = symbol?.declarations?.[0].kind; - if (symbolDeclarationKind !== ts.SyntaxKind.MethodDeclaration && - symbolDeclarationKind !== ts.SyntaxKind.FunctionDeclaration && - symbolDeclarationKind !== ts.SyntaxKind.MethodSignature) { - return getJsDocDeprecation(symbol); - } - } - // Or it could be a ClassDeclaration or a variable set to a ClassExpression. - const symbolAtLocation = symbol && checker.getTypeOfSymbolAtLocation(symbol, tsNode).getSymbol(); - return symbolAtLocation && - tsutils.isSymbolFlagSet(symbolAtLocation, ts.SymbolFlags.Class) - ? getJsDocDeprecation(symbolAtLocation) - : undefined; - } - function getSymbol(node) { - if (node.parent.type === utils_1.AST_NODE_TYPES.Property) { - return services - .getTypeAtLocation(node.parent.parent) - .getProperty(node.name); + const aliasedSymbol = symbol !== undefined && + tsutils.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias) + ? checker.getAliasedSymbol(symbol) + : symbol; + const symbolDeclarationKind = aliasedSymbol?.declarations?.[0].kind; + // Properties with function-like types have "deprecated" jsdoc + // on their symbols, not on their signatures: + // + // interface Props { + // /** @deprecated */ + // property: () => 'foo' + // ^symbol^ ^signature^ + // } + if (symbolDeclarationKind !== ts.SyntaxKind.MethodDeclaration && + symbolDeclarationKind !== ts.SyntaxKind.FunctionDeclaration && + symbolDeclarationKind !== ts.SyntaxKind.MethodSignature) { + return (searchForDeprecationInAliasesChain(symbol, true) ?? + getJsDocDeprecation(signature) ?? + getJsDocDeprecation(aliasedSymbol)); } - return services.getSymbolAtLocation(node); + return (searchForDeprecationInAliasesChain(symbol, + // Here we're working with a function declaration or method. + // Both can have 1 or more overloads, each overload creates one + // ts.Declaration which is placed in symbol.declarations. + // + // Imagine the following code: + // + // function foo(): void + // /** @deprecated Some Reason */ + // function foo(arg: string): void + // function foo(arg?: string): void {} + // + // foo() // <- foo is our symbol + // + // If we call getJsDocDeprecation(checker.getAliasedSymbol(symbol)), + // we get 'Some Reason', but after all, we are calling foo with + // a signature that is not deprecated! + // It works this way because symbol.getJsDocTags returns tags from + // all symbol declarations combined into one array. And AFAIK there is + // no publicly exported TS function that can tell us if a particular + // declaration is deprecated or not. + // + // So, in case of function and method declarations, we don't check original + // aliased symbol, but rely on the getJsDocDeprecation(signature) call below. + false) ?? getJsDocDeprecation(signature)); } function getDeprecationReason(node) { const callLikeNode = getCallLikeNode(node); - return callLikeNode - ? getCallLikeDeprecation(callLikeNode) - : getJsDocDeprecation(getSymbol(node)); + if (callLikeNode) { + return getCallLikeDeprecation(callLikeNode); + } + if (node.parent.type === utils_1.AST_NODE_TYPES.Property) { + return getJsDocDeprecation(services.getTypeAtLocation(node.parent.parent).getProperty(node.name)); + } + return searchForDeprecationInAliasesChain(services.getSymbolAtLocation(node), true); } function checkIdentifier(node) { if (isDeclaration(node) || isInsideExportOrImport(node)) { diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js.map index d8978b7b69..371b2e6bf1 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-deprecated.js.map @@ -1 +1 @@ -{"version":3,"file":"no-deprecated.js","sourceRoot":"","sources":["../../src/rules/no-deprecated.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"no-deprecated.js","sourceRoot":"","sources":["../../src/rules/no-deprecated.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js index 582a32e4e7..39e0bd9a69 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js @@ -35,13 +35,13 @@ exports.default = (0, util_1.createRule)({ requiresTypeChecking: true, }, messages: { - unsafeCall: 'Unsafe call of an {{type}} typed value.', + unsafeCall: 'Unsafe call of a(n) {{type}} typed value.', unsafeCallThis: [ - 'Unsafe call of an `any` typed value. `this` is typed as `any`.', + 'Unsafe call of a(n) {{type}} typed value. `this` is typed as {{type}}.', 'You can try to fix this by turning on the `noImplicitThis` compiler option, or adding a `this` parameter to the function.', ].join('\n'), - unsafeNew: 'Unsafe construction of an any type value.', - unsafeTemplateTag: 'Unsafe any typed template tag.', + unsafeNew: 'Unsafe construction of a(n) {{type}} typed value.', + unsafeTemplateTag: 'Unsafe use of a(n) {{type}} typed template tag.', }, schema: [], }, @@ -69,6 +69,41 @@ exports.default = (0, util_1.createRule)({ type: isErrorType ? '`error` type' : '`any`', }, }); + return; + } + if ((0, util_1.isBuiltinSymbolLike)(services.program, type, 'Function')) { + // this also matches subtypes of `Function`, like `interface Foo extends Function {}`. + // + // For weird TS reasons that I don't understand, these are + // + // safe to construct if: + // - they have at least one call signature _that is not void-returning_, + // - OR they have at least one construct signature. + // + // safe to call (including as template) if: + // - they have at least one call signature + // - OR they have at least one construct signature. + const constructSignatures = type.getConstructSignatures(); + if (constructSignatures.length > 0) { + return; + } + const callSignatures = type.getCallSignatures(); + if (messageId === 'unsafeNew') { + if (callSignatures.some(signature => !tsutils.isIntrinsicVoidType(signature.getReturnType()))) { + return; + } + } + else if (callSignatures.length > 0) { + return; + } + context.report({ + node: reportingNode, + messageId, + data: { + type: '`Function`', + }, + }); + return; } } return { diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map index 3330f72f25..162bf50714 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/rules/no-unsafe-call.js.map @@ -1 +1 @@ -{"version":3,"file":"no-unsafe-call.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-call.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,sDAAwC;AAExC,kCAMiB;AAQjB,kBAAe,IAAA,iBAAU,EAAiB;IACxC,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,0CAA0C;YACvD,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,yCAAyC;YACrD,cAAc,EAAE;gBACd,gEAAgE;gBAChE,2HAA2H;aAC5H,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,2CAA2C;YACtD,iBAAiB,EAAE,gCAAgC;SACpD;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAC5D,eAAe,EACf,gBAAgB,CACjB,CAAC;QAEF,SAAS,SAAS,CAChB,IAAmB,EACnB,aAA4B,EAC5B,SAAqB;YAErB,MAAM,IAAI,GAAG,IAAA,mCAA4B,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAE1D,IAAI,IAAA,oBAAa,EAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,gDAAgD;oBAChD,MAAM,cAAc,GAAG,IAAA,wBAAiB,EAAC,IAAI,CAAC,CAAC;oBAC/C,IACE,cAAc;wBACd,IAAA,oBAAa,EACX,IAAA,mCAA4B,EAAC,QAAQ,EAAE,cAAc,CAAC,CACvD,EACD,CAAC;wBACD,SAAS,GAAG,gBAAgB,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBAED,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAEvD,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,aAAa;oBACnB,SAAS;oBACT,IAAI,EAAE;wBACJ,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO;qBAC7C;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,2BAA2B,CACzB,IAAuC;gBAEvC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACtC,CAAC;YACD,aAAa,CAAC,IAAI;gBAChB,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5C,CAAC;YACD,kCAAkC,CAAC,IAAmB;gBACpD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;YAC7C,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"no-unsafe-call.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-call.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js b/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js index 5e99ebb665..f243f81ffa 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js @@ -34,7 +34,6 @@ __exportStar(require("./misc"), exports); __exportStar(require("./needsPrecedingSemiColon"), exports); __exportStar(require("./objectIterators"), exports); __exportStar(require("./scopeUtils"), exports); -__exportStar(require("./types"), exports); __exportStar(require("./isAssignee"), exports); __exportStar(require("./getFixOrSuggest"), exports); __exportStar(require("./isArrayMethodCallWithPredicate"), exports); diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map index 7989a0028f..69ef15f9ca 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC;AACvC,oDAAkC;AAClC,2DAAyC;AACzC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,iEAA+C;AAC/C,0DAAwC;AACxC,yCAAuB;AACvB,4DAA0C;AAC1C,oDAAkC;AAClC,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B;AAC7B,oDAAkC;AAClC,mEAAiD;AAEjD,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC;AACvC,oDAAkC;AAClC,2DAAyC;AACzC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,iEAA+C;AAC/C,0DAAwC;AACxC,yCAAuB;AACvB,4DAA0C;AAC1C,oDAAkC;AAClC,+CAA6B;AAE7B,+CAA6B;AAC7B,oDAAkC;AAClC,mEAAiD;AAEjD,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js b/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js index eba71334f1..73a4044660 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js @@ -42,7 +42,7 @@ function isArrayMethodCallWithPredicate(context, services, node) { return false; } const staticAccessValue = (0, misc_1.getStaticMemberAccessValue)(node.callee, context); - if (!staticAccessValue || !ARRAY_PREDICATE_FUNCTIONS.has(staticAccessValue)) { + if (!ARRAY_PREDICATE_FUNCTIONS.has(staticAccessValue)) { return false; } const checker = services.program.getTypeChecker(); diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js.map index e4cf5b0144..81123b4397 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/isArrayMethodCallWithPredicate.js.map @@ -1 +1 @@ -{"version":3,"file":"isArrayMethodCallWithPredicate.js","sourceRoot":"","sources":["../../src/util/isArrayMethodCallWithPredicate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,wEAqBC;AA1CD,8DAA6E;AAK7E,oDAA0D;AAE1D,sDAAwC;AAExC,iCAAoD;AAEpD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,QAAQ;IACR,MAAM;IACN,WAAW;IACX,UAAU;IACV,eAAe;IACf,MAAM;IACN,OAAO;CACR,CAAC,CAAC;AAEH,SAAgB,8BAA8B,CAC5C,OAAuC,EACvC,QAA2C,EAC3C,IAA6B;IAE7B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAA,iCAA0B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3E,IAAI,CAAC,iBAAiB,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,IAAA,yCAA4B,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxE,OAAO,OAAO;SACX,cAAc,CAAC,IAAI,CAAC;SACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"} \ No newline at end of file +{"version":3,"file":"isArrayMethodCallWithPredicate.js","sourceRoot":"","sources":["../../src/util/isArrayMethodCallWithPredicate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,wEAqBC;AA1CD,8DAA6E;AAK7E,oDAA0D;AAE1D,sDAAwC;AAExC,iCAAoD;AAEpD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAU;IACjD,QAAQ;IACR,MAAM;IACN,WAAW;IACX,UAAU;IACV,eAAe;IACf,MAAM;IACN,OAAO;CACR,CAAC,CAAC;AAEH,SAAgB,8BAA8B,CAC5C,OAAuC,EACvC,QAA2C,EAC3C,IAA6B;IAE7B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAA,iCAA0B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3E,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,IAAA,yCAA4B,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxE,OAAO,OAAO;SACX,cAAc,CAAC,IAAI,CAAC;SACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js b/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js index 4b4d937ee0..6bba9e5850 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js @@ -196,20 +196,70 @@ function isRestParameterDeclaration(decl) { function isParenlessArrowFunction(node, sourceCode) { return (node.params.length === 1 && !(0, astUtils_1.isParenthesized)(node.params[0], sourceCode)); } +/** + * Gets a member being accessed or declared if its value can be determined statically, and + * resolves it to the string or symbol value that will be used as the actual member + * access key at runtime. Otherwise, returns `undefined`. + * + * ```ts + * x.member // returns 'member' + * ^^^^^^^^ + * + * x?.member // returns 'member' (optional chaining is treated the same) + * ^^^^^^^^^ + * + * x['value'] // returns 'value' + * ^^^^^^^^^^ + * + * x[Math.random()] // returns undefined (not a static value) + * ^^^^^^^^^^^^^^^^ + * + * arr[0] // returns '0' (NOT 0) + * ^^^^^^ + * + * arr[0n] // returns '0' (NOT 0n) + * ^^^^^^^ + * + * const s = Symbol.for('symbolName') + * x[s] // returns `Symbol.for('symbolName')` (since it's a static/global symbol) + * ^^^^ + * + * const us = Symbol('symbolName') + * x[us] // returns undefined (since it's a unique symbol, so not statically analyzable) + * ^^^^^ + * + * var object = { + * 1234: '4567', // returns '1234' (NOT 1234) + * ^^^^^^^^^^^^ + * method() { } // returns 'method' + * ^^^^^^^^^^^^ + * } + * + * class WithMembers { + * foo: string // returns 'foo' + * ^^^^^^^^^^^ + * } + * ``` + */ function getStaticMemberAccessValue(node, { sourceCode }) { const key = node.type === utils_1.AST_NODE_TYPES.MemberExpression ? node.property : node.key; - if (!node.computed) { - return key.type === utils_1.AST_NODE_TYPES.Literal - ? `${key.value}` - : key.name; + const { type } = key; + if (!node.computed && + (type === utils_1.AST_NODE_TYPES.Identifier || + type === utils_1.AST_NODE_TYPES.PrivateIdentifier)) { + return key.name; + } + const result = (0, astUtils_1.getStaticValue)(key, sourceCode.getScope(node)); + if (!result) { + return undefined; } - const value = (0, astUtils_1.getStaticValue)(key, sourceCode.getScope(node))?.value; - return value == null ? undefined : `${value}`; + const { value } = result; + return typeof value === 'symbol' ? value : String(value); } /** * Answers whether the member expression looks like - * `x.memberName`, `x['memberName']`, - * or even `const mn = 'memberName'; x[mn]` (or optional variants thereof). + * `x.value`, `x['value']`, + * or even `const v = 'value'; x[v]` (or optional variants thereof). */ const isStaticMemberAccessOfValue = (memberExpression, context, ...values) => values.includes(getStaticMemberAccessValue(memberExpression, context)); exports.isStaticMemberAccessOfValue = isStaticMemberAccessOfValue; diff --git a/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map b/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map index 536a459a22..bc8af5e8c0 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map +++ b/node_modules/@typescript-eslint/eslint-plugin/dist/util/misc.js.map @@ -1 +1 @@ -{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/util/misc.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/util/misc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.mdx index 0ff48e14c9..01a47a9dde 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-confusing-non-null-assertion.mdx @@ -9,14 +9,27 @@ import TabItem from '@theme/TabItem'; > > See **https://typescript-eslint.io/rules/no-confusing-non-null-assertion** for documentation. -Using a non-null assertion (`!`) next to an assign or equals check (`=` or `==` or `===`) creates code that is confusing as it looks similar to a not equals check (`!=` `!==`). +Using a non-null assertion (`!`) next to an assignment or equality check (`=` or `==` or `===`) creates code that is confusing as it looks similar to an inequality check (`!=` `!==`). ```typescript -a! == b; // a non-null assertions(`!`) and an equals test(`==`) +a! == b; // a non-null assertion(`!`) and an equals test(`==`) a !== b; // not equals test(`!==`) -a! === b; // a non-null assertions(`!`) and an triple equals test(`===`) +a! === b; // a non-null assertion(`!`) and a triple equals test(`===`) ``` +Using a non-null assertion (`!`) next to an in test (`in`) or an instanceof test (`instanceof`) creates code that is confusing since it may look like the operator is negated, but it is actually not. + +{/* prettier-ignore */} +```typescript +a! in b; // a non-null assertion(`!`) and an in test(`in`) +a !in b; // also a non-null assertion(`!`) and an in test(`in`) +!(a in b); // a negated in test + +a! instanceof b; // a non-null assertion(`!`) and an instanceof test(`instanceof`) +a !instanceof b; // also a non-null assertion(`!`) and an instanceof test(`instanceof`) +!(a instanceof b); // a negated instanceof test +```` + This rule flags confusing `!` assertions and suggests either removing them or wrapping the asserted expression in `()` parenthesis. ## Examples diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.mdx index 00deb4edc9..355fe6aeb1 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-floating-promises.mdx @@ -12,14 +12,13 @@ import TabItem from '@theme/TabItem'; A "floating" Promise is one that is created without any code set up to handle any errors it might throw. Floating Promises can cause several issues, such as improperly sequenced operations, ignored Promise rejections, and more. -This rule reports when a Promise is created and not properly handled. -Valid ways of handling a Promise-valued statement include: +This rule will report Promise-valued statements that are not treated in one of the following ways: -- `await`ing it -- `return`ing it -- `void`ing it - Calling its `.then()` with two arguments - Calling its `.catch()` with one argument +- `await`ing it +- `return`ing it +- [`void`ing it](#ignorevoid) This rule also reports when an Array containing Promises is created and not properly handled. The main way to resolve this is by using one of the Promise concurrency methods to create a single Promise, then handling that according to the procedure above. These methods include: @@ -29,8 +28,10 @@ This rule also reports when an Array containing Promises is created and not prop - `Promise.race()` :::tip -`no-floating-promises` only detects unhandled Promise _statements_. +`no-floating-promises` only detects apparently unhandled Promise _statements_. See [`no-misused-promises`](./no-misused-promises.mdx) for detecting code that provides Promises to _logical_ locations such as if statements. + +See [_Using promises (error handling) on MDN_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#error_handling) for a detailed writeup on Promise error-handling. ::: ## Examples @@ -134,6 +135,12 @@ await createMyThenable(); This option, which is `true` by default, allows you to stop the rule reporting promises consumed with the [`void` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void). This can be a good way to explicitly mark a promise as intentionally not awaited. +:::warning +Voiding a Promise doesn't handle it or change the runtime behavior. +The outcome is just ignored, like disabling the rule with an [ESLint disable comment](https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1). +Such Promise rejections will still be unhandled. +::: + Examples of **correct** code for this rule with `{ ignoreVoid: true }`: ```ts option='{ "ignoreVoid": true }' showPlaygroundButton diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.mdx index 0cf7caa4d7..1bddfeb3c2 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-inferrable-types.mdx @@ -106,6 +106,8 @@ class Foo { If you strongly prefer to have explicit types regardless of whether they can be inferred, this rule may not be for you. +If you use the `--isolatedDeclarations` compiler option, this rule is incompatible. + ## Further Reading - [TypeScript Inference](https://www.typescriptlang.org/docs/handbook/type-inference.html) diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-parameters.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-parameters.mdx index a11969f58f..c27da7616a 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-parameters.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unnecessary-type-parameters.mdx @@ -19,7 +19,7 @@ At best unnecessary type parameters make code harder to read. At worst they can be used to disguise unsafe type assertions. :::warning -This rule was recently added, and has a surprising amount of hidden complexity compared to most of our rules. If you encounter unexpected behavior with it, please check closely the [Limitations](#limitations) section below and our [issue tracker](https://github.com/typescript-eslint/typescript-eslint/issues?q=is%3Aissue+no-unnecessary-type-parameters). +This rule was recently added, and has a surprising amount of hidden complexity compared to most of our rules. If you encounter unexpected behavior with it, please check closely the [Limitations](#limitations) and [FAQ](#faq) sections below and our [issue tracker](https://github.com/typescript-eslint/typescript-eslint/issues?q=is%3Aissue+no-unnecessary-type-parameters). If you don't see your case covered, please [reach out to us](https://typescript-eslint.io/contributing/issues)! ::: @@ -87,6 +87,127 @@ This is because the type parameter `T` relates multiple methods in the `T[]` tog Therefore, this rule won't report on type parameters used as a type argument. That includes type arguments given to global types such as `Array` (including the `T[]` shorthand and in tuples), `Map`, and `Set`. +## FAQ + +### The return type is only used as an input, so why isn't the rule reporting? + +One common reason that this might be the case is when the return type is not specified explicitly. +The rule uses uses type information to count implicit usages of the type parameter in the function signature, including in the inferred return type. +For example, the following function... + +```ts +function identity(arg: T) { + return arg; +} +``` + +...implicitly has a return type of `T`. Therefore, the type parameter `T` is used twice, and the rule will not report this function. + +For other reasons the rule might not be reporting, be sure to check the [Limitations section](#limitations) and other FAQs. + +### I'm using the type parameter inside the function, so why is the rule reporting? + +You might be surprised to that the rule reports on a function like this: + +```ts +function log(string1: T): void { + const string2: T = string1; + console.log(string2); +} +``` + +After all, the type parameter `T` relates the input `string1` and the local variable `string2`, right? +However, this usage is unnecessary, since we can achieve the same results by replacing all usages of the type parameter with its constraint. +That is to say, the function can always be rewritten as: + +```ts +function log(string1: string): void { + const string2: string = string1; + console.log(string2); +} +``` + +Therefore, this rule only counts usages of a type parameter in the _signature_ of a function, method, or class, but not in the implementation. See also [#9735](https://github.com/typescript-eslint/typescript-eslint/issues/9735) + +### Why am I getting TypeScript errors saying "Object literal may only specify known properties" after removing an unnecessary type parameter? + +Suppose you have a situation like the following, which will trigger the rule to report. + +```ts +interface SomeProperties { + foo: string; +} + +// T is only used once, so the rule will report. +function serialize(x: T): string { + return JSON.stringify(x); +} + +serialize({ foo: 'bar', anotherProperty: 'baz' }); +``` + +If we remove the unnecessary type parameter, we'll get an error: + +```ts +function serialize(x: SomeProperties): string { + return JSON.stringify(x); +} + +// TS Error: Object literal may only specify known properties, and 'anotherProperty' does not exist in type 'SomeProperties'. +serialize({ foo: 'bar', anotherProperty: 'baz' }); +``` + +This is because TypeScript figures it's _usually_ an error to explicitly provide excess properties in a location that expects a specific type. +See [the TypeScript handbook's section on excess property checks](https://www.typescriptlang.org/docs/handbook/2/objects.html#excess-property-checks) for further discussion. + +To resolve this, you have two approaches to choose from. + +1. If it doesn't make sense to accept excess properties in your function, you'll want to fix the errors at the call sites. Usually, you can simply remove any excess properties where the function is called. +2. Otherwise, if you do want your function to accept excess properties, you can modify the parameter type in order to allow excess properties explicitly by using an [index signature](https://www.typescriptlang.org/docs/handbook/2/objects.html#index-signatures): + + ```ts + interface SomeProperties { + foo: string; + + // This allows any other properties. + // You may wish to make these types more specific according to your use case. + [key: PropertKey]: unknown; + } + + function serialize(x: SomeProperties): string { + return JSON.stringify(x); + } + + // No error! + serialize({ foo: 'bar', anotherProperty: 'baz' }); + ``` + +Which solution is appropriate is a case-by-case decision, depending on the intended use case of your function. + +### I have a complex scenario that is reported by the rule, but I can't see how to remove the type parameter. What should I do? + +Sometimes, you may be able to rewrite the code by reaching for some niche TypeScript features, such as [the `NoInfer` utility type](https://www.typescriptlang.org/docs/handbook/utility-types.html#noinfertype) (see [#9751](https://github.com/typescript-eslint/typescript-eslint/issues/9751)). + +But, quite possibly, you've hit an edge case where the type is being used in a subtle way that the rule doesn't account for. +For example, the following arcane code is a way of testing whether two types are equal, and will be reported by the rule (see [#9709](https://github.com/typescript-eslint/typescript-eslint/issues/9709)): + +{/* prettier-ignore */} +```ts +type Compute = A extends Function ? A : { [K in keyof A]: Compute }; +type Equal = + (() => T1 extends Compute ? 1 : 2) extends + (() => T2 extends Compute ? 1 : 2) + ? true + : false; +``` + +In this case, the function types created within the `Equal` type are never expected to be assigned to; they're just created for the purpose of type system manipulations. +This usage is not what the rule is intended to analyze. + +Use eslint-disable comments as appropriate to suppress the rule in these kinds of cases. + +{/* TODO - include an FAQ entry regarding instantiation expressions once the conversation in https://github.com/typescript-eslint/typescript-eslint/pull/9536#discussion_r1705850744 is done */} + ## When Not To Use It This rule will report on functions that use type parameters solely to test types, for example: diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.mdx index 3e56c1e0f0..6fc46d6cbf 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-call.mdx @@ -59,6 +59,34 @@ String.raw`foo`; +## The Unsafe `Function` Type + +The `Function` type is behaves almost identically to `any` when called, so this rule also disallows calling values of type `Function`. + + + + +```ts +const f: Function = () => {}; +f(); +``` + + + + +Note that whereas [no-unsafe-function-type](./no-unsafe-function-type.mdx) helps prevent the _creation_ of `Function` types, this rule helps prevent the unsafe _use_ of `Function` types, which may creep into your codebase without explicitly referencing the `Function` type at all. +See, for example, the following code: + +```ts +function unsafe(maybeFunction: unknown): string { + if (typeof maybeFunction === 'function') { + // TypeScript allows this, but it's completely unsound. + return maybeFunction('call', 'with', 'any', 'args'); + } + // etc +} +``` + ## When Not To Use It If your codebase has many existing `any`s or areas of unsafe code, it may be difficult to enable this rule. diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-function-type.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-function-type.mdx index ea7b60794e..ee1a84395d 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-function-type.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/no-unsafe-function-type.mdx @@ -60,4 +60,5 @@ You might consider using [ESLint disable comments](https://eslint.org/docs/lates - [`no-empty-object-type`](./no-empty-object-type.mdx) - [`no-restricted-types`](./no-restricted-types.mdx) +- [`no-unsafe-call`](./no-unsafe-call.mdx) - [`no-wrapper-object-types`](./no-wrapper-object-types.mdx) diff --git a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.mdx b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.mdx index 9323c6351e..820d4d188d 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.mdx +++ b/node_modules/@typescript-eslint/eslint-plugin/docs/rules/strict-boolean-expressions.mdx @@ -146,9 +146,11 @@ Set this to `true` at your own risk. :::danger Deprecated -> This option will be removed in the next major version of typescript-eslint. -> ::: -> If this is set to `false`, then the rule will error on every file whose `tsconfig.json` does _not_ have the `strictNullChecks` compiler option (or `strict`) set to `true`. +This option will be removed in the next major version of typescript-eslint. + +::: + +If this is set to `false`, then the rule will error on every file whose `tsconfig.json` does _not_ have the `strictNullChecks` compiler option (or `strict`) set to `true`. Without `strictNullChecks`, TypeScript essentially erases `undefined` and `null` from the types. This means when this rule inspects the types from a variable, **it will not be able to tell that the variable might be `null` or `undefined`**, which essentially makes this rule a lot less useful. diff --git a/node_modules/@typescript-eslint/eslint-plugin/package.json b/node_modules/@typescript-eslint/eslint-plugin/package.json index 424409b491..8ff9322985 100644 --- a/node_modules/@typescript-eslint/eslint-plugin/package.json +++ b/node_modules/@typescript-eslint/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin", - "version": "8.6.0", + "version": "8.7.0", "description": "TypeScript plugin for ESLint", "files": [ "dist", @@ -60,10 +60,10 @@ }, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/type-utils": "8.6.0", - "@typescript-eslint/utils": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -74,8 +74,8 @@ "@types/marked": "^5.0.2", "@types/mdast": "^4.0.3", "@types/natural-compare": "*", - "@typescript-eslint/rule-schema-to-typescript-types": "8.6.0", - "@typescript-eslint/rule-tester": "8.6.0", + "@typescript-eslint/rule-schema-to-typescript-types": "8.7.0", + "@typescript-eslint/rule-tester": "8.7.0", "ajv": "^6.12.6", "cross-env": "^7.0.3", "cross-fetch": "*", diff --git a/node_modules/@typescript-eslint/parser/package.json b/node_modules/@typescript-eslint/parser/package.json index 57c7d2decb..424e46f1a7 100644 --- a/node_modules/@typescript-eslint/parser/package.json +++ b/node_modules/@typescript-eslint/parser/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/parser", - "version": "8.6.0", + "version": "8.7.0", "description": "An ESLint custom parser which leverages TypeScript ESTree", "files": [ "dist", @@ -52,10 +52,10 @@ "eslint": "^8.57.0 || ^9.0.0" }, "dependencies": { - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4" }, "devDependencies": { diff --git a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts index 2be95a127f..0eb002a2dc 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts +++ b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts @@ -1,6 +1,6 @@ export * from './CatchClauseDefinition'; export * from './ClassNameDefinition'; -export * from './Definition'; +export type * from './Definition'; export * from './DefinitionType'; export * from './FunctionNameDefinition'; export * from './ImplicitGlobalVariableDefinition'; diff --git a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map index dfd43be8ca..3dec0ac20f 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map +++ b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,mBAAmB,cAAc,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js index 71d1559db0..5fc5664464 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js +++ b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js @@ -16,7 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { Object.defineProperty(exports, "__esModule", { value: true }); __exportStar(require("./CatchClauseDefinition"), exports); __exportStar(require("./ClassNameDefinition"), exports); -__exportStar(require("./Definition"), exports); __exportStar(require("./DefinitionType"), exports); __exportStar(require("./FunctionNameDefinition"), exports); __exportStar(require("./ImplicitGlobalVariableDefinition"), exports); diff --git a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map index 136726cd32..466d0518a4 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map +++ b/node_modules/@typescript-eslint/scope-manager/dist/definition/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,wDAAsC;AACtC,+CAA6B;AAC7B,mDAAiC;AACjC,2DAAyC;AACzC,qEAAmD;AACnD,4DAA0C;AAC1C,wDAAsC;AACtC,2DAAyC;AACzC,yDAAuC;AACvC,2DAAyC;AACzC,mDAAiC;AACjC,uDAAqC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,wDAAsC;AAEtC,mDAAiC;AACjC,2DAAyC;AACzC,qEAAmD;AACnD,4DAA0C;AAC1C,wDAAsC;AACtC,2DAAyC;AACzC,yDAAuC;AACvC,2DAAyC;AACzC,mDAAiC;AACjC,uDAAqC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts index 7bf60717b6..90a217216a 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts +++ b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts @@ -10,7 +10,7 @@ export * from './FunctionTypeScope'; export * from './GlobalScope'; export * from './MappedTypeScope'; export * from './ModuleScope'; -export * from './Scope'; +export type * from './Scope'; export * from './ScopeType'; export * from './SwitchScope'; export * from './TSEnumScope'; diff --git a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map index 43f10ba39f..81d406d05c 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map +++ b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,mBAAmB,SAAS,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js index 221871367a..79117ada93 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js +++ b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js @@ -26,7 +26,6 @@ __exportStar(require("./FunctionTypeScope"), exports); __exportStar(require("./GlobalScope"), exports); __exportStar(require("./MappedTypeScope"), exports); __exportStar(require("./ModuleScope"), exports); -__exportStar(require("./Scope"), exports); __exportStar(require("./ScopeType"), exports); __exportStar(require("./SwitchScope"), exports); __exportStar(require("./TSEnumScope"), exports); diff --git a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map index 2ceff644ca..eada4c4cb5 100644 --- a/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map +++ b/node_modules/@typescript-eslint/scope-manager/dist/scope/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,+CAA6B;AAC7B,+DAA6C;AAC7C,+CAA6B;AAC7B,yDAAuC;AACvC,6CAA2B;AAC3B,gEAA8C;AAC9C,kDAAgC;AAChC,sDAAoC;AACpC,gDAA8B;AAC9B,oDAAkC;AAClC,gDAA8B;AAC9B,0CAAwB;AACxB,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scope/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,+CAA6B;AAC7B,+DAA6C;AAC7C,+CAA6B;AAC7B,yDAAuC;AACvC,6CAA2B;AAC3B,gEAA8C;AAC9C,kDAAgC;AAChC,sDAAoC;AACpC,gDAA8B;AAC9B,oDAAkC;AAClC,gDAA8B;AAE9B,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/scope-manager/package.json b/node_modules/@typescript-eslint/scope-manager/package.json index 0369a15611..59c358d9b5 100644 --- a/node_modules/@typescript-eslint/scope-manager/package.json +++ b/node_modules/@typescript-eslint/scope-manager/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/scope-manager", - "version": "8.6.0", + "version": "8.7.0", "description": "TypeScript scope analyser for ESLint", "files": [ "dist", @@ -46,13 +46,13 @@ "typecheck": "npx nx typecheck" }, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0" + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" }, "devDependencies": { "@jest/types": "29.6.3", "@types/glob": "*", - "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/typescript-estree": "8.7.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/node_modules/@typescript-eslint/type-utils/package.json b/node_modules/@typescript-eslint/type-utils/package.json index b630c55ed6..df2f0ec420 100644 --- a/node_modules/@typescript-eslint/type-utils/package.json +++ b/node_modules/@typescript-eslint/type-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/type-utils", - "version": "8.6.0", + "version": "8.7.0", "description": "Type utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -46,14 +46,14 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/typescript-estree": "8.6.0", - "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "devDependencies": { "@jest/types": "29.6.3", - "@typescript-eslint/parser": "8.6.0", + "@typescript-eslint/parser": "8.7.0", "ajv": "^6.12.6", "downlevel-dts": "*", "jest": "29.7.0", diff --git a/node_modules/@typescript-eslint/types/dist/index.d.ts b/node_modules/@typescript-eslint/types/dist/index.d.ts index 3d39147f54..010d8777c6 100644 --- a/node_modules/@typescript-eslint/types/dist/index.d.ts +++ b/node_modules/@typescript-eslint/types/dist/index.d.ts @@ -1,5 +1,5 @@ export { AST_NODE_TYPES, AST_TOKEN_TYPES } from './generated/ast-spec'; -export * from './lib'; -export * from './parser-options'; +export type * from './lib'; +export type * from './parser-options'; export * from './ts-estree'; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/dist/index.d.ts.map b/node_modules/@typescript-eslint/types/dist/index.d.ts.map index 6a86c53762..b2092e2fbf 100644 --- a/node_modules/@typescript-eslint/types/dist/index.d.ts.map +++ b/node_modules/@typescript-eslint/types/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,mBAAmB,OAAO,CAAC;AAC3B,mBAAmB,kBAAkB,CAAC;AACtC,cAAc,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/dist/index.js b/node_modules/@typescript-eslint/types/dist/index.js index 00ff6a1752..795864a09a 100644 --- a/node_modules/@typescript-eslint/types/dist/index.js +++ b/node_modules/@typescript-eslint/types/dist/index.js @@ -18,7 +18,5 @@ exports.AST_TOKEN_TYPES = exports.AST_NODE_TYPES = void 0; var ast_spec_1 = require("./generated/ast-spec"); Object.defineProperty(exports, "AST_NODE_TYPES", { enumerable: true, get: function () { return ast_spec_1.AST_NODE_TYPES; } }); Object.defineProperty(exports, "AST_TOKEN_TYPES", { enumerable: true, get: function () { return ast_spec_1.AST_TOKEN_TYPES; } }); -__exportStar(require("./lib"), exports); -__exportStar(require("./parser-options"), exports); __exportStar(require("./ts-estree"), exports); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/dist/index.js.map b/node_modules/@typescript-eslint/types/dist/index.js.map index 075ac156fe..715576d7d7 100644 --- a/node_modules/@typescript-eslint/types/dist/index.js.map +++ b/node_modules/@typescript-eslint/types/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAAuE;AAA9D,0GAAA,cAAc,OAAA;AAAE,2GAAA,eAAe,OAAA;AACxC,wCAAsB;AACtB,mDAAiC;AACjC,8CAA4B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAAuE;AAA9D,0GAAA,cAAc,OAAA;AAAE,2GAAA,eAAe,OAAA;AAGxC,8CAA4B"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts b/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts index b02b279990..d69ef91d5a 100644 --- a/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts +++ b/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts @@ -106,7 +106,7 @@ declare module './generated/ast-spec' { parent: TSESTree.ClassBody; } interface SpreadElement { - parent: TSESTree.ArrayExpression | TSESTree.CallExpression | TSESTree.ObjectExpression; + parent: TSESTree.ArrayExpression | TSESTree.CallExpression | TSESTree.NewExpression | TSESTree.ObjectExpression; } interface StaticBlock { parent: TSESTree.ClassBody; diff --git a/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map b/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map index 19876bf898..03556b7f7c 100644 --- a/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map +++ b/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ts-estree.d.ts","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ts-estree.d.ts","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/dist/ts-estree.js.map b/node_modules/@typescript-eslint/types/dist/ts-estree.js.map index 86a3bfb678..3245ed4f92 100644 --- a/node_modules/@typescript-eslint/types/dist/ts-estree.js.map +++ b/node_modules/@typescript-eslint/types/dist/ts-estree.js.map @@ -1 +1 @@ -{"version":3,"file":"ts-estree.js","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+NA,iEAAiD"} \ No newline at end of file +{"version":3,"file":"ts-estree.js","sourceRoot":"","sources":["../src/ts-estree.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgOA,iEAAiD"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/types/package.json b/node_modules/@typescript-eslint/types/package.json index 786b7b8afd..8f84805ea1 100644 --- a/node_modules/@typescript-eslint/types/package.json +++ b/node_modules/@typescript-eslint/types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/types", - "version": "8.6.0", + "version": "8.7.0", "description": "Types for the TypeScript-ESTree AST spec", "files": [ "dist", diff --git a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts index 37f26a3959..c8e86dc99b 100644 --- a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts +++ b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts @@ -1,4 +1,4 @@ export { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, } from '@typescript-eslint/types'; -export * from './ts-nodes'; -export * from './estree-to-ts-node-types'; +export type * from './ts-nodes'; +export type * from './estree-to-ts-node-types'; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map index 6a839dc66d..c36e4c5d59 100644 --- a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map +++ b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAClC,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,2BAA2B,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js index 6d010024b5..a16d2750aa 100644 --- a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js +++ b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js @@ -1,18 +1,4 @@ "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; Object.defineProperty(exports, "__esModule", { value: true }); exports.TSESTree = exports.AST_TOKEN_TYPES = exports.AST_NODE_TYPES = void 0; // for simplicity and backwards-compatibility @@ -20,6 +6,4 @@ var types_1 = require("@typescript-eslint/types"); Object.defineProperty(exports, "AST_NODE_TYPES", { enumerable: true, get: function () { return types_1.AST_NODE_TYPES; } }); Object.defineProperty(exports, "AST_TOKEN_TYPES", { enumerable: true, get: function () { return types_1.AST_TOKEN_TYPES; } }); Object.defineProperty(exports, "TSESTree", { enumerable: true, get: function () { return types_1.TSESTree; } }); -__exportStar(require("./ts-nodes"), exports); -__exportStar(require("./estree-to-ts-node-types"), exports); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map index fc698263ac..3b0e6dc6de 100644 --- a/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map +++ b/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA6C;AAC7C,kDAIkC;AAHhC,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA;AAEV,6CAA2B;AAC3B,4DAA0C"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-estree/index.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,kDAIkC;AAHhC,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,iGAAA,QAAQ,OAAA"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/typescript-estree/package.json b/node_modules/@typescript-eslint/typescript-estree/package.json index 7344425bbc..325a74003e 100644 --- a/node_modules/@typescript-eslint/typescript-estree/package.json +++ b/node_modules/@typescript-eslint/typescript-estree/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/typescript-estree", - "version": "8.6.0", + "version": "8.7.0", "description": "A parser that converts TypeScript source code into an ESTree compatible form", "files": [ "dist", @@ -54,8 +54,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/visitor-keys": "8.6.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", diff --git a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts index 95b326ecf1..1d27f00f08 100644 --- a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts +++ b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts @@ -1,7 +1,7 @@ export * from './applyDefault'; export * from './deepMerge'; export * from './getParserServices'; -export * from './InferTypesFromRule'; +export type * from './InferTypesFromRule'; export * from './nullThrows'; export * from './RuleCreator'; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts.map b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts.map index d5c1331291..eb3b807abc 100644 --- a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts.map +++ b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,mBAAmB,sBAAsB,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js index e3895dd441..265c51ad14 100644 --- a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js +++ b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js @@ -17,7 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); __exportStar(require("./applyDefault"), exports); __exportStar(require("./deepMerge"), exports); __exportStar(require("./getParserServices"), exports); -__exportStar(require("./InferTypesFromRule"), exports); __exportStar(require("./nullThrows"), exports); __exportStar(require("./RuleCreator"), exports); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js.map b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js.map index 21346960b3..f14c81461c 100644 --- a/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js.map +++ b/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,8CAA4B;AAC5B,sDAAoC;AACpC,uDAAqC;AACrC,+CAA6B;AAC7B,gDAA8B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,8CAA4B;AAC5B,sDAAoC;AAEpC,+CAA6B;AAC7B,gDAA8B"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/index.d.ts b/node_modules/@typescript-eslint/utils/dist/index.d.ts index fbc8815bb4..b998c13a6e 100644 --- a/node_modules/@typescript-eslint/utils/dist/index.d.ts +++ b/node_modules/@typescript-eslint/utils/dist/index.d.ts @@ -1,6 +1,6 @@ export * as ASTUtils from './ast-utils'; export * as ESLintUtils from './eslint-utils'; -export * as JSONSchema from './json-schema'; +export type * as JSONSchema from './json-schema'; export * as TSESLint from './ts-eslint'; export * from './ts-estree'; export * as TSUtils from './ts-utils'; diff --git a/node_modules/@typescript-eslint/utils/dist/index.d.ts.map b/node_modules/@typescript-eslint/utils/dist/index.d.ts.map index 107a73c0b9..7952ab461b 100644 --- a/node_modules/@typescript-eslint/utils/dist/index.d.ts.map +++ b/node_modules/@typescript-eslint/utils/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,YAAY,KAAK,UAAU,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/index.js b/node_modules/@typescript-eslint/utils/dist/index.js index 67012564f9..0986e631dd 100644 --- a/node_modules/@typescript-eslint/utils/dist/index.js +++ b/node_modules/@typescript-eslint/utils/dist/index.js @@ -26,10 +26,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.TSUtils = exports.TSESLint = exports.JSONSchema = exports.ESLintUtils = exports.ASTUtils = void 0; +exports.TSUtils = exports.TSESLint = exports.ESLintUtils = exports.ASTUtils = void 0; exports.ASTUtils = __importStar(require("./ast-utils")); exports.ESLintUtils = __importStar(require("./eslint-utils")); -exports.JSONSchema = __importStar(require("./json-schema")); exports.TSESLint = __importStar(require("./ts-eslint")); __exportStar(require("./ts-estree"), exports); exports.TSUtils = __importStar(require("./ts-utils")); diff --git a/node_modules/@typescript-eslint/utils/dist/index.js.map b/node_modules/@typescript-eslint/utils/dist/index.js.map index 1b44e885c9..31f2a07d68 100644 --- a/node_modules/@typescript-eslint/utils/dist/index.js.map +++ b/node_modules/@typescript-eslint/utils/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAwC;AAExC,8DAA8C;AAC9C,4DAA4C;AAC5C,wDAAwC;AACxC,8CAA4B;AAC5B,sDAAsC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAwC;AAExC,8DAA8C;AAE9C,wDAAwC;AACxC,8CAA4B;AAC5B,sDAAsC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts b/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts index 03ff65dd4c..c765476e37 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts @@ -322,7 +322,6 @@ interface RuleListenerBaseSelectors { AssignmentExpression?: RuleFunction; AssignmentPattern?: RuleFunction; AwaitExpression?: RuleFunction; - BigIntLiteral?: RuleFunction; BinaryExpression?: RuleFunction; BlockStatement?: RuleFunction; BreakStatement?: RuleFunction; @@ -350,6 +349,7 @@ interface RuleListenerBaseSelectors { FunctionExpression?: RuleFunction; Identifier?: RuleFunction; IfStatement?: RuleFunction; + ImportAttribute?: RuleFunction; ImportDeclaration?: RuleFunction; ImportDefaultSpecifier?: RuleFunction; ImportExpression?: RuleFunction; @@ -364,6 +364,7 @@ interface RuleListenerBaseSelectors { JSXFragment?: RuleFunction; JSXIdentifier?: RuleFunction; JSXMemberExpression?: RuleFunction; + JSXNamespacedName?: RuleFunction; JSXOpeningElement?: RuleFunction; JSXOpeningFragment?: RuleFunction; JSXSpreadAttribute?: RuleFunction; @@ -378,6 +379,7 @@ interface RuleListenerBaseSelectors { NewExpression?: RuleFunction; ObjectExpression?: RuleFunction; ObjectPattern?: RuleFunction; + PrivateIdentifier?: RuleFunction; Program?: RuleFunction; Property?: RuleFunction; PropertyDefinition?: RuleFunction; @@ -385,6 +387,7 @@ interface RuleListenerBaseSelectors { ReturnStatement?: RuleFunction; SequenceExpression?: RuleFunction; SpreadElement?: RuleFunction; + StaticBlock?: RuleFunction; Super?: RuleFunction; SwitchCase?: RuleFunction; SwitchStatement?: RuleFunction; @@ -394,6 +397,7 @@ interface RuleListenerBaseSelectors { ThisExpression?: RuleFunction; ThrowStatement?: RuleFunction; TryStatement?: RuleFunction; + TSAbstractAccessorProperty?: RuleFunction; TSAbstractKeyword?: RuleFunction; TSAbstractMethodDefinition?: RuleFunction; TSAbstractPropertyDefinition?: RuleFunction; @@ -411,6 +415,7 @@ interface RuleListenerBaseSelectors { TSDeclareFunction?: RuleFunction; TSDeclareKeyword?: RuleFunction; TSEmptyBodyFunctionExpression?: RuleFunction; + TSEnumBody?: RuleFunction; TSEnumDeclaration?: RuleFunction; TSEnumMember?: RuleFunction; TSExportAssignment?: RuleFunction; @@ -422,15 +427,18 @@ interface RuleListenerBaseSelectors { TSIndexedAccessType?: RuleFunction; TSIndexSignature?: RuleFunction; TSInferType?: RuleFunction; + TSInstantiationExpression?: RuleFunction; TSInterfaceBody?: RuleFunction; TSInterfaceDeclaration?: RuleFunction; TSInterfaceHeritage?: RuleFunction; TSIntersectionType?: RuleFunction; + TSIntrinsicKeyword?: RuleFunction; TSLiteralType?: RuleFunction; TSMappedType?: RuleFunction; TSMethodSignature?: RuleFunction; TSModuleBlock?: RuleFunction; TSModuleDeclaration?: RuleFunction; + TSNamedTupleMember?: RuleFunction; TSNamespaceExportDeclaration?: RuleFunction; TSNeverKeyword?: RuleFunction; TSNonNullExpression?: RuleFunction; @@ -450,6 +458,7 @@ interface RuleListenerBaseSelectors { TSStaticKeyword?: RuleFunction; TSStringKeyword?: RuleFunction; TSSymbolKeyword?: RuleFunction; + TSTemplateLiteralType?: RuleFunction; TSThisType?: RuleFunction; TSTupleType?: RuleFunction; TSTypeAliasDeclaration?: RuleFunction; diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts.map b/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts.map index 1161612fba..0b263fbe73 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts.map +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/Rule.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/Rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC;AAExE,MAAM,WAAW,+BAA+B,CAC9C,OAAO,SAAS,SAAS,OAAO,EAAE;IAElC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,UAAU,SAAS,MAAM,EAAE,UAAU,GAAG,OAAO;IAC3E;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,SAAS,WAAW,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB,CACnC,UAAU,SAAS,MAAM,EACzB,UAAU,GAAG,OAAO,CACpB,SAAQ,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC;IAC5C;;OAEG;IACH,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,CACb,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAExE,gBAAgB,CACd,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzE,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;IAE7D,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAEjD,WAAW,CACT,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAEX,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACrE;AAED,MAAM,WAAW,0BAA0B,CAAC,UAAU,SAAS,MAAM,CACnE,SAAQ,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,SAAS,KACb,gBAAgB,CAAC,OAAO,CAAC,GAAG,SAAS,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC;AAErE,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,MAAM,IACzD,0BAA0B,CAAC,UAAU,CAAC,EAAE,CAAC;AAE3C,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,UAAU,oBAAoB,CAAC,UAAU,SAAS,MAAM;IACtD;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAIhC;AACD,UAAU,8BAA8B,CAAC,UAAU,SAAS,MAAM,CAChE,SAAQ,oBAAoB,CAAC,UAAU,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;CACvE;AAED,UAAU,+BAA+B;IACvC;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EACT,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAC3B,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;CAC/C;AACD,UAAU,uBAAuB;IAC/B;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,MAAM,IAAI,CACtD,uBAAuB,GACvB,+BAA+B,CAClC,GACC,8BAA8B,CAAC,UAAU,CAAC,CAAC;AAE7C;;;GAGG;AAEH,MAAM,WAAW,2BAA2B;IAC1C,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAID,MAAM,WAAW,WAAW,CAC1B,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,SAAS,OAAO,EAAE;IAElC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC;IAC5C;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;IACpC;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,2BAA2B,CAAC;IAItC;;;;;;OAMG;IACH,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC;;;;;OAKG;IACH,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,KAAK,CAAC,QAAQ,EAAE,CAAC;IAErE;;;;OAIG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC;IAE9B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;IAExB;;;;;OAKG;IACH,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEtC;;;OAGG;IACH,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEjC;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1C;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACxD;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB,uDAAuD;IACvD,cAAc,EAAE,QAAQ,EAAE,CAAC;IAE3B;;;;OAIG;IACH,eAAe,EAAE,eAAe,EAAE,CAAC;IAEnC,kEAAkE;IAClE,aAAa,EAAE,eAAe,EAAE,CAAC;IAEjC;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX,cAAc,EAAE,eAAe,CAAC;IAEhC,uDAAuD;IACvD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAEpC,qDAAqD;IACrD,cAAc,EAAE,eAAe,EAAE,CAAC;IAElC,wDAAwD;IACxD,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;IAEhC;;;OAGG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;IAEhC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GACxB,CAAC,CACC,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,QAAQ,CAAC,IAAI,KAChB,IAAI,CAAC,GACV,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,GACnD,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAI9D,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,eAAe,GAAG,KAAK,IAAI,CACrE,IAAI,EAAE,CAAC,KACJ,IAAI,CAAC;AAEV,UAAU,yBAAyB;IACjC,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,uBAAuB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACzE,oBAAoB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACnE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,qBAAqB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,oBAAoB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACnE,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,wBAAwB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3E,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,0BAA0B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC/E,4BAA4B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACnF,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,0BAA0B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC/E,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,+BAA+B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IACzF,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,6BAA6B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACrF,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,yBAAyB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC7E,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,yBAAyB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAC7E,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,4BAA4B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACnF,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7D,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,qBAAqB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrE,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,UAAU,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,sBAAsB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,0BAA0B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC/E,4BAA4B,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACnF,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACjE,kBAAkB,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;CAC1D;AACD,KAAK,yBAAyB,GAAG;KAC9B,CAAC,IAAI,MAAM,yBAAyB,IAAI,GAAG,CAAC,OAAO,GAAG,yBAAyB,CAAC,CAAC,CAAC;CACpF,CAAC;AACF,KAAK,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;AAG7E,MAAM,WAAW,qBAAqB;CAuCrC;AAED,MAAM,MAAM,YAAY,GAAG,yBAAyB,GAClD,4BAA4B,GAC5B,yBAAyB,CAAC;AAE5B,MAAM,WAAW,UAAU,CACzB,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,EACvC,IAAI,GAAG,OAAO,EAEd,oBAAoB,SAAS,YAAY,GAAG,YAAY;IAExD;;;OAGG;IACH,MAAM,CACJ,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAClD,oBAAoB,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;AAEnE,MAAM,WAAW,sBAAsB,CACrC,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,EACvC,IAAI,GAAG,OAAO,EAEd,oBAAoB,SAAS,YAAY,GAAG,YAAY,CACxD,SAAQ,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC;IACnE;;OAEG;IACH,IAAI,EAAE,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CAC9C;AAED,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,CAC5D,MAAM,EACN,OAAO,EAAE,CACV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,mBAAmB,GAE3B;IACE,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GACD,uBAAuB,CAAC;AAM5B,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,CAC5D,MAAM,EAON,QAAQ,GAAG,SAAS,CACrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAC5B,UAAU,SAAS,MAAM,GAAG,KAAK,EACjC,OAAO,SAAS,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,IAC5C,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,YAAY,CAAC;AAC1E,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CACpD,MAAM,EACN,SAAS,OAAO,EAAE,CACnB,CAAC"} \ No newline at end of file +{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/Rule.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts index 17edebe9e5..7861b9f22d 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts @@ -1,11 +1,11 @@ -export * from './AST'; -export * from './Config'; +export type * from './AST'; +export type * from './Config'; export * from './ESLint'; export * from './Linter'; -export * from './Parser'; -export * from './ParserOptions'; -export * from './Processor'; -export * from './Rule'; +export type * from './Parser'; +export type * from './ParserOptions'; +export type * from './Processor'; +export type * from './Rule'; export * from './RuleTester'; export * from './Scope'; export * from './SourceCode'; diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts.map b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts.map index 31ec426548..d194c11483 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts.map +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,OAAO,CAAC;AAC3B,mBAAmB,UAAU,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,mBAAmB,UAAU,CAAC;AAC9B,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,QAAQ,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js index 85b7e5cfa0..32a6bb556e 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js @@ -14,14 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./AST"), exports); -__exportStar(require("./Config"), exports); __exportStar(require("./ESLint"), exports); __exportStar(require("./Linter"), exports); -__exportStar(require("./Parser"), exports); -__exportStar(require("./ParserOptions"), exports); -__exportStar(require("./Processor"), exports); -__exportStar(require("./Rule"), exports); __exportStar(require("./RuleTester"), exports); __exportStar(require("./Scope"), exports); __exportStar(require("./SourceCode"), exports); diff --git a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js.map b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js.map index b7821e9144..48d4847c72 100644 --- a/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js.map +++ b/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ts-eslint/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,2CAAyB;AACzB,2CAAyB;AAKzB,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B"} \ No newline at end of file diff --git a/node_modules/@typescript-eslint/utils/package.json b/node_modules/@typescript-eslint/utils/package.json index 10bd4aec62..d801d53231 100644 --- a/node_modules/@typescript-eslint/utils/package.json +++ b/node_modules/@typescript-eslint/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "8.6.0", + "version": "8.7.0", "description": "Utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -64,9 +64,9 @@ }, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.6.0", - "@typescript-eslint/types": "8.6.0", - "@typescript-eslint/typescript-estree": "8.6.0" + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" diff --git a/node_modules/@typescript-eslint/visitor-keys/package.json b/node_modules/@typescript-eslint/visitor-keys/package.json index 0fda5d2879..e4b6d44687 100644 --- a/node_modules/@typescript-eslint/visitor-keys/package.json +++ b/node_modules/@typescript-eslint/visitor-keys/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/visitor-keys", - "version": "8.6.0", + "version": "8.7.0", "description": "Visitor keys used to help traverse the TypeScript-ESTree AST", "files": [ "dist", @@ -47,7 +47,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/types": "8.7.0", "eslint-visitor-keys": "^3.4.3" }, "devDependencies": { diff --git a/node_modules/eslint-plugin-import/CHANGELOG.md b/node_modules/eslint-plugin-import/CHANGELOG.md index b81ad61a61..cf97fff94d 100644 --- a/node_modules/eslint-plugin-import/CHANGELOG.md +++ b/node_modules/eslint-plugin-import/CHANGELOG.md @@ -6,6 +6,34 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ## [Unreleased] +## [2.30.0] - 2024-09-02 + +### Added +- [`dynamic-import-chunkname`]: add `allowEmpty` option to allow empty leading comments ([#2942], thanks [@JiangWeixian]) +- [`dynamic-import-chunkname`]: Allow empty chunk name when webpackMode: 'eager' is set; add suggestions to remove name in eager mode ([#3004], thanks [@amsardesai]) +- [`no-unused-modules`]: Add `ignoreUnusedTypeExports` option ([#3011], thanks [@silverwind]) +- add support for Flat Config ([#3018], thanks [@michaelfaith]) + +### Fixed +- [`no-extraneous-dependencies`]: allow wrong path ([#3012], thanks [@chabb]) +- [`no-cycle`]: use scc algorithm to optimize ([#2998], thanks [@soryy708]) +- [`no-duplicates`]: Removing duplicates breaks in TypeScript ([#3033], thanks [@yesl-kim]) +- [`newline-after-import`]: fix considerComments option when require ([#2952], thanks [@developer-bandi]) +- [`order`]: do not compare first path segment for relative paths ([#2682]) ([#2885], thanks [@mihkeleidast]) + +### Changed +- [Docs] `no-extraneous-dependencies`: Make glob pattern description more explicit ([#2944], thanks [@mulztob]) +- [`no-unused-modules`]: add console message to help debug [#2866] +- [Refactor] `ExportMap`: make procedures static instead of monkeypatching exportmap ([#2982], thanks [@soryy708]) +- [Refactor] `ExportMap`: separate ExportMap instance from its builder logic ([#2985], thanks [@soryy708]) +- [Docs] `order`: Add a quick note on how unbound imports and --fix ([#2640], thanks [@minervabot]) +- [Tests] appveyor -> GHA (run tests on Windows in both pwsh and WSL + Ubuntu) ([#2987], thanks [@joeyguerra]) +- [actions] migrate OSX tests to GHA ([ljharb#37], thanks [@aks-]) +- [Refactor] `exportMapBuilder`: avoid hoisting ([#2989], thanks [@soryy708]) +- [Refactor] `ExportMap`: extract "builder" logic to separate files ([#2991], thanks [@soryy708]) +- [Docs] [`order`]: update the description of the `pathGroupsExcludedImportTypes` option ([#3036], thanks [@liby]) +- [readme] Clarify how to install the plugin ([#2993], thanks [@jwbth]) + ## [2.29.1] - 2023-12-14 ### Fixed @@ -1101,8 +1129,26 @@ for info on changes for earlier releases. [`memo-parser`]: ./memo-parser/README.md +[#3036]: https://github.com/import-js/eslint-plugin-import/pull/3036 +[#3033]: https://github.com/import-js/eslint-plugin-import/pull/3033 +[#3018]: https://github.com/import-js/eslint-plugin-import/pull/3018 +[#3012]: https://github.com/import-js/eslint-plugin-import/pull/3012 +[#3011]: https://github.com/import-js/eslint-plugin-import/pull/3011 +[#3004]: https://github.com/import-js/eslint-plugin-import/pull/3004 +[#2998]: https://github.com/import-js/eslint-plugin-import/pull/2998 +[#2993]: https://github.com/import-js/eslint-plugin-import/pull/2993 +[#2991]: https://github.com/import-js/eslint-plugin-import/pull/2991 +[#2989]: https://github.com/import-js/eslint-plugin-import/pull/2989 +[#2987]: https://github.com/import-js/eslint-plugin-import/pull/2987 +[#2985]: https://github.com/import-js/eslint-plugin-import/pull/2985 +[#2982]: https://github.com/import-js/eslint-plugin-import/pull/2982 +[#2952]: https://github.com/import-js/eslint-plugin-import/pull/2952 +[#2944]: https://github.com/import-js/eslint-plugin-import/pull/2944 +[#2942]: https://github.com/import-js/eslint-plugin-import/pull/2942 [#2919]: https://github.com/import-js/eslint-plugin-import/pull/2919 +[#2885]: https://github.com/import-js/eslint-plugin-import/pull/2885 [#2884]: https://github.com/import-js/eslint-plugin-import/pull/2884 +[#2866]: https://github.com/import-js/eslint-plugin-import/pull/2866 [#2854]: https://github.com/import-js/eslint-plugin-import/pull/2854 [#2851]: https://github.com/import-js/eslint-plugin-import/pull/2851 [#2850]: https://github.com/import-js/eslint-plugin-import/pull/2850 @@ -1116,6 +1162,7 @@ for info on changes for earlier releases. [#2735]: https://github.com/import-js/eslint-plugin-import/pull/2735 [#2699]: https://github.com/import-js/eslint-plugin-import/pull/2699 [#2664]: https://github.com/import-js/eslint-plugin-import/pull/2664 +[#2640]: https://github.com/import-js/eslint-plugin-import/pull/2640 [#2613]: https://github.com/import-js/eslint-plugin-import/pull/2613 [#2608]: https://github.com/import-js/eslint-plugin-import/pull/2608 [#2605]: https://github.com/import-js/eslint-plugin-import/pull/2605 @@ -1440,9 +1487,12 @@ for info on changes for earlier releases. [#164]: https://github.com/import-js/eslint-plugin-import/pull/164 [#157]: https://github.com/import-js/eslint-plugin-import/pull/157 +[ljharb#37]: https://github.com/ljharb/eslint-plugin-import/pull/37 + [#2930]: https://github.com/import-js/eslint-plugin-import/issues/2930 [#2687]: https://github.com/import-js/eslint-plugin-import/issues/2687 [#2684]: https://github.com/import-js/eslint-plugin-import/issues/2684 +[#2682]: https://github.com/import-js/eslint-plugin-import/issues/2682 [#2674]: https://github.com/import-js/eslint-plugin-import/issues/2674 [#2668]: https://github.com/import-js/eslint-plugin-import/issues/2668 [#2666]: https://github.com/import-js/eslint-plugin-import/issues/2666 @@ -1567,7 +1617,8 @@ for info on changes for earlier releases. [#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.29.1...HEAD +[Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.30.0...HEAD +[2.30.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0 [2.29.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.0...v2.29.1 [2.29.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.1...v2.29.0 [2.28.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.0...v2.28.1 @@ -1672,9 +1723,11 @@ for info on changes for earlier releases. [@adjerbetian]: https://github.com/adjerbetian [@AdriAt360]: https://github.com/AdriAt360 [@ai]: https://github.com/ai +[@aks-]: https://github.com/aks- [@aladdin-add]: https://github.com/aladdin-add [@alex-page]: https://github.com/alex-page [@alexgorbatchev]: https://github.com/alexgorbatchev +[@amsardesai]: https://github.com/amsardesai [@andreubotella]: https://github.com/andreubotella [@AndrewLeedham]: https://github.com/AndrewLeedham [@andyogo]: https://github.com/andyogo @@ -1699,11 +1752,13 @@ for info on changes for earlier releases. [@bicstone]: https://github.com/bicstone [@Blasz]: https://github.com/Blasz [@bmish]: https://github.com/bmish +[@developer-bandi]: https://github.com/developer-bandi [@borisyankov]: https://github.com/borisyankov [@bradennapier]: https://github.com/bradennapier [@bradzacher]: https://github.com/bradzacher [@brendo]: https://github.com/brendo [@brettz9]: https://github.com/brettz9 +[@chabb]: https://github.com/chabb [@Chamion]: https://github.com/Chamion [@charlessuh]: https://github.com/charlessuh [@charpeni]: https://github.com/charpeni @@ -1770,10 +1825,12 @@ for info on changes for earlier releases. [@jeffshaver]: https://github.com/jeffshaver [@jf248]: https://github.com/jf248 [@jfmengels]: https://github.com/jfmengels +[@JiangWeixian]: https://github.com/JiangWeixian [@jimbolla]: https://github.com/jimbolla [@jkimbo]: https://github.com/jkimbo [@joaovieira]: https://github.com/joaovieira [@joe-matsec]: https://github.com/joe-matsec +[@joeyguerra]: https://github.com/joeyguerra [@johndevedu]: https://github.com/johndevedu [@johnthagen]: https://github.com/johnthagen [@jonboiser]: https://github.com/jonboiser @@ -1783,6 +1840,7 @@ for info on changes for earlier releases. [@jseminck]: https://github.com/jseminck [@julien1619]: https://github.com/julien1619 [@justinanastos]: https://github.com/justinanastos +[@jwbth]: https://github.com/jwbth [@k15a]: https://github.com/k15a [@kentcdodds]: https://github.com/kentcdodds [@kevin940726]: https://github.com/kevin940726 @@ -1830,11 +1888,15 @@ for info on changes for earlier releases. [@meowtec]: https://github.com/meowtec [@mgwalker]: https://github.com/mgwalker [@mhmadhamster]: https://github.com/MhMadHamster +[@michaelfaith]: https://github.com/michaelfaith +[@mihkeleidast]: https://github.com/mihkeleidast [@MikeyBeLike]: https://github.com/MikeyBeLike +[@minervabot]: https://github.com/minervabot [@mpint]: https://github.com/mpint [@mplewis]: https://github.com/mplewis [@mrmckeb]: https://github.com/mrmckeb [@msvab]: https://github.com/msvab +[@mulztob]: https://github.com/mulztob [@mx-bernhard]: https://github.com/mx-bernhard [@Nfinished]: https://github.com/Nfinished [@nickofthyme]: https://github.com/nickofthyme @@ -1843,9 +1905,9 @@ for info on changes for earlier releases. [@ntdb]: https://github.com/ntdb [@nwalters512]: https://github.com/nwalters512 [@ombene]: https://github.com/ombene -[@Pandemic1617]: https://github.com/Pandemic1617 [@ota-meshi]: https://github.com/ota-meshi [@OutdatedVersion]: https://github.com/OutdatedVersion +[@Pandemic1617]: https://github.com/Pandemic1617 [@panrafal]: https://github.com/panrafal [@paztis]: https://github.com/paztis [@pcorpet]: https://github.com/pcorpet @@ -1877,6 +1939,7 @@ for info on changes for earlier releases. [@sergei-startsev]: https://github.com/sergei-startsev [@sharmilajesupaul]: https://github.com/sharmilajesupaul [@sheepsteak]: https://github.com/sheepsteak +[@silverwind]: https://github.com/silverwind [@silviogutierrez]: https://github.com/silviogutierrez [@SimenB]: https://github.com/SimenB [@simmo]: https://github.com/simmo @@ -1919,6 +1982,7 @@ for info on changes for earlier releases. [@wtgtybhertgeghgtwtg]: https://github.com/wtgtybhertgeghgtwtg [@xM8WVqaG]: https://github.com/xM8WVqaG [@xpl]: https://github.com/xpl +[@yesl-kim]: https://github.com/yesl-kim [@yndajas]: https://github.com/yndajas [@yordis]: https://github.com/yordis [@Zamiell]: https://github.com/Zamiell diff --git a/node_modules/eslint-plugin-import/CONTRIBUTING.md b/node_modules/eslint-plugin-import/CONTRIBUTING.md deleted file mode 100644 index 871e90ad8c..0000000000 --- a/node_modules/eslint-plugin-import/CONTRIBUTING.md +++ /dev/null @@ -1,84 +0,0 @@ -# Contributing - -Thanks for your interest in helping out! Here are a **few** _weird_ tricks to ~~cut your mortgage in half~~ maximize the global net efficiency of your efforts! - -## TL;DR: Checklist - -When opening an [issue](#issues): - - - [ ] search open/closed issues - - [ ] discuss bug/enhancement in new or old issue - -[PR](#prs) time: - - - [ ] write tests - - [ ] implement feature/fix bug - - [ ] update docs - - [ ] make a note in change log - -Remember, you don't need to do it all yourself; any of these are helpful! 😎 - -## How to get started - -If you are new to `eslint`, below are a few resources that will help you to familiarize yourself with the project. - - - Watch [this presentation](https://www.youtube.com/watch?v=2W9tUnALrLg) to learn the fundamental concept of Abstract Syntax Trees (AST) and the way `eslint` works under the hood. - - Familiarize yourself with the [AST explorer](https://astexplorer.net/) tool. Look into rules in `docs/rules`, create patterns in the rules, then analyze its AST. - - Explore the blog posts on how to create a custom rule. [One blog post](https://blog.yonatan.dev/writing-a-custom-eslint-rule-to-spot-undeclared-props/). [Second blog post](https://betterprogramming.pub/creating-custom-eslint-rules-cdc579694608). - - Read the official `eslint` [developer guide](https://eslint.org/docs/latest/developer-guide/architecture/). - -## Issues - -### Search open + closed issues for similar cases - - You may find an open issue that closely matches what you are thinking. You may also find a closed issue with discussion that either solves your problem or explains why we are unlikely to solve it in the near future. - - If you find a matching issue that is open, and marked `accepted` and/or `help wanted`, you might want to [open a PR](#prs). - -### Open an issue - - Let's discuss your issue. Could be as simple as unclear documentation or a wonky config file. - If you're suggesting a feature, it might exist and need better documentation, or it might be in process. Even given those, some discussion might be warranted to ensure the enhancement is clear. - - You're welcome to jump right to a PR, but without a discussion, can't make any guarantees about merging. - - That said: sometimes seeing the code makes the discussion clearer.😄 - -This is a helpful contribution all by itself. Thanks! - -## PRs - -If you would like to implement something, firstly: thanks! Community contributions are a magical thing. Like Redux or [the flux capacitor](https://youtu.be/SR5BfQ4rEqQ?t=2m25s), they make open source possible. - -**Working on your first Pull Request?** -You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). - -Here are some things to keep in mind when working on a PR: - -**Trying to update an inactive Pull Request?** -If a PR is open, but unfortunately the author is, for any reason, not available to apply code review fixes or rebase the source branch, then please **do not open a new PR**. -Instead, paste a link to your own branch in the PR, and the maintainers can pull in your changes and update the existing PR in-place. - -### Tests - -A PR that is just failing test cases for an existing issue is very helpful, as this can take as much time (if not more) as it takes to implement a new feature or fix a bug. - -If you only have enough time to write tests, fantastic! Submit away. This is a great jumping-off point for a core contributor or even another PR to continue what you've started. - -### Docs - -For enhancements to rules, please update the docs in `docs/rules` matching the rule filename from `src/rules` or the rule description in `meta.docs.description`. Running `npm run update:eslint-docs` will update the [README.md] and rule doc header. - -Bugfixes may not warrant docs changes, though it's worth skimming the existing docs to see if there are any relevant caveats that need to be removed. - -### Changelog - -Please add a quick blurb to the [**Unreleased**](./CHANGELOG.md#unreleased) section of the change log. Give yourself some credit, and please link back to the PR for future reference. This is especially helpful for resolver changes, as the resolvers are less frequently modified and published. - -Note also that the change log can't magically link back to Github entities (i.e. PRs, issues, users) or rules; there are a handful of footnote URL definitions at the bottom. You may need to add one or more URL if you've square-bracketed any such items. - -## Code of Conduct - -Please familiarize yourself with the [Code of Conduct](https://github.com/import-js/.github/blob/main/CODE_OF_CONDUCT.md). - -[README.md]: ./README.md diff --git a/node_modules/eslint-plugin-import/README.md b/node_modules/eslint-plugin-import/README.md index 1baa0069b3..8cc723423f 100644 --- a/node_modules/eslint-plugin-import/README.md +++ b/node_modules/eslint-plugin-import/README.md @@ -23,7 +23,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a ⌨️ Set in the `typescript` configuration.\ 🚸 Set in the `warnings` configuration.\ 🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\ -💡 Manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\ +💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\ ❌ Deprecated. ### Helpful warnings @@ -73,7 +73,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a | Name                            | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | :------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :- | :---- | :- | :- | :- | :- | | [consistent-type-specifier-style](docs/rules/consistent-type-specifier-style.md) | Enforce or ban the use of inline type-only markers for named imports. | | | | 🔧 | | | -| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | | | +| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | 💡 | | | [exports-last](docs/rules/exports-last.md) | Ensure all exports appear after other statements. | | | | | | | | [extensions](docs/rules/extensions.md) | Ensure consistent use of file extension within the import path. | | | | | | | | [first](docs/rules/first.md) | Ensure all imports appear before other statements. | | | | 🔧 | | | @@ -106,29 +106,60 @@ The maintainers of `eslint-plugin-import` and thousands of other packages are wo npm install eslint-plugin-import --save-dev ``` -All rules are off by default. However, you may configure them manually -in your `.eslintrc.(yml|json|js)`, or extend one of the canned configs: +### Config - Legacy (`.eslintrc`) -```yaml ---- -extends: - - eslint:recommended - - plugin:import/recommended - # alternatively, 'recommended' is the combination of these two rule sets: - - plugin:import/errors - - plugin:import/warnings - -# or configure manually: -plugins: - - import - -rules: - import/no-unresolved: [2, {commonjs: true, amd: true}] - import/named: 2 - import/namespace: 2 - import/default: 2 - import/export: 2 - # etc... +All rules are off by default. However, you may extend one of the preset configs, or configure them manually in your `.eslintrc.(yml|json|js)`. + + - Extending a preset config: + +```jsonc +{ + "extends": [ + "eslint:recommended", + "plugin:import/recommended", + ], +} +``` + + - Configuring manually: + +```jsonc +{ + "rules": { + "import/no-unresolved": ["error", { "commonjs": true, "amd": true }] + "import/named": "error", + "import/namespace": "error", + "import/default": "error", + "import/export": "error", + // etc... + }, +}, +``` + +### Config - Flat (`eslint.config.js`) + +All rules are off by default. However, you may configure them manually in your `eslint.config.(js|cjs|mjs)`, or extend one of the preset configs: + +```js +import importPlugin from 'eslint-plugin-import'; +import js from '@eslint/js'; + +export default [ + js.configs.recommended, + importPlugin.flatConfigs.recommended, + { + files: ['**/*.{js,mjs,cjs}'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + rules: { + 'no-unused-vars': 'off', + 'import/no-dynamic-require': 'warn', + 'import/no-nodejs-modules': 'warn', + }, + }, +]; ``` ## TypeScript @@ -137,18 +168,23 @@ You may use the following snippet or assemble your own config using the granular Make sure you have installed [`@typescript-eslint/parser`] and [`eslint-import-resolver-typescript`] which are used in the following configuration. -```yaml -extends: - - eslint:recommended - - plugin:import/recommended -# the following lines do the trick - - plugin:import/typescript -settings: - import/resolver: - # You will also need to install and configure the TypeScript resolver - # See also https://github.com/import-js/eslint-import-resolver-typescript#configuration - typescript: true - node: true +```jsonc +{ + "extends": [ + "eslint:recommended", + "plugin:import/recommended", +// the following lines do the trick + "plugin:import/typescript", + ], + "settings": { + "import/resolver": { + // You will also need to install and configure the TypeScript resolver + // See also https://github.com/import-js/eslint-import-resolver-typescript#configuration + "typescript": true, + "node": true, + }, + }, +} ``` [`@typescript-eslint/parser`]: https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser @@ -177,6 +213,16 @@ You can reference resolvers in several ways (in order of precedence): - as a conventional `eslint-import-resolver` name, like `eslint-import-resolver-foo`: + ```jsonc +// .eslintrc +{ + "settings": { + // uses 'eslint-import-resolver-foo': + "import/resolver": "foo", + }, +} +``` + ```yaml # .eslintrc.yml settings: @@ -197,6 +243,15 @@ module.exports = { - with a full npm module name, like `my-awesome-npm-module`: +```jsonc +// .eslintrc +{ + "settings": { + "import/resolver": "my-awesome-npm-module", + }, +} +``` + ```yaml # .eslintrc.yml settings: @@ -292,11 +347,15 @@ In practice, this means rules other than [`no-unresolved`](./docs/rules/no-unres `no-unresolved` has its own [`ignore`](./docs/rules/no-unresolved.md#ignore) setting. -```yaml -settings: - import/ignore: - - \.coffee$ # fraught with parse errors - - \.(scss|less|css)$ # can't parse unprocessed CSS modules, either +```jsonc +{ + "settings": { + "import/ignore": [ + "\.coffee$", // fraught with parse errors + "\.(scss|less|css)$", // can't parse unprocessed CSS modules, either + ], + }, +} ``` ### `import/core-modules` @@ -315,10 +374,13 @@ import 'electron' // without extra config, will be flagged as unresolved! that would otherwise be unresolved. To avoid this, you may provide `electron` as a core module: -```yaml -# .eslintrc.yml -settings: - import/core-modules: [ electron ] +```jsonc +// .eslintrc +{ + "settings": { + "import/core-modules": ["electron"], + }, +} ``` In Electron's specific case, there is a shared config named `electron` @@ -351,11 +413,15 @@ dependency parser will require and use the map key as the parser instead of the configured ESLint parser. This is useful if you're inter-op-ing with TypeScript directly using webpack, for example: -```yaml -# .eslintrc.yml -settings: - import/parsers: - "@typescript-eslint/parser": [ .ts, .tsx ] +```jsonc +// .eslintrc +{ + "settings": { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"], + }, + }, +} ``` In this case, [`@typescript-eslint/parser`](https://www.npmjs.com/package/@typescript-eslint/parser) @@ -385,20 +451,28 @@ For long-lasting processes, like [`eslint_d`] or [`eslint-loader`], however, it' If you never use [`eslint_d`] or [`eslint-loader`], you may set the cache lifetime to `Infinity` and everything should be fine: -```yaml -# .eslintrc.yml -settings: - import/cache: - lifetime: ∞ # or Infinity +```jsonc +// .eslintrc +{ + "settings": { + "import/cache": { + "lifetime": "∞", // or Infinity, in a JS config + }, + }, +} ``` Otherwise, set some integer, and cache entries will be evicted after that many seconds have elapsed: -```yaml -# .eslintrc.yml -settings: - import/cache: - lifetime: 5 # 30 is the default +```jsonc +// .eslintrc +{ + "settings": { + "import/cache": { + "lifetime": 5, // 30 is the default + }, + }, +} ``` [`eslint_d`]: https://www.npmjs.com/package/eslint_d @@ -412,10 +486,13 @@ By default, any package referenced from [`import/external-module-folders`](#impo For example, if your packages in a monorepo are all in `@scope`, you can configure `import/internal-regex` like this -```yaml -# .eslintrc.yml -settings: - import/internal-regex: ^@scope/ +```jsonc +// .eslintrc +{ + "settings": { + "import/internal-regex": "^@scope/", + }, +} ``` ## SublimeLinter-eslint diff --git a/node_modules/eslint-plugin-import/RELEASE.md b/node_modules/eslint-plugin-import/RELEASE.md deleted file mode 100644 index 6c048dc093..0000000000 --- a/node_modules/eslint-plugin-import/RELEASE.md +++ /dev/null @@ -1,54 +0,0 @@ -# Release steps - -1. create a `release-[x.y.z]` branch from tip of `main` (or whatever release commit) - - ```bash - git checkout main && git pull && git checkout -b release-2.1.0 - ``` - -2. bump `package.json` + update CHANGELOG version links for all releasing packages (i.e., root + any resolvers) - - In changelog for core plugin, normally leave [Unreleased] but update its link at the bottom - to be rooted at the new version's tag, and add a link for the new version rooted - at last version's tag. - - ```markdown - [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...HEAD - [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 - ``` - - becomes - - ```markdown - [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.1.0...HEAD - [2.1.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...v2.1.0 - [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 - ``` - - Generally, don't use `npm version` for this because it creates a tag, which I normally - wait until signoff from contributors and actually `npm publish`-ing to snap the tag. - -3. create pull request from `release-[x.y.z]` into `release` branch - - I like this because it - - lists all commits in the release - - provides a commentary location to discuss the release - - builds in CI and provides test results - -4. iterate on feedback - - handle other issues - - merge more PRs - - fix issues in changelog/docs - -5. `npm publish` from `release-[x.y.z]` branch - - don't forget resolvers! - -6. tag commit (`v[x.y.z]`) - - again, not forgetting resolvers, if needed (`resolvers/[name]/v[t.u.v]`) - -7. merge `release-[x.y.z]` into `release` ( - - ideally fast-forward, probably with Git CLI instead of Github - -8. merge `release` into `main` - -Done! diff --git a/node_modules/eslint-plugin-import/config/flat/errors.js b/node_modules/eslint-plugin-import/config/flat/errors.js new file mode 100644 index 0000000000..98c19f824d --- /dev/null +++ b/node_modules/eslint-plugin-import/config/flat/errors.js @@ -0,0 +1,14 @@ +/** + * unopinionated config. just the things that are necessarily runtime errors + * waiting to happen. + * @type {Object} + */ +module.exports = { + rules: { + 'import/no-unresolved': 2, + 'import/named': 2, + 'import/namespace': 2, + 'import/default': 2, + 'import/export': 2, + }, +}; diff --git a/node_modules/eslint-plugin-import/config/flat/react.js b/node_modules/eslint-plugin-import/config/flat/react.js new file mode 100644 index 0000000000..0867471422 --- /dev/null +++ b/node_modules/eslint-plugin-import/config/flat/react.js @@ -0,0 +1,19 @@ +/** + * Adds `.jsx` as an extension, and enables JSX parsing. + * + * Even if _you_ aren't using JSX (or .jsx) directly, if your dependencies + * define jsnext:main and have JSX internally, you may run into problems + * if you don't enable these settings at the top level. + */ +module.exports = { + settings: { + 'import/extensions': ['.js', '.jsx', '.mjs', '.cjs'], + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, +}; diff --git a/node_modules/eslint-plugin-import/config/flat/recommended.js b/node_modules/eslint-plugin-import/config/flat/recommended.js new file mode 100644 index 0000000000..11bc1f52a4 --- /dev/null +++ b/node_modules/eslint-plugin-import/config/flat/recommended.js @@ -0,0 +1,26 @@ +/** + * The basics. + * @type {Object} + */ +module.exports = { + rules: { + // analysis/correctness + 'import/no-unresolved': 'error', + 'import/named': 'error', + 'import/namespace': 'error', + 'import/default': 'error', + 'import/export': 'error', + + // red flags (thus, warnings) + 'import/no-named-as-default': 'warn', + 'import/no-named-as-default-member': 'warn', + 'import/no-duplicates': 'warn', + }, + + // need all these for parsing dependencies (even if _your_ code doesn't need + // all of them) + languageOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, +}; diff --git a/node_modules/eslint-plugin-import/config/flat/warnings.js b/node_modules/eslint-plugin-import/config/flat/warnings.js new file mode 100644 index 0000000000..e788ff9cde --- /dev/null +++ b/node_modules/eslint-plugin-import/config/flat/warnings.js @@ -0,0 +1,11 @@ +/** + * more opinionated config. + * @type {Object} + */ +module.exports = { + rules: { + 'import/no-named-as-default': 1, + 'import/no-named-as-default-member': 1, + 'import/no-duplicates': 1, + }, +}; diff --git a/node_modules/eslint-plugin-import/config/react.js b/node_modules/eslint-plugin-import/config/react.js index 68555512d7..1ae8e1a51a 100644 --- a/node_modules/eslint-plugin-import/config/react.js +++ b/node_modules/eslint-plugin-import/config/react.js @@ -6,7 +6,6 @@ * if you don't enable these settings at the top level. */ module.exports = { - settings: { 'import/extensions': ['.js', '.jsx'], }, @@ -14,5 +13,4 @@ module.exports = { parserOptions: { ecmaFeatures: { jsx: true }, }, - }; diff --git a/node_modules/eslint-plugin-import/config/typescript.js b/node_modules/eslint-plugin-import/config/typescript.js index ff7d0795c8..d5eb57a465 100644 --- a/node_modules/eslint-plugin-import/config/typescript.js +++ b/node_modules/eslint-plugin-import/config/typescript.js @@ -9,7 +9,7 @@ // `.ts`/`.tsx`/`.js`/`.jsx` implementation. const typeScriptExtensions = ['.ts', '.cts', '.mts', '.tsx']; -const allExtensions = [...typeScriptExtensions, '.js', '.jsx']; +const allExtensions = [...typeScriptExtensions, '.js', '.jsx', '.mjs', '.cjs']; module.exports = { settings: { diff --git a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md index 35ae9df516..de554148ee 100644 --- a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md +++ b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md @@ -1,5 +1,7 @@ # import/dynamic-import-chunkname +💡 This rule is manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). + This rule reports any dynamic imports without a webpackChunkName specified in a leading block comment in the proper format. @@ -15,7 +17,8 @@ You can also configure the regex format you'd like to accept for the webpackChun { "dynamic-import-chunkname": [2, { importFunctions: ["dynamicImport"], - webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+" + webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+", + allowEmpty: false }] } ``` @@ -55,6 +58,13 @@ import( // webpackChunkName: "someModule" 'someModule', ); + +// chunk names are disallowed when eager mode is set +import( + /* webpackMode: "eager" */ + /* webpackChunkName: "someModule" */ + 'someModule', +) ``` ### valid @@ -87,6 +97,38 @@ The following patterns are valid: ); ``` +### `allowEmpty: true` + +If you want to allow dynamic imports without a webpackChunkName, you can set `allowEmpty: true` in the rule config. This will allow dynamic imports without a leading comment, or with a leading comment that does not contain a webpackChunkName. + +Given `{ "allowEmpty": true }`: + + +### valid + +The following patterns are valid: + +```javascript +import('someModule'); + +import( + /* webpackChunkName: "someModule" */ + 'someModule', +); +``` + +### invalid + +The following patterns are invalid: + +```javascript +// incorrectly formatted comment +import( + /*webpackChunkName:"someModule"*/ + 'someModule', +); +``` + ## When Not To Use It If you don't care that webpack will autogenerate chunk names and may blow up browser caches and bundle size reports. diff --git a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md index 85821d8afe..ad83c535f8 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md @@ -1,6 +1,6 @@ # import/no-empty-named-blocks -🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions). +🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). diff --git a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md index 547e5c2e57..848d5bb0da 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md @@ -32,7 +32,7 @@ You can also use an array of globs instead of literal booleans: "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js"]}] ``` -When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted matches a single glob in the array, and `false` otherwise. +When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted (i.e. not the imported file/module) matches a single glob in the array, and `false` otherwise. There are 2 boolean options to opt into checking extra imports that are normally ignored: `includeInternal`, which enables the checking of internal modules, and `includeTypes`, which enables checking of type imports in TypeScript. 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 53c2479272..359c341ea0 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 @@ -29,8 +29,9 @@ This rule takes the following option: - **`missingExports`**: if `true`, files without any exports are reported (defaults to `false`) - **`unusedExports`**: if `true`, exports without any static usage within other modules are reported (defaults to `false`) - - `src`: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided - - `ignoreExports`: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) + - **`ignoreUnusedTypeExports`**: if `true`, TypeScript type exports without any static usage within other modules are reported (defaults to `false` and has no effect unless `unusedExports` is `true`) + - **`src`**: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided + - **`ignoreExports`**: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) ### Example for missing exports @@ -116,6 +117,16 @@ export function doAnything() { export default 5 // will not be reported ``` +### Unused exports with `ignoreUnusedTypeExports` set to `true` + +The following will not be reported: + +```ts +export type Foo = {}; // will not be reported +export interface Foo = {}; // will not be reported +export enum Foo {}; // will not be reported +``` + #### Important Note Exports from files listed as a main file (`main`, `browser`, or `bin` fields in `package.json`) will be ignored by default. This only applies if the `package.json` is not set to `private: true` diff --git a/node_modules/eslint-plugin-import/docs/rules/order.md b/node_modules/eslint-plugin-import/docs/rules/order.md index 2335699e6c..67849bb7ed 100644 --- a/node_modules/eslint-plugin-import/docs/rules/order.md +++ b/node_modules/eslint-plugin-import/docs/rules/order.md @@ -77,6 +77,25 @@ import foo from './foo'; var path = require('path'); ``` +## Limitations of `--fix` + +Unbound imports are assumed to have side effects, and will never be moved/reordered. This can cause other imports to get "stuck" around them, and the fix to fail. + +```javascript +import b from 'b' +import 'format.css'; // This will prevent --fix from working. +import a from 'a' +``` + +As a workaround, move unbound imports to be entirely above or below bound ones. + +```javascript +import 'format1.css'; // OK +import b from 'b' +import a from 'a' +import 'format2.css'; // OK +``` + ## Options This rule supports the following options: @@ -174,7 +193,7 @@ Example: ### `pathGroupsExcludedImportTypes: [array]` This defines import types that are not handled by configured pathGroups. -This is mostly needed when you want to handle path groups that look like external imports. +If you have added path groups with patterns that look like `"builtin"` or `"external"` imports, you have to remove this group (`"builtin"` and/or `"external"`) from the default exclusion list (e.g., `["builtin", "external", "object"]`, etc) to sort these path groups correctly. Example: @@ -193,29 +212,7 @@ Example: } ``` -You can also use `patterns`(e.g., `react`, `react-router-dom`, etc). - -Example: - -```json -{ - "import/order": [ - "error", - { - "pathGroups": [ - { - "pattern": "react", - "group": "builtin", - "position": "before" - } - ], - "pathGroupsExcludedImportTypes": ["react"] - } - ] -} -``` - -The default value is `["builtin", "external", "object"]`. +[Import Type](https://github.com/import-js/eslint-plugin-import/blob/HEAD/src/core/importType.js#L90) is resolved as a fixed string in predefined set, it can't be a `patterns`(e.g., `react`, `react-router-dom`, etc). See [#2156] for details. ### `newlines-between: [ignore|always|always-and-inside-groups|never]` diff --git a/node_modules/eslint-plugin-import/lib/ExportMap.js b/node_modules/eslint-plugin-import/lib/ExportMap.js deleted file mode 100644 index ad841b8593..0000000000 --- a/node_modules/eslint-plugin-import/lib/ExportMap.js +++ /dev/null @@ -1,856 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();exports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -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 - */this.dependencies = new Set(); /** - * dependencies of this module that are not explicitly re-exported - * @type {Map} from path = () => ExportMap - */this.imports = new Map();this.errors = []; /** - * type {'ambiguous' | 'Module' | 'Script'} - */this.parseGoal = 'ambiguous';}_createClass(ExportMap, [{ key: 'has', /** - * Note that this does not check explicitly re-exported names for existence - * in the base namespace, but it will expand all `export * from '...'` exports - * if not found in the explicit namespace. - * @param {string} name - * @return {Boolean} true if `name` is exported by this module. - */value: function () {function has(name) {if (this.namespace.has(name)) {return true;}if (this.reexports.has(name)) {return true;} // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value;var innerMap = dep(); // todo: report as unresolved? - if (!innerMap) {continue;}if (innerMap.has(name)) {return true;}}} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}}return false;}return has;}() /** - * ensure that imported name fully resolves. - * @param {string} name - * @return {{ found: boolean, path: ExportMap[] }} - */ }, { key: 'hasDeep', value: function () {function hasDeep(name) {if (this.namespace.has(name)) {return { found: true, path: [this] };}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' - if (imported == null) {return { found: true, path: [this] };} // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) {return { found: false, path: [this] };}var deep = imported.hasDeep(reexports.local);deep.path.unshift(this);return deep;} // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value;var innerMap = dep();if (innerMap == null) {return { found: true, path: [this] };} // todo: report as unresolved? - if (!innerMap) {continue;} // safeguard against cycles - if (innerMap.path === this.path) {continue;}var innerValue = innerMap.hasDeep(name);if (innerValue.found) {innerValue.path.unshift(this);return innerValue;}}} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}}}return { found: false, path: [this] };}return hasDeep;}() }, { key: 'get', value: function () {function get(name) {if (this.namespace.has(name)) {return this.namespace.get(name);}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' - if (imported == null) {return null;} // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) {return undefined;}return imported.get(reexports.local);} // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value;var innerMap = dep(); // todo: report as unresolved? - if (!innerMap) {continue;} // safeguard against cycles - if (innerMap.path === this.path) {continue;}var innerValue = innerMap.get(name);if (innerValue !== undefined) {return innerValue;}}} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}}return undefined;}return get;}() }, { key: 'forEach', value: function () {function forEach(callback, thisArg) {var _this = this;this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);});this.reexports.forEach(function (reexports, name) {var reexported = reexports.getImport(); // can't look up meta for ignored re-exports (#348) - callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this);});this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;}d.forEach(function (v, n) {if (n !== 'default') {callback.call(thisArg, v, n, _this);}});});}return forEach;}() // todo: keys, values, entries? - }, { key: 'reportErrors', value: function () {function reportErrors(context, declaration) {var msg = this.errors.map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}).join(', ');context.report({ node: declaration.source, message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) });}return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has - }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}(); /** - * parse docs from the first node that has leading comments - */exports['default'] = ExportMap;function captureDoc(source, docStyleParsers) {var metadata = {}; // 'some' short-circuits on first 'true' - for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) {try {var leadingComments = void 0; // n.leadingComments is legacy `attachComments` behavior - if ('leadingComments' in n) {leadingComments = n.leadingComments;} else if (n.range) {leadingComments = source.getCommentsBefore(n);}if (!leadingComments || leadingComments.length === 0) {return false;}for (var name in docStyleParsers) {var doc = docStyleParsers[name](leadingComments);if (doc) {metadata.doc = doc;}}return true;} catch (err) {return false;}});return metadata;}var availableDocStyleParsers = { jsdoc: captureJsDoc, tomdoc: captureTomDoc }; /** - * parse JSDoc from leading comments - * @param {object[]} comments - * @return {{ doc: object }} - */function captureJsDoc(comments) {var doc = void 0; // capture XSDoc - comments.forEach(function (comment) {// skip non-block comments - if (comment.type !== 'Block') {return;}try {doc = _doctrine2['default'].parse(comment.value, { unwrap: true });} catch (err) {/* don't care, for now? maybe add to `errors?` */}});return doc;} /** - * parse TomDoc section from comments - */function captureTomDoc(comments) {// collect lines up to first paragraph break - var lines = [];for (var i = 0; i < comments.length; i++) {var comment = comments[i];if (comment.value.match(/^\s*$/)) {break;}lines.push(comment.value.trim());} // return doctrine-like object - var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/);if (statusMatch) {return { description: statusMatch[2], tags: [{ title: statusMatch[1].toLowerCase(), description: statusMatch[2] }] };}}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);ExportMap.get = function (source, context) {var path = (0, _resolve2['default'])(source, context);if (path == null) {return null;}return ExportMap['for'](childContext(path, context));};ExportMap['for'] = function (context) {var path = context.path;var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex');var exportMap = exportCache.get(cacheKey); // return cached ignore - if (exportMap === null) {return null;}var stats = _fs2['default'].statSync(path);if (exportMap != null) {// date equality check - if (exportMap.mtime - stats.mtime === 0) {return exportMap;} // future: check content equality? - } // check valid extensions first - 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) {log('ignored path due to ambiguous parse:', path);exportCache.set(cacheKey, 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, dynamic: true }]) });}(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;}() });var unambiguouslyESM = unambiguous.isModule(ast);if (!unambiguouslyESM && !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 || s.exported.value, addNamespace(exportMeta, s.source.value));return;case 'ExportSpecifier':if (!n.source) {m.namespace.set(s.exported.name || s.exported.value, 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 captureDependencyWithSpecifiers(n) {// import type { Foo } (TS and Flow); import typeof { Foo } (Flow) - var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and - // shouldn't be considered to be just importing types - var specifiersOnlyImportingTypes = n.specifiers.length > 0;var importedSpecifiers = new Set();n.specifiers.forEach(function (specifier) {if (specifier.type === 'ImportSpecifier') {importedSpecifiers.add(specifier.imported.name || specifier.imported.value);} else if (supportedImportTypes.has(specifier.type)) {importedSpecifiers.add(specifier.type);} // import { type Foo } (Flow); import { typeof Foo } (Flow) - specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && (specifier.importKind === 'type' || specifier.importKind === 'typeof');});captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, importedSpecifiers);}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(context) {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');} // eslint-disable-line import/no-extraneous-dependencies - 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') {captureDependencyWithSpecifiers(n);var ns = n.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';});if (ns) {namespaces.set(ns.local.name, n.source.value);}return;}if (n.type === 'ExportNamedDeclaration') {captureDependencyWithSpecifiers(n); // capture declaration - if (n.declaration != null) {switch (n.declaration.type) {case 'FunctionDeclaration':case 'ClassDeclaration':case 'TypeAlias': // flowtype with babel-eslint parser - case 'InterfaceDeclaration':case 'DeclareFunction':case 'TSDeclareFunction':case 'TSEnumDeclaration':case 'TSTypeAliasDeclaration':case 'TSInterfaceDeclaration':case 'TSAbstractClassDeclaration':case 'TSModuleDeclaration':m.namespace.set(n.declaration.id.name, captureDoc(source, docStyleParsers, n));break;case 'VariableDeclaration':n.declaration.declarations.forEach(function (d) {recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, d, n));});});break;default:}}n.specifiers.forEach(function (s) {return processSpecifier(s, n, m);});}var exports = ['TSExportAssignment'];if (isEsModuleInteropTrue) {exports.push('TSNamespaceExportDeclaration');} // This doesn't declare anything, but changes what's being exported. - if ((0, _arrayIncludes2['default'])(exports, n.type)) {var exportedName = n.type === 'TSNamespaceExportDeclaration' ? (n.id || n.name).name : n.expression && n.expression.name || n.expression.id && n.expression.id.name || null;var declTypes = ['VariableDeclaration', 'ClassDeclaration', 'TSDeclareFunction', 'TSEnumDeclaration', 'TSTypeAliasDeclaration', 'TSInterfaceDeclaration', 'TSAbstractClassDeclaration', 'TSModuleDeclaration'];var exportedDecls = ast.body.filter(function (_ref2) {var type = _ref2.type,id = _ref2.id,declarations = _ref2.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && (id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));});if (exportedDecls.length === 0) {// Export is not referencing any local declaration, must be re-exporting - m.namespace.set('default', captureDoc(source, docStyleParsers, n));return;}if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && !m.namespace.has('default') // and default isn't added already - ) {m.namespace.set('default', {}); // add default export - }exportedDecls.forEach(function (decl) {if (decl.type === 'TSModuleDeclaration') {if (decl.body && decl.body.type === 'TSModuleDeclaration') {m.namespace.set(decl.body.id.name, captureDoc(source, docStyleParsers, decl.body));} else if (decl.body && decl.body.body) {decl.body.body.forEach(function (moduleBlockNode) {// Export-assignment exports all members in the namespace, - // explicitly exported or not. - var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? moduleBlockNode.declaration : moduleBlockNode;if (!namespaceDecl) {// TypeScript can check this for us; we needn't - } else if (namespaceDecl.type === 'VariableDeclaration') {namespaceDecl.declarations.forEach(function (d) {return recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, decl, namespaceDecl, moduleBlockNode));});});} else {m.namespace.set(namespaceDecl.id.name, captureDoc(source, docStyleParsers, moduleBlockNode));}});}} else {// Export as default - m.namespace.set('default', captureDoc(source, docStyleParsers, decl));}});}});if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && m.namespace.size > 0 // anything is exported - && !m.namespace.has('default') // and default isn't added already - ) {m.namespace.set('default', {}); // add default export - }if (unambiguouslyESM) {m.parseGoal = 'Module';}return m;}; /** - * The creation of this closure is isolated from other scopes - * to avoid over-retention of unrelated variables, which has - * caused memory leaks. See #1266. - */function thunkFor(p, context) {return function () {return ExportMap['for'](childContext(p, context));};} /** - * Traverse a pattern/identifier node, calling 'callback' - * for each leaf identifier. - * @param {node} pattern - * @param {Function} callback - * @return {void} - */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case - callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) {if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') {callback(p.argument);return;}recursivePatternCapture(p.value, callback);});break;case 'ArrayPattern':pattern.elements.forEach(function (element) {if (element == null) {return;}if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') {callback(element.argument);return;}recursivePatternCapture(element, callback);});break;case 'AssignmentPattern':callback(pattern.left);break;default:}}var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** - * don't hold full context object in memory, just grab what we need. - * also calculate a cacheKey, where parts of the cacheKey hash are memoized - */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) {settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex');prevSettings = JSON.stringify(settings);}if (JSON.stringify(parserOptions) !== prevParserOptions) {parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex');prevParserOptions = JSON.stringify(parserOptions);}return { cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), settings: settings, parserOptions: parserOptions, parserPath: parserPath, path: path };} /** - * sometimes legacy support isn't _that_ hard... right? - */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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInRzIiwibG9nIiwiZXhwb3J0Q2FjaGUiLCJNYXAiLCJ0c2NvbmZpZ0NhY2hlIiwiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiLCJjYXB0dXJlRG9jIiwiZG9jU3R5bGVQYXJzZXJzIiwibWV0YWRhdGEiLCJub2RlcyIsInNvbWUiLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwiZG9jIiwiZXJyIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJjYXB0dXJlSnNEb2MiLCJ0b21kb2MiLCJjYXB0dXJlVG9tRG9jIiwiY29tbWVudHMiLCJjb21tZW50IiwidHlwZSIsImRvY3RyaW5lIiwicGFyc2UiLCJ1bndyYXAiLCJsaW5lcyIsImkiLCJtYXRjaCIsInB1c2giLCJ0cmltIiwic3RhdHVzTWF0Y2giLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwic3VwcG9ydGVkSW1wb3J0VHlwZXMiLCJjaGlsZENvbnRleHQiLCJjYWNoZUtleSIsImRpZ2VzdCIsImV4cG9ydE1hcCIsInN0YXRzIiwiZnMiLCJzdGF0U3luYyIsIm10aW1lIiwic2V0IiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwidGVzdCIsIm0iLCJpc0VzTW9kdWxlSW50ZXJvcFRydWUiLCJpc0VzTW9kdWxlSW50ZXJvcCIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiaGFzRHluYW1pY0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInAiLCJyZW1vdGVQYXRoIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwiYWRkIiwiZ2V0dGVyIiwidGh1bmtGb3IiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIkNhbGxFeHByZXNzaW9uIiwiY2FsbGVlIiwiYXJndW1lbnRzIiwidW5hbWJpZ3VvdXNseUVTTSIsImlzTW9kdWxlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsInN0eWxlIiwiYyIsInQiLCJuYW1lc3BhY2VzIiwicmVzb2x2ZSIsInJlbGF0aXZlIiwicmVzb2x2ZUltcG9ydCIsInJwIiwiZ2V0TmFtZXNwYWNlIiwiaWRlbnRpZmllciIsImFkZE5hbWVzcGFjZSIsIm9iamVjdCIsIm5zZm4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb2Nlc3NTcGVjaWZpZXIiLCJzIiwibnNvdXJjZSIsImV4cG9ydE1ldGEiLCJleHBvcnRlZCIsImNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMiLCJkZWNsYXJhdGlvbklzVHlwZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsImNhcHR1cmVEZXBlbmRlbmN5IiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJkZWNsYXJhdGlvbk1ldGFkYXRhIiwiZXhpc3RpbmciLCJtYWtlU291cmNlQ29kZSIsInJlYWRUc0NvbmZpZyIsInRzY29uZmlnSW5mbyIsImN3ZCIsInBhcnNlck9wdGlvbnMiLCJ0c2NvbmZpZ1Jvb3REaXIiLCJwcm9jZXNzIiwiZ2V0RW52Iiwia2V5IiwiZW52IiwidHNDb25maWdQYXRoIiwicmVxdWlyZSIsImNvbmZpZ0ZpbGUiLCJyZWFkQ29uZmlnRmlsZSIsInN5cyIsInJlYWRGaWxlIiwicGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQiLCJjb25maWciLCJ0c0NvbmZpZyIsIm9wdGlvbnMiLCJlc01vZHVsZUludGVyb3AiLCJib2R5IiwiZXhwb3J0S2luZCIsIm5zIiwiZmluZCIsImlkIiwiZXhwb3J0cyIsImV4cG9ydGVkTmFtZSIsImV4cHJlc3Npb24iLCJkZWNsVHlwZXMiLCJleHBvcnRlZERlY2xzIiwiZmlsdGVyIiwiZGVjbCIsIm1vZHVsZUJsb2NrTm9kZSIsIm5hbWVzcGFjZURlY2wiLCJwYXR0ZXJuIiwicHJvcGVydGllcyIsImFyZ3VtZW50IiwiZWxlbWVudHMiLCJlbGVtZW50IiwibGVmdCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXJzZXJQYXRoIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0cmluZyIsInRleHQiLCJTb3VyY2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFlLEVBQUVELFVBQUYsRUFBUXJHLFFBQVIsRUFBZixDQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiJFeHBvcnRNYXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHBhcnNlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGFyc2UnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBpc0lnbm9yZWQsIHsgaGFzVmFsaWRFeHRlbnNpb24gfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5cbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0ICogYXMgdW5hbWJpZ3VvdXMgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5cbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5cbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5cbmxldCB0cztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IHRzY29uZmlnQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcCB7XG4gIGNvbnN0cnVjdG9yKHBhdGgpIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMubmFtZXNwYWNlID0gbmV3IE1hcCgpO1xuICAgIC8vIHRvZG86IHJlc3RydWN0dXJlIHRvIGtleSBvbiBwYXRoLCB2YWx1ZSBpcyByZXNvbHZlciArIG1hcCBvZiBuYW1lc1xuICAgIHRoaXMucmVleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIHN0YXItZXhwb3J0c1xuICAgICAqIEB0eXBlIHtTZXR9IG9mICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXB9IGZyb20gcGF0aCA9ICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlIGRvY3MgZnJvbSB0aGUgZmlyc3Qgbm9kZSB0aGF0IGhhcyBsZWFkaW5nIGNvbW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIC4uLm5vZGVzKSB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge307XG5cbiAgLy8gJ3NvbWUnIHNob3J0LWNpcmN1aXRzIG9uIGZpcnN0ICd0cnVlJ1xuICBub2Rlcy5zb21lKChuKSA9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGxlYWRpbmdDb21tZW50cztcblxuICAgICAgLy8gbi5sZWFkaW5nQ29tbWVudHMgaXMgbGVnYWN5IGBhdHRhY2hDb21tZW50c2AgYmVoYXZpb3JcbiAgICAgIGlmICgnbGVhZGluZ0NvbW1lbnRzJyBpbiBuKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IG4ubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgfSBlbHNlIGlmIChuLnJhbmdlKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IHNvdXJjZS5nZXRDb21tZW50c0JlZm9yZShuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsZWFkaW5nQ29tbWVudHMgfHwgbGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRvY1N0eWxlUGFyc2Vycykge1xuICAgICAgICBjb25zdCBkb2MgPSBkb2NTdHlsZVBhcnNlcnNbbmFtZV0obGVhZGluZ0NvbW1lbnRzKTtcbiAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgIG1ldGFkYXRhLmRvYyA9IGRvYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuY29uc3QgYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzID0ge1xuICBqc2RvYzogY2FwdHVyZUpzRG9jLFxuICB0b21kb2M6IGNhcHR1cmVUb21Eb2MsXG59O1xuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRlZEltcG9ydFR5cGVzID0gbmV3IFNldChbJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLCAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJ10pO1xuXG5FeHBvcnRNYXAuZ2V0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpO1xuICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgcmV0dXJuIEV4cG9ydE1hcC5mb3IoY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpKTtcbn07XG5cbkV4cG9ydE1hcC5mb3IgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgY2FjaGVLZXkgPSBjb250ZXh0LmNhY2hlS2V5IHx8IGhhc2hPYmplY3QoY29udGV4dCkuZGlnZXN0KCdoZXgnKTtcbiAgbGV0IGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChjYWNoZUtleSk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aCk7XG4gIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICBpZiAoZXhwb3J0TWFwLm10aW1lIC0gc3RhdHMubXRpbWUgPT09IDApIHtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgfVxuICAgIC8vIGZ1dHVyZTogY2hlY2sgY29udGVudCBlcXVhbGl0eT9cbiAgfVxuXG4gIC8vIGNoZWNrIHZhbGlkIGV4dGVuc2lvbnMgZmlyc3RcbiAgaWYgKCFoYXNWYWxpZEV4dGVuc2lvbihwYXRoLCBjb250ZXh0KSkge1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICBpZiAoaXNJZ25vcmVkKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGlnbm9yZSBzZXR0aW5nczonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSB1bmFtYmlndW91cyBtb2R1bGVzXG4gIGlmICghdW5hbWJpZ3VvdXMudGVzdChjb250ZW50KSkge1xuICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbG9nKCdjYWNoZSBtaXNzJywgY2FjaGVLZXksICdmb3IgcGF0aCcsIHBhdGgpO1xuICBleHBvcnRNYXAgPSBFeHBvcnRNYXAucGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG5cbiAgLy8gYW1iaWd1b3VzIG1vZHVsZXMgcmV0dXJuIG51bGxcbiAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGFtYmlndW91cyBwYXJzZTonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwb3J0TWFwLm10aW1lID0gc3RhdHMubXRpbWU7XG5cbiAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICByZXR1cm4gZXhwb3J0TWFwO1xufTtcblxuRXhwb3J0TWFwLnBhcnNlID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgbSA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gIGNvbnN0IGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSA9IGlzRXNNb2R1bGVJbnRlcm9wKCk7XG5cbiAgbGV0IGFzdDtcbiAgbGV0IHZpc2l0b3JLZXlzO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpO1xuICAgIGFzdCA9IHJlc3VsdC5hc3Q7XG4gICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG0uZXJyb3JzLnB1c2goZXJyKTtcbiAgICByZXR1cm4gbTsgLy8gY2FuJ3QgY29udGludWVcbiAgfVxuXG4gIG0udmlzaXRvcktleXMgPSB2aXNpdG9yS2V5cztcblxuICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBwcm9jZXNzRHluYW1pY0ltcG9ydChzb3VyY2UpIHtcbiAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgaWYgKHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZCgnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgbS5pbXBvcnRzLnNldChwLCB7XG4gICAgICBnZXR0ZXIsXG4gICAgICBkZWNsYXJhdGlvbnM6IG5ldyBTZXQoW3tcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgIHZhbHVlOiBzb3VyY2UudmFsdWUsXG4gICAgICAgICAgbG9jOiBzb3VyY2UubG9jLFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMsXG4gICAgICAgIGR5bmFtaWM6IHRydWUsXG4gICAgICB9XSksXG4gICAgfSk7XG4gIH1cblxuICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgSW1wb3J0RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBwcm9jZXNzRHluYW1pY0ltcG9ydChub2RlLnNvdXJjZSk7XG4gICAgfSxcbiAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHVuYW1iaWd1b3VzbHlFU00gPSB1bmFtYmlndW91cy5pc01vZHVsZShhc3QpO1xuICBpZiAoIXVuYW1iaWd1b3VzbHlFU00gJiYgIWhhc0R5bmFtaWNJbXBvcnRzKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZG9jc3R5bGUgPSBjb250ZXh0LnNldHRpbmdzICYmIGNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgY29uc3QgZG9jU3R5bGVQYXJzZXJzID0ge307XG4gIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgZG9jU3R5bGVQYXJzZXJzW3N0eWxlXSA9IGF2YWlsYWJsZURvY1N0eWxlUGFyc2Vyc1tzdHlsZV07XG4gIH0pO1xuXG4gIC8vIGF0dGVtcHQgdG8gY29sbGVjdCBtb2R1bGUgZG9jXG4gIGlmIChhc3QuY29tbWVudHMpIHtcbiAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgaWYgKGMudHlwZSAhPT0gJ0Jsb2NrJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICBpZiAoZG9jLnRhZ3Muc29tZSgodCkgPT4gdC50aXRsZSA9PT0gJ21vZHVsZScpKSB7XG4gICAgICAgICAgbS5kb2MgPSBkb2M7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiByZW1vdGVQYXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUucmVsYXRpdmUodmFsdWUsIHBhdGgsIGNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gcmVtb3RlUGF0aCh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihjaGlsZENvbnRleHQocnAsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5hbWVzcGFjZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhpZGVudGlmaWVyLm5hbWUpKSB7IHJldHVybjsgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlSW1wb3J0KG5hbWVzcGFjZXMuZ2V0KGlkZW50aWZpZXIubmFtZSkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGROYW1lc3BhY2Uob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IGdldE5hbWVzcGFjZShpZGVudGlmaWVyKTtcbiAgICBpZiAobnNmbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ25hbWVzcGFjZScsIHsgZ2V0OiBuc2ZuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzU3BlY2lmaWVyKHMsIG4sIG0pIHtcbiAgICBjb25zdCBuc291cmNlID0gbi5zb3VyY2UgJiYgbi5zb3VyY2UudmFsdWU7XG4gICAgY29uc3QgZXhwb3J0TWV0YSA9IHt9O1xuICAgIGxldCBsb2NhbDtcblxuICAgIHN3aXRjaCAocy50eXBlKSB7XG4gICAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuc291cmNlKSB7IHJldHVybjsgfVxuICAgICAgICBsb2NhbCA9ICdkZWZhdWx0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgICBnZXQoKSB7IHJldHVybiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpOyB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ0V4cG9ydEFsbERlY2xhcmF0aW9uJzpcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSB8fCBzLmV4cG9ydGVkLnZhbHVlLCBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgcy5zb3VyY2UudmFsdWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnRXhwb3J0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuLnNvdXJjZSkge1xuICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChzLmV4cG9ydGVkLm5hbWUgfHwgcy5leHBvcnRlZC52YWx1ZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMubG9jYWwpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIC8vIGVsc2UgZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9jYWwgPSBzLmxvY2FsLm5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHRvZG86IEpTRG9jXG4gICAgbS5yZWV4cG9ydHMuc2V0KHMuZXhwb3J0ZWQubmFtZSwgeyBsb2NhbCwgZ2V0SW1wb3J0OiAoKSA9PiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FwdHVyZURlcGVuZGVuY3lXaXRoU3BlY2lmaWVycyhuKSB7XG4gICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpOyBpbXBvcnQgdHlwZW9mIHsgRm9vIH0gKEZsb3cpXG4gICAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAgIC8vIGltcG9ydCAnLi9mb28nIG9yIGltcG9ydCB7fSBmcm9tICcuL2ZvbycgKGJvdGggMCBzcGVjaWZpZXJzKSBpcyBhIHNpZGUgZWZmZWN0IGFuZFxuICAgIC8vIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIHRvIGJlIGp1c3QgaW1wb3J0aW5nIHR5cGVzXG4gICAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMuYWRkKHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnRlZEltcG9ydFR5cGVzLmhhcyhzcGVjaWZpZXIudHlwZSkpIHtcbiAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpOyBpbXBvcnQgeyB0eXBlb2YgRm9vIH0gKEZsb3cpXG4gICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgICAmJiAoc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpO1xuICAgIH0pO1xuICAgIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIGltcG9ydGVkU3BlY2lmaWVycyk7XG4gIH1cblxuICBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeSh7IHNvdXJjZSB9LCBpc09ubHlJbXBvcnRpbmdUeXBlcywgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICAgIHNvdXJjZTogeyB2YWx1ZTogc291cmNlLnZhbHVlLCBsb2M6IHNvdXJjZS5sb2MgfSxcbiAgICAgIGlzT25seUltcG9ydGluZ1R5cGVzLFxuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZyA9IG0uaW1wb3J0cy5nZXQocCk7XG4gICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3RpbmcuZ2V0dGVyO1xuICAgIH1cblxuICAgIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICAgIG0uaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICAgIHJldHVybiBnZXR0ZXI7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuXG4gIGZ1bmN0aW9uIHJlYWRUc0NvbmZpZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgICAgY3dkOiBjb250ZXh0LnBhcnNlck9wdGlvbnMgJiYgY29udGV4dC5wYXJzZXJPcHRpb25zLnRzY29uZmlnUm9vdERpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgZ2V0RW52OiAoa2V5KSA9PiBwcm9jZXNzLmVudltrZXldLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgICAgaWYgKCF0cykgeyB0cyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQnKTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgICAgY29uZmlnRmlsZS5jb25maWcsXG4gICAgICAgICAgdHMuc3lzLFxuICAgICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gICAgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgdHNDb25maWcgPSB0c2NvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRzQ29uZmlnID0gcmVhZFRzQ29uZmlnKGNvbnRleHQpO1xuICAgICAgdHNjb25maWdDYWNoZS5zZXQoY2FjaGVLZXksIHRzQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHNDb25maWcgJiYgdHNDb25maWcub3B0aW9ucyA/IHRzQ29uZmlnLm9wdGlvbnMuZXNNb2R1bGVJbnRlcm9wIDogZmFsc2U7XG4gIH1cblxuICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKTtcbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgbi5kZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBleHBvcnRNZXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBnZXR0ZXIgPSBjYXB0dXJlRGVwZW5kZW5jeShuLCBuLmV4cG9ydEtpbmQgPT09ICd0eXBlJyk7XG4gICAgICBpZiAoZ2V0dGVyKSB7IG0uZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICBpZiAobi5leHBvcnRlZCkge1xuICAgICAgICBwcm9jZXNzU3BlY2lmaWVyKG4sIG4uZXhwb3J0ZWQsIG0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydFxuICAgIGlmIChuLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIGNvbnN0IG5zID0gbi5zcGVjaWZpZXJzLmZpbmQoKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgaWYgKG5zKSB7XG4gICAgICAgIG5hbWVzcGFjZXMuc2V0KG5zLmxvY2FsLm5hbWUsIG4uc291cmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIC8vIGNhcHR1cmUgZGVjbGFyYXRpb25cbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChuLmRlY2xhcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUeXBlQWxpYXMnOiAvLyBmbG93dHlwZSB3aXRoIGJhYmVsLWVzbGludCBwYXJzZXJcbiAgICAgICAgICBjYXNlICdJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU0RlY2xhcmVGdW5jdGlvbic6XG4gICAgICAgICAgY2FzZSAnVFNFbnVtRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChuLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG4pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgbi5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICBkLmlkLFxuICAgICAgICAgICAgICAgIChpZCkgPT4gbS5uYW1lc3BhY2Uuc2V0KGlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIGQsIG4pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBuLCBtKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwb3J0cyA9IFsnVFNFeHBvcnRBc3NpZ25tZW50J107XG4gICAgaWYgKGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSkge1xuICAgICAgZXhwb3J0cy5wdXNoKCdUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBkb2Vzbid0IGRlY2xhcmUgYW55dGhpbmcsIGJ1dCBjaGFuZ2VzIHdoYXQncyBiZWluZyBleHBvcnRlZC5cbiAgICBpZiAoaW5jbHVkZXMoZXhwb3J0cywgbi50eXBlKSkge1xuICAgICAgY29uc3QgZXhwb3J0ZWROYW1lID0gbi50eXBlID09PSAnVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbidcbiAgICAgICAgPyAobi5pZCB8fCBuLm5hbWUpLm5hbWVcbiAgICAgICAgOiBuLmV4cHJlc3Npb24gJiYgbi5leHByZXNzaW9uLm5hbWUgfHwgbi5leHByZXNzaW9uLmlkICYmIG4uZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgICBjb25zdCBkZWNsVHlwZXMgPSBbXG4gICAgICAgICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNEZWNsYXJlRnVuY3Rpb24nLFxuICAgICAgICAnVFNFbnVtRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGVjbHMgPSBhc3QuYm9keS5maWx0ZXIoKHsgdHlwZSwgaWQsIGRlY2xhcmF0aW9ucyB9KSA9PiBpbmNsdWRlcyhkZWNsVHlwZXMsIHR5cGUpICYmIChcbiAgICAgICAgaWQgJiYgaWQubmFtZSA9PT0gZXhwb3J0ZWROYW1lIHx8IGRlY2xhcmF0aW9ucyAmJiBkZWNsYXJhdGlvbnMuZmluZCgoZCkgPT4gZC5pZC5uYW1lID09PSBleHBvcnRlZE5hbWUpXG4gICAgICApKTtcbiAgICAgIGlmIChleHBvcnRlZERlY2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeHBvcnQgaXMgbm90IHJlZmVyZW5jaW5nIGFueSBsb2NhbCBkZWNsYXJhdGlvbiwgbXVzdCBiZSByZS1leHBvcnRpbmdcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgbikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICAgJiYgIW0ubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICAgICkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICAgICAgfVxuICAgICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICAgIGlmIChkZWNsLnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgIGlmIChkZWNsLmJvZHkgJiYgZGVjbC5ib2R5LnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KGRlY2wuYm9keS5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLmJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgICAgZGVjbC5ib2R5LmJvZHkuZm9yRWFjaCgobW9kdWxlQmxvY2tOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4cG9ydC1hc3NpZ25tZW50IGV4cG9ydHMgYWxsIG1lbWJlcnMgaW4gdGhlIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZURlY2wgPSBtb2R1bGVCbG9ja05vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nXG4gICAgICAgICAgICAgICAgPyBtb2R1bGVCbG9ja05vZGUuZGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZURlY2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNhbiBjaGVjayB0aGlzIGZvciB1czsgd2UgbmVlZG4ndFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4gcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZC5pZCwgKGlkKSA9PiBtLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZGVjbCwgbmFtZXNwYWNlRGVjbCwgbW9kdWxlQmxvY2tOb2RlKSxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuaWQubmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG1vZHVsZUJsb2NrTm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKFxuICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAmJiBtLm5hbWVzcGFjZS5zaXplID4gMCAvLyBhbnl0aGluZyBpcyBleHBvcnRlZFxuICAgICYmICFtLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICkge1xuICAgIG0ubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gIH1cblxuICBpZiAodW5hbWJpZ3VvdXNseUVTTSkge1xuICAgIG0ucGFyc2VHb2FsID0gJ01vZHVsZSc7XG4gIH1cbiAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBvZiB0aGlzIGNsb3N1cmUgaXMgaXNvbGF0ZWQgZnJvbSBvdGhlciBzY29wZXNcbiAqIHRvIGF2b2lkIG92ZXItcmV0ZW50aW9uIG9mIHVucmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGhhc1xuICogY2F1c2VkIG1lbW9yeSBsZWFrcy4gU2VlICMxMjY2LlxuICovXG5mdW5jdGlvbiB0aHVua0ZvcihwLCBjb250ZXh0KSB7XG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbi8qKlxuICogVHJhdmVyc2UgYSBwYXR0ZXJuL2lkZW50aWZpZXIgbm9kZSwgY2FsbGluZyAnY2FsbGJhY2snXG4gKiBmb3IgZWFjaCBsZWFmIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gIHtub2RlfSAgIHBhdHRlcm5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cblxubGV0IHBhcnNlck9wdGlvbnNIYXNoID0gJyc7XG5sZXQgcHJldlBhcnNlck9wdGlvbnMgPSAnJztcbmxldCBzZXR0aW5nc0hhc2ggPSAnJztcbmxldCBwcmV2U2V0dGluZ3MgPSAnJztcbi8qKlxuICogZG9uJ3QgaG9sZCBmdWxsIGNvbnRleHQgb2JqZWN0IGluIG1lbW9yeSwganVzdCBncmFiIHdoYXQgd2UgbmVlZC5cbiAqIGFsc28gY2FsY3VsYXRlIGEgY2FjaGVLZXksIHdoZXJlIHBhcnRzIG9mIHRoZSBjYWNoZUtleSBoYXNoIGFyZSBtZW1vaXplZFxuICovXG5mdW5jdGlvbiBjaGlsZENvbnRleHQocGF0aCwgY29udGV4dCkge1xuICBjb25zdCB7IHNldHRpbmdzLCBwYXJzZXJPcHRpb25zLCBwYXJzZXJQYXRoIH0gPSBjb250ZXh0O1xuXG4gIGlmIChKU09OLnN0cmluZ2lmeShzZXR0aW5ncykgIT09IHByZXZTZXR0aW5ncykge1xuICAgIHNldHRpbmdzSGFzaCA9IGhhc2hPYmplY3QoeyBzZXR0aW5ncyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZTZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdzKTtcbiAgfVxuXG4gIGlmIChKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKSAhPT0gcHJldlBhcnNlck9wdGlvbnMpIHtcbiAgICBwYXJzZXJPcHRpb25zSGFzaCA9IGhhc2hPYmplY3QoeyBwYXJzZXJPcHRpb25zIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcHJldlBhcnNlck9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FjaGVLZXk6IFN0cmluZyhwYXJzZXJQYXRoKSArIHBhcnNlck9wdGlvbnNIYXNoICsgc2V0dGluZ3NIYXNoICsgU3RyaW5nKHBhdGgpLFxuICAgIHNldHRpbmdzLFxuICAgIHBhcnNlck9wdGlvbnMsXG4gICAgcGFyc2VyUGF0aCxcbiAgICBwYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIHNvbWV0aW1lcyBsZWdhY3kgc3VwcG9ydCBpc24ndCBfdGhhdF8gaGFyZC4uLiByaWdodD9cbiAqL1xuZnVuY3Rpb24gbWFrZVNvdXJjZUNvZGUodGV4dCwgYXN0KSB7XG4gIGlmIChTb3VyY2VDb2RlLmxlbmd0aCA+IDEpIHtcbiAgICAvLyBFU0xpbnQgM1xuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh0ZXh0LCBhc3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVTTGludCA0LCA1XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VDb2RlKHsgdGV4dCwgYXN0IH0pO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/core/fsWalk.js b/node_modules/eslint-plugin-import/lib/core/fsWalk.js new file mode 100644 index 0000000000..fd3ef73eb5 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/core/fsWalk.js @@ -0,0 +1,49 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. + + + + + + + + + + + + + + + + + + + + +walkSync = walkSync;var _path = require('path');var _path2 = _interopRequireDefault(_path);var _fs = require('fs');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** @typedef {{ name: string, path: string, dirent: import('fs').Dirent }} Entry */ /** + * Do a comprehensive walk of the provided src directory, and collect all entries. Filter out + * any directories or entries using the optional filter functions. + * @param {string} root - path to the root of the folder we're walking + * @param {{ deepFilter?: (entry: Entry) => boolean, entryFilter?: (entry: Entry) => boolean }} options + * @param {Entry} currentEntry - entry for the current directory we're working in + * @param {Entry[]} existingEntries - list of all entries so far + * @returns {Entry[]} an array of directory entries + */ /** + * This is intended to provide similar capability as the sync api from @nodelib/fs.walk, until `eslint-plugin-import` + * is willing to modernize and update their minimum node version to at least v16. I intentionally made the + * shape of the API (for the part we're using) the same as @nodelib/fs.walk so that that can be swapped in + * when the repo is ready for it. + */function walkSync(root, options, currentEntry, existingEntries) {// Extract the filter functions. Default to evaluating true, if no filter passed in. + var _options$deepFilter = options.deepFilter,deepFilter = _options$deepFilter === undefined ? function () {return true;} : _options$deepFilter,_options$entryFilter = options.entryFilter,entryFilter = _options$entryFilter === undefined ? function () {return true;} : _options$entryFilter;var entryList = existingEntries || [];var currentRelativePath = currentEntry ? currentEntry.path : '.';var fullPath = currentEntry ? _path2['default'].join(root, currentEntry.path) : root;var dirents = (0, _fs.readdirSync)(fullPath, { withFileTypes: true });dirents.forEach(function (dirent) {/** @type {Entry} */var entry = { name: dirent.name, path: _path2['default'].join(currentRelativePath, dirent.name), dirent: dirent }; + + + if (dirent.isDirectory() && deepFilter(entry)) { + entryList.push(entry); + entryList = walkSync(root, options, entry, entryList); + } else if (dirent.isFile() && entryFilter(entry)) { + entryList.push(entry); + } + }); + + return entryList; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ZzV2Fsay5qcyJdLCJuYW1lcyI6WyJ3YWxrU3luYyIsInJvb3QiLCJvcHRpb25zIiwiY3VycmVudEVudHJ5IiwiZXhpc3RpbmdFbnRyaWVzIiwiZGVlcEZpbHRlciIsImVudHJ5RmlsdGVyIiwiZW50cnlMaXN0IiwiY3VycmVudFJlbGF0aXZlUGF0aCIsInBhdGgiLCJmdWxsUGF0aCIsImpvaW4iLCJkaXJlbnRzIiwid2l0aEZpbGVUeXBlcyIsImZvckVhY2giLCJkaXJlbnQiLCJlbnRyeSIsIm5hbWUiLCJpc0RpcmVjdG9yeSIsInB1c2giLCJpc0ZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCZ0JBLFEsR0FBQUEsUSxDQWRoQiw0QiwyQ0FDQSx3QixnR0FFQSxtRixDQUVBOzs7Ozs7OzsyU0FaQTs7Ozs7OFNBcUJPLFNBQVNBLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCQyxPQUF4QixFQUFpQ0MsWUFBakMsRUFBK0NDLGVBQS9DLEVBQWdFLENBQ3JFO0FBRHFFLDRCQUVQRixPQUZPLENBRTdERyxVQUY2RCxDQUU3REEsVUFGNkQsdUNBRWhELG9CQUFNLElBQU4sRUFGZ0QsOENBRVBILE9BRk8sQ0FFcENJLFdBRm9DLENBRXBDQSxXQUZvQyx3Q0FFdEIsb0JBQU0sSUFBTixFQUZzQix3QkFJckUsSUFBSUMsWUFBWUgsbUJBQW1CLEVBQW5DLENBQ0EsSUFBTUksc0JBQXNCTCxlQUFlQSxhQUFhTSxJQUE1QixHQUFtQyxHQUEvRCxDQUNBLElBQU1DLFdBQVdQLGVBQWVNLGtCQUFLRSxJQUFMLENBQVVWLElBQVYsRUFBZ0JFLGFBQWFNLElBQTdCLENBQWYsR0FBb0RSLElBQXJFLENBRUEsSUFBTVcsVUFBVSxxQkFBWUYsUUFBWixFQUFzQixFQUFFRyxlQUFlLElBQWpCLEVBQXRCLENBQWhCLENBQ0FELFFBQVFFLE9BQVIsQ0FBZ0IsVUFBQ0MsTUFBRCxFQUFZLENBQzFCLG9CQUNBLElBQU1DLFFBQVEsRUFDWkMsTUFBTUYsT0FBT0UsSUFERCxFQUVaUixNQUFNQSxrQkFBS0UsSUFBTCxDQUFVSCxtQkFBVixFQUErQk8sT0FBT0UsSUFBdEMsQ0FGTSxFQUdaRixjQUhZLEVBQWQ7OztBQU1BLFFBQUlBLE9BQU9HLFdBQVAsTUFBd0JiLFdBQVdXLEtBQVgsQ0FBNUIsRUFBK0M7QUFDN0NULGdCQUFVWSxJQUFWLENBQWVILEtBQWY7QUFDQVQsa0JBQVlQLFNBQVNDLElBQVQsRUFBZUMsT0FBZixFQUF3QmMsS0FBeEIsRUFBK0JULFNBQS9CLENBQVo7QUFDRCxLQUhELE1BR08sSUFBSVEsT0FBT0ssTUFBUCxNQUFtQmQsWUFBWVUsS0FBWixDQUF2QixFQUEyQztBQUNoRFQsZ0JBQVVZLElBQVYsQ0FBZUgsS0FBZjtBQUNEO0FBQ0YsR0FkRDs7QUFnQkEsU0FBT1QsU0FBUDtBQUNEIiwiZmlsZSI6ImZzV2Fsay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHNpbWlsYXIgY2FwYWJpbGl0eSBhcyB0aGUgc3luYyBhcGkgZnJvbSBAbm9kZWxpYi9mcy53YWxrLCB1bnRpbCBgZXNsaW50LXBsdWdpbi1pbXBvcnRgXG4gKiBpcyB3aWxsaW5nIHRvIG1vZGVybml6ZSBhbmQgdXBkYXRlIHRoZWlyIG1pbmltdW0gbm9kZSB2ZXJzaW9uIHRvIGF0IGxlYXN0IHYxNi4gIEkgaW50ZW50aW9uYWxseSBtYWRlIHRoZVxuICogc2hhcGUgb2YgdGhlIEFQSSAoZm9yIHRoZSBwYXJ0IHdlJ3JlIHVzaW5nKSB0aGUgc2FtZSBhcyBAbm9kZWxpYi9mcy53YWxrIHNvIHRoYXQgdGhhdCBjYW4gYmUgc3dhcHBlZCBpblxuICogd2hlbiB0aGUgcmVwbyBpcyByZWFkeSBmb3IgaXQuXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcblxuLyoqIEB0eXBlZGVmIHt7IG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBkaXJlbnQ6IGltcG9ydCgnZnMnKS5EaXJlbnQgfX0gRW50cnkgKi9cblxuLyoqXG4gKiBEbyBhIGNvbXByZWhlbnNpdmUgd2FsayBvZiB0aGUgcHJvdmlkZWQgc3JjIGRpcmVjdG9yeSwgYW5kIGNvbGxlY3QgYWxsIGVudHJpZXMuICBGaWx0ZXIgb3V0XG4gKiBhbnkgZGlyZWN0b3JpZXMgb3IgZW50cmllcyB1c2luZyB0aGUgb3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb290IC0gcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHdlJ3JlIHdhbGtpbmdcbiAqIEBwYXJhbSB7eyBkZWVwRmlsdGVyPzogKGVudHJ5OiBFbnRyeSkgPT4gYm9vbGVhbiwgZW50cnlGaWx0ZXI/OiAoZW50cnk6IEVudHJ5KSA9PiBib29sZWFuIH19IG9wdGlvbnNcbiAqIEBwYXJhbSB7RW50cnl9IGN1cnJlbnRFbnRyeSAtIGVudHJ5IGZvciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2UncmUgd29ya2luZyBpblxuICogQHBhcmFtIHtFbnRyeVtdfSBleGlzdGluZ0VudHJpZXMgLSBsaXN0IG9mIGFsbCBlbnRyaWVzIHNvIGZhclxuICogQHJldHVybnMge0VudHJ5W119IGFuIGFycmF5IG9mIGRpcmVjdG9yeSBlbnRyaWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWxrU3luYyhyb290LCBvcHRpb25zLCBjdXJyZW50RW50cnksIGV4aXN0aW5nRW50cmllcykge1xuICAvLyBFeHRyYWN0IHRoZSBmaWx0ZXIgZnVuY3Rpb25zLiBEZWZhdWx0IHRvIGV2YWx1YXRpbmcgdHJ1ZSwgaWYgbm8gZmlsdGVyIHBhc3NlZCBpbi5cbiAgY29uc3QgeyBkZWVwRmlsdGVyID0gKCkgPT4gdHJ1ZSwgZW50cnlGaWx0ZXIgPSAoKSA9PiB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIGxldCBlbnRyeUxpc3QgPSBleGlzdGluZ0VudHJpZXMgfHwgW107XG4gIGNvbnN0IGN1cnJlbnRSZWxhdGl2ZVBhdGggPSBjdXJyZW50RW50cnkgPyBjdXJyZW50RW50cnkucGF0aCA6ICcuJztcbiAgY29uc3QgZnVsbFBhdGggPSBjdXJyZW50RW50cnkgPyBwYXRoLmpvaW4ocm9vdCwgY3VycmVudEVudHJ5LnBhdGgpIDogcm9vdDtcblxuICBjb25zdCBkaXJlbnRzID0gcmVhZGRpclN5bmMoZnVsbFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcbiAgICAvKiogQHR5cGUge0VudHJ5fSAqL1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgbmFtZTogZGlyZW50Lm5hbWUsXG4gICAgICBwYXRoOiBwYXRoLmpvaW4oY3VycmVudFJlbGF0aXZlUGF0aCwgZGlyZW50Lm5hbWUpLFxuICAgICAgZGlyZW50LFxuICAgIH07XG5cbiAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkgJiYgZGVlcEZpbHRlcihlbnRyeSkpIHtcbiAgICAgIGVudHJ5TGlzdC5wdXNoKGVudHJ5KTtcbiAgICAgIGVudHJ5TGlzdCA9IHdhbGtTeW5jKHJvb3QsIG9wdGlvbnMsIGVudHJ5LCBlbnRyeUxpc3QpO1xuICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpICYmIGVudHJ5RmlsdGVyKGVudHJ5KSkge1xuICAgICAgZW50cnlMaXN0LnB1c2goZW50cnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJ5TGlzdDtcbn1cbiJdfQ== \ 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 749a15a39c..fd76a54638 100644 --- a/node_modules/eslint-plugin-import/lib/core/importType.js +++ b/node_modules/eslint-plugin-import/lib/core/importType.js @@ -5,6 +5,7 @@ +isScoped = isScoped;exports. @@ -18,26 +19,24 @@ -isAbsolute = isAbsolute;exports. -isBuiltIn = isBuiltIn;exports. +isAbsolute = isAbsolute;exports. +isBuiltIn = isBuiltIn;exports. -isExternalModule = isExternalModule;exports. -isExternalModuleMain = isExternalModuleMain;exports. @@ -55,12 +54,9 @@ isExternalModuleMain = isExternalModuleMain;exports. -isScoped = isScoped;exports. - -isScopedMain = isScopedMain;exports['default'] = @@ -107,12 +103,14 @@ isScopedMain = isScopedMain;exports['default'] = +isExternalModule = isExternalModule;exports. +isExternalModuleMain = isExternalModuleMain;exports. @@ -120,10 +118,11 @@ isScopedMain = isScopedMain;exports['default'] = +isScopedMain = isScopedMain;exports['default'] = -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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); +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 };}var scopedRegExp = /^@[^/]+\/?[^/]+/;function isScoped(name) {return name && scopedRegExp.test(name);}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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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;}var moduleRegExp = /^\w/;function isModule(name) {return name && moduleRegExp.test(name);}var moduleMainRegExp = /^[\w]((?!\/).)*$/;function isModuleMain(name) {return name && moduleMainRegExp.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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function isExternalModule(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}var scopedMainRegExp = /^@[^/]+\/?[^/]+$/;function isScopedMain(name) {return name && scopedMainRegExp.test(name);}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNBYnNvbHV0ZSIsImlzQnVpbHRJbiIsImlzRXh0ZXJuYWxNb2R1bGUiLCJpc0V4dGVybmFsTW9kdWxlTWFpbiIsImlzU2NvcGVkIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJiYXNlTW9kdWxlIiwibmFtZSIsInNwbGl0Iiwic2NvcGUiLCJwa2ciLCJpc0ludGVybmFsUmVnZXhNYXRjaCIsInNldHRpbmdzIiwiaW50ZXJuYWxTY29wZSIsIlJlZ0V4cCIsInRlc3QiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJjb250ZXh0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwiaXNNb2R1bGUiLCJ0eXBlVGVzdCIsImlzTW9kdWxlTWFpbiIsIm1vZHVsZVJlZ0V4cCIsIm1vZHVsZU1haW5SZWdFeHAiLCJzY29wZWRSZWdFeHAiLCJzY29wZWRNYWluUmVnRXhwIiwiaXNSZWxhdGl2ZVRvUGFyZW50IiwiaW5kZXhGaWxlcyIsImlzSW5kZXgiLCJpc1JlbGF0aXZlVG9TaWJsaW5nIiwiaXNFeHRlcm5hbFBhdGgiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQmdCQSxVLEdBQUFBLFU7Ozs7O0FBS0FDLFMsR0FBQUEsUzs7Ozs7OztBQU9BQyxnQixHQUFBQSxnQjs7Ozs7OztBQU9BQyxvQixHQUFBQSxvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBQyxRLEdBQUFBLFE7Ozs7O0FBS0FDLFksR0FBQUEsWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFKLEVBQW1DLENBQUUsT0FBTyxVQUFQLENBQW9CLENBQ3pELElBQUl1QixlQUFlM0IsSUFBZixFQUFxQkksT0FBckIsQ0FBSixFQUFtQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN6RCxJQUFJd0Isc0JBQXNCckMsSUFBdEIsQ0FBSixFQUFpQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN2RCxPQUFPLFNBQVAsQ0FDRCxDQUVjLFNBQVNGLGlCQUFULENBQTJCRSxJQUEzQixFQUFpQ2EsT0FBakMsRUFBMEMsQ0FDdkQsT0FBT0ssU0FBU2xCLElBQVQsRUFBZWEsT0FBZixFQUF3QiwwQkFBUWIsSUFBUixFQUFjYSxPQUFkLENBQXhCLENBQVA7QUFDRCIsImZpbGUiOiJpbXBvcnRUeXBlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZSBhcyBub2RlSXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUgYXMgbm9kZVJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCBpc0NvcmVNb2R1bGUgZnJvbSAnaXMtY29yZS1tb2R1bGUnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFBhY2thZ2VQYXRoIH0gZnJvbSAnLi9wYWNrYWdlUGF0aCc7XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3QgbW9kdWxlUmVnRXhwID0gL15cXHcvO1xuZnVuY3Rpb24gaXNNb2R1bGUobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBtb2R1bGVSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3QgbW9kdWxlTWFpblJlZ0V4cCA9IC9eW1xcd10oKD8hXFwvKS4pKiQvO1xuZnVuY3Rpb24gaXNNb2R1bGVNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5jb25zdCBzY29wZWRSZWdFeHAgPSAvXkBbXi9dK1xcLz9bXi9dKy87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWQobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBzY29wZWRSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSkge1xuICByZXR1cm4gKC9eXFwuXFwuJHxeXFwuXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IGluZGV4RmlsZXMgPSBbJy4nLCAnLi8nLCAnLi9pbmRleCcsICcuL2luZGV4LmpzJ107XG5mdW5jdGlvbiBpc0luZGV4KG5hbWUpIHtcbiAgcmV0dXJuIGluZGV4RmlsZXMuaW5kZXhPZihuYW1lKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSkge1xuICByZXR1cm4gKC9eXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG5cbiAgaWYgKHJlbGF0aXZlKHBhY2thZ2VQYXRoLCBwYXRoKS5zdGFydHNXaXRoKCcuLicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmb2xkZXJzID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9leHRlcm5hbC1tb2R1bGUtZm9sZGVycyddIHx8IFsnbm9kZV9tb2R1bGVzJ107XG4gIHJldHVybiBmb2xkZXJzLnNvbWUoKGZvbGRlcikgPT4ge1xuICAgIGNvbnN0IGZvbGRlclBhdGggPSBub2RlUmVzb2x2ZShwYWNrYWdlUGF0aCwgZm9sZGVyKTtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShmb2xkZXJQYXRoLCBwYXRoKTtcbiAgICByZXR1cm4gIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLicpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG4gIHJldHVybiAhcmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uLycpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsTG9va2luZ05hbWUobmFtZSkge1xuICByZXR1cm4gaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpIHtcbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgaWYgKGlzSW50ZXJuYWxSZWdleE1hdGNoKG5hbWUsIHNldHRpbmdzKSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNBYnNvbHV0ZShuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdhYnNvbHV0ZSc7IH1cbiAgaWYgKGlzQnVpbHRJbihuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdidWlsdGluJzsgfVxuICBpZiAoaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3BhcmVudCc7IH1cbiAgaWYgKGlzSW5kZXgobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnaW5kZXgnOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9TaWJsaW5nKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3NpYmxpbmcnOyB9XG4gIGlmIChpc0V4dGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICBpZiAoaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkpIHsgcmV0dXJuICdpbnRlcm5hbCc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNTY29wZWQiLCJpc0Fic29sdXRlIiwiaXNCdWlsdEluIiwiaXNFeHRlcm5hbE1vZHVsZSIsImlzRXh0ZXJuYWxNb2R1bGVNYWluIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJzY29wZWRSZWdFeHAiLCJuYW1lIiwidGVzdCIsImJhc2VNb2R1bGUiLCJzcGxpdCIsInNjb3BlIiwicGtnIiwiaXNJbnRlcm5hbFJlZ2V4TWF0Y2giLCJzZXR0aW5ncyIsImludGVybmFsU2NvcGUiLCJSZWdFeHAiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJtb2R1bGVSZWdFeHAiLCJpc01vZHVsZSIsIm1vZHVsZU1haW5SZWdFeHAiLCJpc01vZHVsZU1haW4iLCJpc1JlbGF0aXZlVG9QYXJlbnQiLCJpbmRleEZpbGVzIiwiaXNJbmRleCIsImlzUmVsYXRpdmVUb1NpYmxpbmciLCJpc0V4dGVybmFsUGF0aCIsImNvbnRleHQiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSIsInR5cGVUZXN0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwic2NvcGVkTWFpblJlZ0V4cCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9nQkEsUSxHQUFBQSxROzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkFDLFUsR0FBQUEsVTs7Ozs7QUFLQUMsUyxHQUFBQSxTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRUFDLGdCLEdBQUFBLGdCOzs7Ozs7O0FBT0FDLG9CLEdBQUFBLG9COzs7Ozs7OztBQVFBQyxZLEdBQUFB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QUFULEVBQWV1QixPQUFmLEVBQXdCYixJQUF4QixNQUFrQyxVQUEvRCxDQUNELENBRUQsSUFBTTJCLG1CQUFtQixrQkFBekIsQ0FDTyxTQUFTeEMsWUFBVCxDQUFzQkcsSUFBdEIsRUFBNEIsQ0FDakMsT0FBT0EsUUFBUXFDLGlCQUFpQnBDLElBQWpCLENBQXNCRCxJQUF0QixDQUFmLENBQ0QsQ0FFYyxTQUFTRixpQkFBVCxDQUEyQkUsSUFBM0IsRUFBaUN1QixPQUFqQyxFQUEwQyxDQUN2RCxPQUFPVSxTQUFTakMsSUFBVCxFQUFldUIsT0FBZixFQUF3QiwwQkFBUXZCLElBQVIsRUFBY3VCLE9BQWQsQ0FBeEIsQ0FBUDtBQUNEIiwiZmlsZSI6ImltcG9ydFR5cGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Fic29sdXRlIGFzIG5vZGVJc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSBhcyBub2RlUmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IGlzQ29yZU1vZHVsZSBmcm9tICdpcy1jb3JlLW1vZHVsZSc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgeyBnZXRDb250ZXh0UGFja2FnZVBhdGggfSBmcm9tICcuL3BhY2thZ2VQYXRoJztcblxuY29uc3Qgc2NvcGVkUmVnRXhwID0gL15AW14vXStcXC8/W14vXSsvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmNvbnN0IG1vZHVsZVJlZ0V4cCA9IC9eXFx3LztcbmZ1bmN0aW9uIGlzTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IG1vZHVsZU1haW5SZWdFeHAgPSAvXltcXHddKCg/IVxcLykuKSokLztcbmZ1bmN0aW9uIGlzTW9kdWxlTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIG1vZHVsZU1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUpIHtcbiAgcmV0dXJuICgvXlxcLlxcLiR8XlxcLlxcLltcXFxcL10vKS50ZXN0KG5hbWUpO1xufVxuY29uc3QgaW5kZXhGaWxlcyA9IFsnLicsICcuLycsICcuL2luZGV4JywgJy4vaW5kZXguanMnXTtcbmZ1bmN0aW9uIGlzSW5kZXgobmFtZSkge1xuICByZXR1cm4gaW5kZXhGaWxlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvU2libGluZyhuYW1lKSB7XG4gIHJldHVybiAoL15cXC5bXFxcXC9dLykudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNFeHRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcblxuICBpZiAocmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlcnMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2V4dGVybmFsLW1vZHVsZS1mb2xkZXJzJ10gfHwgWydub2RlX21vZHVsZXMnXTtcbiAgcmV0dXJuIGZvbGRlcnMuc29tZSgoZm9sZGVyKSA9PiB7XG4gICAgY29uc3QgZm9sZGVyUGF0aCA9IG5vZGVSZXNvbHZlKHBhY2thZ2VQYXRoLCBmb2xkZXIpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKGZvbGRlclBhdGgsIHBhdGgpO1xuICAgIHJldHVybiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcbiAgcmV0dXJuICFyZWxhdGl2ZShwYWNrYWdlUGF0aCwgcGF0aCkuc3RhcnRzV2l0aCgnLi4vJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSB7XG4gIHJldHVybiBpc01vZHVsZShuYW1lKSB8fCBpc1Njb3BlZChuYW1lKTtcbn1cblxuZnVuY3Rpb24gdHlwZVRlc3QobmFtZSwgY29udGV4dCwgcGF0aCkge1xuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBpZiAoaXNJbnRlcm5hbFJlZ2V4TWF0Y2gobmFtZSwgc2V0dGluZ3MpKSB7IHJldHVybiAnaW50ZXJuYWwnOyB9XG4gIGlmIChpc0Fic29sdXRlKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2Fic29sdXRlJzsgfVxuICBpZiAoaXNCdWlsdEluKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2J1aWx0aW4nOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAncGFyZW50JzsgfVxuICBpZiAoaXNJbmRleChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdpbmRleCc7IH1cbiAgaWYgKGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnc2libGluZyc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIGlmIChpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNFeHRlcm5hbExvb2tpbmdOYW1lKG5hbWUpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIHJldHVybiAndW5rbm93bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ 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 84eb212ade..74bedc3172 100644 --- a/node_modules/eslint-plugin-import/lib/core/packagePath.js +++ b/node_modules/eslint-plugin-import/lib/core/packagePath.js @@ -2,16 +2,16 @@ -getContextPackagePath = getContextPackagePath;exports. +getFilePackagePath = getFilePackagePath;exports. -getFilePackagePath = getFilePackagePath;exports. +getContextPackagePath = getContextPackagePath;exports. -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 = +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 getFilePackagePath(filePath) {var fp = (0, _pkgUp2['default'])({ cwd: filePath });return (0, _path.dirname)(fp);}function getContextPackagePath(context) {return getFilePackagePath(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());}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 @@ -19,4 +19,4 @@ getFilePackageName = getFilePackageName;var _path = require('path');var _pkgUp = } return null; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImNvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJmaWxlUGF0aCIsImZwIiwiY3dkIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLHFCLEdBQUFBLHFCOzs7O0FBSUFDLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixxQkFBVCxDQUErQkcsT0FBL0IsRUFBd0MsQ0FDN0MsT0FBT0YsbUJBQW1CRSxRQUFRQyxtQkFBUixHQUE4QkQsUUFBUUMsbUJBQVIsRUFBOUIsR0FBOERELFFBQVFFLFdBQVIsRUFBakYsQ0FBUCxDQUNELENBRU0sU0FBU0osa0JBQVQsQ0FBNEJLLFFBQTVCLEVBQXNDLENBQzNDLElBQU1DLEtBQUssd0JBQU0sRUFBRUMsS0FBS0YsUUFBUCxFQUFOLENBQVgsQ0FDQSxPQUFPLG1CQUFRQyxFQUFSLENBQVAsQ0FDRCxDQUVNLFNBQVNMLGtCQUFULENBQTRCSSxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCRyxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSB7XG4gIHJldHVybiBnZXRGaWxlUGFja2FnZVBhdGgoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVBhY2thZ2VQYXRoKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZwID0gcGtnVXAoeyBjd2Q6IGZpbGVQYXRoIH0pO1xuICByZXR1cm4gZGlybmFtZShmcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldEZpbGVQYWNrYWdlUGF0aCIsImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImZpbGVQYXRoIiwiZnAiLCJjd2QiLCJjb250ZXh0IiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxxQixHQUFBQSxxQjs7OztBQUlBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixrQkFBVCxDQUE0QkcsUUFBNUIsRUFBc0MsQ0FDM0MsSUFBTUMsS0FBSyx3QkFBTSxFQUFFQyxLQUFLRixRQUFQLEVBQU4sQ0FBWCxDQUNBLE9BQU8sbUJBQVFDLEVBQVIsQ0FBUCxDQUNELENBRU0sU0FBU0gscUJBQVQsQ0FBK0JLLE9BQS9CLEVBQXdDLENBQzdDLE9BQU9OLG1CQUFtQk0sUUFBUUMsbUJBQVIsR0FBOEJELFFBQVFDLG1CQUFSLEVBQTlCLEdBQThERCxRQUFRRSxXQUFSLEVBQWpGLENBQVAsQ0FDRCxDQUVNLFNBQVNOLGtCQUFULENBQTRCQyxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCTSxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYWNrYWdlUGF0aChmaWxlUGF0aCkge1xuICBjb25zdCBmcCA9IHBrZ1VwKHsgY3dkOiBmaWxlUGF0aCB9KTtcbiAgcmV0dXJuIGRpcm5hbWUoZnApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dFBhY2thZ2VQYXRoKGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEZpbGVQYWNrYWdlUGF0aChjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/builder.js b/node_modules/eslint-plugin-import/lib/exportMap/builder.js new file mode 100644 index 0000000000..f68aae2ade --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/builder.js @@ -0,0 +1,206 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();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 _parse2 = require('eslint-module-utils/parse');var _parse3 = _interopRequireDefault(_parse2); +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 _ = require('.');var _2 = _interopRequireDefault(_); +var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); +var _typescript = require('./typescript'); +var _remotePath = require('./remotePath'); +var _visitor = require('./visitor');var _visitor2 = _interopRequireDefault(_visitor);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 log = (0, _debug2['default'])('eslint-plugin-import:ExportMap'); + +var exportCache = new Map(); + +/** + * The creation of this closure is isolated from other scopes + * to avoid over-retention of unrelated variables, which has + * caused memory leaks. See #1266. + */ +function thunkFor(p, context) { + // eslint-disable-next-line no-use-before-define + return function () {return ExportMapBuilder['for']((0, _childContext2['default'])(p, context));}; +}var + +ExportMapBuilder = function () {function ExportMapBuilder() {_classCallCheck(this, ExportMapBuilder);}_createClass(ExportMapBuilder, null, [{ key: 'get', value: function () {function get( + source, context) { + var path = (0, _resolve2['default'])(source, context); + if (path == null) {return null;} + + return ExportMapBuilder['for']((0, _childContext2['default'])(path, context)); + }return get;}() }, { key: 'for', value: function () {function _for( + + context) {var + path = context.path; + + var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); + var exportMap = exportCache.get(cacheKey); + + // return cached ignore + if (exportMap === null) {return null;} + + var stats = _fs2['default'].statSync(path); + if (exportMap != null) { + // date equality check + if (exportMap.mtime - stats.mtime === 0) { + return exportMap; + } + // future: check content equality? + } + + // check valid extensions first + 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 = ExportMapBuilder.parse(path, content, context); + + // ambiguous modules return null + if (exportMap == null) { + log('ignored path due to ambiguous parse:', path); + exportCache.set(cacheKey, null); + return null; + } + + exportMap.mtime = stats.mtime; + + exportCache.set(cacheKey, exportMap); + return exportMap; + }return _for;}() }, { key: 'parse', value: function () {function parse( + + path, content, context) { + var exportMap = new _2['default'](path); + var isEsModuleInteropTrue = (0, _typescript.isEsModuleInterop)(context); + + var ast = void 0; + var visitorKeys = void 0; + try { + var result = (0, _parse3['default'])(path, content, context); + ast = result.ast; + visitorKeys = result.visitorKeys; + } catch (err) { + exportMap.errors.push(err); + return exportMap; // can't continue + } + + exportMap.visitorKeys = visitorKeys; + + var hasDynamicImports = false; + + var remotePathResolver = new _remotePath.RemotePath(path, context); + + function processDynamicImport(source) { + hasDynamicImports = true; + if (source.type !== 'Literal') { + return null; + } + var p = remotePathResolver.resolve(source.value); + if (p == null) { + return null; + } + var importedSpecifiers = new Set(); + importedSpecifiers.add('ImportNamespaceSpecifier'); + var getter = thunkFor(p, context); + exportMap.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, + dynamic: true }]) }); + + + } + + (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;}() }); + + + var unambiguouslyESM = unambiguous.isModule(ast); + if (!unambiguouslyESM && !hasDynamicImports) {return null;} + + // 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';})) { + exportMap.doc = doc; + return true; + } + } catch (err) {/* ignore */} + return false; + }); + } + + var visitorBuilder = new _visitor2['default']( + path, + context, + exportMap, + ExportMapBuilder, + content, + ast, + isEsModuleInteropTrue, + thunkFor); + + ast.body.forEach(function (astNode) { + var visitor = visitorBuilder.build(astNode); + + if (visitor[astNode.type]) { + visitor[astNode.type].call(visitorBuilder); + } + }); + + if ( + isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && exportMap.namespace.size > 0 // anything is exported + && !exportMap.namespace.has('default') // and default isn't added already + ) { + exportMap.namespace.set('default', {}); // add default export + } + + if (unambiguouslyESM) { + exportMap.parseGoal = 'Module'; + } + return exportMap; + }return parse;}() }]);return ExportMapBuilder;}();exports['default'] = ExportMapBuilder; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJ1bmFtYmlndW91cyIsImxvZyIsImV4cG9ydENhY2hlIiwiTWFwIiwidGh1bmtGb3IiLCJwIiwiY29udGV4dCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJzb3VyY2UiLCJwYXRoIiwiY2FjaGVLZXkiLCJkaWdlc3QiLCJleHBvcnRNYXAiLCJnZXQiLCJzdGF0cyIsImZzIiwic3RhdFN5bmMiLCJtdGltZSIsInNldCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRlc3QiLCJwYXJzZSIsIkV4cG9ydE1hcCIsImlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiZXJyIiwiZXJyb3JzIiwicHVzaCIsImhhc0R5bmFtaWNJbXBvcnRzIiwicmVtb3RlUGF0aFJlc29sdmVyIiwiUmVtb3RlUGF0aCIsInByb2Nlc3NEeW5hbWljSW1wb3J0IiwidHlwZSIsInJlc29sdmUiLCJ2YWx1ZSIsImltcG9ydGVkU3BlY2lmaWVycyIsIlNldCIsImFkZCIsImdldHRlciIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIm5vZGUiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsInVuYW1iaWd1b3VzbHlFU00iLCJpc01vZHVsZSIsImNvbW1lbnRzIiwic29tZSIsImMiLCJkb2MiLCJkb2N0cmluZSIsInVud3JhcCIsInRhZ3MiLCJ0IiwidGl0bGUiLCJ2aXNpdG9yQnVpbGRlciIsIkltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIiwiYm9keSIsImZvckVhY2giLCJhc3ROb2RlIiwidmlzaXRvciIsImJ1aWxkIiwiY2FsbCIsIm5hbWVzcGFjZSIsInNpemUiLCJoYXMiLCJwYXJzZUdvYWwiXSwibWFwcGluZ3MiOiJnbkJBQUEsd0I7O0FBRUEsb0M7O0FBRUEs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dUJBQU8sSUFBUDtBQUNEO0FBQ0YsYUFORCxDQU1FLE9BQU81QixHQUFQLEVBQVksQ0FBRSxZQUFjO0FBQzlCLG1CQUFPLEtBQVA7QUFDRCxXQVZEO0FBV0Q7O0FBRUQsWUFBTWtDLGlCQUFpQixJQUFJQyxvQkFBSjtBQUNyQnZELFlBRHFCO0FBRXJCSCxlQUZxQjtBQUdyQk0saUJBSHFCO0FBSXJCTCx3QkFKcUI7QUFLckJZLGVBTHFCO0FBTXJCTyxXQU5xQjtBQU9yQkQsNkJBUHFCO0FBUXJCckIsZ0JBUnFCLENBQXZCOztBQVVBc0IsWUFBSXVDLElBQUosQ0FBU0MsT0FBVCxDQUFpQixVQUFVQyxPQUFWLEVBQW1CO0FBQ2xDLGNBQU1DLFVBQVVMLGVBQWVNLEtBQWYsQ0FBcUJGLE9BQXJCLENBQWhCOztBQUVBLGNBQUlDLFFBQVFELFFBQVEvQixJQUFoQixDQUFKLEVBQTJCO0FBQ3pCZ0Msb0JBQVFELFFBQVEvQixJQUFoQixFQUFzQmtDLElBQXRCLENBQTJCUCxjQUEzQjtBQUNEO0FBQ0YsU0FORDs7QUFRQTtBQUNFdEMsOEJBQXNCO0FBQXRCLFdBQ0diLFVBQVUyRCxTQUFWLENBQW9CQyxJQUFwQixHQUEyQixDQUQ5QixDQUNnQztBQURoQyxXQUVHLENBQUM1RCxVQUFVMkQsU0FBVixDQUFvQkUsR0FBcEIsQ0FBd0IsU0FBeEIsQ0FITixDQUd5QztBQUh6QyxVQUlFO0FBQ0E3RCxzQkFBVTJELFNBQVYsQ0FBb0JyRCxHQUFwQixDQUF3QixTQUF4QixFQUFtQyxFQUFuQyxFQURBLENBQ3dDO0FBQ3pDOztBQUVELFlBQUlrQyxnQkFBSixFQUFzQjtBQUNwQnhDLG9CQUFVOEQsU0FBVixHQUFzQixRQUF0QjtBQUNEO0FBQ0QsZUFBTzlELFNBQVA7QUFDRCxPLHNFQTFLa0JMLGdCIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuJztcbmltcG9ydCBjaGlsZENvbnRleHQgZnJvbSAnLi9jaGlsZENvbnRleHQnO1xuaW1wb3J0IHsgaXNFc01vZHVsZUludGVyb3AgfSBmcm9tICcuL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgUmVtb3RlUGF0aCB9IGZyb20gJy4vcmVtb3RlUGF0aCc7XG5pbXBvcnQgSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIgZnJvbSAnLi92aXNpdG9yJztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBUaGUgY3JlYXRpb24gb2YgdGhpcyBjbG9zdXJlIGlzIGlzb2xhdGVkIGZyb20gb3RoZXIgc2NvcGVzXG4gKiB0byBhdm9pZCBvdmVyLXJldGVudGlvbiBvZiB1bnJlbGF0ZWQgdmFyaWFibGVzLCB3aGljaCBoYXNcbiAqIGNhdXNlZCBtZW1vcnkgbGVha3MuIFNlZSAjMTI2Ni5cbiAqL1xuZnVuY3Rpb24gdGh1bmtGb3IocCwgY29udGV4dCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgcmV0dXJuICgpID0+IEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcEJ1aWxkZXIge1xuICBzdGF0aWMgZ2V0KHNvdXJjZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKHNvdXJjZSwgY29udGV4dCk7XG4gICAgaWYgKHBhdGggPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgcmV0dXJuIEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGxldCBleHBvcnRNYXAgPSBleHBvcnRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgICBpZiAoZXhwb3J0TWFwID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgaWYgKGV4cG9ydE1hcC5tdGltZSAtIHN0YXRzLm10aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmFsaWQgZXh0ZW5zaW9ucyBmaXJzdFxuICAgIGlmICghaGFzVmFsaWRFeHRlbnNpb24ocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICAgIGlmIChpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byBpZ25vcmUgc2V0dGluZ3M6JywgcGF0aCk7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIHVuYW1iaWd1b3VzIG1vZHVsZXNcbiAgICBpZiAoIXVuYW1iaWd1b3VzLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2coJ2NhY2hlIG1pc3MnLCBjYWNoZUtleSwgJ2ZvciBwYXRoJywgcGF0aCk7XG4gICAgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5wYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcblxuICAgIC8vIGFtYmlndW91cyBtb2R1bGVzIHJldHVybiBudWxsXG4gICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gYW1iaWd1b3VzIHBhcnNlOicsIHBhdGgpO1xuICAgICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV4cG9ydE1hcC5tdGltZSA9IHN0YXRzLm10aW1lO1xuXG4gICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICAgIHJldHVybiBleHBvcnRNYXA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IGV4cG9ydE1hcCA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gICAgY29uc3QgaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCk7XG5cbiAgICBsZXQgYXN0O1xuICAgIGxldCB2aXNpdG9yS2V5cztcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG4gICAgICBhc3QgPSByZXN1bHQuYXN0O1xuICAgICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBleHBvcnRNYXAuZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7IC8vIGNhbid0IGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZXhwb3J0TWFwLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXM7XG5cbiAgICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbW90ZVBhdGhSZXNvbHZlciA9IG5ldyBSZW1vdGVQYXRoKHBhdGgsIGNvbnRleHQpO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0R5bmFtaWNJbXBvcnQoc291cmNlKSB7XG4gICAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICAgICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGltcG9ydGVkU3BlY2lmaWVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5hZGQoJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwge1xuICAgICAgICBnZXR0ZXIsXG4gICAgICAgIGRlY2xhcmF0aW9uczogbmV3IFNldChbe1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgICAgICAgIGxvYzogc291cmNlLmxvYyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycyxcbiAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICB9XSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5zb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJbXBvcnQnKSB7XG4gICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5hbWJpZ3VvdXNseUVTTSA9IHVuYW1iaWd1b3VzLmlzTW9kdWxlKGFzdCk7XG4gICAgaWYgKCF1bmFtYmlndW91c2x5RVNNICYmICFoYXNEeW5hbWljSW1wb3J0cykgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgICBpZiAoYXN0LmNvbW1lbnRzKSB7XG4gICAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgICBpZiAoYy50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2MudGFncy5zb21lKCh0KSA9PiB0LnRpdGxlID09PSAnbW9kdWxlJykpIHtcbiAgICAgICAgICAgIGV4cG9ydE1hcC5kb2MgPSBkb2M7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpdG9yQnVpbGRlciA9IG5ldyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlcihcbiAgICAgIHBhdGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgZXhwb3J0TWFwLFxuICAgICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhc3QsXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgICB0aHVua0ZvcixcbiAgICApO1xuICAgIGFzdC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGFzdE5vZGUpIHtcbiAgICAgIGNvbnN0IHZpc2l0b3IgPSB2aXNpdG9yQnVpbGRlci5idWlsZChhc3ROb2RlKTtcblxuICAgICAgaWYgKHZpc2l0b3JbYXN0Tm9kZS50eXBlXSkge1xuICAgICAgICB2aXNpdG9yW2FzdE5vZGUudHlwZV0uY2FsbCh2aXNpdG9yQnVpbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgICAmJiBleHBvcnRNYXAubmFtZXNwYWNlLnNpemUgPiAwIC8vIGFueXRoaW5nIGlzIGV4cG9ydGVkXG4gICAgICAmJiAhZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gICAgfVxuXG4gICAgaWYgKHVuYW1iaWd1b3VzbHlFU00pIHtcbiAgICAgIGV4cG9ydE1hcC5wYXJzZUdvYWwgPSAnTW9kdWxlJztcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js b/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js new file mode 100644 index 0000000000..5a863b60d1 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js @@ -0,0 +1,61 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.captureDependency = captureDependency;exports. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +captureDependencyWithSpecifiers = captureDependencyWithSpecifiers;function captureDependency(_ref, isOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor) {var source = _ref.source;var importedSpecifiers = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Set();if (source == null) {return null;}var p = remotePathResolver.resolve(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 = exportMap.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}var getter = thunkFor(p, context);exportMap.imports.set(p, { getter: getter, declarations: new Set([declarationMetadata]) });return getter;}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);function captureDependencyWithSpecifiers(n, +remotePathResolver, +exportMap, +context, +thunkFor) +{ + // import type { Foo } (TS and Flow); import typeof { Foo } (Flow) + var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; + // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and + // shouldn't be considered to be just importing types + var specifiersOnlyImportingTypes = n.specifiers.length > 0; + var importedSpecifiers = new Set(); + n.specifiers.forEach(function (specifier) { + if (specifier.type === 'ImportSpecifier') { + importedSpecifiers.add(specifier.imported.name || specifier.imported.value); + } else if (supportedImportTypes.has(specifier.type)) { + importedSpecifiers.add(specifier.type); + } + + // import { type Foo } (Flow); import { typeof Foo } (Flow) + specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && ( + specifier.importKind === 'type' || specifier.importKind === 'typeof'); + }); + captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor, importedSpecifiers); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2FwdHVyZURlcGVuZGVuY3kuanMiXSwibmFtZXMiOlsiY2FwdHVyZURlcGVuZGVuY3kiLCJjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJleHBvcnRNYXAiLCJjb250ZXh0IiwidGh1bmtGb3IiLCJzb3VyY2UiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJTZXQiLCJwIiwicmVzb2x2ZSIsInZhbHVlIiwiZGVjbGFyYXRpb25NZXRhZGF0YSIsImxvYyIsImV4aXN0aW5nIiwiaW1wb3J0cyIsImdldCIsImRlY2xhcmF0aW9ucyIsImFkZCIsImdldHRlciIsInNldCIsInN1cHBvcnRlZEltcG9ydFR5cGVzIiwibiIsImRlY2xhcmF0aW9uSXNUeXBlIiwiaW1wb3J0S2luZCIsInNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMiLCJzcGVjaWZpZXJzIiwibGVuZ3RoIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInR5cGUiLCJpbXBvcnRlZCIsIm5hbWUiLCJoYXMiXSwibWFwcGluZ3MiOiJtRkFBZ0JBLGlCLEdBQUFBLGlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBQywrQixHQUFBQSwrQixDQWxDVCxTQUFTRCxpQkFBVCxPQUVMRSxvQkFGSyxFQUdMQyxrQkFISyxFQUlMQyxTQUpLLEVBS0xDLE9BTEssRUFNTEMsUUFOSyxFQVFMLEtBUEVDLE1BT0YsUUFQRUEsTUFPRixLQURBQyxrQkFDQSx1RUFEcUIsSUFBSUMsR0FBSixFQUNyQixDQUNBLElBQUlGLFVBQVUsSUFBZCxFQUFvQixDQUFFLE9BQU8sSUFBUCxDQUFjLENBRXBDLElBQU1HLElBQUlQLG1CQUFtQlEsT0FBbkIsQ0FBMkJKLE9BQU9LLEtBQWxDLENBQVYsQ0FDQSxJQUFJRixLQUFLLElBQVQsRUFBZSxDQUFFLE9BQU8sSUFBUCxDQUFjLENBRS9CLElBQU1HLHNCQUFzQixFQUMxQjtBQUNBTixZQUFRLEVBQUVLLE9BQU9MLE9BQU9LLEtBQWhCLEVBQXVCRSxLQUFLUCxPQUFPTyxHQUFuQyxFQUZrQixFQUcxQlosMENBSDBCLEVBSTFCTSxzQ0FKMEIsRUFBNUIsQ0FPQSxJQUFNTyxXQUFXWCxVQUFVWSxPQUFWLENBQWtCQyxHQUFsQixDQUFzQlAsQ0FBdEIsQ0FBakIsQ0FDQSxJQUFJSyxZQUFZLElBQWhCLEVBQXNCLENBQ3BCQSxTQUFTRyxZQUFULENBQXNCQyxHQUF0QixDQUEwQk4sbUJBQTFCLEVBQ0EsT0FBT0UsU0FBU0ssTUFBaEIsQ0FDRCxDQUVELElBQU1BLFNBQVNkLFNBQVNJLENBQVQsRUFBWUwsT0FBWixDQUFmLENBQ0FELFVBQVVZLE9BQVYsQ0FBa0JLLEdBQWxCLENBQXNCWCxDQUF0QixFQUF5QixFQUFFVSxjQUFGLEVBQVVGLGNBQWMsSUFBSVQsR0FBSixDQUFRLENBQUNJLG1CQUFELENBQVIsQ0FBeEIsRUFBekIsRUFDQSxPQUFPTyxNQUFQLENBQ0QsQ0FFRCxJQUFNRSx1QkFBdUIsSUFBSWIsR0FBSixDQUFRLENBQUMsd0JBQUQsRUFBMkIsMEJBQTNCLENBQVIsQ0FBN0IsQ0FFTyxTQUFTUiwrQkFBVCxDQUNMc0IsQ0FESztBQUVMcEIsa0JBRks7QUFHTEMsU0FISztBQUlMQyxPQUpLO0FBS0xDLFFBTEs7QUFNTDtBQUNBO0FBQ0EsTUFBTWtCLG9CQUFvQkQsRUFBRUUsVUFBRixLQUFpQixNQUFqQixJQUEyQkYsRUFBRUUsVUFBRixLQUFpQixRQUF0RTtBQUNBO0FBQ0E7QUFDQSxNQUFJQywrQkFBK0JILEVBQUVJLFVBQUYsQ0FBYUMsTUFBYixHQUFzQixDQUF6RDtBQUNBLE1BQU1wQixxQkFBcUIsSUFBSUMsR0FBSixFQUEzQjtBQUNBYyxJQUFFSSxVQUFGLENBQWFFLE9BQWIsQ0FBcUIsVUFBQ0MsU0FBRCxFQUFlO0FBQ2xDLFFBQUlBLFVBQVVDLElBQVYsS0FBbUIsaUJBQXZCLEVBQTBDO0FBQ3hDdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUUsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJILFVBQVVFLFFBQVYsQ0FBbUJwQixLQUFyRTtBQUNELEtBRkQsTUFFTyxJQUFJVSxxQkFBcUJZLEdBQXJCLENBQXlCSixVQUFVQyxJQUFuQyxDQUFKLEVBQThDO0FBQ25EdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUMsSUFBakM7QUFDRDs7QUFFRDtBQUNBTCxtQ0FBK0JBO0FBQ3pCSSxjQUFVTCxVQUFWLEtBQXlCLE1BQXpCLElBQW1DSyxVQUFVTCxVQUFWLEtBQXlCLFFBRG5DLENBQS9CO0FBRUQsR0FWRDtBQVdBekIsb0JBQWtCdUIsQ0FBbEIsRUFBcUJDLHFCQUFxQkUsNEJBQTFDLEVBQXdFdkIsa0JBQXhFLEVBQTRGQyxTQUE1RixFQUF1R0MsT0FBdkcsRUFBZ0hDLFFBQWhILEVBQTBIRSxrQkFBMUg7QUFDRCIsImZpbGUiOiJjYXB0dXJlRGVwZW5kZW5jeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeShcbiAgeyBzb3VyY2UgfSxcbiAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0ZvcixcbiAgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpLFxuKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICBpZiAocCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb25NZXRhZGF0YSA9IHtcbiAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICBzb3VyY2U6IHsgdmFsdWU6IHNvdXJjZS52YWx1ZSwgbG9jOiBzb3VyY2UubG9jIH0sXG4gICAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gZXhwb3J0TWFwLmltcG9ydHMuZ2V0KHApO1xuICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkge1xuICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgcmV0dXJuIGV4aXN0aW5nLmdldHRlcjtcbiAgfVxuXG4gIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICByZXR1cm4gZ2V0dGVyO1xufVxuXG5jb25zdCBzdXBwb3J0ZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQoWydJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllciddKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoXG4gIG4sXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0Zvcixcbikge1xuICAvLyBpbXBvcnQgdHlwZSB7IEZvbyB9IChUUyBhbmQgRmxvdyk7IGltcG9ydCB0eXBlb2YgeyBGb28gfSAoRmxvdylcbiAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAvLyBpbXBvcnQgJy4vZm9vJyBvciBpbXBvcnQge30gZnJvbSAnLi9mb28nIChib3RoIDAgc3BlY2lmaWVycykgaXMgYSBzaWRlIGVmZmVjdCBhbmRcbiAgLy8gc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQgdG8gYmUganVzdCBpbXBvcnRpbmcgdHlwZXNcbiAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICBuLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydGVkSW1wb3J0VHlwZXMuaGFzKHNwZWNpZmllci50eXBlKSkge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgfVxuXG4gICAgLy8gaW1wb3J0IHsgdHlwZSBGb28gfSAoRmxvdyk7IGltcG9ydCB7IHR5cGVvZiBGb28gfSAoRmxvdylcbiAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgJiYgKHNwZWNpZmllci5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKTtcbiAgfSk7XG4gIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIHJlbW90ZVBhdGhSZXNvbHZlciwgZXhwb3J0TWFwLCBjb250ZXh0LCB0aHVua0ZvciwgaW1wb3J0ZWRTcGVjaWZpZXJzKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/childContext.js b/node_modules/eslint-plugin-import/lib/exportMap/childContext.js new file mode 100644 index 0000000000..aaa31ef98f --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/childContext.js @@ -0,0 +1,33 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = + + + + + + + + + + +childContext;var _hash = require('eslint-module-utils/hash');var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** + * don't hold full context object in memory, just grab what we need. + * also calculate a cacheKey, where parts of the cacheKey hash are memoized + */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) { + settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex'); + prevSettings = JSON.stringify(settings); + } + + if (JSON.stringify(parserOptions) !== prevParserOptions) { + parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex'); + prevParserOptions = JSON.stringify(parserOptions); + } + + return { + cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), + settings: settings, + parserOptions: parserOptions, + parserPath: parserPath, + path: path }; + +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2hpbGRDb250ZXh0LmpzIl0sIm5hbWVzIjpbImNoaWxkQ29udGV4dCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXRoIiwiY29udGV4dCIsInNldHRpbmdzIiwicGFyc2VyT3B0aW9ucyIsInBhcnNlclBhdGgiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwiY2FjaGVLZXkiLCJTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBV3dCQSxZLENBWHhCLGdEQUVBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLGVBQWUsRUFBbkIsQ0FDQSxJQUFJQyxlQUFlLEVBQW5CLEMsQ0FFQTs7O21LQUllLFNBQVNKLFlBQVQsQ0FBc0JLLElBQXRCLEVBQTRCQyxPQUE1QixFQUFxQyxLQUMxQ0MsUUFEMEMsR0FDRkQsT0FERSxDQUMxQ0MsUUFEMEMsQ0FDaENDLGFBRGdDLEdBQ0ZGLE9BREUsQ0FDaENFLGFBRGdDLENBQ2pCQyxVQURpQixHQUNGSCxPQURFLENBQ2pCRyxVQURpQixDQUdsRCxJQUFJQyxLQUFLQyxTQUFMLENBQWVKLFFBQWYsTUFBNkJILFlBQWpDLEVBQStDO0FBQzdDRCxtQkFBZSxzQkFBVyxFQUFFSSxrQkFBRixFQUFYLEVBQXlCSyxNQUF6QixDQUFnQyxLQUFoQyxDQUFmO0FBQ0FSLG1CQUFlTSxLQUFLQyxTQUFMLENBQWVKLFFBQWYsQ0FBZjtBQUNEOztBQUVELE1BQUlHLEtBQUtDLFNBQUwsQ0FBZUgsYUFBZixNQUFrQ04saUJBQXRDLEVBQXlEO0FBQ3ZERCx3QkFBb0Isc0JBQVcsRUFBRU8sNEJBQUYsRUFBWCxFQUE4QkksTUFBOUIsQ0FBcUMsS0FBckMsQ0FBcEI7QUFDQVYsd0JBQW9CUSxLQUFLQyxTQUFMLENBQWVILGFBQWYsQ0FBcEI7QUFDRDs7QUFFRCxTQUFPO0FBQ0xLLGNBQVVDLE9BQU9MLFVBQVAsSUFBcUJSLGlCQUFyQixHQUF5Q0UsWUFBekMsR0FBd0RXLE9BQU9ULElBQVAsQ0FEN0Q7QUFFTEUsc0JBRks7QUFHTEMsZ0NBSEs7QUFJTEMsMEJBSks7QUFLTEosY0FMSyxFQUFQOztBQU9EIiwiZmlsZSI6ImNoaWxkQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuXG5sZXQgcGFyc2VyT3B0aW9uc0hhc2ggPSAnJztcbmxldCBwcmV2UGFyc2VyT3B0aW9ucyA9ICcnO1xubGV0IHNldHRpbmdzSGFzaCA9ICcnO1xubGV0IHByZXZTZXR0aW5ncyA9ICcnO1xuXG4vKipcbiAqIGRvbid0IGhvbGQgZnVsbCBjb250ZXh0IG9iamVjdCBpbiBtZW1vcnksIGp1c3QgZ3JhYiB3aGF0IHdlIG5lZWQuXG4gKiBhbHNvIGNhbGN1bGF0ZSBhIGNhY2hlS2V5LCB3aGVyZSBwYXJ0cyBvZiB0aGUgY2FjaGVLZXkgaGFzaCBhcmUgbWVtb2l6ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcblxuICBpZiAoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpICE9PSBwcmV2U2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nc0hhc2ggPSBoYXNoT2JqZWN0KHsgc2V0dGluZ3MgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBwcmV2U2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5ncyk7XG4gIH1cblxuICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucykgIT09IHByZXZQYXJzZXJPcHRpb25zKSB7XG4gICAgcGFyc2VyT3B0aW9uc0hhc2ggPSBoYXNoT2JqZWN0KHsgcGFyc2VyT3B0aW9ucyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZQYXJzZXJPcHRpb25zID0gSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhY2hlS2V5OiBTdHJpbmcocGFyc2VyUGF0aCkgKyBwYXJzZXJPcHRpb25zSGFzaCArIHNldHRpbmdzSGFzaCArIFN0cmluZyhwYXRoKSxcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/doc.js b/node_modules/eslint-plugin-import/lib/exportMap/doc.js new file mode 100644 index 0000000000..e2ceaa98a6 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/doc.js @@ -0,0 +1,90 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.availableDocStyleParsers = undefined;exports. + + + + +captureDoc = captureDoc;var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** + * parse docs from the first node that has leading comments + */function captureDoc(source, docStyleParsers) {var metadata = {}; + // 'some' short-circuits on first 'true' + for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) { + try { + + var leadingComments = void 0; + + // n.leadingComments is legacy `attachComments` behavior + if ('leadingComments' in n) { + leadingComments = n.leadingComments; + } else if (n.range) { + leadingComments = source.getCommentsBefore(n); + } + + if (!leadingComments || leadingComments.length === 0) {return false;} + + for (var name in docStyleParsers) { + var doc = docStyleParsers[name](leadingComments); + if (doc) { + metadata.doc = doc; + } + } + + return true; + } catch (err) { + return false; + } + }); + + return metadata; +} + +/** + * parse JSDoc from leading comments + * @param {object[]} comments + * @return {{ doc: object }} + */ +function captureJsDoc(comments) { + var doc = void 0; + + // capture XSDoc + comments.forEach(function (comment) { + // skip non-block comments + if (comment.type !== 'Block') {return;} + try { + doc = _doctrine2['default'].parse(comment.value, { unwrap: true }); + } catch (err) { + /* don't care, for now? maybe add to `errors?` */ + } + }); + + return doc; +} + +/** + * parse TomDoc section from comments + */ +function captureTomDoc(comments) { + // collect lines up to first paragraph break + var lines = []; + for (var i = 0; i < comments.length; i++) { + var comment = comments[i]; + if (comment.value.match(/^\s*$/)) {break;} + lines.push(comment.value.trim()); + } + + // return doctrine-like object + var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/); + if (statusMatch) { + return { + description: statusMatch[2], + tags: [{ + title: statusMatch[1].toLowerCase(), + description: statusMatch[2] }] }; + + + } +} + +var availableDocStyleParsers = exports.availableDocStyleParsers = { + jsdoc: captureJsDoc, + tomdoc: captureTomDoc }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvZG9jLmpzIl0sIm5hbWVzIjpbImNhcHR1cmVEb2MiLCJzb3VyY2UiLCJkb2NTdHlsZVBhcnNlcnMiLCJtZXRhZGF0YSIsIm5vZGVzIiwic29tZSIsIm4iLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwibmFtZSIsImRvYyIsImVyciIsImNhcHR1cmVKc0RvYyIsImNvbW1lbnRzIiwiZm9yRWFjaCIsImNvbW1lbnQiLCJ0eXBlIiwiZG9jdHJpbmUiLCJwYXJzZSIsInZhbHVlIiwidW53cmFwIiwiY2FwdHVyZVRvbURvYyIsImxpbmVzIiwiaSIsIm1hdGNoIiwicHVzaCIsInRyaW0iLCJzdGF0dXNNYXRjaCIsImpvaW4iLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJ0b21kb2MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS2dCQSxVLEdBQUFBLFUsQ0FMaEIsb0MsbUpBRUE7O2tOQUdPLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCQyxlQUE1QixFQUF1RCxDQUM1RCxJQUFNQyxXQUFXLEVBQWpCO0FBRUE7QUFINEQsb0NBQVBDLEtBQU8sbUVBQVBBLEtBQU8sOEJBSTVEQSxNQUFNQyxJQUFOLENBQVcsVUFBQ0MsQ0FBRCxFQUFPO0FBQ2hCLFFBQUk7O0FBRUYsVUFBSUMsd0JBQUo7O0FBRUE7QUFDQSxVQUFJLHFCQUFxQkQsQ0FBekIsRUFBNEI7QUFDMUJDLDBCQUFrQkQsRUFBRUMsZUFBcEI7QUFDRCxPQUZELE1BRU8sSUFBSUQsRUFBRUUsS0FBTixFQUFhO0FBQ2xCRCwwQkFBa0JOLE9BQU9RLGlCQUFQLENBQXlCSCxDQUF6QixDQUFsQjtBQUNEOztBQUVELFVBQUksQ0FBQ0MsZUFBRCxJQUFvQkEsZ0JBQWdCRyxNQUFoQixLQUEyQixDQUFuRCxFQUFzRCxDQUFFLE9BQU8sS0FBUCxDQUFlOztBQUV2RSxXQUFLLElBQU1DLElBQVgsSUFBbUJULGVBQW5CLEVBQW9DO0FBQ2xDLFlBQU1VLE1BQU1WLGdCQUFnQlMsSUFBaEIsRUFBc0JKLGVBQXRCLENBQVo7QUFDQSxZQUFJSyxHQUFKLEVBQVM7QUFDUFQsbUJBQVNTLEdBQVQsR0FBZUEsR0FBZjtBQUNEO0FBQ0Y7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0FyQkQsQ0FxQkUsT0FBT0MsR0FBUCxFQUFZO0FBQ1osYUFBTyxLQUFQO0FBQ0Q7QUFDRixHQXpCRDs7QUEyQkEsU0FBT1YsUUFBUDtBQUNEOztBQUVEOzs7OztBQUtBLFNBQVNXLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDO0FBQzlCLE1BQUlILFlBQUo7O0FBRUE7QUFDQUcsV0FBU0MsT0FBVCxDQUFpQixVQUFDQyxPQUFELEVBQWE7QUFDNUI7QUFDQSxRQUFJQSxRQUFRQyxJQUFSLEtBQWlCLE9BQXJCLEVBQThCLENBQUUsT0FBUztBQUN6QyxRQUFJO0FBQ0ZOLFlBQU1PLHNCQUFTQyxLQUFULENBQWVILFFBQVFJLEtBQXZCLEVBQThCLEVBQUVDLFFBQVEsSUFBVixFQUE5QixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9ULEdBQVAsRUFBWTtBQUNaO0FBQ0Q7QUFDRixHQVJEOztBQVVBLFNBQU9ELEdBQVA7QUFDRDs7QUFFRDs7O0FBR0EsU0FBU1csYUFBVCxDQUF1QlIsUUFBdkIsRUFBaUM7QUFDL0I7QUFDQSxNQUFNUyxRQUFRLEVBQWQ7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSVYsU0FBU0wsTUFBN0IsRUFBcUNlLEdBQXJDLEVBQTBDO0FBQ3hDLFFBQU1SLFVBQVVGLFNBQVNVLENBQVQsQ0FBaEI7QUFDQSxRQUFJUixRQUFRSSxLQUFSLENBQWNLLEtBQWQsQ0FBb0IsT0FBcEIsQ0FBSixFQUFrQyxDQUFFLE1BQVE7QUFDNUNGLFVBQU1HLElBQU4sQ0FBV1YsUUFBUUksS0FBUixDQUFjTyxJQUFkLEVBQVg7QUFDRDs7QUFFRDtBQUNBLE1BQU1DLGNBQWNMLE1BQU1NLElBQU4sQ0FBVyxHQUFYLEVBQWdCSixLQUFoQixDQUFzQix1Q0FBdEIsQ0FBcEI7QUFDQSxNQUFJRyxXQUFKLEVBQWlCO0FBQ2YsV0FBTztBQUNMRSxtQkFBYUYsWUFBWSxDQUFaLENBRFI7QUFFTEcsWUFBTSxDQUFDO0FBQ0xDLGVBQU9KLFlBQVksQ0FBWixFQUFlSyxXQUFmLEVBREY7QUFFTEgscUJBQWFGLFlBQVksQ0FBWixDQUZSLEVBQUQsQ0FGRCxFQUFQOzs7QUFPRDtBQUNGOztBQUVNLElBQU1NLDhEQUEyQjtBQUN0Q0MsU0FBT3RCLFlBRCtCO0FBRXRDdUIsVUFBUWQsYUFGOEIsRUFBakMiLCJmaWxlIjoiZG9jLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJztcblxuLyoqXG4gKiBwYXJzZSBkb2NzIGZyb20gdGhlIGZpcnN0IG5vZGUgdGhhdCBoYXMgbGVhZGluZyBjb21tZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgLi4ubm9kZXMpIHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcblxuICAvLyAnc29tZScgc2hvcnQtY2lyY3VpdHMgb24gZmlyc3QgJ3RydWUnXG4gIG5vZGVzLnNvbWUoKG4pID0+IHtcbiAgICB0cnkge1xuXG4gICAgICBsZXQgbGVhZGluZ0NvbW1lbnRzO1xuXG4gICAgICAvLyBuLmxlYWRpbmdDb21tZW50cyBpcyBsZWdhY3kgYGF0dGFjaENvbW1lbnRzYCBiZWhhdmlvclxuICAgICAgaWYgKCdsZWFkaW5nQ29tbWVudHMnIGluIG4pIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gbi5sZWFkaW5nQ29tbWVudHM7XG4gICAgICB9IGVsc2UgaWYgKG4ucmFuZ2UpIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlLmdldENvbW1lbnRzQmVmb3JlKG4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZG9jU3R5bGVQYXJzZXJzKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY1N0eWxlUGFyc2Vyc1tuYW1lXShsZWFkaW5nQ29tbWVudHMpO1xuICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgbWV0YWRhdGEuZG9jID0gZG9jO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMgPSB7XG4gIGpzZG9jOiBjYXB0dXJlSnNEb2MsXG4gIHRvbWRvYzogY2FwdHVyZVRvbURvYyxcbn07XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/index.js b/node_modules/eslint-plugin-import/lib/exportMap/index.js new file mode 100644 index 0000000000..802da1e873 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/index.js @@ -0,0 +1,180 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}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<() => ExportMap>} + */ + this.dependencies = new Set(); + /** + * dependencies of this module that are not explicitly re-exported + * @type {Map ExportMap>} + */ + this.imports = new Map(); + this.errors = []; + /** + * type {'ambiguous' | 'Module' | 'Script'} + */ + this.parseGoal = 'ambiguous'; + }_createClass(ExportMap, [{ key: 'has', + + + + + + + + + + + + + + + /** + * Note that this does not check explicitly re-exported names for existence + * in the base namespace, but it will expand all `export * from '...'` exports + * if not found in the explicit namespace. + * @param {string} name + * @return {boolean} true if `name` is exported by this module. + */value: function () {function has( + name) { + if (this.namespace.has(name)) {return true;} + if (this.reexports.has(name)) {return true;} + + // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value; + var innerMap = dep(); + + // todo: report as unresolved? + if (!innerMap) {continue;} + + if (innerMap.has(name)) {return true;} + }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} + } + + return false; + }return has;}() + + /** + * ensure that imported name fully resolves. + * @param {string} name + * @return {{ found: boolean, path: ExportMap[] }} + */ }, { key: 'hasDeep', value: function () {function hasDeep( + name) { + if (this.namespace.has(name)) {return { found: true, path: [this] };} + + if (this.reexports.has(name)) { + var reexports = this.reexports.get(name); + var imported = reexports.getImport(); + + // if import is ignored, return explicit 'null' + if (imported == null) {return { found: true, path: [this] };} + + // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) { + return { found: false, path: [this] }; + } + + var deep = imported.hasDeep(reexports.local); + deep.path.unshift(this); + + return deep; + } + + // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { + for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value; + var innerMap = dep(); + if (innerMap == null) {return { found: true, path: [this] };} + // todo: report as unresolved? + if (!innerMap) {continue;} + + // safeguard against cycles + if (innerMap.path === this.path) {continue;} + + var innerValue = innerMap.hasDeep(name); + if (innerValue.found) { + innerValue.path.unshift(this); + return innerValue; + } + }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + } + + return { found: false, path: [this] }; + }return hasDeep;}() }, { key: 'get', value: function () {function get( + + name) { + if (this.namespace.has(name)) {return this.namespace.get(name);} + + if (this.reexports.has(name)) { + var reexports = this.reexports.get(name); + var imported = reexports.getImport(); + + // if import is ignored, return explicit 'null' + if (imported == null) {return null;} + + // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) {return undefined;} + + return imported.get(reexports.local); + } + + // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { + for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value; + var innerMap = dep(); + // todo: report as unresolved? + if (!innerMap) {continue;} + + // safeguard against cycles + if (innerMap.path === this.path) {continue;} + + var innerValue = innerMap.get(name); + if (innerValue !== undefined) {return innerValue;} + }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} + } + + return undefined; + }return get;}() }, { key: 'forEach', value: function () {function forEach( + + callback, thisArg) {var _this = this; + this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);}); + + this.reexports.forEach(function (reexports, name) { + var reexported = reexports.getImport(); + // can't look up meta for ignored re-exports (#348) + callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this); + }); + + this.dependencies.forEach(function (dep) { + var d = dep(); + // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;} + + d.forEach(function (v, n) { + if (n !== 'default') { + callback.call(thisArg, v, n, _this); + } + }); + }); + }return forEach;}() + + // todo: keys, values, entries? + }, { key: 'reportErrors', value: function () {function reportErrors( + context, declaration) { + var msg = this.errors. + map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}). + join(', '); + context.report({ + node: declaration.source, + message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) }); + + }return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has + }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}();exports['default'] = ExportMap; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvaW5kZXguanMiXSwibmFtZXMiOlsiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsIk1hcCIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiXSwibWFwcGluZ3MiOiJ5d0JBQXFCQSxTO0FBQ25CLHFCQUFZQyxJQUFaLEVBQWtCO0FBQ2hCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBSUMsR0FBSixFQUFqQjtBQUNBO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixJQUFJRCxHQUFKLEVBQWpCO0FBQ0E7Ozs7QUFJQSxTQUFLRSxZQUFMLEdBQW9CLElBQUlDLEdBQUosRUFBcEI7QUFDQTs7OztBQUlBLFNBQUtDLE9BQUwsR0FBZSxJQUFJSixHQUFKLEVBQWY7QUFDQSxTQUFLSyxNQUFMLEdBQWMsRUFBZDtBQUNBOzs7QUFHQSxTQUFLQyxTQUFMLEdBQWlCLFdBQWpCO0FBQ0QsRzs7Ozs7Ozs7Ozs7Ozs7O0FBZUQ7Ozs7Ozs7QUFPSUMsVSxFQUFNO0FBQ1IsWUFBSSxLQUFLUixTQUFMLENBQWVTLEdBQWYsQ0FBbUJELElBQW5CLENBQUosRUFBOEIsQ0FBRSxPQUFPLElB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SyxJQUFULEVBQWUsQ0FBRSxPQUFTLENBQzFCYyxRQUFRZCxFQUFFYyxJQUFWLENBQ0QsQ0FMRCxFQU1BLE9BQU9BLElBQVAsQ0FDRCxDLDZEQWxDa0I3QyxTIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0TWFwIHtcbiAgY29uc3RydWN0b3IocGF0aCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTWFwKCk7XG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogc3Rhci1leHBvcnRzXG4gICAgICogQHR5cGUge1NldDwoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCAoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/namespace.js b/node_modules/eslint-plugin-import/lib/exportMap/namespace.js new file mode 100644 index 0000000000..0b07bdd8c1 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/namespace.js @@ -0,0 +1,39 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); +var _remotePath = require('./remotePath');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 + +Namespace = function () { + function Namespace( + path, + context, + ExportMapBuilder) + {_classCallCheck(this, Namespace); + this.remotePathResolver = new _remotePath.RemotePath(path, context); + this.context = context; + this.ExportMapBuilder = ExportMapBuilder; + this.namespaces = new Map(); + }_createClass(Namespace, [{ key: 'resolveImport', value: function () {function resolveImport( + + value) { + var rp = this.remotePathResolver.resolve(value); + if (rp == null) {return null;} + return this.ExportMapBuilder['for']((0, _childContext2['default'])(rp, this.context)); + }return resolveImport;}() }, { key: 'getNamespace', value: function () {function getNamespace( + + identifier) {var _this = this; + if (!this.namespaces.has(identifier.name)) {return;} + return function () {return _this.resolveImport(_this.namespaces.get(identifier.name));}; + }return getNamespace;}() }, { key: 'add', value: function () {function add( + + object, identifier) { + var nsfn = this.getNamespace(identifier); + if (nsfn) { + Object.defineProperty(object, 'namespace', { get: nsfn }); + } + + return object; + }return add;}() }, { key: 'rawSet', value: function () {function rawSet( + + name, value) { + this.namespaces.set(name, value); + }return rawSet;}() }]);return Namespace;}();exports['default'] = Namespace; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvbmFtZXNwYWNlLmpzIl0sIm5hbWVzIjpbIk5hbWVzcGFjZSIsInBhdGgiLCJjb250ZXh0IiwiRXhwb3J0TWFwQnVpbGRlciIsInJlbW90ZVBhdGhSZXNvbHZlciIsIlJlbW90ZVBhdGgiLCJuYW1lc3BhY2VzIiwiTWFwIiwidmFsdWUiLCJycCIsInJlc29sdmUiLCJpZGVudGlmaWVyIiwiaGFzIiwibmFtZSIsInJlc29sdmVJbXBvcnQiLCJnZXQiLCJvYmplY3QiLCJuc2ZuIiwiZ2V0TmFtZXNwYWNlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJzZXQiXSwibWFwcGluZ3MiOiJnbkJBQUEsOEM7QUFDQSwwQzs7QUFFcUJBLFM7QUFDbkI7QUFDRUMsTUFERjtBQUVFQyxTQUZGO0FBR0VDLGtCQUhGO0FBSUU7QUFDQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQkFBSixDQUFlSixJQUFmLEVBQXFCQyxPQUFyQixDQUExQjtBQUNBLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCQSxnQkFBeEI7QUFDQSxTQUFLRyxVQUFMLEdBQWtCLElBQUlDLEdBQUosRUFBbEI7QUFDRCxHOztBQUVhQyxXLEVBQU87QUFDbkIsWUFBTUMsS0FBSyxLQUFLTCxrQkFBTCxDQUF3Qk0sT0FBeEIsQ0FBZ0NGLEtBQWhDLENBQVg7QUFDQSxZQUFJQyxNQUFNLElBQVYsRUFBZ0IsQ0FBRSxPQUFPLElBQVAsQ0FBYztBQUNoQyxlQUFPLEtBQUtOLGdCQUFMLFFBQTBCLCtCQUFhTSxFQUFiLEVBQWlCLEtBQUtQLE9BQXRCLENBQTFCLENBQVA7QUFDRCxPOztBQUVZUyxnQixFQUFZO0FBQ3ZCLFlBQUksQ0FBQyxLQUFLTCxVQUFMLENBQWdCTSxHQUFoQixDQUFvQkQsV0FBV0UsSUFBL0IsQ0FBTCxFQUEyQyxDQUFFLE9BQVM7QUFDdEQsZUFBTyxvQkFBTSxNQUFLQyxhQUFMLENBQW1CLE1BQUtSLFVBQUwsQ0FBZ0JTLEdBQWhCLENBQW9CSixXQUFXRSxJQUEvQixDQUFuQixDQUFOLEVBQVA7QUFDRCxPOztBQUVHRyxZLEVBQVFMLFUsRUFBWTtBQUN0QixZQUFNTSxPQUFPLEtBQUtDLFlBQUwsQ0FBa0JQLFVBQWxCLENBQWI7QUFDQSxZQUFJTSxJQUFKLEVBQVU7QUFDUkUsaUJBQU9DLGNBQVAsQ0FBc0JKLE1BQXRCLEVBQThCLFdBQTlCLEVBQTJDLEVBQUVELEtBQUtFLElBQVAsRUFBM0M7QUFDRDs7QUFFRCxlQUFPRCxNQUFQO0FBQ0QsTzs7QUFFTUgsVSxFQUFNTCxLLEVBQU87QUFDbEIsYUFBS0YsVUFBTCxDQUFnQmUsR0FBaEIsQ0FBb0JSLElBQXBCLEVBQTBCTCxLQUExQjtBQUNELE8sZ0VBbENrQlIsUyIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hpbGRDb250ZXh0IGZyb20gJy4vY2hpbGRDb250ZXh0JztcbmltcG9ydCB7IFJlbW90ZVBhdGggfSBmcm9tICcuL3JlbW90ZVBhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lc3BhY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXRoLFxuICAgIGNvbnRleHQsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgKSB7XG4gICAgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIgPSBuZXcgUmVtb3RlUGF0aChwYXRoLCBjb250ZXh0KTtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuRXhwb3J0TWFwQnVpbGRlciA9IEV4cG9ydE1hcEJ1aWxkZXI7XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZSh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gdGhpcy5FeHBvcnRNYXBCdWlsZGVyLmZvcihjaGlsZENvbnRleHQocnAsIHRoaXMuY29udGV4dCkpO1xuICB9XG5cbiAgZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpIHtcbiAgICBpZiAoIXRoaXMubmFtZXNwYWNlcy5oYXMoaWRlbnRpZmllci5uYW1lKSkgeyByZXR1cm47IH1cbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZXNvbHZlSW1wb3J0KHRoaXMubmFtZXNwYWNlcy5nZXQoaWRlbnRpZmllci5uYW1lKSk7XG4gIH1cblxuICBhZGQob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IHRoaXMuZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpO1xuICAgIGlmIChuc2ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnbmFtZXNwYWNlJywgeyBnZXQ6IG5zZm4gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHJhd1NldChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubmFtZXNwYWNlcy5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js b/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js new file mode 100644 index 0000000000..de0888a884 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js @@ -0,0 +1,41 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = + + + + + + +recursivePatternCapture; /** + * Traverse a pattern/identifier node, calling 'callback' + * for each leaf identifier. + * @param {node} pattern + * @param {Function} callback + * @return {void} + */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case + callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) { + if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') { + callback(p.argument); + return; + } + recursivePatternCapture(p.value, callback); + }); + break; + + case 'ArrayPattern': + pattern.elements.forEach(function (element) { + if (element == null) {return;} + if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') { + callback(element.argument); + return; + } + recursivePatternCapture(element, callback); + }); + break; + + case 'AssignmentPattern': + callback(pattern.left); + break; + default:} + +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJwYXR0ZXJuIiwiY2FsbGJhY2siLCJ0eXBlIiwicHJvcGVydGllcyIsImZvckVhY2giLCJwIiwiYXJndW1lbnQiLCJ2YWx1ZSIsImVsZW1lbnRzIiwiZWxlbWVudCIsImxlZnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPd0JBLHVCLEVBUHhCOzs7Ozs7NEJBT2UsU0FBU0EsdUJBQVQsQ0FBaUNDLE9BQWpDLEVBQTBDQyxRQUExQyxFQUFvRCxDQUNqRSxRQUFRRCxRQUFRRSxJQUFoQixHQUNFLEtBQUssWUFBTCxFQUFtQjtBQUNqQkQsZUFBU0QsT0FBVCxFQUNBLE1BRUYsS0FBSyxlQUFMLENBQ0VBLFFBQVFHLFVBQVIsQ0FBbUJDLE9BQW5CLENBQTJCLFVBQUNDLENBQUQsRUFBTztBQUNoQyxZQUFJQSxFQUFFSCxJQUFGLEtBQVcsMEJBQVgsSUFBeUNHLEVBQUVILElBQUYsS0FBVyxhQUF4RCxFQUF1RTtBQUNyRUQsbUJBQVNJLEVBQUVDLFFBQVg7QUFDQTtBQUNEO0FBQ0RQLGdDQUF3Qk0sRUFBRUUsS0FBMUIsRUFBaUNOLFFBQWpDO0FBQ0QsT0FORDtBQU9BOztBQUVGLFNBQUssY0FBTDtBQUNFRCxjQUFRUSxRQUFSLENBQWlCSixPQUFqQixDQUF5QixVQUFDSyxPQUFELEVBQWE7QUFDcEMsWUFBSUEsV0FBVyxJQUFmLEVBQXFCLENBQUUsT0FBUztBQUNoQyxZQUFJQSxRQUFRUCxJQUFSLEtBQWlCLDBCQUFqQixJQUErQ08sUUFBUVAsSUFBUixLQUFpQixhQUFwRSxFQUFtRjtBQUNqRkQsbUJBQVNRLFFBQVFILFFBQWpCO0FBQ0E7QUFDRDtBQUNEUCxnQ0FBd0JVLE9BQXhCLEVBQWlDUixRQUFqQztBQUNELE9BUEQ7QUFRQTs7QUFFRixTQUFLLG1CQUFMO0FBQ0VBLGVBQVNELFFBQVFVLElBQWpCO0FBQ0E7QUFDRixZQTdCRjs7QUErQkQiLCJmaWxlIjoicGF0dGVybkNhcHR1cmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYXZlcnNlIGEgcGF0dGVybi9pZGVudGlmaWVyIG5vZGUsIGNhbGxpbmcgJ2NhbGxiYWNrJ1xuICogZm9yIGVhY2ggbGVhZiBpZGVudGlmaWVyLlxuICogQHBhcmFtICB7bm9kZX0gICBwYXR0ZXJuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js b/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js new file mode 100644 index 0000000000..c9906d3cf4 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js @@ -0,0 +1,12 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.RemotePath = undefined;var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _resolve2 = require('eslint-module-utils/resolve');var _resolve3 = _interopRequireDefault(_resolve2);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 + +RemotePath = exports.RemotePath = function () { + function RemotePath(path, context) {_classCallCheck(this, RemotePath); + this.path = path; + this.context = context; + }_createClass(RemotePath, [{ key: 'resolve', value: function () {function resolve( + + value) { + return _resolve3['default'].relative(value, this.path, this.context.settings); + }return resolve;}() }]);return RemotePath;}(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcmVtb3RlUGF0aC5qcyJdLCJuYW1lcyI6WyJSZW1vdGVQYXRoIiwicGF0aCIsImNvbnRleHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJyZWxhdGl2ZSIsInNldHRpbmdzIl0sIm1hcHBpbmdzIjoiK29CQUFBLHVEOztBQUVhQSxVLFdBQUFBLFU7QUFDWCxzQkFBWUMsSUFBWixFQUFrQkMsT0FBbEIsRUFBMkI7QUFDekIsU0FBS0QsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0QsRzs7QUFFT0MsVyxFQUFPO0FBQ2IsZUFBT0MscUJBQVFDLFFBQVIsQ0FBaUJGLEtBQWpCLEVBQXdCLEtBQUtGLElBQTdCLEVBQW1DLEtBQUtDLE9BQUwsQ0FBYUksUUFBaEQsQ0FBUDtBQUNELE8iLCJmaWxlIjoicmVtb3RlUGF0aC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5cbmV4cG9ydCBjbGFzcyBSZW1vdGVQYXRoIHtcbiAgY29uc3RydWN0b3IocGF0aCwgY29udGV4dCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWUpIHtcbiAgICByZXR1cm4gcmVzb2x2ZS5yZWxhdGl2ZSh2YWx1ZSwgdGhpcy5wYXRoLCB0aGlzLmNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/specifier.js b/node_modules/eslint-plugin-import/lib/exportMap/specifier.js new file mode 100644 index 0000000000..7670c0cde2 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/specifier.js @@ -0,0 +1,33 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = processSpecifier;function processSpecifier(specifier, astNode, exportMap, namespace) { + var nsource = astNode.source && astNode.source.value; + var exportMeta = {}; + var local = void 0; + + switch (specifier.type) { + case 'ExportDefaultSpecifier': + if (!nsource) {return;} + local = 'default'; + break; + case 'ExportNamespaceSpecifier': + exportMap.namespace.set(specifier.exported.name, Object.defineProperty(exportMeta, 'namespace', { + get: function () {function get() {return namespace.resolveImport(nsource);}return get;}() })); + + return; + case 'ExportAllDeclaration': + exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.source.value)); + return; + case 'ExportSpecifier': + if (!astNode.source) { + exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.local)); + return; + } + // else falls through + default: + local = specifier.local.name; + break;} + + + // todo: JSDoc + exportMap.reexports.set(specifier.exported.name, { local: local, getImport: function () {function getImport() {return namespace.resolveImport(nsource);}return getImport;}() }); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvc3BlY2lmaWVyLmpzIl0sIm5hbWVzIjpbInByb2Nlc3NTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJhc3ROb2RlIiwiZXhwb3J0TWFwIiwibmFtZXNwYWNlIiwibnNvdXJjZSIsInNvdXJjZSIsInZhbHVlIiwiZXhwb3J0TWV0YSIsImxvY2FsIiwidHlwZSIsInNldCIsImV4cG9ydGVkIiwibmFtZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwicmVzb2x2ZUltcG9ydCIsImFkZCIsInJlZXhwb3J0cyIsImdldEltcG9ydCJdLCJtYXBwaW5ncyI6ImdHQUF3QkEsZ0IsQ0FBVCxTQUFTQSxnQkFBVCxDQUEwQkMsU0FBMUIsRUFBcUNDLE9BQXJDLEVBQThDQyxTQUE5QyxFQUF5REMsU0FBekQsRUFBb0U7QUFDakYsTUFBTUMsVUFBVUgsUUFBUUksTUFBUixJQUFrQkosUUFBUUksTUFBUixDQUFlQyxLQUFqRDtBQUNBLE1BQU1DLGFBQWEsRUFBbkI7QUFDQSxNQUFJQyxjQUFKOztBQUVBLFVBQVFSLFVBQVVTLElBQWxCO0FBQ0UsU0FBSyx3QkFBTDtBQUNFLFVBQUksQ0FBQ0wsT0FBTCxFQUFjLENBQUUsT0FBUztBQUN6QkksY0FBUSxTQUFSO0FBQ0E7QUFDRixTQUFLLDBCQUFMO0FBQ0VOLGdCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaURDLE9BQU9DLGNBQVAsQ0FBc0JQLFVBQXRCLEVBQWtDLFdBQWxDLEVBQStDO0FBQzlGUSxXQUQ4Riw4QkFDeEYsQ0FBRSxPQUFPWixVQUFVYSxhQUFWLENBQXdCWixPQUF4QixDQUFQLENBQTBDLENBRDRDLGdCQUEvQyxDQUFqRDs7QUFHQTtBQUNGLFNBQUssc0JBQUw7QUFDRUYsZ0JBQVVDLFNBQVYsQ0FBb0JPLEdBQXBCLENBQXdCVixVQUFVVyxRQUFWLENBQW1CQyxJQUFuQixJQUEyQlosVUFBVVcsUUFBVixDQUFtQkwsS0FBdEUsRUFBNkVILFVBQVVjLEdBQVYsQ0FBY1YsVUFBZCxFQUEwQlAsVUFBVUssTUFBVixDQUFpQkMsS0FBM0MsQ0FBN0U7QUFDQTtBQUNGLFNBQUssaUJBQUw7QUFDRSxVQUFJLENBQUNMLFFBQVFJLE1BQWIsRUFBcUI7QUFDbkJILGtCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJaLFVBQVVXLFFBQVYsQ0FBbUJMLEtBQXRFLEVBQTZFSCxVQUFVYyxHQUFWLENBQWNWLFVBQWQsRUFBMEJQLFVBQVVRLEtBQXBDLENBQTdFO0FBQ0E7QUFDRDtBQUNIO0FBQ0E7QUFDRUEsY0FBUVIsVUFBVVEsS0FBVixDQUFnQkksSUFBeEI7QUFDQSxZQXJCSjs7O0FBd0JBO0FBQ0FWLFlBQVVnQixTQUFWLENBQW9CUixHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaUQsRUFBRUosWUFBRixFQUFTVyx3QkFBVyw2QkFBTWhCLFVBQVVhLGFBQVYsQ0FBd0JaLE9BQXhCLENBQU4sRUFBWCxvQkFBVCxFQUFqRDtBQUNEIiwiZmlsZSI6InNwZWNpZmllci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb2Nlc3NTcGVjaWZpZXIoc3BlY2lmaWVyLCBhc3ROb2RlLCBleHBvcnRNYXAsIG5hbWVzcGFjZSkge1xuICBjb25zdCBuc291cmNlID0gYXN0Tm9kZS5zb3VyY2UgJiYgYXN0Tm9kZS5zb3VyY2UudmFsdWU7XG4gIGNvbnN0IGV4cG9ydE1ldGEgPSB7fTtcbiAgbGV0IGxvY2FsO1xuXG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgIGlmICghbnNvdXJjZSkgeyByZXR1cm47IH1cbiAgICAgIGxvY2FsID0gJ2RlZmF1bHQnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzpcbiAgICAgIGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KHNwZWNpZmllci5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgZ2V0KCkgeyByZXR1cm4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSk7IH0sXG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOlxuICAgICAgZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlLCBuYW1lc3BhY2UuYWRkKGV4cG9ydE1ldGEsIHNwZWNpZmllci5zb3VyY2UudmFsdWUpKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdFeHBvcnRTcGVjaWZpZXInOlxuICAgICAgaWYgKCFhc3ROb2RlLnNvdXJjZSkge1xuICAgICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldChzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIG5hbWVzcGFjZS5hZGQoZXhwb3J0TWV0YSwgc3BlY2lmaWVyLmxvY2FsKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAvLyBlbHNlIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OlxuICAgICAgbG9jYWwgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gdG9kbzogSlNEb2NcbiAgZXhwb3J0TWFwLnJlZXhwb3J0cy5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsIHsgbG9jYWwsIGdldEltcG9ydDogKCkgPT4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSkgfSk7XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/typescript.js b/node_modules/eslint-plugin-import/lib/exportMap/typescript.js new file mode 100644 index 0000000000..5aad0ce08b --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/typescript.js @@ -0,0 +1,44 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +isEsModuleInterop = isEsModuleInterop;var _path = require('path');var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _hash = require('eslint-module-utils/hash');var ts = void 0;var tsconfigCache = new Map();function readTsConfig(context) {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');} // eslint-disable-line import/no-extraneous-dependencies + 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(context) {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; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdHlwZXNjcmlwdC5qcyJdLCJuYW1lcyI6WyJpc0VzTW9kdWxlSW50ZXJvcCIsInRzIiwidHNjb25maWdDYWNoZSIsIk1hcCIsInJlYWRUc0NvbmZpZyIsImNvbnRleHQiLCJ0c2NvbmZpZ0luZm8iLCJjd2QiLCJwYXJzZXJPcHRpb25zIiwidHNjb25maWdSb290RGlyIiwicHJvY2VzcyIsImdldEVudiIsImtleSIsImVudiIsInRzQ29uZmlnUGF0aCIsInVuZGVmaW5lZCIsInJlcXVpcmUiLCJjb25maWdGaWxlIiwicmVhZENvbmZpZ0ZpbGUiLCJzeXMiLCJyZWFkRmlsZSIsInBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50IiwiY29uZmlnIiwiZSIsImNhY2hlS2V5IiwiZGlnZXN0IiwidHNDb25maWciLCJnZXQiLCJzZXQiLCJvcHRpb25zIiwiZXNNb2R1bGVJbnRlcm9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JnQkEsaUIsR0FBQUEsaUIsQ0EvQmhCLDRCQUNBLG9FQUNBLGdEQUVBLElBQUlDLFdBQUosQ0FDQSxJQUFNQyxnQkFBZ0IsSUFBSUMsR0FBSixFQUF0QixDQUVBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCLENBQzdCLElBQU1DLGVBQWUsb0NBQWUsRUFDbENDLEtBQUtGLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBQS9DLElBQWtFQyxRQUFRSCxHQUFSLEVBRHJDLEVBRWxDSSxxQkFBUSxnQkFBQ0MsR0FBRCxVQUFTRixRQUFRRyxHQUFSLENBQVlELEdBQVosQ0FBVCxFQUFSLGlCQUZrQyxFQUFmLENBQXJCLENBSUEsSUFBSSxDQUNGLElBQUlOLGFBQWFRLFlBQWIsS0FBOEJDLFNBQWxDLEVBQTZDLENBQzNDO0FBQ0EsVUFBSSxDQUFDZCxFQUFMLEVBQVMsQ0FBRUEsS0FBS2UsUUFBUSxZQUFSLENBQUwsQ0FBNkIsQ0FGRyxDQUVGO0FBRXpDLFVBQU1DLGFBQWFoQixHQUFHaUIsY0FBSCxDQUFrQlosYUFBYVEsWUFBL0IsRUFBNkNiLEdBQUdrQixHQUFILENBQU9DLFFBQXBELENBQW5CLENBQ0EsT0FBT25CLEdBQUdvQiwwQkFBSCxDQUNMSixXQUFXSyxNQUROLEVBRUxyQixHQUFHa0IsR0FGRSxFQUdMLG1CQUFRYixhQUFhUSxZQUFyQixDQUhLLENBQVAsQ0FLRCxDQUNGLENBWkQsQ0FZRSxPQUFPUyxDQUFQLEVBQVUsQ0FDVjtBQUNELEdBRUQsT0FBTyxJQUFQLENBQ0QsQ0FFTSxTQUFTdkIsaUJBQVQsQ0FBMkJLLE9BQTNCLEVBQW9DLENBQ3pDLElBQU1tQixXQUFXLHNCQUFXLEVBQzFCZixpQkFBaUJKLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBRHRDLEVBQVgsRUFFZGdCLE1BRmMsQ0FFUCxLQUZPLENBQWpCO0FBR0EsTUFBSUMsV0FBV3hCLGNBQWN5QixHQUFkLENBQWtCSCxRQUFsQixDQUFmO0FBQ0EsTUFBSSxPQUFPRSxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ25DQSxlQUFXdEIsYUFBYUMsT0FBYixDQUFYO0FBQ0FILGtCQUFjMEIsR0FBZCxDQUFrQkosUUFBbEIsRUFBNEJFLFFBQTVCO0FBQ0Q7O0FBRUQsU0FBT0EsWUFBWUEsU0FBU0csT0FBckIsR0FBK0JILFNBQVNHLE9BQVQsQ0FBaUJDLGVBQWhELEdBQWtFLEtBQXpFO0FBQ0QiLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5pbXBvcnQgeyBoYXNoT2JqZWN0IH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9oYXNoJztcblxubGV0IHRzO1xuY29uc3QgdHNjb25maWdDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gcmVhZFRzQ29uZmlnKGNvbnRleHQpIHtcbiAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgIGN3ZDogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHByb2Nlc3MuZW52W2tleV0sXG4gIH0pO1xuICB0cnkge1xuICAgIGlmICh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgIGlmICghdHMpIHsgdHMgPSByZXF1aXJlKCd0eXBlc2NyaXB0Jyk7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblxuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHRzY29uZmlnSW5mby50c0NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG4gICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgICAgICB0cy5zeXMsXG4gICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIENhdGNoIGFueSBlcnJvcnNcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCkge1xuICBjb25zdCBjYWNoZUtleSA9IGhhc2hPYmplY3Qoe1xuICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCB0c0NvbmZpZyA9IHRzY29uZmlnQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0c0NvbmZpZyA9IHJlYWRUc0NvbmZpZyhjb250ZXh0KTtcbiAgICB0c2NvbmZpZ0NhY2hlLnNldChjYWNoZUtleSwgdHNDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHRzQ29uZmlnICYmIHRzQ29uZmlnLm9wdGlvbnMgPyB0c0NvbmZpZy5vcHRpb25zLmVzTW9kdWxlSW50ZXJvcCA6IGZhbHNlO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/visitor.js b/node_modules/eslint-plugin-import/lib/exportMap/visitor.js new file mode 100644 index 0000000000..38f51889f1 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/exportMap/visitor.js @@ -0,0 +1,171 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); +var _eslint = require('eslint'); +var _doc = require('./doc'); +var _namespace = require('./namespace');var _namespace2 = _interopRequireDefault(_namespace); +var _specifier = require('./specifier');var _specifier2 = _interopRequireDefault(_specifier); +var _captureDependency = require('./captureDependency'); +var _patternCapture = require('./patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); +var _remotePath = require('./remotePath');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");}} + +/** + * sometimes legacy support isn't _that_ hard... right? + */ +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 }); + } +}var + +ImportExportVisitorBuilder = function () { + function ImportExportVisitorBuilder( + path, + context, + exportMap, + ExportMapBuilder, + content, + ast, + isEsModuleInteropTrue, + thunkFor) + {var _this = this;_classCallCheck(this, ImportExportVisitorBuilder); + this.context = context; + this.namespace = new _namespace2['default'](path, context, ExportMapBuilder); + this.remotePathResolver = new _remotePath.RemotePath(path, context); + this.source = makeSourceCode(content, ast); + this.exportMap = exportMap; + this.ast = ast; + this.isEsModuleInteropTrue = isEsModuleInteropTrue; + this.thunkFor = thunkFor; + var docstyle = this.context.settings && this.context.settings['import/docstyle'] || ['jsdoc']; + this.docStyleParsers = {}; + docstyle.forEach(function (style) { + _this.docStyleParsers[style] = _doc.availableDocStyleParsers[style]; + }); + }_createClass(ImportExportVisitorBuilder, [{ key: 'build', value: function () {function build( + + astNode) {var _this3 = this; + return Object.assign({ + ExportDefaultDeclaration: function () {function ExportDefaultDeclaration() { + var exportMeta = (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode); + if (astNode.declaration.type === 'Identifier') { + this.namespace.add(exportMeta, astNode.declaration); + } + this.exportMap.namespace.set('default', exportMeta); + }return ExportDefaultDeclaration;}(), + ExportAllDeclaration: function () {function ExportAllDeclaration() { + var getter = (0, _captureDependency.captureDependency)(astNode, astNode.exportKind === 'type', this.remotePathResolver, this.exportMap, this.context, this.thunkFor); + if (getter) {this.exportMap.dependencies.add(getter);} + if (astNode.exported) { + (0, _specifier2['default'])(astNode, astNode.exported, this.exportMap, this.namespace); + } + }return ExportAllDeclaration;}(), + /** capture namespaces in case of later export */ + ImportDeclaration: function () {function ImportDeclaration() { + (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); + var ns = astNode.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';}); + if (ns) { + this.namespace.rawSet(ns.local.name, astNode.source.value); + } + }return ImportDeclaration;}(), + ExportNamedDeclaration: function () {function ExportNamedDeclaration() {var _this2 = this; + (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); + // capture declaration + if (astNode.declaration != null) { + switch (astNode.declaration.type) { + case 'FunctionDeclaration': + case 'ClassDeclaration': + case 'TypeAlias': // flowtype with babel-eslint parser + case 'InterfaceDeclaration': + case 'DeclareFunction': + case 'TSDeclareFunction': + case 'TSEnumDeclaration': + case 'TSTypeAliasDeclaration': + case 'TSInterfaceDeclaration': + case 'TSAbstractClassDeclaration': + case 'TSModuleDeclaration': + this.exportMap.namespace.set(astNode.declaration.id.name, (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); + break; + case 'VariableDeclaration': + astNode.declaration.declarations.forEach(function (d) { + (0, _patternCapture2['default'])( + d.id, + function (id) {return _this2.exportMap.namespace.set(id.name, (0, _doc.captureDoc)(_this2.source, _this2.docStyleParsers, d, astNode));}); + + }); + break; + default:} + + } + astNode.specifiers.forEach(function (s) {return (0, _specifier2['default'])(s, astNode, _this2.exportMap, _this2.namespace);}); + }return ExportNamedDeclaration;}(), + TSExportAssignment: function () {function TSExportAssignment() {return _this3.typeScriptExport(astNode);}return TSExportAssignment;}() }, + this.isEsModuleInteropTrue && { TSNamespaceExportDeclaration: function () {function TSNamespaceExportDeclaration() {return _this3.typeScriptExport(astNode);}return TSNamespaceExportDeclaration;}() }); + + }return build;}() + + // This doesn't declare anything, but changes what's being exported. + }, { key: 'typeScriptExport', value: function () {function typeScriptExport(astNode) {var _this4 = this; + var exportedName = astNode.type === 'TSNamespaceExportDeclaration' ? + (astNode.id || astNode.name).name : + astNode.expression && astNode.expression.name || astNode.expression.id && astNode.expression.id.name || null; + var declTypes = [ + 'VariableDeclaration', + 'ClassDeclaration', + 'TSDeclareFunction', + 'TSEnumDeclaration', + 'TSTypeAliasDeclaration', + 'TSInterfaceDeclaration', + 'TSAbstractClassDeclaration', + 'TSModuleDeclaration']; + + var exportedDecls = this.ast.body.filter(function (_ref) {var type = _ref.type,id = _ref.id,declarations = _ref.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && ( + id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));}); + + if (exportedDecls.length === 0) { + // Export is not referencing any local declaration, must be re-exporting + this.exportMap.namespace.set('default', (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); + return; + } + if ( + this.isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && !this.exportMap.namespace.has('default') // and default isn't added already + ) { + this.exportMap.namespace.set('default', {}); // add default export + } + exportedDecls.forEach(function (decl) { + if (decl.type === 'TSModuleDeclaration') { + if (decl.body && decl.body.type === 'TSModuleDeclaration') { + _this4.exportMap.namespace.set(decl.body.id.name, (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl.body)); + } else if (decl.body && decl.body.body) { + decl.body.body.forEach(function (moduleBlockNode) { + // Export-assignment exports all members in the namespace, + // explicitly exported or not. + var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? + moduleBlockNode.declaration : + moduleBlockNode; + + if (!namespaceDecl) { + // TypeScript can check this for us; we needn't + } else if (namespaceDecl.type === 'VariableDeclaration') { + namespaceDecl.declarations.forEach(function (d) {return (0, _patternCapture2['default'])(d.id, function (id) {return _this4.exportMap.namespace.set( + id.name, + (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl, namespaceDecl, moduleBlockNode));});}); + + + } else { + _this4.exportMap.namespace.set( + namespaceDecl.id.name, + (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, moduleBlockNode)); + } + }); + } + } else { + // Export as default + _this4.exportMap.namespace.set('default', (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl)); + } + }); + }return typeScriptExport;}() }]);return ImportExportVisitorBuilder;}();exports['default'] = ImportExportVisitorBuilder; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdmlzaXRvci5qcyJdLCJuYW1lcyI6WyJtYWtlU291cmNlQ29kZSIsInRleHQiLCJhc3QiLCJTb3VyY2VDb2RlIiwibGVuZ3RoIiwiSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIiLCJwYXRoIiwiY29udGV4dCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJjb250ZW50IiwiaXNFc01vZHVsZUludGVyb3BUcnVlIiwidGh1bmtGb3IiLCJuYW1lc3BhY2UiLCJOYW1lc3BhY2UiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJSZW1vdGVQYXRoIiwic291cmNlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsImRvY1N0eWxlUGFyc2VycyIsImZvckVhY2giLCJzdHlsZSIsImF2YWlsYWJsZURvY1N0eWxlUGFyc2VycyIsImFzdE5vZGUiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJleHBvcnRNZXRhIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiYWRkIiwic2V0IiwiRXhwb3J0QWxsRGVjbGFyYXRpb24iLCJnZXR0ZXIiLCJleHBvcnRLaW5kIiwiZGVwZW5kZW5jaWVzIiwiZXhwb3J0ZWQiLCJJbXBvcnREZWNsYXJhdGlvbiIsIm5zIiwic3BlY2lmaWVycyIsImZpbmQiLCJzIiwicmF3U2V0IiwibG9jYWwiLCJuYW1lIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaWQiLCJkZWNsYXJhdGlvbnMiLCJkIiwiVFNFeHBvcnRBc3NpZ25tZW50IiwidHlwZVNjcmlwdEV4cG9ydCIsIlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iLCJleHBvcnRlZE5hbWUiLCJleHByZXNzaW9uIiwiZGVjbFR5cGVzIiwiZXhwb3J0ZWREZWNscyIsImJvZHkiLCJmaWx0ZXIiLCJoYXMiLCJkZWNsIiwibW9kdWxlQmxvY2tOb2RlIiwibmFtZXNwYWNlRGVjbCJdLCJtYXBwaW5ncyI6ImduQkFBQSwrQztBQUNBO0FBQ0E7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QTdCLEVBQXdDLHFCQUFXLE9BQUtiLE1BQWhCLEVBQXdCLE9BQUtHLGVBQTdCLEVBQThDdUMsSUFBOUMsQ0FBeEM7QUFDRDtBQUNGLFNBL0JEO0FBZ0NELE8sMkZBbkprQnRELDBCIiwiZmlsZSI6InZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IHsgU291cmNlQ29kZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgeyBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMsIGNhcHR1cmVEb2MgfSBmcm9tICcuL2RvYyc7XG5pbXBvcnQgTmFtZXNwYWNlIGZyb20gJy4vbmFtZXNwYWNlJztcbmltcG9ydCBwcm9jZXNzU3BlY2lmaWVyIGZyb20gJy4vc3BlY2lmaWVyJztcbmltcG9ydCB7IGNhcHR1cmVEZXBlbmRlbmN5LCBjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIH0gZnJvbSAnLi9jYXB0dXJlRGVwZW5kZW5jeSc7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi9wYXR0ZXJuQ2FwdHVyZSc7XG5pbXBvcnQgeyBSZW1vdGVQYXRoIH0gZnJvbSAnLi9yZW1vdGVQYXRoJztcblxuLyoqXG4gKiBzb21ldGltZXMgbGVnYWN5IHN1cHBvcnQgaXNuJ3QgX3RoYXRfIGhhcmQuLi4gcmlnaHQ/XG4gKi9cbmZ1bmN0aW9uIG1ha2VTb3VyY2VDb2RlKHRleHQsIGFzdCkge1xuICBpZiAoU291cmNlQ29kZS5sZW5ndGggPiAxKSB7XG4gICAgLy8gRVNMaW50IDNcbiAgICByZXR1cm4gbmV3IFNvdXJjZUNvZGUodGV4dCwgYXN0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBFU0xpbnQgNCwgNVxuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh7IHRleHQsIGFzdCB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdGgsXG4gICAgY29udGV4dCxcbiAgICBleHBvcnRNYXAsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICBjb250ZW50LFxuICAgIGFzdCxcbiAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgdGh1bmtGb3IsXG4gICkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTmFtZXNwYWNlKHBhdGgsIGNvbnRleHQsIEV4cG9ydE1hcEJ1aWxkZXIpO1xuICAgIHRoaXMucmVtb3RlUGF0aFJlc29sdmVyID0gbmV3IFJlbW90ZVBhdGgocGF0aCwgY29udGV4dCk7XG4gICAgdGhpcy5zb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuICAgIHRoaXMuZXhwb3J0TWFwID0gZXhwb3J0TWFwO1xuICAgIHRoaXMuYXN0ID0gYXN0O1xuICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3BUcnVlO1xuICAgIHRoaXMudGh1bmtGb3IgPSB0aHVua0ZvcjtcbiAgICBjb25zdCBkb2NzdHlsZSA9IHRoaXMuY29udGV4dC5zZXR0aW5ncyAmJiB0aGlzLmNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgICB0aGlzLmRvY1N0eWxlUGFyc2VycyA9IHt9O1xuICAgIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICB0aGlzLmRvY1N0eWxlUGFyc2Vyc1tzdHlsZV0gPSBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnNbc3R5bGVdO1xuICAgIH0pO1xuICB9XG5cbiAgYnVpbGQoYXN0Tm9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHRoaXMuc291cmNlLCB0aGlzLmRvY1N0eWxlUGFyc2VycywgYXN0Tm9kZSk7XG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHRoaXMubmFtZXNwYWNlLmFkZChleHBvcnRNZXRhLCBhc3ROb2RlLmRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgZXhwb3J0TWV0YSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNhcHR1cmVEZXBlbmRlbmN5KGFzdE5vZGUsIGFzdE5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnLCB0aGlzLnJlbW90ZVBhdGhSZXNvbHZlciwgdGhpcy5leHBvcnRNYXAsIHRoaXMuY29udGV4dCwgdGhpcy50aHVua0Zvcik7XG4gICAgICAgIGlmIChnZXR0ZXIpIHsgdGhpcy5leHBvcnRNYXAuZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICAgIGlmIChhc3ROb2RlLmV4cG9ydGVkKSB7XG4gICAgICAgICAgcHJvY2Vzc1NwZWNpZmllcihhc3ROb2RlLCBhc3ROb2RlLmV4cG9ydGVkLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydCAqL1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICBjb25zdCBucyA9IGFzdE5vZGUuc3BlY2lmaWVycy5maW5kKChzKSA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgdGhpcy5uYW1lc3BhY2UucmF3U2V0KG5zLmxvY2FsLm5hbWUsIGFzdE5vZGUuc291cmNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFzdE5vZGUuZGVjbGFyYXRpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1R5cGVBbGlhcyc6IC8vIGZsb3d0eXBlIHdpdGggYmFiZWwtZXNsaW50IHBhcnNlclxuICAgICAgICAgICAgY2FzZSAnSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRW51bURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU0Fic3RyYWN0Q2xhc3NEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChhc3ROb2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgIGFzdE5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICAgIGQuaWQsXG4gICAgICAgICAgICAgICAgICAoaWQpID0+IHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGQsIGFzdE5vZGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBhc3ROb2RlLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpKTtcbiAgICAgIH0sXG4gICAgICBUU0V4cG9ydEFzc2lnbm1lbnQ6ICgpID0+IHRoaXMudHlwZVNjcmlwdEV4cG9ydChhc3ROb2RlKSxcbiAgICAgIC4uLnRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlICYmIHsgVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjogKCkgPT4gdGhpcy50eXBlU2NyaXB0RXhwb3J0KGFzdE5vZGUpIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoaXMgZG9lc24ndCBkZWNsYXJlIGFueXRoaW5nLCBidXQgY2hhbmdlcyB3aGF0J3MgYmVpbmcgZXhwb3J0ZWQuXG4gIHR5cGVTY3JpcHRFeHBvcnQoYXN0Tm9kZSkge1xuICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IGFzdE5vZGUudHlwZSA9PT0gJ1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24nXG4gICAgICA/IChhc3ROb2RlLmlkIHx8IGFzdE5vZGUubmFtZSkubmFtZVxuICAgICAgOiBhc3ROb2RlLmV4cHJlc3Npb24gJiYgYXN0Tm9kZS5leHByZXNzaW9uLm5hbWUgfHwgYXN0Tm9kZS5leHByZXNzaW9uLmlkICYmIGFzdE5vZGUuZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgY29uc3QgZGVjbFR5cGVzID0gW1xuICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTRGVjbGFyZUZ1bmN0aW9uJyxcbiAgICAgICdUU0VudW1EZWNsYXJhdGlvbicsXG4gICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgIF07XG4gICAgY29uc3QgZXhwb3J0ZWREZWNscyA9IHRoaXMuYXN0LmJvZHkuZmlsdGVyKCh7IHR5cGUsIGlkLCBkZWNsYXJhdGlvbnMgfSkgPT4gaW5jbHVkZXMoZGVjbFR5cGVzLCB0eXBlKSAmJiAoXG4gICAgICBpZCAmJiBpZC5uYW1lID09PSBleHBvcnRlZE5hbWUgfHwgZGVjbGFyYXRpb25zICYmIGRlY2xhcmF0aW9ucy5maW5kKChkKSA9PiBkLmlkLm5hbWUgPT09IGV4cG9ydGVkTmFtZSlcbiAgICApKTtcbiAgICBpZiAoZXhwb3J0ZWREZWNscy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEV4cG9ydCBpcyBub3QgcmVmZXJlbmNpbmcgYW55IGxvY2FsIGRlY2xhcmF0aW9uLCBtdXN0IGJlIHJlLWV4cG9ydGluZ1xuICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlIC8vIGVzTW9kdWxlSW50ZXJvcCBpcyBvbiBpbiB0c2NvbmZpZ1xuICAgICAgJiYgIXRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0Jywge30pOyAvLyBhZGQgZGVmYXVsdCBleHBvcnRcbiAgICB9XG4gICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICBpZiAoZGVjbC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbicpIHtcbiAgICAgICAgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkudHlwZSA9PT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChkZWNsLmJvZHkuaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGRlY2wuYm9keSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgIGRlY2wuYm9keS5ib2R5LmZvckVhY2goKG1vZHVsZUJsb2NrTm9kZSkgPT4ge1xuICAgICAgICAgICAgLy8gRXhwb3J0LWFzc2lnbm1lbnQgZXhwb3J0cyBhbGwgbWVtYmVycyBpbiB0aGUgbmFtZXNwYWNlLFxuICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VEZWNsID0gbW9kdWxlQmxvY2tOb2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJ1xuICAgICAgICAgICAgICA/IG1vZHVsZUJsb2NrTm9kZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VEZWNsKSB7XG4gICAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgY2FuIGNoZWNrIHRoaXMgZm9yIHVzOyB3ZSBuZWVkbid0XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGQuaWQsIChpZCkgPT4gdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsLCBuYW1lc3BhY2VEZWNsLCBtb2R1bGVCbG9ja05vZGUpLFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5pZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBtb2R1bGVCbG9ja05vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/index.js b/node_modules/eslint-plugin-import/lib/index.js index daf8d74398..9f53379f91 100644 --- a/node_modules/eslint-plugin-import/lib/index.js +++ b/node_modules/eslint-plugin-import/lib/index.js @@ -1,4 +1,6 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var rules = exports.rules = { +'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.flatConfigs = exports.configs = exports.rules = undefined;var _package = require('../package.json'); + +var rules = exports.rules = { 'no-unresolved': require('./rules/no-unresolved'), named: require('./rules/named'), 'default': require('./rules/default'), @@ -68,4 +70,33 @@ var configs = exports.configs = { 'react-native': require('../config/react-native'), electron: require('../config/electron'), typescript: require('../config/typescript') }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0Il0sIm1hcHBpbmdzIjoiMkVBQU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcbiJdfQ== \ No newline at end of file + + +// Base Plugin Object +var importPlugin = { + meta: { name: _package.name, version: _package.version }, + rules: rules }; + + +// Create flat configs (Only ones that declare plugins and parser options need to be different from the legacy config) +var createFlatConfig = function createFlatConfig(baseConfig, configName) {return Object.assign({}, + baseConfig, { + name: 'import/' + String(configName), + plugins: { 'import': importPlugin } });}; + + +var flatConfigs = exports.flatConfigs = { + recommended: createFlatConfig( + require('../config/flat/recommended'), + 'recommended'), + + + errors: createFlatConfig(require('../config/flat/errors'), 'errors'), + warnings: createFlatConfig(require('../config/flat/warnings'), 'warnings'), + + // useful stuff for folks using various environments + react: require('../config/flat/react'), + 'react-native': configs['react-native'], + electron: configs.electron, + typescript: configs.typescript }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0IiwiaW1wb3J0UGx1Z2luIiwibWV0YSIsIm5hbWUiLCJ2ZXJzaW9uIiwiY3JlYXRlRmxhdENvbmZpZyIsImJhc2VDb25maWciLCJjb25maWdOYW1lIiwicGx1Z2lucyIsImZsYXRDb25maWdzIl0sIm1hcHBpbmdzIjoiNklBQUE7O0FBRU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQjs7O0FBZ0JQO0FBQ0EsSUFBTWMsZUFBZTtBQUNuQkMsUUFBTSxFQUFFQyxtQkFBRixFQUFRQyx5QkFBUixFQURhO0FBRW5CbEIsY0FGbUIsRUFBckI7OztBQUtBO0FBQ0EsSUFBTW1CLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQUNDLFVBQUQsRUFBYUMsVUFBYjtBQUNwQkQsWUFEb0I7QUFFdkJILDZCQUFnQkksVUFBaEIsQ0FGdUI7QUFHdkJDLGFBQVMsRUFBRSxVQUFRUCxZQUFWLEVBSGMsS0FBekI7OztBQU1PLElBQU1RLG9DQUFjO0FBQ3pCZCxlQUFhVTtBQUNYbEIsVUFBUSw0QkFBUixDQURXO0FBRVgsZUFGVyxDQURZOzs7QUFNekJTLFVBQVFTLGlCQUFpQmxCLFFBQVEsdUJBQVIsQ0FBakIsRUFBbUQsUUFBbkQsQ0FOaUI7QUFPekJVLFlBQVVRLGlCQUFpQmxCLFFBQVEseUJBQVIsQ0FBakIsRUFBcUQsVUFBckQsQ0FQZTs7QUFTekI7QUFDQVcsU0FBT1gsUUFBUSxzQkFBUixDQVZrQjtBQVd6QixrQkFBZ0JPLFFBQVEsY0FBUixDQVhTO0FBWXpCSyxZQUFVTCxRQUFRSyxRQVpPO0FBYXpCQyxjQUFZTixRQUFRTSxVQWJLLEVBQXBCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmFtZSwgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcblxuLy8gQmFzZSBQbHVnaW4gT2JqZWN0XG5jb25zdCBpbXBvcnRQbHVnaW4gPSB7XG4gIG1ldGE6IHsgbmFtZSwgdmVyc2lvbiB9LFxuICBydWxlcyxcbn07XG5cbi8vIENyZWF0ZSBmbGF0IGNvbmZpZ3MgKE9ubHkgb25lcyB0aGF0IGRlY2xhcmUgcGx1Z2lucyBhbmQgcGFyc2VyIG9wdGlvbnMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVnYWN5IGNvbmZpZylcbmNvbnN0IGNyZWF0ZUZsYXRDb25maWcgPSAoYmFzZUNvbmZpZywgY29uZmlnTmFtZSkgPT4gKHtcbiAgLi4uYmFzZUNvbmZpZyxcbiAgbmFtZTogYGltcG9ydC8ke2NvbmZpZ05hbWV9YCxcbiAgcGx1Z2luczogeyBpbXBvcnQ6IGltcG9ydFBsdWdpbiB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBmbGF0Q29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IGNyZWF0ZUZsYXRDb25maWcoXG4gICAgcmVxdWlyZSgnLi4vY29uZmlnL2ZsYXQvcmVjb21tZW5kZWQnKSxcbiAgICAncmVjb21tZW5kZWQnLFxuICApLFxuXG4gIGVycm9yczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC9lcnJvcnMnKSwgJ2Vycm9ycycpLFxuICB3YXJuaW5nczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC93YXJuaW5ncycpLCAnd2FybmluZ3MnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvZmxhdC9yZWFjdCcpLFxuICAncmVhY3QtbmF0aXZlJzogY29uZmlnc1sncmVhY3QtbmF0aXZlJ10sXG4gIGVsZWN0cm9uOiBjb25maWdzLmVsZWN0cm9uLFxuICB0eXBlc2NyaXB0OiBjb25maWdzLnR5cGVzY3JpcHQsXG59O1xuIl19 \ 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 f3e7d58d28..fbb4f6cbcb 100644 --- a/node_modules/eslint-plugin-import/lib/rules/default.js +++ b/node_modules/eslint-plugin-import/lib/rules/default.js @@ -1,4 +1,4 @@ -'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} module.exports = { @@ -19,7 +19,7 @@ module.exports = { if (!defaultSpecifier) {return;} - var imports = _ExportMap2['default'].get(node.source.value, context); + var imports = _builder2['default'].get(node.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -37,4 +37,4 @@ module.exports = { ExportNamedDeclaration: checkDefault.bind(null, 'ExportDefaultSpecifier') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSx5QztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMsdUJBQVFDLEdBQVIsQ0FBWVAsS0FBS1EsTUFBTCxDQUFZQyxLQUF4QixFQUErQlosT0FBL0IsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgYSBkZWZhdWx0IGV4cG9ydCBpcyBwcmVzZW50LCBnaXZlbiBhIGRlZmF1bHQgaW1wb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ2RlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQoc3BlY2lmaWVyVHlwZSwgbm9kZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gc3BlY2lmaWVyVHlwZSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghZGVmYXVsdFNwZWNpZmllcikgeyByZXR1cm47IH1cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRzLmdldCgnZGVmYXVsdCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IGRlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgbWVzc2FnZTogYE5vIGRlZmF1bHQgZXhwb3J0IGZvdW5kIGluIGltcG9ydGVkIG1vZHVsZSBcIiR7bm9kZS5zb3VyY2UudmFsdWV9XCIuYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInKSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSwrQztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMscUJBQWlCQyxHQUFqQixDQUFxQlAsS0FBS1EsTUFBTCxDQUFZQyxLQUFqQyxFQUF3Q1osT0FBeEMsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBhIGRlZmF1bHQgZXhwb3J0IGlzIHByZXNlbnQsIGdpdmVuIGEgZGVmYXVsdCBpbXBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGZ1bmN0aW9uIGNoZWNrRGVmYXVsdChzcGVjaWZpZXJUeXBlLCBub2RlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzLmZpbmQoXG4gICAgICAgIChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSBzcGVjaWZpZXJUeXBlLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFkZWZhdWx0U3BlY2lmaWVyKSB7IHJldHVybjsgfVxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGltcG9ydHMuZ2V0KCdkZWZhdWx0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBtZXNzYWdlOiBgTm8gZGVmYXVsdCBleHBvcnQgZm91bmQgaW4gaW1wb3J0ZWQgbW9kdWxlIFwiJHtub2RlLnNvdXJjZS52YWx1ZX1cIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyksXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 926dcf7e26..b05d61d648 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 @@ -19,22 +19,28 @@ module.exports = { type: 'string' } }, + allowEmpty: { + type: 'boolean' }, + webpackChunknameFormat: { - type: 'string' } } }] }, + type: 'string' } } }], + hasSuggestions: true }, create: function () {function create(context) { var config = context.options[0];var _ref = - config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions;var _ref2 = + config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions,_ref$allowEmpty = _ref.allowEmpty,allowEmpty = _ref$allowEmpty === undefined ? false : _ref$allowEmpty;var _ref2 = config || {},_ref2$webpackChunknam = _ref2.webpackChunknameFormat,webpackChunknameFormat = _ref2$webpackChunknam === undefined ? '([0-9a-zA-Z-_/.]|\\[(request|index)\\])+' : _ref2$webpackChunknam; var paddedCommentRegex = /^ (\S[\s\S]+\S) $/; var commentStyleRegex = /^( ((webpackChunkName: .+)|((webpackPrefetch|webpackPreload): (true|false|-?[0-9]+))|(webpackIgnore: (true|false))|((webpackInclude|webpackExclude): \/.*\/)|(webpackMode: ["'](lazy|lazy-once|eager|weak)["'])|(webpackExports: (['"]\w+['"]|\[(['"]\w+['"], *)+(['"]\w+['"]*)\]))),?)+ $/; - var chunkSubstrFormat = ' webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; + var chunkSubstrFormat = 'webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; var chunkSubstrRegex = new RegExp(chunkSubstrFormat); + var eagerModeFormat = 'webpackMode: ["\']eager["\'],? '; + var eagerModeRegex = new RegExp(eagerModeFormat); function run(node, arg) { var sourceCode = context.getSourceCode(); @@ -42,7 +48,7 @@ module.exports = { sourceCode.getCommentsBefore(arg) // This method is available in ESLint >= 4. : sourceCode.getComments(arg).leading; // This method is deprecated in ESLint 7. - if (!leadingComments || leadingComments.length === 0) { + if ((!leadingComments || leadingComments.length === 0) && !allowEmpty) { context.report({ node: node, message: 'dynamic imports require a leading comment with the webpack chunkname' }); @@ -50,7 +56,8 @@ module.exports = { return; } - var isChunknamePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + var isChunknamePresent = false; + var isEagerModePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = leadingComments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var comment = _step.value; if (comment.type !== 'Block') { @@ -89,12 +96,55 @@ module.exports = { return; } + if (eagerModeRegex.test(comment.value)) { + isEagerModePresent = true; + } + if (chunkSubstrRegex.test(comment.value)) { isChunknamePresent = true; } }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} - if (!isChunknamePresent) { + if (isChunknamePresent && isEagerModePresent) { + context.report({ + node: node, + message: 'dynamic imports using eager mode do not need a webpackChunkName', + suggest: [ + { + desc: 'Remove webpackChunkName', + fix: function () {function fix(fixer) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { + for (var _iterator2 = leadingComments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var _comment = _step2.value; + if (chunkSubstrRegex.test(_comment.value)) { + var replacement = _comment.value.replace(chunkSubstrRegex, '').trim().replace(/,$/, ''); + if (replacement === '') { + return fixer.remove(_comment); + } else { + return fixer.replaceText(_comment, '/* ' + String(replacement) + ' */'); + } + } + }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + }return fix;}() }, + + { + desc: 'Remove webpackMode', + fix: function () {function fix(fixer) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { + for (var _iterator3 = leadingComments[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _comment2 = _step3.value; + if (eagerModeRegex.test(_comment2.value)) { + var replacement = _comment2.value.replace(eagerModeRegex, '').trim().replace(/,$/, ''); + if (replacement === '') { + return fixer.remove(_comment2); + } else { + return fixer.replaceText(_comment2, '/* ' + String(replacement) + ' */'); + } + } + }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} + }return fix;}() }] }); + + + + } + + if (!isChunknamePresent && !allowEmpty && !isEagerModePresent) { context.report({ node: node, message: 'dynamic imports require a leading comment in the form /*' + @@ -117,4 +167,4 @@ module.exports = { }return CallExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsIndlYnBhY2tDaHVua25hbWVGb3JtYXQiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwicnVuIiwibm9kZSIsImFyZyIsInNvdXJjZUNvZGUiLCJnZXRTb3VyY2VDb2RlIiwibGVhZGluZ0NvbW1lbnRzIiwiZ2V0Q29tbWVudHNCZWZvcmUiLCJnZXRDb21tZW50cyIsImxlYWRpbmciLCJsZW5ndGgiLCJyZXBvcnQiLCJtZXNzYWdlIiwiaXNDaHVua25hbWVQcmVzZW50IiwiY29tbWVudCIsInRlc3QiLCJ2YWx1ZSIsInZtIiwicnVuSW5OZXdDb250ZXh0IiwiZXJyb3IiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsMEVBRlQ7QUFHSkMsV0FBSywwQkFBUSwwQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsQ0FBQztBQUNQTCxZQUFNLFFBREM7QUFFUE0sa0JBQVk7QUFDVkMseUJBQWlCO0FBQ2ZQLGdCQUFNLE9BRFM7QUFF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cUIsTUFBTCxDQUFZRSxJQUFwQyxJQUE0QyxDQUFqRixFQUFvRjtBQUNsRjtBQUNEOztBQUVEeEIsZ0JBQUlDLElBQUosRUFBVUEsS0FBS3dCLFNBQUwsQ0FBZSxDQUFmLENBQVY7QUFDRCxXQVhJLDJCQUFQOztBQWFELEtBbkhjLG1CQUFqQiIsImZpbGUiOiJkeW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2tDaHVua05hbWUgZm9yIGR5bmFtaWMgaW1wb3J0cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbXBvcnRGdW5jdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzBdO1xuICAgIGNvbnN0IHsgaW1wb3J0RnVuY3Rpb25zID0gW10gfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYCB3ZWJwYWNrQ2h1bmtOYW1lOiBbXCInXSR7d2VicGFja0NodW5rbmFtZUZvcm1hdH1bXCInXSw/IGA7XG4gICAgY29uc3QgY2h1bmtTdWJzdHJSZWdleCA9IG5ldyBSZWdFeHAoY2h1bmtTdWJzdHJGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICghbGVhZGluZ0NvbW1lbnRzIHx8IGxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2sgY2h1bmtuYW1lJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2h1bmtuYW1lUHJlc2VudCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgIGlmIChjb21tZW50LnR5cGUgIT09ICdCbG9jaycpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgLyogZm9vICovIHN0eWxlIGNvbW1lbnQsIG5vdCBhIC8vIGZvbyBjb21tZW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhZGRlZENvbW1lbnRSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGJsb2NrIGNvbW1lbnQgcGFkZGVkIHdpdGggc3BhY2VzIC0gLyogZm9vICovYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGp1c3QgbGlrZSB3ZWJwYWNrIGl0c2VsZiBkb2VzXG4gICAgICAgICAgdm0ucnVuSW5OZXdDb250ZXh0KGAoZnVuY3Rpb24oKSB7cmV0dXJuIHske2NvbW1lbnQudmFsdWV9fX0pKClgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tZW50U3R5bGVSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIFwid2VicGFja1wiIGNvbW1lbnQgd2l0aCB2YWxpZCBzeW50YXhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua1N1YnN0clJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0NodW5rbmFtZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDaHVua25hbWVQcmVzZW50KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgaW4gdGhlIGZvcm0gLyoke2NodW5rU3Vic3RyRm9ybWF0fSovYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBydW4obm9kZSwgbm9kZS5zb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSAhPT0gJ0ltcG9ydCcgJiYgaW1wb3J0RnVuY3Rpb25zLmluZGV4T2Yobm9kZS5jYWxsZWUubmFtZSkgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuYXJndW1lbnRzWzBdKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsImFsbG93RW1wdHkiLCJ3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0IiwiaGFzU3VnZ2VzdGlvbnMiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwiZWFnZXJNb2RlRm9ybWF0IiwiZWFnZXJNb2RlUmVnZXgiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImdldFNvdXJjZUNvZGUiLCJsZWFkaW5nQ29tbWVudHMiLCJnZXRDb21tZW50c0JlZm9yZSIsImdldENvbW1lbnRzIiwibGVhZGluZyIsImxlbmd0aCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0NodW5rbmFtZVByZXNlbnQiLCJpc0VhZ2VyTW9kZVByZXNlbnQiLCJjb21tZW50IiwidGVzdCIsInZhbHVlIiwidm0iLCJydW5Jbk5ld0NvbnRleHQiLCJlcnJvciIsInN1Z2dlc3QiLCJkZXNjIiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlbWVudCIsInJlcGxhY2UiLCJ0cmltIiwicmVtb3ZlIiwicmVwbGFjZVRleHQiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FB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Y0FBdEIsRUFBc0MsRUFBdEMsRUFBMEMyQixJQUExQyxHQUFpREQsT0FBakQsQ0FBeUQsSUFBekQsRUFBK0QsRUFBL0QsQ0FBcEI7QUFDQSw0QkFBSUQsZ0JBQWdCLEVBQXBCLEVBQXdCO0FBQ3RCLGlDQUFPRCxNQUFNSSxNQUFOLENBQWFiLFNBQWIsQ0FBUDtBQUNELHlCQUZELE1BRU87QUFDTCxpQ0FBT1MsTUFBTUssV0FBTixDQUFrQmQsU0FBbEIsaUJBQWlDVSxXQUFqQyxVQUFQO0FBQ0Q7QUFDRjtBQUNGLHFCQVZRO0FBV1YsaUJBYkgsZ0JBaEJPLENBSEksRUFBZjs7OztBQW9DRDs7QUFFRCxZQUFJLENBQUNaLGtCQUFELElBQXVCLENBQUMxQixVQUF4QixJQUFzQyxDQUFDMkIsa0JBQTNDLEVBQStEO0FBQzdEdkIsa0JBQVFvQixNQUFSLENBQWU7QUFDYlQsc0JBRGE7QUFFYlU7QUFDNkRoQiw2QkFEN0QsT0FGYSxFQUFmOztBQUtEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMa0Msd0JBREsseUNBQ1k1QixJQURaLEVBQ2tCO0FBQ3JCRCxnQkFBSUMsSUFBSixFQUFVQSxLQUFLNkIsTUFBZjtBQUNELFdBSEk7O0FBS0xDLHNCQUxLLHVDQUtVOUIsSUFMVixFQUtnQjtBQUNuQixnQkFBSUEsS0FBSytCLE1BQUwsQ0FBWXhELElBQVosS0FBcUIsUUFBckIsSUFBaUNPLGdCQUFnQmtELE9BQWhCLENBQXdCaEMsS0FBSytCLE1BQUwsQ0FBWUUsSUFBcEMsSUFBNEMsQ0FBakYsRUFBb0Y7QUFDbEY7QUFDRDs7QUFFRGxDLGdCQUFJQyxJQUFKLEVBQVVBLEtBQUtrQyxTQUFMLENBQWUsQ0FBZixDQUFWO0FBQ0QsV0FYSSwyQkFBUDs7QUFhRCxLQXJLYyxtQkFBakIiLCJmaWxlIjoiZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZtIGZyb20gJ3ZtJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSBhIGxlYWRpbmcgY29tbWVudCB3aXRoIHRoZSB3ZWJwYWNrQ2h1bmtOYW1lIGZvciBkeW5hbWljIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW1wb3J0RnVuY3Rpb25zOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dFbXB0eToge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2VicGFja0NodW5rbmFtZUZvcm1hdDoge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1swXTtcbiAgICBjb25zdCB7IGltcG9ydEZ1bmN0aW9ucyA9IFtdLCBhbGxvd0VtcHR5ID0gZmFsc2UgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYHdlYnBhY2tDaHVua05hbWU6IFtcIiddJHt3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0fVtcIiddLD8gYDtcbiAgICBjb25zdCBjaHVua1N1YnN0clJlZ2V4ID0gbmV3IFJlZ0V4cChjaHVua1N1YnN0ckZvcm1hdCk7XG4gICAgY29uc3QgZWFnZXJNb2RlRm9ybWF0ID0gYHdlYnBhY2tNb2RlOiBbXCInXWVhZ2VyW1wiJ10sPyBgO1xuICAgIGNvbnN0IGVhZ2VyTW9kZVJlZ2V4ID0gbmV3IFJlZ0V4cChlYWdlck1vZGVGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICgoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSAmJiAhYWxsb3dFbXB0eSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgd2l0aCB0aGUgd2VicGFjayBjaHVua25hbWUnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXNDaHVua25hbWVQcmVzZW50ID0gZmFsc2U7XG4gICAgICBsZXQgaXNFYWdlck1vZGVQcmVzZW50ID0gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBsZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgaWYgKGNvbW1lbnQudHlwZSAhPT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSAvKiBmb28gKi8gc3R5bGUgY29tbWVudCwgbm90IGEgLy8gZm9vIGNvbW1lbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFkZGVkQ29tbWVudFJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgYmxvY2sgY29tbWVudCBwYWRkZWQgd2l0aCBzcGFjZXMgLSAvKiBmb28gKi9gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8ganVzdCBsaWtlIHdlYnBhY2sgaXRzZWxmIGRvZXNcbiAgICAgICAgICB2bS5ydW5Jbk5ld0NvbnRleHQoYChmdW5jdGlvbigpIHtyZXR1cm4geyR7Y29tbWVudC52YWx1ZX19fSkoKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBcIndlYnBhY2tcIiBjb21tZW50IHdpdGggdmFsaWQgc3ludGF4YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbW1lbnRTdHlsZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVhZ2VyTW9kZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0VhZ2VyTW9kZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNodW5rU3Vic3RyUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgIGlzQ2h1bmtuYW1lUHJlc2VudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2h1bmtuYW1lUHJlc2VudCAmJiBpc0VhZ2VyTW9kZVByZXNlbnQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyB1c2luZyBlYWdlciBtb2RlIGRvIG5vdCBuZWVkIGEgd2VicGFja0NodW5rTmFtZScsXG4gICAgICAgICAgc3VnZ2VzdDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkZXNjOiAnUmVtb3ZlIHdlYnBhY2tDaHVua05hbWUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2h1bmtTdWJzdHJSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gY29tbWVudC52YWx1ZS5yZXBsYWNlKGNodW5rU3Vic3RyUmVnZXgsICcnKS50cmltKCkucmVwbGFjZSgvLCQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4ZXIucmVtb3ZlKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChjb21tZW50LCBgLyogJHtyZXBsYWNlbWVudH0gKi9gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRlc2M6ICdSZW1vdmUgd2VicGFja01vZGUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWFnZXJNb2RlUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGNvbW1lbnQudmFsdWUucmVwbGFjZShlYWdlck1vZGVSZWdleCwgJycpLnRyaW0oKS5yZXBsYWNlKC8sJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZW1vdmUoY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlcGxhY2VUZXh0KGNvbW1lbnQsIGAvKiAke3JlcGxhY2VtZW50fSAqL2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0NodW5rbmFtZVByZXNlbnQgJiYgIWFsbG93RW1wdHkgJiYgIWlzRWFnZXJNb2RlUHJlc2VudCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IGluIHRoZSBmb3JtIC8qJHtjaHVua1N1YnN0ckZvcm1hdH0qL2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09ICdJbXBvcnQnICYmIGltcG9ydEZ1bmN0aW9ucy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpIDwgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bihub2RlLCBub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 97228ec5aa..a155254c8e 100644 --- a/node_modules/eslint-plugin-import/lib/rules/export.js +++ b/node_modules/eslint-plugin-import/lib/rules/export.js @@ -1,4 +1,5 @@ -'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 _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +'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 _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl); var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -186,7 +187,7 @@ module.exports = { if (node.declaration.declarations != null) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = node.declaration.declarations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var declaration = _step.value; - (0, _ExportMap.recursivePatternCapture)(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); + (0, _patternCapture2['default'])(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } }return ExportNamedDeclaration;}(), @@ -197,7 +198,7 @@ module.exports = { // `export * as X from 'path'` does not conflict if (node.exported && node.exported.name) {return;} - var remoteExports = _ExportMap2['default'].get(node.source.value, context); + var remoteExports = _builder2['default'].get(node.source.value, context); if (remoteExports == null) {return;} if (remoteExports.errors.length) { @@ -247,4 +248,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJlcnJvcnMiLCJyZXBvcnRFcnJvcnMiLCJhbnkiLCJmb3JFYWNoIiwicmVwb3J0IiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6InFvQkFBQSx5QztBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7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Q0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwLCB7IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlIH0gZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcC5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChyZW1vdGVFeHBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICByZW1vdGVFeHBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRQYXJlbnQobm9kZSk7XG5cbiAgICAgICAgbGV0IGFueSA9IGZhbHNlO1xuICAgICAgICByZW1vdGVFeHBvcnRzLmZvckVhY2goKHYsIG5hbWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBhbnkgPSB0cnVlOyAvLyBwb29yIG1hbidzIGZpbHRlclxuICAgICAgICAgICAgYWRkTmFtZWQobmFtZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghYW55KSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLnNvdXJjZSxcbiAgICAgICAgICAgIGBObyBuYW1lZCBleHBvcnRzIGZvdW5kIGluIG1vZHVsZSAnJHtub2RlLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgbmFtZWRdIG9mIG5hbWVzcGFjZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG5vZGVzXSBvZiBuYW1lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGVzLnNpemUgPD0gMSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBpZiAoaXNUeXBlc2NyaXB0RnVuY3Rpb25PdmVybG9hZHMobm9kZXMpIHx8IGlzVHlwZXNjcmlwdE5hbWVzcGFjZU1lcmdpbmcobm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBpZiAoc2hvdWxkU2tpcFR5cGVzY3JpcHROYW1lc3BhY2Uobm9kZSwgbm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICdNdWx0aXBsZSBkZWZhdWx0IGV4cG9ydHMuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgYE11bHRpcGxlIGV4cG9ydHMgb2YgbmFtZSAnJHtuYW1lLnJlcGxhY2UodHNUeXBlUHJlZml4LCAnJyl9Jy5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiYW55IiwiZm9yRWFjaCIsInJlcG9ydCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiJxb0JBQUEsK0M7QUFDQSw2RDtBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFB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LHNCQUFNLElBQU4sQ0FEc0IsQ0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi4vZXhwb3J0TWFwL3BhdHRlcm5DYXB0dXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlbW90ZUV4cG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3RlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50KG5vZGUpO1xuXG4gICAgICAgIGxldCBhbnkgPSBmYWxzZTtcbiAgICAgICAgcmVtb3RlRXhwb3J0cy5mb3JFYWNoKCh2LCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgYW55ID0gdHJ1ZTsgLy8gcG9vciBtYW4ncyBmaWx0ZXJcbiAgICAgICAgICAgIGFkZE5hbWVkKG5hbWUsIG5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFueSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbm9kZS5zb3VyY2UsXG4gICAgICAgICAgICBgTm8gbmFtZWQgZXhwb3J0cyBmb3VuZCBpbiBtb2R1bGUgJyR7bm9kZS5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIG5hbWVkXSBvZiBuYW1lc3BhY2UpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBub2Rlc10gb2YgbmFtZWQpIHtcbiAgICAgICAgICAgIGlmIChub2Rlcy5zaXplIDw9IDEpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgaWYgKGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB8fCBpc1R5cGVzY3JpcHROYW1lc3BhY2VNZXJnaW5nKG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAnTXVsdGlwbGUgZGVmYXVsdCBleHBvcnRzLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgIGBNdWx0aXBsZSBleHBvcnRzIG9mIG5hbWUgJyR7bmFtZS5yZXBsYWNlKHRzVHlwZVByZWZpeCwgJycpfScuYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 96d9fd8493..f71a966db8 100644 --- a/node_modules/eslint-plugin-import/lib/rules/named.js +++ b/node_modules/eslint-plugin-import/lib/rules/named.js @@ -1,5 +1,5 @@ '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 path = _interopRequireWildcard(_path); -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}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;}} module.exports = { @@ -41,7 +41,7 @@ module.exports = { return; // no named imports/exports } - var imports = _ExportMap2['default'].get(node.source.value, context); + var imports = _builder2['default'].get(node.source.value, context); if (imports == null || imports.parseGoal === 'ambiguous') { return; } @@ -93,7 +93,7 @@ module.exports = { var call = node.init;var _call$arguments = _slicedToArray( call.arguments, 1),source = _call$arguments[0]; var variableImports = node.id.properties; - var variableExports = _ExportMap2['default'].get(source.value, context); + var variableExports = _builder2['default'].get(source.value, context); if ( // return if it's not a commonjs require statement @@ -140,4 +140,4 @@ module.exports = { VariableDeclarator: checkRequire }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLHlDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FBQ047QUFDRUws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QUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBuYW1lZCBpbXBvcnRzIGNvcnJlc3BvbmQgdG8gYSBuYW1lZCBleHBvcnQgaW4gdGhlIHJlbW90ZSBmaWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25hbWVkJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21tb25qczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMoa2V5LCB0eXBlLCBub2RlKSB7XG4gICAgICAvLyBpZ25vcmUgbG9jYWwgZXhwb3J0cyBhbmQgdHlwZSBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5zb3VyY2UgPT0gbnVsbFxuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUuc3BlY2lmaWVycy5zb21lKChpbSkgPT4gaW0udHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBubyBuYW1lZCBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwgfHwgaW1wb3J0cy5wYXJzZUdvYWwgPT09ICdhbWJpZ3VvdXMnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGltLnR5cGUgIT09IHR5cGVcbiAgICAgICAgICAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8IGltLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBpbVtrZXldLm5hbWUgfHwgaW1ba2V5XS52YWx1ZTtcblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gaW1wb3J0cy5oYXNEZWVwKG5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbVtrZXldLCBgJHtuYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCBpbiAnJHtub2RlLnNvdXJjZS52YWx1ZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1JlcXVpcmUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9ucy5jb21tb25qc1xuICAgICAgICB8fCBub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhbiBvYmplY3QgZGVzdHJ1Y3R1cmUgb3IgaXQncyBhbiBlbXB0eSBvYmplY3QgZGVzdHJ1Y3R1cmVcbiAgICAgICAgfHwgIW5vZGUuaWQgfHwgbm9kZS5pZC50eXBlICE9PSAnT2JqZWN0UGF0dGVybicgfHwgbm9kZS5pZC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlcmUgaXMgbm8gY2FsbCBleHByZXNzaW9uIG9uIHRoZSByaWdodCBzaWRlXG4gICAgICAgIHx8ICFub2RlLmluaXQgfHwgbm9kZS5pbml0LnR5cGUgIT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGwgPSBub2RlLmluaXQ7XG4gICAgICBjb25zdCBbc291cmNlXSA9IGNhbGwuYXJndW1lbnRzO1xuICAgICAgY29uc3QgdmFyaWFibGVJbXBvcnRzID0gbm9kZS5pZC5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgdmFyaWFibGVFeHBvcnRzID0gRXhwb3J0cy5nZXQoc291cmNlLnZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKFxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBjb21tb25qcyByZXF1aXJlIHN0YXRlbWVudFxuICAgICAgICBjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBzdHJpbmcgc291cmNlXG4gICAgICAgIHx8IHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCdcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzID09IG51bGxcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cydcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YXJpYWJsZUV4cG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB2YXJpYWJsZUV4cG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhcmlhYmxlSW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoaW0udHlwZSAhPT0gJ1Byb3BlcnR5JyB8fCAhaW0ua2V5IHx8IGltLmtleS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gdmFyaWFibGVFeHBvcnRzLmhhc0RlZXAoaW0ua2V5Lm5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRGaWxlbmFtZSgpKSwgaS5wYXRoKSlcbiAgICAgICAgICAgICAgLmpvaW4oJyAtPiAnKTtcblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW0ua2V5LCBgJHtpbS5rZXkubmFtZX0gbm90IGZvdW5kIHZpYSAke2RlZXBQYXRofWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgaW4gJyR7c291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogY2hlY2tTcGVjaWZpZXJzLmJpbmQobnVsbCwgJ2ltcG9ydGVkJywgJ0ltcG9ydFNwZWNpZmllcicpLFxuXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnbG9jYWwnLCAnRXhwb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogY2hlY2tSZXF1aXJlLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLCtDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FB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LEVBQXVCO0FBQ3JCLGdCQUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIG5hbWVkIGltcG9ydHMgY29ycmVzcG9uZCB0byBhIG5hbWVkIGV4cG9ydCBpbiB0aGUgcmVtb3RlIGZpbGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbW1vbmpzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhrZXksIHR5cGUsIG5vZGUpIHtcbiAgICAgIC8vIGlnbm9yZSBsb2NhbCBleHBvcnRzIGFuZCB0eXBlIGltcG9ydHMvZXhwb3J0c1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnNvdXJjZSA9PSBudWxsXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgfHwgbm9kZS5leHBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbm9kZS5zcGVjaWZpZXJzLnNvbWUoKGltKSA9PiBpbS50eXBlID09PSB0eXBlKSkge1xuICAgICAgICByZXR1cm47IC8vIG5vIG5hbWVkIGltcG9ydHMvZXhwb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCB8fCBpbXBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW0udHlwZSAhPT0gdHlwZVxuICAgICAgICAgIC8vIGlnbm9yZSB0eXBlIGltcG9ydHNcbiAgICAgICAgICB8fCBpbS5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGltW2tleV0ubmFtZSB8fCBpbVtrZXldLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSBpbXBvcnRzLmhhc0RlZXAobmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSksIGkucGF0aCkpXG4gICAgICAgICAgICAgIC5qb2luKCcgLT4gJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCB2aWEgJHtkZWVwUGF0aH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1ba2V5XSwgYCR7bmFtZX0gbm90IGZvdW5kIGluICcke25vZGUuc291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrUmVxdWlyZShub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFvcHRpb25zLmNvbW1vbmpzXG4gICAgICAgIHx8IG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAgICAgLy8gcmV0dXJuIGlmIGl0J3Mgbm90IGFuIG9iamVjdCBkZXN0cnVjdHVyZSBvciBpdCdzIGFuIGVtcHR5IG9iamVjdCBkZXN0cnVjdHVyZVxuICAgICAgICB8fCAhbm9kZS5pZCB8fCBub2RlLmlkLnR5cGUgIT09ICdPYmplY3RQYXR0ZXJuJyB8fCBub2RlLmlkLnByb3BlcnRpZXMubGVuZ3RoID09PSAwXG4gICAgICAgIC8vIHJldHVybiBpZiB0aGVyZSBpcyBubyBjYWxsIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAgICAgfHwgIW5vZGUuaW5pdCB8fCBub2RlLmluaXQudHlwZSAhPT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbCA9IG5vZGUuaW5pdDtcbiAgICAgIGNvbnN0IFtzb3VyY2VdID0gY2FsbC5hcmd1bWVudHM7XG4gICAgICBjb25zdCB2YXJpYWJsZUltcG9ydHMgPSBub2RlLmlkLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCB2YXJpYWJsZUV4cG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChzb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIGNvbW1vbmpzIHJlcXVpcmUgc3RhdGVtZW50XG4gICAgICAgIGNhbGwuY2FsbGVlLnR5cGUgIT09ICdJZGVudGlmaWVyJyB8fCBjYWxsLmNhbGxlZS5uYW1lICE9PSAncmVxdWlyZScgfHwgY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIHN0cmluZyBzb3VyY2VcbiAgICAgICAgfHwgc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJ1xuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMgPT0gbnVsbFxuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMucGFyc2VHb2FsID09PSAnYW1iaWd1b3VzJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHZhcmlhYmxlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyaWFibGVJbXBvcnRzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgIGlmIChpbS50eXBlICE9PSAnUHJvcGVydHknIHx8ICFpbS5rZXkgfHwgaW0ua2V5LnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSB2YXJpYWJsZUV4cG9ydHMuaGFzRGVlcChpbS5rZXkubmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltLmtleSwgYCR7aW0ua2V5Lm5hbWV9IG5vdCBmb3VuZCBpbiAnJHtzb3VyY2UudmFsdWV9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnaW1wb3J0ZWQnLCAnSW1wb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGNoZWNrU3BlY2lmaWVycy5iaW5kKG51bGwsICdsb2NhbCcsICdFeHBvcnRTcGVjaWZpZXInKSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBjaGVja1JlcXVpcmUsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/rules/namespace.js b/node_modules/eslint-plugin-import/lib/rules/namespace.js index 574d89a60d..56744fca80 100644 --- a/node_modules/eslint-plugin-import/lib/rules/namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/namespace.js @@ -1,5 +1,6 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -8,7 +9,7 @@ function processBodyStatement(context, namespaces, declaration) { if (declaration.specifiers.length === 0) {return;} - var imports = _ExportMap2['default'].get(declaration.source.value, context); + var imports = _builder2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length > 0) { @@ -88,7 +89,7 @@ module.exports = { ExportNamespaceSpecifier: function () {function ExportNamespaceSpecifier(namespace) { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _ExportMap2['default'].get(declaration.source.value, context); + var imports = _builder2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length) { @@ -122,7 +123,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { if (dereference.computed) { if (!allowComputed) { context.report( @@ -161,7 +162,7 @@ module.exports = { // DFS traverse child namespaces function testKey(pattern, namespace) {var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [init.name]; - if (!(namespace instanceof _ExportMap2['default'])) {return;} + if (!(namespace instanceof _exportMap2['default'])) {return;} if (pattern.type !== 'ObjectPattern') {return;}var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { @@ -215,4 +216,4 @@ module.exports = { }return JSXMemberExpression;}() }; }return namespaceRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBLFNBQVNBLG9CQUFULENBQThCQyxPQUE5QixFQUF1Q0MsVUFBdkMsRUFBbURDLFdBQW5ELEVBQWdF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QyxJQUEzQixDQUE1QjtBQUNBO0FBQ0Esc0JBQUk2Qyx3QkFBd0IsSUFBNUIsRUFBa0M7QUFDaENOLDRCQUFRTixTQUFTMUMsS0FBakIsRUFBd0JzRCxvQkFBb0IxQyxTQUE1QyxFQUF1RHNDLElBQXZEO0FBQ0Q7QUFDREEsdUJBQUtLLEdBQUw7QUFDRCxpQkFyQ3NEO0FBc0N4RDs7QUFFRFAsb0JBQVFGLEVBQVIsRUFBWXZELFdBQVdPLEdBQVgsQ0FBZWlELEtBQUt0QyxJQUFwQixDQUFaO0FBQ0QsV0EzSEk7O0FBNkhMK0MsMkJBN0hLLG1EQTZIcUMsS0FBcEJuQixNQUFvQixTQUFwQkEsTUFBb0IsQ0FBWkssUUFBWSxTQUFaQSxRQUFZO0FBQ3hDLGdCQUFJLENBQUNuRCxXQUFXK0MsR0FBWCxDQUFlRCxPQUFPNUIsSUFBdEIsQ0FBTCxFQUFrQyxDQUFFLE9BQVM7QUFDN0MsZ0JBQU1HLFlBQVlyQixXQUFXTyxHQUFYLENBQWV1QyxPQUFPNUIsSUFBdEIsQ0FBbEI7QUFDQSxnQkFBSSxDQUFDRyxVQUFVMEIsR0FBVixDQUFjSSxTQUFTakMsSUFBdkIsQ0FBTCxFQUFtQztBQUNqQ25CLHNCQUFRZ0IsTUFBUixDQUFlO0FBQ2I4QyxzQkFBTVYsUUFETztBQUViVyx5QkFBUzFCLFlBQVllLFFBQVosRUFBc0IsQ0FBQ0wsT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBpbXBvcnREZWNsYXJhdGlvbiBmcm9tICcuLi9pbXBvcnREZWNsYXJhdGlvbic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgZGVjbGFyYXRpb24pIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHsgcmV0dXJuOyB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uLnNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVjbGFyYXRpb24uc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgc3BlY2lmaWVyLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgY2FzZSAnSW1wb3J0U3BlY2lmaWVyJzoge1xuICAgICAgICBjb25zdCBtZXRhID0gaW1wb3J0cy5nZXQoXG4gICAgICAgIC8vIGRlZmF1bHQgdG8gJ2RlZmF1bHQnIGZvciBkZWZhdWx0IGh0dHBzOi8vaS5pbWd1ci5jb20vbmo2cUFXeS5qcGdcbiAgICAgICAgICBzcGVjaWZpZXIuaW1wb3J0ZWQgPyBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUgOiAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWV0YSB8fCAhbWV0YS5uYW1lc3BhY2UpIHsgYnJlYWs7IH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIG1ldGEubmFtZXNwYWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIGltcG9ydGVkIG5hbWVzcGFjZXMgY29udGFpbiBkZXJlZmVyZW5jZWQgcHJvcGVydGllcyBhcyB0aGV5IGFyZSBkZXJlZmVyZW5jZWQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZXNwYWNlJyksXG4gICAgfSxcblxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFsbG93Q29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgY29tcHV0ZWQgKGFuZCB0aHVzLCB1bi1saW50YWJsZSkgcmVmZXJlbmNlcyB0byBuYW1lc3BhY2UgbWVtYmVycy4nLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gbmFtZXNwYWNlUnVsZShjb250ZXh0KSB7XG4gICAgLy8gcmVhZCBvcHRpb25zXG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dDb21wdXRlZCA9IGZhbHNlLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gbWFrZU1lc3NhZ2UobGFzdCwgbmFtZXBhdGgpIHtcbiAgICAgIHJldHVybiBgJyR7bGFzdC5uYW1lfScgbm90IGZvdW5kIGluICR7bmFtZXBhdGgubGVuZ3RoID4gMSA/ICdkZWVwbHkgJyA6ICcnfWltcG9ydGVkIG5hbWVzcGFjZSAnJHtuYW1lcGF0aC5qb2luKCcuJyl9Jy5gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBwaWNrIHVwIGFsbCBpbXBvcnRzIGF0IGJvZHkgZW50cnkgdGltZSwgdG8gcHJvcGVybHkgcmVzcGVjdCBob2lzdGluZ1xuICAgICAgUHJvZ3JhbSh7IGJvZHkgfSkge1xuICAgICAgICBib2R5LmZvckVhY2goKHgpID0+IHsgcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgeCk7IH0pO1xuICAgICAgfSxcblxuICAgICAgLy8gc2FtZSBhcyBhYm92ZSwgYnV0IGRvZXMgbm90IGFkZCBuYW1lcyB0byBsb2NhbCBtYXBcbiAgICAgIEV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcihuYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIGBObyBleHBvcnRlZCBuYW1lcyBmb3VuZCBpbiBtb2R1bGUgJyR7ZGVjbGFyYXRpb24uc291cmNlLnZhbHVlfScuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyB0b2RvOiBjaGVjayBmb3IgcG9zc2libGUgcmVkZWZpbml0aW9uXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24oZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLm9iamVjdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5wYXJlbnQudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyAmJiBkZXJlZmVyZW5jZS5wYXJlbnQubGVmdCA9PT0gZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIGRlcmVmZXJlbmNlLnBhcmVudCxcbiAgICAgICAgICAgIGBBc3NpZ25tZW50IHRvIG1lbWJlciBvZiBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dDb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIHZhbGlkYXRlIGNvbXB1dGVkIHJlZmVyZW5jZSB0byBpbXBvcnRlZCBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgIGRlcmVmZXJlbmNlLnByb3BlcnR5LFxuICAgICAgICAgICAgICBtYWtlTWVzc2FnZShkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbmFtZXBhdGgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4cG9ydGVkID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IGV4cG9ydGVkLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKHsgaWQsIGluaXQgfSkge1xuICAgICAgICBpZiAoaW5pdCA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoaW5pdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaW5pdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgcmVkZWZpbml0aW9uIGluIGludGVybWVkaWF0ZSBzY29wZXNcbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgaW5pdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gREZTIHRyYXZlcnNlIGNoaWxkIG5hbWVzcGFjZXNcbiAgICAgICAgZnVuY3Rpb24gdGVzdEtleShwYXR0ZXJuLCBuYW1lc3BhY2UsIHBhdGggPSBbaW5pdC5uYW1lXSkge1xuICAgICAgICAgIGlmICghKG5hbWVzcGFjZSBpbnN0YW5jZW9mIEV4cG9ydHMpKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiRXhwb3J0TWFwIiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EsK0M7QUFDQSx5QztBQUNBLHlEO0FBQ0EscUM7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLE9BQTlCLEVB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QjNDLFVBQVVkLEdBQVYsQ0FBYzZDLFNBQVNTLEdBQVQsQ0FBYTNDLElBQTNCLENBQTVCO0FBQ0E7QUFDQSxzQkFBSThDLHdCQUF3QixJQUE1QixFQUFrQztBQUNoQ04sNEJBQVFOLFNBQVMzQyxLQUFqQixFQUF3QnVELG9CQUFvQjNDLFNBQTVDLEVBQXVEdUMsSUFBdkQ7QUFDRDtBQUNEQSx1QkFBS0ssR0FBTDtBQUNELGlCQXJDc0Q7QUFzQ3hEOztBQUVEUCxvQkFBUUYsRUFBUixFQUFZeEQsV0FBV08sR0FBWCxDQUFla0QsS0FBS3ZDLElBQXBCLENBQVo7QUFDRCxXQTNISTs7QUE2SExnRCwyQkE3SEssbURBNkhxQyxLQUFwQnBCLE1BQW9CLFNBQXBCQSxNQUFvQixDQUFaTSxRQUFZLFNBQVpBLFFBQVk7QUFDeEMsZ0JBQUksQ0FBQ3BELFdBQVcrQyxHQUFYLENBQWVELE9BQU81QixJQUF0QixDQUFMLEVBQWtDLENBQUUsT0FBUztBQUM3QyxnQkFBTUcsWUFBWXJCLFdBQVdPLEdBQVgsQ0FBZXVDLE9BQU81QixJQUF0QixDQUFsQjtBQUNBLGdCQUFJLENBQUNHLFVBQVUwQixHQUFWLENBQWNLLFNBQVNsQyxJQUF2QixDQUFMLEVBQW1DO0FBQ2pDbkIsc0JBQVFnQixNQUFSLENBQWU7QUFDYitDLHNCQUFNVixRQURPO0FBRWJXLHlCQUFTM0IsWUFBWWdCLFFBQVosRUFBc0IsQ0FBQ04sT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuLi9leHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCBkZWNsYXJhdGlvbikge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cblxuICBpZiAoZGVjbGFyYXRpb24uc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWNsYXJhdGlvbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic6XG4gICAgICAgIGlmICghaW1wb3J0cy5zaXplKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBzcGVjaWZpZXIsXG4gICAgICAgICAgICBgTm8gZXhwb3J0ZWQgbmFtZXMgZm91bmQgaW4gbW9kdWxlICcke2RlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgaW1wb3J0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6XG4gICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOiB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpbXBvcnRzLmdldChcbiAgICAgICAgLy8gZGVmYXVsdCB0byAnZGVmYXVsdCcgZm9yIGRlZmF1bHQgaHR0cHM6Ly9pLmltZ3VyLmNvbS9uajZxQVd5LmpwZ1xuICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZCA/IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSA6ICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtZXRhIHx8ICFtZXRhLm5hbWVzcGFjZSkgeyBicmVhazsgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgbWV0YS5uYW1lc3BhY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgaW1wb3J0ZWQgbmFtZXNwYWNlcyBjb250YWluIGRlcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHRoZXkgYXJlIGRlcmVmZXJlbmNlZC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduYW1lc3BhY2UnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3dDb21wdXRlZDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBjb21wdXRlZCAoYW5kIHRodXMsIHVuLWxpbnRhYmxlKSByZWZlcmVuY2VzIHRvIG5hbWVzcGFjZSBtZW1iZXJzLicsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBuYW1lc3BhY2VSdWxlKGNvbnRleHQpIHtcbiAgICAvLyByZWFkIG9wdGlvbnNcbiAgICBjb25zdCB7XG4gICAgICBhbGxvd0NvbXB1dGVkID0gZmFsc2UsXG4gICAgfSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBtYWtlTWVzc2FnZShsYXN0LCBuYW1lcGF0aCkge1xuICAgICAgcmV0dXJuIGAnJHtsYXN0Lm5hbWV9JyBub3QgZm91bmQgaW4gJHtuYW1lcGF0aC5sZW5ndGggPiAxID8gJ2RlZXBseSAnIDogJyd9aW1wb3J0ZWQgbmFtZXNwYWNlICcke25hbWVwYXRoLmpvaW4oJy4nKX0nLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHBpY2sgdXAgYWxsIGltcG9ydHMgYXQgYm9keSBlbnRyeSB0aW1lLCB0byBwcm9wZXJseSByZXNwZWN0IGhvaXN0aW5nXG4gICAgICBQcm9ncmFtKHsgYm9keSB9KSB7XG4gICAgICAgIGJvZHkuZm9yRWFjaCgoeCkgPT4geyBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCB4KTsgfSk7XG4gICAgICB9LFxuXG4gICAgICAvLyBzYW1lIGFzIGFib3ZlLCBidXQgZG9lcyBub3QgYWRkIG5hbWVzIHRvIGxvY2FsIG1hcFxuICAgICAgRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIHRvZG86IGNoZWNrIGZvciBwb3NzaWJsZSByZWRlZmluaXRpb25cblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLnBhcmVudC50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nICYmIGRlcmVmZXJlbmNlLnBhcmVudC5sZWZ0ID09PSBkZXJlZmVyZW5jZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgZGVyZWZlcmVuY2UucGFyZW50LFxuICAgICAgICAgICAgYEFzc2lnbm1lbnQgdG8gbWVtYmVyIG9mIG5hbWVzcGFjZSAnJHtkZXJlZmVyZW5jZS5vYmplY3QubmFtZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgaWYgKGRlcmVmZXJlbmNlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93Q29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgZGVyZWZlcmVuY2UucHJvcGVydHksXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byB2YWxpZGF0ZSBjb21wdXRlZCByZWZlcmVuY2UgdG8gaW1wb3J0ZWQgbmFtZXNwYWNlICcke2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lfScuYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgbWFrZU1lc3NhZ2UoZGVyZWZlcmVuY2UucHJvcGVydHksIG5hbWVwYXRoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRlZCA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgaWYgKGV4cG9ydGVkID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvLyBzdGFzaCBhbmQgcG9wXG4gICAgICAgICAgbmFtZXBhdGgucHVzaChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBuYW1lc3BhY2UgPSBleHBvcnRlZC5uYW1lc3BhY2U7XG4gICAgICAgICAgZGVyZWZlcmVuY2UgPSBkZXJlZmVyZW5jZS5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcih7IGlkLCBpbml0IH0pIHtcbiAgICAgICAgaWYgKGluaXQgPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKGluaXQudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluaXQubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIHJlZGVmaW5pdGlvbiBpbiBpbnRlcm1lZGlhdGUgc2NvcGVzXG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGluaXQubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIERGUyB0cmF2ZXJzZSBjaGlsZCBuYW1lc3BhY2VzXG4gICAgICAgIGZ1bmN0aW9uIHRlc3RLZXkocGF0dGVybiwgbmFtZXNwYWNlLCBwYXRoID0gW2luaXQubmFtZV0pIHtcbiAgICAgICAgICBpZiAoIShuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXApKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 6cc1568646..f2421e17a6 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 @@ -124,7 +124,7 @@ module.exports = { } } - function commentAfterImport(node, nextComment) { + function commentAfterImport(node, nextComment, type) { var lineDifference = getLineDifference(node, nextComment); var EXPECTED_LINE_DIFFERENCE = options.count + 1; @@ -140,7 +140,7 @@ module.exports = { line: node.loc.end.line, column: column }, - message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after import statement not followed by another import.', + message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after ' + String(type) + ' statement not followed by another ' + String(type) + '.', fix: options.exactCount && EXPECTED_LINE_DIFFERENCE < lineDifference ? undefined : function (fixer) {return fixer.insertTextAfter( node, '\n'.repeat(EXPECTED_LINE_DIFFERENCE - lineDifference));} }); @@ -178,7 +178,7 @@ module.exports = { } if (nextComment && typeof nextComment !== 'undefined') { - commentAfterImport(node, nextComment); + commentAfterImport(node, nextComment, 'import'); } else if (nextNode && nextNode.type !== 'ImportDeclaration' && (nextNode.type !== 'TSImportEqualsDeclaration' || nextNode.isExport)) { checkForNewLine(node, nextNode, 'import'); } @@ -215,8 +215,18 @@ module.exports = { !containsNodeOrEqual(nextStatement, nextRequireCall))) { - - checkForNewLine(statementWithRequireCall, nextStatement, 'require'); + var nextComment = void 0; + if (typeof statementWithRequireCall.parent.comments !== 'undefined' && options.considerComments) { + var endLine = node.loc.end.line; + nextComment = statementWithRequireCall.parent.comments.find(function (o) {return o.loc.start.line >= endLine && o.loc.start.line <= endLine + options.count + 1;}); + } + + if (nextComment && typeof nextComment !== 'undefined') { + + commentAfterImport(statementWithRequireCall, nextComment, 'require'); + } else { + checkForNewLine(statementWithRequireCall, nextStatement, 'require'); + } } }); }return ProgramExit;}(), @@ -234,4 +244,4 @@ module.exports = { 'Decorator:exit': decrementLevel }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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Qm1FLFNBQXpCLEVBQW9DaEUsSUFBcEMsQ0FBckI7QUFDQWIsa0JBQUkseUJBQUosRUFBK0JnRSxZQUEvQjs7QUFFQSxrQkFBTWlCLDJCQUEyQkosVUFBVWIsWUFBVixDQUFqQztBQUNBLGtCQUFNa0IsZ0JBQWdCTCxVQUFVYixlQUFlLENBQXpCLENBQXRCO0FBQ0Esa0JBQU1tQixrQkFBa0J2QyxhQUFhb0MsUUFBUSxDQUFyQixDQUF4Qjs7QUFFQSxrQkFBSUcsbUJBQW1CbEYsb0JBQW9CZ0Ysd0JBQXBCLEVBQThDRSxlQUE5QyxDQUF2QixFQUF1RjtBQUNyRjtBQUNEOztBQUVEO0FBQ0VEO0FBQ0UsZUFBQ0MsZUFBRDtBQUNHLGVBQUNsRixvQkFBb0JpRixhQUFwQixFQUFtQ0MsZUFBbkMsQ0FGTixDQURGOztBQUtFOztBQUVBckMsZ0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0YsYUFyQkQ7QUFzQkQsV0FuQ0k7QUFvQ0xFLDZCQUFxQnhCLGNBcENoQjtBQXFDTHlCLDRCQUFvQnpCLGNBckNmO0FBc0NMMEIsaUNBQXlCMUIsY0F0Q3BCO0FBdUNMMkIsd0JBQWdCM0IsY0F2Q1g7QUF3Q0w0QiwwQkFBa0I1QixjQXhDYjtBQXlDTDZCLG1CQUFXN0IsY0F6Q047QUEwQ0wsb0NBQTRCQyxjQTFDdkI7QUEyQ0wsbUNBQTJCQSxjQTNDdEI7QUE0Q0wsd0NBQWdDQSxjQTVDM0I7QUE2Q0wsK0JBQXVCQSxjQTdDbEI7QUE4Q0wsaUNBQXlCQSxjQTlDcEI7QUErQ0wsMEJBQWtCQSxjQS9DYixFQUFQOztBQWlERCxLQXJMYyxtQkFBakIiLCJmaWxlIjoibmV3bGluZS1hZnRlci1pbXBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIG5ldyBsaW5lIGFmdGVyIGltcG9ydCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuXG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OnJ1bGVzOm5ld2xpbmUtYWZ0ZXItaW1wb3J0Jyk7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZU9yRXF1YWwob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgcmV0dXJuIG91dGVyTm9kZS5yYW5nZVswXSA8PSBpbm5lck5vZGUucmFuZ2VbMF0gJiYgb3V0ZXJOb2RlLnJhbmdlWzFdID49IGlubmVyTm9kZS5yYW5nZVsxXTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGVCb2R5KHNjb3BlKSB7XG4gIGlmIChzY29wZS5ibG9jay50eXBlID09PSAnU3dpdGNoU3RhdGVtZW50Jykge1xuICAgIGxvZygnU3dpdGNoU3RhdGVtZW50IHNjb3BlcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGJvZHkgfSA9IHNjb3BlLmJsb2NrO1xuICBpZiAoYm9keSAmJiBib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gYm9keS5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShib2R5LCBub2RlVG9GaW5kKSB7XG4gIHJldHVybiBib2R5LmZpbmRJbmRleCgobm9kZSkgPT4gY29udGFpbnNOb2RlT3JFcXVhbChub2RlLCBub2RlVG9GaW5kKSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKSB7XG4gIHJldHVybiBuZXh0Tm9kZS5sb2Muc3RhcnQubGluZSAtIG5vZGUubG9jLmVuZC5saW5lO1xufVxuXG5mdW5jdGlvbiBpc0NsYXNzV2l0aERlY29yYXRvcihub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJyAmJiBub2RlLmRlY29yYXRvcnMgJiYgbm9kZS5kZWNvcmF0b3JzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnREZWZhdWx0Q2xhc3Mobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnROYW1lQ2xhc3Mobm9kZSkge1xuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdsYXlvdXQnLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbmV3bGluZSBhZnRlciBpbXBvcnQgc3RhdGVtZW50cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ3doaXRlc3BhY2UnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvdW50OiB7XG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhY3RDb3VudDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICBjb25zaWRlckNvbW1lbnRzOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGxldmVsID0gMDtcbiAgICBjb25zdCByZXF1aXJlQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgY291bnQ6IDEsXG4gICAgICBleGFjdENvdW50OiBmYWxzZSxcbiAgICAgIGNvbnNpZGVyQ29tbWVudHM6IGZhbHNlLFxuICAgICAgLi4uY29udGV4dC5vcHRpb25zWzBdLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsIHR5cGUpIHtcbiAgICAgIGlmIChpc0V4cG9ydERlZmF1bHRDbGFzcyhuZXh0Tm9kZSkgfHwgaXNFeHBvcnROYW1lQ2xhc3MobmV4dE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTm9kZSA9IG5leHROb2RlLmRlY2xhcmF0aW9uO1xuXG4gICAgICAgIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihjbGFzc05vZGUpKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBjbGFzc05vZGUuZGVjb3JhdG9yc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihuZXh0Tm9kZSkpIHtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICAgIHx8IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBsaW5lRGlmZmVyZW5jZSAhPT0gRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCkge1xuICAgICAgY29uc3QgbGluZURpZmZlcmVuY2UgPSBnZXRMaW5lRGlmZmVyZW5jZShub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICBjb25zdCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPSBvcHRpb25zLmNvdW50ICsgMTtcblxuICAgICAgaWYgKGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFKSB7XG4gICAgICAgIGxldCBjb2x1bW4gPSBub2RlLmxvYy5zdGFydC5jb2x1bW47XG5cbiAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgIT09IG5vZGUubG9jLmVuZC5saW5lKSB7XG4gICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBsb2M6IHtcbiAgICAgICAgICAgIGxpbmU6IG5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7b3B0aW9ucy5jb3VudH0gZW1wdHkgbGluZSR7b3B0aW9ucy5jb3VudCA+IDEgPyAncycgOiAnJ30gYWZ0ZXIgaW1wb3J0IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWNyZW1lbnRMZXZlbCgpIHtcbiAgICAgIGxldmVsLS07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tJbXBvcnQobm9kZSkge1xuICAgICAgY29uc3QgeyBwYXJlbnQgfSA9IG5vZGU7XG5cbiAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuYm9keSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHBhcmVudC5ib2R5LmluZGV4T2Yobm9kZSk7XG4gICAgICBjb25zdCBuZXh0Tm9kZSA9IHBhcmVudC5ib2R5W25vZGVQb3NpdGlvbiArIDFdO1xuICAgICAgY29uc3QgZW5kTGluZSA9IG5vZGUubG9jLmVuZC5saW5lO1xuICAgICAgbGV0IG5leHRDb21tZW50O1xuXG4gICAgICBpZiAodHlwZW9mIHBhcmVudC5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucy5jb25zaWRlckNvbW1lbnRzKSB7XG4gICAgICAgIG5leHRDb21tZW50ID0gcGFyZW50LmNvbW1lbnRzLmZpbmQoKG8pID0+IG8ubG9jLnN0YXJ0LmxpbmUgPj0gZW5kTGluZSAmJiBvLmxvYy5zdGFydC5saW5lIDw9IGVuZExpbmUgKyBvcHRpb25zLmNvdW50ICsgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5pc0V4cG9ydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0Q29tbWVudCAmJiB0eXBlb2YgbmV4dENvbW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHROb2RlICYmIG5leHROb2RlLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKG5leHROb2RlLnR5cGUgIT09ICdUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uJyB8fCBuZXh0Tm9kZS5pc0V4cG9ydCkpIHtcbiAgICAgICAgY2hlY2tGb3JOZXdMaW5lKG5vZGUsIG5leHROb2RlLCAnaW1wb3J0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0ltcG9ydCxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAoaXNTdGF0aWNSZXF1aXJlKG5vZGUpICYmIGxldmVsID09PSAwKSB7XG4gICAgICAgICAgcmVxdWlyZUNhbGxzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgbG9nKCdleGl0IHByb2Nlc3NpbmcgZm9yJywgY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xuICAgICAgICBjb25zdCBzY29wZUJvZHkgPSBnZXRTY29wZUJvZHkoY29udGV4dC5nZXRTY29wZSgpKTtcbiAgICAgICAgbG9nKCdnb3Qgc2NvcGU6Jywgc2NvcGVCb2R5KTtcblxuICAgICAgICByZXF1aXJlQ2FsbHMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkoc2NvcGVCb2R5LCBub2RlKTtcbiAgICAgICAgICBsb2coJ25vZGUgcG9zaXRpb24gaW4gc2NvcGU6Jywgbm9kZVBvc2l0aW9uKTtcblxuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb25dO1xuICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZW1lbnQgPSBzY29wZUJvZHlbbm9kZVBvc2l0aW9uICsgMV07XG4gICAgICAgICAgY29uc3QgbmV4dFJlcXVpcmVDYWxsID0gcmVxdWlyZUNhbGxzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobmV4dFJlcXVpcmVDYWxsICYmIGNvbnRhaW5zTm9kZU9yRXF1YWwoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0UmVxdWlyZUNhbGwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmV4dFN0YXRlbWVudCAmJiAoXG4gICAgICAgICAgICAgICFuZXh0UmVxdWlyZUNhbGxcbiAgICAgICAgICAgICAgfHwgIWNvbnRhaW5zTm9kZU9yRXF1YWwobmV4dFN0YXRlbWVudCwgbmV4dFJlcXVpcmVDYWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuXG4gICAgICAgICAgICBjaGVja0Zvck5ld0xpbmUoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0U3RhdGVtZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQmxvY2tTdGF0ZW1lbnQ6IGluY3JlbWVudExldmVsLFxuICAgICAgT2JqZWN0RXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBEZWNvcmF0b3I6IGluY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Jsb2NrU3RhdGVtZW50OmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdPYmplY3RFeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdEZWNvcmF0b3I6ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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QUFDTGIsa0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0Y7QUFDRixhQS9CRDtBQWdDRCxXQTdDSTtBQThDTEUsNkJBQXFCeEIsY0E5Q2hCO0FBK0NMeUIsNEJBQW9CekIsY0EvQ2Y7QUFnREwwQixpQ0FBeUIxQixjQWhEcEI7QUFpREwyQix3QkFBZ0IzQixjQWpEWDtBQWtETDRCLDBCQUFrQjVCLGNBbERiO0FBbURMNkIsbUJBQVc3QixjQW5ETjtBQW9ETCxvQ0FBNEJDLGNBcER2QjtBQXFETCxtQ0FBMkJBLGNBckR0QjtBQXNETCx3Q0FBZ0NBLGNBdEQzQjtBQXVETCwrQkFBdUJBLGNBdkRsQjtBQXdETCxpQ0FBeUJBLGNBeERwQjtBQXlETCwwQkFBa0JBLGNBekRiLEVBQVA7O0FBMkRELEtBL0xjLG1CQUFqQiIsImZpbGUiOiJuZXdsaW5lLWFmdGVyLWltcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgbmV3IGxpbmUgYWZ0ZXIgaW1wb3J0IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIGltcG9ydC5cbiAqIEBhdXRob3IgUmFkZWsgQmVua2VsXG4gKi9cblxuaW1wb3J0IGlzU3RhdGljUmVxdWlyZSBmcm9tICcuLi9jb3JlL3N0YXRpY1JlcXVpcmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5jb25zdCBsb2cgPSBkZWJ1ZygnZXNsaW50LXBsdWdpbi1pbXBvcnQ6cnVsZXM6bmV3bGluZS1hZnRlci1pbXBvcnQnKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlT3JFcXVhbChvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICByZXR1cm4gb3V0ZXJOb2RlLnJhbmdlWzBdIDw9IGlubmVyTm9kZS5yYW5nZVswXSAmJiBvdXRlck5vZGUucmFuZ2VbMV0gPj0gaW5uZXJOb2RlLnJhbmdlWzFdO1xufVxuXG5mdW5jdGlvbiBnZXRTY29wZUJvZHkoc2NvcGUpIHtcbiAgaWYgKHNjb3BlLmJsb2NrLnR5cGUgPT09ICdTd2l0Y2hTdGF0ZW1lbnQnKSB7XG4gICAgbG9nKCdTd2l0Y2hTdGF0ZW1lbnQgc2NvcGVzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgYm9keSB9ID0gc2NvcGUuYmxvY2s7XG4gIGlmIChib2R5ICYmIGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIHJldHVybiBib2R5LmJvZHk7XG4gIH1cblxuICByZXR1cm4gYm9keTtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGVJbmRleEluU2NvcGVCb2R5KGJvZHksIG5vZGVUb0ZpbmQpIHtcbiAgcmV0dXJuIGJvZHkuZmluZEluZGV4KChub2RlKSA9PiBjb250YWluc05vZGVPckVxdWFsKG5vZGUsIG5vZGVUb0ZpbmQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpIHtcbiAgcmV0dXJuIG5leHROb2RlLmxvYy5zdGFydC5saW5lIC0gbm9kZS5sb2MuZW5kLmxpbmU7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjb3JhdG9ycyAmJiBub2RlLmRlY29yYXRvcnMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydERlZmF1bHRDbGFzcyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydE5hbWVDbGFzcyhub2RlKSB7XG5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24gJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ2xheW91dCcsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBuZXdsaW5lIGFmdGVyIGltcG9ydCBzdGF0ZW1lbnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnd2hpdGVzcGFjZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFjdENvdW50OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICAgIGNvbnNpZGVyQ29tbWVudHM6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGNvbnN0IHJlcXVpcmVDYWxscyA9IFtdO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjb3VudDogMSxcbiAgICAgIGV4YWN0Q291bnQ6IGZhbHNlLFxuICAgICAgY29uc2lkZXJDb21tZW50czogZmFsc2UsXG4gICAgICAuLi5jb250ZXh0Lm9wdGlvbnNbMF0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yTmV3TGluZShub2RlLCBuZXh0Tm9kZSwgdHlwZSkge1xuICAgICAgaWYgKGlzRXhwb3J0RGVmYXVsdENsYXNzKG5leHROb2RlKSB8fCBpc0V4cG9ydE5hbWVDbGFzcyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOb2RlID0gbmV4dE5vZGUuZGVjbGFyYXRpb247XG5cbiAgICAgICAgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKGNsYXNzTm9kZSkpIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IGNsYXNzTm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5leHROb2RlKSkge1xuICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLmRlY29yYXRvcnNbMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVEaWZmZXJlbmNlID0gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpO1xuICAgICAgY29uc3QgRVhQRUNURURfTElORV9ESUZGRVJFTkNFID0gb3B0aW9ucy5jb3VudCArIDE7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICAgfHwgb3B0aW9ucy5leGFjdENvdW50ICYmIGxpbmVEaWZmZXJlbmNlICE9PSBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICkge1xuICAgICAgICBsZXQgY29sdW1uID0gbm9kZS5sb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgICAgIGlmIChub2RlLmxvYy5zdGFydC5saW5lICE9PSBub2RlLmxvYy5lbmQubGluZSkge1xuICAgICAgICAgIGNvbHVtbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICBsaW5lOiBub2RlLmxvYy5lbmQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke29wdGlvbnMuY291bnR9IGVtcHR5IGxpbmUke29wdGlvbnMuY291bnQgPiAxID8gJ3MnIDogJyd9IGFmdGVyICR7dHlwZX0gc3RhdGVtZW50IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyICR7dHlwZX0uYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWVudEFmdGVySW1wb3J0KG5vZGUsIG5leHRDb21tZW50LCB0eXBlKSB7XG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHRDb21tZW50KTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAobGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UpIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY3JlbWVudExldmVsKCkge1xuICAgICAgbGV2ZWwrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbC0tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW1wb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuXG4gICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LmJvZHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBwYXJlbnQuYm9keS5pbmRleE9mKG5vZGUpO1xuICAgICAgY29uc3QgbmV4dE5vZGUgPSBwYXJlbnQuYm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgIGNvbnN0IGVuZExpbmUgPSBub2RlLmxvYy5lbmQubGluZTtcbiAgICAgIGxldCBuZXh0Q29tbWVudDtcblxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICBuZXh0Q29tbWVudCA9IHBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBza2lwIFwiZXhwb3J0IGltcG9ydFwic1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21tZW50QWZ0ZXJJbXBvcnQobm9kZSwgbmV4dENvbW1lbnQsICdpbXBvcnQnKTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAobmV4dE5vZGUudHlwZSAhPT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nIHx8IG5leHROb2RlLmlzRXhwb3J0KSkge1xuICAgICAgICBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsICdpbXBvcnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogY2hlY2tJbXBvcnQsXG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY1JlcXVpcmUobm9kZSkgJiYgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICByZXF1aXJlQ2FsbHMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBsb2coJ2V4aXQgcHJvY2Vzc2luZyBmb3InLCBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlQm9keSA9IGdldFNjb3BlQm9keShjb250ZXh0LmdldFNjb3BlKCkpO1xuICAgICAgICBsb2coJ2dvdCBzY29wZTonLCBzY29wZUJvZHkpO1xuXG4gICAgICAgIHJlcXVpcmVDYWxscy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShzY29wZUJvZHksIG5vZGUpO1xuICAgICAgICAgIGxvZygnbm9kZSBwb3NpdGlvbiBpbiBzY29wZTonLCBub2RlUG9zaXRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsID0gc2NvcGVCb2R5W25vZGVQb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgbmV4dFN0YXRlbWVudCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0UmVxdWlyZUNhbGwgPSByZXF1aXJlQ2FsbHNbaW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmIChuZXh0UmVxdWlyZUNhbGwgJiYgY29udGFpbnNOb2RlT3JFcXVhbChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRSZXF1aXJlQ2FsbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXh0U3RhdGVtZW50ICYmIChcbiAgICAgICAgICAgICAgIW5leHRSZXF1aXJlQ2FsbFxuICAgICAgICAgICAgICB8fCAhY29udGFpbnNOb2RlT3JFcXVhbChuZXh0U3RhdGVtZW50LCBuZXh0UmVxdWlyZUNhbGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmV4dENvbW1lbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbC5wYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICAgICAgICBjb25zdCBlbmRMaW5lID0gbm9kZS5sb2MuZW5kLmxpbmU7XG4gICAgICAgICAgICAgIG5leHRDb21tZW50ID0gc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLnBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuXG4gICAgICAgICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRDb21tZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2tGb3JOZXdMaW5lKHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCwgbmV4dFN0YXRlbWVudCwgJ3JlcXVpcmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IGluY3JlbWVudExldmVsLFxuICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEJsb2NrU3RhdGVtZW50OiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIE9iamVjdEV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgRGVjb3JhdG9yOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdCbG9ja1N0YXRlbWVudDpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnT2JqZWN0RXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnRGVjb3JhdG9yOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ 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 c728eafed7..5cc9bd7861 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-cycle.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-cycle.js @@ -4,13 +4,18 @@ */ var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _scc = require('../scc');var _scc2 = _interopRequireDefault(_scc); var _importType = require('../core/importType'); var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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);}} var traversed = new Set(); +function routeString(route) { + return route.map(function (s) {return String(s.value) + ':' + String(s.loc.start.line);}).join('=>'); +} + module.exports = { meta: { type: 'suggestion', @@ -41,6 +46,11 @@ module.exports = { allowUnsafeDynamicCyclicDependency: { description: 'Allow cyclic dependency if there is at least one dynamic import in the chain', type: 'boolean', + 'default': false }, + + disableScc: { + description: 'When true, don\'t calculate a strongly-connected-components graph. SCC is used to reduce the time-complexity of cycle detection, but adds overhead.', + type: 'boolean', 'default': false } })] }, @@ -58,6 +68,8 @@ module.exports = { context);}return ignoreModule;}(); + var scc = options.disableScc ? {} : _scc2['default'].get(myPath, context); + function checkSourceValue(sourceNode, importer) { if (ignoreModule(sourceNode.value)) { return; // ignore external modules @@ -84,7 +96,7 @@ module.exports = { return; // ignore type imports } - var imported = _ExportMap2['default'].get(sourceNode.value, context); + var imported = _builder2['default'].get(sourceNode.value, context); if (imported == null) { return; // no-unresolved territory @@ -94,6 +106,16 @@ module.exports = { return; // no-self-import territory } + /* If we're in the same Strongly Connected Component, + * Then there exists a path from each node in the SCC to every other node in the SCC, + * Then there exists at least one path from them to us and from us to them, + * Then we have a cycle between us. + */ + var hasDependencyCycle = options.disableScc || scc[myPath] === scc[imported.path]; + if (!hasDependencyCycle) { + return; + } + var untraversed = [{ mget: function () {function mget() {return imported;}return mget;}(), route: [] }]; function detectCycle(_ref2) {var mget = _ref2.mget,route = _ref2.route; var m = mget(); @@ -102,6 +124,9 @@ module.exports = { traversed.add(m.path);var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = m.imports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref3 = _step.value;var _ref4 = _slicedToArray(_ref3, 2);var path = _ref4[0];var _ref4$ = _ref4[1];var getter = _ref4$.getter;var declarations = _ref4$.declarations; + // If we're in different SCCs, we can't have a circular dependency + if (!options.disableScc && scc[myPath] !== scc[path]) {continue;} + if (traversed.has(path)) {continue;} var toTraverse = [].concat(_toConsumableArray(declarations)).filter(function (_ref5) {var source = _ref5.source,isOnlyImportingTypes = _ref5.isOnlyImportingTypes;return !ignoreModule(source.value) // Ignore only type imports @@ -150,9 +175,4 @@ module.exports = { }return ProgramExit;}() }); }return create;}() }; - - -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsIm1heERlcHRoIiwiYW55T2YiLCJtaW5pbXVtIiwiaWdub3JlRXh0ZXJuYWwiLCJhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5IiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJjaGVja1NvdXJjZVZhbHVlIiwic291cmNlTm9kZSIsImltcG9ydGVyIiwidmFsdWUiLCJjYWxsZWUiLCJpbXBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5IiwiaW1wb3J0ZWQiLCJFeHBvcnRzIiwiZ2V0IiwicGF0aCIsInVudHJhdmVyc2VkIiwibWdldCIsInJvdXRlIiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicm91dGVTdHJpbmciLCJyZXBvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJjbGVhciIsIm1hcCIsInMiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJqb2luIl0sIm1hcHBpbmdzIjoic29CQUFBOzs7OztBQUtBLHNEO0FBQ0EseUM7QUFDQTtBQUNBLGtFO0FBQ0EscUM7O0FBRUEsSUFBTUEsWUFBWSxJQUFJQyxHQUFKLEVBQWxCOztBQUVBQyxPQUFPQyxPQUFQLEdB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TUFBWixHQUFxQixDQUE1QixFQUErQjtBQUM3QixjQUFNRyxPQUFPcEIsWUFBWXFCLEtBQVosRUFBYixDQUQ2QixDQUNLO0FBQ2xDLGNBQUlsQixZQUFZaUIsSUFBWixDQUFKLEVBQXVCO0FBQ3JCLGdCQUFNRSxVQUFVRixLQUFLbEIsS0FBTCxDQUFXZSxNQUFYLEdBQW9CLENBQXBCO0FBQ1lNLHdCQUFZSCxLQUFLbEIsS0FBakIsQ0FEWjtBQUVaLHdDQUZKO0FBR0F0QixvQkFBUTRDLE1BQVIsQ0FBZWxDLFFBQWYsRUFBeUJnQyxPQUF6QjtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUVELGFBQU9HLE9BQU9DLE1BQVAsQ0FBYyxnQ0FBY3RDLGdCQUFkLEVBQWdDUixRQUFRSSxPQUFSLENBQWdCLENBQWhCLENBQWhDLENBQWQsRUFBbUU7QUFDeEUsc0JBRHdFLHNDQUN2RDtBQUNmckIsc0JBQVVnRSxLQUFWO0FBQ0QsV0FIdUUsd0JBQW5FLENBQVA7O0FBS0QsS0ExSWMsbUJBQWpCOzs7QUE2SUEsU0FBU0osV0FBVCxDQUFxQnJCLEtBQXJCLEVBQTRCO0FBQzFCLFNBQU9BLE1BQU0wQixHQUFOLENBQVUsVUFBQ0MsQ0FBRCxpQkFBVUEsRUFBRXRDLEtBQVosaUJBQXFCc0MsRUFBRUMsR0FBRixDQUFNQyxLQUFOLENBQVlDLElBQWpDLEdBQVYsRUFBbURDLElBQW5ELENBQXdELElBQXhELENBQVA7QUFDRCIsImZpbGUiOiJuby1jeWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbm8gaW1wb3J0ZWQgbW9kdWxlIGltcG9ydHMgdGhlIGxpbnRlZCBtb2R1bGUuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxNb2R1bGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmNvbnN0IHRyYXZlcnNlZCA9IG5ldyBTZXQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgYSBtb2R1bGUgZnJvbSBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBhIGRlcGVuZGVuY3kgcGF0aCBiYWNrIHRvIGl0c2VsZi4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1jeWNsZScpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbbWFrZU9wdGlvbnNTY2hlbWEoe1xuICAgICAgbWF4RGVwdGg6IHtcbiAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ21heGltdW0gZGVwZW5kZW5jeSBkZXB0aCB0byB0cmF2ZXJzZScsXG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW51bTogWyfiiJ4nXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgaWdub3JlRXh0ZXJuYWw6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgZXh0ZXJuYWwgbW9kdWxlcycsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93IGN5Y2xpYyBkZXBlbmRlbmN5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkeW5hbWljIGltcG9ydCBpbiB0aGUgY2hhaW4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydHMuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bnRyYXZlcnNlZCA9IFt7IG1nZXQ6ICgpID0+IGltcG9ydGVkLCByb3V0ZTogW10gfV07XG4gICAgICBmdW5jdGlvbiBkZXRlY3RDeWNsZSh7IG1nZXQsIHJvdXRlIH0pIHtcbiAgICAgICAgY29uc3QgbSA9IG1nZXQoKTtcbiAgICAgICAgaWYgKG0gPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMobS5wYXRoKSkgeyByZXR1cm47IH1cbiAgICAgICAgdHJhdmVyc2VkLmFkZChtLnBhdGgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHsgZ2V0dGVyLCBkZWNsYXJhdGlvbnMgfV0gb2YgbS5pbXBvcnRzKSB7XG4gICAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMocGF0aCkpIHsgY29udGludWU7IH1cbiAgICAgICAgICBjb25zdCB0b1RyYXZlcnNlID0gWy4uLmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IHNvdXJjZSwgaXNPbmx5SW1wb3J0aW5nVHlwZXMgfSkgPT4gIWlnbm9yZU1vZHVsZShzb3VyY2UudmFsdWUpXG4gICAgICAgICAgICAvLyBJZ25vcmUgb25seSB0eXBlIGltcG9ydHNcbiAgICAgICAgICAgICYmICFpc09ubHlJbXBvcnRpbmdUeXBlcyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLypcbiAgICAgICAgICBJZiBjeWNsaWMgZGVwZW5kZW5jeSBpcyBhbGxvd2VkIHZpYSBkeW5hbWljIGltcG9ydCwgc2tpcCBjaGVja2luZyBpZiBhbnkgbW9kdWxlIGlzIGltcG9ydGVkIGR5bmFtaWNhbGx5XG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIHRvVHJhdmVyc2Uuc29tZSgoZCkgPT4gZC5keW5hbWljKSkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8qXG4gICAgICAgICAgT25seSByZXBvcnQgYXMgYSBjeWNsZSBpZiB0aGVyZSBhcmUgYW55IGltcG9ydCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgY29uc2lkZXJlZCBieVxuICAgICAgICAgIHRoZSBydWxlLiBGb3IgZXhhbXBsZTpcblxuICAgICAgICAgIGEudHM6XG4gICAgICAgICAgaW1wb3J0IHsgZm9vIH0gZnJvbSAnLi9iJyAvLyBzaG91bGQgbm90IGJlIHJlcG9ydGVkIGFzIGEgY3ljbGVcblxuICAgICAgICAgIGIudHM6XG4gICAgICAgICAgaW1wb3J0IHR5cGUgeyBCYXIgfSBmcm9tICcuL2EnXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAocGF0aCA9PT0gbXlQYXRoICYmIHRvVHJhdmVyc2UubGVuZ3RoID4gMCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAgIGlmIChyb3V0ZS5sZW5ndGggKyAxIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBzb3VyY2UgfSBvZiB0b1RyYXZlcnNlKSB7XG4gICAgICAgICAgICAgIHVudHJhdmVyc2VkLnB1c2goeyBtZ2V0OiBnZXR0ZXIsIHJvdXRlOiByb3V0ZS5jb25jYXQoc291cmNlKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHVudHJhdmVyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHVudHJhdmVyc2VkLnNoaWZ0KCk7IC8vIGJmcyFcbiAgICAgICAgaWYgKGRldGVjdEN5Y2xlKG5leHQpKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5leHQucm91dGUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgRGVwZW5kZW5jeSBjeWNsZSB2aWEgJHtyb3V0ZVN0cmluZyhuZXh0LnJvdXRlKX1gXG4gICAgICAgICAgICA6ICdEZXBlbmRlbmN5IGN5Y2xlIGRldGVjdGVkLic7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1wb3J0ZXIsIG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgY29udGV4dC5vcHRpb25zWzBdKSwge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIHRyYXZlcnNlZC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJyb3V0ZVN0cmluZyIsInJvdXRlIiwibWFwIiwicyIsInZhbHVlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwibWF4RGVwdGgiLCJhbnlPZiIsIm1pbmltdW0iLCJpZ25vcmVFeHRlcm5hbCIsImFsbG93VW5zYWZlRHluYW1pY0N5Y2xpY0RlcGVuZGVuY3kiLCJkaXNhYmxlU2NjIiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJzY2MiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwiZ2V0IiwiY2hlY2tTb3VyY2VWYWx1ZSIsInNvdXJjZU5vZGUiLCJpbXBvcnRlciIsImNhbGxlZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJpbXBvcnRlZCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJwYXRoIiwiaGFzRGVwZW5kZW5jeUN5Y2xlIiwidW50cmF2ZXJzZWQiLCJtZ2V0IiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiT2JqZWN0IiwiYXNzaWduIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJzb0JBQUE7Ozs7O0FBS0Es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L0IsUUFBZixFQUF5QjhCLE9BQXpCO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsYUFBT0UsT0FBT0MsTUFBUCxDQUFjLGdDQUFjbkMsZ0JBQWQsRUFBZ0NYLFFBQVFJLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBaEMsQ0FBZCxFQUFtRTtBQUN4RSxzQkFEd0Usc0NBQ3ZEO0FBQ2YvQixzQkFBVTBFLEtBQVY7QUFDRCxXQUh1RSx3QkFBbkUsQ0FBUDs7QUFLRCxLQTlKYyxtQkFBakIiLCJmaWxlIjoibm8tY3ljbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG5vIGltcG9ydGVkIG1vZHVsZSBpbXBvcnRzIHRoZSBsaW50ZWQgbW9kdWxlLlxuICogQGF1dGhvciBCZW4gTW9zaGVyXG4gKi9cblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIGZyb20gJy4uL3NjYyc7XG5pbXBvcnQgeyBpc0V4dGVybmFsTW9kdWxlIH0gZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCB0cmF2ZXJzZWQgPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBhIG1vZHVsZSBmcm9tIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEgZGVwZW5kZW5jeSBwYXRoIGJhY2sgdG8gaXRzZWxmLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWN5Y2xlJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFttYWtlT3B0aW9uc1NjaGVtYSh7XG4gICAgICBtYXhEZXB0aDoge1xuICAgICAgICBhbnlPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWF4aW11bSBkZXBlbmRlbmN5IGRlcHRoIHRvIHRyYXZlcnNlJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnVtOiBbJ+KIniddLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpZ25vcmVFeHRlcm5hbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ2lnbm9yZSBleHRlcm5hbCBtb2R1bGVzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxsb3cgY3ljbGljIGRlcGVuZGVuY3kgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGR5bmFtaWMgaW1wb3J0IGluIHRoZSBjaGFpbicsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVNjYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZW4gdHJ1ZSwgZG9uXFwndCBjYWxjdWxhdGUgYSBzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyBncmFwaC4gU0NDIGlzIHVzZWQgdG8gcmVkdWNlIHRoZSB0aW1lLWNvbXBsZXhpdHkgb2YgY3ljbGUgZGV0ZWN0aW9uLCBidXQgYWRkcyBvdmVyaGVhZC4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBjb25zdCBzY2MgPSBvcHRpb25zLmRpc2FibGVTY2MgPyB7fSA6IFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZ2V0KG15UGF0aCwgY29udGV4dCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICAvKiBJZiB3ZSdyZSBpbiB0aGUgc2FtZSBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50LFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYSBwYXRoIGZyb20gZWFjaCBub2RlIGluIHRoZSBTQ0MgdG8gZXZlcnkgb3RoZXIgbm9kZSBpbiB0aGUgU0NDLFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lIHBhdGggZnJvbSB0aGVtIHRvIHVzIGFuZCBmcm9tIHVzIHRvIHRoZW0sXG4gICAgICAgKiBUaGVuIHdlIGhhdmUgYSBjeWNsZSBiZXR3ZWVuIHVzLlxuICAgICAgICovXG4gICAgICBjb25zdCBoYXNEZXBlbmRlbmN5Q3ljbGUgPSBvcHRpb25zLmRpc2FibGVTY2MgfHwgc2NjW215UGF0aF0gPT09IHNjY1tpbXBvcnRlZC5wYXRoXTtcbiAgICAgIGlmICghaGFzRGVwZW5kZW5jeUN5Y2xlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW50cmF2ZXJzZWQgPSBbeyBtZ2V0OiAoKSA9PiBpbXBvcnRlZCwgcm91dGU6IFtdIH1dO1xuICAgICAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGUoeyBtZ2V0LCByb3V0ZSB9KSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZ2V0KCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKG0ucGF0aCkpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRyYXZlcnNlZC5hZGQobS5wYXRoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCB7IGdldHRlciwgZGVjbGFyYXRpb25zIH1dIG9mIG0uaW1wb3J0cykge1xuICAgICAgICAgIC8vIElmIHdlJ3JlIGluIGRpZmZlcmVudCBTQ0NzLCB3ZSBjYW4ndCBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlU2NjICYmIHNjY1tteVBhdGhdICE9PSBzY2NbcGF0aF0pIHsgY29udGludWU7IH1cblxuICAgICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKHBhdGgpKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi5kZWNsYXJhdGlvbnNdLmZpbHRlcigoeyBzb3VyY2UsIGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpZ25vcmVNb2R1bGUoc291cmNlLnZhbHVlKVxuICAgICAgICAgICAgLy8gSWdub3JlIG9ubHkgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgICAmJiAhaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8qXG4gICAgICAgICAgSWYgY3ljbGljIGRlcGVuZGVuY3kgaXMgYWxsb3dlZCB2aWEgZHluYW1pYyBpbXBvcnQsIHNraXAgY2hlY2tpbmcgaWYgYW55IG1vZHVsZSBpcyBpbXBvcnRlZCBkeW5hbWljYWxseVxuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeSAmJiB0b1RyYXZlcnNlLnNvbWUoKGQpID0+IGQuZHluYW1pYykpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgIE9ubHkgcmVwb3J0IGFzIGEgY3ljbGUgaWYgdGhlcmUgYXJlIGFueSBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGNvbnNpZGVyZWQgYnlcbiAgICAgICAgICB0aGUgcnVsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICAgICAgICBhLnRzOlxuICAgICAgICAgIGltcG9ydCB7IGZvbyB9IGZyb20gJy4vYicgLy8gc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBhcyBhIGN5Y2xlXG5cbiAgICAgICAgICBiLnRzOlxuICAgICAgICAgIGltcG9ydCB0eXBlIHsgQmFyIH0gZnJvbSAnLi9hJ1xuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBhdGggPT09IG15UGF0aCAmJiB0b1RyYXZlcnNlLmxlbmd0aCA+IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgICBpZiAocm91dGUubGVuZ3RoICsgMSA8IG1heERlcHRoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgc291cmNlIH0gb2YgdG9UcmF2ZXJzZSkge1xuICAgICAgICAgICAgICB1bnRyYXZlcnNlZC5wdXNoKHsgbWdldDogZ2V0dGVyLCByb3V0ZTogcm91dGUuY29uY2F0KHNvdXJjZSkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh1bnRyYXZlcnNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB1bnRyYXZlcnNlZC5zaGlmdCgpOyAvLyBiZnMhXG4gICAgICAgIGlmIChkZXRlY3RDeWNsZShuZXh0KSkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXh0LnJvdXRlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYERlcGVuZGVuY3kgY3ljbGUgdmlhICR7cm91dGVTdHJpbmcobmV4dC5yb3V0ZSl9YFxuICAgICAgICAgICAgOiAnRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZC4nO1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltcG9ydGVyLCBtZXNzYWdlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtb2R1bGVWaXNpdG9yKGNoZWNrU291cmNlVmFsdWUsIGNvbnRleHQub3B0aW9uc1swXSksIHtcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICB0cmF2ZXJzZWQuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG59O1xuIl19 \ 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 3aea5b5ca0..27a40843fe 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js @@ -1,5 +1,6 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} function message(deprecation) { @@ -31,7 +32,7 @@ module.exports = { if (node.type !== 'ImportDeclaration') {return;} if (node.source == null) {return;} // local export, ignore - var imports = _ExportMap2['default'].get(node.source.value, context); + var imports = _builder2['default'].get(node.source.value, context); if (imports == null) {return;} var moduleDeprecation = imports.doc && imports.doc.tags.find(function (t) {return t.title === 'deprecated';}); @@ -114,7 +115,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { // ignore computed parts for now if (dereference.computed) {return;} @@ -135,4 +136,4 @@ module.exports = { }return MemberExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSx5QztBQUNBLHFDOztBQUVBLFNBQVNBLE9BQVQsQ0FBaUJDLFdBQWpCLEVBQThCO0FBQzVCLHlCQUFvQkEsWUFBWUMsV0FBWixpQkFBK0JELFlBQVlDLFdBQTNDLElBQTJELEdBQS9FO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0MsQ0FBRSxPQUFTOztBQUUzQyxTQUFPRCxTQUFTQyxHQUFULENBQWFD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SUUsWUFBWXRCLFdBQVdNLEdBQVgsQ0FBZXlCLFlBQVlDLE1BQVosQ0FBbUJaLElBQWxDLENBQWhCO0FBQ0EsZ0JBQU1hLFdBQVcsQ0FBQ0YsWUFBWUMsTUFBWixDQUFtQlosSUFBcEIsQ0FBakI7QUFDQTtBQUNBLG1CQUFPRSxxQkFBcUJqQixzQkFBckIsSUFBZ0MwQixZQUFZeEMsSUFBWixLQUFxQixrQkFBNUQsRUFBZ0Y7QUFDOUU7QUFDQSxrQkFBSXdDLFlBQVlHLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1wRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0UsSUFBVCxDQUFjSixZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIG1lc3NhZ2UoZGVwcmVjYXRpb24pIHtcbiAgcmV0dXJuIGBEZXByZWNhdGVkJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbiA/IGA6ICR7ZGVwcmVjYXRpb24uZGVzY3JpcHRpb259YCA6ICcuJ31gO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGlvbihtZXRhZGF0YSkge1xuICBpZiAoIW1ldGFkYXRhIHx8ICFtZXRhZGF0YS5kb2MpIHsgcmV0dXJuOyB9XG5cbiAgcmV0dXJuIG1ldGFkYXRhLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBpbXBvcnRlZCBuYW1lcyBtYXJrZWQgd2l0aCBgQGRlcHJlY2F0ZWRgIGRvY3VtZW50YXRpb24gdGFnLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWRlcHJlY2F0ZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXByZWNhdGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMobm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cbiAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBsb2NhbCBleHBvcnQsIGlnbm9yZVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgbW9kdWxlRGVwcmVjYXRpb24gPSBpbXBvcnRzLmRvYyAmJiBpbXBvcnRzLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG4gICAgICBpZiAobW9kdWxlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBtZXNzYWdlKG1vZHVsZURlcHJlY2F0aW9uKSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgbGV0IGltcG9ydGVkOyBsZXQgbG9jYWw7XG4gICAgICAgIHN3aXRjaCAoaW0udHlwZSkge1xuXG4gICAgICAgICAgY2FzZSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzoge1xuICAgICAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBuYW1lc3BhY2VzLnNldChpbS5sb2NhbC5uYW1lLCBpbXBvcnRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgICAgIGltcG9ydGVkID0gJ2RlZmF1bHQnO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSBpbS5pbXBvcnRlZC5uYW1lO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OiByZXR1cm47IC8vIGNhbid0IGhhbmRsZSB0aGlzIG9uZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5rbm93biB0aGluZyBjYW4ndCBiZSBkZXByZWNhdGVkXG4gICAgICAgIGNvbnN0IGV4cG9ydGVkID0gaW1wb3J0cy5nZXQoaW1wb3J0ZWQpO1xuICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjYXB0dXJlIGltcG9ydCBvZiBkZWVwIG5hbWVzcGFjZVxuICAgICAgICBpZiAoZXhwb3J0ZWQubmFtZXNwYWNlKSB7IG5hbWVzcGFjZXMuc2V0KGxvY2FsLCBleHBvcnRlZC5uYW1lc3BhY2UpOyB9XG5cbiAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihpbXBvcnRzLmdldChpbXBvcnRlZCkpO1xuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogaW0sIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuXG4gICAgICAgIGRlcHJlY2F0ZWQuc2V0KGxvY2FsLCBkZXByZWNhdGlvbik7XG5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtOiAoeyBib2R5IH0pID0+IGJvZHkuZm9yRWFjaChjaGVja1NwZWNpZmllcnMpLFxuXG4gICAgICBJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJiBub2RlLnBhcmVudC5wcm9wZXJ0eSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybjsgLy8gaGFuZGxlZCBieSBNZW1iZXJFeHByZXNzaW9uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgc3BlY2lmaWVyIGlkZW50aWZpZXJzXG4gICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlLnNsaWNlKDAsIDYpID09PSAnSW1wb3J0JykgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWRlcHJlY2F0ZWQuaGFzKG5vZGUubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgbm9kZS5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRlZC5nZXQobm9kZS5uYW1lKSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgY29tcHV0ZWQgcGFydHMgZm9yIG5vd1xuICAgICAgICAgIGlmIChkZXJlZmVyZW5jZS5jb21wdXRlZCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEpIHsgYnJlYWs7IH1cbiAgICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKTtcblxuICAgICAgICAgIGlmIChkZXByZWNhdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3Rhc2ggYW5kIHBvcFxuICAgICAgICAgIG5hbWVwYXRoLnB1c2goZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgbmFtZXNwYWNlID0gbWV0YWRhdGEubmFtZXNwYWNlO1xuICAgICAgICAgIGRlcmVmZXJlbmNlID0gZGVyZWZlcmVuY2UucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsIkV4cG9ydE1hcCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSwrQztBQUNBLHlDO0FBQ0EscUM7O0FBRUEsU0FBU0EsT0FBVCxDQUFpQkMsV0FBakIsRUFBOEI7QUFDNUIseUJBQW9CQSxZQUFZQyxXQUFaLGlCQUErQkQsWUFBWUMsV0FBM0MsSUFBMkQsR0FBL0U7QUFDRDs7QUFFRCxTQUFTQyxjQUFULENBQXdCQyxRQUF4QixFQUFrQztBQUNoQyxNQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDQSxTQUFTQyxHQUEzQixFQUFnQyxDQUFFLE9BQVM7O0FBRTNDLFNBQU9ELFNBQVNDLEdBQVQsQ0FBYUMsSUFBYixDQUFrQkMsSUFBbEIsQ0FBdUIsVUFBQ0MsQ0FBRCxVQUFPQSxFQUFFQyxLQUFGLEtBQVksWUFBbkIsRUFBdkIsQ0FBUDtBQUNEOztBQUVEQyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSmIsbUJBQWEsb0VBRlQ7QUFHSmMsV0FBSywwQkFBUSxlQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxhQUFhLElBQUlDLEdBQUosRUFBbkI7QUFDQSxVQUFNQyxhQUFhLElBQUlELEdBQUosRUFBbkI7O0FBRUEsZUFBU0UsZUFBVCxDQUF5QkMsSUFBekIsRUFBK0I7QUFDN0IsWUFBSUEsS0FBS1gsSUFBTCxLQUFjLG1CQUFsQixFQUF1QyxDQUFFLE9BQVM7QUFDbEQsWUFBSVcsS0FBS0MsTUFBTCxJQUFlLElBQW5CLEVBQXlCLENBQUUsT0FBUyxDQUZQLENBRVE7O0FBRXJDLFlBQU1DLFVBQVVDLHFCQUFpQkMsR0FBakIsQ0FBcUJKLEtBQUtDLE1BQUwsQ0FBWUksS0FBakMsRUFBd0NWLE9BQXhDLENBQWhCO0FBQ0EsWUFBSU8sV0FBVyxJQUFmLEVBQXFCLENBQUUsT0FBUzs7QUFFaEMsWUFBTUksb0JBQW9CSixRQUFRckIsR0FBUixJQUFlcUIsUUFBUXJCLEdBQVIsQ0FBWUMsSUFBWixDQUFpQkMsSUFBakIsQ0FBc0IsVUFBQ0MsQ0FBRCxVQUFPQSxFQUFFQyxLQUFGLEtBQVksWUFBbkIsRUFBdEIsQ0FBekM7QUFDQSxZQUFJcUIsaUJBQUosRUFBdUI7QUFDckJYLGtCQUFRWSxNQUFSLENBQWUsRUFBRVAsVUFBRixFQUFReEIsU0FBU0EsUUFBUThCLGlCQUFSLENBQWpCLEVBQWY7QUFDRDs7QUFFRCxZQUFJSixRQUFRTSxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCUCxrQkFBUVEsWUFBUixDQUFxQmYsT0FBckIsRUFBOEJLLElBQTlCO0FBQ0E7QUFDRDs7QUFFREEsYUFBS1csVUFBTCxDQUFnQkMsT0FBaEIsQ0FBd0IsVUFBVUMsRUFBVixFQUFjO0FBQ3BDLGNBQUlDLGlCQUFKLENBQWMsSUFBSUMsY0FBSjtBQUNkLGtCQUFRRixHQUFHeEIsSUFBWDs7QUFFRSxpQkFBSywwQkFBTCxDQUFpQztBQUMvQixvQkFBSSxDQUFDYSxRQUFRYyxJQUFiLEVBQW1CLENBQUUsT0FBUztBQUM5QmxCLDJCQUFXbUIsR0FBWCxDQUFlSixHQUFHRSxLQUFILENBQVNHLElBQXhCLEVBQThCaEIsT0FBOUI7QUFDQTtBQUNEOztBQUVELGlCQUFLLHdCQUFMO0FBQ0VZLHlCQUFXLFNBQVg7QUFDQUMsc0JBQVFGLEdBQUdFLEtBQUgsQ0FBU0csSUFBakI7QUFDQTs7QUFFRixpQkFBSyxpQkFBTDtBQUNFSix5QkFBV0QsR0FBR0MsUUFBSCxDQUFZSSxJQUF2QjtBQUNBSCxzQkFBUUYsR0FBR0UsS0FBSCxDQUFTRyxJQUFqQjtBQUNBOztBQUVGLG9CQUFTLE9BbEJYLENBa0JtQjtBQWxCbkI7O0FBcUJBO0FBQ0EsY0FBTUMsV0FBV2pCLFFBQVFFLEdBQVIsQ0FBWVUsUUFBWixDQUFqQjtBQUNBLGNBQUlLLFlBQVksSUFBaEIsRUFBc0IsQ0FBRSxPQUFTOztBQUVqQztBQUNBLGNBQUlBLFNBQVNDLFNBQWIsRUFBd0IsQ0FBRXRCLFdBQVdtQixHQUFYLENBQWVGLEtBQWYsRUFBc0JJLFNBQVNDLFNBQS9CLEVBQTRDOztBQUV0RSxjQUFNM0MsY0FBY0UsZUFBZXVCLFFBQVFFLEdBQVIsQ0FBWVUsUUFBWixDQUFmLENBQXBCO0FBQ0EsY0FBSSxDQUFDckMsV0FBTCxFQUFrQixDQUFFLE9BQVM7O0FBRTdCa0Isa0JBQVFZLE1BQVIsQ0FBZSxFQUFFUCxNQUFNYSxFQUFSLEVBQVlyQyxTQUFTQSxRQUFRQyxXQUFSLENBQXJCLEVBQWY7O0FBRUFtQixxQkFBV3FCLEdBQVgsQ0FBZUYsS0FBZixFQUFzQnRDLFdBQXRCOztBQUVELFNBckNEO0FBc0NEOztBQUVELGFBQU87QUFDTDRDLDhCQUFTLDRCQUFHQyxJQUFILFFBQUdBLElBQUgsUUFBY0EsS0FBS1YsT0FBTCxDQUFhYixlQUFiLENBQWQsRUFBVCxrQkFESzs7QUFHTHdCLGtCQUhLLG1DQUdNdkIsSUFITixFQUdZO0FBQ2YsZ0JBQUlBLEtBQUt3QixNQUFMLENBQVluQyxJQUFaLEtBQXFCLGtCQUFyQixJQUEyQ1csS0FBS3dCLE1BQUwsQ0FBWUMsUUFBWixLQUF5QnpCLElBQXhFLEVBQThFO0FBQzVFLHFCQUQ0RSxDQUNwRTtBQUNUOztBQUVEO0FBQ0EsZ0JBQUlBLEtBQUt3QixNQUFMLENBQVluQyxJQUFaLENBQWlCcUMsS0FBakIsQ0FBdUIsQ0FBdkIsRUFBMEIsQ0FBMUIsTUFBaUMsUUFBckMsRUFBK0MsQ0FBRSxPQUFTOztBQUUxRCxnQkFBSSxDQUFDOUIsV0FBVytCLEdBQVgsQ0FBZTNCLEtBQUtrQixJQUFwQixDQUFMLEVBQWdDLENBQUUsT0FBUzs7QUFFM0MsZ0JBQUksZ0NBQWN2QixPQUFkLEVBQXVCSyxLQUFLa0IsSUFBNUIsTUFBc0MsUUFBMUMsRUFBb0QsQ0FBRSxPQUFTO0FBQy9EdkIsb0JBQVFZLE1BQVIsQ0FBZTtBQUNiUCx3QkFEYTtBQUVieEIsdUJBQVNBLFFBQVFvQixXQUFXUSxHQUFYLENBQWVKLEtBQUtrQixJQUFwQixDQUFSLENBRkksRUFBZjs7QUFJRCxXQWxCSTs7QUFvQkxVLHdCQXBCSyx5Q0FvQllDLFdBcEJaLEVBb0J5QjtBQUM1QixnQkFBSUEsWUFBWUMsTUFBWixDQUFtQnpDLElBQW5CLEtBQTRCLFlBQWhDLEVBQThDLENBQUUsT0FBUztBQUN6RCxnQkFBSSxDQUFDUyxXQUFXNkIsR0FBWCxDQUFlRSxZQUFZQyxNQUFaLENBQW1CWixJQUFsQyxDQUFMLEVBQThDLENBQUUsT0FBUzs7QUFFekQsZ0JBQUksZ0NBQWN2QixPQUFkLEVBQXVCa0MsWUFBWUMsTUFBWixDQUFtQlosSUFBMUMsTUFBb0QsUUFBeEQsRUFBa0UsQ0FBRSxPQUFTOztBQUU3RTtBQUNBLGdCQUFJRSxZQUFZdEIsV0FBV00sR0FBWCxDQUFleUIsWUFBWUMsTUFBWixDQUFtQlosSUFBbEMsQ0FBaEI7QUFDQSxnQkFBTWEsV0FBVyxDQUFDRixZQUFZQyxNQUFaLENBQW1CWixJQUFwQixDQUFqQjtBQUNBO0FBQ0EsbUJBQU9FLHFCQUFxQlksc0JBQXJCLElBQWtDSCxZQUFZeEMsSUFBWixLQUFxQixrQkFBOUQsRUFBa0Y7QUFDaEY7QUFDQSxrQkFBSXdDLFlBQVlJLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1yRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0csSUFBVCxDQUFjTCxZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgRXhwb3J0TWFwIGZyb20gJy4uL2V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gbWVzc2FnZShkZXByZWNhdGlvbikge1xuICByZXR1cm4gYERlcHJlY2F0ZWQke2RlcHJlY2F0aW9uLmRlc2NyaXB0aW9uID8gYDogJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbn1gIDogJy4nfWA7XG59XG5cbmZ1bmN0aW9uIGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKSB7XG4gIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLmRvYykgeyByZXR1cm47IH1cblxuICByZXR1cm4gbWV0YWRhdGEuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGltcG9ydGVkIG5hbWVzIG1hcmtlZCB3aXRoIGBAZGVwcmVjYXRlZGAgZG9jdW1lbnRhdGlvbiB0YWcuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZGVwcmVjYXRlZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcHJlY2F0ZWQgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7IHJldHVybjsgfVxuICAgICAgaWYgKG5vZGUuc291cmNlID09IG51bGwpIHsgcmV0dXJuOyB9IC8vIGxvY2FsIGV4cG9ydCwgaWdub3JlXG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBtb2R1bGVEZXByZWNhdGlvbiA9IGltcG9ydHMuZG9jICYmIGltcG9ydHMuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbiAgICAgIGlmIChtb2R1bGVEZXByZWNhdGlvbikge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2U6IG1lc3NhZ2UobW9kdWxlRGVwcmVjYXRpb24pIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBsZXQgaW1wb3J0ZWQ7IGxldCBsb2NhbDtcbiAgICAgICAgc3dpdGNoIChpbS50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOiB7XG4gICAgICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KGltLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydFNwZWNpZmllcic6XG4gICAgICAgICAgICBpbXBvcnRlZCA9IGltLmltcG9ydGVkLm5hbWU7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjsgLy8gY2FuJ3QgaGFuZGxlIHRoaXMgb25lXG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bmtub3duIHRoaW5nIGNhbid0IGJlIGRlcHJlY2F0ZWRcbiAgICAgICAgY29uc3QgZXhwb3J0ZWQgPSBpbXBvcnRzLmdldChpbXBvcnRlZCk7XG4gICAgICAgIGlmIChleHBvcnRlZCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGNhcHR1cmUgaW1wb3J0IG9mIGRlZXAgbmFtZXNwYWNlXG4gICAgICAgIGlmIChleHBvcnRlZC5uYW1lc3BhY2UpIHsgbmFtZXNwYWNlcy5zZXQobG9jYWwsIGV4cG9ydGVkLm5hbWVzcGFjZSk7IH1cblxuICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKGltcG9ydHMuZ2V0KGltcG9ydGVkKSk7XG4gICAgICAgIGlmICghZGVwcmVjYXRpb24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBpbSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG5cbiAgICAgICAgZGVwcmVjYXRlZC5zZXQobG9jYWwsIGRlcHJlY2F0aW9uKTtcblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFByb2dyYW06ICh7IGJvZHkgfSkgPT4gYm9keS5mb3JFYWNoKGNoZWNrU3BlY2lmaWVycyksXG5cbiAgICAgIElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG5vZGUucGFyZW50LnByb3BlcnR5ID09PSBub2RlKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBoYW5kbGVkIGJ5IE1lbWJlckV4cHJlc3Npb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBzcGVjaWZpZXIgaWRlbnRpZmllcnNcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUuc2xpY2UoMCwgNikgPT09ICdJbXBvcnQnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghZGVwcmVjYXRlZC5oYXMobm9kZS5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBub2RlLm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGVkLmdldChub2RlLm5hbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKGRlcmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5vYmplY3QudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGNvbXB1dGVkIHBhcnRzIGZvciBub3dcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7IGJyZWFrOyB9XG4gICAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihtZXRhZGF0YSk7XG5cbiAgICAgICAgICBpZiAoZGVwcmVjYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogZGVyZWZlcmVuY2UucHJvcGVydHksIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IG1ldGFkYXRhLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ 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 8b512d083b..585a17d873 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js @@ -9,28 +9,68 @@ try { typescriptPkg = require('typescript/package.json'); // eslint-disable-line import/no-extraneous-dependencies } catch (e) {/**/} -function checkImports(imported, context) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { - for (var _iterator = imported.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref = _step.value;var _ref2 = _slicedToArray(_ref, 2);var _module = _ref2[0];var nodes = _ref2[1]; - if (nodes.length > 1) { - var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( - nodes),first = _nodes[0],rest = _nodes.slice(1); - var sourceCode = context.getSourceCode(); - var fix = getFix(first, rest, sourceCode, context); +function isPunctuator(node, value) { + return node.type === 'Punctuator' && node.value === value; +} - context.report({ - node: first.source, - message: message, - fix: fix // Attach the autofix (if any) to the first import. - });var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { +// Get the name of the default import of `node`, if any. +function getDefaultImportName(node) { + var defaultSpecifier = node.specifiers. + find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); + return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; +} - for (var _iterator2 = rest[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; - context.report({ - node: node.source, - message: message }); +// Checks whether `node` has a namespace import. +function hasNamespace(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); + return specifiers.length > 0; +} + +// Checks whether `node` has any non-default specifiers. +function hasSpecifiers(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); + return specifiers.length > 0; +} + +// Checks whether `node` has a comment (that ends) on the previous line or on +// the same line as `node` (starts). +function hasCommentBefore(node, sourceCode) { + return sourceCode.getCommentsBefore(node). + some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); +} + +// Checks whether `node` has a comment (that starts) on the same line as `node` +// (ends). +function hasCommentAfter(node, sourceCode) { + return sourceCode.getCommentsAfter(node). + some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); +} + +// Checks whether `node` has any comments _inside,_ except inside the `{...}` +// part (if any). +function hasCommentInsideNonSpecifiers(node, sourceCode) { + var tokens = sourceCode.getTokens(node); + var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); + var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); + // Slice away the first token, since we're no looking for comments _before_ + // `node` (only inside). If there's a `{...}` part, look for comments before + // the `{`, but not before the `}` (hence the `+1`s). + var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? + tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : + tokens.slice(1); + return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); +} + +// It's not obvious what the user wants to do with comments associated with +// duplicate imports, so skip imports with comments when autofixing. +function hasProblematicComments(node, sourceCode) { + return ( + hasCommentBefore(node, sourceCode) || + hasCommentAfter(node, sourceCode) || + hasCommentInsideNonSpecifiers(node, sourceCode)); - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} - } - }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } function getFix(first, rest, sourceCode, context) { @@ -92,6 +132,7 @@ function getFix(first, rest, sourceCode, context) { var shouldAddDefault = getDefaultImportName(first) == null && defaultImportNames.size === 1; var shouldAddSpecifiers = specifiers.length > 0; var shouldRemoveUnnecessary = unnecessaryImports.length > 0; + var preferInline = context.options[0] && context.options[0]['prefer-inline']; if (!(shouldAddDefault || shouldAddSpecifiers || shouldRemoveUnnecessary)) { return undefined; @@ -114,17 +155,16 @@ function getFix(first, rest, sourceCode, context) { specifiers.reduce( - function (_ref3, specifier) {var _ref4 = _slicedToArray(_ref3, 3),result = _ref4[0],needsComma = _ref4[1],existingIdentifiers = _ref4[2]; + function (_ref, specifier) {var _ref2 = _slicedToArray(_ref, 3),result = _ref2[0],needsComma = _ref2[1],existingIdentifiers = _ref2[2]; var isTypeSpecifier = specifier.importNode.importKind === 'type'; - var preferInline = context.options[0] && context.options[0]['prefer-inline']; - // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. + // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. if (preferInline && (!typescriptPkg || !_semver2['default'].satisfies(typescriptPkg.version, '>= 4.5'))) { throw new Error('Your version of TypeScript does not support inline type imports.'); } // Add *only* the new identifiers that don't already exist, and track any new identifiers so we don't add them again in the next loop - var _specifier$identifier = specifier.identifiers.reduce(function (_ref5, cur) {var _ref6 = _slicedToArray(_ref5, 2),text = _ref6[0],set = _ref6[1]; + var _specifier$identifier = specifier.identifiers.reduce(function (_ref3, cur) {var _ref4 = _slicedToArray(_ref3, 2),text = _ref4[0],set = _ref4[1]; var trimmed = cur.trim(); // Trim whitespace before/after to compare to our set of existing identifiers var curWithType = trimmed.length > 0 && preferInline && isTypeSpecifier ? 'type ' + String(cur) : cur; if (existingIdentifiers.has(trimmed)) { @@ -146,6 +186,18 @@ function getFix(first, rest, sourceCode, context) { var fixes = []; + if (shouldAddSpecifiers && preferInline && first.importKind === 'type') { + // `import type {a} from './foo'` → `import {type a} from './foo'` + var typeIdentifierToken = tokens.find(function (token) {return token.type === 'Identifier' && token.value === 'type';}); + fixes.push(fixer.removeRange([typeIdentifierToken.range[0], typeIdentifierToken.range[1] + 1])); + + tokens. + filter(function (token) {return firstExistingIdentifiers.has(token.value);}). + forEach(function (identifier) { + fixes.push(fixer.replaceTextRange([identifier.range[0], identifier.range[1]], 'type ' + String(identifier.value))); + }); + } + if (shouldAddDefault && openBrace == null && shouldAddSpecifiers) { // `import './foo'` → `import def, {...} from './foo'` fixes.push( @@ -175,7 +227,7 @@ function getFix(first, rest, sourceCode, context) { } // Remove imports whose specifiers have been moved into the first import. - var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = specifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var specifier = _step3.value; + var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = specifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var specifier = _step.value; var importNode = specifier.importNode; fixes.push(fixer.remove(importNode)); @@ -189,7 +241,7 @@ function getFix(first, rest, sourceCode, context) { // Remove imports whose default import has been moved to the first import, // and side-effect-only imports that are unnecessary due to the first // import. - } catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try {for (var _iterator4 = unnecessaryImports[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; + } catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = unnecessaryImports[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; fixes.push(fixer.remove(node)); var charAfterImportRange = [node.range[1], node.range[1] + 1]; @@ -197,74 +249,34 @@ function getFix(first, rest, sourceCode, context) { if (charAfterImport === '\n') { fixes.push(fixer.removeRange(charAfterImportRange)); } - }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} + }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} return fixes; }; } -function isPunctuator(node, value) { - return node.type === 'Punctuator' && node.value === value; -} - -// Get the name of the default import of `node`, if any. -function getDefaultImportName(node) { - var defaultSpecifier = node.specifiers. - find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); - return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; -} - -// Checks whether `node` has a namespace import. -function hasNamespace(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); - return specifiers.length > 0; -} - -// Checks whether `node` has any non-default specifiers. -function hasSpecifiers(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); - return specifiers.length > 0; -} - -// It's not obvious what the user wants to do with comments associated with -// duplicate imports, so skip imports with comments when autofixing. -function hasProblematicComments(node, sourceCode) { - return ( - hasCommentBefore(node, sourceCode) || - hasCommentAfter(node, sourceCode) || - hasCommentInsideNonSpecifiers(node, sourceCode)); - -} +function checkImports(imported, context) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { + for (var _iterator3 = imported.entries()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _ref5 = _step3.value;var _ref6 = _slicedToArray(_ref5, 2);var _module = _ref6[0];var nodes = _ref6[1]; + if (nodes.length > 1) { + var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( + nodes),first = _nodes[0],rest = _nodes.slice(1); + var sourceCode = context.getSourceCode(); + var fix = getFix(first, rest, sourceCode, context); -// Checks whether `node` has a comment (that ends) on the previous line or on -// the same line as `node` (starts). -function hasCommentBefore(node, sourceCode) { - return sourceCode.getCommentsBefore(node). - some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); -} + context.report({ + node: first.source, + message: message, + fix: fix // Attach the autofix (if any) to the first import. + });var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try { -// Checks whether `node` has a comment (that starts) on the same line as `node` -// (ends). -function hasCommentAfter(node, sourceCode) { - return sourceCode.getCommentsAfter(node). - some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); -} + for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; + context.report({ + node: node.source, + message: message }); -// Checks whether `node` has any comments _inside,_ except inside the `{...}` -// part (if any). -function hasCommentInsideNonSpecifiers(node, sourceCode) { - var tokens = sourceCode.getTokens(node); - var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); - var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); - // Slice away the first token, since we're no looking for comments _before_ - // `node` (only inside). If there's a `{...}` part, look for comments before - // the `{`, but not before the `}` (hence the `+1`s). - var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? - tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : - tokens.slice(1); - return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); + }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} + } + }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} } module.exports = { @@ -351,4 +363,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJjb25jYXQiLCJ4IiwiZ2V0RGVmYXVsdEltcG9ydE5hbWUiLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsImZpbHRlciIsInNwZWNpZmllcnMiLCJtYXAiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwidG9rZW4iLCJpc1B1bmN0dWF0b3IiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInNsaWNlIiwicmFuZ2UiLCJzcGxpdCIsImlzRW1wdHkiLCJoYXNTcGVjaWZpZXJzIiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNvbWUiLCJzcGVjaWZpZXIiLCJzaG91bGRBZGREZWZhdWx0Iiwic2hvdWxkQWRkU3BlY2lmaWVycyIsInNob3VsZFJlbW92ZVVubmVjZXNzYXJ5IiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwicHJlZmVySW5saW5lIiwib3B0aW9ucyIsInNlbXZlciIsInNhdGlzZmllcyIsInZlcnNpb24iLCJFcnJvciIsImN1ciIsInNldCIsInRyaW1tZWQiLCJjdXJXaXRoVHlwZSIsImhhcyIsImFkZCIsInNwZWNpZmllclRleHQiLCJ1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVycyIsInNwZWNpZmllcnNUZXh0IiwiZml4ZXMiLCJwdXNoIiwiaW5zZXJ0VGV4dEFmdGVyIiwiaW5zZXJ0VGV4dEJlZm9yZSIsInJlbW92ZSIsImNoYXJBZnRlckltcG9ydFJhbmdlIiwiY2hhckFmdGVySW1wb3J0Iiwic3Vic3RyaW5nIiwicmVtb3ZlUmFuZ2UiLCJ2YWx1ZSIsInR5cGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwibG9jYWwiLCJuYW1lIiwiaGFzQ29tbWVudEJlZm9yZSIsImhhc0NvbW1lbnRBZnRlciIsImhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzIiwiY29tbWVudCIsImxvYyIsImVuZCIsImxpbmUiLCJzdGFydCIsImdldENvbW1lbnRzQWZ0ZXIiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsImNsb3NlQnJhY2VJbmRleCIsInNvbWVUb2tlbnMiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwiZGVmYXVsdFJlc29sdmVyIiwic291cmNlUGF0aCIsInJlc29sdmVyIiwicGFydHMiLCJtYXRjaCIsIm1vZHVsZU1hcHMiLCJNYXAiLCJnZXRJbXBvcnRNYXAiLCJuIiwicGFyZW50IiwibnNJbXBvcnRlZCIsImRlZmF1bHRUeXBlc0ltcG9ydGVkIiwibmFtZWRUeXBlc0ltcG9ydGVkIiwiZ2V0Iiwic3BlYyIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EsZ0M7QUFDQSx5RDs7QUFFQSxxQzs7QUFFQSxJQUFJQSxzQkFBSjtBQUNBLElBQUk7QUFDRkEsa0JBQWdCQyxRQUFRLHlCQUFSLENBQWhCLENBREUsQ0FDa0Q7QUFDckQsQ0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVSxDQUFFLElBQU07O0FBRXBCLFNBQVNDLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUN2Qyx5QkFBOEJELFNBQVNFLE9BQVQsRUFBOUIsOEhBQWtELGdFQUF0Q0MsT0FBc0MsZ0JBQTlCQyxLQUE4QjtBQUNoRCxVQUFJQSxNQUFNQyxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsWUFBTUMsd0JBQWNILE9BQWQsaUNBQU4sQ0FEb0I7QUFFS0MsYUFGTCxFQUViRyxLQUZhLGFBRUhDLElBRkc7QUFHcEIsWUFBTUMsYUFBYVIsUUFBUVMsYUFBUixFQUFuQjtBQUNBLFlBQU1DLE1BQU1DLE9BQU9MLEtBQVAsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsRUFBZ0NSLE9BQWhDLENBQVo7O0FBRUFBLGdCQUFRWSxNQUFSLENBQWU7QUFDYkMsZ0JBQU1QLE1BQU1RLE1BREM7QUFFYlQsMEJBRmE7QUFHYkssa0JBSGEsQ0FHUjtBQUhRLFNBQWYsRUFOb0I7O0FBWXBCLGdDQUFtQkgsSUFBbkIsbUlBQXlCLEtBQWRNLElBQWM7QUFDdkJiLG9CQUFRWSxNQUFSLENBQWU7QUFDYkMsb0JBQU1BLEtBQUtDLE1BREU7QUFFYlQsOEJBRmEsRUFBZjs7QUFJRCxXQWpCbUI7QUFrQnJCO0FBQ0YsS0FyQnNDO0FBc0J4Qzs7QUFFRCxTQUFTTSxNQUFULENBQWdCTCxLQUFoQixFQUF1QkMsSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDUixPQUF6QyxFQUFr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LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBjaGVja0ltcG9ydHMoaW1wb3J0ZWQsIGNvbnRleHQpIHtcbiAgZm9yIChjb25zdCBbbW9kdWxlLCBub2Rlc10gb2YgaW1wb3J0ZWQuZW50cmllcygpKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJyR7bW9kdWxlfScgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMuYDtcbiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBub2RlcztcbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgIGNvbnN0IGZpeCA9IGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogZmlyc3Quc291cmNlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBmaXgsIC8vIEF0dGFjaCB0aGUgYXV0b2ZpeCAoaWYgYW55KSB0byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZXN0KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBub2RlLnNvdXJjZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KSB7XG4gIC8vIFNvcnJ5IEVTTGludCA8PSAzIHVzZXJzLCBubyBhdXRvZml4IGZvciB5b3UuIEF1dG9maXhpbmcgZHVwbGljYXRlIGltcG9ydHNcbiAgLy8gcmVxdWlyZXMgbXVsdGlwbGUgYGZpeGVyLndoYXRldmVyKClgIGNhbGxzIGluIHRoZSBgZml4YDogV2UgYm90aCBuZWVkIHRvXG4gIC8vIHVwZGF0ZSB0aGUgZmlyc3Qgb25lLCBhbmQgcmVtb3ZlIHRoZSByZXN0LiBTdXBwb3J0IGZvciBtdWx0aXBsZVxuICAvLyBgZml4ZXIud2hhdGV2ZXIoKWAgaW4gYSBzaW5nbGUgYGZpeGAgd2FzIGFkZGVkIGluIEVTTGludCA0LjEuXG4gIC8vIGBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlYCB3YXMgYWRkZWQgaW4gNC4wLCBzbyB0aGF0J3MgYW4gZWFzeSB0aGluZyB0b1xuICAvLyBjaGVjayBmb3IuXG4gIGlmICh0eXBlb2Ygc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGp1c3RpbmcgdGhlIGZpcnN0IGltcG9ydCBtaWdodCBtYWtlIGl0IG11bHRpbGluZSwgd2hpY2ggY291bGQgYnJlYWtcbiAgLy8gYGVzbGludC1kaXNhYmxlLW5leHQtbGluZWAgY29tbWVudHMgYW5kIHNpbWlsYXIsIHNvIGJhaWwgaWYgdGhlIGZpcnN0XG4gIC8vIGltcG9ydCBoYXMgY29tbWVudHMuIEFsc28sIGlmIHRoZSBmaXJzdCBpbXBvcnQgaXMgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby5cbiAgaWYgKGhhc1Byb2JsZW1hdGljQ29tbWVudHMoZmlyc3QsIHNvdXJjZUNvZGUpIHx8IGhhc05hbWVzcGFjZShmaXJzdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdEltcG9ydE5hbWVzID0gbmV3IFNldChcbiAgICBmbGF0TWFwKFtdLmNvbmNhdChmaXJzdCwgcmVzdCB8fCBbXSksICh4KSA9PiBnZXREZWZhdWx0SW1wb3J0TmFtZSh4KSB8fCBbXSksXG4gICk7XG5cbiAgLy8gQmFpbCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGlmZmVyZW50IGRlZmF1bHQgaW1wb3J0IG5hbWVzIOKAkyBpdCdzIHVwIHRvIHRoZVxuICAvLyB1c2VyIHRvIGNob29zZSB3aGljaCBvbmUgdG8ga2VlcC5cbiAgaWYgKGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID4gMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBMZWF2ZSBpdCB0byB0aGUgdXNlciB0byBoYW5kbGUgY29tbWVudHMuIEFsc28gc2tpcCBgaW1wb3J0ICogYXMgbnMgZnJvbVxuICAvLyAnLi9mb28nYCBpbXBvcnRzLCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBtZXJnZWQgaW50byBhbm90aGVyIGltcG9ydC5cbiAgY29uc3QgcmVzdFdpdGhvdXRDb21tZW50cyA9IHJlc3QuZmlsdGVyKChub2RlKSA9PiAhaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpKTtcblxuICBjb25zdCBzcGVjaWZpZXJzID0gcmVzdFdpdGhvdXRDb21tZW50c1xuICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICAgICAgY29uc3Qgb3BlbkJyYWNlID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICAgICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcblxuICAgICAgaWYgKG9wZW5CcmFjZSA9PSBudWxsIHx8IGNsb3NlQnJhY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnROb2RlOiBub2RlLFxuICAgICAgICBpZGVudGlmaWVyczogc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSkuc3BsaXQoJywnKSwgLy8gU3BsaXQgdGhlIHRleHQgaW50byBzZXBhcmF0ZSBpZGVudGlmaWVycyAocmV0YWluaW5nIGFueSB3aGl0ZXNwYWNlIGJlZm9yZSBvciBhZnRlcilcbiAgICAgICAgaXNFbXB0eTogIWhhc1NwZWNpZmllcnMobm9kZSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCB1bm5lY2Vzc2FyeUltcG9ydHMgPSByZXN0V2l0aG91dENvbW1lbnRzLmZpbHRlcigobm9kZSkgPT4gIWhhc1NwZWNpZmllcnMobm9kZSlcbiAgICAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpXG4gICAgJiYgIXNwZWNpZmllcnMuc29tZSgoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIuaW1wb3J0Tm9kZSA9PT0gbm9kZSksXG4gICk7XG5cbiAgY29uc3Qgc2hvdWxkQWRkRGVmYXVsdCA9IGdldERlZmF1bHRJbXBvcnROYW1lKGZpcnN0KSA9PSBudWxsICYmIGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID09PSAxO1xuICBjb25zdCBzaG91bGRBZGRTcGVjaWZpZXJzID0gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xuICBjb25zdCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSA9IHVubmVjZXNzYXJ5SW1wb3J0cy5sZW5ndGggPiAwO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICAgIC8vIGEgdXNlciBtaWdodCBzZXQgcHJlZmVyLWlubGluZSBidXQgbm90IGhhdmUgYSBzdXBwb3J0aW5nIFR5cGVTY3JpcHQgdmVyc2lvbi4gIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goXG4gICAgICAgIGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9LCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmICFzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9IGZyb21gKSk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSxgKSk7XG4gICAgICBpZiAoc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRCZWZvcmUoY2xvc2VCcmFjZSwgc3BlY2lmaWVyc1RleHQpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChmaXJzdC5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdC5zcGVjaWZpZXJzWzBdLCBgLCB7JHtzcGVjaWZpZXJzVGV4dH19YCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlICE9IG51bGwgJiYgY2xvc2VCcmFjZSAhPSBudWxsKSB7XG4gICAgICAvLyBgaW1wb3J0IHsuLi59ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGltcG9ydHMgd2hvc2Ugc3BlY2lmaWVycyBoYXZlIGJlZW4gbW92ZWQgaW50byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHNwZWNpZmllcnMpIHtcbiAgICAgIGNvbnN0IGltcG9ydE5vZGUgPSBzcGVjaWZpZXIuaW1wb3J0Tm9kZTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKGltcG9ydE5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbaW1wb3J0Tm9kZS5yYW5nZVsxXSwgaW1wb3J0Tm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIGRlZmF1bHQgaW1wb3J0IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBmaXJzdCBpbXBvcnQsXG4gICAgLy8gYW5kIHNpZGUtZWZmZWN0LW9ubHkgaW1wb3J0cyB0aGF0IGFyZSB1bm5lY2Vzc2FyeSBkdWUgdG8gdGhlIGZpcnN0XG4gICAgLy8gaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB1bm5lY2Vzc2FyeUltcG9ydHMpIHtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKG5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbbm9kZS5yYW5nZVsxXSwgbm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaXhlcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQdW5jdHVhdG9yKG5vZGUsIHZhbHVlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdQdW5jdHVhdG9yJyAmJiBub2RlLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGltcG9ydCBvZiBgbm9kZWAsIGlmIGFueS5cbmZ1bmN0aW9uIGdldERlZmF1bHRJbXBvcnROYW1lKG5vZGUpIHtcbiAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maW5kKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpO1xuICByZXR1cm4gZGVmYXVsdFNwZWNpZmllciAhPSBudWxsID8gZGVmYXVsdFNwZWNpZmllci5sb2NhbC5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgbmFtZXNwYWNlIGltcG9ydC5cbmZ1bmN0aW9uIGhhc05hbWVzcGFjZShub2RlKSB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gIHJldHVybiBzcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYW55IG5vbi1kZWZhdWx0IHNwZWNpZmllcnMuXG5mdW5jdGlvbiBoYXNTcGVjaWZpZXJzKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IGVuZHMpIG9uIHRoZSBwcmV2aW91cyBsaW5lIG9yIG9uXG4vLyB0aGUgc2FtZSBsaW5lIGFzIGBub2RlYCAoc3RhcnRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRCZWZvcmUobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZShub2RlKVxuICAgIC5zb21lKChjb21tZW50KSA9PiBjb21tZW50LmxvYy5lbmQubGluZSA+PSBub2RlLmxvYy5zdGFydC5saW5lIC0gMSk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IHN0YXJ0cykgb24gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWBcbi8vIChlbmRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQWZ0ZXIobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2Muc3RhcnQubGluZSA9PT0gbm9kZS5sb2MuZW5kLmxpbmUpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGFueSBjb21tZW50cyBfaW5zaWRlLF8gZXhjZXB0IGluc2lkZSB0aGUgYHsuLi59YFxuLy8gcGFydCAoaWYgYW55KS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgY29uc3QgdG9rZW5zID0gc291cmNlQ29kZS5nZXRUb2tlbnMobm9kZSk7XG4gIGNvbnN0IG9wZW5CcmFjZUluZGV4ID0gdG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gIGNvbnN0IGNsb3NlQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd9JykpO1xuICAvLyBTbGljZSBhd2F5IHRoZSBmaXJzdCB0b2tlbiwgc2luY2Ugd2UncmUgbm8gbG9va2luZyBmb3IgY29tbWVudHMgX2JlZm9yZV9cbiAgLy8gYG5vZGVgIChvbmx5IGluc2lkZSkuIElmIHRoZXJlJ3MgYSBgey4uLn1gIHBhcnQsIGxvb2sgZm9yIGNvbW1lbnRzIGJlZm9yZVxuICAvLyB0aGUgYHtgLCBidXQgbm90IGJlZm9yZSB0aGUgYH1gIChoZW5jZSB0aGUgYCsxYHMpLlxuICBjb25zdCBzb21lVG9rZW5zID0gb3BlbkJyYWNlSW5kZXggPj0gMCAmJiBjbG9zZUJyYWNlSW5kZXggPj0gMFxuICAgID8gdG9rZW5zLnNsaWNlKDEsIG9wZW5CcmFjZUluZGV4ICsgMSkuY29uY2F0KHRva2Vucy5zbGljZShjbG9zZUJyYWNlSW5kZXggKyAxKSlcbiAgICA6IHRva2Vucy5zbGljZSgxKTtcbiAgcmV0dXJuIHNvbWVUb2tlbnMuc29tZSgodG9rZW4pID0+IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUodG9rZW4pLmxlbmd0aCA+IDApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImlzUHVuY3R1YXRvciIsIm5vZGUiLCJ2YWx1ZSIsInR5cGUiLCJnZXREZWZhdWx0SW1wb3J0TmFtZSIsImRlZmF1bHRTcGVjaWZpZXIiLCJzcGVjaWZpZXJzIiwiZmluZCIsInNwZWNpZmllciIsImxvY2FsIiwibmFtZSIsInVuZGVmaW5lZCIsImhhc05hbWVzcGFjZSIsImZpbHRlciIsImxlbmd0aCIsImhhc1NwZWNpZmllcnMiLCJoYXNDb21tZW50QmVmb3JlIiwic291cmNlQ29kZSIsImdldENvbW1lbnRzQmVmb3JlIiwic29tZSIsImNvbW1lbnQiLCJsb2MiLCJlbmQiLCJsaW5lIiwic3RhcnQiLCJoYXNDb21tZW50QWZ0ZXIiLCJnZXRDb21tZW50c0FmdGVyIiwiaGFzQ29tbWVudEluc2lkZU5vblNwZWNpZmllcnMiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsInRva2VuIiwiY2xvc2VCcmFjZUluZGV4Iiwic29tZVRva2VucyIsInNsaWNlIiwiY29uY2F0IiwiaGFzUHJvYmxlbWF0aWNDb21tZW50cyIsImdldEZpeCIsImZpcnN0IiwicmVzdCIsImNvbnRleHQiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJ4Iiwic2l6ZSIsInJlc3RXaXRob3V0Q29tbWVudHMiLCJtYXAiLCJvcGVuQnJhY2UiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInJhbmdlIiwic3BsaXQiLCJpc0VtcHR5IiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNob3VsZEFkZERlZmF1bHQiLCJzaG91bGRBZGRTcGVjaWZpZXJzIiwic2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkiLCJwcmVmZXJJbmxpbmUiLCJvcHRpb25zIiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwic2VtdmVyIiwic2F0aXNmaWVzIiwidmVyc2lvbiIsIkVycm9yIiwiY3VyIiwic2V0IiwidHJpbW1lZCIsImN1cldpdGhUeXBlIiwiaGFzIiwiYWRkIiwic3BlY2lmaWVyVGV4dCIsInVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzIiwic3BlY2lmaWVyc1RleHQiLCJmaXhlcyIsInR5cGVJZGVudGlmaWVyVG9rZW4iLCJwdXNoIiwicmVtb3ZlUmFuZ2UiLCJmb3JFYWNoIiwiaWRlbnRpZmllciIsInJlcGxhY2VUZXh0UmFuZ2UiLCJpbnNlcnRUZXh0QWZ0ZXIiLCJpbnNlcnRUZXh0QmVmb3JlIiwicmVtb3ZlIiwiY2hhckFmdGVySW1wb3J0UmFuZ2UiLCJjaGFyQWZ0ZXJJbXBvcnQiLCJzdWJzdHJpbmciLCJjaGVja0ltcG9ydHMiLCJpbXBvcnRlZCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsIm1lc3NhZ2UiLCJnZXRTb3VyY2VDb2RlIiwiZml4IiwicmVwb3J0Iiwic291cmNlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29uc2lkZXJRdWVyeVN0cmluZyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiIsImRlZmF1bHRSZXNvbHZlciIsInNvdXJjZVBhdGgiLCJyZXNvbHZlciIsInBhcnRzIiwibWF0Y2giLCJtb2R1bGVNYXBzIiwiTWFwIiwiZ2V0SW1wb3J0TWFwIiwibiIsInBhcmVudCIsIm5zSW1wb3J0ZWQiLCJkZWZhdWx0VHlwZXNJbXBvcnRlZCIsIm5hbWVkVHlwZXNJbXBvcnRlZCIsImdldCIsInNwZWMiLCJJbXBvcnREZWNsYXJhdGlvbiIsInJlc29sdmVkUGF0aCIsImltcG9ydE1hcCIsInZhbHVlcyJdLCJtYXBwaW5ncyI6InFvQkFBQSxzRDtBQUNBLGdDO0FBQ0EseUQ7O0FBRUEscUM7O0FBRUEsSUFBSUEsc0JBQUo7QUFDQSxJQUFJO0FBQ0ZBLGtCQUFnQkMsUUFBUSx5QkFBUixDQUFoQixDQURFLENBQ2tEO0FBQ3JELENBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVUsQ0FBRSxJQUFNOztBQUVwQixTQUFTQyxZQUFULENBQXNCQyxJQUF0QixFQUE0QkMsS0FBNUIsRUFBbUM7QUFDakMsU0FBT0QsS0FBS0UsSUFBTCxLQUFjLFlBQWQsSUFBOEJGLEtBQUtDLEtBQUwsS0FBZUEsS0FBcEQ7QUFDRDs7QUFFRDtBQUNBLFNBQVNFLG9CQUFULENBQThCSCxJQUE5QixFQUFvQztBQUNsQyxNQUFNSSxtQkFBbUJKLEtBQUtLLFVBQUw7QUFDdEJDLE1BRHNCLENBQ2pCLFVBQUNDLFNBQUQsVUFBZUEsVUFBVUwsSUFBVixLQUFtQix3QkFBbEMsRUFEaUIsQ0FBekI7QUFFQSxTQUFPRSxvQkFBb0IsSUFBcEIsR0FBMkJBLGlCQUFpQkksS0FBakIsQ0FBdUJDLElBQWxELEdBQXlEQyxTQUFoRTtBQUNEOztBQUVEO0FBQ0EsU0FBU0MsWUFBVCxDQUFzQlgsSUFBdEIsRUFBNEI7QUFDMUIsTUFBTUssYUFBYUwsS0FBS0ssVUFBTDtBQUNoQk8sUUFEZ0IsQ0FDVCxVQUFDTCxTQUFELFVBQWVBLFVBQVVMLElBQVYsS0FBbUIsMEJBQWxDLEVBRFMsQ0FBbkI7QUFFQSxTQUFPRyxXQUFXUSxNQUFYLEdBQW9CLENBQTNCO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTQyxhQUFULENBQXVCZCxJQUF2QixFQUE2QjtBQUMzQixNQUFNSyxhQUFh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QWEySCxDQUFiLElBQWtCeEYsSUFBSTBGLFVBQXRCLEdBQW1DMUYsSUFBSTBELFFBQTlDO0FBQ0Q7O0FBRUQsYUFBTztBQUNMcUMseUJBREssMENBQ2FQLENBRGIsRUFDZ0I7QUFDbkI7QUFDQSxnQkFBTVEsZUFBZWQsU0FBU00sRUFBRXRCLE1BQUYsQ0FBUy9HLEtBQWxCLENBQXJCO0FBQ0EsZ0JBQU04SSxZQUFZVixhQUFhQyxDQUFiLENBQWxCOztBQUVBLGdCQUFJUyxVQUFVMUQsR0FBVixDQUFjeUQsWUFBZCxDQUFKLEVBQWlDO0FBQy9CQyx3QkFBVUosR0FBVixDQUFjRyxZQUFkLEVBQTRCbEQsSUFBNUIsQ0FBaUMwQyxDQUFqQztBQUNELGFBRkQsTUFFTztBQUNMUyx3QkFBVTdELEdBQVYsQ0FBYzRELFlBQWQsRUFBNEIsQ0FBQ1IsQ0FBRCxDQUE1QjtBQUNEO0FBQ0YsV0FYSTs7QUFhTCxzQkFiSyxzQ0FhWTtBQUNmLG9DQUFrQkgsV0FBV2EsTUFBWCxFQUFsQixtSUFBdUMsS0FBNUJsRyxHQUE0QjtBQUNyQ3lELDZCQUFhekQsSUFBSTBELFFBQWpCLEVBQTJCaEUsT0FBM0I7QUFDQStELDZCQUFhekQsSUFBSTBGLFVBQWpCLEVBQTZCaEcsT0FBN0I7QUFDQStELDZCQUFhekQsSUFBSTJGLG9CQUFqQixFQUF1Q2pHLE9BQXZDO0FBQ0ErRCw2QkFBYXpELElBQUk0RixrQkFBakIsRUFBcUNsRyxPQUFyQztBQUNELGVBTmM7QUFPaEIsV0FwQkksd0JBQVA7O0FBc0JELEtBbkZjLG1CQUFqQiIsImZpbGUiOiJuby1kdXBsaWNhdGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBpc1B1bmN0dWF0b3Iobm9kZSwgdmFsdWUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1B1bmN0dWF0b3InICYmIG5vZGUudmFsdWUgPT09IHZhbHVlO1xufVxuXG4vLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgaW1wb3J0IG9mIGBub2RlYCwgaWYgYW55LlxuZnVuY3Rpb24gZ2V0RGVmYXVsdEltcG9ydE5hbWUobm9kZSkge1xuICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbmQoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyk7XG4gIHJldHVybiBkZWZhdWx0U3BlY2lmaWVyICE9IG51bGwgPyBkZWZhdWx0U3BlY2lmaWVyLmxvY2FsLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBuYW1lc3BhY2UgaW1wb3J0LlxuZnVuY3Rpb24gaGFzTmFtZXNwYWNlKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgbm9uLWRlZmF1bHQgc3BlY2lmaWVycy5cbmZ1bmN0aW9uIGhhc1NwZWNpZmllcnMobm9kZSkge1xuICBjb25zdCBzcGVjaWZpZXJzID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbHRlcigoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuICByZXR1cm4gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBlbmRzKSBvbiB0aGUgcHJldmlvdXMgbGluZSBvciBvblxuLy8gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWAgKHN0YXJ0cykuXG5mdW5jdGlvbiBoYXNDb21tZW50QmVmb3JlKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2MuZW5kLmxpbmUgPj0gbm9kZS5sb2Muc3RhcnQubGluZSAtIDEpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBzdGFydHMpIG9uIHRoZSBzYW1lIGxpbmUgYXMgYG5vZGVgXG4vLyAoZW5kcykuXG5mdW5jdGlvbiBoYXNDb21tZW50QWZ0ZXIobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0FmdGVyKG5vZGUpXG4gICAgLnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgPT09IG5vZGUubG9jLmVuZC5saW5lKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgY29tbWVudHMgX2luc2lkZSxfIGV4Y2VwdCBpbnNpZGUgdGhlIGB7Li4ufWBcbi8vIHBhcnQgKGlmIGFueSkuXG5mdW5jdGlvbiBoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICBjb25zdCBjbG9zZUJyYWNlSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgLy8gU2xpY2UgYXdheSB0aGUgZmlyc3QgdG9rZW4sIHNpbmNlIHdlJ3JlIG5vIGxvb2tpbmcgZm9yIGNvbW1lbnRzIF9iZWZvcmVfXG4gIC8vIGBub2RlYCAob25seSBpbnNpZGUpLiBJZiB0aGVyZSdzIGEgYHsuLi59YCBwYXJ0LCBsb29rIGZvciBjb21tZW50cyBiZWZvcmVcbiAgLy8gdGhlIGB7YCwgYnV0IG5vdCBiZWZvcmUgdGhlIGB9YCAoaGVuY2UgdGhlIGArMWBzKS5cbiAgY29uc3Qgc29tZVRva2VucyA9IG9wZW5CcmFjZUluZGV4ID49IDAgJiYgY2xvc2VCcmFjZUluZGV4ID49IDBcbiAgICA/IHRva2Vucy5zbGljZSgxLCBvcGVuQnJhY2VJbmRleCArIDEpLmNvbmNhdCh0b2tlbnMuc2xpY2UoY2xvc2VCcmFjZUluZGV4ICsgMSkpXG4gICAgOiB0b2tlbnMuc2xpY2UoMSk7XG4gIHJldHVybiBzb21lVG9rZW5zLnNvbWUoKHRva2VuKSA9PiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKHRva2VuKS5sZW5ndGggPiAwKTtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCkge1xuICAvLyBTb3JyeSBFU0xpbnQgPD0gMyB1c2Vycywgbm8gYXV0b2ZpeCBmb3IgeW91LiBBdXRvZml4aW5nIGR1cGxpY2F0ZSBpbXBvcnRzXG4gIC8vIHJlcXVpcmVzIG11bHRpcGxlIGBmaXhlci53aGF0ZXZlcigpYCBjYWxscyBpbiB0aGUgYGZpeGA6IFdlIGJvdGggbmVlZCB0b1xuICAvLyB1cGRhdGUgdGhlIGZpcnN0IG9uZSwgYW5kIHJlbW92ZSB0aGUgcmVzdC4gU3VwcG9ydCBmb3IgbXVsdGlwbGVcbiAgLy8gYGZpeGVyLndoYXRldmVyKClgIGluIGEgc2luZ2xlIGBmaXhgIHdhcyBhZGRlZCBpbiBFU0xpbnQgNC4xLlxuICAvLyBgc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZWAgd2FzIGFkZGVkIGluIDQuMCwgc28gdGhhdCdzIGFuIGVhc3kgdGhpbmcgdG9cbiAgLy8gY2hlY2sgZm9yLlxuICBpZiAodHlwZW9mIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQWRqdXN0aW5nIHRoZSBmaXJzdCBpbXBvcnQgbWlnaHQgbWFrZSBpdCBtdWx0aWxpbmUsIHdoaWNoIGNvdWxkIGJyZWFrXG4gIC8vIGBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVgIGNvbW1lbnRzIGFuZCBzaW1pbGFyLCBzbyBiYWlsIGlmIHRoZSBmaXJzdFxuICAvLyBpbXBvcnQgaGFzIGNvbW1lbnRzLiBBbHNvLCBpZiB0aGUgZmlyc3QgaW1wb3J0IGlzIGBpbXBvcnQgKiBhcyBucyBmcm9tXG4gIC8vICcuL2ZvbydgIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uXG4gIGlmIChoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKGZpcnN0LCBzb3VyY2VDb2RlKSB8fCBoYXNOYW1lc3BhY2UoZmlyc3QpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRJbXBvcnROYW1lcyA9IG5ldyBTZXQoXG4gICAgZmxhdE1hcChbXS5jb25jYXQoZmlyc3QsIHJlc3QgfHwgW10pLCAoeCkgPT4gZ2V0RGVmYXVsdEltcG9ydE5hbWUoeCkgfHwgW10pLFxuICApO1xuXG4gIC8vIEJhaWwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGRpZmZlcmVudCBkZWZhdWx0IGltcG9ydCBuYW1lcyDigJMgaXQncyB1cCB0byB0aGVcbiAgLy8gdXNlciB0byBjaG9vc2Ugd2hpY2ggb25lIHRvIGtlZXAuXG4gIGlmIChkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA+IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTGVhdmUgaXQgdG8gdGhlIHVzZXIgdG8gaGFuZGxlIGNvbW1lbnRzLiBBbHNvIHNraXAgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgaW1wb3J0cywgc2luY2UgdGhleSBjYW5ub3QgYmUgbWVyZ2VkIGludG8gYW5vdGhlciBpbXBvcnQuXG4gIGNvbnN0IHJlc3RXaXRob3V0Q29tbWVudHMgPSByZXN0LmZpbHRlcigobm9kZSkgPT4gIWhhc1Byb2JsZW1hdGljQ29tbWVudHMobm9kZSwgc291cmNlQ29kZSkgJiYgIWhhc05hbWVzcGFjZShub2RlKSk7XG5cbiAgY29uc3Qgc3BlY2lmaWVycyA9IHJlc3RXaXRob3V0Q29tbWVudHNcbiAgICAubWFwKChub2RlKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBzb3VyY2VDb2RlLmdldFRva2Vucyhub2RlKTtcbiAgICAgIGNvbnN0IG9wZW5CcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgICAgIGNvbnN0IGNsb3NlQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ30nKSk7XG5cbiAgICAgIGlmIChvcGVuQnJhY2UgPT0gbnVsbCB8fCBjbG9zZUJyYWNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1wb3J0Tm9kZTogbm9kZSxcbiAgICAgICAgaWRlbnRpZmllcnM6IHNvdXJjZUNvZGUudGV4dC5zbGljZShvcGVuQnJhY2UucmFuZ2VbMV0sIGNsb3NlQnJhY2UucmFuZ2VbMF0pLnNwbGl0KCcsJyksIC8vIFNwbGl0IHRoZSB0ZXh0IGludG8gc2VwYXJhdGUgaWRlbnRpZmllcnMgKHJldGFpbmluZyBhbnkgd2hpdGVzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIpXG4gICAgICAgIGlzRW1wdHk6ICFoYXNTcGVjaWZpZXJzKG5vZGUpLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgY29uc3QgdW5uZWNlc3NhcnlJbXBvcnRzID0gcmVzdFdpdGhvdXRDb21tZW50cy5maWx0ZXIoKG5vZGUpID0+ICFoYXNTcGVjaWZpZXJzKG5vZGUpXG4gICAgJiYgIWhhc05hbWVzcGFjZShub2RlKVxuICAgICYmICFzcGVjaWZpZXJzLnNvbWUoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydE5vZGUgPT09IG5vZGUpLFxuICApO1xuXG4gIGNvbnN0IHNob3VsZEFkZERlZmF1bHQgPSBnZXREZWZhdWx0SW1wb3J0TmFtZShmaXJzdCkgPT0gbnVsbCAmJiBkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA9PT0gMTtcbiAgY29uc3Qgc2hvdWxkQWRkU3BlY2lmaWVycyA9IHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkgPSB1bm5lY2Vzc2FyeUltcG9ydHMubGVuZ3RoID4gMDtcbiAgY29uc3QgcHJlZmVySW5saW5lID0gY29udGV4dC5vcHRpb25zWzBdICYmIGNvbnRleHQub3B0aW9uc1swXVsncHJlZmVyLWlubGluZSddO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICAvLyBhIHVzZXIgbWlnaHQgc2V0IHByZWZlci1pbmxpbmUgYnV0IG5vdCBoYXZlIGEgc3VwcG9ydGluZyBUeXBlU2NyaXB0IHZlcnNpb24uIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMgJiYgcHJlZmVySW5saW5lICYmIGZpcnN0LmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgLy8gYGltcG9ydCB0eXBlIHthfSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IHt0eXBlIGF9IGZyb20gJy4vZm9vJ2BcbiAgICAgIGNvbnN0IHR5cGVJZGVudGlmaWVyVG9rZW4gPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IHRva2VuLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3R5cGUnKTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoW3R5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMF0sIHR5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMV0gKyAxXSkpO1xuXG4gICAgICB0b2tlbnNcbiAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IGZpcnN0RXhpc3RpbmdJZGVudGlmaWVycy5oYXModG9rZW4udmFsdWUpKVxuICAgICAgICAuZm9yRWFjaCgoaWRlbnRpZmllcikgPT4ge1xuICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHRSYW5nZShbaWRlbnRpZmllci5yYW5nZVswXSwgaWRlbnRpZmllci5yYW5nZVsxXV0sIGB0eXBlICR7aWRlbnRpZmllci52YWx1ZX1gKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIC8vIGBpbXBvcnQgJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKFxuICAgICAgICBmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSwgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiAhc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSBmcm9tYCkpO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgIT0gbnVsbCAmJiBjbG9zZUJyYWNlICE9IG51bGwpIHtcbiAgICAgIC8vIGBpbXBvcnQgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0sYCkpO1xuICAgICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiBzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoZmlyc3Quc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3Quc3BlY2lmaWVyc1swXSwgYCwgeyR7c3BlY2lmaWVyc1RleHR9fWApKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShjbG9zZUJyYWNlLCBzcGVjaWZpZXJzVGV4dCkpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIHNwZWNpZmllcnMgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGZpcnN0IGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBzcGVjaWZpZXJzKSB7XG4gICAgICBjb25zdCBpbXBvcnROb2RlID0gc3BlY2lmaWVyLmltcG9ydE5vZGU7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShpbXBvcnROb2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW2ltcG9ydE5vZGUucmFuZ2VbMV0sIGltcG9ydE5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaW1wb3J0cyB3aG9zZSBkZWZhdWx0IGltcG9ydCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QgaW1wb3J0LFxuICAgIC8vIGFuZCBzaWRlLWVmZmVjdC1vbmx5IGltcG9ydHMgdGhhdCBhcmUgdW5uZWNlc3NhcnkgZHVlIHRvIHRoZSBmaXJzdFxuICAgIC8vIGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdW5uZWNlc3NhcnlJbXBvcnRzKSB7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShub2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW25vZGUucmFuZ2VbMV0sIG5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZml4ZXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW1wb3J0cyhpbXBvcnRlZCwgY29udGV4dCkge1xuICBmb3IgKGNvbnN0IFttb2R1bGUsIG5vZGVzXSBvZiBpbXBvcnRlZC5lbnRyaWVzKCkpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAnJHttb2R1bGV9JyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcy5gO1xuICAgICAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IG5vZGVzO1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgZml4ID0gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBmaXJzdC5zb3VyY2UsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGZpeCwgLy8gQXR0YWNoIHRoZSBhdXRvZml4IChpZiBhbnkpIHRvIHRoZSBmaXJzdCBpbXBvcnQuXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlc3QpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IG5vZGUuc291cmNlLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 cbe024a71f..220e15a25a 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 @@ -42,8 +42,11 @@ function extractDepFields(pkg) { function getPackageDepFields(packageJsonPath, throwAtRead) { if (!depFieldCache.has(packageJsonPath)) { - var depFields = extractDepFields(readJSON(packageJsonPath, throwAtRead)); - depFieldCache.set(packageJsonPath, depFields); + var packageJson = readJSON(packageJsonPath, throwAtRead); + if (packageJson) { + var depFields = extractDepFields(packageJson); + depFieldCache.set(packageJsonPath, depFields); + } } return depFieldCache.get(packageJsonPath); @@ -72,10 +75,12 @@ function getDependencies(context, packageDir) { // use rule config to find package.json paths.forEach(function (dir) { var packageJsonPath = _path2['default'].join(dir, 'package.json'); - var _packageContent = getPackageDepFields(packageJsonPath, true); - Object.keys(packageContent).forEach(function (depsKey) { - Object.assign(packageContent[depsKey], _packageContent[depsKey]); - }); + var _packageContent = getPackageDepFields(packageJsonPath, paths.length === 1); + if (_packageContent) { + Object.keys(packageContent).forEach(function (depsKey) { + Object.assign(packageContent[depsKey], _packageContent[depsKey]); + }); + } }); } else { var packageJsonPath = (0, _pkgUp2['default'])({ @@ -298,4 +303,4 @@ module.exports = { 'Program:exit': function () {function ProgramExit() { depFieldCache.clear(); }return ProgramExit;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwiZGVwRmllbGRzIiwic2V0IiwiZ2V0IiwiZ2V0RGVwZW5kZW5jaWVzIiwiY29udGV4dCIsInBhY2thZ2VEaXIiLCJwYXRocyIsInBhY2thZ2VDb250ZW50IiwicGF0aCIsInJlc29sdmUiLCJtYXAiLCJkaXIiLCJmb3JFYWNoIiwiam9pbiIsIl9wYWNrYWdlQ29udGVudCIsImRlcHNLZXkiLCJhc3NpZ24iLCJjd2QiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJub3JtYWxpemUiLCJzb21lIiwiZSIsImNvZGUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibG9jIiwibGluZSIsImNvbHVtbiIsIm5hbWUiLCJTeW50YXhFcnJvciIsIm1pc3NpbmdFcnJvck1lc3NhZ2UiLCJwYWNrYWdlTmFtZSIsImRldkRlcEVycm9yTWVzc2FnZSIsIm9wdERlcEVycm9yTWVzc2FnZSIsImdldE1vZHVsZU9yaWdpbmFsTmFtZSIsInNwbGl0IiwiZmlyc3QiLCJzZWNvbmQiLCJzdGFydHNXaXRoIiwiZ2V0TW9kdWxlUmVhbE5hbWUiLCJyZXNvbHZlZCIsImNoZWNrRGVwZW5kZW5jeURlY2xhcmF0aW9uIiwiZGVwcyIsImRlY2xhcmF0aW9uU3RhdHVzIiwibmV3RGVjbGFyYXRpb25TdGF0dXMiLCJpc0luRGVwcyIsImlzSW5EZXZEZXBzIiwiaXNJbk9wdERlcHMiLCJpc0luUGVlckRlcHMiLCJpc0luQnVuZGxlZERlcHMiLCJwYWNrYWdlSGllcmFyY2h5IiwicGFja2FnZU5hbWVQYXJ0cyIsIm5hbWVQYXJ0IiwiaW5kZXgiLCJhbmNlc3RvciIsInNsaWNlIiwicHVzaCIsInJlZHVjZSIsInJlc3VsdCIsImFuY2VzdG9yTmFtZSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJyZXBvcnRJZk1pc3NpbmciLCJkZXBzT3B0aW9ucyIsIm5vZGUiLCJ2ZXJpZnlUeXBlSW1wb3J0cyIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5Iiwic3BlY2lmaWVyIiwidHlwZU9mSW1wb3J0IiwidmVyaWZ5SW50ZXJuYWxEZXBzIiwiaW1wb3J0UGFja2FnZU5hbWUiLCJhbGxvd0RldkRlcHMiLCJhbGxvd1BlZXJEZXBzIiwiYWxsb3dPcHREZXBzIiwiYWxsb3dCdW5kbGVkRGVwcyIsInJlYWxQYWNrYWdlTmFtZSIsInRlc3RDb25maWciLCJjb25maWciLCJmaWxlbmFtZSIsImMiLCJwcm9jZXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW5jbHVkZUludGVybmFsIiwiaW5jbHVkZVR5cGVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyIsImNsZWFyIl0sIm1hcHBpbmdzIjoicW9CQUFBLDRCO0FBQ0Esd0I7QUFDQSxrRDtBQUNBLHNDO0FB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QkFBa0JFLFdBQVdtQixRQUFRekcsbUJBQW5CLEVBQXdDd0YsUUFBeEMsTUFBc0QsS0FKdEQ7QUFLbEJULDRCQUFvQixDQUFDLENBQUMwQixRQUFRSixlQUxaO0FBTWxCN0IsMkJBQW1CLENBQUMsQ0FBQ2lDLFFBQVFILFlBTlgsRUFBcEI7OztBQVNBLGFBQU8sZ0NBQWMsVUFBQ0ksTUFBRCxFQUFTbkMsSUFBVCxFQUFrQjtBQUNyQ0Ysd0JBQWdCM0QsT0FBaEIsRUFBeUJ1QyxJQUF6QixFQUErQnFCLFdBQS9CLEVBQTRDQyxJQUE1QyxFQUFrRG1DLE9BQU9DLEtBQXpEO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQTNDYzs7QUE2Q2YsZ0JBN0NlLHNDQTZDRTtBQUNmckksb0JBQWNzSSxLQUFkO0FBQ0QsS0EvQ2Msd0JBQWpCIiwiZmlsZSI6Im5vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGtnVXAnO1xuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgaW1wb3J0VHlwZSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IHsgZ2V0RmlsZVBhY2thZ2VOYW1lIH0gZnJvbSAnLi4vY29yZS9wYWNrYWdlUGF0aCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVwRmllbGRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gaGFzS2V5cyhvYmogPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcnJheU9yS2V5cyhhcnJheU9yT2JqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5T3JPYmplY3QpID8gYXJyYXlPck9iamVjdCA6IE9iamVjdC5rZXlzKGFycmF5T3JPYmplY3QpO1xufVxuXG5mdW5jdGlvbiByZWFkSlNPTihqc29uUGF0aCwgdGhyb3dFeGNlcHRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoanNvblBhdGgsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFeGNlcHRpb24pIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlcEZpZWxkcyhwa2cpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgZGV2RGVwZW5kZW5jaWVzOiBwa2cuZGV2RGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBwa2cub3B0aW9uYWxEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgLy8gQnVuZGxlZERlcHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5LCBidXQgb2JqZWN0IG5vdGF0aW9uIGlzIGFsc28gc3VwcG9ydGVkIGJ5XG4gICAgLy8gYG5wbWAsIHNvIHdlIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgaWYgaXQgaXMgYW4gb2JqZWN0XG4gICAgYnVuZGxlZERlcGVuZGVuY2llczogYXJyYXlPcktleXMocGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBwa2cuYnVuZGxlZERlcGVuZGVuY2llcyB8fCBbXSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCkge1xuICBpZiAoIWRlcEZpZWxkQ2FjaGUuaGFzKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHJlYWRKU09OKHBhY2thZ2VKc29uUGF0aCwgdGhyb3dBdFJlYWQpKTtcbiAgICBkZXBGaWVsZENhY2hlLnNldChwYWNrYWdlSnNvblBhdGgsIGRlcEZpZWxkcyk7XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgdHJ1ZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYWNrYWdlQ29udGVudFtkZXBzS2V5XSwgX3BhY2thZ2VDb250ZW50W2RlcHNLZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwicGFja2FnZUpzb24iLCJkZXBGaWVsZHMiLCJzZXQiLCJnZXQiLCJnZXREZXBlbmRlbmNpZXMiLCJjb250ZXh0IiwicGFja2FnZURpciIsInBhdGhzIiwicGFja2FnZUNvbnRlbnQiLCJwYXRoIiwicmVzb2x2ZSIsIm1hcCIsImRpciIsImZvckVhY2giLCJqb2luIiwiX3BhY2thZ2VDb250ZW50IiwiZGVwc0tleSIsImFzc2lnbiIsImN3ZCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm5vcm1hbGl6ZSIsInNvbWUiLCJlIiwiY29kZSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJsb2MiLCJsaW5lIiwiY29sdW1uIiwibmFtZSIsIlN5bnRheEVycm9yIiwibWlzc2luZ0Vycm9yTWVzc2FnZSIsInBhY2thZ2VOYW1lIiwiZGV2RGVwRXJyb3JNZXNzYWdlIiwib3B0RGVwRXJyb3JNZXNzYWdlIiwiZ2V0TW9kdWxlT3JpZ2luYWxOYW1lIiwic3BsaXQiLCJmaXJzdCIsInNlY29uZCIsInN0YXJ0c1dpdGgiLCJnZXRNb2R1bGVSZWFsTmFtZSIsInJlc29sdmVkIiwiY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24iLCJkZXBzIiwiZGVjbGFyYXRpb25TdGF0dXMiLCJuZXdEZWNsYXJhdGlvblN0YXR1cyIsImlzSW5EZXBzIiwiaXNJbkRldkRlcHMiLCJpc0luT3B0RGVwcyIsImlzSW5QZWVyRGVwcyIsImlzSW5CdW5kbGVkRGVwcyIsInBhY2thZ2VIaWVyYXJjaHkiLCJwYWNrYWdlTmFtZVBhcnRzIiwibmFtZVBhcnQiLCJpbmRleCIsImFuY2VzdG9yIiwic2xpY2UiLCJwdXNoIiwicmVkdWNlIiwicmVzdWx0IiwiYW5jZXN0b3JOYW1lIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInJlcG9ydElmTWlzc2luZyIsImRlcHNPcHRpb25zIiwibm9kZSIsInZlcmlmeVR5cGVJbXBvcnRzIiwiaW1wb3J0S2luZCIsImV4cG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJzcGVjaWZpZXIiLCJ0eXBlT2ZJbXBvcnQiLCJ2ZXJpZnlJbnRlcm5hbERlcHMiLCJpbXBvcnRQYWNrYWdlTmFtZSIsImFsbG93RGV2RGVwcyIsImFsbG93UGVlckRlcHMiLCJhbGxvd09wdERlcHMiLCJhbGxvd0J1bmRsZWREZXBzIiwicmVhbFBhY2thZ2VOYW1lIiwidGVzdENvbmZpZyIsImNvbmZpZyIsImZpbGVuYW1lIiwiYyIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJpbmNsdWRlSW50ZXJuYWwiLCJpbmNsdWRlVHlwZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsIm9wdGlvbnMiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEI7QUFDQSx3QjtBQUNB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V0FBV21CLFFBQVE1RyxvQkFBbkIsRUFBeUMyRixRQUF6QyxNQUF1RCxLQUZuRDtBQUdsQk4sdUJBQWVJLFdBQVdtQixRQUFRM0csZ0JBQW5CLEVBQXFDMEYsUUFBckMsTUFBbUQsS0FIaEQ7QUFJbEJKLDBCQUFrQkUsV0FBV21CLFFBQVExRyxtQkFBbkIsRUFBd0N5RixRQUF4QyxNQUFzRCxLQUp0RDtBQUtsQlQsNEJBQW9CLENBQUMsQ0FBQzBCLFFBQVFKLGVBTFo7QUFNbEI3QiwyQkFBbUIsQ0FBQyxDQUFDaUMsUUFBUUgsWUFOWCxFQUFwQjs7O0FBU0EsYUFBTyxnQ0FBYyxVQUFDSSxNQUFELEVBQVNuQyxJQUFULEVBQWtCO0FBQ3JDRix3QkFBZ0IzRCxPQUFoQixFQUF5QnVDLElBQXpCLEVBQStCcUIsV0FBL0IsRUFBNENDLElBQTVDLEVBQWtEbUMsT0FBT0MsS0FBekQ7QUFDRCxPQUZNLEVBRUosRUFBRUMsVUFBVSxJQUFaLEVBRkksQ0FBUDtBQUdELEtBM0NjOztBQTZDZixnQkE3Q2Usc0NBNkNFO0FBQ2Z0SSxvQkFBY3VJLEtBQWQ7QUFDRCxLQS9DYyx3QkFBakIiLCJmaWxlIjoibm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgeyBnZXRGaWxlUGFja2FnZU5hbWUgfSBmcm9tICcuLi9jb3JlL3BhY2thZ2VQYXRoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZXBGaWVsZENhY2hlID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBoYXNLZXlzKG9iaiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGFycmF5T3JLZXlzKGFycmF5T3JPYmplY3QpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyYXlPck9iamVjdCkgPyBhcnJheU9yT2JqZWN0IDogT2JqZWN0LmtleXMoYXJyYXlPck9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRKU09OKGpzb25QYXRoLCB0aHJvd0V4Y2VwdGlvbikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhqc29uUGF0aCwgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVwRmllbGRzKHBrZykge1xuICByZXR1cm4ge1xuICAgIGRlcGVuZGVuY2llczogcGtnLmRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBkZXZEZXBlbmRlbmNpZXM6IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHBrZy5vcHRpb25hbERlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBwZWVyRGVwZW5kZW5jaWVzOiBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICAvLyBCdW5kbGVkRGVwcyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXksIGJ1dCBvYmplY3Qgbm90YXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQgYnlcbiAgICAvLyBgbnBtYCwgc28gd2UgY29udmVydCBpdCB0byBhbiBhcnJheSBpZiBpdCBpcyBhbiBvYmplY3RcbiAgICBidW5kbGVkRGVwZW5kZW5jaWVzOiBhcnJheU9yS2V5cyhwa2cuYnVuZGxlRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IFtdKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZURlcEZpZWxkcyhwYWNrYWdlSnNvblBhdGgsIHRocm93QXRSZWFkKSB7XG4gIGlmICghZGVwRmllbGRDYWNoZS5oYXMocGFja2FnZUpzb25QYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gcmVhZEpTT04ocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCk7XG4gICAgaWYgKHBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHBhY2thZ2VKc29uKTtcbiAgICAgIGRlcEZpZWxkQ2FjaGUuc2V0KHBhY2thZ2VKc29uUGF0aCwgZGVwRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgcGF0aHMubGVuZ3RoID09PSAxKTtcbiAgICAgICAgaWYgKF9wYWNrYWdlQ29udGVudCkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDb250ZW50W2RlcHNLZXldLCBfcGFja2FnZUNvbnRlbnRbZGVwc0tleV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ 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 0c15051e02..1f3fa1d0d8 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 @@ -4,7 +4,7 @@ -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -36,7 +36,7 @@ module.exports = { return { ImportDefaultSpecifier: function () {function ImportDefaultSpecifier(node) { var declaration = (0, _importDeclaration2['default'])(context); - var exportMap = _ExportMap2['default'].get(declaration.source.value, context); + var exportMap = _builder2['default'].get(declaration.source.value, context); if (exportMap == null) {return;} if (exportMap.errors.length) { @@ -93,4 +93,4 @@ module.exports = { * @copyright 2016 Desmond Brand. All rights reserved. * See LICENSE in root directory for full license. */ -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRzIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLHlDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxVQUFNQyxxQkFB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QUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgcHJvcGVydHkgb2YgZGVmYXVsdCBleHBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXInKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBmaWxlSW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBhbGxQcm9wZXJ0eUxvb2t1cHMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKSB7XG4gICAgICBjb25zdCBsb29rdXBzID0gYWxsUHJvcGVydHlMb29rdXBzLmdldChvYmplY3ROYW1lKSB8fCBbXTtcbiAgICAgIGxvb2t1cHMucHVzaCh7IG5vZGUsIHByb3BOYW1lIH0pO1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLnNldChvYmplY3ROYW1lLCBsb29rdXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gaW1wb3J0RGVjbGFyYXRpb24oY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1hcCA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChleHBvcnRNYXAgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZXhwb3J0TWFwLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBleHBvcnRNYXAucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlSW1wb3J0cy5zZXQobm9kZS5sb2NhbC5uYW1lLCB7XG4gICAgICAgICAgZXhwb3J0TWFwLFxuICAgICAgICAgIHNvdXJjZVBhdGg6IGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0Lm5hbWU7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lO1xuICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKTtcbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzRGVzdHJ1Y3R1cmUgPSBub2RlLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJ1xuICAgICAgICAgICYmIG5vZGUuaW5pdCAhPSBudWxsXG4gICAgICAgICAgJiYgbm9kZS5pbml0LnR5cGUgPT09ICdJZGVudGlmaWVyJztcbiAgICAgICAgaWYgKCFpc0Rlc3RydWN0dXJlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLmluaXQubmFtZTtcbiAgICAgICAgZm9yIChjb25zdCB7IGtleSB9IG9mIG5vZGUuaWQucHJvcGVydGllcykge1xuICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgeyBjb250aW51ZTsgfSAgLy8gdHJ1ZSBmb3IgcmVzdCBwcm9wZXJ0aWVzXG4gICAgICAgICAgc3RvcmVQcm9wZXJ0eUxvb2t1cChvYmplY3ROYW1lLCBrZXkubmFtZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGFsbFByb3BlcnR5TG9va3Vwcy5mb3JFYWNoKChsb29rdXBzLCBvYmplY3ROYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZUltcG9ydCA9IGZpbGVJbXBvcnRzLmdldChvYmplY3ROYW1lKTtcbiAgICAgICAgICBpZiAoZmlsZUltcG9ydCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCB7IHByb3BOYW1lLCBub2RlIH0gb2YgbG9va3Vwcykge1xuICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgaW1wb3J0IGNhbiBoYXZlIGEgXCJkZWZhdWx0XCIgcHJvcGVydHlcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2RlZmF1bHQnKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBpZiAoIWZpbGVJbXBvcnQuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMocHJvcE5hbWUpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYENhdXRpb246IFxcYCR7b2JqZWN0TmFtZX1cXGAgYWxzbyBoYXMgYSBuYW1lZCBleHBvcnQgXFxgJHtwcm9wTmFtZX1cXGAuIENoZWNrIGlmIHlvdSBtZWFudCB0byB3cml0ZSBcXGBpbXBvcnQgeyR7cHJvcE5hbWV9fSBmcm9tICcke2ZpbGVJbXBvcnQuc291cmNlUGF0aH0nXFxgIGluc3RlYWQuYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRNYXBCdWlsZGVyIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLCtDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxV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SCx5QkFBeUk0QixXQUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBwcm9wZXJ0eSBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbFByb3BlcnR5TG9va3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpIHtcbiAgICAgIGNvbnN0IGxvb2t1cHMgPSBhbGxQcm9wZXJ0eUxvb2t1cHMuZ2V0KG9iamVjdE5hbWUpIHx8IFtdO1xuICAgICAgbG9va3Vwcy5wdXNoKHsgbm9kZSwgcHJvcE5hbWUgfSk7XG4gICAgICBhbGxQcm9wZXJ0eUxvb2t1cHMuc2V0KG9iamVjdE5hbWUsIGxvb2t1cHMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChleHBvcnRNYXAuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGV4cG9ydE1hcC5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVJbXBvcnRzLnNldChub2RlLmxvY2FsLm5hbWUsIHtcbiAgICAgICAgICBleHBvcnRNYXAsXG4gICAgICAgICAgc291cmNlUGF0aDogZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBjb25zdCBvYmplY3ROYW1lID0gbm9kZS5vYmplY3QubmFtZTtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7XG4gICAgICAgIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpO1xuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNEZXN0cnVjdHVyZSA9IG5vZGUuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nXG4gICAgICAgICAgJiYgbm9kZS5pbml0ICE9IG51bGxcbiAgICAgICAgICAmJiBub2RlLmluaXQudHlwZSA9PT0gJ0lkZW50aWZpZXInO1xuICAgICAgICBpZiAoIWlzRGVzdHJ1Y3R1cmUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUuaW5pdC5uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IHsga2V5IH0gb2Ygbm9kZS5pZC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7IGNvbnRpbnVlOyB9ICAvLyB0cnVlIGZvciByZXN0IHByb3BlcnRpZXNcbiAgICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIGtleS5uYW1lLCBrZXkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgYWxsUHJvcGVydHlMb29rdXBzLmZvckVhY2goKGxvb2t1cHMsIG9iamVjdE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlSW1wb3J0ID0gZmlsZUltcG9ydHMuZ2V0KG9iamVjdE5hbWUpO1xuICAgICAgICAgIGlmIChmaWxlSW1wb3J0ID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvcE5hbWUsIG5vZGUgfSBvZiBsb29rdXBzKSB7XG4gICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBpbXBvcnQgY2FuIGhhdmUgYSBcImRlZmF1bHRcIiBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAnZGVmYXVsdCcpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmICghZmlsZUltcG9ydC5leHBvcnRNYXAubmFtZXNwYWNlLmhhcyhwcm9wTmFtZSkpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2F1dGlvbjogXFxgJHtvYmplY3ROYW1lfVxcYCBhbHNvIGhhcyBhIG5hbWVkIGV4cG9ydCBcXGAke3Byb3BOYW1lfVxcYC4gQ2hlY2sgaWYgeW91IG1lYW50IHRvIHdyaXRlIFxcYGltcG9ydCB7JHtwcm9wTmFtZX19IGZyb20gJyR7ZmlsZUltcG9ydC5zb3VyY2VQYXRofSdcXGAgaW5zdGVhZC5gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 63378a33a1..58bbb65799 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 @@ -1,4 +1,4 @@ -'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -20,7 +20,7 @@ module.exports = { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _ExportMap2['default'].get(declaration.source.value, context); + var imports = _builder2['default'].get(declaration.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -42,4 +42,4 @@ module.exports = { ExportDefaultSpecifier: checkDefault.bind(null, 'exported') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHVCQUFRQyxHQUFSLENBQVlILFlBQVlJLE1BQVosQ0FBbUJDLEtBQS9CLEVBQXNDVixPQUF0QyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgaWRlbnRpZmllciBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gY2hlY2tEZWZhdWx0KG5hbWVLZXksIGRlZmF1bHRTcGVjaWZpZXIpIHtcbiAgICAgIC8vICM1NjY6IGRlZmF1bHQgaXMgYSB2YWxpZCBzcGVjaWZpZXJcbiAgICAgIGlmIChkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUgPT09ICdkZWZhdWx0JykgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5oYXMoJ2RlZmF1bHQnKSAmJiBpbXBvcnRzLmhhcyhkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUpKSB7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBgVXNpbmcgZXhwb3J0ZWQgbmFtZSAnJHtkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWV9JyBhcyBpZGVudGlmaWVyIGZvciBkZWZhdWx0IGV4cG9ydC5gLFxuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnbG9jYWwnKSxcbiAgICAgIEV4cG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdleHBvcnRlZCcpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEsK0M7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHFCQUFpQkMsR0FBakIsQ0FBcUJILFlBQVlJLE1BQVosQ0FBbUJDLEtBQXhDLEVBQStDVixPQUEvQyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBpZGVudGlmaWVyIG9mIGRlZmF1bHQgZXhwb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQobmFtZUtleSwgZGVmYXVsdFNwZWNpZmllcikge1xuICAgICAgLy8gIzU2NjogZGVmYXVsdCBpcyBhIHZhbGlkIHNwZWNpZmllclxuICAgICAgaWYgKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSA9PT0gJ2RlZmF1bHQnKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmhhcygnZGVmYXVsdCcpICYmIGltcG9ydHMuaGFzKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSkpIHtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICBkZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgIGBVc2luZyBleHBvcnRlZCBuYW1lICcke2RlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZX0nIGFzIGlkZW50aWZpZXIgZm9yIGRlZmF1bHQgZXhwb3J0LmAsXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdsb2NhbCcpLFxuICAgICAgRXhwb3J0RGVmYXVsdFNwZWNpZmllcjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ2V4cG9ydGVkJyksXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 2b0c783ade..4bd4145245 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-namespace.js @@ -6,13 +6,78 @@ var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ /** - * @fileoverview Rule to disallow namespace import - * @author Radek Benkel - */module.exports = { meta: { type: 'suggestion', + * @param {MemberExpression} memberExpression + * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` + */ /** + * @fileoverview Rule to disallow namespace import + * @author Radek Benkel + */function getMemberPropertyName(memberExpression) {return memberExpression.property.type === 'Identifier' ? memberExpression.property.name : + memberExpression.property.value; +} + +/** + * @param {ScopeManager} scopeManager + * @param {ASTNode} node + * @return {Set} + */ +function getVariableNamesInScope(scopeManager, node) { + var currentNode = node; + var scope = scopeManager.acquire(currentNode); + while (scope == null) { + currentNode = currentNode.parent; + scope = scopeManager.acquire(currentNode, true); + } + return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); +} + +/** + * + * @param {*} names + * @param {*} nameConflicts + * @param {*} namespaceName + */ +function generateLocalNames(names, nameConflicts, namespaceName) { + var localNames = {}; + names.forEach(function (name) { + var localName = void 0; + if (!nameConflicts[name].has(name)) { + localName = name; + } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { + localName = String(namespaceName) + '_' + String(name); + } else { + for (var i = 1; i < Infinity; i++) { + if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { + localName = String(namespaceName) + '_' + String(name) + '_' + String(i); + break; + } + } + } + localNames[name] = localName; + }); + return localNames; +} + +/** + * @param {Identifier[]} namespaceIdentifiers + * @returns {boolean} `true` if the namespace variable is more than just a glorified constant + */ +function usesNamespaceAsObject(namespaceIdentifiers) { + return !namespaceIdentifiers.every(function (identifier) { + var parent = identifier.parent; + + // `namespace.x` or `namespace['x']` + return ( + parent && + parent.type === 'MemberExpression' && ( + parent.property.type === 'Identifier' || parent.property.type === 'Literal')); + + }); +} + +module.exports = { + meta: { + type: 'suggestion', docs: { category: 'Style guide', description: 'Forbid namespace (a.k.a. "wildcard" `*`) imports.', @@ -102,74 +167,4 @@ var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_doc }return ImportNamespaceSpecifier;}() }; }return create;}() }; - - -/** - * @param {Identifier[]} namespaceIdentifiers - * @returns {boolean} `true` if the namespace variable is more than just a glorified constant - */ -function usesNamespaceAsObject(namespaceIdentifiers) { - return !namespaceIdentifiers.every(function (identifier) { - var parent = identifier.parent; - - // `namespace.x` or `namespace['x']` - return ( - parent && - parent.type === 'MemberExpression' && ( - parent.property.type === 'Identifier' || parent.property.type === 'Literal')); - - }); -} - -/** - * @param {MemberExpression} memberExpression - * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` - */ -function getMemberPropertyName(memberExpression) { - return memberExpression.property.type === 'Identifier' ? - memberExpression.property.name : - memberExpression.property.value; -} - -/** - * @param {ScopeManager} scopeManager - * @param {ASTNode} node - * @return {Set} - */ -function getVariableNamesInScope(scopeManager, node) { - var currentNode = node; - var scope = scopeManager.acquire(currentNode); - while (scope == null) { - currentNode = currentNode.parent; - scope = scopeManager.acquire(currentNode, true); - } - return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); -} - -/** - * - * @param {*} names - * @param {*} nameConflicts - * @param {*} namespaceName - */ -function generateLocalNames(names, nameConflicts, namespaceName) { - var localNames = {}; - names.forEach(function (name) { - var localName = void 0; - if (!nameConflicts[name].has(name)) { - localName = name; - } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { - localName = String(namespaceName) + '_' + String(name); - } else { - for (var i = 1; i < Infinity; i++) { - if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { - localName = String(namespaceName) + '_' + String(name) + '_' + String(i); - break; - } - } - } - localNames[name] = localName; - }); - return localNames; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwicHJvcGVydGllcyIsImlnbm9yZSIsIml0ZW1zIiwidW5pcXVlSXRlbXMiLCJjcmVhdGUiLCJjb250ZXh0IiwiZmlyc3RPcHRpb24iLCJvcHRpb25zIiwiaWdub3JlR2xvYnMiLCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJub2RlIiwiZmluZCIsImdsb2IiLCJwYXJlbnQiLCJzb3VyY2UiLCJ2YWx1ZSIsIm1hdGNoQmFzZSIsInNjb3BlVmFyaWFibGVzIiwiZ2V0U2NvcGUiLCJ2YXJpYWJsZXMiLCJuYW1lc3BhY2VWYXJpYWJsZSIsInZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwibmFtZXNwYWNlSWRlbnRpZmllcnMiLCJtYXAiLCJyZWZlcmVuY2UiLCJpZGVudGlmaWVyIiwiY2FuRml4IiwibGVuZ3RoIiwidXNlc05hbWVzcGFjZUFzT2JqZWN0IiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwic2NvcGVNYW5hZ2VyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImZvckVhY2giLCJpbXBvcnROYW1lIiwiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibG9jYWxDb25mbGljdHMiLCJnZXRWYXJpYWJsZU5hbWVzSW5TY29wZSIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwiZ2VuZXJhdGVMb2NhbE5hbWVzIiwibmFtZSIsIm5hbWVkSW1wb3J0U3BlY2lmaWVycyIsInB1c2giLCJyZXBsYWNlVGV4dCIsImpvaW4iLCJldmVyeSIsInByb3BlcnR5IiwibWVtYmVyRXhwcmVzc2lvbiIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwiU2V0IiwiY29uY2F0IiwidXBwZXIiLCJuYW1lcyIsIm5hbWVDb25mbGljdHMiLCJuYW1lc3BhY2VOYW1lIiwibG9jYWxOYW1lcyIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBO0FBQ0E7QUFDQTtBQVZBOzs7R0FZQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNLEVBQ0pDLE1BQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsbURBRlQ7QUFHSkMsV0FBSywwQkFBUSxjQUFSLENBSEQsRUFGRjs7QUFPSkMsYUFBUyxNQVBMO0FBUUpDLFlBQVEsQ0FBQztBQUNQTixZQUFNLFFBREM7QUFFUE8sa0JBQVk7QUFDVkMsZ0JBQVE7QUFDTlIsZ0JBQU0sT0FEQTtBQUVOUyxpQkFBTztBQUNMVCxrQkFBTSxRQURELEVBRkQ7O0FBS05VLHVCQUFhLElBTFAsRUFERSxFQUZMLEVBQUQsQ0FSSixFQURTOzs7Ozs7QUF1QmZDLFFBdkJlLCtCQXVCUkMsT0F2QlEsRUF1QkM7QUFDZCxVQUFNQyxjQUFjRCxRQUFRRSxPQUFSLENBQWdCLENBQWhCLEtBQXNCLEVBQTFDO0FBQ0EsVUFBTUMsY0FBY0YsWUFBWUwsTUFBaEM7O0FBRUEsYUFBTztBQUNMUSxnQ0FESyxpREFDb0JDLElBRHBCLEVBQzBCO0FBQzdCLGdCQUFJRixlQUFlQSxZQUFZRyxJQUFaLENBQWlCLFVBQUNDLElBQUQsVUFBVSw0QkFBVUYsS0FBS0csTUFBTCxDQUFZQyxNQUFaLENBQW1CQyxLQUE3QixFQUFvQ0gsSUFBcEMsRUFBMEMsRUFBRUksV0FBVyxJQUFiLEVBQTFDLENBQVYsRUFBakIsQ0FBbkIsRUFBK0c7QUFDN0c7QUFDRDs7QUFFRCxnQkFBTUMsaUJBQWlCWixRQUFRYSxRQUFSLEdBQW1CQyxTQUExQztBQUNBLGdCQUFNQyxvQkFBb0JILGVBQWVOLElBQWYsQ0FBb0IsVUFBQ1UsUUFBRCxVQUFjQSxTQUFTQyxJQUFULENBQWMsQ0FBZCxFQUFpQlosSUFBakIsS0FBMEJBLElBQXhDLEVBQXBCLENBQTFCO0FBQ0EsZ0JBQU1hLHNCQUFzQkgsa0JBQWtCSSxVQUE5QztBQUNBLGdCQUFNQyx1QkFBdUJGLG9CQUFvQkcsR0FBcEIsQ0FBd0IsVUFBQ0MsU0FBRCxVQUFlQSxVQUFVQyxVQUF6QixFQUF4QixDQUE3QjtBQUNBLGdCQUFNQyxTQUFTSixxQkFBcUJLLE1BQXJCLEdBQThCLENBQTlCLElBQW1DLENBQUNDLHNCQUFzQk4sb0JBQXRCLENBQW5EOztBQUVBcEIsb0JBQVEyQixNQUFSLENBQWU7QUFDYnRCLHdCQURhO0FBRWJ1QixxREFGYTtBQUdiQyxtQkFBS0wsVUFBVyxVQUFDTSxLQUFELEVBQVc7QUFDekIsb0JBQU1DLGVBQWUvQixRQUFRZ0MsYUFBUixHQUF3QkQsWUFBN0M7QUFDQSxvQkFBTUUsUUFBUSxFQUFkOztBQUVBO0FBQ0E7QUFDQSxvQkFBTUMsc0JBQXNCLEVBQTVCO0FBQ0FkLHFDQUFxQmUsT0FBckIsQ0FBNkIsVUFBQ1osVUFBRCxFQUFnQjtBQUMzQyxzQkFBTWYsU0FBU2UsV0FBV2YsTUFBMUI7QUFDQSxzQkFBSUEsVUFBVUEsT0FBT3BCLElBQVAsS0FBZ0Isa0JBQTlCLEVBQWtEO0FBQ2hELHdCQUFNZ0QsYUFBYUMsc0JBQXNCN0IsTUFBdEIsQ0FBbkI7QUFDQSx3QkFBTThCLGlCQUFpQkMsd0JBQXdCUixZQUF4QixFQUFzQ3ZCLE1BQXRDLENBQXZCO0FBQ0Esd0JBQUksQ0FBQzBCLG9CQUFvQkUsVUFBcEIsQ0FBTCxFQUFzQztBQUNwQ0YsMENBQW9CRSxVQUFwQixJQUFrQ0UsY0FBbEM7QUFDRCxxQkFGRCxNQUVPO0FBQ0xBLHFDQUFlSCxPQUFmLENBQXVCLFVBQUNLLENBQUQsVUFBT04sb0JBQW9CRSxVQUFwQixFQUFnQ0ssR0FBaEMsQ0FBb0NELENBQXBDLENBQVAsRUFBdkI7QUFDRDtBQUNGO0FBQ0YsaUJBWEQ7O0FBYUE7QUFDQSxvQkFBTUUsY0FBY0MsT0FBT0MsSUFBUCxDQUFZVixtQkFBWixDQUFwQjtBQUNBLG9CQUFNVyxtQkFBbUJDO0FBQ3ZCSiwyQkFEdUI7QUFFdkJSLG1DQUZ1QjtBQUd2Qm5CLGtDQUFrQmdDLElBSEssQ0FBekI7OztBQU1BO0FBQ0Esb0JBQU1DLHdCQUF3Qk4sWUFBWXJCLEdBQVosQ0FBZ0IsVUFBQ2UsVUFBRCxVQUFnQkEsZUFBZVMsaUJBQWlCVCxVQUFqQixDQUFmO0FBQzFEQSw0QkFEMEQ7QUFFdkRBLDRCQUZ1RCxvQkFFdENTLGlCQUFpQlQsVUFBakIsQ0FGc0MsQ0FBaEIsRUFBaEIsQ0FBOUI7O0FBSUFILHNCQUFNZ0IsSUFBTixDQUFXbkIsTUFBTW9CLFdBQU4sQ0FBa0I3QyxJQUFsQixnQkFBNkIyQyxzQkFBc0JHLElBQXRCLENBQTJCLElBQTNCLENBQTdCLFNBQVg7O0FBRUE7QUFDQS9CLHFDQUFxQmUsT0FBckIsQ0FBNkIsVUFBQ1osVUFBRCxFQUFnQjtBQUMzQyxzQkFBTWYsU0FBU2UsV0FBV2YsTUFBMUI7QUFDQSxzQkFBSUEsVUFBVUEsT0FBT3BCLElBQVAsS0FBZ0Isa0JBQTlCLEVBQWtEO0FBQ2hELHdCQUFNZ0QsYUFBYUMsc0JBQXNCN0IsTUFBdEIsQ0FBbkI7QUFDQXlCLDBCQUFNZ0IsSUFBTixDQUFXbkIsTUFBTW9CLFdBQU4sQ0FBa0IxQyxNQUFsQixFQUEwQnFDLGlCQUFpQlQsVUFBakIsQ0FBMUIsQ0FBWDtBQUNEO0FBQ0YsaUJBTkQ7O0FBUUEsdUJBQU9ILEtBQVA7QUFDRCxlQWhEWSxFQUFmOztBQWtERCxXQTlESSxxQ0FBUDs7QUFnRUQsS0EzRmMsbUJBQWpCOzs7QUE4RkE7Ozs7QUFJQSxTQUFTUCxxQkFBVCxDQUErQk4sb0JBQS9CLEVBQXFEO0FBQ25ELFNBQU8sQ0FBQ0EscUJBQXFCZ0MsS0FBckIsQ0FBMkIsVUFBQzdCLFVBQUQsRUFBZ0I7QUFDakQsUUFBTWYsU0FBU2UsV0FBV2YsTUFBMUI7O0FBRUE7QUFDQTtBQUNFQTtBQUNHQSxhQUFPcEIsSUFBUCxLQUFnQixrQkFEbkI7QUFFSW9CLGFBQU82QyxRQUFQLENBQWdCakUsSUFBaEIsS0FBeUIsWUFBekIsSUFBeUNvQixPQUFPNkMsUUFBUCxDQUFnQmpFLElBQWhCLEtBQXlCLFNBRnRFLENBREY7O0FBS0QsR0FUTyxDQUFSO0FBVUQ7O0FBRUQ7Ozs7QUFJQSxTQUFTaUQscUJBQVQsQ0FBK0JpQixnQkFBL0IsRUFBaUQ7QUFDL0MsU0FBT0EsaUJBQWlCRCxRQUFqQixDQUEwQmpFLElBQTFCLEtBQW1DLFlBQW5DO0FBQ0hrRSxtQkFBaUJELFFBQWpCLENBQTBCTixJQUR2QjtBQUVITyxtQkFBaUJELFFBQWpCLENBQTBCM0MsS0FGOUI7QUFHRDs7QUFFRDs7Ozs7QUFLQSxTQUFTNkIsdUJBQVQsQ0FBaUNSLFlBQWpDLEVBQStDMUIsSUFBL0MsRUFBcUQ7QUFDbkQsTUFBSWtELGNBQWNsRCxJQUFsQjtBQUNBLE1BQUltRCxRQUFRekIsYUFBYTBCLE9BQWIsQ0FBcUJGLFdBQXJCLENBQVo7QUFDQSxTQUFPQyxTQUFTLElBQWhCLEVBQXNCO0FBQ3BCRCxrQkFBY0EsWUFBWS9DLE1BQTFCO0FBQ0FnRCxZQUFRekIsYUFBYTBCLE9BQWIsQ0FBcUJGLFdBQXJCLEVBQWtDLElBQWxDLENBQVI7QUFDRDtBQUNELFNBQU8sSUFBSUcsR0FBSixDQUFRRixNQUFNMUMsU0FBTixDQUFnQjZDLE1BQWhCLENBQXVCSCxNQUFNSSxLQUFOLENBQVk5QyxTQUFuQyxFQUE4Q08sR0FBOUMsQ0FBa0QsVUFBQ0wsUUFBRCxVQUFjQSxTQUFTK0IsSUFBdkIsRUFBbEQsQ0FBUixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7OztBQU1BLFNBQVNELGtCQUFULENBQTRCZSxLQUE1QixFQUFtQ0MsYUFBbkMsRUFBa0RDLGFBQWxELEVBQWlFO0FBQy9ELE1BQU1DLGFBQWEsRUFBbkI7QUFDQUgsUUFBTTFCLE9BQU4sQ0FBYyxVQUFDWSxJQUFELEVBQVU7QUFDdEIsUUFBSWtCLGtCQUFKO0FBQ0EsUUFBSSxDQUFDSCxjQUFjZixJQUFkLEVBQW9CbUIsR0FBcEIsQ0FBd0JuQixJQUF4QixDQUFMLEVBQW9DO0FBQ2xDa0Isa0JBQVlsQixJQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUksQ0FBQ2UsY0FBY2YsSUFBZCxFQUFvQm1CLEdBQXBCLFFBQTJCSCxhQUEzQixpQkFBNENoQixJQUE1QyxFQUFMLEVBQTBEO0FBQy9Ea0IseUJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEM7QUFDRCxLQUZNLE1BRUE7QUFDTCxXQUFLLElBQUlvQixJQUFJLENBQWIsRUFBZ0JBLElBQUlDLFFBQXBCLEVBQThCRCxHQUE5QixFQUFtQztBQUNqQyxZQUFJLENBQUNMLGNBQWNmLElBQWQsRUFBb0JtQixHQUFwQixRQUEyQkgsYUFBM0IsaUJBQTRDaEIsSUFBNUMsaUJBQW9Eb0IsQ0FBcEQsRUFBTCxFQUErRDtBQUM3REYsNkJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEMsaUJBQXdDb0IsQ0FBeEM7QUFDQTtBQUNEO0FBQ0Y7QUFDRjtBQUNESCxlQUFXakIsSUFBWCxJQUFtQmtCLFNBQW5CO0FBQ0QsR0FmRDtBQWdCQSxTQUFPRCxVQUFQO0FBQ0QiLCJmaWxlIjoibm8tbmFtZXNwYWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgbmFtZXNwYWNlIGltcG9ydFxuICogQGF1dGhvciBSYWRlayBCZW5rZWxcbiAqL1xuXG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBuYW1lc3BhY2UgKGEuay5hLiBcIndpbGRjYXJkXCIgYCpgKSBpbXBvcnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVzcGFjZScpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZ25vcmU6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGlnbm9yZUdsb2JzID0gZmlyc3RPcHRpb24uaWdub3JlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChpZ25vcmVHbG9icyAmJiBpZ25vcmVHbG9icy5maW5kKChnbG9iKSA9PiBtaW5pbWF0Y2gobm9kZS5wYXJlbnQuc291cmNlLnZhbHVlLCBnbG9iLCB7IG1hdGNoQmFzZTogdHJ1ZSB9KSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY29wZVZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVZhcmlhYmxlID0gc2NvcGVWYXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLmRlZnNbMF0ubm9kZSA9PT0gbm9kZSk7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVJlZmVyZW5jZXMgPSBuYW1lc3BhY2VWYXJpYWJsZS5yZWZlcmVuY2VzO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VJZGVudGlmaWVycyA9IG5hbWVzcGFjZVJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgY2FuRml4ID0gbmFtZXNwYWNlSWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJiAhdXNlc05hbWVzcGFjZUFzT2JqZWN0KG5hbWVzcGFjZUlkZW50aWZpZXJzKTtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBuYW1lc3BhY2UgaW1wb3J0LmAsXG4gICAgICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVNYW5hZ2VyID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuc2NvcGVNYW5hZ2VyO1xuICAgICAgICAgICAgY29uc3QgZml4ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gUGFzcyAxOiBDb2xsZWN0IHZhcmlhYmxlIG5hbWVzIHRoYXQgYXJlIGFscmVhZHkgaW4gc2NvcGUgZm9yIGVhY2ggcmVmZXJlbmNlIHdlIHdhbnRcbiAgICAgICAgICAgIC8vIHRvIHRyYW5zZm9ybSwgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIGNob29zZSBub24tY29uZmxpY3RpbmcgaW1wb3J0IG5hbWVzXG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lQ29uZmxpY3RzID0ge307XG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxDb25mbGljdHMgPSBnZXRWYXJpYWJsZU5hbWVzSW5TY29wZShzY29wZU1hbmFnZXIsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdID0gbG9jYWxDb25mbGljdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29uZmxpY3RzLmZvckVhY2goKGMpID0+IGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0uYWRkKGMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDaG9vc2UgbmV3IG5hbWVzIGZvciBlYWNoIGltcG9ydFxuICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZXMgPSBPYmplY3Qua2V5cyhpbXBvcnROYW1lQ29uZmxpY3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydExvY2FsTmFtZXMgPSBnZW5lcmF0ZUxvY2FsTmFtZXMoXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVzLFxuICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzLFxuICAgICAgICAgICAgICBuYW1lc3BhY2VWYXJpYWJsZS5uYW1lLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIHdpdGggYSBsaXN0IG9mIEltcG9ydFNwZWNpZmllcnNcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkSW1wb3J0U3BlY2lmaWVycyA9IGltcG9ydE5hbWVzLm1hcCgoaW1wb3J0TmFtZSkgPT4gaW1wb3J0TmFtZSA9PT0gaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXVxuICAgICAgICAgICAgICA/IGltcG9ydE5hbWVcbiAgICAgICAgICAgICAgOiBgJHtpbXBvcnROYW1lfSBhcyAke2ltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV19YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGB7ICR7bmFtZWRJbXBvcnRTcGVjaWZpZXJzLmpvaW4oJywgJyl9IH1gKSk7XG5cbiAgICAgICAgICAgIC8vIFBhc3MgMjogUmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lc3BhY2Ugd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCBpbXBvcnRzXG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChwYXJlbnQsIGltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibWVtYmVyRXhwcmVzc2lvbiIsInByb3BlcnR5IiwidHlwZSIsIm5hbWUiLCJ2YWx1ZSIsImdldFZhcmlhYmxlTmFtZXNJblNjb3BlIiwic2NvcGVNYW5hZ2VyIiwibm9kZSIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwicGFyZW50IiwiU2V0IiwidmFyaWFibGVzIiwiY29uY2F0IiwidXBwZXIiLCJtYXAiLCJ2YXJpYWJsZSIsImdlbmVyYXRlTG9jYWxOYW1lcyIsIm5hbWVzIiwibmFtZUNvbmZsaWN0cyIsIm5hbWVzcGFjZU5hbWUiLCJsb2NhbE5hbWVzIiwiZm9yRWFjaCIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSIsInVzZXNOYW1lc3BhY2VBc09iamVjdCIsIm5hbWVzcGFjZUlkZW50aWZpZXJzIiwiZXZlcnkiLCJpZGVudGlmaWVyIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaWdub3JlIiwiaXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNyZWF0ZSIsImNvbnRleHQiLCJmaXJzdE9wdGlvbiIsIm9wdGlvbnMiLCJpZ25vcmVHbG9icyIsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsImZpbmQiLCJnbG9iIiwic291cmNlIiwibWF0Y2hCYXNlIiwic2NvcGVWYXJpYWJsZXMiLCJnZXRTY29wZSIsIm5hbWVzcGFjZVZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNlIiwiY2FuRml4IiwibGVuZ3RoIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImltcG9ydE5hbWUiLCJsb2NhbENvbmZsaWN0cyIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwibmFtZWRJbXBvcnRTcGVjaWZpZXJzIiwicHVzaCIsInJlcGxhY2VUZXh0Iiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBOzs7MExBUkE7Ozs2TEFZQSxTQUFTQSxxQkFBVCxDQUErQkMsZ0JBQS9CLEVBQWlELENBQy9DLE9BQU9BLGlCQUFpQkMsUUFBakIsQ0FBMEJDLElBQTFCLEtBQW1DLFlBQW5DLEdBQ0hGLGlCQUFpQkMsUUFBakIsQ0FBMEJFLElBRHZCO0FBRUhILG1CQUFpQkMsUUFBakIsQ0FBMEJHLEtBRjlCO0FBR0Q7O0FBRUQ7Ozs7O0FBS0EsU0FBU0MsdUJBQVQsQ0FBaUNDLFlBQWpDLEVBQStDQyxJQUEvQyxFQUFxRDtBQUNuRCxNQUFJQyxjQUFjRCxJQUFsQjtBQUNBLE1BQUlFLFFBQVFILGFBQWFJLE9BQWIsQ0FBcUJGLFdBQXJCLENBQVo7QUFDQSxTQUFPQyxTQUFTLElBQWhCLEVBQXNCO0FBQ3BCRCxrQkFBY0EsWUFBWUcsTUFBMUI7QUFDQUYsWUFBUUgsYUFBYUksT0FBYixDQUFxQkYsV0FBckIsRUFBa0MsSUFBbEMsQ0FBUjtBQUNEO0FBQ0QsU0FBTyxJQUFJSSxHQUFKLENBQVFILE1BQU1JLFNBQU4sQ0FBZ0JDLE1BQWhCLENBQXVCTCxNQUFNTSxLQUFOLENBQVlGLFNBQW5DLEVBQThDRyxHQUE5QyxDQUFrRCxVQUFDQyxRQUFELFVBQWNBLFNBQVNkLElBQXZCLEVBQWxELENBQVIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7QUFNQSxTQUFTZSxrQkFBVCxDQUE0QkMsS0FBNUIsRUFBbUNDLGFBQW5DLEVBQWtEQyxhQUFsRCxFQUFpRTtBQUMvRCxNQUFNQyxhQUFhLEVBQW5CO0FBQ0FILFFBQU1JLE9BQU4sQ0FBYyxVQUFDcEIsSUFBRCxFQUFVO0FBQ3RCLFFB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RnVELG9CQUV0Q08saUJBQWlCUCxVQUFqQixDQUZzQyxDQUFoQixFQUFoQixDQUE5Qjs7QUFJQUYsc0JBQU1XLElBQU4sQ0FBV2IsTUFBTWMsV0FBTixDQUFrQjFFLElBQWxCLGdCQUE2QndFLHNCQUFzQkcsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBN0IsU0FBWDs7QUFFQTtBQUNBckQscUNBQXFCTixPQUFyQixDQUE2QixVQUFDUSxVQUFELEVBQWdCO0FBQzNDLHNCQUFNcEIsU0FBU29CLFdBQVdwQixNQUExQjtBQUNBLHNCQUFJQSxVQUFVQSxPQUFPVCxJQUFQLEtBQWdCLGtCQUE5QixFQUFrRDtBQUNoRCx3QkFBTXFFLGFBQWF4RSxzQkFBc0JZLE1BQXRCLENBQW5CO0FBQ0EwRCwwQkFBTVcsSUFBTixDQUFXYixNQUFNYyxXQUFOLENBQWtCdEUsTUFBbEIsRUFBMEJtRSxpQkFBaUJQLFVBQWpCLENBQTFCLENBQVg7QUFDRDtBQUNGLGlCQU5EOztBQVFBLHVCQUFPRixLQUFQO0FBQ0QsZUFoRFksRUFBZjs7QUFrREQsV0E5REkscUNBQVA7O0FBZ0VELEtBM0ZjLG1CQUFqQiIsImZpbGUiOiJuby1uYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBuYW1lc3BhY2UgaW1wb3J0XG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG5hbWVzcGFjZSAoYS5rLmEuIFwid2lsZGNhcmRcIiBgKmApIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZXNwYWNlJyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbe1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlnbm9yZToge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgZmlyc3RPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgaWdub3JlR2xvYnMgPSBmaXJzdE9wdGlvbi5pZ25vcmU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKGlnbm9yZUdsb2JzICYmIGlnbm9yZUdsb2JzLmZpbmQoKGdsb2IpID0+IG1pbmltYXRjaChub2RlLnBhcmVudC5zb3VyY2UudmFsdWUsIGdsb2IsIHsgbWF0Y2hCYXNlOiB0cnVlIH0pKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjb3BlVmFyaWFibGVzID0gY29udGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlVmFyaWFibGUgPSBzY29wZVZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4gdmFyaWFibGUuZGVmc1swXS5ub2RlID09PSBub2RlKTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlUmVmZXJlbmNlcyA9IG5hbWVzcGFjZVZhcmlhYmxlLnJlZmVyZW5jZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZUlkZW50aWZpZXJzID0gbmFtZXNwYWNlUmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBjYW5GaXggPSBuYW1lc3BhY2VJZGVudGlmaWVycy5sZW5ndGggPiAwICYmICF1c2VzTmFtZXNwYWNlQXNPYmplY3QobmFtZXNwYWNlSWRlbnRpZmllcnMpO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIG5hbWVzcGFjZSBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY29wZU1hbmFnZXIgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5zY29wZU1hbmFnZXI7XG4gICAgICAgICAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgICAgICAgICAvLyBQYXNzIDE6IENvbGxlY3QgdmFyaWFibGUgbmFtZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiBzY29wZSBmb3IgZWFjaCByZWZlcmVuY2Ugd2Ugd2FudFxuICAgICAgICAgICAgLy8gdG8gdHJhbnNmb3JtLCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRoYXQgd2UgY2hvb3NlIG5vbi1jb25mbGljdGluZyBpbXBvcnQgbmFtZXNcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWVDb25mbGljdHMgPSB7fTtcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbENvbmZsaWN0cyA9IGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgcGFyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0gPSBsb2NhbENvbmZsaWN0cztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbG9jYWxDb25mbGljdHMuZm9yRWFjaCgoYykgPT4gaW1wb3J0TmFtZUNvbmZsaWN0c1tpbXBvcnROYW1lXS5hZGQoYykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENob29zZSBuZXcgbmFtZXMgZm9yIGVhY2ggaW1wb3J0XG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lcyA9IE9iamVjdC5rZXlzKGltcG9ydE5hbWVDb25mbGljdHMpO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0TG9jYWxOYW1lcyA9IGdlbmVyYXRlTG9jYWxOYW1lcyhcbiAgICAgICAgICAgICAgaW1wb3J0TmFtZXMsXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHMsXG4gICAgICAgICAgICAgIG5hbWVzcGFjZVZhcmlhYmxlLm5hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgd2l0aCBhIGxpc3Qgb2YgSW1wb3J0U3BlY2lmaWVyc1xuICAgICAgICAgICAgY29uc3QgbmFtZWRJbXBvcnRTcGVjaWZpZXJzID0gaW1wb3J0TmFtZXMubWFwKChpbXBvcnROYW1lKSA9PiBpbXBvcnROYW1lID09PSBpbXBvcnRMb2NhbE5hbWVzW2ltcG9ydE5hbWVdXG4gICAgICAgICAgICAgID8gaW1wb3J0TmFtZVxuICAgICAgICAgICAgICA6IGAke2ltcG9ydE5hbWV9IGFzICR7aW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYHsgJHtuYW1lZEltcG9ydFNwZWNpZmllcnMuam9pbignLCAnKX0gfWApKTtcblxuICAgICAgICAgICAgLy8gUGFzcyAyOiBSZXBsYWNlIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVzcGFjZSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGltcG9ydHNcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KHBhcmVudCwgaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 e0c9a5c894..b75cff0d02 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 @@ -12,6 +12,15 @@ var containsPath = function containsPath(filepath, target) { return relative === '' || !relative.startsWith('..'); }; +function isMatchingTargetPath(filename, targetPath) { + if ((0, _isGlob2['default'])(targetPath)) { + var mm = new _minimatch.Minimatch(targetPath); + return mm.match(filename); + } + + return containsPath(filename, targetPath); +} + module.exports = { meta: { type: 'problem', @@ -83,15 +92,6 @@ module.exports = { some(function (targetPath) {return isMatchingTargetPath(currentFilename, targetPath);});}); - function isMatchingTargetPath(filename, targetPath) { - if ((0, _isGlob2['default'])(targetPath)) { - var mm = new _minimatch.Minimatch(targetPath); - return mm.match(filename); - } - - return containsPath(filename, targetPath); - } - function isValidExceptionPath(absoluteFromPath, absoluteExceptionPath) { var relativeExceptionPath = _path2['default'].relative(absoluteFromPath, absoluteExceptionPath); @@ -242,4 +242,4 @@ module.exports = { checkForRestrictedImportPath(source.value, source); }, { commonjs: true }); }return noRestrictedPaths;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJ0YXJnZXRQYXRoIiwiaXNNYXRjaGluZ1RhcmdldFBhdGgiLCJmaWxlbmFtZSIsIm1tIiwiTWluaW1hdGNoIiwibWF0Y2giLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFB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RztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNzRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQXpLRCxPQUFpQnBFLGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSB3aGljaCBmaWxlcyBjYW4gYmUgaW1wb3J0ZWQgaW4gYSBnaXZlbiBmb2xkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB6b25lczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleGNlcHQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQYXRoOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIG5vUmVzdHJpY3RlZFBhdGhzKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQYXRocyA9IG9wdGlvbnMuem9uZXMgfHwgW107XG4gICAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2VQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgY3VycmVudEZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgbWF0Y2hpbmdab25lcyA9IHJlc3RyaWN0ZWRQYXRocy5maWx0ZXIoXG4gICAgICAoem9uZSkgPT4gW10uY29uY2F0KHpvbmUudGFyZ2V0KVxuICAgICAgICAubWFwKCh0YXJnZXQpID0+IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgdGFyZ2V0KSlcbiAgICAgICAgLnNvbWUoKHRhcmdldFBhdGgpID0+IGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGN1cnJlbnRGaWxlbmFtZSwgdGFyZ2V0UGF0aCkpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBpc01hdGNoaW5nVGFyZ2V0UGF0aChmaWxlbmFtZSwgdGFyZ2V0UGF0aCkge1xuICAgICAgaWYgKGlzR2xvYih0YXJnZXRQYXRoKSkge1xuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgICAgIHJldHVybiBtbS5tYXRjaChmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFeGNlcHRpb25QYXRoKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVFeGNlcHRpb25QYXRoID0gcGF0aC5yZWxhdGl2ZShhYnNvbHV0ZUZyb21QYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpO1xuXG4gICAgICByZXR1cm4gaW1wb3J0VHlwZShyZWxhdGl2ZUV4Y2VwdGlvblBhdGgsIGNvbnRleHQpICE9PSAncGFyZW50JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gYXJlR2xvYlBhdHRlcm5zLnNvbWUoKGlzR2xvYikgPT4gaXNHbG9iKSAmJiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiAhaXNHbG9iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aChub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb25maWd1cmVkIGBmcm9tYCBwYXRoIGZvciB0aGF0IHpvbmUuJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25NaXhlZEdsb2JBbmROb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBgZnJvbWAgbXVzdCBjb250YWluIGVpdGhlciBvbmx5IGdsb2IgcGF0dGVybnMgb3Igbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYihub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGdsb2IgcGF0dGVybnMgd2hlbiBgZnJvbWAgY29udGFpbnMgZ2xvYiBwYXR0ZXJucycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zOiBmYWxzZSxcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbjogcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goYWJzb2x1dGVGcm9tKTtcbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gem9uZUV4Y2VwdC5ldmVyeShpc0dsb2IpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGV4Y2VwdGlvbnNNbSA9IHpvbmVFeGNlcHQubWFwKChleGNlcHQpID0+IG5ldyBNaW5pbWF0Y2goZXhjZXB0KSk7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGV4Y2VwdGlvbnNNbS5zb21lKChtbSkgPT4gbW0ubWF0Y2goYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcG9ydEludmFsaWRFeGNlcHRpb24gPSByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZCxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zLFxuICAgICAgICBpc1BhdGhFeGNlcHRpb24sXG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBpc1BhdGhSZXN0cmljdGVkID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVGcm9tKTtcblxuICAgICAgY29uc3QgYWJzb2x1dGVFeGNlcHRpb25QYXRocyA9IHpvbmVFeGNlcHRcbiAgICAgICAgLm1hcCgoZXhjZXB0aW9uUGF0aCkgPT4gcGF0aC5yZXNvbHZlKGFic29sdXRlRnJvbSwgZXhjZXB0aW9uUGF0aCkpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gYWJzb2x1dGVFeGNlcHRpb25QYXRoc1xuICAgICAgICAuZXZlcnkoKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpKTtcblxuICAgICAgaWYgKGhhc1ZhbGlkRXhjZXB0aW9ucykge1xuICAgICAgICBpc1BhdGhFeGNlcHRpb24gPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzLnNvbWUoXG4gICAgICAgICAgKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9ycywgbm9kZSkge1xuICAgICAgdmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5yZXBvcnRJbnZhbGlkRXhjZXB0aW9uKG5vZGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSh2YWxpZGF0b3JzLCBub2RlLCBpbXBvcnRQYXRoLCBjdXN0b21NZXNzYWdlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBwYXRoIFwie3tpbXBvcnRQYXRofX1cIiBpbXBvcnRlZCBpbiByZXN0cmljdGVkIHpvbmUuJHtjdXN0b21NZXNzYWdlID8gYCAke2N1c3RvbU1lc3NhZ2V9YCA6ICcnfWAsXG4gICAgICAgICAgZGF0YTogeyBpbXBvcnRQYXRoIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhdGhWYWxpZGF0b3JzID0gKHpvbmVGcm9tLCB6b25lRXhjZXB0ID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGFsbFpvbmVGcm9tID0gW10uY29uY2F0KHpvbmVGcm9tKTtcbiAgICAgIGNvbnN0IGFyZUdsb2JQYXR0ZXJucyA9IGFsbFpvbmVGcm9tLm1hcChpc0dsb2IpO1xuXG4gICAgICBpZiAoYXJlQm90aEdsb2JQYXR0ZXJuQW5kQWJzb2x1dGVQYXRoKGFyZUdsb2JQYXR0ZXJucykpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCldO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0dsb2JQYXR0ZXJuID0gYXJlR2xvYlBhdHRlcm5zLmV2ZXJ5KChpc0dsb2IpID0+IGlzR2xvYik7XG5cbiAgICAgIHJldHVybiBhbGxab25lRnJvbS5tYXAoKHNpbmdsZVpvbmVGcm9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic29sdXRlRnJvbSA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgc2luZ2xlWm9uZUZyb20pO1xuXG4gICAgICAgIGlmIChpc0dsb2JQYXR0ZXJuKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoaW1wb3J0UGF0aCwgbm9kZSkge1xuICAgICAgY29uc3QgYWJzb2x1dGVJbXBvcnRQYXRoID0gcmVzb2x2ZShpbXBvcnRQYXRoLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFhYnNvbHV0ZUltcG9ydFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGluZ1pvbmVzLmZvckVhY2goKHpvbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yc1tpbmRleF0pIHtcbiAgICAgICAgICB2YWxpZGF0b3JzW2luZGV4XSA9IG1ha2VQYXRoVmFsaWRhdG9ycyh6b25lLmZyb20sIHpvbmUuZXhjZXB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aCA9IHZhbGlkYXRvcnNbaW5kZXhdLmZpbHRlcigodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IuaXNQYXRoUmVzdHJpY3RlZChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zID0gYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoLmZpbHRlcigodmFsaWRhdG9yKSA9PiAhdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyk7XG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb25zKHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMsIG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGhcbiAgICAgICAgICAuZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5oYXNWYWxpZEV4Y2VwdGlvbnMgJiYgIXZhbGlkYXRvci5pc1BhdGhFeGNlcHRpb24oYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICAgIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMsIG5vZGUsIGltcG9ydFBhdGgsIHpvbmUubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlKSA9PiB7XG4gICAgICBjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoKHNvdXJjZS52YWx1ZSwgc291cmNlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsImlzTWF0Y2hpbmdUYXJnZXRQYXRoIiwiZmlsZW5hbWUiLCJ0YXJnZXRQYXRoIiwibW0iLCJNaW5pbWF0Y2giLCJtYXRjaCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFB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QUEzRztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNnRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQWhLRCxPQUFpQjlELGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGZpbGVuYW1lLCB0YXJnZXRQYXRoKSB7XG4gIGlmIChpc0dsb2IodGFyZ2V0UGF0aCkpIHtcbiAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgcmV0dXJuIG1tLm1hdGNoKGZpbGVuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2Ugd2hpY2ggZmlsZXMgY2FuIGJlIGltcG9ydGVkIGluIGEgZ2l2ZW4gZm9sZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXJlc3RyaWN0ZWQtcGF0aHMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgem9uZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhjZXB0OiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYXNlUGF0aDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBub1Jlc3RyaWN0ZWRQYXRocyhjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCByZXN0cmljdGVkUGF0aHMgPSBvcHRpb25zLnpvbmVzIHx8IFtdO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGNvbnN0IG1hdGNoaW5nWm9uZXMgPSByZXN0cmljdGVkUGF0aHMuZmlsdGVyKFxuICAgICAgKHpvbmUpID0+IFtdLmNvbmNhdCh6b25lLnRhcmdldClcbiAgICAgICAgLm1hcCgodGFyZ2V0KSA9PiBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHRhcmdldCkpXG4gICAgICAgIC5zb21lKCh0YXJnZXRQYXRoKSA9PiBpc01hdGNoaW5nVGFyZ2V0UGF0aChjdXJyZW50RmlsZW5hbWUsIHRhcmdldFBhdGgpKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tUGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZUV4Y2VwdGlvblBhdGggPSBwYXRoLnJlbGF0aXZlKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCk7XG5cbiAgICAgIHJldHVybiBpbXBvcnRUeXBlKHJlbGF0aXZlRXhjZXB0aW9uUGF0aCwgY29udGV4dCkgIT09ICdwYXJlbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFyZUJvdGhHbG9iUGF0dGVybkFuZEFic29sdXRlUGF0aChhcmVHbG9iUGF0dGVybnMpIHtcbiAgICAgIHJldHVybiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiBpc0dsb2IpICYmIGFyZUdsb2JQYXR0ZXJucy5zb21lKChpc0dsb2IpID0+ICFpc0dsb2IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbmZpZ3VyZWQgYGZyb21gIHBhdGggZm9yIHRoYXQgem9uZS4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2Iobm9kZSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlLFxuICAgICAgICBtZXNzYWdlOiAnUmVzdHJpY3RlZCBwYXRoIGBmcm9tYCBtdXN0IGNvbnRhaW4gZWl0aGVyIG9ubHkgZ2xvYiBwYXR0ZXJucyBvciBub25lJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZ2xvYiBwYXR0ZXJucyB3aGVuIGBmcm9tYCBjb250YWlucyBnbG9iIHBhdHRlcm5zJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnM6IGZhbHNlLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uOiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChhYnNvbHV0ZUZyb20pO1xuICAgICAgY29uc3QgaXNQYXRoUmVzdHJpY3RlZCA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IG1tLm1hdGNoKGFic29sdXRlSW1wb3J0UGF0aCk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSB6b25lRXhjZXB0LmV2ZXJ5KGlzR2xvYik7XG5cbiAgICAgIGlmIChoYXNWYWxpZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXhjZXB0aW9uc01tID0gem9uZUV4Y2VwdC5tYXAoKGV4Y2VwdCkgPT4gbmV3IE1pbmltYXRjaChleGNlcHQpKTtcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gZXhjZXB0aW9uc01tLnNvbWUoKG1tKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUZyb20pO1xuXG4gICAgICBjb25zdCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzID0gem9uZUV4Y2VwdFxuICAgICAgICAubWFwKChleGNlcHRpb25QYXRoKSA9PiBwYXRoLnJlc29sdmUoYWJzb2x1dGVGcm9tLCBleGNlcHRpb25QYXRoKSk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzXG4gICAgICAgIC5ldmVyeSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb20sIGFic29sdXRlRXhjZXB0aW9uUGF0aCkpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGFic29sdXRlRXhjZXB0aW9uUGF0aHMuc29tZShcbiAgICAgICAgICAoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBvcnRJbnZhbGlkRXhjZXB0aW9uID0gcmVwb3J0SW52YWxpZEV4Y2VwdGlvblBhdGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUGF0aFJlc3RyaWN0ZWQsXG4gICAgICAgIGhhc1ZhbGlkRXhjZXB0aW9ucyxcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9ucyh2YWxpZGF0b3JzLCBub2RlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLnJlcG9ydEludmFsaWRFeGNlcHRpb24obm9kZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKHZhbGlkYXRvcnMsIG5vZGUsIGltcG9ydFBhdGgsIGN1c3RvbU1lc3NhZ2UpIHtcbiAgICAgIHZhbGlkYXRvcnMuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHBhdGggXCJ7e2ltcG9ydFBhdGh9fVwiIGltcG9ydGVkIGluIHJlc3RyaWN0ZWQgem9uZS4ke2N1c3RvbU1lc3NhZ2UgPyBgICR7Y3VzdG9tTWVzc2FnZX1gIDogJyd9YCxcbiAgICAgICAgICBkYXRhOiB7IGltcG9ydFBhdGggfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlUGF0aFZhbGlkYXRvcnMgPSAoem9uZUZyb20sIHpvbmVFeGNlcHQgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsWm9uZUZyb20gPSBbXS5jb25jYXQoem9uZUZyb20pO1xuICAgICAgY29uc3QgYXJlR2xvYlBhdHRlcm5zID0gYWxsWm9uZUZyb20ubWFwKGlzR2xvYik7XG5cbiAgICAgIGlmIChhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSkge1xuICAgICAgICByZXR1cm4gW2NvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzR2xvYlBhdHRlcm4gPSBhcmVHbG9iUGF0dGVybnMuZXZlcnkoKGlzR2xvYikgPT4gaXNHbG9iKTtcblxuICAgICAgcmV0dXJuIGFsbFpvbmVGcm9tLm1hcCgoc2luZ2xlWm9uZUZyb20pID0+IHtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVGcm9tID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCBzaW5nbGVab25lRnJvbSk7XG5cbiAgICAgICAgaWYgKGlzR2xvYlBhdHRlcm4pIHtcbiAgICAgICAgICByZXR1cm4gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wdXRlQWJzb2x1dGVQYXRoVmFsaWRhdG9yKGFic29sdXRlRnJvbSwgem9uZUV4Y2VwdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tGb3JSZXN0cmljdGVkSW1wb3J0UGF0aChpbXBvcnRQYXRoLCBub2RlKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZUltcG9ydFBhdGggPSByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWFic29sdXRlSW1wb3J0UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoaW5nWm9uZXMuZm9yRWFjaCgoem9uZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JzW2luZGV4XSkge1xuICAgICAgICAgIHZhbGlkYXRvcnNbaW5kZXhdID0gbWFrZVBhdGhWYWxpZGF0b3JzKHpvbmUuZnJvbSwgem9uZS5leGNlcHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoID0gdmFsaWRhdG9yc1tpbmRleF0uZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5pc1BhdGhSZXN0cmljdGVkKGFic29sdXRlSW1wb3J0UGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGguZmlsdGVyKCh2YWxpZGF0b3IpID0+ICF2YWxpZGF0b3IuaGFzVmFsaWRFeGNlcHRpb25zKTtcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9yc1dpdGhJbnZhbGlkRXhjZXB0aW9ucywgbm9kZSk7XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyA9IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aFxuICAgICAgICAgIC5maWx0ZXIoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyAmJiAhdmFsaWRhdG9yLmlzUGF0aEV4Y2VwdGlvbihhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgICAgcmVwb3J0SW1wb3J0c0luUmVzdHJpY3RlZFpvbmUoYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucywgbm9kZSwgaW1wb3J0UGF0aCwgem9uZS5tZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IHtcbiAgICAgIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoc291cmNlLnZhbHVlLCBzb3VyY2UpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19 \ 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 f6f6348b16..4347b2c4a0 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 @@ -13,54 +13,171 @@ var _object = require('object.values');var _object2 = _interopRequireDefault(_ob var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype); -var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); +var _fsWalk = require('../core/fsWalk'); +var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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 - */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.concat((0, _arrayPrototype2['default'])(src, function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); - - return _originalListFilesToProcess(patterns); - }; + */ /** + * Attempt to load the internal `FileEnumerator` class, which has existed in a couple + * of different places, depending on the version of `eslint`. Try requiring it from both + * locations. + * @returns Returns the `FileEnumerator` class if its requirable, otherwise `undefined`. + */function requireFileEnumerator() {var FileEnumerator = void 0; + + // Try getting it from the eslint private / deprecated api + try {var _require = + require('eslint/use-at-your-own-risk');FileEnumerator = _require.FileEnumerator; + } catch (e) { + // Absorb this if it's MODULE_NOT_FOUND + if (e.code !== 'MODULE_NOT_FOUND') { + throw e; + } + + // If not there, then try getting it from eslint/lib/cli-engine/file-enumerator (moved there in v6) + try {var _require2 = + require('eslint/lib/cli-engine/file-enumerator');FileEnumerator = _require2.FileEnumerator; + } catch (e) { + // Absorb this if it's MODULE_NOT_FOUND + if (e.code !== 'MODULE_NOT_FOUND') { + throw e; + } } } + return FileEnumerator; } -if (FileEnumerator) { - listFilesToProcess = function listFilesToProcess(src, extensions) { - var e = new FileEnumerator({ +/** + * + * @param FileEnumerator the `FileEnumerator` class from `eslint`'s internal api + * @param {string} src path to the src root + * @param {string[]} extensions list of supported extensions + * @returns {{ filename: string, ignored: boolean }[]} list of files to operate on + */ +function listFilesUsingFileEnumerator(FileEnumerator, src, extensions) { + var e = new FileEnumerator({ + extensions: extensions }); + + + return Array.from( + e.iterateFiles(src), + function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { filename: filePath, ignored: ignored };}); + +} + +/** + * Attempt to require old versions of the file enumeration capability from v6 `eslint` and earlier, and use + * those functions to provide the list of files to operate on + * @param {string} src path to the src root + * @param {string[]} extensions list of supported extensions + * @returns {string[]} list of files to operate on + */ +function listFilesWithLegacyFunctions(src, extensions) { + 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 + + return originalListFilesToProcess(src, { extensions: extensions }); + } catch (e) { + // Absorb this if it's MODULE_NOT_FOUND + if (e.code !== 'MODULE_NOT_FOUND') { + throw e; + } - return Array.from(e.iterateFiles(src), function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { - ignored: ignored, - filename: filePath };}); + // Last place to try (pre v5.3) + var _require4 = - }; + require('eslint/lib/util/glob-util'),_originalListFilesToProcess = _require4.listFilesToProcess; + var patterns = src.concat( + (0, _arrayPrototype2['default'])( + src, + function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); + + + + return _originalListFilesToProcess(patterns); + } +} + +/** + * Given a source root and list of supported extensions, use fsWalk and the + * new `eslint` `context.session` api to build the list of files we want to operate on + * @param {string[]} srcPaths array of source paths (for flat config this should just be a singular root (e.g. cwd)) + * @param {string[]} extensions list of supported extensions + * @param {{ isDirectoryIgnored: (path: string) => boolean, isFileIgnored: (path: string) => boolean }} session eslint context session object + * @returns {string[]} list of files to operate on + */ +function listFilesWithModernApi(srcPaths, extensions, session) { + /** @type {string[]} */ + var files = [];var _loop = function _loop( + + i) { + var src = srcPaths[i]; + // Use walkSync along with the new session api to gather the list of files + var entries = (0, _fsWalk.walkSync)(src, { + deepFilter: function () {function deepFilter(entry) { + var fullEntryPath = (0, _path.resolve)(src, entry.path); + + // Include the directory if it's not marked as ignore by eslint + return !session.isDirectoryIgnored(fullEntryPath); + }return deepFilter;}(), + entryFilter: function () {function entryFilter(entry) { + var fullEntryPath = (0, _path.resolve)(src, entry.path); + + // Include the file if it's not marked as ignore by eslint and its extension is included in our list + return ( + !session.isFileIgnored(fullEntryPath) && + extensions.find(function (extension) {return entry.path.endsWith(extension);})); + + }return entryFilter;}() }); + + + // Filter out directories and map entries to their paths + files.push.apply(files, _toConsumableArray( + entries. + filter(function (entry) {return !entry.dirent.isDirectory();}). + map(function (entry) {return entry.path;})));};for (var i = 0; i < srcPaths.length; i++) {_loop(i); + + } + return files; +} + +/** + * Given a src pattern and list of supported extensions, return a list of files to process + * with this rule. + * @param {string} src - file, directory, or glob pattern of files to act on + * @param {string[]} extensions - list of supported file extensions + * @param {import('eslint').Rule.RuleContext} context - the eslint context object + * @returns {string[] | { filename: string, ignored: boolean }[]} the list of files that this rule will evaluate. + */ +function listFilesToProcess(src, extensions, context) { + // If the context object has the new session functions, then prefer those + // Otherwise, fallback to using the deprecated `FileEnumerator` for legacy support. + // https://github.com/eslint/eslint/issues/18087 + if ( + context.session && + context.session.isFileIgnored && + context.session.isDirectoryIgnored) + { + return listFilesWithModernApi(src, extensions, context.session); + } + + // Fallback to og FileEnumerator + var FileEnumerator = requireFileEnumerator(); + + // If we got the FileEnumerator, then let's go with that + if (FileEnumerator) { + return listFilesUsingFileEnumerator(FileEnumerator, src, extensions); + } + // If not, then we can try even older versions of this capability (listFilesToProcess) + return listFilesWithLegacyFunctions(src, extensions); } var EXPORT_DEFAULT_DECLARATION = 'ExportDefaultDeclaration'; @@ -82,28 +199,30 @@ var DEFAULT = 'default'; function forEachDeclarationIdentifier(declaration, cb) { if (declaration) { + var isTypeDeclaration = declaration.type === TS_INTERFACE_DECLARATION || + declaration.type === TS_TYPE_ALIAS_DECLARATION || + declaration.type === TS_ENUM_DECLARATION; + if ( declaration.type === FUNCTION_DECLARATION || declaration.type === CLASS_DECLARATION || - declaration.type === TS_INTERFACE_DECLARATION || - declaration.type === TS_TYPE_ALIAS_DECLARATION || - declaration.type === TS_ENUM_DECLARATION) + isTypeDeclaration) { - cb(declaration.id.name); + cb(declaration.id.name, isTypeDeclaration); } else if (declaration.type === VARIABLE_DECLARATION) { declaration.declarations.forEach(function (_ref2) {var id = _ref2.id; if (id.type === OBJECT_PATTERN) { - (0, _ExportMap.recursivePatternCapture)(id, function (pattern) { + (0, _patternCapture2['default'])(id, function (pattern) { if (pattern.type === IDENTIFIER) { - cb(pattern.name); + cb(pattern.name, false); } }); } else if (id.type === ARRAY_PATTERN) { id.elements.forEach(function (_ref3) {var name = _ref3.name; - cb(name); + cb(name, false); }); } else { - cb(id.name); + cb(id.name, false); } }); } @@ -160,6 +279,7 @@ var exportList = new Map(); var visitorKeyMap = new Map(); +/** @type {Set} */ var ignoredFiles = new Set(); var filesOutsideSrc = new Set(); @@ -169,32 +289,40 @@ var isNodeModule = function isNodeModule(path) {return (/\/(node_modules)\//.tes * read all files matching the patterns in src and ignoreExports * * return all files matching src pattern, which are not matching the ignoreExports pattern + * @type {(src: string, ignoreExports: string, context: import('eslint').Rule.RuleContext) => Set} */ -var resolveFiles = function resolveFiles(src, ignoreExports, context) { +function resolveFiles(src, ignoreExports, context) { var extensions = Array.from((0, _ignore.getFileExtensions)(context.settings)); - var srcFileList = listFilesToProcess(src, extensions); + var srcFileList = listFilesToProcess(src, extensions, context); // prepare list of ignored files - var ignoredFilesList = listFilesToProcess(ignoreExports, extensions); - ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); + var ignoredFilesList = listFilesToProcess(ignoreExports, extensions, context); - // prepare list of source files, don't consider files from node_modules + // The modern api will return a list of file paths, rather than an object + if (ignoredFilesList.length && typeof ignoredFilesList[0] === 'string') { + ignoredFilesList.forEach(function (filename) {return ignoredFiles.add(filename);}); + } else { + ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); + } - return new Set( - (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;})); + // prepare list of source files, don't consider files from node_modules + var resolvedFiles = srcFileList.length && typeof srcFileList[0] === 'string' ? + srcFileList.filter(function (filePath) {return !isNodeModule(filePath);}) : + (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;}); -}; + return new Set(resolvedFiles); +} /** - * parse all source files and build up 2 maps containing the existing imports and exports - */ + * parse all source files and build up 2 maps containing the existing imports and exports + */ var prepareImportsAndExports = function prepareImportsAndExports(srcFiles, context) { var exportAll = new Map(); srcFiles.forEach(function (file) { var exports = new Map(); var imports = new Map(); - var currentExports = _ExportMap2['default'].get(file, context); + var currentExports = _builder2['default'].get(file, context); if (currentExports) {var dependencies = @@ -326,6 +454,7 @@ var getSrc = function getSrc(src) { * prepare the lists of existing imports and exports - should only be executed once at * the start of a new eslint run */ +/** @type {Set} */ var srcFiles = void 0; var lastPrepareKey = void 0; var doPreparation = function doPreparation(src, ignoreExports, context) { @@ -440,6 +569,10 @@ module.exports = { unusedExports: { description: 'report exports without any usage', + type: 'boolean' }, + + ignoreUnusedTypeExports: { + description: 'ignore type exports without any usage', type: 'boolean' } }, @@ -469,7 +602,8 @@ module.exports = { - context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports; + + context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports,ignoreUnusedTypeExports = _ref9.ignoreUnusedTypeExports; if (unusedExports) { doPreparation(src, ignoreExports, context); @@ -501,11 +635,15 @@ module.exports = { exportCount.set(IMPORT_NAMESPACE_SPECIFIER, namespaceImports); }return checkExportPresence;}(); - var checkUsage = function () {function checkUsage(node, exportedValue) { + var checkUsage = function () {function checkUsage(node, exportedValue, isTypeExport) { if (!unusedExports) { return; } + if (isTypeExport && ignoreUnusedTypeExports) { + return; + } + if (ignoredFiles.has(file)) { return; } @@ -529,6 +667,10 @@ module.exports = { exports = exportList.get(file); + if (!exports) { + console.error('file `' + String(file) + '` has no exports. Please update to the latest, and if it still happens, report this on https://github.com/import-js/eslint-plugin-import/issues/2866!'); + } + // special case: export * from var exportAll = exports.get(EXPORT_ALL_DECLARATION); if (typeof exportAll !== 'undefined' && exportedValue !== IMPORT_DEFAULT_SPECIFIER) { @@ -930,16 +1072,16 @@ module.exports = { checkExportPresence(node); }return ProgramExit;}(), ExportDefaultDeclaration: function () {function ExportDefaultDeclaration(node) { - checkUsage(node, IMPORT_DEFAULT_SPECIFIER); + checkUsage(node, IMPORT_DEFAULT_SPECIFIER, false); }return ExportDefaultDeclaration;}(), ExportNamedDeclaration: function () {function ExportNamedDeclaration(node) { node.specifiers.forEach(function (specifier) { - checkUsage(specifier, specifier.exported.name || specifier.exported.value); + checkUsage(specifier, specifier.exported.name || specifier.exported.value, false); }); - forEachDeclarationIdentifier(node.declaration, function (name) { - checkUsage(node, name); + forEachDeclarationIdentifier(node.declaration, function (name, isTypeExport) { + checkUsage(node, name, isTypeExport); }); }return ExportNamedDeclaration;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJGaWxlRW51bWVyYXRvciIsImxpc3RGaWxlc1RvUHJvY2VzcyIsInJlcXVpcmUiLCJlIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJzcmMiLCJleHRlbnNpb25zIiwicGF0dGVybnMiLCJjb25jYXQiLCJwYXR0ZXJuIiwibWFwIiwiZXh0ZW5zaW9uIiwidGVzdCIsIkFycmF5IiwiZnJvbSIsIml0ZXJhdGVGaWxlcyIsImZpbGVQYXRoIiwiaWdub3JlZCIsImZpbGVuYW1lIiwiRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04iLCJFWFBPUlRfTkFNRURfREVDTEFSQVRJT04iLCJFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIiLCJJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIiLCJWQVJJQUJMRV9ERUNMQVJBVElPTiIsIkZVTkNUSU9OX0RFQ0xBUkFUSU9OIiwiQ0xBU1NfREVDTEFSQVRJT04iLCJJREVOVElGSUVSIiwiT0JKRUNUX1BBVFRFUk4iLCJBUlJBWV9QQVRURVJOIiwiVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OIiwiVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTiIsIlRTX0VOVU1fREVDTEFSQVRJT04iLCJERUZBVUxUIiwiZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllciIsImRlY2xhcmF0aW9uIiwiY2IiLCJ0eXBlIiwiaWQiLCJuYW1lIiwiZGVjbGFyYXRpb25zIiwiZm9yRWFjaCIsImVsZW1lbnRzIiwiaW1wb3J0TGlzdCIsIk1hcCIsImV4cG9ydExpc3QiLCJ2aXNpdG9yS2V5TWFwIiwiaWdub3JlZEZpbGVzIiwiU2V0IiwiZmlsZXNPdXRzaWRlU3JjIiwiaXNOb2RlTW9kdWxlIiwicGF0aCIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJjb250ZXh0Iiwic2V0dGluZ3MiLCJzcmNGaWxlTGlzdCIsImlnbm9yZWRGaWxlc0xpc3QiLCJhZGQiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0cyIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiYW55T2YiLCJtaW5JdGVtcyIsInJlcXVpcmVkIiwiY3JlYXRlIiwib3B0aW9ucyIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsImNoZWNrRXhwb3J0UHJlc2VuY2UiLCJub2RlIiwiZXhwb3J0Q291bnQiLCJuYW1lc3BhY2VJbXBvcnRzIiwic2l6ZSIsInJlcG9ydCIsImJvZHkiLCJjaGVja1VzYWdlIiwiZXhwb3J0ZWRWYWx1ZSIsImV4cG9ydHNLZXkiLCJ1cGRhdGVFeHBvcnRVc2FnZSIsIm5ld0V4cG9ydHMiLCJuZXdFeHBvcnRJZGVudGlmaWVycyIsImxlbmd0aCIsImV4cG9ydGVkIiwidXBkYXRlSW1wb3J0VXNhZ2UiLCJvbGRJbXBvcnRQYXRocyIsIm9sZE5hbWVzcGFjZUltcG9ydHMiLCJuZXdOYW1lc3BhY2VJbXBvcnRzIiwib2xkRXhwb3J0QWxsIiwibmV3RXhwb3J0QWxsIiwib2xkRGVmYXVsdEltcG9ydHMiLCJuZXdEZWZhdWx0SW1wb3J0cyIsIm9sZEltcG9ydHMiLCJuZXdJbXBvcnRzIiwicHJvY2Vzc0R5bmFtaWNJbXBvcnQiLCJzb3VyY2UiLCJwIiwiSW1wb3J0RXhwcmVzc2lvbiIsImNoaWxkIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJhc3ROb2RlIiwicmVzb2x2ZWRQYXRoIiwicmF3IiwicmVwbGFjZSIsImZpbHRlciIsImltcG9ydGVkIiwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUE7QUFDQSxzRDtBQUNBLGtEO0FBQ0E7QUFDQSwyRDtBQUNBLHVDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQSx5QztBQUNBLHFDLDJVQWhCQTs7OzttWEFrQkEsSUFBSUEsdUJBQUosQ0FDQSxJQUFJQywyQkFBSjtBQUVBLElBQUk7QUFD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QmpFLE9BQWhCLENBQXdCLFVBQUM2QyxTQUFELEVBQWU7QUFDckM2RCx5QkFBVzdELFNBQVgsRUFBc0JBLFVBQVVvRSxRQUFWLENBQW1CbkgsSUFBbkIsSUFBMkIrQyxVQUFVb0UsUUFBVixDQUFtQjdFLEtBQXBFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCMkcsS0FBSzFHLFdBQWxDLEVBQStDLFVBQUNJLElBQUQsRUFBVTtBQUN2RDRHLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakI7QUFDRCxhQUZEO0FBR0QsV0FoQkksbUNBQVA7O0FBa0JELEtBdmhCYyxtQkFBakIiLCJmaWxlIjoibm8tdW51c2VkLW1vZHVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG1vZHVsZXMgY29udGFpbiBleHBvcnRzIGFuZC9vciBhbGxcbiAqIG1vZHVsZXMgYXJlIGNvbnN1bWVkIHdpdGhpbiBvdGhlciBtb2R1bGVzLlxuICogQGF1dGhvciBSZW7DqSBGZXJtYW5uXG4gKi9cblxuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbnMgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRQa2dVcCBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3JlYWRQa2dVcCc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJ29iamVjdC52YWx1ZXMnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IEV4cG9ydHMsIHsgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgfSBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCBGaWxlRW51bWVyYXRvcjtcbmxldCBsaXN0RmlsZXNUb1Byb2Nlc3M7XG5cbnRyeSB7XG4gICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG59IGNhdGNoIChlKSB7XG4gIHRyeSB7XG4gICAgLy8gaGFzIGJlZW4gbW92ZWQgdG8gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciBpbiB2ZXJzaW9uIDZcbiAgICAoeyBGaWxlRW51bWVyYXRvciB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvcicpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbHMnKTtcblxuICAgICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2Jsb2IvdjUuMTYuMC9saWIvdXRpbC9nbG9iLXV0aWxzLmpzI0wxNzgtTDI4MFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvYmxvYi92NS4yLjAvbGliL3V0aWwvZ2xvYi11dGlsLmpzI0wxNzQtTDI2OVxuICAgICAgbGlzdEZpbGVzVG9Qcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgZXh0ZW5zaW9ucykge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbCcpO1xuXG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gc3JjLmNvbmNhdChmbGF0TWFwKHNyYywgKHBhdHRlcm4pID0+IGV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+ICgvXFwqXFwqfFxcKlxcLi8pLnRlc3QocGF0dGVybikgPyBwYXR0ZXJuIDogYCR7cGF0dGVybn0vKiovKiR7ZXh0ZW5zaW9ufWApKSk7XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzKHBhdHRlcm5zKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmlmIChGaWxlRW51bWVyYXRvcikge1xuICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZS5pdGVyYXRlRmlsZXMoc3JjKSwgKHsgZmlsZVBhdGgsIGlnbm9yZWQgfSkgPT4gKHtcbiAgICAgIGlnbm9yZWQsXG4gICAgICBmaWxlbmFtZTogZmlsZVBhdGgsXG4gICAgfSkpO1xuICB9O1xufVxuXG5jb25zdCBFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiA9ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX0FMTF9ERUNMQVJBVElPTiA9ICdFeHBvcnRBbGxEZWNsYXJhdGlvbic7XG5jb25zdCBJTVBPUlRfREVDTEFSQVRJT04gPSAnSW1wb3J0RGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIgPSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJztcbmNvbnN0IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiA9ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJztcbmNvbnN0IFZBUklBQkxFX0RFQ0xBUkFUSU9OID0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nO1xuY29uc3QgRlVOQ1RJT05fREVDTEFSQVRJT04gPSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG5jb25zdCBDTEFTU19ERUNMQVJBVElPTiA9ICdDbGFzc0RlY2xhcmF0aW9uJztcbmNvbnN0IElERU5USUZJRVIgPSAnSWRlbnRpZmllcic7XG5jb25zdCBPQkpFQ1RfUEFUVEVSTiA9ICdPYmplY3RQYXR0ZXJuJztcbmNvbnN0IEFSUkFZX1BBVFRFUk4gPSAnQXJyYXlQYXR0ZXJuJztcbmNvbnN0IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTiA9ICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJztcbmNvbnN0IFRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04gPSAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbic7XG5jb25zdCBUU19FTlVNX0RFQ0xBUkFUSU9OID0gJ1RTRW51bURlY2xhcmF0aW9uJztcbmNvbnN0IERFRkFVTFQgPSAnZGVmYXVsdCc7XG5cbmZ1bmN0aW9uIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIGNiKSB7XG4gIGlmIChkZWNsYXJhdGlvbikge1xuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19FTlVNX0RFQ0xBUkFUSU9OXG4gICAgKSB7XG4gICAgICBjYihkZWNsYXJhdGlvbi5pZC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlkLnR5cGUgPT09IEFSUkFZX1BBVFRFUk4pIHtcbiAgICAgICAgICBpZC5lbGVtZW50cy5mb3JFYWNoKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgY2IobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IoaWQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuY29uc3QgaWdub3JlZEZpbGVzID0gbmV3IFNldCgpO1xuY29uc3QgZmlsZXNPdXRzaWRlU3JjID0gbmV3IFNldCgpO1xuXG5jb25zdCBpc05vZGVNb2R1bGUgPSAocGF0aCkgPT4gKC9cXC8obm9kZV9tb2R1bGVzKVxcLy8pLnRlc3QocGF0aCk7XG5cbi8qKlxuICogcmVhZCBhbGwgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHNyYyBhbmQgaWdub3JlRXhwb3J0c1xuICpcbiAqIHJldHVybiBhbGwgZmlsZXMgbWF0Y2hpbmcgc3JjIHBhdHRlcm4sIHdoaWNoIGFyZSBub3QgbWF0Y2hpbmcgdGhlIGlnbm9yZUV4cG9ydHMgcGF0dGVyblxuICovXG5jb25zdCByZXNvbHZlRmlsZXMgPSAoc3JjLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBBcnJheS5mcm9tKGdldEZpbGVFeHRlbnNpb25zKGNvbnRleHQuc2V0dGluZ3MpKTtcblxuICBjb25zdCBzcmNGaWxlTGlzdCA9IGxpc3RGaWxlc1RvUHJvY2VzcyhzcmMsIGV4dGVuc2lvbnMpO1xuXG4gIC8vIHByZXBhcmUgbGlzdCBvZiBpZ25vcmVkIGZpbGVzXG4gIGNvbnN0IGlnbm9yZWRGaWxlc0xpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3MoaWdub3JlRXhwb3J0cywgZXh0ZW5zaW9ucyk7XG4gIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoeyBmaWxlbmFtZSB9KSA9PiBpZ25vcmVkRmlsZXMuYWRkKGZpbGVuYW1lKSk7XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcblxuICByZXR1cm4gbmV3IFNldChcbiAgICBmbGF0TWFwKHNyY0ZpbGVMaXN0LCAoeyBmaWxlbmFtZSB9KSA9PiBpc05vZGVNb2R1bGUoZmlsZW5hbWUpID8gW10gOiBmaWxlbmFtZSksXG4gICk7XG59O1xuXG4vKipcbiAqIHBhcnNlIGFsbCBzb3VyY2UgZmlsZXMgYW5kIGJ1aWxkIHVwIDIgbWFwcyBjb250YWluaW5nIHRoZSBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzXG4gKi9cbmNvbnN0IHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyA9IChzcmNGaWxlcywgY29udGV4dCkgPT4ge1xuICBjb25zdCBleHBvcnRBbGwgPSBuZXcgTWFwKCk7XG4gIHNyY0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICBjb25zdCBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY3VycmVudEV4cG9ydHMgPSBFeHBvcnRzLmdldChmaWxlLCBjb250ZXh0KTtcbiAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICByZWV4cG9ydHMsXG4gICAgICAgIGltcG9ydHM6IGxvY2FsSW1wb3J0TGlzdCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB2aXNpdG9yS2V5cyxcbiAgICAgIH0gPSBjdXJyZW50RXhwb3J0cztcblxuICAgICAgdmlzaXRvcktleU1hcC5zZXQoZmlsZSwgdmlzaXRvcktleXMpO1xuICAgICAgLy8gZGVwZW5kZW5jaWVzID09PSBleHBvcnQgKiBmcm9tXG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goKGdldERlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IGdldERlcGVuZGVuY3koKTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RXhwb3J0QWxsLmFkZChkZXBlbmRlbmN5LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICBleHBvcnRBbGwuc2V0KGZpbGUsIGN1cnJlbnRFeHBvcnRBbGwpO1xuXG4gICAgICByZWV4cG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWV4cG9ydCA9ICB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG5sZXQgc3JjRmlsZXM7XG5sZXQgbGFzdFByZXBhcmVLZXk7XG5jb25zdCBkb1ByZXBhcmF0aW9uID0gKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkgPT4ge1xuICBjb25zdCBwcmVwYXJlS2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHNyYzogKHNyYyB8fCBbXSkuc29ydCgpLFxuICAgIGlnbm9yZUV4cG9ydHM6IChpZ25vcmVFeHBvcnRzIHx8IFtdKS5zb3J0KCksXG4gICAgZXh0ZW5zaW9uczogQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSkuc29ydCgpLFxuICB9KTtcbiAgaWYgKHByZXBhcmVLZXkgPT09IGxhc3RQcmVwYXJlS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW1wb3J0TGlzdC5jbGVhcigpO1xuICBleHBvcnRMaXN0LmNsZWFyKCk7XG4gIGlnbm9yZWRGaWxlcy5jbGVhcigpO1xuICBmaWxlc091dHNpZGVTcmMuY2xlYXIoKTtcblxuICBzcmNGaWxlcyA9IHJlc29sdmVGaWxlcyhnZXRTcmMoc3JjKSwgaWdub3JlRXhwb3J0cywgY29udGV4dCk7XG4gIHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyhzcmNGaWxlcywgY29udGV4dCk7XG4gIGRldGVybWluZVVzYWdlKCk7XG4gIGxhc3RQcmVwYXJlS2V5ID0gcHJlcGFyZUtleTtcbn07XG5cbmNvbnN0IG5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyA9IChzcGVjaWZpZXJzKSA9PiBzcGVjaWZpZXJzLnNvbWUoKHsgdHlwZSB9KSA9PiB0eXBlID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG5cbmNvbnN0IG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuY29uc3QgZmlsZUlzSW5Qa2cgPSAoZmlsZSkgPT4ge1xuICBjb25zdCB7IHBhdGgsIHBrZyB9ID0gcmVhZFBrZ1VwKHsgY3dkOiBmaWxlIH0pO1xuICBjb25zdCBiYXNlUGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZFN0cmluZyA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGlmIChqb2luKGJhc2VQYXRoLCBwa2dGaWVsZCkgPT09IGZpbGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkT2JqZWN0ID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgY29uc3QgcGtnRmllbGRGaWxlcyA9IGZsYXRNYXAodmFsdWVzKHBrZ0ZpZWxkKSwgKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IFtdIDogam9pbihiYXNlUGF0aCwgdmFsdWUpKTtcblxuICAgIGlmIChpbmNsdWRlcyhwa2dGaWVsZEZpbGVzLCBmaWxlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGQgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRTdHJpbmcocGtnRmllbGQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGtnRmllbGQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gY2hlY2tQa2dGaWVsZE9iamVjdChwa2dGaWVsZCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChwa2cucHJpdmF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwa2cuYmluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGQocGtnLmJpbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cuYnJvd3Nlcikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5icm93c2VyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBrZy5tYWluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGRTdHJpbmcocGtnLm1haW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgbW9kdWxlcyB3aXRob3V0IGV4cG9ydHMsIG9yIGV4cG9ydHMgd2l0aG91dCBtYXRjaGluZyBpbXBvcnQgaW4gYW5vdGhlciBtb2R1bGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tdW51c2VkLW1vZHVsZXMnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3JjOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyB0byBiZSBhbmFseXplZCAob25seSBmb3IgdW51c2VkIGV4cG9ydHMpJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyBmb3Igd2hpY2ggdW51c2VkIGV4cG9ydHMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgKGUuZyBtb2R1bGUgZW50cnkgcG9pbnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBtb2R1bGVzIHdpdGhvdXQgYW55IGV4cG9ydHMnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgdW51c2VkRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAncmVwb3J0IGV4cG9ydHMgd2l0aG91dCBhbnkgdXNhZ2UnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhbnlPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdW51c2VkRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICAgIHNyYzoge1xuICAgICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1bnVzZWRFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ21pc3NpbmdFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgc3JjLFxuICAgICAgaWdub3JlRXhwb3J0cyA9IFtdLFxuICAgICAgbWlzc2luZ0V4cG9ydHMsXG4gICAgICB1bnVzZWRFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCF1bnVzZWRFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShzcGVjaWZpZXIsIHNwZWNpZmllci5leHBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5leHBvcnRlZC52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKG5vZGUuZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlRmlsZUVudW1lcmF0b3IiLCJGaWxlRW51bWVyYXRvciIsInJlcXVpcmUiLCJlIiwiY29kZSIsImxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IiLCJzcmMiLCJleHRlbnNpb25zIiwiQXJyYXkiLCJmcm9tIiwiaXRlcmF0ZUZpbGVzIiwiZmlsZVBhdGgiLCJpZ25vcmVkIiwiZmlsZW5hbWUiLCJsaXN0RmlsZXNXaXRoTGVnYWN5RnVuY3Rpb25zIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJsaXN0RmlsZXNUb1Byb2Nlc3MiLCJwYXR0ZXJucyIsImNvbmNhdCIsInBhdHRlcm4iLCJtYXAiLCJleHRlbnNpb24iLCJ0ZXN0IiwibGlzdEZpbGVzV2l0aE1vZGVybkFwaSIsInNyY1BhdGhzIiwic2Vzc2lvbiIsImZpbGVzIiwiaSIsImVudHJpZXMiLCJkZWVwRmlsdGVyIiwiZW50cnkiLCJmdWxsRW50cnlQYXRoIiwicGF0aCIsImlzRGlyZWN0b3J5SWdub3JlZCIsImVudHJ5RmlsdGVyIiwiaXNGaWxlSWdub3JlZCIsImZpbmQiLCJlbmRzV2l0aCIsInB1c2giLCJmaWx0ZXIiLCJkaXJlbnQiLCJpc0RpcmVjdG9yeSIsImxlbmd0aCIsImNvbnRleHQiLCJFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiIsIkVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiIsIkVYUE9SVF9BTExfREVDTEFSQVRJT04iLCJJTVBPUlRfREVDTEFSQVRJT04iLCJJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiIsIklNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiIsIlZBUklBQkxFX0RFQ0xBUkFUSU9OIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJDTEFTU19ERUNMQVJBVElPTiIsIklERU5USUZJRVIiLCJPQkpFQ1RfUEFUVEVSTiIsIkFSUkFZX1BBVFRFUk4iLCJUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04iLCJUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OIiwiVFNfRU5VTV9ERUNMQVJBVElPTiIsIkRFRkFVTFQiLCJmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyIiwiZGVjbGFyYXRpb24iLCJjYiIsImlzVHlwZURlY2xhcmF0aW9uIiwidHlwZSIsImlkIiwibmFtZSIsImRlY2xhcmF0aW9ucyIsImZvckVhY2giLCJlbGVtZW50cyIsImltcG9ydExpc3QiLCJNYXAiLCJleHBvcnRMaXN0IiwidmlzaXRvcktleU1hcCIsImlnbm9yZWRGaWxlcyIsIlNldCIsImZpbGVzT3V0c2lkZVNyYyIsImlzTm9kZU1vZHVsZSIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJzZXR0aW5ncyIsInNyY0ZpbGVMaXN0IiwiaWdub3JlZEZpbGVzTGlzdCIsImFkZCIsInJlc29sdmVkRmlsZXMiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiaWdub3JlVW51c2VkVHlwZUV4cG9ydHMiLCJhbnlPZiIsIm1pbkl0ZW1zIiwicmVxdWlyZWQiLCJjcmVhdGUiLCJvcHRpb25zIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiY2hlY2tFeHBvcnRQcmVzZW5jZSIsIm5vZGUiLCJleHBvcnRDb3VudCIsIm5hbWVzcGFjZUltcG9ydHMiLCJzaXplIiwicmVwb3J0IiwiYm9keSIsImNoZWNrVXNhZ2UiLCJleHBvcnRlZFZhbHVlIiwiaXNUeXBlRXhwb3J0IiwiY29uc29sZSIsImVycm9yIiwiZXhwb3J0c0tleSIsInVwZGF0ZUV4cG9ydFVzYWdlIiwibmV3RXhwb3J0cyIsIm5ld0V4cG9ydElkZW50aWZpZXJzIiwiZXhwb3J0ZWQiLCJ1cGRhdGVJbXBvcnRVc2FnZSIsIm9sZEltcG9ydFBhdGhzIiwib2xkTmFtZXNwYWNlSW1wb3J0cyIsIm5ld05hbWVzcGFjZUltcG9ydHMiLCJvbGRFeHBvcnRBbGwiLCJuZXdFeHBvcnRBbGwiLCJvbGREZWZhdWx0SW1wb3J0cyIsIm5ld0RlZmF1bHRJbXBvcnRzIiwib2xkSW1wb3J0cyIsIm5ld0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInNvdXJjZSIsInAiLCJJbXBvcnRFeHByZXNzaW9uIiwiY2hpbGQiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsImFzdE5vZGUiLCJyZXNvbHZlZFBhdGgiLCJyYXciLCJyZXBsYWNlIiwiaW1wb3J0ZWQiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQTtBQUNBLHNEO0FBQ0Esa0Q7QUFDQTtBQUNBLDJEO0FBQ0EsdUM7QUFDQSwrQztBQUNBLHlEOztBQUVBO0FBQ0EsK0M7QUFDQSw2RDtBQUNBLHFDLDJVQWxCQTs7OztvWEFvQkE7Ozs7O3VYQU1BLFNBQVNBLHFCQUFULEdBQWlDLENBQy9CLElBQUlDLHVCQUFKOztBQUVBO0FBQ0EsTUFBSTtBQUNvQkMsWUFBUSw2QkFBUixDQURwQixDQUNDRCxjQURELFlBQ0NBLGNBREQ7QUFFSCxHQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxRQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsWUFBTUQsQ0FBTjtBQUNEOztBQUVEO0FBQ0EsUUFBSTtBQUNvQkQsY0FBUSx1Q0FBUixDQURwQixDQUNDRCxjQURELGFBQ0NBLGNBREQ7QUFFSCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxVQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsY0FBTUQsQ0FBTjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU9GLGNBQVA7QUFDRDs7QUFFRDs7Ozs7OztBQU9BLFNBQVNJLDRCQUFULENBQXNDSixjQUF0QyxFQUFzREssR0FBdEQsRUFBMkRDLFVBQTNELEVBQXVFO0FBQ3JFLE1BQU1KLElBQUksSUFBSUYsY0FBSixDQUFtQjtBQUMzQk0sMEJBRDJCLEVBQW5CLENBQVY7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QW1CckgsSUFBbkIsSUFBMkI4QyxVQUFVdUUsUUFBVixDQUFtQmhGLEtBQXBFLEVBQTJFLEtBQTNFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCNEcsS0FBSzNHLFdBQWxDLEVBQStDLFVBQUNLLElBQUQsRUFBTzhHLFlBQVAsRUFBd0I7QUFDckVGLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakIsRUFBdUI4RyxZQUF2QjtBQUNELGFBRkQ7QUFHRCxXQWhCSSxtQ0FBUDs7QUFrQkQsS0FwaUJjLG1CQUFqQiIsImZpbGUiOiJuby11bnVzZWQtbW9kdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbW9kdWxlcyBjb250YWluIGV4cG9ydHMgYW5kL29yIGFsbFxuICogbW9kdWxlcyBhcmUgY29uc3VtZWQgd2l0aGluIG90aGVyIG1vZHVsZXMuXG4gKiBAYXV0aG9yIFJlbsOpIEZlcm1hbm5cbiAqL1xuXG5pbXBvcnQgeyBnZXRGaWxlRXh0ZW5zaW9ucyB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnb2JqZWN0LnZhbHVlcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IGZsYXRNYXAgZnJvbSAnYXJyYXkucHJvdG90eXBlLmZsYXRtYXAnO1xuXG5pbXBvcnQgeyB3YWxrU3luYyB9IGZyb20gJy4uL2NvcmUvZnNXYWxrJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZSBmcm9tICcuLi9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8qKlxuICogQXR0ZW1wdCB0byBsb2FkIHRoZSBpbnRlcm5hbCBgRmlsZUVudW1lcmF0b3JgIGNsYXNzLCB3aGljaCBoYXMgZXhpc3RlZCBpbiBhIGNvdXBsZVxuICogb2YgZGlmZmVyZW50IHBsYWNlcywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIGBlc2xpbnRgLiAgVHJ5IHJlcXVpcmluZyBpdCBmcm9tIGJvdGhcbiAqIGxvY2F0aW9ucy5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGBGaWxlRW51bWVyYXRvcmAgY2xhc3MgaWYgaXRzIHJlcXVpcmFibGUsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCkge1xuICBsZXQgRmlsZUVudW1lcmF0b3I7XG5cbiAgLy8gVHJ5IGdldHRpbmcgaXQgZnJvbSB0aGUgZXNsaW50IHByaXZhdGUgLyBkZXByZWNhdGVkIGFwaVxuICB0cnkge1xuICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBBYnNvcmIgdGhpcyBpZiBpdCdzIE1PRFVMRV9OT1RfRk9VTkRcbiAgICBpZiAoZS5jb2RlICE9PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IHRoZXJlLCB0aGVuIHRyeSBnZXR0aW5nIGl0IGZyb20gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciAobW92ZWQgdGhlcmUgaW4gdjYpXG4gICAgdHJ5IHtcbiAgICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL2NsaS1lbmdpbmUvZmlsZS1lbnVtZXJhdG9yJykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFic29yYiB0aGlzIGlmIGl0J3MgTU9EVUxFX05PVF9GT1VORFxuICAgICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBGaWxlRW51bWVyYXRvcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIEZpbGVFbnVtZXJhdG9yIHRoZSBgRmlsZUVudW1lcmF0b3JgIGNsYXNzIGZyb20gYGVzbGludGAncyBpbnRlcm5hbCBhcGlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3sgZmlsZW5hbWU6IHN0cmluZywgaWdub3JlZDogYm9vbGVhbiB9W119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNVc2luZ0ZpbGVFbnVtZXJhdG9yKEZpbGVFbnVtZXJhdG9yLCBzcmMsIGV4dGVuc2lvbnMpIHtcbiAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgZXh0ZW5zaW9ucyxcbiAgfSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgZS5pdGVyYXRlRmlsZXMoc3JjKSxcbiAgICAoeyBmaWxlUGF0aCwgaWdub3JlZCB9KSA9PiAoeyBmaWxlbmFtZTogZmlsZVBhdGgsIGlnbm9yZWQgfSksXG4gICk7XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byByZXF1aXJlIG9sZCB2ZXJzaW9ucyBvZiB0aGUgZmlsZSBlbnVtZXJhdGlvbiBjYXBhYmlsaXR5IGZyb20gdjYgYGVzbGludGAgYW5kIGVhcmxpZXIsIGFuZCB1c2VcbiAqIHRob3NlIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3N0cmluZ1tdfSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzV2l0aExlZ2FjeUZ1bmN0aW9ucyhzcmMsIGV4dGVuc2lvbnMpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICBjb25zdCB7IGxpc3RGaWxlc1RvUHJvY2Vzczogb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MgfSA9IHJlcXVpcmUoJ2VzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzJyk7XG4gICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjE2LjAvbGliL3V0aWwvZ2xvYi11dGlscy5qcyNMMTc4LUwyODBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjIuMC9saWIvdXRpbC9nbG9iLXV0aWwuanMjTDE3NC1MMjY5XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gQWJzb3JiIHRoaXMgaWYgaXQncyBNT0RVTEVfTk9UX0ZPVU5EXG4gICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIC8vIExhc3QgcGxhY2UgdG8gdHJ5IChwcmUgdjUuMylcbiAgICBjb25zdCB7XG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3M6IG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzLFxuICAgIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsJyk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBzcmMuY29uY2F0KFxuICAgICAgZmxhdE1hcChcbiAgICAgICAgc3JjLFxuICAgICAgICAocGF0dGVybikgPT4gZXh0ZW5zaW9ucy5tYXAoKGV4dGVuc2lvbikgPT4gKC9cXCpcXCp8XFwqXFwuLykudGVzdChwYXR0ZXJuKSA/IHBhdHRlcm4gOiBgJHtwYXR0ZXJufS8qKi8qJHtleHRlbnNpb259YCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MocGF0dGVybnMpO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzb3VyY2Ugcm9vdCBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgdXNlIGZzV2FsayBhbmQgdGhlXG4gKiBuZXcgYGVzbGludGAgYGNvbnRleHQuc2Vzc2lvbmAgYXBpIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIGZpbGVzIHdlIHdhbnQgdG8gb3BlcmF0ZSBvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3JjUGF0aHMgYXJyYXkgb2Ygc291cmNlIHBhdGhzIChmb3IgZmxhdCBjb25maWcgdGhpcyBzaG91bGQganVzdCBiZSBhIHNpbmd1bGFyIHJvb3QgKGUuZy4gY3dkKSlcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHt7IGlzRGlyZWN0b3J5SWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiwgaXNGaWxlSWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB9fSBzZXNzaW9uIGVzbGludCBjb250ZXh0IHNlc3Npb24gb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyY1BhdGhzLCBleHRlbnNpb25zLCBzZXNzaW9uKSB7XG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IGZpbGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmNQYXRocy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHNyYyA9IHNyY1BhdGhzW2ldO1xuICAgIC8vIFVzZSB3YWxrU3luYyBhbG9uZyB3aXRoIHRoZSBuZXcgc2Vzc2lvbiBhcGkgdG8gZ2F0aGVyIHRoZSBsaXN0IG9mIGZpbGVzXG4gICAgY29uc3QgZW50cmllcyA9IHdhbGtTeW5jKHNyYywge1xuICAgICAgZGVlcEZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBkaXJlY3RvcnkgaWYgaXQncyBub3QgbWFya2VkIGFzIGlnbm9yZSBieSBlc2xpbnRcbiAgICAgICAgcmV0dXJuICFzZXNzaW9uLmlzRGlyZWN0b3J5SWdub3JlZChmdWxsRW50cnlQYXRoKTtcbiAgICAgIH0sXG4gICAgICBlbnRyeUZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBmaWxlIGlmIGl0J3Mgbm90IG1hcmtlZCBhcyBpZ25vcmUgYnkgZXNsaW50IGFuZCBpdHMgZXh0ZW5zaW9uIGlzIGluY2x1ZGVkIGluIG91ciBsaXN0XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIXNlc3Npb24uaXNGaWxlSWdub3JlZChmdWxsRW50cnlQYXRoKVxuICAgICAgICAgICYmIGV4dGVuc2lvbnMuZmluZCgoZXh0ZW5zaW9uKSA9PiBlbnRyeS5wYXRoLmVuZHNXaXRoKGV4dGVuc2lvbikpXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIG91dCBkaXJlY3RvcmllcyBhbmQgbWFwIGVudHJpZXMgdG8gdGhlaXIgcGF0aHNcbiAgICBmaWxlcy5wdXNoKFxuICAgICAgLi4uZW50cmllc1xuICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkucGF0aCksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzcmMgcGF0dGVybiBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgcmV0dXJuIGEgbGlzdCBvZiBmaWxlcyB0byBwcm9jZXNzXG4gKiB3aXRoIHRoaXMgcnVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBmaWxlLCBkaXJlY3RvcnksIG9yIGdsb2IgcGF0dGVybiBvZiBmaWxlcyB0byBhY3Qgb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgLSBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7aW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0fSBjb250ZXh0IC0gdGhlIGVzbGludCBjb250ZXh0IG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ1tdIHwgeyBmaWxlbmFtZTogc3RyaW5nLCBpZ25vcmVkOiBib29sZWFuIH1bXX0gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB0aGlzIHJ1bGUgd2lsbCBldmFsdWF0ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzVG9Qcm9jZXNzKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dCkge1xuICAvLyBJZiB0aGUgY29udGV4dCBvYmplY3QgaGFzIHRoZSBuZXcgc2Vzc2lvbiBmdW5jdGlvbnMsIHRoZW4gcHJlZmVyIHRob3NlXG4gIC8vIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgYEZpbGVFbnVtZXJhdG9yYCBmb3IgbGVnYWN5IHN1cHBvcnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8xODA4N1xuICBpZiAoXG4gICAgY29udGV4dC5zZXNzaW9uXG4gICAgJiYgY29udGV4dC5zZXNzaW9uLmlzRmlsZUlnbm9yZWRcbiAgICAmJiBjb250ZXh0LnNlc3Npb24uaXNEaXJlY3RvcnlJZ25vcmVkXG4gICkge1xuICAgIHJldHVybiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dC5zZXNzaW9uKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIG9nIEZpbGVFbnVtZXJhdG9yXG4gIGNvbnN0IEZpbGVFbnVtZXJhdG9yID0gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCk7XG5cbiAgLy8gSWYgd2UgZ290IHRoZSBGaWxlRW51bWVyYXRvciwgdGhlbiBsZXQncyBnbyB3aXRoIHRoYXRcbiAgaWYgKEZpbGVFbnVtZXJhdG9yKSB7XG4gICAgcmV0dXJuIGxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IoRmlsZUVudW1lcmF0b3IsIHNyYywgZXh0ZW5zaW9ucyk7XG4gIH1cbiAgLy8gSWYgbm90LCB0aGVuIHdlIGNhbiB0cnkgZXZlbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGNhcGFiaWxpdHkgKGxpc3RGaWxlc1RvUHJvY2VzcylcbiAgcmV0dXJuIGxpc3RGaWxlc1dpdGhMZWdhY3lGdW5jdGlvbnMoc3JjLCBleHRlbnNpb25zKTtcbn1cblxuY29uc3QgRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04gPSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiA9ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9BTExfREVDTEFSQVRJT04gPSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX0RFQ0xBUkFUSU9OID0gJ0ltcG9ydERlY2xhcmF0aW9uJztcbmNvbnN0IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSID0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic7XG5jb25zdCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic7XG5jb25zdCBWQVJJQUJMRV9ERUNMQVJBVElPTiA9ICdWYXJpYWJsZURlY2xhcmF0aW9uJztcbmNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xuY29uc3QgQ0xBU1NfREVDTEFSQVRJT04gPSAnQ2xhc3NEZWNsYXJhdGlvbic7XG5jb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuY29uc3QgT0JKRUNUX1BBVFRFUk4gPSAnT2JqZWN0UGF0dGVybic7XG5jb25zdCBBUlJBWV9QQVRURVJOID0gJ0FycmF5UGF0dGVybic7XG5jb25zdCBUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04gPSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic7XG5jb25zdCBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OID0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nO1xuY29uc3QgVFNfRU5VTV9ERUNMQVJBVElPTiA9ICdUU0VudW1EZWNsYXJhdGlvbic7XG5jb25zdCBERUZBVUxUID0gJ2RlZmF1bHQnO1xuXG5mdW5jdGlvbiBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKGRlY2xhcmF0aW9uLCBjYikge1xuICBpZiAoZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBpc1R5cGVEZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLnR5cGUgPT09IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfRU5VTV9ERUNMQVJBVElPTjtcblxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgaXNUeXBlRGVjbGFyYXRpb25cbiAgICApIHtcbiAgICAgIGNiKGRlY2xhcmF0aW9uLmlkLm5hbWUsIGlzVHlwZURlY2xhcmF0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpZC50eXBlID09PSBBUlJBWV9QQVRURVJOKSB7XG4gICAgICAgICAgaWQuZWxlbWVudHMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGNiKG5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYihpZC5uYW1lLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbmNvbnN0IGlnbm9yZWRGaWxlcyA9IG5ldyBTZXQoKTtcbmNvbnN0IGZpbGVzT3V0c2lkZVNyYyA9IG5ldyBTZXQoKTtcblxuY29uc3QgaXNOb2RlTW9kdWxlID0gKHBhdGgpID0+ICgvXFwvKG5vZGVfbW9kdWxlcylcXC8vKS50ZXN0KHBhdGgpO1xuXG4vKipcbiAqIHJlYWQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJucyBpbiBzcmMgYW5kIGlnbm9yZUV4cG9ydHNcbiAqXG4gKiByZXR1cm4gYWxsIGZpbGVzIG1hdGNoaW5nIHNyYyBwYXR0ZXJuLCB3aGljaCBhcmUgbm90IG1hdGNoaW5nIHRoZSBpZ25vcmVFeHBvcnRzIHBhdHRlcm5cbiAqIEB0eXBlIHsoc3JjOiBzdHJpbmcsIGlnbm9yZUV4cG9ydHM6IHN0cmluZywgY29udGV4dDogaW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0KSA9PiBTZXQ8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbGVzKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkge1xuICBjb25zdCBleHRlbnNpb25zID0gQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSk7XG5cbiAgY29uc3Qgc3JjRmlsZUxpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCBleHRlbnNpb25zLCBjb250ZXh0KTtcblxuICAvLyBwcmVwYXJlIGxpc3Qgb2YgaWdub3JlZCBmaWxlc1xuICBjb25zdCBpZ25vcmVkRmlsZXNMaXN0ID0gbGlzdEZpbGVzVG9Qcm9jZXNzKGlnbm9yZUV4cG9ydHMsIGV4dGVuc2lvbnMsIGNvbnRleHQpO1xuXG4gIC8vIFRoZSBtb2Rlcm4gYXBpIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBmaWxlIHBhdGhzLCByYXRoZXIgdGhhbiBhbiBvYmplY3RcbiAgaWYgKGlnbm9yZWRGaWxlc0xpc3QubGVuZ3RoICYmIHR5cGVvZiBpZ25vcmVkRmlsZXNMaXN0WzBdID09PSAnc3RyaW5nJykge1xuICAgIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoZmlsZW5hbWUpID0+IGlnbm9yZWRGaWxlcy5hZGQoZmlsZW5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICBpZ25vcmVkRmlsZXNMaXN0LmZvckVhY2goKHsgZmlsZW5hbWUgfSkgPT4gaWdub3JlZEZpbGVzLmFkZChmaWxlbmFtZSkpO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcbiAgY29uc3QgcmVzb2x2ZWRGaWxlcyA9IHNyY0ZpbGVMaXN0Lmxlbmd0aCAmJiB0eXBlb2Ygc3JjRmlsZUxpc3RbMF0gPT09ICdzdHJpbmcnXG4gICAgPyBzcmNGaWxlTGlzdC5maWx0ZXIoKGZpbGVQYXRoKSA9PiAhaXNOb2RlTW9kdWxlKGZpbGVQYXRoKSlcbiAgICA6IGZsYXRNYXAoc3JjRmlsZUxpc3QsICh7IGZpbGVuYW1lIH0pID0+IGlzTm9kZU1vZHVsZShmaWxlbmFtZSkgPyBbXSA6IGZpbGVuYW1lKTtcblxuICByZXR1cm4gbmV3IFNldChyZXNvbHZlZEZpbGVzKTtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbGwgc291cmNlIGZpbGVzIGFuZCBidWlsZCB1cCAyIG1hcHMgY29udGFpbmluZyB0aGUgZXhpc3RpbmcgaW1wb3J0cyBhbmQgZXhwb3J0c1xuICovXG5jb25zdCBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMgPSAoc3JjRmlsZXMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZXhwb3J0QWxsID0gbmV3IE1hcCgpO1xuICBzcmNGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgY29uc3QgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZmlsZSwgY29udGV4dCk7XG4gICAgaWYgKGN1cnJlbnRFeHBvcnRzKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcmVleHBvcnRzLFxuICAgICAgICBpbXBvcnRzOiBsb2NhbEltcG9ydExpc3QsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgdmlzaXRvcktleXMsXG4gICAgICB9ID0gY3VycmVudEV4cG9ydHM7XG5cbiAgICAgIHZpc2l0b3JLZXlNYXAuc2V0KGZpbGUsIHZpc2l0b3JLZXlzKTtcbiAgICAgIC8vIGRlcGVuZGVuY2llcyA9PT0gZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgY3VycmVudEV4cG9ydEFsbCA9IG5ldyBTZXQoKTtcbiAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKChnZXREZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBnZXREZXBlbmRlbmN5KCk7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEV4cG9ydEFsbC5hZGQoZGVwZW5kZW5jeS5wYXRoKTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0QWxsLnNldChmaWxlLCBjdXJyZW50RXhwb3J0QWxsKTtcblxuICAgICAgcmVleHBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gREVGQVVMVCkge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBvcnRzLnNldChrZXksIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVleHBvcnQgPSB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG4vKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xubGV0IHNyY0ZpbGVzO1xubGV0IGxhc3RQcmVwYXJlS2V5O1xuY29uc3QgZG9QcmVwYXJhdGlvbiA9IChzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgcHJlcGFyZUtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzcmM6IChzcmMgfHwgW10pLnNvcnQoKSxcbiAgICBpZ25vcmVFeHBvcnRzOiAoaWdub3JlRXhwb3J0cyB8fCBbXSkuc29ydCgpLFxuICAgIGV4dGVuc2lvbnM6IEFycmF5LmZyb20oZ2V0RmlsZUV4dGVuc2lvbnMoY29udGV4dC5zZXR0aW5ncykpLnNvcnQoKSxcbiAgfSk7XG4gIGlmIChwcmVwYXJlS2V5ID09PSBsYXN0UHJlcGFyZUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGltcG9ydExpc3QuY2xlYXIoKTtcbiAgZXhwb3J0TGlzdC5jbGVhcigpO1xuICBpZ25vcmVkRmlsZXMuY2xlYXIoKTtcbiAgZmlsZXNPdXRzaWRlU3JjLmNsZWFyKCk7XG5cbiAgc3JjRmlsZXMgPSByZXNvbHZlRmlsZXMoZ2V0U3JjKHNyYyksIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMoc3JjRmlsZXMsIGNvbnRleHQpO1xuICBkZXRlcm1pbmVVc2FnZSgpO1xuICBsYXN0UHJlcGFyZUtleSA9IHByZXBhcmVLZXk7XG59O1xuXG5jb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG5jb25zdCBuZXdEZWZhdWx0SW1wb3J0RXhpc3RzID0gKHNwZWNpZmllcnMpID0+IHNwZWNpZmllcnMuc29tZSgoeyB0eXBlIH0pID0+IHR5cGUgPT09IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG5cbmNvbnN0IGZpbGVJc0luUGtnID0gKGZpbGUpID0+IHtcbiAgY29uc3QgeyBwYXRoLCBwa2cgfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZSB9KTtcbiAgY29uc3QgYmFzZVBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGRTdHJpbmcgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAoam9pbihiYXNlUGF0aCwgcGtnRmllbGQpID09PSBmaWxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZE9iamVjdCA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGNvbnN0IHBrZ0ZpZWxkRmlsZXMgPSBmbGF0TWFwKHZhbHVlcyhwa2dGaWVsZCksICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyBbXSA6IGpvaW4oYmFzZVBhdGgsIHZhbHVlKSk7XG5cbiAgICBpZiAoaW5jbHVkZXMocGtnRmllbGRGaWxlcywgZmlsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwa2dGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZ0ZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRPYmplY3QocGtnRmllbGQpO1xuICAgIH1cbiAgfTtcblxuICBpZiAocGtnLnByaXZhdGUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGtnLmJpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5iaW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGtnLmJyb3dzZXIpIHtcbiAgICBpZiAoY2hlY2tQa2dGaWVsZChwa2cuYnJvd3NlcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cubWFpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZy5tYWluKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG1vZHVsZXMgd2l0aG91dCBleHBvcnRzLCBvciBleHBvcnRzIHdpdGhvdXQgbWF0Y2hpbmcgaW1wb3J0IGluIGFub3RoZXIgbW9kdWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXVudXNlZC1tb2R1bGVzJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHNyYzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgdG8gYmUgYW5hbHl6ZWQgKG9ubHkgZm9yIHVudXNlZCBleHBvcnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgZm9yIHdoaWNoIHVudXNlZCBleHBvcnRzIHdpbGwgbm90IGJlIHJlcG9ydGVkIChlLmcgbW9kdWxlIGVudHJ5IHBvaW50cyknLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdyZXBvcnQgbW9kdWxlcyB3aXRob3V0IGFueSBleHBvcnRzJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIHVudXNlZEV4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgdHlwZSBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVudXNlZEV4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgICBzcmM6IHtcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndW51c2VkRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWydtaXNzaW5nRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNyYyxcbiAgICAgIGlnbm9yZUV4cG9ydHMgPSBbXSxcbiAgICAgIG1pc3NpbmdFeHBvcnRzLFxuICAgICAgdW51c2VkRXhwb3J0cyxcbiAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSwgaXNUeXBlRXhwb3J0KSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlRXhwb3J0ICYmIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIGlmICghZXhwb3J0cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBmaWxlIFxcYCR7ZmlsZX1cXGAgaGFzIG5vIGV4cG9ydHMuIFBsZWFzZSB1cGRhdGUgdG8gdGhlIGxhdGVzdCwgYW5kIGlmIGl0IHN0aWxsIGhhcHBlbnMsIHJlcG9ydCB0aGlzIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbXBvcnQtanMvZXNsaW50LXBsdWdpbi1pbXBvcnQvaXNzdWVzLzI4NjYhYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uoc3BlY2lmaWVyLCBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIobm9kZS5kZWNsYXJhdGlvbiwgKG5hbWUsIGlzVHlwZUV4cG9ydCkgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uobm9kZSwgbmFtZSwgaXNUeXBlRXhwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 4b735ae4b4..364f3e06aa 100644 --- a/node_modules/eslint-plugin-import/lib/rules/order.js +++ b/node_modules/eslint-plugin-import/lib/rules/order.js @@ -92,6 +92,12 @@ function findRootNode(node) { return parent; } +function commentOnSameLineAs(node) { + return function (token) {return (token.type === 'Block' || token.type === 'Line') && + token.loc.start.line === token.loc.end.line && + token.loc.end.line === node.loc.end.line;}; +} + function findEndOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensAfterWhile(sourceCode, node, commentOnSameLineAs(node)); var endOfTokens = tokensToEndOfLine.length > 0 ? @@ -111,12 +117,6 @@ function findEndOfLineWithComments(sourceCode, node) { return result; } -function commentOnSameLineAs(node) { - return function (token) {return (token.type === 'Block' || token.type === 'Line') && - token.loc.start.line === token.loc.end.line && - token.loc.end.line === node.loc.end.line;}; -} - function findStartOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensBeforeWhile(sourceCode, node, commentOnSameLineAs(node)); var startOfTokens = tokensToEndOfLine.length > 0 ? tokensToEndOfLine[0].range[0] : node.range[0]; @@ -302,6 +302,12 @@ function getSorter(alphabetizeOptions) { var b = B.length; for (var i = 0; i < Math.min(a, b); i++) { + // Skip comparing the first path segment, if they are relative segments for both imports + if (i === 0 && (A[i] === '.' || A[i] === '..') && (B[i] === '.' || B[i] === '..')) { + // If one is sibling and the other parent import, no need to compare at all, since the paths belong in different groups + if (A[i] !== B[i]) {break;} + continue; + } result = compareString(A[i], B[i]); if (result) {break;} } @@ -782,4 +788,4 @@ module.exports = { }return reportAndReset;}() }; }return importOrderRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyIsInRva2Vuc1RvRW5kT2ZMaW5lIiwiY29tbWVudE9uU2FtZUxpbmVBcyIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwidG9rZW4iLCJ0eXBlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiZW5kIiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxPQUFULENBQWlCQyxLQUFqQixFQUF3QjtBQUN0QixTQUFPQSxNQUFNQyxHQUFOLENBQVUsVUFBVUMsQ0FBVixFQUFhO0FBQzVCLDZCQUFZQSxDQUFaLElBQWVDLE1BQU0sQ0FBQ0QsRUFBRUMsSUFBeEI7QUFDRCxHQUZNLEVBRUpKLE9BRkksRUFBUDtBQUdEOztBQUVELFNBQVNLLHdCQUFULENBQWtDQyxVQUFsQyxFQUE4Q0MsSUFBOUMsRUFBb0RDLEtBQXBELEVBQTJEO0FBQ3pELE1BQUlDLHFCQUFxQkYsSUFBekI7QUFDQSxNQUFNRyxTQUFTLEVBQWY7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUgsS0FBcEIsRUFBMkJHLEdBQTNCLEVBQWdDO0FBQzlCRix5QkFBcUJILFdBQVdNLHNCQUFYLENBQWtDSCxrQkFBbEMsQ0FBckI7QUFDQSxRQUFJQSxzQkFBc0IsSUFBMUIsRUFBZ0M7QUFDOUI7QUFDRDtBQUNEQyxXQUFPRyxJQUFQLENBQVlKLGtCQUFaO0FBQ0Q7QUFDRCxTQUFPQyxNQUFQO0FBQ0Q7O0FBRUQsU0FBU0kseUJBQVQsQ0FBbUNSLFVBQW5DLEVBQStDQyxJQUEvQyxFQUFxREMsS0FBckQsRUFBNEQ7QUFDMUQsTUFBSUMscUJBQXFCRixJQUF6QjtBQUNBLE1BQU1HLFNBQVMsRUFBZjtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJSCxLQUFwQixFQUEyQkcsR0FBM0IsRUFBZ0M7QUFDOUJGLHlCQUFxQkgsV0FBV1MsdUJBQVgsQ0FBbUNOLGtCQUFuQyxDQUFyQjtBQUNBLFFBQUlBLHNCQUFzQixJQUExQixFQUFnQztBQUM5QjtBQUNEO0FBQ0RDLFdBQU9HLElBQVAsQ0FBWUosa0JBQVo7QUFDRDtBQUNELFNBQU9DLE9BQU9WLE9BQVAsRUFBUDtBQUNEOztBQUVELFNBQVNnQixvQkFBVCxDQUE4QlYsVUFBOUIsRUFBMENDLElBQTFDLEVBQWdEVSxTQUFoRCxFQUEyRDtBQUN6RCxNQUFNQyxTQUFTYix5QkFBeUJDLFVBQXpCLEVBQXFDQyxJQUFyQyxFQUEyQyxHQUEzQyxDQUFmO0FBQ0EsTUFBTUcsU0FBUyxFQUFmO0FBQ0EsT0FBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlPLE9BQU9DLE1BQTNCLEVBQW1DUixHQUFuQyxFQUF3QztBQUN0QyxRQUFJTSxVQUFVQyxPQUFPUCxDQUFQLENBQVYsQ0FBSixFQUEwQjtBQUN4QkQsYUFBT0csSUFBUCxDQUFZSyxPQUFPUCxDQUFQLENBQVo7QUFDRCxLQUZELE1BRU87QUFDTDtBQUNEO0FBQ0Y7QUFDRCxTQUFPRCxNQUFQO0FBQ0Q7O0FBRUQsU0FBU1UscUJBQVQsQ0FBK0JkLFVBQS9CLEVBQTJDQyxJQUEzQyxFQUFpRFUsU0FBakQsRUFBNEQ7QUFDMUQsTUFBTUMsU0FBU0osMEJBQTBCUixVQUExQixFQUFzQ0MsSUFBdEMsRUFBNEMsR0FBNUMsQ0FBZjtBQUNBLE1BQU1HLFNBQVMsRUFBZjtBQUNBLE9BQUssSUFBSUMsSUFBSU8sT0FBT0MsTUFBUCxHQUFnQixDQUE3QixFQUFnQ1IsS0FBSyxDQUFyQyxFQUF3Q0EsR0FBeEMsRUFBNkM7QUFDM0MsUUFBSU0sVUFBVUMsT0FBT1AsQ0FBUCxDQUFWLENBQUosRUFBMEI7QUFDeEJELGFBQU9HLElBQVAsQ0FBWUssT0FBT1AsQ0FBUCxDQUFaO0FBQ0QsS0FGRCxNQUVPO0FBQ0w7QUFDRDtBQUNGO0FBQ0QsU0FBT0QsT0FBT1YsT0FBUCxFQUFQO0FBQ0Q7O0FBRUQsU0FBU3FCLGNBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUlBLFNBQVNILE1BQVQsS0FBb0IsQ0FBeEIsRUFBMkI7QUFDekIsV0FBTyxFQUFQO0FBQ0Q7QUFDRCxNQUFJSSxrQkFBa0JELFNBQVMsQ0FBVCxDQUF0QjtBQUNBLFNBQU9BLFNBQVNFLE1BQVQsQ0FBZ0IsVUFBVUMsY0FBVixFQUEwQjtBQUMvQyxRQUFNQyxNQUFNRCxlQUFlckIsSUFBZixHQUFzQm1CLGdCQUFnQm5CLElBQWxEO0FBQ0EsUUFBSW1CLGdCQUFnQm5CLElBQWhCLEdBQXVCcUIsZUFBZXJCLElBQTFDLEVBQWdEO0FBQzlDbUIsd0JBQWtCRSxjQUFsQjtBQUNEO0FBQ0QsV0FBT0MsR0FBUDtBQUNELEdBTk0sQ0FBUDtBQU9EOztBQUVELFNBQVNDLFlBQVQsQ0FBc0JwQixJQUF0QixFQUE0QjtBQUMxQixNQUFJcUIsU0FBU3JCLElBQWI7QUFDQSxTQUFPcUIsT0FBT0EsTUFBUCxJQUFpQixJQUFqQixJQUF5QkEsT0FBT0EsTUFBUCxDQUFjQyxJQUFkLElBQXNCLElBQXRELEVBQTREO0FBQzFERCxhQUFTQSxPQUFPQSxNQUFoQjtBQUNEO0FBQ0QsU0FBT0EsTUFBUDtBQUNEOztBQUVELFNBQVNFLHlCQUFULENBQW1DeEIsVUFBbkMsRUFBK0NDLElBQS9DLEVBQXFEO0FBQ25ELE1BQU13QixvQkFBb0JmLHFCQUFxQlYsVUFBckIsRUFBaUNDLElBQWpDLEVBQXVDeUIsb0JBQW9CekIsSUFBcEIsQ0FBdkMsQ0FBMUI7QUFDQSxNQUFNMEIsY0FBY0Ysa0JBQWtCWixNQUFsQixHQUEyQixDQUEzQjtBQUNoQlksb0JBQWtCQSxrQkFBa0JaLE1BQWxCLEdBQTJCLENBQTdDLEVBQWdEZSxLQUFoRCxDQUFzRCxDQUF0RCxDQURnQjtBQUVoQjNCLE9BQUsyQixLQUFMLENBQVcsQ0FBWCxDQUZKO0FBR0EsTUFBSXhCLFNBQVN1QixXQUFiO0FBQ0EsT0FBSyxJQUFJdEIsSUFBSXNCLFdBQWIsRUFBMEJ0QixJQUFJTCxXQUFXNkIsSUFBWCxDQUFnQmhCLE1BQTlDLEVBQXNEUixHQUF0RCxFQUEyRDtBQUN6RCxRQUFJTCxXQUFXNkIsSUFBWCxDQUFnQnhCLENBQWhCLE1BQXVCLElBQTNCLEVBQWlDO0FBQy9CRCxlQUFTQyxJQUFJLENBQWI7QUFDQTtBQUNEO0FBQ0QsUUFBSUwsV0FBVzZCLElBQVgsQ0FBZ0J4QixDQUFoQixNQUF1QixHQUF2QixJQUE4QkwsV0FBVzZCLElBQVgsQ0FBZ0J4QixDQUFoQixNQUF1QixJQUFyRCxJQUE2REwsV0FBVzZCLElBQVgsQ0FBZ0J4QixDQUFoQixNQUF1QixJQUF4RixFQUE4RjtBQUM1RjtBQUNEO0FBQ0RELGFBQVNDLElBQUksQ0FBYjtBQUNEO0FBQ0QsU0FBT0QsTUFBUDtBQUNEOztBQUVELFNBQVNzQixtQkFBVCxDQUE2QnpCLElBQTdCLEVBQW1DO0FBQ2pDLFNBQU8sVUFBQzZCLEtBQUQsVUFBVyxDQUFDQSxNQUFNQyxJQUFOLEtBQWUsT0FBZixJQUEyQkQsTUFBTUMsSUFBTixLQUFlLE1BQTNDO0FBQ1hELFVBQU1FLEdBQU4sQ0FBVUMsS0FBVixDQUFnQkMsSUFBaEIsS0FBeUJKLE1BQU1FLEdBQU4sQ0FBVUcsR0FBVixDQUFjRCxJQUQ1QjtBQUVYSixVQUFNRSxHQUFOLENBQVVHLEdBQVYsQ0FBY0QsSUFBZCxLQUF1QmpDLEtBQUsrQixHQUFMLENBQVNHLEdBQVQsQ0FBYUQsSUFGcEMsRUFBUDtBQUdEOztBQUVELFNBQVNFLDJCQUFULENBQXFDcEMsVUFBckMsRUFBaURDLElBQWpELEVBQXVEO0FBQ3JELE1BQU13QixvQkFBb0JYLHNCQUFzQmQsVUFBdEIsRUFBa0NDLElBQWxDLEVBQXdDeUIsb0JBQW9CekIsSUFBcEIsQ0FBeEMsQ0FBMUI7QUFDQSxNQUFNb0MsZ0JBQWdCWixrQkFBa0JaLE1BQWxCLEdBQTJCLENBQTNCLEdBQStCWSxrQkFBa0IsQ0FBbEIsRUFBcUJHLEtBQXJCLENBQTJCLENBQTNCLENBQS9CLEdBQStEM0IsS0FBSzJCLEtBQUwsQ0FBVyxDQUFYLENBQXJGO0FBQ0EsTUFBSXhCLFNBQVNpQyxhQUFiO0FBQ0EsT0FBSyxJQUFJaEMsSUFBSWdDLGdCQUFnQixDQUE3QixFQUFnQ2hDLElBQUksQ0FBcEMsRUFBdUNBLEdBQXZDLEVBQTRDO0FBQzFDLFFBQUlMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsR0FBdkIsSUFBOEJMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsSUFBekQsRUFBK0Q7QUFDN0Q7QUFDRDtBQUNERCxhQUFTQyxDQUFUO0FBQ0Q7QUFDRCxTQUFPRCxNQUFQO0FBQ0Q7O0FBRUQsU0FBU2tDLG1CQUFULENBQTZCQyxJQUE3QixFQUFtQztBQUNqQyxTQUFPQSxRQUFRLElBQVI7QUFDRkEsT0FBS1IsSUFBTCxLQUFjLGdCQURaO0FBRUZRLE9BQUtDLE1BQUwsSUFBZSxJQUZiO0FBR0ZELE9BQUtDLE1BQUwsQ0FBWUMsSUFBWixLQUFxQixTQUhuQjtBQUlGRixPQUFLRyxTQUFMLElBQWtCLElBSmhCO0FBS0ZILE9BQUtHLFNBQUwsQ0FBZTdCLE1BQWYsS0FBMEIsQ0FMeEI7QUFNRjBCLE9BQUtHLFNBQUwsQ0FBZSxDQUFmLEVBQWtCWCxJQUFsQixLQUEyQixTQU5oQztBQU9EOztBQUVELFNBQVNZLHdCQUFULENBQWtDMUMsSUFBbEMsRUFBd0M7QUFDdEMsTUFBSUEsS0FBSzhCLElBQUwsS0FBYyxxQkFBbEIsRUFBeUM7QUFDdkMsV0FBTyxLQUFQO0FBQ0Q7QUFDRCxNQUFJOUIsS0FBSzJDLFlBQUwsQ0FBa0IvQixNQUFsQixLQUE2QixDQUFqQyxFQUFvQztBQUNsQyxXQUFPLEtBQVA7QUFDRDtBQUNELE1BQU1nQyxPQUFPNUMsS0FBSzJDLFlBQUwsQ0FBa0IsQ0FBbEIsQ0FBYjtBQUNBLE1BQU1FLGlCQUFpQkQsS0FBS0UsRUFBTDtBQUNqQkYsT0FBS0UsRUFBTCxDQUFRaEIsSUFBUixLQUFpQixZQUFqQixJQUFpQ2MsS0FBS0UsRUFBTCxDQUFRaEIsSUFBUixLQUFpQixlQURqQztBQUVsQk8sc0JBQW9CTyxLQUFLRyxJQUF6QixDQUZMO0FBR0EsTUFBTUMsZ0NBQWdDSixLQUFLRSxFQUFMO0FBQ2hDRixPQUFLRSxFQUFMLENBQVFoQixJQUFSLEtBQWlCLFlBQWpCLElBQWlDYyxLQUFLRSxFQUFMLENBQVFoQixJQUFSLEtBQWlCLGVBRGxCO0FBRWpDYyxPQUFLRyxJQUFMLElBQWEsSUFGb0I7QUFHakNILE9BQUtHLElBQUwsQ0FBVWpCLElBQVYsS0FBbUIsZ0JBSGM7QUFJakNjLE9BQUtHLElBQUwsQ0FBVVIsTUFBVixJQUFvQixJQUphO0FBS2pDSyxPQUFLRyxJQUFMLENBQVVSLE1BQVYsQ0FBaUJULElBQWpCLEtBQTBCLGtCQUxPO0FBTWpDTyxzQkFBb0JPLEtBQUtHLElBQUwsQ0FBVVIsTUFBVixDQUFpQlUsTUFBckMsQ0FOTDtBQU9BLFNBQU9KLGtCQUFrQkcsNkJBQXpCO0FBQ0Q7O0FBRUQsU0FBU0UsbUJBQVQsQ0FBNkJsRCxJQUE3QixFQUFtQztBQUNqQyxTQUFPQSxLQUFLOEIsSUFBTCxLQUFjLG1CQUFkLElBQXFDOUIsS0FBS21ELFVBQUwsSUFBbUIsSUFBeEQsSUFBZ0VuRCxLQUFLbUQsVUFBTCxDQUFnQnZDLE1BQWhCLEdBQXlCLENBQWhHO0FBQ0Q7O0FBRUQsU0FBU3dDLG1CQUFULENBQTZCcEQsSUFBN0IsRUFBbUM7QUFDakMsU0FBT0EsS0FBSzhCLElBQUwsS0FBYywyQkFBZCxJQUE2QzlCLEtBQUtxRCxlQUFMLENBQXFCQyxVQUF6RTtBQUNEOztBQUVELFNBQVNDLHdCQUFULENBQWtDdkQsSUFBbEMsRUFBd0M7QUFDdEMsU0FBTzBDLHlCQUF5QjFDLElBQXpCLEtBQWtDa0Qsb0JBQW9CbEQsSUFBcEIsQ0FBbEMsSUFBK0RvRCxvQkFBb0JwRCxJQUFwQixDQUF0RTtBQUNEOztBQUVELFNBQVN3RCxlQUFULENBQXlCQyxTQUF6QixFQUFvQ0MsVUFBcEMsRUFBZ0Q7QUFDOUMsTUFBTXJDLFNBQVNvQyxVQUFVcEMsTUFBekIsQ0FEOEM7QUFFWjtBQUNoQ0EsU0FBT0MsSUFBUCxDQUFZcUMsT0FBWixDQUFvQkYsU0FBcEIsQ0FEZ0M7QUFFaENwQyxTQUFPQyxJQUFQLENBQVlxQyxPQUFaLENBQW9CRCxVQUFwQixDQUZnQztBQUdoQ0UsTUFIZ0MsRUFGWSxtQ0FFdkNDLFVBRnVDLGFBRTNCQyxXQUYyQjtBQU05QyxNQUFNQyxlQUFlMUMsT0FBT0MsSUFBUCxDQUFZMEMsS0FBWixDQUFrQkgsVUFBbEIsRUFBOEJDLGNBQWMsQ0FBNUMsQ0FBckIsQ0FOOEM7QUFPOUMseUJBQTBCQyxZQUExQiw4SEFBd0MsS0FBN0JFLFdBQTZCO0FBQ3RDLFVBQUksQ0FBQ1YseUJBQXlCVSxXQUF6QixDQUFMLEVBQTRDO0FBQzFDLGVBQU8sS0FBUDtBQUNEO0FBQ0YsS0FYNkM7QUFZOUMsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU0MscUJBQVQsQ0FBK0JsRSxJQUEvQixFQUFxQztBQUNuQyxNQUFJQSxLQUFLQSxJQUFMLENBQVVtRSxVQUFWLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DLFdBQU8sYUFBUDtBQUNEO0FBQ0QsTUFBSW5FLEtBQUtBLElBQUwsQ0FBVW1FLFVBQVYsS0FBeUIsUUFBN0IsRUFBdUM7QUFDckMsV0FBTyxlQUFQO0FBQ0Q7QUFDRCxTQUFPLFFBQVA7QUFDRDs7QUFFRCxTQUFTQyxhQUFULENBQXVCQyxPQUF2QixFQUFnQ1osU0FBaEMsRUFBMkNDLFVBQTNDLEVBQXVEWSxLQUF2RCxFQUE4RDtBQUM1RCxNQUFNdkUsYUFBYXNFLFFBQVFFLGFBQVIsRUFBbkI7O0FBRUEsTUFBTUMsWUFBWXBELGFBQWFxQyxVQUFVekQsSUFBdkIsQ0FBbEI7QUFDQSxNQUFNeUUsaUJBQWlCdEMsNEJBQTRCcEMsVUFBNUIsRUFBd0N5RSxTQUF4QyxDQUF2QjtBQUNBLE1BQU1FLGVBQWVuRCwwQkFBMEJ4QixVQUExQixFQUFzQ3lFLFNBQXRDLENBQXJCOztBQUVBLE1BQU1HLGFBQWF2RCxhQUFhc0MsV0FBVzFELElBQXhCLENBQW5CO0FBQ0EsTUFBTTRFLGtCQUFrQnpDLDRCQUE0QnBDLFVBQTVCLEVBQXdDNEUsVUFBeEMsQ0FBeEI7QUFDQSxNQUFNRSxnQkFBZ0J0RCwwQkFBMEJ4QixVQUExQixFQUFzQzRFLFVBQXRDLENBQXRCO0FBQ0EsTUFBTUcsU0FBU3RCLGdCQUFnQmdCLFNBQWhCLEVBQTJCRyxVQUEzQixDQUFmOztBQUVBLE1BQUlJLFVBQVVoRixXQUFXNkIsSUFBWCxDQUFnQm9ELFNBQWhCLENBQTBCSixlQUExQixFQUEyQ0MsYUFBM0MsQ0FBZDtBQUNBLE1BQUlFLFFBQVFBLFFBQVFuRSxNQUFSLEdBQWlCLENBQXpCLE1BQWdDLElBQXBDLEVBQTBDO0FBQ3hDbUUscUJBQWFBLE9BQWI7QUFDRDs7QUFFRCxNQUFNRSxxQkFBaUJmLHNCQUFzQlQsU0FBdEIsQ0FBakIscUJBQTBEQSxVQUFVeUIsV0FBcEUsT0FBTjtBQUNBLE1BQU1DLDRCQUFvQnpCLFdBQVd3QixXQUEvQixrQkFBZ0RoQixzQkFBc0JSLFVBQXRCLENBQWhELENBQU47QUFDQSxNQUFNMEIsVUFBYUQsWUFBYiw2QkFBMENiLEtBQTFDLFVBQW1EVyxXQUF6RDs7QUFFQSxNQUFJWCxVQUFVLFFBQWQsRUFBd0I7QUFDdEJELFlBQVFnQixNQUFSLENBQWU7QUFDYnJGLFlBQU0wRCxXQUFXMUQsSUFESjtBQUVib0Ysc0JBRmE7QUFHYkUsV0FBS1IsVUFBVyxVQUFDUyxLQUFELFVBQVdBLE1BQU1DLGdCQUFOO0FBQ3pCLFNBQUNmLGNBQUQsRUFBaUJJLGFBQWpCLENBRHlCO0FBRXpCRSxrQkFBVWhGLFdBQVc2QixJQUFYLENBQWdCb0QsU0FBaEIsQ0FBMEJQLGNBQTFCLEVBQTBDRyxlQUExQyxDQUZlLENBQVgsRUFISCxFQUFmOzs7QUFRRCxHQVRELE1BU08sSUFBSU4sVUFBVSxPQUFkLEVBQXVCO0FBQzVCRCxZQUFRZ0IsTUFBUixDQUFlO0FBQ2JyRixZQUFNMEQsV0FBVzFELElBREo7QUFFYm9GLHNCQUZhO0FBR2JFLFdBQUtSLFVBQVcsVUFBQ1MsS0FBRCxVQUFXQSxNQUFNQyxnQkFBTjtBQUN6QixTQUFDWixlQUFELEVBQWtCRixZQUFsQixDQUR5QjtBQUV6QjNFLG1CQUFXNkIsSUFBWCxDQUFnQm9ELFNBQWhCLENBQTBCSCxhQUExQixFQUF5Q0gsWUFBekMsSUFBeURLLE9BRmhDLENBQVgsRUFISCxFQUFmOzs7QUFRRDtBQUNGOztBQUVELFNBQVNVLGdCQUFULENBQTBCcEIsT0FBMUIsRUFBbUN0RCxRQUFuQyxFQUE2QzJFLFVBQTdDLEVBQXlEcEIsS0FBekQsRUFBZ0U7QUFDOURvQixhQUFXQyxPQUFYLENBQW1CLFVBQVVDLEdBQVYsRUFBZTtBQUNoQyxRQUFNQyxRQUFROUUsU0FBUytFLElBQVQsY0FBYyxTQUFTQyxhQUFULENBQXVCQyxZQUF2QixFQUFxQztBQUMvRCxlQUFPQSxhQUFhbkcsSUFBYixHQUFvQitGLElBQUkvRixJQUEvQjtBQUNELE9BRmEsT0FBdUJrRyxhQUF2QixLQUFkO0FBR0EzQixrQkFBY0MsT0FBZCxFQUF1QndCLEtBQXZCLEVBQThCRCxHQUE5QixFQUFtQ3RCLEtBQW5DO0FBQ0QsR0FMRDtBQU1EOztBQUVELFNBQVMyQixvQkFBVCxDQUE4QjVCLE9BQTlCLEVBQXVDdEQsUUFBdkMsRUFBaUQ7QUFDL0MsTUFBTTJFLGFBQWE1RSxlQUFlQyxRQUFmLENBQW5CO0FBQ0EsTUFBSSxDQUFDMkUsV0FBVzlFLE1BQWhCLEVBQXdCO0FBQ3RCO0FBQ0Q7O0FBRUQ7QUFDQSxNQUFNc0YsbUJBQW1CekcsUUFBUXNCLFFBQVIsQ0FBekI7QUFDQSxNQUFNb0YsZ0JBQWdCckYsZUFBZW9GLGdCQUFmLENBQXRCO0FBQ0EsTUFBSUMsY0FBY3ZGLE1BQWQsR0FBdUI4RSxXQUFXOUUsTUFBdEMsRUFBOEM7QUFDNUM2RSxxQkFBaUJwQixPQUFqQixFQUEwQjZCLGdCQUExQixFQUE0Q0MsYUFBNUMsRUFBMkQsT0FBM0Q7QUFDQTtBQUNEO0FBQ0RWLG1CQUFpQnBCLE9BQWpCLEVBQTBCdEQsUUFBMUIsRUFBb0MyRSxVQUFwQyxFQUFnRCxRQUFoRDtBQUNEOztBQUVELElBQU1VLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQVU7QUFDOUIsTUFBSUQsSUFBSUMsQ0FBUixFQUFXO0FBQ1QsV0FBTyxDQUFDLENBQVI7QUFDRDtBQUNELE1BQUlELElBQUlDLENBQVIsRUFBVztBQUNULFdBQU8sQ0FBUDtBQUNEO0FBQ0QsU0FBTyxDQUFQO0FBQ0QsQ0FSRDs7QUFVQTtBQUNBLElBQU1DLHNCQUFzQixPQUE1QjtBQUNBLElBQU1DLHFCQUFxQixTQUFyQkEsa0JBQXFCLENBQUN4RyxJQUFELEVBQU95RyxXQUFQLEVBQXVCO0FBQ2hELE1BQU1DLFFBQVExRyxLQUFLMEcsS0FBbkI7QUFDQSxTQUFPRCxjQUFjRSxPQUFPRCxLQUFQLEVBQWNELFdBQWQsRUFBZCxHQUE0Q0MsS0FBbkQ7QUFDRCxDQUhEOztBQUtBLFNBQVNFLFNBQVQsQ0FBbUJDLGtCQUFuQixFQUF1QztBQUNyQyxNQUFNQyxhQUFhRCxtQkFBbUJ2QyxLQUFuQixLQUE2QixLQUE3QixHQUFxQyxDQUFyQyxHQUF5QyxDQUFDLENBQTdEO0FBQ0EsTUFBTXlDLGtCQUFrQkYsbUJBQW1CRSxlQUEzQztBQUNBLE1BQU1DLHVCQUF1QkQsb0JBQW9CLFFBQXBCO0FBQ3ZCRixxQkFBbUJFLGVBQW5CLEtBQXVDLEtBQXZDLEdBQStDLENBQS9DLEdBQW1ELENBQUMsQ0FEN0IsQ0FBN0I7O0FBR0Esc0JBQU8sU0FBU0UsYUFBVCxDQUF1QkMsS0FBdkIsRUFBOEJDLEtBQTlCLEVBQXFDO0FBQzFDLFVBQU1DLFVBQVVaLG1CQUFtQlUsS0FBbkIsRUFBMEJMLG1CQUFtQlEsZUFBN0MsQ0FBaEI7QUFDQSxVQUFNQyxVQUFVZCxtQkFBbUJXLEtBQW5CLEVBQTBCTixtQkFBbUJRLGVBQTdDLENBQWhCO0FBQ0EsVUFBSWxILFNBQVMsQ0FBYjs7QUFFQSxVQUFJLENBQUMsZ0NBQVNpSCxPQUFULEVBQWtCLEdBQWxCLENBQUQsSUFBMkIsQ0FBQyxnQ0FBU0UsT0FBVCxFQUFrQixHQUFsQixDQUFoQyxFQUF3RDtBQUN0RG5ILGlCQUFTaUcsY0FBY2dCLE9BQWQsRUFBdUJFLE9BQXZCLENBQVQ7QUFDRCxPQUZELE1BRU87QUFDTCxZQUFNQyxJQUFJSCxRQUFRSSxLQUFSLENBQWMsR0FBZCxDQUFWO0FBQ0EsWUFBTUMsSUFBSUgsUUFBUUUsS0FBUixDQUFjLEdBQWQsQ0FBVjtBQUNBLFlBQU1uQixJQUFJa0IsRUFBRTNHLE1BQVo7QUFDQSxZQUFNMEYsSUFBSW1CLEVBQUU3RyxNQUFaOztBQUVBLGFBQUssSUFBSVIsSUFBSSxDQUFiLEVBQWdCQSxJQUFJc0gsS0FBS0MsR0FBTCxDQUFTdEIsQ0FBVCxFQUFZQyxDQUFaLENBQXBCLEVBQW9DbEcsR0FBcEMsRUFBeUM7QUFDdkNELG1CQUFTaUcsY0FBY21CLEVBQUVuSCxDQUFGLENBQWQsRUFBb0JxSCxFQUFFckgsQ0FBRixDQUFwQixDQUFUO0FBQ0EsY0FBSUQsTUFBSixFQUFZLENBQUUsTUFBUTtBQUN2Qjs7QUFFRCxZQUFJLENBQUNBLE1BQUQsSUFBV2tHLE1BQU1DLENBQXJCLEVBQXdCO0FBQ3RCbkcsbUJBQVNrRyxJQUFJQyxDQUFKLEdBQVEsQ0FBQyxDQUFULEdBQWEsQ0FBdEI7QUFDRDtBQUNGOztBQUVEbkcsZUFBU0EsU0FBUzJHLFVBQWxCOztBQUVBO0FBQ0EsVUFBSSxDQUFDM0csTUFBRCxJQUFXNkcsb0JBQWYsRUFBcUM7QUFDbkM3RyxpQkFBUzZHLHVCQUF1Qlo7QUFDOUJjLGNBQU1sSCxJQUFOLENBQVdtRSxVQUFYLElBQXlCb0MsbUJBREs7QUFFOUJZLGNBQU1uSCxJQUFOLENBQVdtRSxVQUFYLElBQXlCb0MsbUJBRkssQ0FBaEM7O0FBSUQ7O0FBRUQsYUFBT3BHLE1BQVA7QUFDRCxLQWxDRCxPQUFnQjhHLGFBQWhCO0FBbUNEOztBQUVELFNBQVNXLHdCQUFULENBQWtDN0csUUFBbEMsRUFBNEM4RixrQkFBNUMsRUFBZ0U7QUFDOUQsTUFBTWdCLGlCQUFpQix5QkFBUTlHLFFBQVIsRUFBa0IsVUFBQytHLElBQUQsVUFBVUEsS0FBS2pJLElBQWYsRUFBbEIsQ0FBdkI7O0FBRUEsTUFBTWtJLFdBQVduQixVQUFVQyxrQkFBVixDQUFqQjs7QUFFQTtBQUNBLE1BQU1tQixhQUFhQyxPQUFPQyxJQUFQLENBQVlMLGNBQVosRUFBNEJqRSxJQUE1QixDQUFpQyxVQUFVeUMsQ0FBVixFQUFhQyxDQUFiLEVBQWdCO0FBQ2xFLFdBQU9ELElBQUlDLENBQVg7QUFDRCxHQUZrQixDQUFuQjs7QUFJQTtBQUNBMEIsYUFBV3JDLE9BQVgsQ0FBbUIsVUFBVXdDLFNBQVYsRUFBcUI7QUFDdENOLG1CQUFlTSxTQUFmLEVBQTBCdkUsSUFBMUIsQ0FBK0JtRSxRQUEvQjtBQUNELEdBRkQ7O0FBSUE7QUFDQSxNQUFJSyxVQUFVLENBQWQ7QUFDQSxNQUFNQyxvQkFBb0JMLFdBQVdNLE1BQVgsQ0FBa0IsVUFBVUMsR0FBVixFQUFlSixTQUFmLEVBQTBCO0FBQ3BFTixtQkFBZU0sU0FBZixFQUEwQnhDLE9BQTFCLENBQWtDLFVBQVVLLFlBQVYsRUFBd0I7QUFDeER1QyxpQkFBT3ZDLGFBQWFVLEtBQXBCLGlCQUE2QlYsYUFBYWhHLElBQWIsQ0FBa0JtRSxVQUEvQyxLQUErRHFFLFNBQVNMLFNBQVQsRUFBb0IsRUFBcEIsSUFBMEJDLE9BQXpGO0FBQ0FBLGlCQUFXLENBQVg7QUFDRCxLQUhEO0FBSUEsV0FBT0csR0FBUDtBQUNELEdBTnlCLEVBTXZCLEVBTnVCLENBQTFCOztBQVFBO0FBQ0F4SCxXQUFTNEUsT0FBVCxDQUFpQixVQUFVSyxZQUFWLEVBQXdCO0FBQ3ZDQSxpQkFBYW5HLElBQWIsR0FBb0J3SSx5QkFBcUJyQyxhQUFhVSxLQUFsQyxpQkFBMkNWLGFBQWFoRyxJQUFiLENBQWtCbUUsVUFBN0QsRUFBcEI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQ7O0FBRUEsU0FBU3NFLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQWdDQyxVQUFoQyxFQUE0Q0MsSUFBNUMsRUFBa0RDLFdBQWxELEVBQStEO0FBQzdELE9BQUssSUFBSXpJLElBQUksQ0FBUixFQUFXMEksSUFBSUgsV0FBVy9ILE1BQS9CLEVBQXVDUixJQUFJMEksQ0FBM0MsRUFBOEMxSSxHQUE5QyxFQUFtRDtBQUNRdUksZUFBV3ZJLENBQVgsQ0FEUixDQUN6QzJJLE9BRHlDLGlCQUN6Q0EsT0FEeUMsQ0FDaENDLGNBRGdDLGlCQUNoQ0EsY0FEZ0MsQ0FDaEJDLEtBRGdCLGlCQUNoQkEsS0FEZ0IsdUNBQ1RDLFFBRFMsQ0FDVEEsUUFEUyx5Q0FDRSxDQURGO0FBRWpELFFBQUksNEJBQVVOLElBQVYsRUFBZ0JHLE9BQWhCLEVBQXlCQyxrQkFBa0IsRUFBRUcsV0FBVyxJQUFiLEVBQTNDLENBQUosRUFBcUU7QUFDbkUsYUFBT1QsTUFBTU8sS0FBTixJQUFlQyxXQUFXTCxXQUFqQztBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTTyxXQUFULENBQXFCL0UsT0FBckIsRUFBOEJxRSxLQUE5QixFQUFxQ1csV0FBckMsRUFBa0RDLG1CQUFsRCxFQUF1RTtBQUNyRSxNQUFJQyxnQkFBSjtBQUNBLE1BQUkxSixhQUFKO0FBQ0EsTUFBSXdKLFlBQVl2SCxJQUFaLEtBQXFCLGVBQXpCLEVBQTBDO0FBQ3hDeUgsY0FBVSxRQUFWO0FBQ0QsR0FGRCxNQUVPLElBQUlGLFlBQVlySixJQUFaLENBQWlCbUUsVUFBakIsS0FBZ0MsTUFBaEMsSUFBMEN1RSxNQUFNYyxZQUFOLENBQW1CN0YsT0FBbkIsQ0FBMkIsTUFBM0IsTUFBdUMsQ0FBQyxDQUF0RixFQUF5RjtBQUM5RjRGLGNBQVUsTUFBVjtBQUNELEdBRk0sTUFFQTtBQUNMQSxjQUFVLDZCQUFXRixZQUFZM0MsS0FBdkIsRUFBOEJyQyxPQUE5QixDQUFWO0FBQ0Q7QUFDRCxNQUFJLENBQUNpRixvQkFBb0JHLEdBQXBCLENBQXdCRixPQUF4QixDQUFMLEVBQXVDO0FBQ3JDMUosV0FBTzRJLGdCQUFnQkMsTUFBTWdCLE1BQXRCLEVBQThCaEIsTUFBTUMsVUFBcEMsRUFBZ0RVLFlBQVkzQyxLQUE1RCxFQUFtRWdDLE1BQU1HLFdBQXpFLENBQVA7QUFDRDtBQUNELE1BQUksT0FBT2hKLElBQVAsS0FBZ0IsV0FBcEIsRUFBaUM7QUFDL0JBLFdBQU82SSxNQUFNZ0IsTUFBTixDQUFhSCxPQUFiLENBQVA7QUFDRDtBQUNELE1BQUlGLFlBQVl2SCxJQUFaLEtBQXFCLFFBQXJCLElBQWlDLENBQUN1SCxZQUFZdkgsSUFBWixDQUFpQjZILFVBQWpCLENBQTRCLFNBQTVCLENBQXRDLEVBQThFO0FBQzVFOUosWUFBUSxHQUFSO0FBQ0Q7O0FBRUQsU0FBT0EsSUFBUDtBQUNEOztBQUVELFNBQVMrSixZQUFULENBQXNCdkYsT0FBdEIsRUFBK0JnRixXQUEvQixFQUE0Q1gsS0FBNUMsRUFBbUQzSCxRQUFuRCxFQUE2RHVJLG1CQUE3RCxFQUFrRjtBQUNoRixNQUFNekosT0FBT3VKLFlBQVkvRSxPQUFaLEVBQXFCcUUsS0FBckIsRUFBNEJXLFdBQTVCLEVBQXlDQyxtQkFBekMsQ0FBYjtBQUNBLE1BQUl6SixTQUFTLENBQUMsQ0FBZCxFQUFpQjtBQUNma0IsYUFBU1QsSUFBVCxtQkFBbUIrSSxXQUFuQixJQUFnQ3hKLFVBQWhDO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTZ0ssZUFBVCxDQUF5QjdKLElBQXpCLEVBQStCO0FBQzdCLE1BQUk4SixJQUFJOUosSUFBUjtBQUNBO0FBQ0E7QUFDQTtBQUNFOEosSUFBRXpJLE1BQUYsQ0FBU1MsSUFBVCxLQUFrQixrQkFBbEIsSUFBd0NnSSxFQUFFekksTUFBRixDQUFTNEIsTUFBVCxLQUFvQjZHLENBQTVEO0FBQ0dBLElBQUV6SSxNQUFGLENBQVNTLElBQVQsS0FBa0IsZ0JBQWxCLElBQXNDZ0ksRUFBRXpJLE1BQUYsQ0FBU2tCLE1BQVQsS0FBb0J1SCxDQUYvRDtBQUdFO0FBQ0FBLFFBQUlBLEVBQUV6SSxNQUFOO0FBQ0Q7QUFDRDtBQUNFeUksSUFBRXpJLE1BQUYsQ0FBU1MsSUFBVCxLQUFrQixvQkFBbEI7QUFDR2dJLElBQUV6SSxNQUFGLENBQVNBLE1BQVQsQ0FBZ0JTLElBQWhCLEtBQXlCLHFCQUQ1QjtBQUVHZ0ksSUFBRXpJLE1BQUYsQ0FBU0EsTUFBVCxDQUFnQkEsTUFBaEIsQ0FBdUJTLElBQXZCLEtBQWdDLFNBSHJDO0FBSUU7QUFDQSxXQUFPZ0ksRUFBRXpJLE1BQUYsQ0FBU0EsTUFBVCxDQUFnQkEsTUFBdkI7QUFDRDtBQUNGOztBQUVELElBQU0wSSxRQUFRLENBQUMsU0FBRCxFQUFZLFVBQVosRUFBd0IsVUFBeEIsRUFBb0MsU0FBcEMsRUFBK0MsUUFBL0MsRUFBeUQsU0FBekQsRUFBb0UsT0FBcEUsRUFBNkUsUUFBN0UsRUFBdUYsTUFBdkYsQ0FBZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxvQkFBVCxDQUE4Qk4sTUFBOUIsRUFBc0M7QUFDcEMsTUFBTU8sYUFBYVAsT0FBT3BCLE1BQVAsQ0FBYyxVQUFVbkgsR0FBVixFQUFlOEgsS0FBZixFQUFzQmlCLEtBQXRCLEVBQTZCO0FBQzVELE9BQUdDLE1BQUgsQ0FBVWxCLEtBQVYsRUFBaUJ0RCxPQUFqQixDQUF5QixVQUFVeUUsU0FBVixFQUFxQjtBQUM1QyxVQUFJTCxNQUFNcEcsT0FBTixDQUFjeUcsU0FBZCxNQUE2QixDQUFDLENBQWxDLEVBQXFDO0FBQ25DLGNBQU0sSUFBSUMsS0FBSixnRUFBaUVDLEtBQUtDLFNBQUwsQ0FBZUgsU0FBZixDQUFqRSxRQUFOO0FBQ0Q7QUFDRCxVQUFJakosSUFBSWlKLFNBQUosTUFBbUJJLFNBQXZCLEVBQWtDO0FBQ2hDLGNBQU0sSUFBSUgsS0FBSixtREFBb0RELFNBQXBELHNCQUFOO0FBQ0Q7QUFDRGpKLFVBQUlpSixTQUFKLElBQWlCRixRQUFRLENBQXpCO0FBQ0QsS0FSRDtBQVNBLFdBQU8vSSxHQUFQO0FBQ0QsR0FYa0IsRUFXaEIsRUFYZ0IsQ0FBbkI7O0FBYUEsTUFBTXFJLGVBQWVPLE1BQU05SSxNQUFOLENBQWEsVUFBVWEsSUFBVixFQUFnQjtBQUNoRCxXQUFPLE9BQU9tSSxXQUFXbkksSUFBWCxDQUFQLEtBQTRCLFdBQW5DO0FBQ0QsR0FGb0IsQ0FBckI7O0FBSUEsTUFBTTRHLFFBQVFjLGFBQWFsQixNQUFiLENBQW9CLFVBQVVuSCxHQUFWLEVBQWVXLElBQWYsRUFBcUI7QUFDckRYLFFBQUlXLElBQUosSUFBWTRILE9BQU85SSxNQUFQLEdBQWdCLENBQTVCO0FBQ0EsV0FBT08sR0FBUDtBQUNELEdBSGEsRUFHWDhJLFVBSFcsQ0FBZDs7QUFLQSxTQUFPLEVBQUVQLFFBQVFoQixLQUFWLEVBQWlCYywwQkFBakIsRUFBUDtBQUNEOztBQUVELFNBQVNpQix5QkFBVCxDQUFtQzlCLFVBQW5DLEVBQStDO0FBQzdDLE1BQU0rQixRQUFRLEVBQWQ7QUFDQSxNQUFNQyxTQUFTLEVBQWY7O0FBRUEsTUFBTUMsY0FBY2pDLFdBQVdoSixHQUFYLENBQWUsVUFBQ2tMLFNBQUQsRUFBWVgsS0FBWixFQUFzQjtBQUMvQ2pCLFNBRCtDLEdBQ1g0QixTQURXLENBQy9DNUIsS0FEK0MsQ0FDOUI2QixjQUQ4QixHQUNYRCxTQURXLENBQ3hDM0IsUUFEd0M7QUFFdkQsUUFBSUEsV0FBVyxDQUFmO0FBQ0EsUUFBSTRCLG1CQUFtQixPQUF2QixFQUFnQztBQUM5QixVQUFJLENBQUNKLE1BQU16QixLQUFOLENBQUwsRUFBbUI7QUFDakJ5QixjQUFNekIsS0FBTixJQUFlLENBQWY7QUFDRDtBQUNEQyxpQkFBV3dCLE1BQU16QixLQUFOLEdBQVg7QUFDRCxLQUxELE1BS08sSUFBSTZCLG1CQUFtQixRQUF2QixFQUFpQztBQUN0QyxVQUFJLENBQUNILE9BQU8xQixLQUFQLENBQUwsRUFBb0I7QUFDbEIwQixlQUFPMUIsS0FBUCxJQUFnQixFQUFoQjtBQUNEO0FBQ0QwQixhQUFPMUIsS0FBUCxFQUFjM0ksSUFBZCxDQUFtQjRKLEtBQW5CO0FBQ0Q7O0FBRUQsNkJBQVlXLFNBQVosSUFBdUIzQixrQkFBdkI7QUFDRCxHQWhCbUIsQ0FBcEI7O0FBa0JBLE1BQUlMLGNBQWMsQ0FBbEI7O0FBRUFaLFNBQU9DLElBQVAsQ0FBWXlDLE1BQVosRUFBb0JoRixPQUFwQixDQUE0QixVQUFDc0QsS0FBRCxFQUFXO0FBQ3JDLFFBQU04QixjQUFjSixPQUFPMUIsS0FBUCxFQUFjckksTUFBbEM7QUFDQStKLFdBQU8xQixLQUFQLEVBQWN0RCxPQUFkLENBQXNCLFVBQUNxRixVQUFELEVBQWFkLEtBQWIsRUFBdUI7QUFDM0NVLGtCQUFZSSxVQUFaLEVBQXdCOUIsUUFBeEIsR0FBbUMsQ0FBQyxDQUFELElBQU02QixjQUFjYixLQUFwQixDQUFuQztBQUNELEtBRkQ7QUFHQXJCLGtCQUFjbkIsS0FBS3VELEdBQUwsQ0FBU3BDLFdBQVQsRUFBc0JrQyxXQUF0QixDQUFkO0FBQ0QsR0FORDs7QUFRQTlDLFNBQU9DLElBQVAsQ0FBWXdDLEtBQVosRUFBbUIvRSxPQUFuQixDQUEyQixVQUFDdUYsR0FBRCxFQUFTO0FBQ2xDLFFBQU1DLG9CQUFvQlQsTUFBTVEsR0FBTixDQUExQjtBQUNBckMsa0JBQWNuQixLQUFLdUQsR0FBTCxDQUFTcEMsV0FBVCxFQUFzQnNDLG9CQUFvQixDQUExQyxDQUFkO0FBQ0QsR0FIRDs7QUFLQSxTQUFPO0FBQ0x4QyxnQkFBWWlDLFdBRFA7QUFFTC9CLGlCQUFhQSxjQUFjLEVBQWQsR0FBbUJuQixLQUFLMEQsR0FBTCxDQUFTLEVBQVQsRUFBYTFELEtBQUsyRCxJQUFMLENBQVUzRCxLQUFLNEQsS0FBTCxDQUFXekMsV0FBWCxDQUFWLENBQWIsQ0FBbkIsR0FBc0UsRUFGOUUsRUFBUDs7QUFJRDs7QUFFRCxTQUFTMEMscUJBQVQsQ0FBK0JsSCxPQUEvQixFQUF3Q21ILGNBQXhDLEVBQXdEO0FBQ3RELE1BQU1DLFdBQVdySyxhQUFhb0ssZUFBZXhMLElBQTVCLENBQWpCO0FBQ0EsTUFBTXdCLG9CQUFvQmY7QUFDeEI0RCxVQUFRRSxhQUFSLEVBRHdCLEVBQ0NrSCxRQURELEVBQ1doSyxvQkFBb0JnSyxRQUFwQixDQURYLENBQTFCOztBQUdBLE1BQUlDLFlBQVlELFNBQVM5SixLQUFULENBQWUsQ0FBZixDQUFoQjtBQUNBLE1BQUlILGtCQUFrQlosTUFBbEIsR0FBMkIsQ0FBL0IsRUFBa0M7QUFDaEM4SyxnQkFBWWxLLGtCQUFrQkEsa0JBQWtCWixNQUFsQixHQUEyQixDQUE3QyxFQUFnRGUsS0FBaEQsQ0FBc0QsQ0FBdEQsQ0FBWjtBQUNEO0FBQ0QsU0FBTyxVQUFDNEQsS0FBRCxVQUFXQSxNQUFNb0csb0JBQU4sQ0FBMkIsQ0FBQ0YsU0FBUzlKLEtBQVQsQ0FBZSxDQUFmLENBQUQsRUFBb0IrSixTQUFwQixDQUEzQixFQUEyRCxJQUEzRCxDQUFYLEVBQVA7QUFDRDs7QUFFRCxTQUFTRSx3QkFBVCxDQUFrQ3ZILE9BQWxDLEVBQTJDd0gsYUFBM0MsRUFBMERMLGNBQTFELEVBQTBFO0FBQ3hFLE1BQU16TCxhQUFhc0UsUUFBUUUsYUFBUixFQUFuQjtBQUNBLE1BQU1rSCxXQUFXckssYUFBYW9LLGVBQWV4TCxJQUE1QixDQUFqQjtBQUNBLE1BQU04TCxXQUFXMUssYUFBYXlLLGNBQWM3TCxJQUEzQixDQUFqQjtBQUNBLE1BQU0rTCxnQkFBZ0I7QUFDcEJ4Syw0QkFBMEJ4QixVQUExQixFQUFzQzBMLFFBQXRDLENBRG9CO0FBRXBCdEosOEJBQTRCcEMsVUFBNUIsRUFBd0MrTCxRQUF4QyxDQUZvQixDQUF0Qjs7QUFJQSxNQUFLLE9BQUQsQ0FBVUUsSUFBVixDQUFlak0sV0FBVzZCLElBQVgsQ0FBZ0JvRCxTQUFoQixDQUEwQitHLGNBQWMsQ0FBZCxDQUExQixFQUE0Q0EsY0FBYyxDQUFkLENBQTVDLENBQWYsQ0FBSixFQUFtRjtBQUNqRixXQUFPLFVBQUN4RyxLQUFELFVBQVdBLE1BQU0wRyxXQUFOLENBQWtCRixhQUFsQixDQUFYLEVBQVA7QUFDRDtBQUNELFNBQU92QixTQUFQO0FBQ0Q7O0FBRUQsU0FBUzBCLHlCQUFULENBQW1DN0gsT0FBbkMsRUFBNEN0RCxRQUE1QyxFQUFzRG9MLHNCQUF0RCxFQUE4RUMsYUFBOUUsRUFBNkY7QUFDM0YsTUFBTUMsK0JBQStCLFNBQS9CQSw0QkFBK0IsQ0FBQ1IsYUFBRCxFQUFnQkwsY0FBaEIsRUFBbUM7QUFDdEUsUUFBTWMsc0JBQXNCakksUUFBUUUsYUFBUixHQUF3QmdJLEtBQXhCLENBQThCdkksS0FBOUI7QUFDMUJ3SCxtQkFBZXhMLElBQWYsQ0FBb0IrQixHQUFwQixDQUF3QkcsR0FBeEIsQ0FBNEJELElBREY7QUFFMUI0SixrQkFBYzdMLElBQWQsQ0FBbUIrQixHQUFuQixDQUF1QkMsS0FBdkIsQ0FBNkJDLElBQTdCLEdBQW9DLENBRlYsQ0FBNUI7OztBQUtBLFdBQU9xSyxvQkFBb0JyTCxNQUFwQixDQUEyQixVQUFDZ0IsSUFBRCxVQUFVLENBQUNBLEtBQUt1SyxJQUFMLEdBQVk1TCxNQUF2QixFQUEzQixFQUEwREEsTUFBakU7QUFDRCxHQVBEO0FBUUEsTUFBTTZMLDRCQUE0QixTQUE1QkEseUJBQTRCLENBQUNaLGFBQUQsRUFBZ0JMLGNBQWhCLFVBQW1DSyxjQUFjaE0sSUFBZCxHQUFxQixDQUFyQixJQUEwQjJMLGVBQWUzTCxJQUE1RSxFQUFsQztBQUNBLE1BQUkyTCxpQkFBaUJ6SyxTQUFTLENBQVQsQ0FBckI7O0FBRUFBLFdBQVNpRCxLQUFULENBQWUsQ0FBZixFQUFrQjJCLE9BQWxCLENBQTBCLFVBQVVrRyxhQUFWLEVBQXlCO0FBQ2pELFFBQU1hLG9CQUFvQkwsNkJBQTZCUixhQUE3QixFQUE0Q0wsY0FBNUMsQ0FBMUI7QUFDQSxRQUFNbUIseUJBQXlCRiwwQkFBMEJaLGFBQTFCLEVBQXlDTCxjQUF6QyxDQUEvQjs7QUFFQSxRQUFJVywyQkFBMkIsUUFBM0I7QUFDR0EsK0JBQTJCLDBCQURsQyxFQUM4RDtBQUM1RCxVQUFJTixjQUFjaE0sSUFBZCxLQUF1QjJMLGVBQWUzTCxJQUF0QyxJQUE4QzZNLHNCQUFzQixDQUF4RSxFQUEyRTtBQUN6RSxZQUFJTixpQkFBaUIsQ0FBQ0EsYUFBRCxJQUFrQk8sc0JBQXZDLEVBQStEO0FBQzdEdEksa0JBQVFnQixNQUFSLENBQWU7QUFDYnJGLGtCQUFNd0wsZUFBZXhMLElBRFI7QUFFYm9GLHFCQUFTLCtEQUZJO0FBR2JFLGlCQUFLaUcsc0JBQXNCbEgsT0FBdEIsRUFBK0JtSCxjQUEvQixDQUhRLEVBQWY7O0FBS0Q7QUFDRixPQVJELE1BUU8sSUFBSWtCLG9CQUFvQixDQUFwQjtBQUNOUCxpQ0FBMkIsMEJBRHpCLEVBQ3FEO0FBQzFELFlBQUlDLGlCQUFpQlAsY0FBY2hNLElBQWQsS0FBdUIyTCxlQUFlM0wsSUFBdkQsSUFBK0QsQ0FBQ3VNLGFBQUQsSUFBa0IsQ0FBQ08sc0JBQXRGLEVBQThHO0FBQzVHdEksa0JBQVFnQixNQUFSLENBQWU7QUFDYnJGLGtCQUFNd0wsZUFBZXhMLElBRFI7QUFFYm9GLHFCQUFTLG1EQUZJO0FBR2JFLGlCQUFLc0cseUJBQXlCdkgsT0FBekIsRUFBa0N3SCxhQUFsQyxFQUFpREwsY0FBakQsQ0FIUSxFQUFmOztBQUtEO0FBQ0Y7QUFDRixLQXBCRCxNQW9CTyxJQUFJa0Isb0JBQW9CLENBQXhCLEVBQTJCO0FBQ2hDckksY0FBUWdCLE1BQVIsQ0FBZTtBQUNickYsY0FBTXdMLGVBQWV4TCxJQURSO0FBRWJvRixpQkFBUyxxREFGSTtBQUdiRSxhQUFLc0cseUJBQXlCdkgsT0FBekIsRUFBa0N3SCxhQUFsQyxFQUFpREwsY0FBakQsQ0FIUSxFQUFmOztBQUtEOztBQUVEQSxxQkFBaUJLLGFBQWpCO0FBQ0QsR0FqQ0Q7QUFrQ0Q7O0FBRUQsU0FBU2Usb0JBQVQsQ0FBOEJDLE9BQTlCLEVBQXVDO0FBQ3JDLE1BQU1DLGNBQWNELFFBQVFDLFdBQVIsSUFBdUIsRUFBM0M7QUFDQSxNQUFNeEksUUFBUXdJLFlBQVl4SSxLQUFaLElBQXFCLFFBQW5DO0FBQ0EsTUFBTXlDLGtCQUFrQitGLFlBQVkvRixlQUFaLElBQStCLFFBQXZEO0FBQ0EsTUFBTU0sa0JBQWtCeUYsWUFBWXpGLGVBQVosSUFBK0IsS0FBdkQ7O0FBRUEsU0FBTyxFQUFFL0MsWUFBRixFQUFTeUMsZ0NBQVQsRUFBMEJNLGdDQUExQixFQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxJQUFNMEYsdUJBQXVCLElBQTdCOztBQUVBQyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSnBMLFVBQU0sWUFERjtBQUVKcUwsVUFBTTtBQUNKQyxnQkFBVSxhQUROO0FBRUpDLG1CQUFhLDhDQUZUO0FBR0pDLFdBQUssMEJBQVEsT0FBUixDQUhELEVBRkY7OztBQVFKQyxhQUFTLE1BUkw7QUFTSkMsWUFBUTtBQUNOO0FBQ0UxTCxZQUFNLFFBRFI7QUFFRTJMLGtCQUFZO0FBQ1YvRCxnQkFBUTtBQUNONUgsZ0JBQU0sT0FEQSxFQURFOztBQUlWNEwsdUNBQStCO0FBQzdCNUwsZ0JBQU0sT0FEdUIsRUFKckI7O0FBT1ZzSyx1QkFBZTtBQUNidEssZ0JBQU0sU0FETztBQUViLHFCQUFTaUwsb0JBRkksRUFQTDs7QUFXVnBFLG9CQUFZO0FBQ1Y3RyxnQkFBTSxPQURJO0FBRVY2TCxpQkFBTztBQUNMN0wsa0JBQU0sUUFERDtBQUVMMkwsd0JBQVk7QUFDVjFFLHVCQUFTO0FBQ1BqSCxzQkFBTSxRQURDLEVBREM7O0FBSVZrSCw4QkFBZ0I7QUFDZGxILHNCQUFNLFFBRFEsRUFKTjs7QUFPVm1ILHFCQUFPO0FBQ0xuSCxzQkFBTSxRQUREO0FBRUwsd0JBQU1pSSxLQUZELEVBUEc7O0FBV1ZiLHdCQUFVO0FBQ1JwSCxzQkFBTSxRQURFO0FBRVIsd0JBQU0sQ0FBQyxPQUFELEVBQVUsUUFBVixDQUZFLEVBWEEsRUFGUDs7O0FBa0JMOEwsa0NBQXNCLEtBbEJqQjtBQW1CTEMsc0JBQVUsQ0FBQyxTQUFELEVBQVksT0FBWixDQW5CTCxFQUZHLEVBWEY7OztBQW1DViw0QkFBb0I7QUFDbEIsa0JBQU07QUFDSixrQkFESTtBQUVKLGtCQUZJO0FBR0osb0NBSEk7QUFJSixpQkFKSSxDQURZLEVBbkNWOzs7QUEyQ1ZmLHFCQUFhO0FBQ1hoTCxnQkFBTSxRQURLO0FBRVgyTCxzQkFBWTtBQUNWcEcsNkJBQWlCO0FBQ2Z2RixvQkFBTSxTQURTO0FBRWYseUJBQVMsS0FGTSxFQURQOztBQUtWd0MsbUJBQU87QUFDTCxzQkFBTSxDQUFDLFFBQUQsRUFBVyxLQUFYLEVBQWtCLE1BQWxCLENBREQ7QUFFTCx5QkFBUyxRQUZKLEVBTEc7O0FBU1Z5Qyw2QkFBaUI7QUFDZixzQkFBTSxDQUFDLFFBQUQsRUFBVyxLQUFYLEVBQWtCLE1BQWxCLENBRFM7QUFFZix5QkFBUyxRQUZNLEVBVFAsRUFGRDs7O0FBZ0JYNkcsZ0NBQXNCLEtBaEJYLEVBM0NIOztBQTZEVkUsaUNBQXlCO0FBQ3ZCaE0sZ0JBQU0sU0FEaUI7QUFFdkIscUJBQVMsS0FGYyxFQTdEZixFQUZkOzs7QUFvRUU4TCw0QkFBc0IsS0FwRXhCLEVBRE0sQ0FUSixFQURTOzs7OztBQW9GZkcsdUJBQVEsU0FBU0MsZUFBVCxDQUF5QjNKLE9BQXpCLEVBQWtDO0FBQ3hDLFVBQU13SSxVQUFVeEksUUFBUXdJLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7QUFDQSxVQUFNVix5QkFBeUJVLFFBQVEsa0JBQVIsS0FBK0IsUUFBOUQ7QUFDQSxVQUFNYSxnQ0FBZ0MsSUFBSU8sR0FBSixDQUFRcEIsUUFBUWEsNkJBQVIsSUFBeUMsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixDQUFqRCxDQUF0QztBQUNBLFVBQU1aLGNBQWNGLHFCQUFxQkMsT0FBckIsQ0FBcEI7QUFDQSxVQUFNVCxnQkFBZ0JTLFFBQVFULGFBQVIsSUFBeUIsSUFBekIsR0FBZ0NXLG9CQUFoQyxHQUF1RCxDQUFDLENBQUNGLFFBQVFULGFBQXZGO0FBQ0EsVUFBSTFELGNBQUo7O0FBRUEsVUFBSTtBQUNrQytCLGtDQUEwQm9DLFFBQVFsRSxVQUFSLElBQXNCLEVBQWhELENBRGxDLENBQ01BLFVBRE4seUJBQ01BLFVBRE4sQ0FDa0JFLFdBRGxCLHlCQUNrQkEsV0FEbEI7QUFFK0JtQiw2QkFBcUI2QyxRQUFRbkQsTUFBUixJQUFrQmxLLGFBQXZDLENBRi9CLENBRU1rSyxNQUZOLHlCQUVNQSxNQUZOLENBRWNGLFlBRmQseUJBRWNBLFlBRmQ7QUFHRmQsZ0JBQVE7QUFDTmdCLHdCQURNO0FBRU5GLG9DQUZNO0FBR05iLGdDQUhNO0FBSU5FLGtDQUpNLEVBQVI7O0FBTUQsT0FURCxDQVNFLE9BQU9xRixLQUFQLEVBQWM7QUFDZDtBQUNBLGVBQU87QUFDTEMsaUJBREssZ0NBQ0duTyxJQURILEVBQ1M7QUFDWnFFLHNCQUFRZ0IsTUFBUixDQUFlckYsSUFBZixFQUFxQmtPLE1BQU05SSxPQUEzQjtBQUNELGFBSEksb0JBQVA7O0FBS0Q7QUFDRCxVQUFNZ0osWUFBWSxJQUFJQyxHQUFKLEVBQWxCOztBQUVBLGVBQVNDLGVBQVQsQ0FBeUJ0TyxJQUF6QixFQUErQjtBQUM3QixZQUFJLENBQUNvTyxVQUFVM0UsR0FBVixDQUFjekosSUFBZCxDQUFMLEVBQTBCO0FBQ3hCb08sb0JBQVVHLEdBQVYsQ0FBY3ZPLElBQWQsRUFBb0IsRUFBcEI7QUFDRDtBQUNELGVBQU9vTyxVQUFVSSxHQUFWLENBQWN4TyxJQUFkLENBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQ0x5Tyx3Q0FBbUIsU0FBU0MsYUFBVCxDQUF1QjFPLElBQXZCLEVBQTZCO0FBQzlDO0FBQ0EsZ0JBQUlBLEtBQUttRCxVQUFMLENBQWdCdkMsTUFBaEIsSUFBMEJpTSxRQUFRaUIsdUJBQXRDLEVBQStEO0FBQzdELGtCQUFNdEwsT0FBT3hDLEtBQUsyTyxNQUFMLENBQVlqSSxLQUF6QjtBQUNBa0Q7QUFDRXZGLHFCQURGO0FBRUU7QUFDRXJFLDBCQURGO0FBRUUwRyx1QkFBT2xFLElBRlQ7QUFHRTBDLDZCQUFhMUMsSUFIZjtBQUlFVixzQkFBTSxRQUpSLEVBRkY7O0FBUUU0RyxtQkFSRjtBQVNFNEYsOEJBQWdCdE8sS0FBS3FCLE1BQXJCLENBVEY7QUFVRXFNLDJDQVZGOztBQVlEO0FBQ0YsV0FqQkQsT0FBNEJnQixhQUE1QixJQURLO0FBbUJMRSxnREFBMkIsU0FBU0YsYUFBVCxDQUF1QjFPLElBQXZCLEVBQTZCO0FBQ3RELGdCQUFJa0Ysb0JBQUo7QUFDQSxnQkFBSXdCLGNBQUo7QUFDQSxnQkFBSTVFLGFBQUo7QUFDQTtBQUNBLGdCQUFJOUIsS0FBSzZPLFFBQVQsRUFBbUI7QUFDakI7QUFDRDtBQUNELGdCQUFJN08sS0FBS3FELGVBQUwsQ0FBcUJ2QixJQUFyQixLQUE4QiwyQkFBbEMsRUFBK0Q7QUFDN0Q0RSxzQkFBUTFHLEtBQUtxRCxlQUFMLENBQXFCQyxVQUFyQixDQUFnQ29ELEtBQXhDO0FBQ0F4Qiw0QkFBY3dCLEtBQWQ7QUFDQTVFLHFCQUFPLFFBQVA7QUFDRCxhQUpELE1BSU87QUFDTDRFLHNCQUFRLEVBQVI7QUFDQXhCLDRCQUFjYixRQUFRRSxhQUFSLEdBQXdCdUssT0FBeEIsQ0FBZ0M5TyxLQUFLcUQsZUFBckMsQ0FBZDtBQUNBdkIscUJBQU8sZUFBUDtBQUNEO0FBQ0Q4SDtBQUNFdkYsbUJBREY7QUFFRTtBQUNFckUsd0JBREY7QUFFRTBHLDBCQUZGO0FBR0V4QixzQ0FIRjtBQUlFcEQsd0JBSkYsRUFGRjs7QUFRRTRHLGlCQVJGO0FBU0U0Riw0QkFBZ0J0TyxLQUFLcUIsTUFBckIsQ0FURjtBQVVFcU0seUNBVkY7O0FBWUQsV0E3QkQsT0FBb0NnQixhQUFwQyxJQW5CSztBQWlETEsscUNBQWdCLFNBQVNDLGNBQVQsQ0FBd0JoUCxJQUF4QixFQUE4QjtBQUM1QyxnQkFBSSxDQUFDLGdDQUFnQkEsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQjtBQUNEO0FBQ0QsZ0JBQU1pUCxRQUFRcEYsZ0JBQWdCN0osSUFBaEIsQ0FBZDtBQUNBLGdCQUFJLENBQUNpUCxLQUFMLEVBQVk7QUFDVjtBQUNEO0FBQ0QsZ0JBQU16TSxPQUFPeEMsS0FBS3lDLFNBQUwsQ0FBZSxDQUFmLEVBQWtCaUUsS0FBL0I7QUFDQWtEO0FBQ0V2RixtQkFERjtBQUVFO0FBQ0VyRSx3QkFERjtBQUVFMEcscUJBQU9sRSxJQUZUO0FBR0UwQywyQkFBYTFDLElBSGY7QUFJRVYsb0JBQU0sU0FKUixFQUZGOztBQVFFNEcsaUJBUkY7QUFTRTRGLDRCQUFnQlcsS0FBaEIsQ0FURjtBQVVFdkIseUNBVkY7O0FBWUQsV0FyQkQsT0FBeUJzQixjQUF6QixJQWpESztBQXVFTCxxQ0FBZ0IsU0FBU0UsY0FBVCxHQUEwQjtBQUN4Q2Qsc0JBQVV6SSxPQUFWLENBQWtCLFVBQUM1RSxRQUFELEVBQWM7QUFDOUIsa0JBQUlvTCwyQkFBMkIsUUFBL0IsRUFBeUM7QUFDdkNELDBDQUEwQjdILE9BQTFCLEVBQW1DdEQsUUFBbkMsRUFBNkNvTCxzQkFBN0MsRUFBcUVDLGFBQXJFO0FBQ0Q7O0FBRUQsa0JBQUlVLFlBQVl4SSxLQUFaLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDc0QseUNBQXlCN0csUUFBekIsRUFBbUMrTCxXQUFuQztBQUNEOztBQUVEN0csbUNBQXFCNUIsT0FBckIsRUFBOEJ0RCxRQUE5QjtBQUNELGFBVkQ7O0FBWUFxTixzQkFBVWUsS0FBVjtBQUNELFdBZEQsT0FBeUJELGNBQXpCLElBdkVLLEVBQVA7O0FBdUZELEtBekhELE9BQWlCbEIsZUFBakIsSUFwRmUsRUFBakIiLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdvYmplY3QuZ3JvdXBieSc7XG5cbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgaXNTdGF0aWNSZXF1aXJlIGZyb20gJy4uL2NvcmUvc3RhdGljUmVxdWlyZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVmYXVsdEdyb3VwcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCddO1xuXG4vLyBSRVBPUlRJTkcgQU5EIEZJWElOR1xuXG5mdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4geyAuLi52LCByYW5rOiAtdi5yYW5rIH07XG4gIH0pLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5zT3JDb21tZW50c0FmdGVyKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEFmdGVyKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEJlZm9yZShjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICAgIGlmIChjdXJyZW50Tm9kZU9yVG9rZW4gPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIHRha2VUb2tlbnNBZnRlcldoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0JlZm9yZVdoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIDEwMCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdXRPZk9yZGVyKGltcG9ydGVkKSB7XG4gIGlmIChpbXBvcnRlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkWzBdO1xuICByZXR1cm4gaW1wb3J0ZWQuZmlsdGVyKGZ1bmN0aW9uIChpbXBvcnRlZE1vZHVsZSkge1xuICAgIGNvbnN0IHJlcyA9IGltcG9ydGVkTW9kdWxlLnJhbmsgPCBtYXhTZWVuUmFua05vZGUucmFuaztcbiAgICBpZiAobWF4U2VlblJhbmtOb2RlLnJhbmsgPCBpbXBvcnRlZE1vZHVsZS5yYW5rKSB7XG4gICAgICBtYXhTZWVuUmFua05vZGUgPSBpbXBvcnRlZE1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRSb290Tm9kZShub2RlKSB7XG4gIGxldCBwYXJlbnQgPSBub2RlO1xuICB3aGlsZSAocGFyZW50LnBhcmVudCAhPSBudWxsICYmIHBhcmVudC5wYXJlbnQuYm9keSA9PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3QgZW5kT2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwXG4gICAgPyB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgIDogbm9kZS5yYW5nZVsxXTtcbiAgbGV0IHJlc3VsdCA9IGVuZE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gZW5kT2ZUb2tlbnM7IGkgPCBzb3VyY2VDb2RlLnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldID09PSAnXFxuJykge1xuICAgICAgcmVzdWx0ID0gaSArIDE7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFxyJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGkgKyAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IHN0YXJ0T2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwID8gdG9rZW5zVG9FbmRPZkxpbmVbMF0ucmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdO1xuICBsZXQgcmVzdWx0ID0gc3RhcnRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IHN0YXJ0T2ZUb2tlbnMgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZUV4cHJlc3Npb24oZXhwcikge1xuICByZXR1cm4gZXhwciAhPSBudWxsXG4gICAgJiYgZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgJiYgZXhwci5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGV4cHIuY2FsbGVlLm5hbWUgPT09ICdyZXF1aXJlJ1xuICAgICYmIGV4cHIuYXJndW1lbnRzICE9IG51bGxcbiAgICAmJiBleHByLmFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAmJiBleHByLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCc7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1swXTtcbiAgY29uc3QgaXNQbGFpblJlcXVpcmUgPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0KTtcbiAgY29uc3QgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb24gPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGRlY2wuaW5pdCAhPSBudWxsXG4gICAgJiYgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJ1xuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0LmNhbGxlZS5vYmplY3QpO1xuICByZXR1cm4gaXNQbGFpblJlcXVpcmUgfHwgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRNb2R1bGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nICYmIG5vZGUuc3BlY2lmaWVycyAhPSBudWxsICYmIG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlcihub2RlKSB7XG4gIHJldHVybiBpc1N1cHBvcnRlZFJlcXVpcmVNb2R1bGUobm9kZSkgfHwgaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBjYW5SZW9yZGVySXRlbXMoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IGZpcnN0Tm9kZS5wYXJlbnQ7XG4gIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBbXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihmaXJzdE5vZGUpLFxuICAgIHBhcmVudC5ib2R5LmluZGV4T2Yoc2Vjb25kTm9kZSksXG4gIF0uc29ydCgpO1xuICBjb25zdCBub2Rlc0JldHdlZW4gPSBwYXJlbnQuYm9keS5zbGljZShmaXJzdEluZGV4LCBzZWNvbmRJbmRleCArIDEpO1xuICBmb3IgKGNvbnN0IG5vZGVCZXR3ZWVuIG9mIG5vZGVzQmV0d2Vlbikge1xuICAgIGlmICghY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGVCZXR3ZWVuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUltcG9ydERlc2NyaXB0aW9uKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gJ3R5cGUgaW1wb3J0JztcbiAgfVxuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKSB7XG4gICAgcmV0dXJuICd0eXBlb2YgaW1wb3J0JztcbiAgfVxuICByZXR1cm4gJ2ltcG9ydCc7XG59XG5cbmZ1bmN0aW9uIGZpeE91dE9mT3JkZXIoY29udGV4dCwgZmlyc3ROb2RlLCBzZWNvbmROb2RlLCBvcmRlcikge1xuICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG5cbiAgY29uc3QgZmlyc3RSb290ID0gZmluZFJvb3ROb2RlKGZpcnN0Tm9kZS5ub2RlKTtcbiAgY29uc3QgZmlyc3RSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgZmlyc3RSb290KTtcbiAgY29uc3QgZmlyc3RSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuXG4gIGNvbnN0IHNlY29uZFJvb3QgPSBmaW5kUm9vdE5vZGUoc2Vjb25kTm9kZS5ub2RlKTtcbiAgY29uc3Qgc2Vjb25kUm9vdFN0YXJ0ID0gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBzZWNvbmRSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBzZWNvbmRSb290KTtcbiAgY29uc3QgY2FuRml4ID0gY2FuUmVvcmRlckl0ZW1zKGZpcnN0Um9vdCwgc2Vjb25kUm9vdCk7XG5cbiAgbGV0IG5ld0NvZGUgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHNlY29uZFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZCk7XG4gIGlmIChuZXdDb2RlW25ld0NvZGUubGVuZ3RoIC0gMV0gIT09ICdcXG4nKSB7XG4gICAgbmV3Q29kZSA9IGAke25ld0NvZGV9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0SW1wb3J0ID0gYCR7bWFrZUltcG9ydERlc2NyaXB0aW9uKGZpcnN0Tm9kZSl9IG9mIFxcYCR7Zmlyc3ROb2RlLmRpc3BsYXlOYW1lfVxcYGA7XG4gIGNvbnN0IHNlY29uZEltcG9ydCA9IGBcXGAke3NlY29uZE5vZGUuZGlzcGxheU5hbWV9XFxgICR7bWFrZUltcG9ydERlc2NyaXB0aW9uKHNlY29uZE5vZGUpfWA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgJHtzZWNvbmRJbXBvcnR9IHNob3VsZCBvY2N1ciAke29yZGVyfSAke2ZpcnN0SW1wb3J0fWA7XG5cbiAgaWYgKG9yZGVyID09PSAnYmVmb3JlJykge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IHNlY29uZE5vZGUubm9kZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFxuICAgICAgICBbZmlyc3RSb290U3RhcnQsIHNlY29uZFJvb3RFbmRdLFxuICAgICAgICBuZXdDb2RlICsgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdFN0YXJ0KSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9yZGVyID09PSAnYWZ0ZXInKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtzZWNvbmRSb290U3RhcnQsIGZpcnN0Um9vdEVuZF0sXG4gICAgICAgIHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdEVuZCwgZmlyc3RSb290RW5kKSArIG5ld0NvZGUsXG4gICAgICApKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCBvcmRlcikge1xuICBvdXRPZk9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGltcCkge1xuICAgIGNvbnN0IGZvdW5kID0gaW1wb3J0ZWQuZmluZChmdW5jdGlvbiBoYXNIaWdoZXJSYW5rKGltcG9ydGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGltcG9ydGVkSXRlbS5yYW5rID4gaW1wLnJhbms7XG4gICAgfSk7XG4gICAgZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmb3VuZCwgaW1wLCBvcmRlcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCkge1xuICBjb25zdCBvdXRPZk9yZGVyID0gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpO1xuICBpZiAoIW91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlcmUgYXJlIHRoaW5ncyB0byByZXBvcnQuIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcG9ydGVkIGVycm9ycy5cbiAgY29uc3QgcmV2ZXJzZWRJbXBvcnRlZCA9IHJldmVyc2UoaW1wb3J0ZWQpO1xuICBjb25zdCByZXZlcnNlZE9yZGVyID0gZmluZE91dE9mT3JkZXIocmV2ZXJzZWRJbXBvcnRlZCk7XG4gIGlmIChyZXZlcnNlZE9yZGVyLmxlbmd0aCA8IG91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCByZXZlcnNlZEltcG9ydGVkLCByZXZlcnNlZE9yZGVyLCAnYWZ0ZXInKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCBpbXBvcnRlZCwgb3V0T2ZPcmRlciwgJ2JlZm9yZScpO1xufVxuXG5jb25zdCBjb21wYXJlU3RyaW5nID0gKGEsIGIpID0+IHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuLyoqIFNvbWUgcGFyc2VycyAobGFuZ3VhZ2VzIHdpdGhvdXQgdHlwZXMpIGRvbid0IHByb3ZpZGUgSW1wb3J0S2luZCAqL1xuY29uc3QgREVBRlVMVF9JTVBPUlRfS0lORCA9ICd2YWx1ZSc7XG5jb25zdCBnZXROb3JtYWxpemVkVmFsdWUgPSAobm9kZSwgdG9Mb3dlckNhc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICByZXR1cm4gdG9Mb3dlckNhc2UgPyBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgbXVsdGlwbGllciA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlciA9PT0gJ2FzYycgPyAxIDogLTE7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQ7XG4gIGNvbnN0IG11bHRpcGxpZXJJbXBvcnRLaW5kID0gb3JkZXJJbXBvcnRLaW5kICE9PSAnaWdub3JlJ1xuICAgICYmIChhbHBoYWJldGl6ZU9wdGlvbnMub3JkZXJJbXBvcnRLaW5kID09PSAnYXNjJyA/IDEgOiAtMSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGltcG9ydHNTb3J0ZXIobm9kZUEsIG5vZGVCKSB7XG4gICAgY29uc3QgaW1wb3J0QSA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQSwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgY29uc3QgaW1wb3J0QiA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQiwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgICBpZiAoIWluY2x1ZGVzKGltcG9ydEEsICcvJykgJiYgIWluY2x1ZGVzKGltcG9ydEIsICcvJykpIHtcbiAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoaW1wb3J0QSwgaW1wb3J0Qik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEEgPSBpbXBvcnRBLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBCID0gaW1wb3J0Qi5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgYSA9IEEubGVuZ3RoO1xuICAgICAgY29uc3QgYiA9IEIubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGEsIGIpOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhBW2ldLCBCW2ldKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgeyBicmVhazsgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdCAmJiBhICE9PSBiKSB7XG4gICAgICAgIHJlc3VsdCA9IGEgPCBiID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCA9IHJlc3VsdCAqIG11bHRpcGxpZXI7XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBwYXRocyBhcmUgZXF1YWwgKHJlc3VsdCA9PT0gMCksIHNvcnQgdGhlbSBieSBpbXBvcnRLaW5kXG4gICAgaWYgKCFyZXN1bHQgJiYgbXVsdGlwbGllckltcG9ydEtpbmQpIHtcbiAgICAgIHJlc3VsdCA9IG11bHRpcGxpZXJJbXBvcnRLaW5kICogY29tcGFyZVN0cmluZyhcbiAgICAgICAgbm9kZUEubm9kZS5pbXBvcnRLaW5kIHx8IERFQUZVTFRfSU1QT1JUX0tJTkQsXG4gICAgICAgIG5vZGVCLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBncm91cGVkQnlSYW5rcyA9IGdyb3VwQnkoaW1wb3J0ZWQsIChpdGVtKSA9PiBpdGVtLnJhbmspO1xuXG4gIGNvbnN0IHNvcnRlckZuID0gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucyk7XG5cbiAgLy8gc29ydCBncm91cCBrZXlzIHNvIHRoYXQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb24gaW4gb3JkZXJcbiAgY29uc3QgZ3JvdXBSYW5rcyA9IE9iamVjdC5rZXlzKGdyb3VwZWRCeVJhbmtzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KTtcblxuICAvLyBzb3J0IGltcG9ydHMgbG9jYWxseSB3aXRoaW4gdGhlaXIgZ3JvdXBcbiAgZ3JvdXBSYW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLnNvcnQoc29ydGVyRm4pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZ2xvYmFsbHkgdW5pcXVlIHJhbmsgdG8gZWFjaCBpbXBvcnRcbiAgbGV0IG5ld1JhbmsgPSAwO1xuICBjb25zdCBhbHBoYWJldGl6ZWRSYW5rcyA9IGdyb3VwUmFua3MucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGdyb3VwUmFuaykge1xuICAgIGdyb3VwZWRCeVJhbmtzW2dyb3VwUmFua10uZm9yRWFjaChmdW5jdGlvbiAoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICBhY2NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF0gPSBwYXJzZUludChncm91cFJhbmssIDEwKSArIG5ld1Jhbms7XG4gICAgICBuZXdSYW5rICs9IDE7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIG11dGF0ZSB0aGUgb3JpZ2luYWwgZ3JvdXAtcmFuayB3aXRoIGFscGhhYmV0aXplZC1yYW5rXG4gIGltcG9ydGVkLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgIGltcG9ydGVkSXRlbS5yYW5rID0gYWxwaGFiZXRpemVkUmFua3NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF07XG4gIH0pO1xufVxuXG4vLyBERVRFQ1RJTkdcblxuZnVuY3Rpb24gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLCBwYXRoR3JvdXBzLCBwYXRoLCBtYXhQb3NpdGlvbikge1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhdGhHcm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgeyBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucywgZ3JvdXAsIHBvc2l0aW9uID0gMSB9ID0gcGF0aEdyb3Vwc1tpXTtcbiAgICBpZiAobWluaW1hdGNoKHBhdGgsIHBhdHRlcm4sIHBhdHRlcm5PcHRpb25zIHx8IHsgbm9jb21tZW50OiB0cnVlIH0pKSB7XG4gICAgICByZXR1cm4gcmFua3NbZ3JvdXBdICsgcG9zaXRpb24gLyBtYXhQb3NpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJhbmsoY29udGV4dCwgcmFua3MsIGltcG9ydEVudHJ5LCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGxldCBpbXBUeXBlO1xuICBsZXQgcmFuaztcbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgPT09ICdpbXBvcnQ6b2JqZWN0Jykge1xuICAgIGltcFR5cGUgPSAnb2JqZWN0JztcbiAgfSBlbHNlIGlmIChpbXBvcnRFbnRyeS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJyAmJiByYW5rcy5vbWl0dGVkVHlwZXMuaW5kZXhPZigndHlwZScpID09PSAtMSkge1xuICAgIGltcFR5cGUgPSAndHlwZSc7XG4gIH0gZWxzZSB7XG4gICAgaW1wVHlwZSA9IGltcG9ydFR5cGUoaW1wb3J0RW50cnkudmFsdWUsIGNvbnRleHQpO1xuICB9XG4gIGlmICghZXhjbHVkZWRJbXBvcnRUeXBlcy5oYXMoaW1wVHlwZSkpIHtcbiAgICByYW5rID0gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLmdyb3VwcywgcmFua3MucGF0aEdyb3VwcywgaW1wb3J0RW50cnkudmFsdWUsIHJhbmtzLm1heFBvc2l0aW9uKTtcbiAgfVxuICBpZiAodHlwZW9mIHJhbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmFuayA9IHJhbmtzLmdyb3Vwc1tpbXBUeXBlXTtcbiAgfVxuICBpZiAoaW1wb3J0RW50cnkudHlwZSAhPT0gJ2ltcG9ydCcgJiYgIWltcG9ydEVudHJ5LnR5cGUuc3RhcnRzV2l0aCgnaW1wb3J0OicpKSB7XG4gICAgcmFuayArPSAxMDA7XG4gIH1cblxuICByZXR1cm4gcmFuaztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJOb2RlKGNvbnRleHQsIGltcG9ydEVudHJ5LCByYW5rcywgaW1wb3J0ZWQsIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpIHtcbiAgY29uc3QgcmFuayA9IGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcyk7XG4gIGlmIChyYW5rICE9PSAtMSkge1xuICAgIGltcG9ydGVkLnB1c2goeyAuLi5pbXBvcnRFbnRyeSwgcmFuayB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlQmxvY2sobm9kZSkge1xuICBsZXQgbiA9IG5vZGU7XG4gIC8vIEhhbmRsZSBjYXNlcyBsaWtlIGBjb25zdCBiYXogPSByZXF1aXJlKCdmb28nKS5iYXIuYmF6YFxuICAvLyBhbmQgYGNvbnN0IGZvbyA9IHJlcXVpcmUoJ2ZvbycpKClgXG4gIHdoaWxlIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQub2JqZWN0ID09PSBuXG4gICAgfHwgbi5wYXJlbnQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBuLnBhcmVudC5jYWxsZWUgPT09IG5cbiAgKSB7XG4gICAgbiA9IG4ucGFyZW50O1xuICB9XG4gIGlmIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdG9yJ1xuICAgICYmIG4ucGFyZW50LnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQucGFyZW50LnR5cGUgPT09ICdQcm9ncmFtJ1xuICApIHtcbiAgICByZXR1cm4gbi5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgfVxufVxuXG5jb25zdCB0eXBlcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdpbnRlcm5hbCcsICd1bmtub3duJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4JywgJ29iamVjdCcsICd0eXBlJ107XG5cbi8vIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdHlwZS1yYW5rIHBhaXJzLlxuLy8gRXhhbXBsZTogeyBpbmRleDogMCwgc2libGluZzogMSwgcGFyZW50OiAxLCBleHRlcm5hbDogMSwgYnVpbHRpbjogMiwgaW50ZXJuYWw6IDIgfVxuLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBpdCBjb250YWlucyBhIHR5cGUgdGhhdCBkb2VzIG5vdCBleGlzdCwgb3IgaGFzIGEgZHVwbGljYXRlXG5mdW5jdGlvbiBjb252ZXJ0R3JvdXBzVG9SYW5rcyhncm91cHMpIHtcbiAgY29uc3QgcmFua09iamVjdCA9IGdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgZ3JvdXAsIGluZGV4KSB7XG4gICAgW10uY29uY2F0KGdyb3VwKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cEl0ZW0pIHtcbiAgICAgIGlmICh0eXBlcy5pbmRleE9mKGdyb3VwSXRlbSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJ1bGU6IFVua25vd24gdHlwZSBcXGAke0pTT04uc3RyaW5naWZ5KGdyb3VwSXRlbSl9XFxgYCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzW2dyb3VwSXRlbV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBcXGAke2dyb3VwSXRlbX1cXGAgaXMgZHVwbGljYXRlZGApO1xuICAgICAgfVxuICAgICAgcmVzW2dyb3VwSXRlbV0gPSBpbmRleCAqIDI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pO1xuXG4gIGNvbnN0IG9taXR0ZWRUeXBlcyA9IHR5cGVzLmZpbHRlcihmdW5jdGlvbiAodHlwZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmFua09iamVjdFt0eXBlXSA9PT0gJ3VuZGVmaW5lZCc7XG4gIH0pO1xuXG4gIGNvbnN0IHJhbmtzID0gb21pdHRlZFR5cGVzLnJlZHVjZShmdW5jdGlvbiAocmVzLCB0eXBlKSB7XG4gICAgcmVzW3R5cGVdID0gZ3JvdXBzLmxlbmd0aCAqIDI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwgcmFua09iamVjdCk7XG5cbiAgcmV0dXJuIHsgZ3JvdXBzOiByYW5rcywgb21pdHRlZFR5cGVzIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3MocGF0aEdyb3Vwcykge1xuICBjb25zdCBhZnRlciA9IHt9O1xuICBjb25zdCBiZWZvcmUgPSB7fTtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhdGhHcm91cHMubWFwKChwYXRoR3JvdXAsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBncm91cCwgcG9zaXRpb246IHBvc2l0aW9uU3RyaW5nIH0gPSBwYXRoR3JvdXA7XG4gICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdhZnRlcicpIHtcbiAgICAgIGlmICghYWZ0ZXJbZ3JvdXBdKSB7XG4gICAgICAgIGFmdGVyW2dyb3VwXSA9IDE7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbiA9IGFmdGVyW2dyb3VwXSsrO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAoIWJlZm9yZVtncm91cF0pIHtcbiAgICAgICAgYmVmb3JlW2dyb3VwXSA9IFtdO1xuICAgICAgfVxuICAgICAgYmVmb3JlW2dyb3VwXS5wdXNoKGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXRoR3JvdXAsIHBvc2l0aW9uIH07XG4gIH0pO1xuXG4gIGxldCBtYXhQb3NpdGlvbiA9IDE7XG5cbiAgT2JqZWN0LmtleXMoYmVmb3JlKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gYmVmb3JlW2dyb3VwXS5sZW5ndGg7XG4gICAgYmVmb3JlW2dyb3VwXS5mb3JFYWNoKChncm91cEluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgdHJhbnNmb3JtZWRbZ3JvdXBJbmRleF0ucG9zaXRpb24gPSAtMSAqIChncm91cExlbmd0aCAtIGluZGV4KTtcbiAgICB9KTtcbiAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KG1heFBvc2l0aW9uLCBncm91cExlbmd0aCk7XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKGFmdGVyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBncm91cE5leHRQb3NpdGlvbiA9IGFmdGVyW2tleV07XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBOZXh0UG9zaXRpb24gLSAxKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoR3JvdXBzOiB0cmFuc2Zvcm1lZCxcbiAgICBtYXhQb3NpdGlvbjogbWF4UG9zaXRpb24gPiAxMCA/IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoTWF0aC5sb2cxMChtYXhQb3NpdGlvbikpKSA6IDEwLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoXG4gICAgY29udGV4dC5nZXRTb3VyY2VDb2RlKCksIHByZXZSb290LCBjb21tZW50T25TYW1lTGluZUFzKHByZXZSb290KSk7XG5cbiAgbGV0IGVuZE9mTGluZSA9IHByZXZSb290LnJhbmdlWzFdO1xuICBpZiAodG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMCkge1xuICAgIGVuZE9mTGluZSA9IHRva2Vuc1RvRW5kT2ZMaW5lW3Rva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCAtIDFdLnJhbmdlWzFdO1xuICB9XG4gIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlclJhbmdlKFtwcmV2Um9vdC5yYW5nZVswXSwgZW5kT2ZMaW5lXSwgJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICBjb25zdCBwcmV2Um9vdCA9IGZpbmRSb290Tm9kZShwcmV2aW91c0ltcG9ydC5ub2RlKTtcbiAgY29uc3QgY3VyclJvb3QgPSBmaW5kUm9vdE5vZGUoY3VycmVudEltcG9ydC5ub2RlKTtcbiAgY29uc3QgcmFuZ2VUb1JlbW92ZSA9IFtcbiAgICBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHByZXZSb290KSxcbiAgICBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgY3VyclJvb3QpLFxuICBdO1xuICBpZiAoKC9eXFxzKiQvKS50ZXN0KHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcocmFuZ2VUb1JlbW92ZVswXSwgcmFuZ2VUb1JlbW92ZVsxXSkpKSB7XG4gICAgcmV0dXJuIChmaXhlcikgPT4gZml4ZXIucmVtb3ZlUmFuZ2UocmFuZ2VUb1JlbW92ZSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCkge1xuICBjb25zdCBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuID0gKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSA9PiB7XG4gICAgY29uc3QgbGluZXNCZXR3ZWVuSW1wb3J0cyA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmxpbmVzLnNsaWNlKFxuICAgICAgcHJldmlvdXNJbXBvcnQubm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICBjdXJyZW50SW1wb3J0Lm5vZGUubG9jLnN0YXJ0LmxpbmUgLSAxLFxuICAgICk7XG5cbiAgICByZXR1cm4gbGluZXNCZXR3ZWVuSW1wb3J0cy5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnRyaW0oKS5sZW5ndGgpLmxlbmd0aDtcbiAgfTtcbiAgY29uc3QgZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4gY3VycmVudEltcG9ydC5yYW5rIC0gMSA+PSBwcmV2aW91c0ltcG9ydC5yYW5rO1xuICBsZXQgcHJldmlvdXNJbXBvcnQgPSBpbXBvcnRlZFswXTtcblxuICBpbXBvcnRlZC5zbGljZSgxKS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50SW1wb3J0KSB7XG4gICAgY29uc3QgZW1wdHlMaW5lc0JldHdlZW4gPSBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KTtcbiAgICBjb25zdCBpc1N0YXJ0T2ZEaXN0aW5jdEdyb3VwID0gZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG5cbiAgICBpZiAobmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cydcbiAgICAgICAgfHwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycpIHtcbiAgICAgIGlmIChjdXJyZW50SW1wb3J0LnJhbmsgIT09IHByZXZpb3VzSW1wb3J0LnJhbmsgJiYgZW1wdHlMaW5lc0JldHdlZW4gPT09IDApIHtcbiAgICAgICAgaWYgKGRpc3RpbmN0R3JvdXAgfHwgIWRpc3RpbmN0R3JvdXAgJiYgaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgICAgICBmaXg6IGZpeE5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lc0JldHdlZW4gPiAwXG4gICAgICAgICYmIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwICYmIGN1cnJlbnRJbXBvcnQucmFuayA9PT0gcHJldmlvdXNJbXBvcnQucmFuayB8fCAhZGlzdGluY3RHcm91cCAmJiAhaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgd2l0aGluIGltcG9ydCBncm91cCcsXG4gICAgICAgICAgICBmaXg6IHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgYmV0d2VlbiBpbXBvcnQgZ3JvdXBzJyxcbiAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNJbXBvcnQgPSBjdXJyZW50SW1wb3J0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucykge1xuICBjb25zdCBhbHBoYWJldGl6ZSA9IG9wdGlvbnMuYWxwaGFiZXRpemUgfHwge307XG4gIGNvbnN0IG9yZGVyID0gYWxwaGFiZXRpemUub3JkZXIgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplLm9yZGVySW1wb3J0S2luZCB8fCAnaWdub3JlJztcbiAgY29uc3QgY2FzZUluc2Vuc2l0aXZlID0gYWxwaGFiZXRpemUuY2FzZUluc2Vuc2l0aXZlIHx8IGZhbHNlO1xuXG4gIHJldHVybiB7IG9yZGVyLCBvcmRlckltcG9ydEtpbmQsIGNhc2VJbnNlbnNpdGl2ZSB9O1xufVxuXG4vLyBUT0RPLCBzZW12ZXItbWFqb3I6IENoYW5nZSB0aGUgZGVmYXVsdCBvZiBcImRpc3RpbmN0R3JvdXBcIiBmcm9tIHRydWUgdG8gZmFsc2VcbmNvbnN0IGRlZmF1bHREaXN0aW5jdEdyb3VwID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBjb252ZW50aW9uIGluIG1vZHVsZSBpbXBvcnQgb3JkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnb3JkZXInKSxcbiAgICB9LFxuXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzdGluY3RHcm91cDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdERpc3RpbmN0R3JvdXAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IHR5cGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgZW51bTogWydhZnRlcicsICdiZWZvcmUnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3BhdHRlcm4nLCAnZ3JvdXAnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnbmV3bGluZXMtYmV0d2Vlbic6IHtcbiAgICAgICAgICAgIGVudW06IFtcbiAgICAgICAgICAgICAgJ2lnbm9yZScsXG4gICAgICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgICAgICAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJyxcbiAgICAgICAgICAgICAgJ25ldmVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbHBoYWJldGl6ZToge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcmRlckltcG9ydEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBpbXBvcnRPcmRlclJ1bGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9IG9wdGlvbnNbJ25ld2xpbmVzLWJldHdlZW4nXSB8fCAnaWdub3JlJztcbiAgICBjb25zdCBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQob3B0aW9ucy5wYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyB8fCBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnb2JqZWN0J10pO1xuICAgIGNvbnN0IGFscGhhYmV0aXplID0gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucyk7XG4gICAgY29uc3QgZGlzdGluY3RHcm91cCA9IG9wdGlvbnMuZGlzdGluY3RHcm91cCA9PSBudWxsID8gZGVmYXVsdERpc3RpbmN0R3JvdXAgOiAhIW9wdGlvbnMuZGlzdGluY3RHcm91cDtcbiAgICBsZXQgcmFua3M7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBwYXRoR3JvdXBzLCBtYXhQb3NpdGlvbiB9ID0gY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyhvcHRpb25zLnBhdGhHcm91cHMgfHwgW10pO1xuICAgICAgY29uc3QgeyBncm91cHMsIG9taXR0ZWRUeXBlcyB9ID0gY29udmVydEdyb3Vwc1RvUmFua3Mob3B0aW9ucy5ncm91cHMgfHwgZGVmYXVsdEdyb3Vwcyk7XG4gICAgICByYW5rcyA9IHtcbiAgICAgICAgZ3JvdXBzLFxuICAgICAgICBvbWl0dGVkVHlwZXMsXG4gICAgICAgIHBhdGhHcm91cHMsXG4gICAgICAgIG1heFBvc2l0aW9uLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTWFsZm9ybWVkIGNvbmZpZ3VyYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb2dyYW0obm9kZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0TWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0QmxvY2tJbXBvcnRzKG5vZGUpIHtcbiAgICAgIGlmICghaW1wb3J0TWFwLmhhcyhub2RlKSkge1xuICAgICAgICBpbXBvcnRNYXAuc2V0KG5vZGUsIFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbXBvcnRNYXAuZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIHVuYXNzaWduZWQgaW1wb3J0cyB1bmxlc3Mgd2Fybk9uVW5hc3NpZ25lZEltcG9ydHMgaXMgc2V0XG4gICAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoIHx8IG9wdGlvbnMud2Fybk9uVW5hc3NpZ25lZEltcG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5zb3VyY2UudmFsdWU7XG4gICAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB0eXBlOiAnaW1wb3J0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByYW5rcyxcbiAgICAgICAgICAgIGdldEJsb2NrSW1wb3J0cyhub2RlLnBhcmVudCksXG4gICAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgLy8gc2tpcCBcImV4cG9ydCBpbXBvcnRcInNcbiAgICAgICAgaWYgKG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlUmVmZXJlbmNlLnR5cGUgPT09ICdUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlJykge1xuICAgICAgICAgIHZhbHVlID0gbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbi52YWx1ZTtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IHZhbHVlO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuZ2V0VGV4dChub2RlLm1vZHVsZVJlZmVyZW5jZSk7XG4gICAgICAgICAgdHlwZSA9ICdpbXBvcnQ6b2JqZWN0JztcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck5vZGUoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBoYW5kbGVSZXF1aXJlcyhub2RlKSB7XG4gICAgICAgIGlmICghaXNTdGF0aWNSZXF1aXJlKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAncmVxdWlyZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMoYmxvY2spLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnOiBmdW5jdGlvbiByZXBvcnRBbmRSZXNldCgpIHtcbiAgICAgICAgaW1wb3J0TWFwLmZvckVhY2goKGltcG9ydGVkKSA9PiB7XG4gICAgICAgICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtYWtlTmV3bGluZXNCZXR3ZWVuUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkLCBuZXdsaW5lc0JldHdlZW5JbXBvcnRzLCBkaXN0aW5jdEdyb3VwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWxwaGFiZXRpemUub3JkZXIgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGltcG9ydE1hcC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiY29tbWVudE9uU2FtZUxpbmVBcyIsInRva2VuIiwidHlwZSIsImxvYyIsInN0YXJ0IiwibGluZSIsImVuZCIsImZpbmRFbmRPZkxpbmVXaXRoQ29tbWVudHMiLCJ0b2tlbnNUb0VuZE9mTGluZSIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxP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QUFDbENzRCx5Q0FBeUI3RyxRQUF6QixFQUFtQytMLFdBQW5DO0FBQ0Q7O0FBRUQ3RyxtQ0FBcUI1QixPQUFyQixFQUE4QnRELFFBQTlCO0FBQ0QsYUFWRDs7QUFZQXFOLHNCQUFVZSxLQUFWO0FBQ0QsV0FkRCxPQUF5QkQsY0FBekIsSUF2RUssRUFBUDs7QUF1RkQsS0F6SEQsT0FBaUJsQixlQUFqQixJQXBGZSxFQUFqQiIsImZpbGUiOiJvcmRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ29iamVjdC5ncm91cGJ5JztcblxuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZWZhdWx0R3JvdXBzID0gWydidWlsdGluJywgJ2V4dGVybmFsJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4J107XG5cbi8vIFJFUE9SVElORyBBTkQgRklYSU5HXG5cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB7IC4uLnYsIHJhbms6IC12LnJhbmsgfTtcbiAgfSkucmV2ZXJzZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QWZ0ZXIoY3VycmVudE5vZGVPclRva2VuKTtcbiAgICBpZiAoY3VycmVudE5vZGVPclRva2VuID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QmVmb3JlKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNBZnRlcihzb3VyY2VDb2RlLCBub2RlLCAxMDApO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpIHtcbiAgaWYgKGltcG9ydGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgbWF4U2VlblJhbmtOb2RlID0gaW1wb3J0ZWRbMF07XG4gIHJldHVybiBpbXBvcnRlZC5maWx0ZXIoZnVuY3Rpb24gKGltcG9ydGVkTW9kdWxlKSB7XG4gICAgY29uc3QgcmVzID0gaW1wb3J0ZWRNb2R1bGUucmFuayA8IG1heFNlZW5SYW5rTm9kZS5yYW5rO1xuICAgIGlmIChtYXhTZWVuUmFua05vZGUucmFuayA8IGltcG9ydGVkTW9kdWxlLnJhbmspIHtcbiAgICAgIG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkTW9kdWxlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgbGV0IHBhcmVudCA9IG5vZGU7XG4gIHdoaWxlIChwYXJlbnQucGFyZW50ICE9IG51bGwgJiYgcGFyZW50LnBhcmVudC5ib2R5ID09IG51bGwpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBub2RlKSB7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IGVuZE9mVG9rZW5zID0gdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMFxuICAgID8gdG9rZW5zVG9FbmRPZkxpbmVbdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICA6IG5vZGUucmFuZ2VbMV07XG4gIGxldCByZXN1bHQgPSBlbmRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IGVuZE9mVG9rZW5zOyBpIDwgc291cmNlQ29kZS50ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSA9PT0gJ1xcbicpIHtcbiAgICAgIHJlc3VsdCA9IGkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzb3VyY2VDb2RlLnRleHRbaV0gIT09ICcgJyAmJiBzb3VyY2VDb2RlLnRleHRbaV0gIT09ICdcXHQnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xccicpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpICsgMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgbm9kZSkge1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNCZWZvcmVXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3Qgc3RhcnRPZlRva2VucyA9IHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDAgPyB0b2tlbnNUb0VuZE9mTGluZVswXS5yYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07XG4gIGxldCByZXN1bHQgPSBzdGFydE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gc3RhcnRPZlRva2VucyAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldICE9PSAnICcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFx0Jykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZXF1aXJlRXhwcmVzc2lvbihleHByKSB7XG4gIHJldHVybiBleHByICE9IG51bGxcbiAgICAmJiBleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBleHByLmNhbGxlZSAhPSBudWxsXG4gICAgJiYgZXhwci5jYWxsZWUubmFtZSA9PT0gJ3JlcXVpcmUnXG4gICAgJiYgZXhwci5hcmd1bWVudHMgIT0gbnVsbFxuICAgICYmIGV4cHIuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICYmIGV4cHIuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdMaXRlcmFsJztcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRSZXF1aXJlTW9kdWxlKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zWzBdO1xuICBjb25zdCBpc1BsYWluUmVxdWlyZSA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQpO1xuICBjb25zdCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbiA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgZGVjbC5pbml0ICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQuY2FsbGVlLm9iamVjdCk7XG4gIHJldHVybiBpc1BsYWluUmVxdWlyZSB8fCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgbm9kZS5zcGVjaWZpZXJzICE9IG51bGwgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGUpIHtcbiAgcmV0dXJuIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0TW9kdWxlKG5vZGUpIHx8IGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGNhblJlb3JkZXJJdGVtcyhmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gZmlyc3ROb2RlLnBhcmVudDtcbiAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IFtcbiAgICBwYXJlbnQuYm9keS5pbmRleE9mKGZpcnN0Tm9kZSksXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihzZWNvbmROb2RlKSxcbiAgXS5zb3J0KCk7XG4gIGNvbnN0IG5vZGVzQmV0d2VlbiA9IHBhcmVudC5ib2R5LnNsaWNlKGZpcnN0SW5kZXgsIHNlY29uZEluZGV4ICsgMSk7XG4gIGZvciAoY29uc3Qgbm9kZUJldHdlZW4gb2Ygbm9kZXNCZXR3ZWVuKSB7XG4gICAgaWYgKCFjYW5Dcm9zc05vZGVXaGlsZVJlb3JkZXIobm9kZUJldHdlZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYWtlSW1wb3J0RGVzY3JpcHRpb24obm9kZSkge1xuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgIHJldHVybiAndHlwZSBpbXBvcnQnO1xuICB9XG4gIGlmIChub2RlLm5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpIHtcbiAgICByZXR1cm4gJ3R5cGVvZiBpbXBvcnQnO1xuICB9XG4gIHJldHVybiAnaW1wb3J0Jztcbn1cblxuZnVuY3Rpb24gZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmaXJzdE5vZGUsIHNlY29uZE5vZGUsIG9yZGVyKSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcblxuICBjb25zdCBmaXJzdFJvb3QgPSBmaW5kUm9vdE5vZGUoZmlyc3ROb2RlLm5vZGUpO1xuICBjb25zdCBmaXJzdFJvb3RTdGFydCA9IGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuICBjb25zdCBmaXJzdFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGZpcnN0Um9vdCk7XG5cbiAgY29uc3Qgc2Vjb25kUm9vdCA9IGZpbmRSb290Tm9kZShzZWNvbmROb2RlLm5vZGUpO1xuICBjb25zdCBzZWNvbmRSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgc2Vjb25kUm9vdCk7XG4gIGNvbnN0IHNlY29uZFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBjYW5GaXggPSBjYW5SZW9yZGVySXRlbXMoZmlyc3RSb290LCBzZWNvbmRSb290KTtcblxuICBsZXQgbmV3Q29kZSA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdFN0YXJ0LCBzZWNvbmRSb290RW5kKTtcbiAgaWYgKG5ld0NvZGVbbmV3Q29kZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpIHtcbiAgICBuZXdDb2RlID0gYCR7bmV3Q29kZX1cXG5gO1xuICB9XG5cbiAgY29uc3QgZmlyc3RJbXBvcnQgPSBgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oZmlyc3ROb2RlKX0gb2YgXFxgJHtmaXJzdE5vZGUuZGlzcGxheU5hbWV9XFxgYDtcbiAgY29uc3Qgc2Vjb25kSW1wb3J0ID0gYFxcYCR7c2Vjb25kTm9kZS5kaXNwbGF5TmFtZX1cXGAgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oc2Vjb25kTm9kZSl9YDtcbiAgY29uc3QgbWVzc2FnZSA9IGAke3NlY29uZEltcG9ydH0gc2hvdWxkIG9jY3VyICR7b3JkZXJ9ICR7Zmlyc3RJbXBvcnR9YDtcblxuICBpZiAob3JkZXIgPT09ICdiZWZvcmUnKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZF0sXG4gICAgICAgIG5ld0NvZGUgKyBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGZpcnN0Um9vdFN0YXJ0LCBzZWNvbmRSb290U3RhcnQpLFxuICAgICAgKSksXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob3JkZXIgPT09ICdhZnRlcicpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBzZWNvbmROb2RlLm5vZGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4gZml4ZXIucmVwbGFjZVRleHRSYW5nZShcbiAgICAgICAgW3NlY29uZFJvb3RTdGFydCwgZmlyc3RSb290RW5kXSxcbiAgICAgICAgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhzZWNvbmRSb290RW5kLCBmaXJzdFJvb3RFbmQpICsgbmV3Q29kZSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydE91dE9mT3JkZXIoY29udGV4dCwgaW1wb3J0ZWQsIG91dE9mT3JkZXIsIG9yZGVyKSB7XG4gIG91dE9mT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoaW1wKSB7XG4gICAgY29uc3QgZm91bmQgPSBpbXBvcnRlZC5maW5kKGZ1bmN0aW9uIGhhc0hpZ2hlclJhbmsoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWRJdGVtLnJhbmsgPiBpbXAucmFuaztcbiAgICB9KTtcbiAgICBmaXhPdXRPZk9yZGVyKGNvbnRleHQsIGZvdW5kLCBpbXAsIG9yZGVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VPdXRPZk9yZGVyUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkKSB7XG4gIGNvbnN0IG91dE9mT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihpbXBvcnRlZCk7XG4gIGlmICghb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGVyZSBhcmUgdGhpbmdzIHRvIHJlcG9ydC4gVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVwb3J0ZWQgZXJyb3JzLlxuICBjb25zdCByZXZlcnNlZEltcG9ydGVkID0gcmV2ZXJzZShpbXBvcnRlZCk7XG4gIGNvbnN0IHJldmVyc2VkT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihyZXZlcnNlZEltcG9ydGVkKTtcbiAgaWYgKHJldmVyc2VkT3JkZXIubGVuZ3RoIDwgb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIHJldmVyc2VkSW1wb3J0ZWQsIHJldmVyc2VkT3JkZXIsICdhZnRlcicpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCAnYmVmb3JlJyk7XG59XG5cbmNvbnN0IGNvbXBhcmVTdHJpbmcgPSAoYSwgYikgPT4ge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG4vKiogU29tZSBwYXJzZXJzIChsYW5ndWFnZXMgd2l0aG91dCB0eXBlcykgZG9uJ3QgcHJvdmlkZSBJbXBvcnRLaW5kICovXG5jb25zdCBERUFGVUxUX0lNUE9SVF9LSU5EID0gJ3ZhbHVlJztcbmNvbnN0IGdldE5vcm1hbGl6ZWRWYWx1ZSA9IChub2RlLCB0b0xvd2VyQ2FzZSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIHJldHVybiB0b0xvd2VyQ2FzZSA/IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xufTtcblxuZnVuY3Rpb24gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBtdWx0aXBsaWVyID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgY29uc3Qgb3JkZXJJbXBvcnRLaW5kID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVySW1wb3J0S2luZDtcbiAgY29uc3QgbXVsdGlwbGllckltcG9ydEtpbmQgPSBvcmRlckltcG9ydEtpbmQgIT09ICdpZ25vcmUnXG4gICAgJiYgKGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQgPT09ICdhc2MnID8gMSA6IC0xKTtcblxuICByZXR1cm4gZnVuY3Rpb24gaW1wb3J0c1NvcnRlcihub2RlQSwgbm9kZUIpIHtcbiAgICBjb25zdCBpbXBvcnRBID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVBLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBjb25zdCBpbXBvcnRCID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVCLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgIGlmICghaW5jbHVkZXMoaW1wb3J0QSwgJy8nKSAmJiAhaW5jbHVkZXMoaW1wb3J0QiwgJy8nKSkge1xuICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhpbXBvcnRBLCBpbXBvcnRCKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgQSA9IGltcG9ydEEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IEIgPSBpbXBvcnRCLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBhID0gQS5sZW5ndGg7XG4gICAgICBjb25zdCBiID0gQi5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oYSwgYik7IGkrKykge1xuICAgICAgICAvLyBTa2lwIGNvbXBhcmluZyB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCBpZiB0aGV5IGFyZSByZWxhdGl2ZSBzZWdtZW50cyBmb3IgYm90aCBpbXBvcnRzXG4gICAgICAgIGlmIChpID09PSAwICYmICgoQVtpXSA9PT0gJy4nIHx8IEFbaV0gPT09ICcuLicpICYmIChCW2ldID09PSAnLicgfHwgQltpXSA9PT0gJy4uJykpKSB7XG4gICAgICAgICAgLy8gSWYgb25lIGlzIHNpYmxpbmcgYW5kIHRoZSBvdGhlciBwYXJlbnQgaW1wb3J0LCBubyBuZWVkIHRvIGNvbXBhcmUgYXQgYWxsLCBzaW5jZSB0aGUgcGF0aHMgYmVsb25nIGluIGRpZmZlcmVudCBncm91cHNcbiAgICAgICAgICBpZiAoQVtpXSAhPT0gQltpXSkgeyBicmVhazsgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoQVtpXSwgQltpXSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgYnJlYWs7IH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHQgJiYgYSAhPT0gYikge1xuICAgICAgICByZXN1bHQgPSBhIDwgYiA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgPSByZXN1bHQgKiBtdWx0aXBsaWVyO1xuXG4gICAgLy8gSW4gY2FzZSB0aGUgcGF0aHMgYXJlIGVxdWFsIChyZXN1bHQgPT09IDApLCBzb3J0IHRoZW0gYnkgaW1wb3J0S2luZFxuICAgIGlmICghcmVzdWx0ICYmIG11bHRpcGxpZXJJbXBvcnRLaW5kKSB7XG4gICAgICByZXN1bHQgPSBtdWx0aXBsaWVySW1wb3J0S2luZCAqIGNvbXBhcmVTdHJpbmcoXG4gICAgICAgIG5vZGVBLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgICBub2RlQi5ub2RlLmltcG9ydEtpbmQgfHwgREVBRlVMVF9JTVBPUlRfS0lORCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgZ3JvdXBlZEJ5UmFua3MgPSBncm91cEJ5KGltcG9ydGVkLCAoaXRlbSkgPT4gaXRlbS5yYW5rKTtcblxuICBjb25zdCBzb3J0ZXJGbiA9IGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpO1xuXG4gIC8vIHNvcnQgZ3JvdXAga2V5cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG9uIGluIG9yZGVyXG4gIGNvbnN0IGdyb3VwUmFua3MgPSBPYmplY3Qua2V5cyhncm91cGVkQnlSYW5rcykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfSk7XG5cbiAgLy8gc29ydCBpbXBvcnRzIGxvY2FsbHkgd2l0aGluIHRoZWlyIGdyb3VwXG4gIGdyb3VwUmFua3MuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBSYW5rKSB7XG4gICAgZ3JvdXBlZEJ5UmFua3NbZ3JvdXBSYW5rXS5zb3J0KHNvcnRlckZuKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGdsb2JhbGx5IHVuaXF1ZSByYW5rIHRvIGVhY2ggaW1wb3J0XG4gIGxldCBuZXdSYW5rID0gMDtcbiAgY29uc3QgYWxwaGFiZXRpemVkUmFua3MgPSBncm91cFJhbmtzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgICAgYWNjW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdID0gcGFyc2VJbnQoZ3JvdXBSYW5rLCAxMCkgKyBuZXdSYW5rO1xuICAgICAgbmV3UmFuayArPSAxO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBtdXRhdGUgdGhlIG9yaWdpbmFsIGdyb3VwLXJhbmsgd2l0aCBhbHBoYWJldGl6ZWQtcmFua1xuICBpbXBvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvcnRlZEl0ZW0pIHtcbiAgICBpbXBvcnRlZEl0ZW0ucmFuayA9IGFscGhhYmV0aXplZFJhbmtzW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdO1xuICB9KTtcbn1cblxuLy8gREVURUNUSU5HXG5cbmZ1bmN0aW9uIGNvbXB1dGVQYXRoUmFuayhyYW5rcywgcGF0aEdyb3VwcywgcGF0aCwgbWF4UG9zaXRpb24pIHtcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXRoR3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IHsgcGF0dGVybiwgcGF0dGVybk9wdGlvbnMsIGdyb3VwLCBwb3NpdGlvbiA9IDEgfSA9IHBhdGhHcm91cHNbaV07XG4gICAgaWYgKG1pbmltYXRjaChwYXRoLCBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucyB8fCB7IG5vY29tbWVudDogdHJ1ZSB9KSkge1xuICAgICAgcmV0dXJuIHJhbmtzW2dyb3VwXSArIHBvc2l0aW9uIC8gbWF4UG9zaXRpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcykge1xuICBsZXQgaW1wVHlwZTtcbiAgbGV0IHJhbms7XG4gIGlmIChpbXBvcnRFbnRyeS50eXBlID09PSAnaW1wb3J0Om9iamVjdCcpIHtcbiAgICBpbXBUeXBlID0gJ29iamVjdCc7XG4gIH0gZWxzZSBpZiAoaW1wb3J0RW50cnkubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScgJiYgcmFua3Mub21pdHRlZFR5cGVzLmluZGV4T2YoJ3R5cGUnKSA9PT0gLTEpIHtcbiAgICBpbXBUeXBlID0gJ3R5cGUnO1xuICB9IGVsc2Uge1xuICAgIGltcFR5cGUgPSBpbXBvcnRUeXBlKGltcG9ydEVudHJ5LnZhbHVlLCBjb250ZXh0KTtcbiAgfVxuICBpZiAoIWV4Y2x1ZGVkSW1wb3J0VHlwZXMuaGFzKGltcFR5cGUpKSB7XG4gICAgcmFuayA9IGNvbXB1dGVQYXRoUmFuayhyYW5rcy5ncm91cHMsIHJhbmtzLnBhdGhHcm91cHMsIGltcG9ydEVudHJ5LnZhbHVlLCByYW5rcy5tYXhQb3NpdGlvbik7XG4gIH1cbiAgaWYgKHR5cGVvZiByYW5rID09PSAndW5kZWZpbmVkJykge1xuICAgIHJhbmsgPSByYW5rcy5ncm91cHNbaW1wVHlwZV07XG4gIH1cbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgIT09ICdpbXBvcnQnICYmICFpbXBvcnRFbnRyeS50eXBlLnN0YXJ0c1dpdGgoJ2ltcG9ydDonKSkge1xuICAgIHJhbmsgKz0gMTAwO1xuICB9XG5cbiAgcmV0dXJuIHJhbms7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShjb250ZXh0LCBpbXBvcnRFbnRyeSwgcmFua3MsIGltcG9ydGVkLCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGNvbnN0IHJhbmsgPSBjb21wdXRlUmFuayhjb250ZXh0LCByYW5rcywgaW1wb3J0RW50cnksIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpO1xuICBpZiAocmFuayAhPT0gLTEpIHtcbiAgICBpbXBvcnRlZC5wdXNoKHsgLi4uaW1wb3J0RW50cnksIHJhbmsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpIHtcbiAgbGV0IG4gPSBub2RlO1xuICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBgY29uc3QgYmF6ID0gcmVxdWlyZSgnZm9vJykuYmFyLmJhemBcbiAgLy8gYW5kIGBjb25zdCBmb28gPSByZXF1aXJlKCdmb28nKSgpYFxuICB3aGlsZSAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG4ucGFyZW50Lm9iamVjdCA9PT0gblxuICAgIHx8IG4ucGFyZW50LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQuY2FsbGVlID09PSBuXG4gICkge1xuICAgIG4gPSBuLnBhcmVudDtcbiAgfVxuICBpZiAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nXG4gICAgJiYgbi5wYXJlbnQucGFyZW50LnBhcmVudC50eXBlID09PSAnUHJvZ3JhbSdcbiAgKSB7XG4gICAgcmV0dXJuIG4ucGFyZW50LnBhcmVudC5wYXJlbnQ7XG4gIH1cbn1cblxuY29uc3QgdHlwZXMgPSBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnaW50ZXJuYWwnLCAndW5rbm93bicsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCcsICdvYmplY3QnLCAndHlwZSddO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHR5cGUtcmFuayBwYWlycy5cbi8vIEV4YW1wbGU6IHsgaW5kZXg6IDAsIHNpYmxpbmc6IDEsIHBhcmVudDogMSwgZXh0ZXJuYWw6IDEsIGJ1aWx0aW46IDIsIGludGVybmFsOiAyIH1cbi8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgaXQgY29udGFpbnMgYSB0eXBlIHRoYXQgZG9lcyBub3QgZXhpc3QsIG9yIGhhcyBhIGR1cGxpY2F0ZVxuZnVuY3Rpb24gY29udmVydEdyb3Vwc1RvUmFua3MoZ3JvdXBzKSB7XG4gIGNvbnN0IHJhbmtPYmplY3QgPSBncm91cHMucmVkdWNlKGZ1bmN0aW9uIChyZXMsIGdyb3VwLCBpbmRleCkge1xuICAgIFtdLmNvbmNhdChncm91cCkuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBJdGVtKSB7XG4gICAgICBpZiAodHlwZXMuaW5kZXhPZihncm91cEl0ZW0pID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBVbmtub3duIHR5cGUgXFxgJHtKU09OLnN0cmluZ2lmeShncm91cEl0ZW0pfVxcYGApO1xuICAgICAgfVxuICAgICAgaWYgKHJlc1tncm91cEl0ZW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgcnVsZTogXFxgJHtncm91cEl0ZW19XFxgIGlzIGR1cGxpY2F0ZWRgKTtcbiAgICAgIH1cbiAgICAgIHJlc1tncm91cEl0ZW1dID0gaW5kZXggKiAyO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBvbWl0dGVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHJhbmtPYmplY3RbdHlwZV0gPT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBjb25zdCByYW5rcyA9IG9taXR0ZWRUeXBlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgdHlwZSkge1xuICAgIHJlc1t0eXBlXSA9IGdyb3Vwcy5sZW5ndGggKiAyO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHJhbmtPYmplY3QpO1xuXG4gIHJldHVybiB7IGdyb3VwczogcmFua3MsIG9taXR0ZWRUeXBlcyB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzKHBhdGhHcm91cHMpIHtcbiAgY29uc3QgYWZ0ZXIgPSB7fTtcbiAgY29uc3QgYmVmb3JlID0ge307XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXRoR3JvdXBzLm1hcCgocGF0aEdyb3VwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgZ3JvdXAsIHBvc2l0aW9uOiBwb3NpdGlvblN0cmluZyB9ID0gcGF0aEdyb3VwO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAoIWFmdGVyW2dyb3VwXSkge1xuICAgICAgICBhZnRlcltncm91cF0gPSAxO1xuICAgICAgfVxuICAgICAgcG9zaXRpb24gPSBhZnRlcltncm91cF0rKztcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKCFiZWZvcmVbZ3JvdXBdKSB7XG4gICAgICAgIGJlZm9yZVtncm91cF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGJlZm9yZVtncm91cF0ucHVzaChpbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGF0aEdyb3VwLCBwb3NpdGlvbiB9O1xuICB9KTtcblxuICBsZXQgbWF4UG9zaXRpb24gPSAxO1xuXG4gIE9iamVjdC5rZXlzKGJlZm9yZSkuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICBjb25zdCBncm91cExlbmd0aCA9IGJlZm9yZVtncm91cF0ubGVuZ3RoO1xuICAgIGJlZm9yZVtncm91cF0uZm9yRWFjaCgoZ3JvdXBJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgIHRyYW5zZm9ybWVkW2dyb3VwSW5kZXhdLnBvc2l0aW9uID0gLTEgKiAoZ3JvdXBMZW5ndGggLSBpbmRleCk7XG4gICAgfSk7XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBMZW5ndGgpO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhhZnRlcikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgZ3JvdXBOZXh0UG9zaXRpb24gPSBhZnRlcltrZXldO1xuICAgIG1heFBvc2l0aW9uID0gTWF0aC5tYXgobWF4UG9zaXRpb24sIGdyb3VwTmV4dFBvc2l0aW9uIC0gMSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aEdyb3VwczogdHJhbnNmb3JtZWQsXG4gICAgbWF4UG9zaXRpb246IG1heFBvc2l0aW9uID4gMTAgPyBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKE1hdGgubG9nMTAobWF4UG9zaXRpb24pKSkgOiAxMCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZml4TmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHByZXZSb290ID0gZmluZFJvb3ROb2RlKHByZXZpb3VzSW1wb3J0Lm5vZGUpO1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNBZnRlcldoaWxlKFxuICAgIGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLCBwcmV2Um9vdCwgY29tbWVudE9uU2FtZUxpbmVBcyhwcmV2Um9vdCkpO1xuXG4gIGxldCBlbmRPZkxpbmUgPSBwcmV2Um9vdC5yYW5nZVsxXTtcbiAgaWYgKHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDApIHtcbiAgICBlbmRPZkxpbmUgPSB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXTtcbiAgfVxuICByZXR1cm4gKGZpeGVyKSA9PiBmaXhlci5pbnNlcnRUZXh0QWZ0ZXJSYW5nZShbcHJldlJvb3QucmFuZ2VbMF0sIGVuZE9mTGluZV0sICdcXG4nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IGN1cnJSb290ID0gZmluZFJvb3ROb2RlKGN1cnJlbnRJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHJhbmdlVG9SZW1vdmUgPSBbXG4gICAgZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBwcmV2Um9vdCksXG4gICAgZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGN1cnJSb290KSxcbiAgXTtcbiAgaWYgKCgvXlxccyokLykudGVzdChzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHJhbmdlVG9SZW1vdmVbMF0sIHJhbmdlVG9SZW1vdmVbMV0pKSkge1xuICAgIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLnJlbW92ZVJhbmdlKHJhbmdlVG9SZW1vdmUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMsIGRpc3RpbmN0R3JvdXApIHtcbiAgY29uc3QgZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbiA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4ge1xuICAgIGNvbnN0IGxpbmVzQmV0d2VlbkltcG9ydHMgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5saW5lcy5zbGljZShcbiAgICAgIHByZXZpb3VzSW1wb3J0Lm5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgY3VycmVudEltcG9ydC5ub2RlLmxvYy5zdGFydC5saW5lIC0gMSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxpbmVzQmV0d2VlbkltcG9ydHMuZmlsdGVyKChsaW5lKSA9PiAhbGluZS50cmltKCkubGVuZ3RoKS5sZW5ndGg7XG4gIH07XG4gIGNvbnN0IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAgPSAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpID0+IGN1cnJlbnRJbXBvcnQucmFuayAtIDEgPj0gcHJldmlvdXNJbXBvcnQucmFuaztcbiAgbGV0IHByZXZpb3VzSW1wb3J0ID0gaW1wb3J0ZWRbMF07XG5cbiAgaW1wb3J0ZWQuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudEltcG9ydCkge1xuICAgIGNvbnN0IGVtcHR5TGluZXNCZXR3ZWVuID0gZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbihjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG4gICAgY29uc3QgaXNTdGFydE9mRGlzdGluY3RHcm91cCA9IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpO1xuXG4gICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMnXG4gICAgICAgIHx8IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICBpZiAoY3VycmVudEltcG9ydC5yYW5rICE9PSBwcmV2aW91c0ltcG9ydC5yYW5rICYmIGVtcHR5TGluZXNCZXR3ZWVuID09PSAwKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwIHx8ICFkaXN0aW5jdEdyb3VwICYmIGlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZW1wdHkgbGluZSBiZXR3ZWVuIGltcG9ydCBncm91cHMnLFxuICAgICAgICAgICAgZml4OiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMFxuICAgICAgICAmJiBuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJykge1xuICAgICAgICBpZiAoZGlzdGluY3RHcm91cCAmJiBjdXJyZW50SW1wb3J0LnJhbmsgPT09IHByZXZpb3VzSW1wb3J0LnJhbmsgfHwgIWRpc3RpbmN0R3JvdXAgJiYgIWlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIHdpdGhpbiBpbXBvcnQgZ3JvdXAnLFxuICAgICAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzQmV0d2VlbiA+IDApIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogcHJldmlvdXNJbXBvcnQubm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgIGZpeDogcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpb3VzSW1wb3J0ID0gY3VycmVudEltcG9ydDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpIHtcbiAgY29uc3QgYWxwaGFiZXRpemUgPSBvcHRpb25zLmFscGhhYmV0aXplIHx8IHt9O1xuICBjb25zdCBvcmRlciA9IGFscGhhYmV0aXplLm9yZGVyIHx8ICdpZ25vcmUnO1xuICBjb25zdCBvcmRlckltcG9ydEtpbmQgPSBhbHBoYWJldGl6ZS5vcmRlckltcG9ydEtpbmQgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IGNhc2VJbnNlbnNpdGl2ZSA9IGFscGhhYmV0aXplLmNhc2VJbnNlbnNpdGl2ZSB8fCBmYWxzZTtcblxuICByZXR1cm4geyBvcmRlciwgb3JkZXJJbXBvcnRLaW5kLCBjYXNlSW5zZW5zaXRpdmUgfTtcbn1cblxuLy8gVE9ETywgc2VtdmVyLW1ham9yOiBDaGFuZ2UgdGhlIGRlZmF1bHQgb2YgXCJkaXN0aW5jdEdyb3VwXCIgZnJvbSB0cnVlIHRvIGZhbHNlXG5jb25zdCBkZWZhdWx0RGlzdGluY3RHcm91cCA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgY29udmVudGlvbiBpbiBtb2R1bGUgaW1wb3J0IG9yZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ29yZGVyJyksXG4gICAgfSxcblxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3RpbmN0R3JvdXA6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHREaXN0aW5jdEdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGF0aEdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICBlbnVtOiB0eXBlcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IFsnYWZ0ZXInLCAnYmVmb3JlJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWydwYXR0ZXJuJywgJ2dyb3VwJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ25ld2xpbmVzLWJldHdlZW4nOiB7XG4gICAgICAgICAgICBlbnVtOiBbXG4gICAgICAgICAgICAgICdpZ25vcmUnLFxuICAgICAgICAgICAgICAnYWx3YXlzJyxcbiAgICAgICAgICAgICAgJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycsXG4gICAgICAgICAgICAgICduZXZlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXJJbXBvcnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YXJuT25VbmFzc2lnbmVkSW1wb3J0czoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gaW1wb3J0T3JkZXJSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPSBvcHRpb25zWyduZXdsaW5lcy1iZXR3ZWVuJ10gfHwgJ2lnbm9yZSc7XG4gICAgY29uc3QgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgPSBuZXcgU2V0KG9wdGlvbnMucGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgfHwgWydidWlsdGluJywgJ2V4dGVybmFsJywgJ29iamVjdCddKTtcbiAgICBjb25zdCBhbHBoYWJldGl6ZSA9IGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRpc3RpbmN0R3JvdXAgPSBvcHRpb25zLmRpc3RpbmN0R3JvdXAgPT0gbnVsbCA/IGRlZmF1bHREaXN0aW5jdEdyb3VwIDogISFvcHRpb25zLmRpc3RpbmN0R3JvdXA7XG4gICAgbGV0IHJhbmtzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF0aEdyb3VwcywgbWF4UG9zaXRpb24gfSA9IGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3Mob3B0aW9ucy5wYXRoR3JvdXBzIHx8IFtdKTtcbiAgICAgIGNvbnN0IHsgZ3JvdXBzLCBvbWl0dGVkVHlwZXMgfSA9IGNvbnZlcnRHcm91cHNUb1JhbmtzKG9wdGlvbnMuZ3JvdXBzIHx8IGRlZmF1bHRHcm91cHMpO1xuICAgICAgcmFua3MgPSB7XG4gICAgICAgIGdyb3VwcyxcbiAgICAgICAgb21pdHRlZFR5cGVzLFxuICAgICAgICBwYXRoR3JvdXBzLFxuICAgICAgICBtYXhQb3NpdGlvbixcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBjb25maWd1cmF0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9ncmFtKG5vZGUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGdldEJsb2NrSW1wb3J0cyhub2RlKSB7XG4gICAgICBpZiAoIWltcG9ydE1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgaW1wb3J0TWFwLnNldChub2RlLCBbXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1wb3J0TWFwLmdldChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICAvLyBJZ25vcmluZyB1bmFzc2lnbmVkIGltcG9ydHMgdW5sZXNzIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzIGlzIHNldFxuICAgICAgICBpZiAobm9kZS5zcGVjaWZpZXJzLmxlbmd0aCB8fCBvcHRpb25zLndhcm5PblVuYXNzaWduZWRJbXBvcnRzKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG5vZGUuc291cmNlLnZhbHVlO1xuICAgICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2ltcG9ydCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmFua3MsXG4gICAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgbGV0IHR5cGU7XG4gICAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICAgIGlmIChub2RlLmlzRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm1vZHVsZVJlZmVyZW5jZS50eXBlID09PSAnVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb24udmFsdWU7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICB0eXBlID0gJ2ltcG9ydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmdldFRleHQobm9kZS5tb2R1bGVSZWZlcmVuY2UpO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0Om9iamVjdCc7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKG5vZGUucGFyZW50KSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gaGFuZGxlUmVxdWlyZXMobm9kZSkge1xuICAgICAgICBpZiAoIWlzU3RhdGljUmVxdWlyZShub2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9jayA9IGdldFJlcXVpcmVCbG9jayhub2RlKTtcbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5hcmd1bWVudHNbMF0udmFsdWU7XG4gICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3JlcXVpcmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKGJsb2NrKSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gcmVwb3J0QW5kUmVzZXQoKSB7XG4gICAgICAgIGltcG9ydE1hcC5mb3JFYWNoKChpbXBvcnRlZCkgPT4ge1xuICAgICAgICAgIGlmIChuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFscGhhYmV0aXplLm9yZGVyICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWFrZU91dE9mT3JkZXJSZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbXBvcnRNYXAuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/scc.js b/node_modules/eslint-plugin-import/lib/scc.js new file mode 100644 index 0000000000..82eff7196d --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/scc.js @@ -0,0 +1,86 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _scc = require('@rtsao/scc');var _scc2 = _interopRequireDefault(_scc); +var _hash = require('eslint-module-utils/hash'); +var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); +var _builder = require('./exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _childContext = require('./exportMap/childContext');var _childContext2 = _interopRequireDefault(_childContext);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);}}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}} + +var cache = new Map();var + +StronglyConnectedComponentsBuilder = function () {function StronglyConnectedComponentsBuilder() {_classCallCheck(this, StronglyConnectedComponentsBuilder);}_createClass(StronglyConnectedComponentsBuilder, null, [{ key: 'clearCache', value: function () {function clearCache() + { + cache = new Map(); + }return clearCache;}() }, { key: 'get', value: function () {function get( + + source, context) { + var path = (0, _resolve2['default'])(source, context); + if (path == null) {return null;} + return StronglyConnectedComponentsBuilder['for']((0, _childContext2['default'])(path, context)); + }return get;}() }, { key: 'for', value: function () {function _for( + + context) { + var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); + if (cache.has(cacheKey)) { + return cache.get(cacheKey); + } + var scc = StronglyConnectedComponentsBuilder.calculate(context); + cache.set(cacheKey, scc); + return scc; + }return _for;}() }, { key: 'calculate', value: function () {function calculate( + + context) { + var exportMap = _builder2['default']['for'](context); + var adjacencyList = this.exportMapToAdjacencyList(exportMap); + var calculatedScc = (0, _scc2['default'])(adjacencyList); + return StronglyConnectedComponentsBuilder.calculatedSccToPlainObject(calculatedScc); + }return calculate;}() + + /** @returns {Map>} for each dep, what are its direct deps */ }, { key: 'exportMapToAdjacencyList', value: function () {function exportMapToAdjacencyList( + initialExportMap) { + var adjacencyList = new Map(); + // BFS + function visitNode(exportMap) { + if (!exportMap) { + return; + } + exportMap.imports.forEach(function (v, importedPath) { + var from = exportMap.path; + var to = importedPath; + + // Ignore type-only imports, because we care only about SCCs of value imports + var toTraverse = [].concat(_toConsumableArray(v.declarations)).filter(function (_ref) {var isOnlyImportingTypes = _ref.isOnlyImportingTypes;return !isOnlyImportingTypes;}); + if (toTraverse.length === 0) {return;} + + if (!adjacencyList.has(from)) { + adjacencyList.set(from, new Set()); + } + + if (adjacencyList.get(from).has(to)) { + return; // prevent endless loop + } + adjacencyList.get(from).add(to); + visitNode(v.getter()); + }); + } + visitNode(initialExportMap); + // Fill gaps + adjacencyList.forEach(function (values) { + values.forEach(function (value) { + if (!adjacencyList.has(value)) { + adjacencyList.set(value, new Set()); + } + }); + }); + return adjacencyList; + }return exportMapToAdjacencyList;}() + + /** @returns {Record} for each key, its SCC's index */ }, { key: 'calculatedSccToPlainObject', value: function () {function calculatedSccToPlainObject( + sccs) { + var obj = {}; + sccs.forEach(function (scc, index) { + scc.forEach(function (node) { + obj[node] = index; + }); + }); + return obj; + }return calculatedSccToPlainObject;}() }]);return StronglyConnectedComponentsBuilder;}();exports['default'] = StronglyConnectedComponentsBuilder; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2MuanMiXSwibmFtZXMiOlsiY2FjaGUiLCJNYXAiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwic291cmNlIiwiY29udGV4dCIsInBhdGgiLCJjYWNoZUtleSIsImRpZ2VzdCIsImhhcyIsImdldCIsInNjYyIsImNhbGN1bGF0ZSIsInNldCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJhZGphY2VuY3lMaXN0IiwiZXhwb3J0TWFwVG9BZGphY2VuY3lMaXN0IiwiY2FsY3VsYXRlZFNjYyIsImNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0IiwiaW5pdGlhbEV4cG9ydE1hcCIsInZpc2l0Tm9kZSIsImltcG9ydHMiLCJmb3JFYWNoIiwidiIsImltcG9ydGVkUGF0aCIsImZyb20iLCJ0byIsInRvVHJhdmVyc2UiLCJkZWNsYXJhdGlvbnMiLCJmaWx0ZXIiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsImxlbmd0aCIsIlNldCIsImFkZCIsImdldHRlciIsInZhbHVlcyIsInZhbHVlIiwic2NjcyIsIm9iaiIsImluZGV4Iiwibm9kZSJdLCJtYXBwaW5ncyI6ImduQkFBQSxpQztBQUNBO0FBQ0Esc0Q7QUFDQSw4QztBQUNBLHdEOztBQUVBLElBQUlBLFFBQVEsSUFBSUMsR0FBSixFQUFaLEM7O0FBRXFCQyxrQztBQUNDO0FBQ2xCRixnQkFBUSxJQUFJQyxHQUFKLEVBQVI7QUFDRCxPOztBQUVVRSxZLEVBQVFDLE8sRUFBUztBQUMxQixZQUFNQyxPQUFPLDBCQUFRRixNQUFSLEVBQWdCQyxPQUFoQixDQUFiO0FBQ0EsWUFBSUMsUUFBUSxJQUFaLEVBQWtCLENBQUUsT0FBTyxJQUFQLENBQWM7QUFDbEMsZUFBT0gsMENBQXVDLCtCQUFhRyxJQUFiLEVBQW1CRCxPQUFuQixDQUF2QyxDQUFQO0FBQ0QsTzs7QUFFVUEsYSxFQUFTO0FBQ2xCLFlBQU1FLFdBQVdGLFFBQVFFLFFBQVIsSUFBb0Isc0JBQVdGLE9BQVgsRUFBb0JHLE1BQXBCLENBQTJCLEtBQTNCLENBQXJDO0FBQ0EsWUFBSVAsTUFBTVEsR0FBTixDQUFVRixRQUFWLENBQUosRUFBeUI7QUFDdkIsaUJBQU9OLE1BQU1TLEdBQU4sQ0FBVUgsUUFBVixDQUFQO0FBQ0Q7QUFDRCxZQUFNSSxNQUFNUixtQ0FBbUNTLFNBQW5DLENBQTZDUCxPQUE3QyxDQUFaO0FBQ0FKLGNBQU1ZLEdBQU4sQ0FBVU4sUUFBVixFQUFvQkksR0FBcEI7QUFDQSxlQUFPQSxHQUFQO0FBQ0QsTzs7QUFFZ0JOLGEsRUFBUztBQUN4QixZQUFNUyxZQUFZQyw0QkFBcUJWLE9BQXJCLENBQWxCO0FBQ0EsWUFBTVcsZ0JBQWdCLEtBQUtDLHdCQUFMLENBQThCSCxTQUE5QixDQUF0QjtBQUNBLFlBQU1JLGdCQUFnQixzQkFBYUYsYUFBYixDQUF0QjtBQUNBLGVBQU9iLG1DQUFtQ2dCLDBCQUFuQyxDQUE4REQsYUFBOUQsQ0FBUDtBQUNELE87O0FBRUQscUY7QUFDZ0NFLHNCLEVBQWtCO0FBQ2hELFlBQU1KLGdCQUFnQixJQUFJZCxHQUFKLEVBQXRCO0FBQ0E7QUFDQSxpQkFBU21CLFNBQVQsQ0FBbUJQLFNBQW5CLEVBQThCO0FBQzVCLGNBQUksQ0FBQ0EsU0FBTCxFQUFnQjtBQUNkO0FBQ0Q7QUFDREEsb0JBQVVRLE9BQVYsQ0FBa0JDLE9BQWxCLENBQTBCLFVBQUNDLENBQUQsRUFBSUMsWUFBSixFQUFxQjtBQUM3QyxnQkFBTUMsT0FBT1osVUFBVVIsSUFBdkI7QUFDQSxnQkFBTXFCLEtBQUtGLFlBQVg7O0FBRUE7QUFDQSxnQkFBTUcsYUFBYSw2QkFBSUosRUFBRUssWUFBTixHQUFvQkMsTUFBcEIsQ0FBMkIscUJBQUdDLG9CQUFILFFBQUdBLG9CQUFILFFBQThCLENBQUNBLG9CQUEvQixFQUEzQixDQUFuQjtBQUNBLGdCQUFJSCxXQUFXSSxNQUFYLEtBQXNCLENBQTFCLEVBQTZCLENBQUUsT0FBUzs7QUFFeEMsZ0JBQUksQ0FBQ2hCLGNBQWNQLEdBQWQsQ0FBa0JpQixJQUFsQixDQUFMLEVBQThCO0FBQzVCViw0QkFBY0gsR0FBZCxDQUFrQmEsSUFBbEIsRUFBd0IsSUFBSU8sR0FBSixFQUF4QjtBQUNEOztBQUVELGdCQUFJakIsY0FBY04sR0FBZCxDQUFrQmdCLElBQWxCLEVBQXdCakIsR0FBeEIsQ0FBNEJrQixFQUE1QixDQUFKLEVBQXFDO0FBQ25DLHFCQURtQyxDQUMzQjtBQUNUO0FBQ0RYLDBCQUFjTixHQUFkLENBQWtCZ0IsSUFBbEIsRUFBd0JRLEdBQXhCLENBQTRCUCxFQUE1QjtBQUNBTixzQkFBVUcsRUFBRVcsTUFBRixFQUFWO0FBQ0QsV0FqQkQ7QUFrQkQ7QUFDRGQsa0JBQVVELGdCQUFWO0FBQ0E7QUFDQUosc0JBQWNPLE9BQWQsQ0FBc0IsVUFBQ2EsTUFBRCxFQUFZO0FBQ2hDQSxpQkFBT2IsT0FBUCxDQUFlLFVBQUNjLEtBQUQsRUFBVztBQUN4QixnQkFBSSxDQUFDckIsY0FBY1AsR0FBZCxDQUFrQjRCLEtBQWxCLENBQUwsRUFBK0I7QUFDN0JyQiw0QkFBY0gsR0FBZCxDQUFrQndCLEtBQWxCLEVBQXlCLElBQUlKLEdBQUosRUFBekI7QUFDRDtBQUNGLFdBSkQ7QUFLRCxTQU5EO0FBT0EsZUFBT2pCLGFBQVA7QUFDRCxPOztBQUVELDBFO0FBQ2tDc0IsVSxFQUFNO0FBQ3RDLFlBQU1DLE1BQU0sRUFBWjtBQUNBRCxhQUFLZixPQUFMLENBQWEsVUFBQ1osR0FBRCxFQUFNNkIsS0FBTixFQUFnQjtBQUMzQjdCLGNBQUlZLE9BQUosQ0FBWSxVQUFDa0IsSUFBRCxFQUFVO0FBQ3BCRixnQkFBSUUsSUFBSixJQUFZRCxLQUFaO0FBQ0QsV0FGRDtBQUdELFNBSkQ7QUFLQSxlQUFPRCxHQUFQO0FBQ0QsTyw2R0E1RWtCcEMsa0MiLCJmaWxlIjoic2NjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhbGN1bGF0ZVNjYyBmcm9tICdAcnRzYW8vc2NjJztcbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGNoaWxkQ29udGV4dCBmcm9tICcuL2V4cG9ydE1hcC9jaGlsZENvbnRleHQnO1xuXG5sZXQgY2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIge1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoc291cmNlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KTtcbiAgICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG4gICAgcmV0dXJuIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmIChjYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG4gICAgY29uc3Qgc2NjID0gU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzQnVpbGRlci5jYWxjdWxhdGUoY29udGV4dCk7XG4gICAgY2FjaGUuc2V0KGNhY2hlS2V5LCBzY2MpO1xuICAgIHJldHVybiBzY2M7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBleHBvcnRNYXAgPSBFeHBvcnRNYXBCdWlsZGVyLmZvcihjb250ZXh0KTtcbiAgICBjb25zdCBhZGphY2VuY3lMaXN0ID0gdGhpcy5leHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoZXhwb3J0TWFwKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkU2NjID0gY2FsY3VsYXRlU2NjKGFkamFjZW5jeUxpc3QpO1xuICAgIHJldHVybiBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyLmNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KGNhbGN1bGF0ZWRTY2MpO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59IGZvciBlYWNoIGRlcCwgd2hhdCBhcmUgaXRzIGRpcmVjdCBkZXBzICovXG4gIHN0YXRpYyBleHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoaW5pdGlhbEV4cG9ydE1hcCkge1xuICAgIGNvbnN0IGFkamFjZW5jeUxpc3QgPSBuZXcgTWFwKCk7XG4gICAgLy8gQkZTXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlKGV4cG9ydE1hcCkge1xuICAgICAgaWYgKCFleHBvcnRNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXhwb3J0TWFwLmltcG9ydHMuZm9yRWFjaCgodiwgaW1wb3J0ZWRQYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyb20gPSBleHBvcnRNYXAucGF0aDtcbiAgICAgICAgY29uc3QgdG8gPSBpbXBvcnRlZFBhdGg7XG5cbiAgICAgICAgLy8gSWdub3JlIHR5cGUtb25seSBpbXBvcnRzLCBiZWNhdXNlIHdlIGNhcmUgb25seSBhYm91dCBTQ0NzIG9mIHZhbHVlIGltcG9ydHNcbiAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi52LmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpc09ubHlJbXBvcnRpbmdUeXBlcyk7XG4gICAgICAgIGlmICh0b1RyYXZlcnNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKGZyb20pKSB7XG4gICAgICAgICAgYWRqYWNlbmN5TGlzdC5zZXQoZnJvbSwgbmV3IFNldCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGphY2VuY3lMaXN0LmdldChmcm9tKS5oYXModG8pKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGVuZGxlc3MgbG9vcFxuICAgICAgICB9XG4gICAgICAgIGFkamFjZW5jeUxpc3QuZ2V0KGZyb20pLmFkZCh0byk7XG4gICAgICAgIHZpc2l0Tm9kZSh2LmdldHRlcigpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdE5vZGUoaW5pdGlhbEV4cG9ydE1hcCk7XG4gICAgLy8gRmlsbCBnYXBzXG4gICAgYWRqYWNlbmN5TGlzdC5mb3JFYWNoKCh2YWx1ZXMpID0+IHtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGFkamFjZW5jeUxpc3Quc2V0KHZhbHVlLCBuZXcgU2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWRqYWNlbmN5TGlzdDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gZm9yIGVhY2gga2V5LCBpdHMgU0NDJ3MgaW5kZXggKi9cbiAgc3RhdGljIGNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KHNjY3MpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBzY2NzLmZvckVhY2goKHNjYywgaW5kZXgpID0+IHtcbiAgICAgIHNjYy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIG9ialtub2RlXSA9IGluZGV4O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/package.json b/node_modules/eslint-plugin-import/package.json index 5c0af48543..be150064d6 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.29.1", + "version": "2.30.0", "description": "Import with sanity.", "engines": { "node": ">=4" @@ -11,6 +11,7 @@ }, "files": [ "*.md", + "!{CONTRIBUTING,RELEASE}.md", "LICENSE", "docs", "lib", @@ -30,6 +31,9 @@ "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", + "test-examples": "npm run build && npm run test-example:legacy && npm run test-example:flat", + "test-example:legacy": "cd examples/legacy && npm install && npm run lint", + "test-example:flat": "cd examples/flat && npm install && npm run lint", "prepublishOnly": "safe-publish-latest && npm run build", "prepublish": "not-in-publish || npm run prepublishOnly", "preupdate:eslint-docs": "npm run build", @@ -82,13 +86,15 @@ "eslint-plugin-eslint-plugin": "^2.3.0", "eslint-plugin-import": "2.x", "eslint-plugin-json": "^2.1.2", + "find-babel-config": "=1.2.0", "fs-copy-file-sync": "^1.1.1", "glob": "^7.2.3", "in-publish": "^2.0.1", "jackspeak": "=2.1.1", + "jsonc-parser": "=3.2.0", "linklocal": "^2.8.2", "lodash.isarray": "^4.0.0", - "markdownlint-cli": "^0.38.0", + "markdownlint-cli": "~0.35", "mocha": "^3.5.3", "npm-which": "^3.0.1", "nyc": "^11.9.0", @@ -103,21 +109,22 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" }, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" } From b436a5fca74ec694aa77c4d1ea952dc964ee17fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:57:11 +0000 Subject: [PATCH 14/23] Bump actions/create-github-app-token in the actions group Bumps the actions group with 1 update: [actions/create-github-app-token](https://github.com/actions/create-github-app-token). Updates `actions/create-github-app-token` from 1.10.3 to 1.11.0 - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Commits](https://github.com/actions/create-github-app-token/compare/31c86eb3b33c9b601a1f60f98dcbfd1d70f379b4...5d869da34e18e7287c1daad50e0b8ea0f506ce69) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] --- .github/workflows/update-release-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-release-branch.yml b/.github/workflows/update-release-branch.yml index 2418fee447..c9ced18ab9 100644 --- a/.github/workflows/update-release-branch.yml +++ b/.github/workflows/update-release-branch.yml @@ -116,7 +116,7 @@ jobs: TARGET_BRANCH: ${{ matrix.target_branch }} steps: - name: Generate token - uses: actions/create-github-app-token@31c86eb3b33c9b601a1f60f98dcbfd1d70f379b4 + uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 id: app-token with: app-id: ${{ vars.AUTOMATION_APP_ID }} From 9580b7e6d5476eec292e45457c5db7f50ec27866 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Mon, 23 Sep 2024 12:09:39 -0700 Subject: [PATCH 15/23] Avoid uploading eslint sarif for dependabot PR Dependabot does not have `security-events: write` permission.s --- .github/workflows/pr-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index c9ea2dbb42..82a57a4663 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -30,7 +30,7 @@ jobs: - name: Upload sarif uses: github/codeql-action/upload-sarif@v3 # Only upload SARIF for the latest version of Node.js - if: "always() && matrix.node-types-version == 'current'" + if: "always() && matrix.node-types-version == 'current' && !startsWith(github.head_ref, 'dependabot/')" with: sarif_file: eslint.sarif category: eslint From 6225a95822b60309e4b8d0ef4c2be093e584d203 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Mon, 23 Sep 2024 12:20:21 -0700 Subject: [PATCH 16/23] Don't upload during cancelled jobs --- .github/workflows/pr-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 82a57a4663..f1cbf0c5db 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -30,7 +30,7 @@ jobs: - name: Upload sarif uses: github/codeql-action/upload-sarif@v3 # Only upload SARIF for the latest version of Node.js - if: "always() && matrix.node-types-version == 'current' && !startsWith(github.head_ref, 'dependabot/')" + if: "!cancelled() && matrix.node-types-version == 'current' && !startsWith(github.head_ref, 'dependabot/')" with: sarif_file: eslint.sarif category: eslint From 6b0ce4e2741238edebdaf9eda41eff6a31d1442f Mon Sep 17 00:00:00 2001 From: nickfyson Date: Mon, 23 Sep 2024 22:22:15 +0100 Subject: [PATCH 17/23] revert eslint-plugin-import to 2.29.1 --- node_modules/.package-lock.json | 29 +- node_modules/@rtsao/scc/LICENSE | 21 - node_modules/@rtsao/scc/README.md | 49 - node_modules/@rtsao/scc/index.d.ts | 1 - node_modules/@rtsao/scc/index.js | 51 -- node_modules/@rtsao/scc/index.js.flow | 5 - node_modules/@rtsao/scc/package.json | 7 - .../eslint-plugin-import/CHANGELOG.md | 68 +- .../eslint-plugin-import/CONTRIBUTING.md | 84 ++ node_modules/eslint-plugin-import/README.md | 205 ++--- node_modules/eslint-plugin-import/RELEASE.md | 54 ++ .../config/flat/errors.js | 14 - .../eslint-plugin-import/config/flat/react.js | 19 - .../config/flat/recommended.js | 26 - .../config/flat/warnings.js | 11 - .../eslint-plugin-import/config/react.js | 2 + .../eslint-plugin-import/config/typescript.js | 2 +- .../docs/rules/dynamic-import-chunkname.md | 44 +- .../docs/rules/no-empty-named-blocks.md | 2 +- .../docs/rules/no-extraneous-dependencies.md | 2 +- .../docs/rules/no-unused-modules.md | 15 +- .../eslint-plugin-import/docs/rules/order.md | 45 +- .../eslint-plugin-import/lib/ExportMap.js | 856 ++++++++++++++++++ .../eslint-plugin-import/lib/core/fsWalk.js | 49 - .../lib/core/importType.js | 19 +- .../lib/core/packagePath.js | 8 +- .../lib/exportMap/builder.js | 206 ----- .../lib/exportMap/captureDependency.js | 61 -- .../lib/exportMap/childContext.js | 33 - .../eslint-plugin-import/lib/exportMap/doc.js | 90 -- .../lib/exportMap/index.js | 180 ---- .../lib/exportMap/namespace.js | 39 - .../lib/exportMap/patternCapture.js | 41 - .../lib/exportMap/remotePath.js | 12 - .../lib/exportMap/specifier.js | 33 - .../lib/exportMap/typescript.js | 44 - .../lib/exportMap/visitor.js | 171 ---- .../eslint-plugin-import/lib/index.js | 35 +- .../eslint-plugin-import/lib/rules/default.js | 6 +- .../lib/rules/dynamic-import-chunkname.js | 64 +- .../eslint-plugin-import/lib/rules/export.js | 9 +- .../eslint-plugin-import/lib/rules/named.js | 8 +- .../lib/rules/namespace.js | 13 +- .../lib/rules/newline-after-import.js | 22 +- .../lib/rules/no-cycle.js | 36 +- .../lib/rules/no-deprecated.js | 9 +- .../lib/rules/no-duplicates.js | 184 ++-- .../lib/rules/no-extraneous-dependencies.js | 19 +- .../lib/rules/no-named-as-default-member.js | 6 +- .../lib/rules/no-named-as-default.js | 6 +- .../lib/rules/no-namespace.js | 149 +-- .../lib/rules/no-restricted-paths.js | 20 +- .../lib/rules/no-unused-modules.js | 266 ++---- .../eslint-plugin-import/lib/rules/order.js | 20 +- node_modules/eslint-plugin-import/lib/scc.js | 86 -- .../eslint-plugin-import/package.json | 27 +- package-lock.json | 31 +- package.json | 2 +- 58 files changed, 1439 insertions(+), 2177 deletions(-) delete mode 100644 node_modules/@rtsao/scc/LICENSE delete mode 100644 node_modules/@rtsao/scc/README.md delete mode 100644 node_modules/@rtsao/scc/index.d.ts delete mode 100644 node_modules/@rtsao/scc/index.js delete mode 100644 node_modules/@rtsao/scc/index.js.flow delete mode 100644 node_modules/@rtsao/scc/package.json create mode 100644 node_modules/eslint-plugin-import/CONTRIBUTING.md create mode 100644 node_modules/eslint-plugin-import/RELEASE.md delete mode 100644 node_modules/eslint-plugin-import/config/flat/errors.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/react.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/recommended.js delete mode 100644 node_modules/eslint-plugin-import/config/flat/warnings.js create mode 100644 node_modules/eslint-plugin-import/lib/ExportMap.js delete mode 100644 node_modules/eslint-plugin-import/lib/core/fsWalk.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/builder.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/childContext.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/doc.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/index.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/namespace.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/remotePath.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/specifier.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/typescript.js delete mode 100644 node_modules/eslint-plugin-import/lib/exportMap/visitor.js delete mode 100644 node_modules/eslint-plugin-import/lib/scc.js diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 210a5101e3..b3b99502ac 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -803,12 +803,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -2772,27 +2766,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/node_modules/@rtsao/scc/LICENSE b/node_modules/@rtsao/scc/LICENSE deleted file mode 100644 index a7cb450bed..0000000000 --- a/node_modules/@rtsao/scc/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Ryan Tsao - -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/@rtsao/scc/README.md b/node_modules/@rtsao/scc/README.md deleted file mode 100644 index 4697edd2ef..0000000000 --- a/node_modules/@rtsao/scc/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# `@rtsao/scc` - -Find strongly connected components of a directed graph using [Tarjan's algorithm](https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm). - -This algorithm efficiently yields both a topological order and list of any cycles. - -## Installation - -``` -yarn add @rtsao/scc -``` - -``` -npm install @rtsao/scc -``` - -## Usage - -```js -const scc = require("@rtsao/scc"); - -const digraph = new Map([ - ["a", new Set(["c", "d"])], - ["b", new Set(["a"])], - ["c", new Set(["b"])], - ["d", new Set(["e"])], - ["e", new Set()] -]); - -const components = scc(digraph); -// [ Set { 'e' }, Set { 'd' }, Set { 'b', 'c', 'a' } ] -``` - -#### Illustration of example input digraph -``` -┌───┐ ┌───┐ -│ d │ ◀── │ a │ ◀┐ -└───┘ └───┘ │ - │ │ │ - ▼ ▼ │ -┌───┐ ┌───┐ │ -│ e │ │ c │ │ -└───┘ └───┘ │ - │ │ - ▼ │ - ┌───┐ │ - │ b │ ─┘ - └───┘ -``` diff --git a/node_modules/@rtsao/scc/index.d.ts b/node_modules/@rtsao/scc/index.d.ts deleted file mode 100644 index ed46b8bc09..0000000000 --- a/node_modules/@rtsao/scc/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function tarjan(graph: Map>): Array> diff --git a/node_modules/@rtsao/scc/index.js b/node_modules/@rtsao/scc/index.js deleted file mode 100644 index b7dd5bb479..0000000000 --- a/node_modules/@rtsao/scc/index.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; - -module.exports = tarjan; - -// Adapted from https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm#The_algorithm_in_pseudocode - -function tarjan(graph) { - const indices = new Map(); - const lowlinks = new Map(); - const onStack = new Set(); - const stack = []; - const scc = []; - let idx = 0; - - function strongConnect(v) { - indices.set(v, idx); - lowlinks.set(v, idx); - idx++; - stack.push(v); - onStack.add(v); - - const deps = graph.get(v); - for (const dep of deps) { - if (!indices.has(dep)) { - strongConnect(dep); - lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(dep))); - } else if (onStack.has(dep)) { - lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(dep))); - } - } - - if (lowlinks.get(v) === indices.get(v)) { - const vertices = new Set(); - let w = null; - while (v !== w) { - w = stack.pop(); - onStack.delete(w); - vertices.add(w); - } - scc.push(vertices); - } - } - - for (const v of graph.keys()) { - if (!indices.has(v)) { - strongConnect(v); - } - } - - return scc; -} diff --git a/node_modules/@rtsao/scc/index.js.flow b/node_modules/@rtsao/scc/index.js.flow deleted file mode 100644 index 479ff4ff6a..0000000000 --- a/node_modules/@rtsao/scc/index.js.flow +++ /dev/null @@ -1,5 +0,0 @@ -// @flow - -declare function tarjan(graph: Map>): Array>; - -declare module.exports: typeof tarjan; diff --git a/node_modules/@rtsao/scc/package.json b/node_modules/@rtsao/scc/package.json deleted file mode 100644 index 67f67ccd99..0000000000 --- a/node_modules/@rtsao/scc/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@rtsao/scc", - "version": "1.1.0", - "repository": "rtsao/scc", - "main": "index.js", - "license": "MIT" -} diff --git a/node_modules/eslint-plugin-import/CHANGELOG.md b/node_modules/eslint-plugin-import/CHANGELOG.md index cf97fff94d..b81ad61a61 100644 --- a/node_modules/eslint-plugin-import/CHANGELOG.md +++ b/node_modules/eslint-plugin-import/CHANGELOG.md @@ -6,34 +6,6 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ## [Unreleased] -## [2.30.0] - 2024-09-02 - -### Added -- [`dynamic-import-chunkname`]: add `allowEmpty` option to allow empty leading comments ([#2942], thanks [@JiangWeixian]) -- [`dynamic-import-chunkname`]: Allow empty chunk name when webpackMode: 'eager' is set; add suggestions to remove name in eager mode ([#3004], thanks [@amsardesai]) -- [`no-unused-modules`]: Add `ignoreUnusedTypeExports` option ([#3011], thanks [@silverwind]) -- add support for Flat Config ([#3018], thanks [@michaelfaith]) - -### Fixed -- [`no-extraneous-dependencies`]: allow wrong path ([#3012], thanks [@chabb]) -- [`no-cycle`]: use scc algorithm to optimize ([#2998], thanks [@soryy708]) -- [`no-duplicates`]: Removing duplicates breaks in TypeScript ([#3033], thanks [@yesl-kim]) -- [`newline-after-import`]: fix considerComments option when require ([#2952], thanks [@developer-bandi]) -- [`order`]: do not compare first path segment for relative paths ([#2682]) ([#2885], thanks [@mihkeleidast]) - -### Changed -- [Docs] `no-extraneous-dependencies`: Make glob pattern description more explicit ([#2944], thanks [@mulztob]) -- [`no-unused-modules`]: add console message to help debug [#2866] -- [Refactor] `ExportMap`: make procedures static instead of monkeypatching exportmap ([#2982], thanks [@soryy708]) -- [Refactor] `ExportMap`: separate ExportMap instance from its builder logic ([#2985], thanks [@soryy708]) -- [Docs] `order`: Add a quick note on how unbound imports and --fix ([#2640], thanks [@minervabot]) -- [Tests] appveyor -> GHA (run tests on Windows in both pwsh and WSL + Ubuntu) ([#2987], thanks [@joeyguerra]) -- [actions] migrate OSX tests to GHA ([ljharb#37], thanks [@aks-]) -- [Refactor] `exportMapBuilder`: avoid hoisting ([#2989], thanks [@soryy708]) -- [Refactor] `ExportMap`: extract "builder" logic to separate files ([#2991], thanks [@soryy708]) -- [Docs] [`order`]: update the description of the `pathGroupsExcludedImportTypes` option ([#3036], thanks [@liby]) -- [readme] Clarify how to install the plugin ([#2993], thanks [@jwbth]) - ## [2.29.1] - 2023-12-14 ### Fixed @@ -1129,26 +1101,8 @@ for info on changes for earlier releases. [`memo-parser`]: ./memo-parser/README.md -[#3036]: https://github.com/import-js/eslint-plugin-import/pull/3036 -[#3033]: https://github.com/import-js/eslint-plugin-import/pull/3033 -[#3018]: https://github.com/import-js/eslint-plugin-import/pull/3018 -[#3012]: https://github.com/import-js/eslint-plugin-import/pull/3012 -[#3011]: https://github.com/import-js/eslint-plugin-import/pull/3011 -[#3004]: https://github.com/import-js/eslint-plugin-import/pull/3004 -[#2998]: https://github.com/import-js/eslint-plugin-import/pull/2998 -[#2993]: https://github.com/import-js/eslint-plugin-import/pull/2993 -[#2991]: https://github.com/import-js/eslint-plugin-import/pull/2991 -[#2989]: https://github.com/import-js/eslint-plugin-import/pull/2989 -[#2987]: https://github.com/import-js/eslint-plugin-import/pull/2987 -[#2985]: https://github.com/import-js/eslint-plugin-import/pull/2985 -[#2982]: https://github.com/import-js/eslint-plugin-import/pull/2982 -[#2952]: https://github.com/import-js/eslint-plugin-import/pull/2952 -[#2944]: https://github.com/import-js/eslint-plugin-import/pull/2944 -[#2942]: https://github.com/import-js/eslint-plugin-import/pull/2942 [#2919]: https://github.com/import-js/eslint-plugin-import/pull/2919 -[#2885]: https://github.com/import-js/eslint-plugin-import/pull/2885 [#2884]: https://github.com/import-js/eslint-plugin-import/pull/2884 -[#2866]: https://github.com/import-js/eslint-plugin-import/pull/2866 [#2854]: https://github.com/import-js/eslint-plugin-import/pull/2854 [#2851]: https://github.com/import-js/eslint-plugin-import/pull/2851 [#2850]: https://github.com/import-js/eslint-plugin-import/pull/2850 @@ -1162,7 +1116,6 @@ for info on changes for earlier releases. [#2735]: https://github.com/import-js/eslint-plugin-import/pull/2735 [#2699]: https://github.com/import-js/eslint-plugin-import/pull/2699 [#2664]: https://github.com/import-js/eslint-plugin-import/pull/2664 -[#2640]: https://github.com/import-js/eslint-plugin-import/pull/2640 [#2613]: https://github.com/import-js/eslint-plugin-import/pull/2613 [#2608]: https://github.com/import-js/eslint-plugin-import/pull/2608 [#2605]: https://github.com/import-js/eslint-plugin-import/pull/2605 @@ -1487,12 +1440,9 @@ for info on changes for earlier releases. [#164]: https://github.com/import-js/eslint-plugin-import/pull/164 [#157]: https://github.com/import-js/eslint-plugin-import/pull/157 -[ljharb#37]: https://github.com/ljharb/eslint-plugin-import/pull/37 - [#2930]: https://github.com/import-js/eslint-plugin-import/issues/2930 [#2687]: https://github.com/import-js/eslint-plugin-import/issues/2687 [#2684]: https://github.com/import-js/eslint-plugin-import/issues/2684 -[#2682]: https://github.com/import-js/eslint-plugin-import/issues/2682 [#2674]: https://github.com/import-js/eslint-plugin-import/issues/2674 [#2668]: https://github.com/import-js/eslint-plugin-import/issues/2668 [#2666]: https://github.com/import-js/eslint-plugin-import/issues/2666 @@ -1617,8 +1567,7 @@ for info on changes for earlier releases. [#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.30.0...HEAD -[2.30.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0 +[Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...HEAD [2.29.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.29.0...v2.29.1 [2.29.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.1...v2.29.0 [2.28.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.28.0...v2.28.1 @@ -1723,11 +1672,9 @@ for info on changes for earlier releases. [@adjerbetian]: https://github.com/adjerbetian [@AdriAt360]: https://github.com/AdriAt360 [@ai]: https://github.com/ai -[@aks-]: https://github.com/aks- [@aladdin-add]: https://github.com/aladdin-add [@alex-page]: https://github.com/alex-page [@alexgorbatchev]: https://github.com/alexgorbatchev -[@amsardesai]: https://github.com/amsardesai [@andreubotella]: https://github.com/andreubotella [@AndrewLeedham]: https://github.com/AndrewLeedham [@andyogo]: https://github.com/andyogo @@ -1752,13 +1699,11 @@ for info on changes for earlier releases. [@bicstone]: https://github.com/bicstone [@Blasz]: https://github.com/Blasz [@bmish]: https://github.com/bmish -[@developer-bandi]: https://github.com/developer-bandi [@borisyankov]: https://github.com/borisyankov [@bradennapier]: https://github.com/bradennapier [@bradzacher]: https://github.com/bradzacher [@brendo]: https://github.com/brendo [@brettz9]: https://github.com/brettz9 -[@chabb]: https://github.com/chabb [@Chamion]: https://github.com/Chamion [@charlessuh]: https://github.com/charlessuh [@charpeni]: https://github.com/charpeni @@ -1825,12 +1770,10 @@ for info on changes for earlier releases. [@jeffshaver]: https://github.com/jeffshaver [@jf248]: https://github.com/jf248 [@jfmengels]: https://github.com/jfmengels -[@JiangWeixian]: https://github.com/JiangWeixian [@jimbolla]: https://github.com/jimbolla [@jkimbo]: https://github.com/jkimbo [@joaovieira]: https://github.com/joaovieira [@joe-matsec]: https://github.com/joe-matsec -[@joeyguerra]: https://github.com/joeyguerra [@johndevedu]: https://github.com/johndevedu [@johnthagen]: https://github.com/johnthagen [@jonboiser]: https://github.com/jonboiser @@ -1840,7 +1783,6 @@ for info on changes for earlier releases. [@jseminck]: https://github.com/jseminck [@julien1619]: https://github.com/julien1619 [@justinanastos]: https://github.com/justinanastos -[@jwbth]: https://github.com/jwbth [@k15a]: https://github.com/k15a [@kentcdodds]: https://github.com/kentcdodds [@kevin940726]: https://github.com/kevin940726 @@ -1888,15 +1830,11 @@ for info on changes for earlier releases. [@meowtec]: https://github.com/meowtec [@mgwalker]: https://github.com/mgwalker [@mhmadhamster]: https://github.com/MhMadHamster -[@michaelfaith]: https://github.com/michaelfaith -[@mihkeleidast]: https://github.com/mihkeleidast [@MikeyBeLike]: https://github.com/MikeyBeLike -[@minervabot]: https://github.com/minervabot [@mpint]: https://github.com/mpint [@mplewis]: https://github.com/mplewis [@mrmckeb]: https://github.com/mrmckeb [@msvab]: https://github.com/msvab -[@mulztob]: https://github.com/mulztob [@mx-bernhard]: https://github.com/mx-bernhard [@Nfinished]: https://github.com/Nfinished [@nickofthyme]: https://github.com/nickofthyme @@ -1905,9 +1843,9 @@ for info on changes for earlier releases. [@ntdb]: https://github.com/ntdb [@nwalters512]: https://github.com/nwalters512 [@ombene]: https://github.com/ombene +[@Pandemic1617]: https://github.com/Pandemic1617 [@ota-meshi]: https://github.com/ota-meshi [@OutdatedVersion]: https://github.com/OutdatedVersion -[@Pandemic1617]: https://github.com/Pandemic1617 [@panrafal]: https://github.com/panrafal [@paztis]: https://github.com/paztis [@pcorpet]: https://github.com/pcorpet @@ -1939,7 +1877,6 @@ for info on changes for earlier releases. [@sergei-startsev]: https://github.com/sergei-startsev [@sharmilajesupaul]: https://github.com/sharmilajesupaul [@sheepsteak]: https://github.com/sheepsteak -[@silverwind]: https://github.com/silverwind [@silviogutierrez]: https://github.com/silviogutierrez [@SimenB]: https://github.com/SimenB [@simmo]: https://github.com/simmo @@ -1982,7 +1919,6 @@ for info on changes for earlier releases. [@wtgtybhertgeghgtwtg]: https://github.com/wtgtybhertgeghgtwtg [@xM8WVqaG]: https://github.com/xM8WVqaG [@xpl]: https://github.com/xpl -[@yesl-kim]: https://github.com/yesl-kim [@yndajas]: https://github.com/yndajas [@yordis]: https://github.com/yordis [@Zamiell]: https://github.com/Zamiell diff --git a/node_modules/eslint-plugin-import/CONTRIBUTING.md b/node_modules/eslint-plugin-import/CONTRIBUTING.md new file mode 100644 index 0000000000..871e90ad8c --- /dev/null +++ b/node_modules/eslint-plugin-import/CONTRIBUTING.md @@ -0,0 +1,84 @@ +# Contributing + +Thanks for your interest in helping out! Here are a **few** _weird_ tricks to ~~cut your mortgage in half~~ maximize the global net efficiency of your efforts! + +## TL;DR: Checklist + +When opening an [issue](#issues): + + - [ ] search open/closed issues + - [ ] discuss bug/enhancement in new or old issue + +[PR](#prs) time: + + - [ ] write tests + - [ ] implement feature/fix bug + - [ ] update docs + - [ ] make a note in change log + +Remember, you don't need to do it all yourself; any of these are helpful! 😎 + +## How to get started + +If you are new to `eslint`, below are a few resources that will help you to familiarize yourself with the project. + + - Watch [this presentation](https://www.youtube.com/watch?v=2W9tUnALrLg) to learn the fundamental concept of Abstract Syntax Trees (AST) and the way `eslint` works under the hood. + - Familiarize yourself with the [AST explorer](https://astexplorer.net/) tool. Look into rules in `docs/rules`, create patterns in the rules, then analyze its AST. + - Explore the blog posts on how to create a custom rule. [One blog post](https://blog.yonatan.dev/writing-a-custom-eslint-rule-to-spot-undeclared-props/). [Second blog post](https://betterprogramming.pub/creating-custom-eslint-rules-cdc579694608). + - Read the official `eslint` [developer guide](https://eslint.org/docs/latest/developer-guide/architecture/). + +## Issues + +### Search open + closed issues for similar cases + + You may find an open issue that closely matches what you are thinking. You may also find a closed issue with discussion that either solves your problem or explains why we are unlikely to solve it in the near future. + + If you find a matching issue that is open, and marked `accepted` and/or `help wanted`, you might want to [open a PR](#prs). + +### Open an issue + + Let's discuss your issue. Could be as simple as unclear documentation or a wonky config file. + If you're suggesting a feature, it might exist and need better documentation, or it might be in process. Even given those, some discussion might be warranted to ensure the enhancement is clear. + + You're welcome to jump right to a PR, but without a discussion, can't make any guarantees about merging. + + That said: sometimes seeing the code makes the discussion clearer.😄 + +This is a helpful contribution all by itself. Thanks! + +## PRs + +If you would like to implement something, firstly: thanks! Community contributions are a magical thing. Like Redux or [the flux capacitor](https://youtu.be/SR5BfQ4rEqQ?t=2m25s), they make open source possible. + +**Working on your first Pull Request?** +You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). + +Here are some things to keep in mind when working on a PR: + +**Trying to update an inactive Pull Request?** +If a PR is open, but unfortunately the author is, for any reason, not available to apply code review fixes or rebase the source branch, then please **do not open a new PR**. +Instead, paste a link to your own branch in the PR, and the maintainers can pull in your changes and update the existing PR in-place. + +### Tests + +A PR that is just failing test cases for an existing issue is very helpful, as this can take as much time (if not more) as it takes to implement a new feature or fix a bug. + +If you only have enough time to write tests, fantastic! Submit away. This is a great jumping-off point for a core contributor or even another PR to continue what you've started. + +### Docs + +For enhancements to rules, please update the docs in `docs/rules` matching the rule filename from `src/rules` or the rule description in `meta.docs.description`. Running `npm run update:eslint-docs` will update the [README.md] and rule doc header. + +Bugfixes may not warrant docs changes, though it's worth skimming the existing docs to see if there are any relevant caveats that need to be removed. + +### Changelog + +Please add a quick blurb to the [**Unreleased**](./CHANGELOG.md#unreleased) section of the change log. Give yourself some credit, and please link back to the PR for future reference. This is especially helpful for resolver changes, as the resolvers are less frequently modified and published. + +Note also that the change log can't magically link back to Github entities (i.e. PRs, issues, users) or rules; there are a handful of footnote URL definitions at the bottom. You may need to add one or more URL if you've square-bracketed any such items. + +## Code of Conduct + +Please familiarize yourself with the [Code of Conduct](https://github.com/import-js/.github/blob/main/CODE_OF_CONDUCT.md). + +[README.md]: ./README.md diff --git a/node_modules/eslint-plugin-import/README.md b/node_modules/eslint-plugin-import/README.md index 8cc723423f..1baa0069b3 100644 --- a/node_modules/eslint-plugin-import/README.md +++ b/node_modules/eslint-plugin-import/README.md @@ -23,7 +23,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a ⌨️ Set in the `typescript` configuration.\ 🚸 Set in the `warnings` configuration.\ 🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\ -💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\ +💡 Manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions).\ ❌ Deprecated. ### Helpful warnings @@ -73,7 +73,7 @@ This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, a | Name                            | Description | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ | | :------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :- | :---- | :- | :- | :- | :- | | [consistent-type-specifier-style](docs/rules/consistent-type-specifier-style.md) | Enforce or ban the use of inline type-only markers for named imports. | | | | 🔧 | | | -| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | 💡 | | +| [dynamic-import-chunkname](docs/rules/dynamic-import-chunkname.md) | Enforce a leading comment with the webpackChunkName for dynamic imports. | | | | | | | | [exports-last](docs/rules/exports-last.md) | Ensure all exports appear after other statements. | | | | | | | | [extensions](docs/rules/extensions.md) | Ensure consistent use of file extension within the import path. | | | | | | | | [first](docs/rules/first.md) | Ensure all imports appear before other statements. | | | | 🔧 | | | @@ -106,60 +106,29 @@ The maintainers of `eslint-plugin-import` and thousands of other packages are wo npm install eslint-plugin-import --save-dev ``` -### Config - Legacy (`.eslintrc`) +All rules are off by default. However, you may configure them manually +in your `.eslintrc.(yml|json|js)`, or extend one of the canned configs: -All rules are off by default. However, you may extend one of the preset configs, or configure them manually in your `.eslintrc.(yml|json|js)`. - - - Extending a preset config: - -```jsonc -{ - "extends": [ - "eslint:recommended", - "plugin:import/recommended", - ], -} -``` - - - Configuring manually: - -```jsonc -{ - "rules": { - "import/no-unresolved": ["error", { "commonjs": true, "amd": true }] - "import/named": "error", - "import/namespace": "error", - "import/default": "error", - "import/export": "error", - // etc... - }, -}, -``` - -### Config - Flat (`eslint.config.js`) - -All rules are off by default. However, you may configure them manually in your `eslint.config.(js|cjs|mjs)`, or extend one of the preset configs: - -```js -import importPlugin from 'eslint-plugin-import'; -import js from '@eslint/js'; - -export default [ - js.configs.recommended, - importPlugin.flatConfigs.recommended, - { - files: ['**/*.{js,mjs,cjs}'], - languageOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - }, - rules: { - 'no-unused-vars': 'off', - 'import/no-dynamic-require': 'warn', - 'import/no-nodejs-modules': 'warn', - }, - }, -]; +```yaml +--- +extends: + - eslint:recommended + - plugin:import/recommended + # alternatively, 'recommended' is the combination of these two rule sets: + - plugin:import/errors + - plugin:import/warnings + +# or configure manually: +plugins: + - import + +rules: + import/no-unresolved: [2, {commonjs: true, amd: true}] + import/named: 2 + import/namespace: 2 + import/default: 2 + import/export: 2 + # etc... ``` ## TypeScript @@ -168,23 +137,18 @@ You may use the following snippet or assemble your own config using the granular Make sure you have installed [`@typescript-eslint/parser`] and [`eslint-import-resolver-typescript`] which are used in the following configuration. -```jsonc -{ - "extends": [ - "eslint:recommended", - "plugin:import/recommended", -// the following lines do the trick - "plugin:import/typescript", - ], - "settings": { - "import/resolver": { - // You will also need to install and configure the TypeScript resolver - // See also https://github.com/import-js/eslint-import-resolver-typescript#configuration - "typescript": true, - "node": true, - }, - }, -} +```yaml +extends: + - eslint:recommended + - plugin:import/recommended +# the following lines do the trick + - plugin:import/typescript +settings: + import/resolver: + # You will also need to install and configure the TypeScript resolver + # See also https://github.com/import-js/eslint-import-resolver-typescript#configuration + typescript: true + node: true ``` [`@typescript-eslint/parser`]: https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser @@ -213,16 +177,6 @@ You can reference resolvers in several ways (in order of precedence): - as a conventional `eslint-import-resolver` name, like `eslint-import-resolver-foo`: - ```jsonc -// .eslintrc -{ - "settings": { - // uses 'eslint-import-resolver-foo': - "import/resolver": "foo", - }, -} -``` - ```yaml # .eslintrc.yml settings: @@ -243,15 +197,6 @@ module.exports = { - with a full npm module name, like `my-awesome-npm-module`: -```jsonc -// .eslintrc -{ - "settings": { - "import/resolver": "my-awesome-npm-module", - }, -} -``` - ```yaml # .eslintrc.yml settings: @@ -347,15 +292,11 @@ In practice, this means rules other than [`no-unresolved`](./docs/rules/no-unres `no-unresolved` has its own [`ignore`](./docs/rules/no-unresolved.md#ignore) setting. -```jsonc -{ - "settings": { - "import/ignore": [ - "\.coffee$", // fraught with parse errors - "\.(scss|less|css)$", // can't parse unprocessed CSS modules, either - ], - }, -} +```yaml +settings: + import/ignore: + - \.coffee$ # fraught with parse errors + - \.(scss|less|css)$ # can't parse unprocessed CSS modules, either ``` ### `import/core-modules` @@ -374,13 +315,10 @@ import 'electron' // without extra config, will be flagged as unresolved! that would otherwise be unresolved. To avoid this, you may provide `electron` as a core module: -```jsonc -// .eslintrc -{ - "settings": { - "import/core-modules": ["electron"], - }, -} +```yaml +# .eslintrc.yml +settings: + import/core-modules: [ electron ] ``` In Electron's specific case, there is a shared config named `electron` @@ -413,15 +351,11 @@ dependency parser will require and use the map key as the parser instead of the configured ESLint parser. This is useful if you're inter-op-ing with TypeScript directly using webpack, for example: -```jsonc -// .eslintrc -{ - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"], - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/parsers: + "@typescript-eslint/parser": [ .ts, .tsx ] ``` In this case, [`@typescript-eslint/parser`](https://www.npmjs.com/package/@typescript-eslint/parser) @@ -451,28 +385,20 @@ For long-lasting processes, like [`eslint_d`] or [`eslint-loader`], however, it' If you never use [`eslint_d`] or [`eslint-loader`], you may set the cache lifetime to `Infinity` and everything should be fine: -```jsonc -// .eslintrc -{ - "settings": { - "import/cache": { - "lifetime": "∞", // or Infinity, in a JS config - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/cache: + lifetime: ∞ # or Infinity ``` Otherwise, set some integer, and cache entries will be evicted after that many seconds have elapsed: -```jsonc -// .eslintrc -{ - "settings": { - "import/cache": { - "lifetime": 5, // 30 is the default - }, - }, -} +```yaml +# .eslintrc.yml +settings: + import/cache: + lifetime: 5 # 30 is the default ``` [`eslint_d`]: https://www.npmjs.com/package/eslint_d @@ -486,13 +412,10 @@ By default, any package referenced from [`import/external-module-folders`](#impo For example, if your packages in a monorepo are all in `@scope`, you can configure `import/internal-regex` like this -```jsonc -// .eslintrc -{ - "settings": { - "import/internal-regex": "^@scope/", - }, -} +```yaml +# .eslintrc.yml +settings: + import/internal-regex: ^@scope/ ``` ## SublimeLinter-eslint diff --git a/node_modules/eslint-plugin-import/RELEASE.md b/node_modules/eslint-plugin-import/RELEASE.md new file mode 100644 index 0000000000..6c048dc093 --- /dev/null +++ b/node_modules/eslint-plugin-import/RELEASE.md @@ -0,0 +1,54 @@ +# Release steps + +1. create a `release-[x.y.z]` branch from tip of `main` (or whatever release commit) + + ```bash + git checkout main && git pull && git checkout -b release-2.1.0 + ``` + +2. bump `package.json` + update CHANGELOG version links for all releasing packages (i.e., root + any resolvers) + + In changelog for core plugin, normally leave [Unreleased] but update its link at the bottom + to be rooted at the new version's tag, and add a link for the new version rooted + at last version's tag. + + ```markdown + [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...HEAD + [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 + ``` + + becomes + + ```markdown + [Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.1.0...HEAD + [2.1.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.1...v2.1.0 + [2.0.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.0.0...v2.0.1 + ``` + + Generally, don't use `npm version` for this because it creates a tag, which I normally + wait until signoff from contributors and actually `npm publish`-ing to snap the tag. + +3. create pull request from `release-[x.y.z]` into `release` branch + + I like this because it + - lists all commits in the release + - provides a commentary location to discuss the release + - builds in CI and provides test results + +4. iterate on feedback + - handle other issues + - merge more PRs + - fix issues in changelog/docs + +5. `npm publish` from `release-[x.y.z]` branch + - don't forget resolvers! + +6. tag commit (`v[x.y.z]`) + - again, not forgetting resolvers, if needed (`resolvers/[name]/v[t.u.v]`) + +7. merge `release-[x.y.z]` into `release` ( + - ideally fast-forward, probably with Git CLI instead of Github + +8. merge `release` into `main` + +Done! diff --git a/node_modules/eslint-plugin-import/config/flat/errors.js b/node_modules/eslint-plugin-import/config/flat/errors.js deleted file mode 100644 index 98c19f824d..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/errors.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * unopinionated config. just the things that are necessarily runtime errors - * waiting to happen. - * @type {Object} - */ -module.exports = { - rules: { - 'import/no-unresolved': 2, - 'import/named': 2, - 'import/namespace': 2, - 'import/default': 2, - 'import/export': 2, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/react.js b/node_modules/eslint-plugin-import/config/flat/react.js deleted file mode 100644 index 0867471422..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/react.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Adds `.jsx` as an extension, and enables JSX parsing. - * - * Even if _you_ aren't using JSX (or .jsx) directly, if your dependencies - * define jsnext:main and have JSX internally, you may run into problems - * if you don't enable these settings at the top level. - */ -module.exports = { - settings: { - 'import/extensions': ['.js', '.jsx', '.mjs', '.cjs'], - }, - languageOptions: { - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/recommended.js b/node_modules/eslint-plugin-import/config/flat/recommended.js deleted file mode 100644 index 11bc1f52a4..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/recommended.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * The basics. - * @type {Object} - */ -module.exports = { - rules: { - // analysis/correctness - 'import/no-unresolved': 'error', - 'import/named': 'error', - 'import/namespace': 'error', - 'import/default': 'error', - 'import/export': 'error', - - // red flags (thus, warnings) - 'import/no-named-as-default': 'warn', - 'import/no-named-as-default-member': 'warn', - 'import/no-duplicates': 'warn', - }, - - // need all these for parsing dependencies (even if _your_ code doesn't need - // all of them) - languageOptions: { - ecmaVersion: 2018, - sourceType: 'module', - }, -}; diff --git a/node_modules/eslint-plugin-import/config/flat/warnings.js b/node_modules/eslint-plugin-import/config/flat/warnings.js deleted file mode 100644 index e788ff9cde..0000000000 --- a/node_modules/eslint-plugin-import/config/flat/warnings.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * more opinionated config. - * @type {Object} - */ -module.exports = { - rules: { - 'import/no-named-as-default': 1, - 'import/no-named-as-default-member': 1, - 'import/no-duplicates': 1, - }, -}; diff --git a/node_modules/eslint-plugin-import/config/react.js b/node_modules/eslint-plugin-import/config/react.js index 1ae8e1a51a..68555512d7 100644 --- a/node_modules/eslint-plugin-import/config/react.js +++ b/node_modules/eslint-plugin-import/config/react.js @@ -6,6 +6,7 @@ * if you don't enable these settings at the top level. */ module.exports = { + settings: { 'import/extensions': ['.js', '.jsx'], }, @@ -13,4 +14,5 @@ module.exports = { parserOptions: { ecmaFeatures: { jsx: true }, }, + }; diff --git a/node_modules/eslint-plugin-import/config/typescript.js b/node_modules/eslint-plugin-import/config/typescript.js index d5eb57a465..ff7d0795c8 100644 --- a/node_modules/eslint-plugin-import/config/typescript.js +++ b/node_modules/eslint-plugin-import/config/typescript.js @@ -9,7 +9,7 @@ // `.ts`/`.tsx`/`.js`/`.jsx` implementation. const typeScriptExtensions = ['.ts', '.cts', '.mts', '.tsx']; -const allExtensions = [...typeScriptExtensions, '.js', '.jsx', '.mjs', '.cjs']; +const allExtensions = [...typeScriptExtensions, '.js', '.jsx']; module.exports = { settings: { diff --git a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md index de554148ee..35ae9df516 100644 --- a/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md +++ b/node_modules/eslint-plugin-import/docs/rules/dynamic-import-chunkname.md @@ -1,7 +1,5 @@ # import/dynamic-import-chunkname -💡 This rule is manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). - This rule reports any dynamic imports without a webpackChunkName specified in a leading block comment in the proper format. @@ -17,8 +15,7 @@ You can also configure the regex format you'd like to accept for the webpackChun { "dynamic-import-chunkname": [2, { importFunctions: ["dynamicImport"], - webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+", - allowEmpty: false + webpackChunknameFormat: "[a-zA-Z0-57-9-/_]+" }] } ``` @@ -58,13 +55,6 @@ import( // webpackChunkName: "someModule" 'someModule', ); - -// chunk names are disallowed when eager mode is set -import( - /* webpackMode: "eager" */ - /* webpackChunkName: "someModule" */ - 'someModule', -) ``` ### valid @@ -97,38 +87,6 @@ The following patterns are valid: ); ``` -### `allowEmpty: true` - -If you want to allow dynamic imports without a webpackChunkName, you can set `allowEmpty: true` in the rule config. This will allow dynamic imports without a leading comment, or with a leading comment that does not contain a webpackChunkName. - -Given `{ "allowEmpty": true }`: - - -### valid - -The following patterns are valid: - -```javascript -import('someModule'); - -import( - /* webpackChunkName: "someModule" */ - 'someModule', -); -``` - -### invalid - -The following patterns are invalid: - -```javascript -// incorrectly formatted comment -import( - /*webpackChunkName:"someModule"*/ - 'someModule', -); -``` - ## When Not To Use It If you don't care that webpack will autogenerate chunk names and may blow up browser caches and bundle size reports. diff --git a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md index ad83c535f8..85821d8afe 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-empty-named-blocks.md @@ -1,6 +1,6 @@ # import/no-empty-named-blocks -🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions). +🔧💡 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix) and manually fixable by [editor suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions). diff --git a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md index 848d5bb0da..547e5c2e57 100644 --- a/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md +++ b/node_modules/eslint-plugin-import/docs/rules/no-extraneous-dependencies.md @@ -32,7 +32,7 @@ You can also use an array of globs instead of literal booleans: "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js"]}] ``` -When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted (i.e. not the imported file/module) matches a single glob in the array, and `false` otherwise. +When using an array of globs, the setting will be set to `true` (no errors reported) if the name of the file being linted matches a single glob in the array, and `false` otherwise. There are 2 boolean options to opt into checking extra imports that are normally ignored: `includeInternal`, which enables the checking of internal modules, and `includeTypes`, which enables checking of type imports in TypeScript. 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 359c341ea0..53c2479272 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 @@ -29,9 +29,8 @@ This rule takes the following option: - **`missingExports`**: if `true`, files without any exports are reported (defaults to `false`) - **`unusedExports`**: if `true`, exports without any static usage within other modules are reported (defaults to `false`) - - **`ignoreUnusedTypeExports`**: if `true`, TypeScript type exports without any static usage within other modules are reported (defaults to `false` and has no effect unless `unusedExports` is `true`) - - **`src`**: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided - - **`ignoreExports`**: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) + - `src`: an array with files/paths to be analyzed. It only applies to unused exports. Defaults to `process.cwd()`, if not provided + - `ignoreExports`: an array with files/paths for which unused exports will not be reported (e.g module entry points in a published package) ### Example for missing exports @@ -117,16 +116,6 @@ export function doAnything() { export default 5 // will not be reported ``` -### Unused exports with `ignoreUnusedTypeExports` set to `true` - -The following will not be reported: - -```ts -export type Foo = {}; // will not be reported -export interface Foo = {}; // will not be reported -export enum Foo {}; // will not be reported -``` - #### Important Note Exports from files listed as a main file (`main`, `browser`, or `bin` fields in `package.json`) will be ignored by default. This only applies if the `package.json` is not set to `private: true` diff --git a/node_modules/eslint-plugin-import/docs/rules/order.md b/node_modules/eslint-plugin-import/docs/rules/order.md index 67849bb7ed..2335699e6c 100644 --- a/node_modules/eslint-plugin-import/docs/rules/order.md +++ b/node_modules/eslint-plugin-import/docs/rules/order.md @@ -77,25 +77,6 @@ import foo from './foo'; var path = require('path'); ``` -## Limitations of `--fix` - -Unbound imports are assumed to have side effects, and will never be moved/reordered. This can cause other imports to get "stuck" around them, and the fix to fail. - -```javascript -import b from 'b' -import 'format.css'; // This will prevent --fix from working. -import a from 'a' -``` - -As a workaround, move unbound imports to be entirely above or below bound ones. - -```javascript -import 'format1.css'; // OK -import b from 'b' -import a from 'a' -import 'format2.css'; // OK -``` - ## Options This rule supports the following options: @@ -193,7 +174,7 @@ Example: ### `pathGroupsExcludedImportTypes: [array]` This defines import types that are not handled by configured pathGroups. -If you have added path groups with patterns that look like `"builtin"` or `"external"` imports, you have to remove this group (`"builtin"` and/or `"external"`) from the default exclusion list (e.g., `["builtin", "external", "object"]`, etc) to sort these path groups correctly. +This is mostly needed when you want to handle path groups that look like external imports. Example: @@ -212,7 +193,29 @@ Example: } ``` -[Import Type](https://github.com/import-js/eslint-plugin-import/blob/HEAD/src/core/importType.js#L90) is resolved as a fixed string in predefined set, it can't be a `patterns`(e.g., `react`, `react-router-dom`, etc). See [#2156] for details. +You can also use `patterns`(e.g., `react`, `react-router-dom`, etc). + +Example: + +```json +{ + "import/order": [ + "error", + { + "pathGroups": [ + { + "pattern": "react", + "group": "builtin", + "position": "before" + } + ], + "pathGroupsExcludedImportTypes": ["react"] + } + ] +} +``` + +The default value is `["builtin", "external", "object"]`. ### `newlines-between: [ignore|always|always-and-inside-groups|never]` diff --git a/node_modules/eslint-plugin-import/lib/ExportMap.js b/node_modules/eslint-plugin-import/lib/ExportMap.js new file mode 100644 index 0000000000..ad841b8593 --- /dev/null +++ b/node_modules/eslint-plugin-import/lib/ExportMap.js @@ -0,0 +1,856 @@ +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();exports. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +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 + */this.dependencies = new Set(); /** + * dependencies of this module that are not explicitly re-exported + * @type {Map} from path = () => ExportMap + */this.imports = new Map();this.errors = []; /** + * type {'ambiguous' | 'Module' | 'Script'} + */this.parseGoal = 'ambiguous';}_createClass(ExportMap, [{ key: 'has', /** + * Note that this does not check explicitly re-exported names for existence + * in the base namespace, but it will expand all `export * from '...'` exports + * if not found in the explicit namespace. + * @param {string} name + * @return {Boolean} true if `name` is exported by this module. + */value: function () {function has(name) {if (this.namespace.has(name)) {return true;}if (this.reexports.has(name)) {return true;} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value;var innerMap = dep(); // todo: report as unresolved? + if (!innerMap) {continue;}if (innerMap.has(name)) {return true;}}} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}}return false;}return has;}() /** + * ensure that imported name fully resolves. + * @param {string} name + * @return {{ found: boolean, path: ExportMap[] }} + */ }, { key: 'hasDeep', value: function () {function hasDeep(name) {if (this.namespace.has(name)) {return { found: true, path: [this] };}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' + if (imported == null) {return { found: true, path: [this] };} // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) {return { found: false, path: [this] };}var deep = imported.hasDeep(reexports.local);deep.path.unshift(this);return deep;} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value;var innerMap = dep();if (innerMap == null) {return { found: true, path: [this] };} // todo: report as unresolved? + if (!innerMap) {continue;} // safeguard against cycles + if (innerMap.path === this.path) {continue;}var innerValue = innerMap.hasDeep(name);if (innerValue.found) {innerValue.path.unshift(this);return innerValue;}}} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}}}return { found: false, path: [this] };}return hasDeep;}() }, { key: 'get', value: function () {function get(name) {if (this.namespace.has(name)) {return this.namespace.get(name);}if (this.reexports.has(name)) {var reexports = this.reexports.get(name);var imported = reexports.getImport(); // if import is ignored, return explicit 'null' + if (imported == null) {return null;} // safeguard against cycles, only if name matches + if (imported.path === this.path && reexports.local === name) {return undefined;}return imported.get(reexports.local);} // default exports must be explicitly re-exported (#328) + if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value;var innerMap = dep(); // todo: report as unresolved? + if (!innerMap) {continue;} // safeguard against cycles + if (innerMap.path === this.path) {continue;}var innerValue = innerMap.get(name);if (innerValue !== undefined) {return innerValue;}}} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}}return undefined;}return get;}() }, { key: 'forEach', value: function () {function forEach(callback, thisArg) {var _this = this;this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);});this.reexports.forEach(function (reexports, name) {var reexported = reexports.getImport(); // can't look up meta for ignored re-exports (#348) + callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this);});this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;}d.forEach(function (v, n) {if (n !== 'default') {callback.call(thisArg, v, n, _this);}});});}return forEach;}() // todo: keys, values, entries? + }, { key: 'reportErrors', value: function () {function reportErrors(context, declaration) {var msg = this.errors.map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}).join(', ');context.report({ node: declaration.source, message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) });}return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has + }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) + if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}(); /** + * parse docs from the first node that has leading comments + */exports['default'] = ExportMap;function captureDoc(source, docStyleParsers) {var metadata = {}; // 'some' short-circuits on first 'true' + for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) {try {var leadingComments = void 0; // n.leadingComments is legacy `attachComments` behavior + if ('leadingComments' in n) {leadingComments = n.leadingComments;} else if (n.range) {leadingComments = source.getCommentsBefore(n);}if (!leadingComments || leadingComments.length === 0) {return false;}for (var name in docStyleParsers) {var doc = docStyleParsers[name](leadingComments);if (doc) {metadata.doc = doc;}}return true;} catch (err) {return false;}});return metadata;}var availableDocStyleParsers = { jsdoc: captureJsDoc, tomdoc: captureTomDoc }; /** + * parse JSDoc from leading comments + * @param {object[]} comments + * @return {{ doc: object }} + */function captureJsDoc(comments) {var doc = void 0; // capture XSDoc + comments.forEach(function (comment) {// skip non-block comments + if (comment.type !== 'Block') {return;}try {doc = _doctrine2['default'].parse(comment.value, { unwrap: true });} catch (err) {/* don't care, for now? maybe add to `errors?` */}});return doc;} /** + * parse TomDoc section from comments + */function captureTomDoc(comments) {// collect lines up to first paragraph break + var lines = [];for (var i = 0; i < comments.length; i++) {var comment = comments[i];if (comment.value.match(/^\s*$/)) {break;}lines.push(comment.value.trim());} // return doctrine-like object + var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/);if (statusMatch) {return { description: statusMatch[2], tags: [{ title: statusMatch[1].toLowerCase(), description: statusMatch[2] }] };}}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);ExportMap.get = function (source, context) {var path = (0, _resolve2['default'])(source, context);if (path == null) {return null;}return ExportMap['for'](childContext(path, context));};ExportMap['for'] = function (context) {var path = context.path;var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex');var exportMap = exportCache.get(cacheKey); // return cached ignore + if (exportMap === null) {return null;}var stats = _fs2['default'].statSync(path);if (exportMap != null) {// date equality check + if (exportMap.mtime - stats.mtime === 0) {return exportMap;} // future: check content equality? + } // check valid extensions first + 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) {log('ignored path due to ambiguous parse:', path);exportCache.set(cacheKey, 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, dynamic: true }]) });}(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;}() });var unambiguouslyESM = unambiguous.isModule(ast);if (!unambiguouslyESM && !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 || s.exported.value, addNamespace(exportMeta, s.source.value));return;case 'ExportSpecifier':if (!n.source) {m.namespace.set(s.exported.name || s.exported.value, 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 captureDependencyWithSpecifiers(n) {// import type { Foo } (TS and Flow); import typeof { Foo } (Flow) + var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and + // shouldn't be considered to be just importing types + var specifiersOnlyImportingTypes = n.specifiers.length > 0;var importedSpecifiers = new Set();n.specifiers.forEach(function (specifier) {if (specifier.type === 'ImportSpecifier') {importedSpecifiers.add(specifier.imported.name || specifier.imported.value);} else if (supportedImportTypes.has(specifier.type)) {importedSpecifiers.add(specifier.type);} // import { type Foo } (Flow); import { typeof Foo } (Flow) + specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && (specifier.importKind === 'type' || specifier.importKind === 'typeof');});captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, importedSpecifiers);}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(context) {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');} // eslint-disable-line import/no-extraneous-dependencies + 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') {captureDependencyWithSpecifiers(n);var ns = n.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';});if (ns) {namespaces.set(ns.local.name, n.source.value);}return;}if (n.type === 'ExportNamedDeclaration') {captureDependencyWithSpecifiers(n); // capture declaration + if (n.declaration != null) {switch (n.declaration.type) {case 'FunctionDeclaration':case 'ClassDeclaration':case 'TypeAlias': // flowtype with babel-eslint parser + case 'InterfaceDeclaration':case 'DeclareFunction':case 'TSDeclareFunction':case 'TSEnumDeclaration':case 'TSTypeAliasDeclaration':case 'TSInterfaceDeclaration':case 'TSAbstractClassDeclaration':case 'TSModuleDeclaration':m.namespace.set(n.declaration.id.name, captureDoc(source, docStyleParsers, n));break;case 'VariableDeclaration':n.declaration.declarations.forEach(function (d) {recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, d, n));});});break;default:}}n.specifiers.forEach(function (s) {return processSpecifier(s, n, m);});}var exports = ['TSExportAssignment'];if (isEsModuleInteropTrue) {exports.push('TSNamespaceExportDeclaration');} // This doesn't declare anything, but changes what's being exported. + if ((0, _arrayIncludes2['default'])(exports, n.type)) {var exportedName = n.type === 'TSNamespaceExportDeclaration' ? (n.id || n.name).name : n.expression && n.expression.name || n.expression.id && n.expression.id.name || null;var declTypes = ['VariableDeclaration', 'ClassDeclaration', 'TSDeclareFunction', 'TSEnumDeclaration', 'TSTypeAliasDeclaration', 'TSInterfaceDeclaration', 'TSAbstractClassDeclaration', 'TSModuleDeclaration'];var exportedDecls = ast.body.filter(function (_ref2) {var type = _ref2.type,id = _ref2.id,declarations = _ref2.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && (id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));});if (exportedDecls.length === 0) {// Export is not referencing any local declaration, must be re-exporting + m.namespace.set('default', captureDoc(source, docStyleParsers, n));return;}if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && !m.namespace.has('default') // and default isn't added already + ) {m.namespace.set('default', {}); // add default export + }exportedDecls.forEach(function (decl) {if (decl.type === 'TSModuleDeclaration') {if (decl.body && decl.body.type === 'TSModuleDeclaration') {m.namespace.set(decl.body.id.name, captureDoc(source, docStyleParsers, decl.body));} else if (decl.body && decl.body.body) {decl.body.body.forEach(function (moduleBlockNode) {// Export-assignment exports all members in the namespace, + // explicitly exported or not. + var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? moduleBlockNode.declaration : moduleBlockNode;if (!namespaceDecl) {// TypeScript can check this for us; we needn't + } else if (namespaceDecl.type === 'VariableDeclaration') {namespaceDecl.declarations.forEach(function (d) {return recursivePatternCapture(d.id, function (id) {return m.namespace.set(id.name, captureDoc(source, docStyleParsers, decl, namespaceDecl, moduleBlockNode));});});} else {m.namespace.set(namespaceDecl.id.name, captureDoc(source, docStyleParsers, moduleBlockNode));}});}} else {// Export as default + m.namespace.set('default', captureDoc(source, docStyleParsers, decl));}});}});if (isEsModuleInteropTrue // esModuleInterop is on in tsconfig + && m.namespace.size > 0 // anything is exported + && !m.namespace.has('default') // and default isn't added already + ) {m.namespace.set('default', {}); // add default export + }if (unambiguouslyESM) {m.parseGoal = 'Module';}return m;}; /** + * The creation of this closure is isolated from other scopes + * to avoid over-retention of unrelated variables, which has + * caused memory leaks. See #1266. + */function thunkFor(p, context) {return function () {return ExportMap['for'](childContext(p, context));};} /** + * Traverse a pattern/identifier node, calling 'callback' + * for each leaf identifier. + * @param {node} pattern + * @param {Function} callback + * @return {void} + */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case + callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) {if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') {callback(p.argument);return;}recursivePatternCapture(p.value, callback);});break;case 'ArrayPattern':pattern.elements.forEach(function (element) {if (element == null) {return;}if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') {callback(element.argument);return;}recursivePatternCapture(element, callback);});break;case 'AssignmentPattern':callback(pattern.left);break;default:}}var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** + * don't hold full context object in memory, just grab what we need. + * also calculate a cacheKey, where parts of the cacheKey hash are memoized + */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) {settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex');prevSettings = JSON.stringify(settings);}if (JSON.stringify(parserOptions) !== prevParserOptions) {parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex');prevParserOptions = JSON.stringify(parserOptions);}return { cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), settings: settings, parserOptions: parserOptions, parserPath: parserPath, path: path };} /** + * sometimes legacy support isn't _that_ hard... right? + */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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInRzIiwibG9nIiwiZXhwb3J0Q2FjaGUiLCJNYXAiLCJ0c2NvbmZpZ0NhY2hlIiwiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiLCJjYXB0dXJlRG9jIiwiZG9jU3R5bGVQYXJzZXJzIiwibWV0YWRhdGEiLCJub2RlcyIsInNvbWUiLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwiZG9jIiwiZXJyIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJjYXB0dXJlSnNEb2MiLCJ0b21kb2MiLCJjYXB0dXJlVG9tRG9jIiwiY29tbWVudHMiLCJjb21tZW50IiwidHlwZSIsImRvY3RyaW5lIiwicGFyc2UiLCJ1bndyYXAiLCJsaW5lcyIsImkiLCJtYXRjaCIsInB1c2giLCJ0cmltIiwic3RhdHVzTWF0Y2giLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwic3VwcG9ydGVkSW1wb3J0VHlwZXMiLCJjaGlsZENvbnRleHQiLCJjYWNoZUtleSIsImRpZ2VzdCIsImV4cG9ydE1hcCIsInN0YXRzIiwiZnMiLCJzdGF0U3luYyIsIm10aW1lIiwic2V0IiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwidGVzdCIsIm0iLCJpc0VzTW9kdWxlSW50ZXJvcFRydWUiLCJpc0VzTW9kdWxlSW50ZXJvcCIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiaGFzRHluYW1pY0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInAiLCJyZW1vdGVQYXRoIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwiYWRkIiwiZ2V0dGVyIiwidGh1bmtGb3IiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIkNhbGxFeHByZXNzaW9uIiwiY2FsbGVlIiwiYXJndW1lbnRzIiwidW5hbWJpZ3VvdXNseUVTTSIsImlzTW9kdWxlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsInN0eWxlIiwiYyIsInQiLCJuYW1lc3BhY2VzIiwicmVzb2x2ZSIsInJlbGF0aXZlIiwicmVzb2x2ZUltcG9ydCIsInJwIiwiZ2V0TmFtZXNwYWNlIiwiaWRlbnRpZmllciIsImFkZE5hbWVzcGFjZSIsIm9iamVjdCIsIm5zZm4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb2Nlc3NTcGVjaWZpZXIiLCJzIiwibnNvdXJjZSIsImV4cG9ydE1ldGEiLCJleHBvcnRlZCIsImNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMiLCJkZWNsYXJhdGlvbklzVHlwZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsImNhcHR1cmVEZXBlbmRlbmN5IiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJkZWNsYXJhdGlvbk1ldGFkYXRhIiwiZXhpc3RpbmciLCJtYWtlU291cmNlQ29kZSIsInJlYWRUc0NvbmZpZyIsInRzY29uZmlnSW5mbyIsImN3ZCIsInBhcnNlck9wdGlvbnMiLCJ0c2NvbmZpZ1Jvb3REaXIiLCJwcm9jZXNzIiwiZ2V0RW52Iiwia2V5IiwiZW52IiwidHNDb25maWdQYXRoIiwicmVxdWlyZSIsImNvbmZpZ0ZpbGUiLCJyZWFkQ29uZmlnRmlsZSIsInN5cyIsInJlYWRGaWxlIiwicGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQiLCJjb25maWciLCJ0c0NvbmZpZyIsIm9wdGlvbnMiLCJlc01vZHVsZUludGVyb3AiLCJib2R5IiwiZXhwb3J0S2luZCIsIm5zIiwiZmluZCIsImlkIiwiZXhwb3J0cyIsImV4cG9ydGVkTmFtZSIsImV4cHJlc3Npb24iLCJkZWNsVHlwZXMiLCJleHBvcnRlZERlY2xzIiwiZmlsdGVyIiwiZGVjbCIsIm1vZHVsZUJsb2NrTm9kZSIsIm5hbWVzcGFjZURlY2wiLCJwYXR0ZXJuIiwicHJvcGVydGllcyIsImFyZ3VtZW50IiwiZWxlbWVudHMiLCJlbGVtZW50IiwibGVmdCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXJzZXJQYXRoIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0cmluZyIsInRleHQiLCJTb3VyY2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFlLEVBQUVELFVBQUYsRUFBUXJHLFFBQVIsRUFBZixDQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiJFeHBvcnRNYXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHBhcnNlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGFyc2UnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBpc0lnbm9yZWQsIHsgaGFzVmFsaWRFeHRlbnNpb24gfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5cbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0ICogYXMgdW5hbWJpZ3VvdXMgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5cbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5cbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5cbmxldCB0cztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IHRzY29uZmlnQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcCB7XG4gIGNvbnN0cnVjdG9yKHBhdGgpIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMubmFtZXNwYWNlID0gbmV3IE1hcCgpO1xuICAgIC8vIHRvZG86IHJlc3RydWN0dXJlIHRvIGtleSBvbiBwYXRoLCB2YWx1ZSBpcyByZXNvbHZlciArIG1hcCBvZiBuYW1lc1xuICAgIHRoaXMucmVleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIHN0YXItZXhwb3J0c1xuICAgICAqIEB0eXBlIHtTZXR9IG9mICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXB9IGZyb20gcGF0aCA9ICgpID0+IEV4cG9ydE1hcFxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIHBhcnNlIGRvY3MgZnJvbSB0aGUgZmlyc3Qgbm9kZSB0aGF0IGhhcyBsZWFkaW5nIGNvbW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIC4uLm5vZGVzKSB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge307XG5cbiAgLy8gJ3NvbWUnIHNob3J0LWNpcmN1aXRzIG9uIGZpcnN0ICd0cnVlJ1xuICBub2Rlcy5zb21lKChuKSA9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGxlYWRpbmdDb21tZW50cztcblxuICAgICAgLy8gbi5sZWFkaW5nQ29tbWVudHMgaXMgbGVnYWN5IGBhdHRhY2hDb21tZW50c2AgYmVoYXZpb3JcbiAgICAgIGlmICgnbGVhZGluZ0NvbW1lbnRzJyBpbiBuKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IG4ubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgfSBlbHNlIGlmIChuLnJhbmdlKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IHNvdXJjZS5nZXRDb21tZW50c0JlZm9yZShuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsZWFkaW5nQ29tbWVudHMgfHwgbGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRvY1N0eWxlUGFyc2Vycykge1xuICAgICAgICBjb25zdCBkb2MgPSBkb2NTdHlsZVBhcnNlcnNbbmFtZV0obGVhZGluZ0NvbW1lbnRzKTtcbiAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgIG1ldGFkYXRhLmRvYyA9IGRvYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuY29uc3QgYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzID0ge1xuICBqc2RvYzogY2FwdHVyZUpzRG9jLFxuICB0b21kb2M6IGNhcHR1cmVUb21Eb2MsXG59O1xuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRlZEltcG9ydFR5cGVzID0gbmV3IFNldChbJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLCAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJ10pO1xuXG5FeHBvcnRNYXAuZ2V0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpO1xuICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgcmV0dXJuIEV4cG9ydE1hcC5mb3IoY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpKTtcbn07XG5cbkV4cG9ydE1hcC5mb3IgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgY2FjaGVLZXkgPSBjb250ZXh0LmNhY2hlS2V5IHx8IGhhc2hPYmplY3QoY29udGV4dCkuZGlnZXN0KCdoZXgnKTtcbiAgbGV0IGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChjYWNoZUtleSk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aCk7XG4gIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICBpZiAoZXhwb3J0TWFwLm10aW1lIC0gc3RhdHMubXRpbWUgPT09IDApIHtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgfVxuICAgIC8vIGZ1dHVyZTogY2hlY2sgY29udGVudCBlcXVhbGl0eT9cbiAgfVxuXG4gIC8vIGNoZWNrIHZhbGlkIGV4dGVuc2lvbnMgZmlyc3RcbiAgaWYgKCFoYXNWYWxpZEV4dGVuc2lvbihwYXRoLCBjb250ZXh0KSkge1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICBpZiAoaXNJZ25vcmVkKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGlnbm9yZSBzZXR0aW5nczonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSB1bmFtYmlndW91cyBtb2R1bGVzXG4gIGlmICghdW5hbWJpZ3VvdXMudGVzdChjb250ZW50KSkge1xuICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbG9nKCdjYWNoZSBtaXNzJywgY2FjaGVLZXksICdmb3IgcGF0aCcsIHBhdGgpO1xuICBleHBvcnRNYXAgPSBFeHBvcnRNYXAucGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG5cbiAgLy8gYW1iaWd1b3VzIG1vZHVsZXMgcmV0dXJuIG51bGxcbiAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGFtYmlndW91cyBwYXJzZTonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwb3J0TWFwLm10aW1lID0gc3RhdHMubXRpbWU7XG5cbiAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICByZXR1cm4gZXhwb3J0TWFwO1xufTtcblxuRXhwb3J0TWFwLnBhcnNlID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgbSA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gIGNvbnN0IGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSA9IGlzRXNNb2R1bGVJbnRlcm9wKCk7XG5cbiAgbGV0IGFzdDtcbiAgbGV0IHZpc2l0b3JLZXlzO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpO1xuICAgIGFzdCA9IHJlc3VsdC5hc3Q7XG4gICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG0uZXJyb3JzLnB1c2goZXJyKTtcbiAgICByZXR1cm4gbTsgLy8gY2FuJ3QgY29udGludWVcbiAgfVxuXG4gIG0udmlzaXRvcktleXMgPSB2aXNpdG9yS2V5cztcblxuICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBwcm9jZXNzRHluYW1pY0ltcG9ydChzb3VyY2UpIHtcbiAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgaWYgKHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZCgnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgbS5pbXBvcnRzLnNldChwLCB7XG4gICAgICBnZXR0ZXIsXG4gICAgICBkZWNsYXJhdGlvbnM6IG5ldyBTZXQoW3tcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgIHZhbHVlOiBzb3VyY2UudmFsdWUsXG4gICAgICAgICAgbG9jOiBzb3VyY2UubG9jLFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMsXG4gICAgICAgIGR5bmFtaWM6IHRydWUsXG4gICAgICB9XSksXG4gICAgfSk7XG4gIH1cblxuICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgSW1wb3J0RXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBwcm9jZXNzRHluYW1pY0ltcG9ydChub2RlLnNvdXJjZSk7XG4gICAgfSxcbiAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHVuYW1iaWd1b3VzbHlFU00gPSB1bmFtYmlndW91cy5pc01vZHVsZShhc3QpO1xuICBpZiAoIXVuYW1iaWd1b3VzbHlFU00gJiYgIWhhc0R5bmFtaWNJbXBvcnRzKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZG9jc3R5bGUgPSBjb250ZXh0LnNldHRpbmdzICYmIGNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgY29uc3QgZG9jU3R5bGVQYXJzZXJzID0ge307XG4gIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgZG9jU3R5bGVQYXJzZXJzW3N0eWxlXSA9IGF2YWlsYWJsZURvY1N0eWxlUGFyc2Vyc1tzdHlsZV07XG4gIH0pO1xuXG4gIC8vIGF0dGVtcHQgdG8gY29sbGVjdCBtb2R1bGUgZG9jXG4gIGlmIChhc3QuY29tbWVudHMpIHtcbiAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgaWYgKGMudHlwZSAhPT0gJ0Jsb2NrJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICBpZiAoZG9jLnRhZ3Muc29tZSgodCkgPT4gdC50aXRsZSA9PT0gJ21vZHVsZScpKSB7XG4gICAgICAgICAgbS5kb2MgPSBkb2M7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiByZW1vdGVQYXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUucmVsYXRpdmUodmFsdWUsIHBhdGgsIGNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gcmVtb3RlUGF0aCh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihjaGlsZENvbnRleHQocnAsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5hbWVzcGFjZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhpZGVudGlmaWVyLm5hbWUpKSB7IHJldHVybjsgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlSW1wb3J0KG5hbWVzcGFjZXMuZ2V0KGlkZW50aWZpZXIubmFtZSkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGROYW1lc3BhY2Uob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IGdldE5hbWVzcGFjZShpZGVudGlmaWVyKTtcbiAgICBpZiAobnNmbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ25hbWVzcGFjZScsIHsgZ2V0OiBuc2ZuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzU3BlY2lmaWVyKHMsIG4sIG0pIHtcbiAgICBjb25zdCBuc291cmNlID0gbi5zb3VyY2UgJiYgbi5zb3VyY2UudmFsdWU7XG4gICAgY29uc3QgZXhwb3J0TWV0YSA9IHt9O1xuICAgIGxldCBsb2NhbDtcblxuICAgIHN3aXRjaCAocy50eXBlKSB7XG4gICAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuc291cmNlKSB7IHJldHVybjsgfVxuICAgICAgICBsb2NhbCA9ICdkZWZhdWx0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgICBnZXQoKSB7IHJldHVybiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpOyB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ0V4cG9ydEFsbERlY2xhcmF0aW9uJzpcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSB8fCBzLmV4cG9ydGVkLnZhbHVlLCBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgcy5zb3VyY2UudmFsdWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnRXhwb3J0U3BlY2lmaWVyJzpcbiAgICAgICAgaWYgKCFuLnNvdXJjZSkge1xuICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChzLmV4cG9ydGVkLm5hbWUgfHwgcy5leHBvcnRlZC52YWx1ZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMubG9jYWwpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIC8vIGVsc2UgZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9jYWwgPSBzLmxvY2FsLm5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHRvZG86IEpTRG9jXG4gICAgbS5yZWV4cG9ydHMuc2V0KHMuZXhwb3J0ZWQubmFtZSwgeyBsb2NhbCwgZ2V0SW1wb3J0OiAoKSA9PiByZXNvbHZlSW1wb3J0KG5zb3VyY2UpIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FwdHVyZURlcGVuZGVuY3lXaXRoU3BlY2lmaWVycyhuKSB7XG4gICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpOyBpbXBvcnQgdHlwZW9mIHsgRm9vIH0gKEZsb3cpXG4gICAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAgIC8vIGltcG9ydCAnLi9mb28nIG9yIGltcG9ydCB7fSBmcm9tICcuL2ZvbycgKGJvdGggMCBzcGVjaWZpZXJzKSBpcyBhIHNpZGUgZWZmZWN0IGFuZFxuICAgIC8vIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIHRvIGJlIGp1c3QgaW1wb3J0aW5nIHR5cGVzXG4gICAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCk7XG4gICAgbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMuYWRkKHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnRlZEltcG9ydFR5cGVzLmhhcyhzcGVjaWZpZXIudHlwZSkpIHtcbiAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpOyBpbXBvcnQgeyB0eXBlb2YgRm9vIH0gKEZsb3cpXG4gICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgICAmJiAoc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpO1xuICAgIH0pO1xuICAgIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIGltcG9ydGVkU3BlY2lmaWVycyk7XG4gIH1cblxuICBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeSh7IHNvdXJjZSB9LCBpc09ubHlJbXBvcnRpbmdUeXBlcywgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBwID0gcmVtb3RlUGF0aChzb3VyY2UudmFsdWUpO1xuICAgIGlmIChwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICAgIHNvdXJjZTogeyB2YWx1ZTogc291cmNlLnZhbHVlLCBsb2M6IHNvdXJjZS5sb2MgfSxcbiAgICAgIGlzT25seUltcG9ydGluZ1R5cGVzLFxuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZyA9IG0uaW1wb3J0cy5nZXQocCk7XG4gICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3RpbmcuZ2V0dGVyO1xuICAgIH1cblxuICAgIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICAgIG0uaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICAgIHJldHVybiBnZXR0ZXI7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuXG4gIGZ1bmN0aW9uIHJlYWRUc0NvbmZpZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgICAgY3dkOiBjb250ZXh0LnBhcnNlck9wdGlvbnMgJiYgY29udGV4dC5wYXJzZXJPcHRpb25zLnRzY29uZmlnUm9vdERpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgZ2V0RW52OiAoa2V5KSA9PiBwcm9jZXNzLmVudltrZXldLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgICAgaWYgKCF0cykgeyB0cyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQnKTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgICAgY29uZmlnRmlsZS5jb25maWcsXG4gICAgICAgICAgdHMuc3lzLFxuICAgICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gICAgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgdHNDb25maWcgPSB0c2NvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRzQ29uZmlnID0gcmVhZFRzQ29uZmlnKGNvbnRleHQpO1xuICAgICAgdHNjb25maWdDYWNoZS5zZXQoY2FjaGVLZXksIHRzQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHNDb25maWcgJiYgdHNDb25maWcub3B0aW9ucyA/IHRzQ29uZmlnLm9wdGlvbnMuZXNNb2R1bGVJbnRlcm9wIDogZmFsc2U7XG4gIH1cblxuICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKTtcbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgbi5kZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBleHBvcnRNZXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBnZXR0ZXIgPSBjYXB0dXJlRGVwZW5kZW5jeShuLCBuLmV4cG9ydEtpbmQgPT09ICd0eXBlJyk7XG4gICAgICBpZiAoZ2V0dGVyKSB7IG0uZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICBpZiAobi5leHBvcnRlZCkge1xuICAgICAgICBwcm9jZXNzU3BlY2lmaWVyKG4sIG4uZXhwb3J0ZWQsIG0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydFxuICAgIGlmIChuLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIGNvbnN0IG5zID0gbi5zcGVjaWZpZXJzLmZpbmQoKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgaWYgKG5zKSB7XG4gICAgICAgIG5hbWVzcGFjZXMuc2V0KG5zLmxvY2FsLm5hbWUsIG4uc291cmNlLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMobik7XG5cbiAgICAgIC8vIGNhcHR1cmUgZGVjbGFyYXRpb25cbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChuLmRlY2xhcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUeXBlQWxpYXMnOiAvLyBmbG93dHlwZSB3aXRoIGJhYmVsLWVzbGludCBwYXJzZXJcbiAgICAgICAgICBjYXNlICdJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU0RlY2xhcmVGdW5jdGlvbic6XG4gICAgICAgICAgY2FzZSAnVFNFbnVtRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIGNhc2UgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChuLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG4pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgbi5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICBkLmlkLFxuICAgICAgICAgICAgICAgIChpZCkgPT4gbS5uYW1lc3BhY2Uuc2V0KGlkLm5hbWUsIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIGQsIG4pKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBuLCBtKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwb3J0cyA9IFsnVFNFeHBvcnRBc3NpZ25tZW50J107XG4gICAgaWYgKGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSkge1xuICAgICAgZXhwb3J0cy5wdXNoKCdUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBkb2Vzbid0IGRlY2xhcmUgYW55dGhpbmcsIGJ1dCBjaGFuZ2VzIHdoYXQncyBiZWluZyBleHBvcnRlZC5cbiAgICBpZiAoaW5jbHVkZXMoZXhwb3J0cywgbi50eXBlKSkge1xuICAgICAgY29uc3QgZXhwb3J0ZWROYW1lID0gbi50eXBlID09PSAnVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbidcbiAgICAgICAgPyAobi5pZCB8fCBuLm5hbWUpLm5hbWVcbiAgICAgICAgOiBuLmV4cHJlc3Npb24gJiYgbi5leHByZXNzaW9uLm5hbWUgfHwgbi5leHByZXNzaW9uLmlkICYmIG4uZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgICBjb25zdCBkZWNsVHlwZXMgPSBbXG4gICAgICAgICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNEZWNsYXJlRnVuY3Rpb24nLFxuICAgICAgICAnVFNFbnVtRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTQWJzdHJhY3RDbGFzc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGVjbHMgPSBhc3QuYm9keS5maWx0ZXIoKHsgdHlwZSwgaWQsIGRlY2xhcmF0aW9ucyB9KSA9PiBpbmNsdWRlcyhkZWNsVHlwZXMsIHR5cGUpICYmIChcbiAgICAgICAgaWQgJiYgaWQubmFtZSA9PT0gZXhwb3J0ZWROYW1lIHx8IGRlY2xhcmF0aW9ucyAmJiBkZWNsYXJhdGlvbnMuZmluZCgoZCkgPT4gZC5pZC5uYW1lID09PSBleHBvcnRlZE5hbWUpXG4gICAgICApKTtcbiAgICAgIGlmIChleHBvcnRlZERlY2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeHBvcnQgaXMgbm90IHJlZmVyZW5jaW5nIGFueSBsb2NhbCBkZWNsYXJhdGlvbiwgbXVzdCBiZSByZS1leHBvcnRpbmdcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgbikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICAgJiYgIW0ubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICAgICkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICAgICAgfVxuICAgICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICAgIGlmIChkZWNsLnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgIGlmIChkZWNsLmJvZHkgJiYgZGVjbC5ib2R5LnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KGRlY2wuYm9keS5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLmJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgICAgZGVjbC5ib2R5LmJvZHkuZm9yRWFjaCgobW9kdWxlQmxvY2tOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4cG9ydC1hc3NpZ25tZW50IGV4cG9ydHMgYWxsIG1lbWJlcnMgaW4gdGhlIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZURlY2wgPSBtb2R1bGVCbG9ja05vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nXG4gICAgICAgICAgICAgICAgPyBtb2R1bGVCbG9ja05vZGUuZGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZURlY2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNhbiBjaGVjayB0aGlzIGZvciB1czsgd2UgbmVlZG4ndFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT4gcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZC5pZCwgKGlkKSA9PiBtLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZGVjbCwgbmFtZXNwYWNlRGVjbCwgbW9kdWxlQmxvY2tOb2RlKSxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG0ubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuaWQubmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhcHR1cmVEb2Moc291cmNlLCBkb2NTdHlsZVBhcnNlcnMsIG1vZHVsZUJsb2NrTm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKFxuICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAmJiBtLm5hbWVzcGFjZS5zaXplID4gMCAvLyBhbnl0aGluZyBpcyBleHBvcnRlZFxuICAgICYmICFtLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICkge1xuICAgIG0ubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gIH1cblxuICBpZiAodW5hbWJpZ3VvdXNseUVTTSkge1xuICAgIG0ucGFyc2VHb2FsID0gJ01vZHVsZSc7XG4gIH1cbiAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBvZiB0aGlzIGNsb3N1cmUgaXMgaXNvbGF0ZWQgZnJvbSBvdGhlciBzY29wZXNcbiAqIHRvIGF2b2lkIG92ZXItcmV0ZW50aW9uIG9mIHVucmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGhhc1xuICogY2F1c2VkIG1lbW9yeSBsZWFrcy4gU2VlICMxMjY2LlxuICovXG5mdW5jdGlvbiB0aHVua0ZvcihwLCBjb250ZXh0KSB7XG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbi8qKlxuICogVHJhdmVyc2UgYSBwYXR0ZXJuL2lkZW50aWZpZXIgbm9kZSwgY2FsbGluZyAnY2FsbGJhY2snXG4gKiBmb3IgZWFjaCBsZWFmIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gIHtub2RlfSAgIHBhdHRlcm5cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cblxubGV0IHBhcnNlck9wdGlvbnNIYXNoID0gJyc7XG5sZXQgcHJldlBhcnNlck9wdGlvbnMgPSAnJztcbmxldCBzZXR0aW5nc0hhc2ggPSAnJztcbmxldCBwcmV2U2V0dGluZ3MgPSAnJztcbi8qKlxuICogZG9uJ3QgaG9sZCBmdWxsIGNvbnRleHQgb2JqZWN0IGluIG1lbW9yeSwganVzdCBncmFiIHdoYXQgd2UgbmVlZC5cbiAqIGFsc28gY2FsY3VsYXRlIGEgY2FjaGVLZXksIHdoZXJlIHBhcnRzIG9mIHRoZSBjYWNoZUtleSBoYXNoIGFyZSBtZW1vaXplZFxuICovXG5mdW5jdGlvbiBjaGlsZENvbnRleHQocGF0aCwgY29udGV4dCkge1xuICBjb25zdCB7IHNldHRpbmdzLCBwYXJzZXJPcHRpb25zLCBwYXJzZXJQYXRoIH0gPSBjb250ZXh0O1xuXG4gIGlmIChKU09OLnN0cmluZ2lmeShzZXR0aW5ncykgIT09IHByZXZTZXR0aW5ncykge1xuICAgIHNldHRpbmdzSGFzaCA9IGhhc2hPYmplY3QoeyBzZXR0aW5ncyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZTZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdzKTtcbiAgfVxuXG4gIGlmIChKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKSAhPT0gcHJldlBhcnNlck9wdGlvbnMpIHtcbiAgICBwYXJzZXJPcHRpb25zSGFzaCA9IGhhc2hPYmplY3QoeyBwYXJzZXJPcHRpb25zIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcHJldlBhcnNlck9wdGlvbnMgPSBKU09OLnN0cmluZ2lmeShwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FjaGVLZXk6IFN0cmluZyhwYXJzZXJQYXRoKSArIHBhcnNlck9wdGlvbnNIYXNoICsgc2V0dGluZ3NIYXNoICsgU3RyaW5nKHBhdGgpLFxuICAgIHNldHRpbmdzLFxuICAgIHBhcnNlck9wdGlvbnMsXG4gICAgcGFyc2VyUGF0aCxcbiAgICBwYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIHNvbWV0aW1lcyBsZWdhY3kgc3VwcG9ydCBpc24ndCBfdGhhdF8gaGFyZC4uLiByaWdodD9cbiAqL1xuZnVuY3Rpb24gbWFrZVNvdXJjZUNvZGUodGV4dCwgYXN0KSB7XG4gIGlmIChTb3VyY2VDb2RlLmxlbmd0aCA+IDEpIHtcbiAgICAvLyBFU0xpbnQgM1xuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh0ZXh0LCBhc3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVTTGludCA0LCA1XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VDb2RlKHsgdGV4dCwgYXN0IH0pO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/core/fsWalk.js b/node_modules/eslint-plugin-import/lib/core/fsWalk.js deleted file mode 100644 index fd3ef73eb5..0000000000 --- a/node_modules/eslint-plugin-import/lib/core/fsWalk.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. - - - - - - - - - - - - - - - - - - - - -walkSync = walkSync;var _path = require('path');var _path2 = _interopRequireDefault(_path);var _fs = require('fs');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** @typedef {{ name: string, path: string, dirent: import('fs').Dirent }} Entry */ /** - * Do a comprehensive walk of the provided src directory, and collect all entries. Filter out - * any directories or entries using the optional filter functions. - * @param {string} root - path to the root of the folder we're walking - * @param {{ deepFilter?: (entry: Entry) => boolean, entryFilter?: (entry: Entry) => boolean }} options - * @param {Entry} currentEntry - entry for the current directory we're working in - * @param {Entry[]} existingEntries - list of all entries so far - * @returns {Entry[]} an array of directory entries - */ /** - * This is intended to provide similar capability as the sync api from @nodelib/fs.walk, until `eslint-plugin-import` - * is willing to modernize and update their minimum node version to at least v16. I intentionally made the - * shape of the API (for the part we're using) the same as @nodelib/fs.walk so that that can be swapped in - * when the repo is ready for it. - */function walkSync(root, options, currentEntry, existingEntries) {// Extract the filter functions. Default to evaluating true, if no filter passed in. - var _options$deepFilter = options.deepFilter,deepFilter = _options$deepFilter === undefined ? function () {return true;} : _options$deepFilter,_options$entryFilter = options.entryFilter,entryFilter = _options$entryFilter === undefined ? function () {return true;} : _options$entryFilter;var entryList = existingEntries || [];var currentRelativePath = currentEntry ? currentEntry.path : '.';var fullPath = currentEntry ? _path2['default'].join(root, currentEntry.path) : root;var dirents = (0, _fs.readdirSync)(fullPath, { withFileTypes: true });dirents.forEach(function (dirent) {/** @type {Entry} */var entry = { name: dirent.name, path: _path2['default'].join(currentRelativePath, dirent.name), dirent: dirent }; - - - if (dirent.isDirectory() && deepFilter(entry)) { - entryList.push(entry); - entryList = walkSync(root, options, entry, entryList); - } else if (dirent.isFile() && entryFilter(entry)) { - entryList.push(entry); - } - }); - - return entryList; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ZzV2Fsay5qcyJdLCJuYW1lcyI6WyJ3YWxrU3luYyIsInJvb3QiLCJvcHRpb25zIiwiY3VycmVudEVudHJ5IiwiZXhpc3RpbmdFbnRyaWVzIiwiZGVlcEZpbHRlciIsImVudHJ5RmlsdGVyIiwiZW50cnlMaXN0IiwiY3VycmVudFJlbGF0aXZlUGF0aCIsInBhdGgiLCJmdWxsUGF0aCIsImpvaW4iLCJkaXJlbnRzIiwid2l0aEZpbGVUeXBlcyIsImZvckVhY2giLCJkaXJlbnQiLCJlbnRyeSIsIm5hbWUiLCJpc0RpcmVjdG9yeSIsInB1c2giLCJpc0ZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCZ0JBLFEsR0FBQUEsUSxDQWRoQiw0QiwyQ0FDQSx3QixnR0FFQSxtRixDQUVBOzs7Ozs7OzsyU0FaQTs7Ozs7OFNBcUJPLFNBQVNBLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCQyxPQUF4QixFQUFpQ0MsWUFBakMsRUFBK0NDLGVBQS9DLEVBQWdFLENBQ3JFO0FBRHFFLDRCQUVQRixPQUZPLENBRTdERyxVQUY2RCxDQUU3REEsVUFGNkQsdUNBRWhELG9CQUFNLElBQU4sRUFGZ0QsOENBRVBILE9BRk8sQ0FFcENJLFdBRm9DLENBRXBDQSxXQUZvQyx3Q0FFdEIsb0JBQU0sSUFBTixFQUZzQix3QkFJckUsSUFBSUMsWUFBWUgsbUJBQW1CLEVBQW5DLENBQ0EsSUFBTUksc0JBQXNCTCxlQUFlQSxhQUFhTSxJQUE1QixHQUFtQyxHQUEvRCxDQUNBLElBQU1DLFdBQVdQLGVBQWVNLGtCQUFLRSxJQUFMLENBQVVWLElBQVYsRUFBZ0JFLGFBQWFNLElBQTdCLENBQWYsR0FBb0RSLElBQXJFLENBRUEsSUFBTVcsVUFBVSxxQkFBWUYsUUFBWixFQUFzQixFQUFFRyxlQUFlLElBQWpCLEVBQXRCLENBQWhCLENBQ0FELFFBQVFFLE9BQVIsQ0FBZ0IsVUFBQ0MsTUFBRCxFQUFZLENBQzFCLG9CQUNBLElBQU1DLFFBQVEsRUFDWkMsTUFBTUYsT0FBT0UsSUFERCxFQUVaUixNQUFNQSxrQkFBS0UsSUFBTCxDQUFVSCxtQkFBVixFQUErQk8sT0FBT0UsSUFBdEMsQ0FGTSxFQUdaRixjQUhZLEVBQWQ7OztBQU1BLFFBQUlBLE9BQU9HLFdBQVAsTUFBd0JiLFdBQVdXLEtBQVgsQ0FBNUIsRUFBK0M7QUFDN0NULGdCQUFVWSxJQUFWLENBQWVILEtBQWY7QUFDQVQsa0JBQVlQLFNBQVNDLElBQVQsRUFBZUMsT0FBZixFQUF3QmMsS0FBeEIsRUFBK0JULFNBQS9CLENBQVo7QUFDRCxLQUhELE1BR08sSUFBSVEsT0FBT0ssTUFBUCxNQUFtQmQsWUFBWVUsS0FBWixDQUF2QixFQUEyQztBQUNoRFQsZ0JBQVVZLElBQVYsQ0FBZUgsS0FBZjtBQUNEO0FBQ0YsR0FkRDs7QUFnQkEsU0FBT1QsU0FBUDtBQUNEIiwiZmlsZSI6ImZzV2Fsay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHNpbWlsYXIgY2FwYWJpbGl0eSBhcyB0aGUgc3luYyBhcGkgZnJvbSBAbm9kZWxpYi9mcy53YWxrLCB1bnRpbCBgZXNsaW50LXBsdWdpbi1pbXBvcnRgXG4gKiBpcyB3aWxsaW5nIHRvIG1vZGVybml6ZSBhbmQgdXBkYXRlIHRoZWlyIG1pbmltdW0gbm9kZSB2ZXJzaW9uIHRvIGF0IGxlYXN0IHYxNi4gIEkgaW50ZW50aW9uYWxseSBtYWRlIHRoZVxuICogc2hhcGUgb2YgdGhlIEFQSSAoZm9yIHRoZSBwYXJ0IHdlJ3JlIHVzaW5nKSB0aGUgc2FtZSBhcyBAbm9kZWxpYi9mcy53YWxrIHNvIHRoYXQgdGhhdCBjYW4gYmUgc3dhcHBlZCBpblxuICogd2hlbiB0aGUgcmVwbyBpcyByZWFkeSBmb3IgaXQuXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcblxuLyoqIEB0eXBlZGVmIHt7IG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBkaXJlbnQ6IGltcG9ydCgnZnMnKS5EaXJlbnQgfX0gRW50cnkgKi9cblxuLyoqXG4gKiBEbyBhIGNvbXByZWhlbnNpdmUgd2FsayBvZiB0aGUgcHJvdmlkZWQgc3JjIGRpcmVjdG9yeSwgYW5kIGNvbGxlY3QgYWxsIGVudHJpZXMuICBGaWx0ZXIgb3V0XG4gKiBhbnkgZGlyZWN0b3JpZXMgb3IgZW50cmllcyB1c2luZyB0aGUgb3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb290IC0gcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHdlJ3JlIHdhbGtpbmdcbiAqIEBwYXJhbSB7eyBkZWVwRmlsdGVyPzogKGVudHJ5OiBFbnRyeSkgPT4gYm9vbGVhbiwgZW50cnlGaWx0ZXI/OiAoZW50cnk6IEVudHJ5KSA9PiBib29sZWFuIH19IG9wdGlvbnNcbiAqIEBwYXJhbSB7RW50cnl9IGN1cnJlbnRFbnRyeSAtIGVudHJ5IGZvciB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2UncmUgd29ya2luZyBpblxuICogQHBhcmFtIHtFbnRyeVtdfSBleGlzdGluZ0VudHJpZXMgLSBsaXN0IG9mIGFsbCBlbnRyaWVzIHNvIGZhclxuICogQHJldHVybnMge0VudHJ5W119IGFuIGFycmF5IG9mIGRpcmVjdG9yeSBlbnRyaWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWxrU3luYyhyb290LCBvcHRpb25zLCBjdXJyZW50RW50cnksIGV4aXN0aW5nRW50cmllcykge1xuICAvLyBFeHRyYWN0IHRoZSBmaWx0ZXIgZnVuY3Rpb25zLiBEZWZhdWx0IHRvIGV2YWx1YXRpbmcgdHJ1ZSwgaWYgbm8gZmlsdGVyIHBhc3NlZCBpbi5cbiAgY29uc3QgeyBkZWVwRmlsdGVyID0gKCkgPT4gdHJ1ZSwgZW50cnlGaWx0ZXIgPSAoKSA9PiB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIGxldCBlbnRyeUxpc3QgPSBleGlzdGluZ0VudHJpZXMgfHwgW107XG4gIGNvbnN0IGN1cnJlbnRSZWxhdGl2ZVBhdGggPSBjdXJyZW50RW50cnkgPyBjdXJyZW50RW50cnkucGF0aCA6ICcuJztcbiAgY29uc3QgZnVsbFBhdGggPSBjdXJyZW50RW50cnkgPyBwYXRoLmpvaW4ocm9vdCwgY3VycmVudEVudHJ5LnBhdGgpIDogcm9vdDtcblxuICBjb25zdCBkaXJlbnRzID0gcmVhZGRpclN5bmMoZnVsbFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcbiAgICAvKiogQHR5cGUge0VudHJ5fSAqL1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgbmFtZTogZGlyZW50Lm5hbWUsXG4gICAgICBwYXRoOiBwYXRoLmpvaW4oY3VycmVudFJlbGF0aXZlUGF0aCwgZGlyZW50Lm5hbWUpLFxuICAgICAgZGlyZW50LFxuICAgIH07XG5cbiAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkgJiYgZGVlcEZpbHRlcihlbnRyeSkpIHtcbiAgICAgIGVudHJ5TGlzdC5wdXNoKGVudHJ5KTtcbiAgICAgIGVudHJ5TGlzdCA9IHdhbGtTeW5jKHJvb3QsIG9wdGlvbnMsIGVudHJ5LCBlbnRyeUxpc3QpO1xuICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpICYmIGVudHJ5RmlsdGVyKGVudHJ5KSkge1xuICAgICAgZW50cnlMaXN0LnB1c2goZW50cnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJ5TGlzdDtcbn1cbiJdfQ== \ 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 fd76a54638..749a15a39c 100644 --- a/node_modules/eslint-plugin-import/lib/core/importType.js +++ b/node_modules/eslint-plugin-import/lib/core/importType.js @@ -5,7 +5,6 @@ -isScoped = isScoped;exports. @@ -19,24 +18,26 @@ isScoped = isScoped;exports. +isAbsolute = isAbsolute;exports. -isAbsolute = isAbsolute;exports. +isBuiltIn = isBuiltIn;exports. -isBuiltIn = isBuiltIn;exports. +isExternalModule = isExternalModule;exports. +isExternalModuleMain = isExternalModuleMain;exports. @@ -54,10 +55,13 @@ isBuiltIn = isBuiltIn;exports. +isScoped = isScoped;exports. +isScopedMain = isScopedMain;exports['default'] = + @@ -103,14 +107,12 @@ isBuiltIn = isBuiltIn;exports. -isExternalModule = isExternalModule;exports. -isExternalModuleMain = isExternalModuleMain;exports. @@ -118,11 +120,10 @@ isExternalModuleMain = isExternalModuleMain;exports. -isScopedMain = isScopedMain;exports['default'] = -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 };}var scopedRegExp = /^@[^/]+\/?[^/]+/;function isScoped(name) {return name && scopedRegExp.test(name);}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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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;}var moduleRegExp = /^\w/;function isModule(name) {return name && moduleRegExp.test(name);}var moduleMainRegExp = /^[\w]((?!\/).)*$/;function isModuleMain(name) {return name && moduleMainRegExp.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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function isExternalModule(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}var scopedMainRegExp = /^@[^/]+\/?[^/]+$/;function isScopedMain(name) {return name && scopedMainRegExp.test(name);}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); +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 isInternalRegexMatch(name, settings) {var internalScope = settings && settings['import/internal-regex'];return internalScope && new RegExp(internalScope).test(name);}function isAbsolute(name) {return typeof name === 'string' && (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, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return (isModule(name) || isScoped(name)) && typeTest(name, context, path) === 'external';}function isExternalModuleMain(name, path, context) {if (arguments.length < 3) {throw new TypeError('isExternalModule: name, path, and context are all required');}return isModuleMain(name) && typeTest(name, context, path) === 'external';}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 isExternalPath(path, context) {if (!path) {return false;}var settings = context.settings;var packagePath = (0, _packagePath.getContextPackagePath)(context);if ((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('..');});}function isInternalPath(path, context) {if (!path) {return false;}var packagePath = (0, _packagePath.getContextPackagePath)(context);return !(0, _path.relative)(packagePath, path).startsWith('../');}function isExternalLookingName(name) {return isModule(name) || isScoped(name);}function typeTest(name, context, path) {var settings = context.settings;if (isInternalRegexMatch(name, settings)) {return 'internal';}if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}if (isExternalPath(path, context)) {return 'external';}if (isInternalPath(path, context)) {return 'internal';}if (isExternalLookingName(name)) {return 'external';}return 'unknown';}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context)); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNTY29wZWQiLCJpc0Fic29sdXRlIiwiaXNCdWlsdEluIiwiaXNFeHRlcm5hbE1vZHVsZSIsImlzRXh0ZXJuYWxNb2R1bGVNYWluIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJzY29wZWRSZWdFeHAiLCJuYW1lIiwidGVzdCIsImJhc2VNb2R1bGUiLCJzcGxpdCIsInNjb3BlIiwicGtnIiwiaXNJbnRlcm5hbFJlZ2V4TWF0Y2giLCJzZXR0aW5ncyIsImludGVybmFsU2NvcGUiLCJSZWdFeHAiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJtb2R1bGVSZWdFeHAiLCJpc01vZHVsZSIsIm1vZHVsZU1haW5SZWdFeHAiLCJpc01vZHVsZU1haW4iLCJpc1JlbGF0aXZlVG9QYXJlbnQiLCJpbmRleEZpbGVzIiwiaXNJbmRleCIsImlzUmVsYXRpdmVUb1NpYmxpbmciLCJpc0V4dGVybmFsUGF0aCIsImNvbnRleHQiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSIsInR5cGVUZXN0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwic2NvcGVkTWFpblJlZ0V4cCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU9nQkEsUSxHQUFBQSxROzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkFDLFUsR0FBQUEsVTs7Ozs7QUFLQUMsUyxHQUFBQSxTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRUFDLGdCLEdBQUFBLGdCOzs7Ozs7O0FBT0FDLG9CLEdBQUFBLG9COzs7Ozs7OztBQVFBQyxZLEdBQUFB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QUFULEVBQWV1QixPQUFmLEVBQXdCYixJQUF4QixNQUFrQyxVQUEvRCxDQUNELENBRUQsSUFBTTJCLG1CQUFtQixrQkFBekIsQ0FDTyxTQUFTeEMsWUFBVCxDQUFzQkcsSUFBdEIsRUFBNEIsQ0FDakMsT0FBT0EsUUFBUXFDLGlCQUFpQnBDLElBQWpCLENBQXNCRCxJQUF0QixDQUFmLENBQ0QsQ0FFYyxTQUFTRixpQkFBVCxDQUEyQkUsSUFBM0IsRUFBaUN1QixPQUFqQyxFQUEwQyxDQUN2RCxPQUFPVSxTQUFTakMsSUFBVCxFQUFldUIsT0FBZixFQUF3QiwwQkFBUXZCLElBQVIsRUFBY3VCLE9BQWQsQ0FBeEIsQ0FBUDtBQUNEIiwiZmlsZSI6ImltcG9ydFR5cGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Fic29sdXRlIGFzIG5vZGVJc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSBhcyBub2RlUmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IGlzQ29yZU1vZHVsZSBmcm9tICdpcy1jb3JlLW1vZHVsZSc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgeyBnZXRDb250ZXh0UGFja2FnZVBhdGggfSBmcm9tICcuL3BhY2thZ2VQYXRoJztcblxuY29uc3Qgc2NvcGVkUmVnRXhwID0gL15AW14vXStcXC8/W14vXSsvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmNvbnN0IG1vZHVsZVJlZ0V4cCA9IC9eXFx3LztcbmZ1bmN0aW9uIGlzTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IG1vZHVsZU1haW5SZWdFeHAgPSAvXltcXHddKCg/IVxcLykuKSokLztcbmZ1bmN0aW9uIGlzTW9kdWxlTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIG1vZHVsZU1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUpIHtcbiAgcmV0dXJuICgvXlxcLlxcLiR8XlxcLlxcLltcXFxcL10vKS50ZXN0KG5hbWUpO1xufVxuY29uc3QgaW5kZXhGaWxlcyA9IFsnLicsICcuLycsICcuL2luZGV4JywgJy4vaW5kZXguanMnXTtcbmZ1bmN0aW9uIGlzSW5kZXgobmFtZSkge1xuICByZXR1cm4gaW5kZXhGaWxlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvU2libGluZyhuYW1lKSB7XG4gIHJldHVybiAoL15cXC5bXFxcXC9dLykudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNFeHRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcblxuICBpZiAocmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlcnMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2V4dGVybmFsLW1vZHVsZS1mb2xkZXJzJ10gfHwgWydub2RlX21vZHVsZXMnXTtcbiAgcmV0dXJuIGZvbGRlcnMuc29tZSgoZm9sZGVyKSA9PiB7XG4gICAgY29uc3QgZm9sZGVyUGF0aCA9IG5vZGVSZXNvbHZlKHBhY2thZ2VQYXRoLCBmb2xkZXIpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKGZvbGRlclBhdGgsIHBhdGgpO1xuICAgIHJldHVybiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcbiAgcmV0dXJuICFyZWxhdGl2ZShwYWNrYWdlUGF0aCwgcGF0aCkuc3RhcnRzV2l0aCgnLi4vJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSB7XG4gIHJldHVybiBpc01vZHVsZShuYW1lKSB8fCBpc1Njb3BlZChuYW1lKTtcbn1cblxuZnVuY3Rpb24gdHlwZVRlc3QobmFtZSwgY29udGV4dCwgcGF0aCkge1xuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBpZiAoaXNJbnRlcm5hbFJlZ2V4TWF0Y2gobmFtZSwgc2V0dGluZ3MpKSB7IHJldHVybiAnaW50ZXJuYWwnOyB9XG4gIGlmIChpc0Fic29sdXRlKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2Fic29sdXRlJzsgfVxuICBpZiAoaXNCdWlsdEluKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2J1aWx0aW4nOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAncGFyZW50JzsgfVxuICBpZiAoaXNJbmRleChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdpbmRleCc7IH1cbiAgaWYgKGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnc2libGluZyc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIGlmIChpc0ludGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNFeHRlcm5hbExvb2tpbmdOYW1lKG5hbWUpKSB7IHJldHVybiAnZXh0ZXJuYWwnOyB9XG4gIHJldHVybiAndW5rbm93bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNBYnNvbHV0ZSIsImlzQnVpbHRJbiIsImlzRXh0ZXJuYWxNb2R1bGUiLCJpc0V4dGVybmFsTW9kdWxlTWFpbiIsImlzU2NvcGVkIiwiaXNTY29wZWRNYWluIiwicmVzb2x2ZUltcG9ydFR5cGUiLCJiYXNlTW9kdWxlIiwibmFtZSIsInNwbGl0Iiwic2NvcGUiLCJwa2ciLCJpc0ludGVybmFsUmVnZXhNYXRjaCIsInNldHRpbmdzIiwiaW50ZXJuYWxTY29wZSIsIlJlZ0V4cCIsInRlc3QiLCJwYXRoIiwiYmFzZSIsImV4dHJhcyIsImluZGV4T2YiLCJjb250ZXh0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiVHlwZUVycm9yIiwiaXNNb2R1bGUiLCJ0eXBlVGVzdCIsImlzTW9kdWxlTWFpbiIsIm1vZHVsZVJlZ0V4cCIsIm1vZHVsZU1haW5SZWdFeHAiLCJzY29wZWRSZWdFeHAiLCJzY29wZWRNYWluUmVnRXhwIiwiaXNSZWxhdGl2ZVRvUGFyZW50IiwiaW5kZXhGaWxlcyIsImlzSW5kZXgiLCJpc1JlbGF0aXZlVG9TaWJsaW5nIiwiaXNFeHRlcm5hbFBhdGgiLCJwYWNrYWdlUGF0aCIsInN0YXJ0c1dpdGgiLCJmb2xkZXJzIiwic29tZSIsImZvbGRlciIsImZvbGRlclBhdGgiLCJyZWxhdGl2ZVBhdGgiLCJpc0ludGVybmFsUGF0aCIsImlzRXh0ZXJuYWxMb29raW5nTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQmdCQSxVLEdBQUFBLFU7Ozs7O0FBS0FDLFMsR0FBQUEsUzs7Ozs7OztBQU9BQyxnQixHQUFBQSxnQjs7Ozs7OztBQU9BQyxvQixHQUFBQSxvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBQyxRLEdBQUFBLFE7Ozs7O0FBS0FDLFksR0FBQUEsWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFKLEVBQW1DLENBQUUsT0FBTyxVQUFQLENBQW9CLENBQ3pELElBQUl1QixlQUFlM0IsSUFBZixFQUFxQkksT0FBckIsQ0FBSixFQUFtQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN6RCxJQUFJd0Isc0JBQXNCckMsSUFBdEIsQ0FBSixFQUFpQyxDQUFFLE9BQU8sVUFBUCxDQUFvQixDQUN2RCxPQUFPLFNBQVAsQ0FDRCxDQUVjLFNBQVNGLGlCQUFULENBQTJCRSxJQUEzQixFQUFpQ2EsT0FBakMsRUFBMEMsQ0FDdkQsT0FBT0ssU0FBU2xCLElBQVQsRUFBZWEsT0FBZixFQUF3QiwwQkFBUWIsSUFBUixFQUFjYSxPQUFkLENBQXhCLENBQVA7QUFDRCIsImZpbGUiOiJpbXBvcnRUeXBlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZSBhcyBub2RlSXNBYnNvbHV0ZSwgcmVsYXRpdmUsIHJlc29sdmUgYXMgbm9kZVJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCBpc0NvcmVNb2R1bGUgZnJvbSAnaXMtY29yZS1tb2R1bGUnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFBhY2thZ2VQYXRoIH0gZnJvbSAnLi9wYWNrYWdlUGF0aCc7XG5cbmZ1bmN0aW9uIGJhc2VNb2R1bGUobmFtZSkge1xuICBpZiAoaXNTY29wZWQobmFtZSkpIHtcbiAgICBjb25zdCBbc2NvcGUsIHBrZ10gPSBuYW1lLnNwbGl0KCcvJyk7XG4gICAgcmV0dXJuIGAke3Njb3BlfS8ke3BrZ31gO1xuICB9XG4gIGNvbnN0IFtwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICByZXR1cm4gcGtnO1xufVxuXG5mdW5jdGlvbiBpc0ludGVybmFsUmVnZXhNYXRjaChuYW1lLCBzZXR0aW5ncykge1xuICBjb25zdCBpbnRlcm5hbFNjb3BlID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9pbnRlcm5hbC1yZWdleCddO1xuICByZXR1cm4gaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKG5hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBub2RlSXNBYnNvbHV0ZShuYW1lKTtcbn1cblxuLy8gcGF0aCBpcyBkZWZpbmVkIG9ubHkgd2hlbiBhIHJlc29sdmVyIHJlc29sdmVzIHRvIGEgbm9uLXN0YW5kYXJkIHBhdGhcbmV4cG9ydCBmdW5jdGlvbiBpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpIHtcbiAgaWYgKHBhdGggfHwgIW5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSBzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2NvcmUtbW9kdWxlcyddIHx8IFtdO1xuICByZXR1cm4gaXNDb3JlTW9kdWxlKGJhc2UpIHx8IGV4dHJhcy5pbmRleE9mKGJhc2UpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlKG5hbWUsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgcGF0aCwgYW5kIGNvbnRleHQgYXJlIGFsbCByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiAoaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSkpICYmIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpID09PSAnZXh0ZXJuYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE1vZHVsZU1haW4obmFtZSwgcGF0aCwgY29udGV4dCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpc0V4dGVybmFsTW9kdWxlOiBuYW1lLCBwYXRoLCBhbmQgY29udGV4dCBhcmUgYWxsIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIGlzTW9kdWxlTWFpbihuYW1lKSAmJiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCBwYXRoKSA9PT0gJ2V4dGVybmFsJztcbn1cblxuY29uc3QgbW9kdWxlUmVnRXhwID0gL15cXHcvO1xuZnVuY3Rpb24gaXNNb2R1bGUobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBtb2R1bGVSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3QgbW9kdWxlTWFpblJlZ0V4cCA9IC9eW1xcd10oKD8hXFwvKS4pKiQvO1xuZnVuY3Rpb24gaXNNb2R1bGVNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5jb25zdCBzY29wZWRSZWdFeHAgPSAvXkBbXi9dK1xcLz9bXi9dKy87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWQobmFtZSkge1xuICByZXR1cm4gbmFtZSAmJiBzY29wZWRSZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3Qgc2NvcGVkTWFpblJlZ0V4cCA9IC9eQFteL10rXFwvP1teL10rJC87XG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNYWluKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkTWFpblJlZ0V4cC50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSkge1xuICByZXR1cm4gKC9eXFwuXFwuJHxeXFwuXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IGluZGV4RmlsZXMgPSBbJy4nLCAnLi8nLCAnLi9pbmRleCcsICcuL2luZGV4LmpzJ107XG5mdW5jdGlvbiBpc0luZGV4KG5hbWUpIHtcbiAgcmV0dXJuIGluZGV4RmlsZXMuaW5kZXhPZihuYW1lKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSkge1xuICByZXR1cm4gKC9eXFwuW1xcXFwvXS8pLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxQYXRoKHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG5cbiAgaWYgKHJlbGF0aXZlKHBhY2thZ2VQYXRoLCBwYXRoKS5zdGFydHNXaXRoKCcuLicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmb2xkZXJzID0gc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9leHRlcm5hbC1tb2R1bGUtZm9sZGVycyddIHx8IFsnbm9kZV9tb2R1bGVzJ107XG4gIHJldHVybiBmb2xkZXJzLnNvbWUoKGZvbGRlcikgPT4ge1xuICAgIGNvbnN0IGZvbGRlclBhdGggPSBub2RlUmVzb2x2ZShwYWNrYWdlUGF0aCwgZm9sZGVyKTtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShmb2xkZXJQYXRoLCBwYXRoKTtcbiAgICByZXR1cm4gIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLicpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCk7XG4gIHJldHVybiAhcmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uLycpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsTG9va2luZ05hbWUobmFtZSkge1xuICByZXR1cm4gaXNNb2R1bGUobmFtZSkgfHwgaXNTY29wZWQobmFtZSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpIHtcbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgaWYgKGlzSW50ZXJuYWxSZWdleE1hdGNoKG5hbWUsIHNldHRpbmdzKSkgeyByZXR1cm4gJ2ludGVybmFsJzsgfVxuICBpZiAoaXNBYnNvbHV0ZShuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdhYnNvbHV0ZSc7IH1cbiAgaWYgKGlzQnVpbHRJbihuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdidWlsdGluJzsgfVxuICBpZiAoaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3BhcmVudCc7IH1cbiAgaWYgKGlzSW5kZXgobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnaW5kZXgnOyB9XG4gIGlmIChpc1JlbGF0aXZlVG9TaWJsaW5nKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ3NpYmxpbmcnOyB9XG4gIGlmIChpc0V4dGVybmFsUGF0aChwYXRoLCBjb250ZXh0KSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICBpZiAoaXNJbnRlcm5hbFBhdGgocGF0aCwgY29udGV4dCkpIHsgcmV0dXJuICdpbnRlcm5hbCc7IH1cbiAgaWYgKGlzRXh0ZXJuYWxMb29raW5nTmFtZShuYW1lKSkgeyByZXR1cm4gJ2V4dGVybmFsJzsgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlSW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiB0eXBlVGVzdChuYW1lLCBjb250ZXh0LCByZXNvbHZlKG5hbWUsIGNvbnRleHQpKTtcbn1cbiJdfQ== \ 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 74bedc3172..84eb212ade 100644 --- a/node_modules/eslint-plugin-import/lib/core/packagePath.js +++ b/node_modules/eslint-plugin-import/lib/core/packagePath.js @@ -2,16 +2,16 @@ -getFilePackagePath = getFilePackagePath;exports. +getContextPackagePath = getContextPackagePath;exports. +getFilePackagePath = getFilePackagePath;exports. -getContextPackagePath = getContextPackagePath;exports. -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 getFilePackagePath(filePath) {var fp = (0, _pkgUp2['default'])({ cwd: filePath });return (0, _path.dirname)(fp);}function getContextPackagePath(context) {return getFilePackagePath(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());}function getFilePackageName(filePath) {var _readPkgUp = +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 @@ -19,4 +19,4 @@ getFilePackageName = getFilePackageName;var _path = require('path');var _pkgUp = } return null; } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldEZpbGVQYWNrYWdlUGF0aCIsImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImZpbGVQYXRoIiwiZnAiLCJjd2QiLCJjb250ZXh0IiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxxQixHQUFBQSxxQjs7OztBQUlBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixrQkFBVCxDQUE0QkcsUUFBNUIsRUFBc0MsQ0FDM0MsSUFBTUMsS0FBSyx3QkFBTSxFQUFFQyxLQUFLRixRQUFQLEVBQU4sQ0FBWCxDQUNBLE9BQU8sbUJBQVFDLEVBQVIsQ0FBUCxDQUNELENBRU0sU0FBU0gscUJBQVQsQ0FBK0JLLE9BQS9CLEVBQXdDLENBQzdDLE9BQU9OLG1CQUFtQk0sUUFBUUMsbUJBQVIsR0FBOEJELFFBQVFDLG1CQUFSLEVBQTlCLEdBQThERCxRQUFRRSxXQUFSLEVBQWpGLENBQVAsQ0FDRCxDQUVNLFNBQVNOLGtCQUFULENBQTRCQyxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCTSxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYWNrYWdlUGF0aChmaWxlUGF0aCkge1xuICBjb25zdCBmcCA9IHBrZ1VwKHsgY3dkOiBmaWxlUGF0aCB9KTtcbiAgcmV0dXJuIGRpcm5hbWUoZnApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dFBhY2thZ2VQYXRoKGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEZpbGVQYWNrYWdlUGF0aChjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImNvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJmaWxlUGF0aCIsImZwIiwiY3dkIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFJZ0JBLHFCLEdBQUFBLHFCOzs7O0FBSUFDLGtCLEdBQUFBLGtCOzs7OztBQUtBQyxrQixHQUFBQSxrQixDQWJoQiw0QkFDQSxrRCw2Q0FDQSwyRCxxSkFFTyxTQUFTRixxQkFBVCxDQUErQkcsT0FBL0IsRUFBd0MsQ0FDN0MsT0FBT0YsbUJBQW1CRSxRQUFRQyxtQkFBUixHQUE4QkQsUUFBUUMsbUJBQVIsRUFBOUIsR0FBOERELFFBQVFFLFdBQVIsRUFBakYsQ0FBUCxDQUNELENBRU0sU0FBU0osa0JBQVQsQ0FBNEJLLFFBQTVCLEVBQXNDLENBQzNDLElBQU1DLEtBQUssd0JBQU0sRUFBRUMsS0FBS0YsUUFBUCxFQUFOLENBQVgsQ0FDQSxPQUFPLG1CQUFRQyxFQUFSLENBQVAsQ0FDRCxDQUVNLFNBQVNMLGtCQUFULENBQTRCSSxRQUE1QixFQUFzQztBQUNyQiw4QkFBVSxFQUFFRSxLQUFLRixRQUFQLEVBQWlCRyxXQUFXLEtBQTVCLEVBQVYsQ0FEcUIsQ0FDbkNDLEdBRG1DLGNBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsY0FDOUJBLElBRDhCO0FBRTNDLE1BQUlELEdBQUosRUFBUztBQUNQO0FBQ0EsV0FBT0EsSUFBSUUsSUFBSixJQUFZVixtQkFBbUIsbUJBQVEsbUJBQVFTLElBQVIsQ0FBUixDQUFuQixDQUFuQjtBQUNEO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoicGFja2FnZVBhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSB7XG4gIHJldHVybiBnZXRGaWxlUGFja2FnZVBhdGgoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVBhY2thZ2VQYXRoKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZwID0gcGtnVXAoeyBjd2Q6IGZpbGVQYXRoIH0pO1xuICByZXR1cm4gZGlybmFtZShmcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/builder.js b/node_modules/eslint-plugin-import/lib/exportMap/builder.js deleted file mode 100644 index f68aae2ade..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/builder.js +++ /dev/null @@ -1,206 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();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 _parse2 = require('eslint-module-utils/parse');var _parse3 = _interopRequireDefault(_parse2); -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 _ = require('.');var _2 = _interopRequireDefault(_); -var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); -var _typescript = require('./typescript'); -var _remotePath = require('./remotePath'); -var _visitor = require('./visitor');var _visitor2 = _interopRequireDefault(_visitor);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 log = (0, _debug2['default'])('eslint-plugin-import:ExportMap'); - -var exportCache = new Map(); - -/** - * The creation of this closure is isolated from other scopes - * to avoid over-retention of unrelated variables, which has - * caused memory leaks. See #1266. - */ -function thunkFor(p, context) { - // eslint-disable-next-line no-use-before-define - return function () {return ExportMapBuilder['for']((0, _childContext2['default'])(p, context));}; -}var - -ExportMapBuilder = function () {function ExportMapBuilder() {_classCallCheck(this, ExportMapBuilder);}_createClass(ExportMapBuilder, null, [{ key: 'get', value: function () {function get( - source, context) { - var path = (0, _resolve2['default'])(source, context); - if (path == null) {return null;} - - return ExportMapBuilder['for']((0, _childContext2['default'])(path, context)); - }return get;}() }, { key: 'for', value: function () {function _for( - - context) {var - path = context.path; - - var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); - var exportMap = exportCache.get(cacheKey); - - // return cached ignore - if (exportMap === null) {return null;} - - var stats = _fs2['default'].statSync(path); - if (exportMap != null) { - // date equality check - if (exportMap.mtime - stats.mtime === 0) { - return exportMap; - } - // future: check content equality? - } - - // check valid extensions first - 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 = ExportMapBuilder.parse(path, content, context); - - // ambiguous modules return null - if (exportMap == null) { - log('ignored path due to ambiguous parse:', path); - exportCache.set(cacheKey, null); - return null; - } - - exportMap.mtime = stats.mtime; - - exportCache.set(cacheKey, exportMap); - return exportMap; - }return _for;}() }, { key: 'parse', value: function () {function parse( - - path, content, context) { - var exportMap = new _2['default'](path); - var isEsModuleInteropTrue = (0, _typescript.isEsModuleInterop)(context); - - var ast = void 0; - var visitorKeys = void 0; - try { - var result = (0, _parse3['default'])(path, content, context); - ast = result.ast; - visitorKeys = result.visitorKeys; - } catch (err) { - exportMap.errors.push(err); - return exportMap; // can't continue - } - - exportMap.visitorKeys = visitorKeys; - - var hasDynamicImports = false; - - var remotePathResolver = new _remotePath.RemotePath(path, context); - - function processDynamicImport(source) { - hasDynamicImports = true; - if (source.type !== 'Literal') { - return null; - } - var p = remotePathResolver.resolve(source.value); - if (p == null) { - return null; - } - var importedSpecifiers = new Set(); - importedSpecifiers.add('ImportNamespaceSpecifier'); - var getter = thunkFor(p, context); - exportMap.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, - dynamic: true }]) }); - - - } - - (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;}() }); - - - var unambiguouslyESM = unambiguous.isModule(ast); - if (!unambiguouslyESM && !hasDynamicImports) {return null;} - - // 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';})) { - exportMap.doc = doc; - return true; - } - } catch (err) {/* ignore */} - return false; - }); - } - - var visitorBuilder = new _visitor2['default']( - path, - context, - exportMap, - ExportMapBuilder, - content, - ast, - isEsModuleInteropTrue, - thunkFor); - - ast.body.forEach(function (astNode) { - var visitor = visitorBuilder.build(astNode); - - if (visitor[astNode.type]) { - visitor[astNode.type].call(visitorBuilder); - } - }); - - if ( - isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && exportMap.namespace.size > 0 // anything is exported - && !exportMap.namespace.has('default') // and default isn't added already - ) { - exportMap.namespace.set('default', {}); // add default export - } - - if (unambiguouslyESM) { - exportMap.parseGoal = 'Module'; - } - return exportMap; - }return parse;}() }]);return ExportMapBuilder;}();exports['default'] = ExportMapBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJ1bmFtYmlndW91cyIsImxvZyIsImV4cG9ydENhY2hlIiwiTWFwIiwidGh1bmtGb3IiLCJwIiwiY29udGV4dCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJzb3VyY2UiLCJwYXRoIiwiY2FjaGVLZXkiLCJkaWdlc3QiLCJleHBvcnRNYXAiLCJnZXQiLCJzdGF0cyIsImZzIiwic3RhdFN5bmMiLCJtdGltZSIsInNldCIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRlc3QiLCJwYXJzZSIsIkV4cG9ydE1hcCIsImlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiZXJyIiwiZXJyb3JzIiwicHVzaCIsImhhc0R5bmFtaWNJbXBvcnRzIiwicmVtb3RlUGF0aFJlc29sdmVyIiwiUmVtb3RlUGF0aCIsInByb2Nlc3NEeW5hbWljSW1wb3J0IiwidHlwZSIsInJlc29sdmUiLCJ2YWx1ZSIsImltcG9ydGVkU3BlY2lmaWVycyIsIlNldCIsImFkZCIsImdldHRlciIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJkeW5hbWljIiwiSW1wb3J0RXhwcmVzc2lvbiIsIm5vZGUiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsInVuYW1iaWd1b3VzbHlFU00iLCJpc01vZHVsZSIsImNvbW1lbnRzIiwic29tZSIsImMiLCJkb2MiLCJkb2N0cmluZSIsInVud3JhcCIsInRhZ3MiLCJ0IiwidGl0bGUiLCJ2aXNpdG9yQnVpbGRlciIsIkltcG9ydEV4cG9ydFZpc2l0b3JCdWlsZGVyIiwiYm9keSIsImZvckVhY2giLCJhc3ROb2RlIiwidmlzaXRvciIsImJ1aWxkIiwiY2FsbCIsIm5hbWVzcGFjZSIsInNpemUiLCJoYXMiLCJwYXJzZUdvYWwiXSwibWFwcGluZ3MiOiJnbkJBQUEsd0I7O0FBRUEsb0M7O0FBRUEsOEI7O0FBRUEsbUQ7QUFDQSxrRDtBQUNBLHNEO0FBQ0Esb0Q7O0FBRUE7QUFDQSw4RCxJQUFZQSxXOztBQUVaLHFCO0FBQ0EsOEM7QUFDQTtBQUNBO0FBQ0Esb0M7O0FBRUEsSUFBTUMsTUFBTSx3QkFBTSxnQ0FBTixDQUFaOztBQUVBLElBQU1DLGNBQWMsSUFBSUMsR0FBSixFQUFwQjs7QUFFQTs7Ozs7QUFLQSxTQUFTQyxRQUFULENBQWtCQyxDQUFsQixFQUFxQkMsT0FBckIsRUFBOEI7QUFDNUI7QUFDQSxTQUFPLG9CQUFNQyx3QkFBcUIsK0JBQWFGLENBQWIsRUFBZ0JDLE9BQWhCLENBQXJCLENBQU4sRUFBUDtBQUNELEM7O0FBRW9CQyxnQjtBQUNSQyxZLEVBQVFGLE8sRUFBUztBQUMxQixZQUFNRyxPQUFPLDBCQUFRRCxNQUFSLEVBQWdCRixPQUFoQixDQUFiO0FBQ0EsWUFBSUcsUUFBUSxJQUFaLEVBQWtCLENBQUUsT0FBTyxJQUFQLENBQWM7O0FBRWxDLGVBQU9GLHdCQUFxQiwrQkFBYUUsSUFBYixFQUFtQkgsT0FBbkIsQ0FBckIsQ0FBUDtBQUNELE87O0FBRVVBLGEsRUFBUztBQUNWRyxZQURVLEdBQ0RILE9BREMsQ0FDVkcsSUFEVTs7QUFHbEIsWUFBTUMsV0FBV0osUUFBUUksUUFBUixJQUFvQixzQkFBV0osT0FBWCxFQUFvQkssTUFBcEIsQ0FBMkIsS0FBM0IsQ0FBckM7QUFDQSxZQUFJQyxZQUFZVixZQUFZVyxHQUFaLENBQWdCSCxRQUFoQixDQUFoQjs7QUFFQTtBQUNBLFlBQUlFLGNBQWMsSUFBbEIsRUFBd0IsQ0FBRSxPQUFPLElBQVAsQ0FBYzs7QUFFeEMsWUFBTUUsUUFBUUMsZ0JBQUdDLFFBQUgsQ0FBWVAsSUFBWixDQUFkO0FBQ0EsWUFBSUcsYUFBYSxJQUFqQixFQUF1QjtBQUNyQjtBQUNBLGNBQUlBLFVBQVVLLEtBQVYsR0FBa0JILE1BQU1HLEtBQXhCLEtBQWtDLENBQXRDLEVBQXlDO0FBQ3ZDLG1CQUFPTCxTQUFQO0FBQ0Q7QUFDRDtBQUNEOztBQUVEO0FBQ0EsWUFBSSxDQUFDLCtCQUFrQkgsSUFBbEIsRUFBd0JILE9BQXhCLENBQUwsRUFBdUM7QUFDckNKLHNCQUFZZ0IsR0FBWixDQUFnQlIsUUFBaEIsRUFBMEIsSUFBMUI7QUFDQSxpQkFBTyxJQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFJLHlCQUFVRCxJQUFWLEVBQWdCSCxPQUFoQixDQUFKLEVBQThCO0FBQzVCTCxjQUFJLHNDQUFKLEVBQTRDUSxJQUE1QztBQUNBUCxzQkFBWWdCLEdBQVosQ0FBZ0JSLFFBQWhCLEVBQTBCLElBQTFCO0FBQ0EsaUJBQU8sSUFBUDtBQUNEOztBQUVELFlBQU1TLFVBQVVKLGdCQUFHSyxZQUFILENBQWdCWCxJQUFoQixFQUFzQixFQUFFWSxVQUFVLE1BQVosRUFBdEIsQ0FBaEI7O0FBRUE7QUFDQSxZQUFJLENBQUNyQixZQUFZc0IsSUFBWixDQUFpQkgsT0FBakIsQ0FBTCxFQUFnQztBQUM5QmxCLGNBQUksd0NBQUosRUFBOENRLElBQTlDO0FBQ0FQLHNCQUFZZ0IsR0FBWixDQUFnQlIsUUFBaEIsRUFBMEIsSUFBMUI7QUFDQSxpQkFBTyxJQUFQO0FBQ0Q7O0FBRURULFlBQUksWUFBSixFQUFrQlMsUUFBbEIsRUFBNEIsVUFBNUIsRUFBd0NELElBQXhDO0FBQ0FHLG9CQUFZTCxpQkFBaUJnQixLQUFqQixDQUF1QmQsSUFBdkIsRUFBNkJVLE9BQTdCLEVBQXNDYixPQUF0QyxDQUFaOztBQUVBO0FBQ0EsWUFBSU0sYUFBYSxJQUFqQixFQUF1QjtBQUNyQlgsY0FBSSxzQ0FBSixFQUE0Q1EsSUFBNUM7QUFDQVAsc0JBQVlnQixHQUFaLENBQWdCUixRQUFoQixFQUEwQixJQUExQjtBQUNBLGlCQUFPLElBQVA7QUFDRDs7QUFFREUsa0JBQVVLLEtBQVYsR0FBa0JILE1BQU1HLEtBQXhCOztBQUVBZixvQkFBWWdCLEdBQVosQ0FBZ0JSLFFBQWhCLEVBQTBCRSxTQUExQjtBQUNBLGVBQU9BLFNBQVA7QUFDRCxPOztBQUVZSCxVLEVBQU1VLE8sRUFBU2IsTyxFQUFTO0FBQ25DLFlBQU1NLFlBQVksSUFBSVksYUFBSixDQUFjZixJQUFkLENBQWxCO0FBQ0EsWUFBTWdCLHdCQUF3QixtQ0FBa0JuQixPQUFsQixDQUE5Qjs7QUFFQSxZQUFJb0IsWUFBSjtBQUNBLFlBQUlDLG9CQUFKO0FBQ0EsWUFBSTtBQUNGLGNBQU1DLFNBQVMsd0JBQU1uQixJQUFOLEVBQVlVLE9BQVosRUFBcUJiLE9BQXJCLENBQWY7QUFDQW9CLGdCQUFNRSxPQUFPRixHQUFiO0FBQ0FDLHdCQUFjQyxPQUFPRCxXQUFyQjtBQUNELFNBSkQsQ0FJRSxPQUFPRSxHQUFQLEVBQVk7QUFDWmpCLG9CQUFVa0IsTUFBVixDQUFpQkMsSUFBakIsQ0FBc0JGLEdBQXRCO0FBQ0EsaUJBQU9qQixTQUFQLENBRlksQ0FFTTtBQUNuQjs7QUFFREEsa0JBQVVlLFdBQVYsR0FBd0JBLFdBQXhCOztBQUVBLFlBQUlLLG9CQUFvQixLQUF4Qjs7QUFFQSxZQUFNQyxxQkFBcUIsSUFBSUMsc0JBQUosQ0FBZXpCLElBQWYsRUFBcUJILE9BQXJCLENBQTNCOztBQUVBLGlCQUFTNkIsb0JBQVQsQ0FBOEIzQixNQUE5QixFQUFzQztBQUNwQ3dCLDhCQUFvQixJQUFwQjtBQUNBLGNBQUl4QixPQUFPNEIsSUFBUCxLQUFnQixTQUFwQixFQUErQjtBQUM3QixtQkFBTyxJQUFQO0FBQ0Q7QUFDRCxjQUFNL0IsSUFBSTRCLG1CQUFtQkksT0FBbkIsQ0FBMkI3QixPQUFPOEIsS0FBbEMsQ0FBVjtBQUNBLGNBQUlqQyxLQUFLLElBQVQsRUFBZTtBQUNiLG1CQUFPLElBQVA7QUFDRDtBQUNELGNBQU1rQyxxQkFBcUIsSUFBSUMsR0FBSixFQUEzQjtBQUNBRCw2QkFBbUJFLEdBQW5CLENBQXVCLDBCQUF2QjtBQUNBLGNBQU1DLFNBQVN0QyxTQUFTQyxDQUFULEVBQVlDLE9BQVosQ0FBZjtBQUNBTSxvQkFBVStCLE9BQVYsQ0FBa0J6QixHQUFsQixDQUFzQmIsQ0FBdEIsRUFBeUI7QUFDdkJxQywwQkFEdUI7QUFFdkJFLDBCQUFjLElBQUlKLEdBQUosQ0FBUSxDQUFDO0FBQ3JCaEMsc0JBQVE7QUFDUjtBQUNFOEIsdUJBQU85QixPQUFPOEIsS0FGUjtBQUdOTyxxQkFBS3JDLE9BQU9xQyxHQUhOLEVBRGE7O0FBTXJCTixvREFOcUI7QUFPckJPLHVCQUFTLElBUFksRUFBRCxDQUFSLENBRlMsRUFBekI7OztBQVlEOztBQUVELGdDQUFNcEIsR0FBTixFQUFXQyxXQUFYLEVBQXdCO0FBQ3RCb0IsMEJBRHNCLHlDQUNMQyxJQURLLEVBQ0M7QUFDckJiLG1DQUFxQmEsS0FBS3hDLE1BQTFCO0FBQ0QsYUFIcUI7QUFJdEJ5Qyx3QkFKc0IsdUNBSVBELElBSk8sRUFJRDtBQUNuQixrQkFBSUEsS0FBS0UsTUFBTCxDQUFZZCxJQUFaLEtBQXFCLFFBQXpCLEVBQW1DO0FBQ2pDRCxxQ0FBcUJhLEtBQUtHLFNBQUwsQ0FBZSxDQUFmLENBQXJCO0FBQ0Q7QUFDRixhQVJxQiwyQkFBeEI7OztBQVdBLFlBQU1DLG1CQUFtQnBELFlBQVlxRCxRQUFaLENBQXFCM0IsR0FBckIsQ0FBekI7QUFDQSxZQUFJLENBQUMwQixnQkFBRCxJQUFxQixDQUFDcEIsaUJBQTFCLEVBQTZDLENBQUUsT0FBTyxJQUFQLENBQWM7O0FBRTdEO0FBQ0EsWUFBSU4sSUFBSTRCLFFBQVIsRUFBa0I7QUFDaEI1QixjQUFJNEIsUUFBSixDQUFhQyxJQUFiLENBQWtCLFVBQUNDLENBQUQsRUFBTztBQUN2QixnQkFBSUEsRUFBRXBCLElBQUYsS0FBVyxPQUFmLEVBQXdCLENBQUUsT0FBTyxLQUFQLENBQWU7QUFDekMsZ0JBQUk7QUFDRixrQkFBTXFCLE1BQU1DLHNCQUFTbkMsS0FBVCxDQUFlaUMsRUFBRWxCLEtBQWpCLEVBQXdCLEVBQUVxQixRQUFRLElBQVYsRUFBeEIsQ0FBWjtBQUNBLGtCQUFJRixJQUFJRyxJQUFKLENBQVNMLElBQVQsQ0FBYyxVQUFDTSxDQUFELFVBQU9BLEVBQUVDLEtBQUYsS0FBWSxRQUFuQixFQUFkLENBQUosRUFBZ0Q7QUFDOUNsRCwwQkFBVTZDLEdBQVYsR0FBZ0JBLEdBQWhCO0FBQ0EsdUJBQU8sSUFBUDtBQUNEO0FBQ0YsYUFORCxDQU1FLE9BQU81QixHQUFQLEVBQVksQ0FBRSxZQUFjO0FBQzlCLG1CQUFPLEtBQVA7QUFDRCxXQVZEO0FBV0Q7O0FBRUQsWUFBTWtDLGlCQUFpQixJQUFJQyxvQkFBSjtBQUNyQnZELFlBRHFCO0FBRXJCSCxlQUZxQjtBQUdyQk0saUJBSHFCO0FBSXJCTCx3QkFKcUI7QUFLckJZLGVBTHFCO0FBTXJCTyxXQU5xQjtBQU9yQkQsNkJBUHFCO0FBUXJCckIsZ0JBUnFCLENBQXZCOztBQVVBc0IsWUFBSXVDLElBQUosQ0FBU0MsT0FBVCxDQUFpQixVQUFVQyxPQUFWLEVBQW1CO0FBQ2xDLGNBQU1DLFVBQVVMLGVBQWVNLEtBQWYsQ0FBcUJGLE9BQXJCLENBQWhCOztBQUVBLGNBQUlDLFFBQVFELFFBQVEvQixJQUFoQixDQUFKLEVBQTJCO0FBQ3pCZ0Msb0JBQVFELFFBQVEvQixJQUFoQixFQUFzQmtDLElBQXRCLENBQTJCUCxjQUEzQjtBQUNEO0FBQ0YsU0FORDs7QUFRQTtBQUNFdEMsOEJBQXNCO0FBQXRCLFdBQ0diLFVBQVUyRCxTQUFWLENBQW9CQyxJQUFwQixHQUEyQixDQUQ5QixDQUNnQztBQURoQyxXQUVHLENBQUM1RCxVQUFVMkQsU0FBVixDQUFvQkUsR0FBcEIsQ0FBd0IsU0FBeEIsQ0FITixDQUd5QztBQUh6QyxVQUlFO0FBQ0E3RCxzQkFBVTJELFNBQVYsQ0FBb0JyRCxHQUFwQixDQUF3QixTQUF4QixFQUFtQyxFQUFuQyxFQURBLENBQ3dDO0FBQ3pDOztBQUVELFlBQUlrQyxnQkFBSixFQUFzQjtBQUNwQnhDLG9CQUFVOEQsU0FBVixHQUFzQixRQUF0QjtBQUNEO0FBQ0QsZUFBTzlELFNBQVA7QUFDRCxPLHNFQTFLa0JMLGdCIiwiZmlsZSI6ImJ1aWxkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgZG9jdHJpbmUgZnJvbSAnZG9jdHJpbmUnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuJztcbmltcG9ydCBjaGlsZENvbnRleHQgZnJvbSAnLi9jaGlsZENvbnRleHQnO1xuaW1wb3J0IHsgaXNFc01vZHVsZUludGVyb3AgfSBmcm9tICcuL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgUmVtb3RlUGF0aCB9IGZyb20gJy4vcmVtb3RlUGF0aCc7XG5pbXBvcnQgSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIgZnJvbSAnLi92aXNpdG9yJztcblxuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OkV4cG9ydE1hcCcpO1xuXG5jb25zdCBleHBvcnRDYWNoZSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBUaGUgY3JlYXRpb24gb2YgdGhpcyBjbG9zdXJlIGlzIGlzb2xhdGVkIGZyb20gb3RoZXIgc2NvcGVzXG4gKiB0byBhdm9pZCBvdmVyLXJldGVudGlvbiBvZiB1bnJlbGF0ZWQgdmFyaWFibGVzLCB3aGljaCBoYXNcbiAqIGNhdXNlZCBtZW1vcnkgbGVha3MuIFNlZSAjMTI2Ni5cbiAqL1xuZnVuY3Rpb24gdGh1bmtGb3IocCwgY29udGV4dCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgcmV0dXJuICgpID0+IEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9ydE1hcEJ1aWxkZXIge1xuICBzdGF0aWMgZ2V0KHNvdXJjZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKHNvdXJjZSwgY29udGV4dCk7XG4gICAgaWYgKHBhdGggPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgcmV0dXJuIEV4cG9ydE1hcEJ1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGxldCBleHBvcnRNYXAgPSBleHBvcnRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgICBpZiAoZXhwb3J0TWFwID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgaWYgKGV4cG9ydE1hcC5tdGltZSAtIHN0YXRzLm10aW1lID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgICB9XG4gICAgICAvLyBmdXR1cmU6IGNoZWNrIGNvbnRlbnQgZXF1YWxpdHk/XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmFsaWQgZXh0ZW5zaW9ucyBmaXJzdFxuICAgIGlmICghaGFzVmFsaWRFeHRlbnNpb24ocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICAgIGlmIChpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byBpZ25vcmUgc2V0dGluZ3M6JywgcGF0aCk7XG4gICAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIHVuYW1iaWd1b3VzIG1vZHVsZXNcbiAgICBpZiAoIXVuYW1iaWd1b3VzLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2coJ2NhY2hlIG1pc3MnLCBjYWNoZUtleSwgJ2ZvciBwYXRoJywgcGF0aCk7XG4gICAgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5wYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcblxuICAgIC8vIGFtYmlndW91cyBtb2R1bGVzIHJldHVybiBudWxsXG4gICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7XG4gICAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gYW1iaWd1b3VzIHBhcnNlOicsIHBhdGgpO1xuICAgICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV4cG9ydE1hcC5tdGltZSA9IHN0YXRzLm10aW1lO1xuXG4gICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBleHBvcnRNYXApO1xuICAgIHJldHVybiBleHBvcnRNYXA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IGV4cG9ydE1hcCA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gICAgY29uc3QgaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCk7XG5cbiAgICBsZXQgYXN0O1xuICAgIGxldCB2aXNpdG9yS2V5cztcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG4gICAgICBhc3QgPSByZXN1bHQuYXN0O1xuICAgICAgdmlzaXRvcktleXMgPSByZXN1bHQudmlzaXRvcktleXM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBleHBvcnRNYXAuZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7IC8vIGNhbid0IGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZXhwb3J0TWFwLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXM7XG5cbiAgICBsZXQgaGFzRHluYW1pY0ltcG9ydHMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbW90ZVBhdGhSZXNvbHZlciA9IG5ldyBSZW1vdGVQYXRoKHBhdGgsIGNvbnRleHQpO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0R5bmFtaWNJbXBvcnQoc291cmNlKSB7XG4gICAgICBoYXNEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICAgICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGltcG9ydGVkU3BlY2lmaWVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5hZGQoJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgICAgY29uc3QgZ2V0dGVyID0gdGh1bmtGb3IocCwgY29udGV4dCk7XG4gICAgICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwge1xuICAgICAgICBnZXR0ZXIsXG4gICAgICAgIGRlY2xhcmF0aW9uczogbmV3IFNldChbe1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIC8vIGNhcHR1cmluZyBhY3R1YWwgbm9kZSByZWZlcmVuY2UgaG9sZHMgZnVsbCBBU1QgaW4gbWVtb3J5IVxuICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS52YWx1ZSxcbiAgICAgICAgICAgIGxvYzogc291cmNlLmxvYyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycyxcbiAgICAgICAgICBkeW5hbWljOiB0cnVlLFxuICAgICAgICB9XSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpdChhc3QsIHZpc2l0b3JLZXlzLCB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5zb3VyY2UpO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJbXBvcnQnKSB7XG4gICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5hbWJpZ3VvdXNseUVTTSA9IHVuYW1iaWd1b3VzLmlzTW9kdWxlKGFzdCk7XG4gICAgaWYgKCF1bmFtYmlndW91c2x5RVNNICYmICFoYXNEeW5hbWljSW1wb3J0cykgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgICBpZiAoYXN0LmNvbW1lbnRzKSB7XG4gICAgICBhc3QuY29tbWVudHMuc29tZSgoYykgPT4ge1xuICAgICAgICBpZiAoYy50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2MudGFncy5zb21lKCh0KSA9PiB0LnRpdGxlID09PSAnbW9kdWxlJykpIHtcbiAgICAgICAgICAgIGV4cG9ydE1hcC5kb2MgPSBkb2M7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpdG9yQnVpbGRlciA9IG5ldyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlcihcbiAgICAgIHBhdGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgZXhwb3J0TWFwLFxuICAgICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhc3QsXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgICB0aHVua0ZvcixcbiAgICApO1xuICAgIGFzdC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGFzdE5vZGUpIHtcbiAgICAgIGNvbnN0IHZpc2l0b3IgPSB2aXNpdG9yQnVpbGRlci5idWlsZChhc3ROb2RlKTtcblxuICAgICAgaWYgKHZpc2l0b3JbYXN0Tm9kZS50eXBlXSkge1xuICAgICAgICB2aXNpdG9yW2FzdE5vZGUudHlwZV0uY2FsbCh2aXNpdG9yQnVpbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgICAmJiBleHBvcnRNYXAubmFtZXNwYWNlLnNpemUgPiAwIC8vIGFueXRoaW5nIGlzIGV4cG9ydGVkXG4gICAgICAmJiAhZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIHt9KTsgLy8gYWRkIGRlZmF1bHQgZXhwb3J0XG4gICAgfVxuXG4gICAgaWYgKHVuYW1iaWd1b3VzbHlFU00pIHtcbiAgICAgIGV4cG9ydE1hcC5wYXJzZUdvYWwgPSAnTW9kdWxlJztcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js b/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js deleted file mode 100644 index 5a863b60d1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/captureDependency.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.captureDependency = captureDependency;exports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -captureDependencyWithSpecifiers = captureDependencyWithSpecifiers;function captureDependency(_ref, isOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor) {var source = _ref.source;var importedSpecifiers = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new Set();if (source == null) {return null;}var p = remotePathResolver.resolve(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 = exportMap.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}var getter = thunkFor(p, context);exportMap.imports.set(p, { getter: getter, declarations: new Set([declarationMetadata]) });return getter;}var supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);function captureDependencyWithSpecifiers(n, -remotePathResolver, -exportMap, -context, -thunkFor) -{ - // import type { Foo } (TS and Flow); import typeof { Foo } (Flow) - var declarationIsType = n.importKind === 'type' || n.importKind === 'typeof'; - // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and - // shouldn't be considered to be just importing types - var specifiersOnlyImportingTypes = n.specifiers.length > 0; - var importedSpecifiers = new Set(); - n.specifiers.forEach(function (specifier) { - if (specifier.type === 'ImportSpecifier') { - importedSpecifiers.add(specifier.imported.name || specifier.imported.value); - } else if (supportedImportTypes.has(specifier.type)) { - importedSpecifiers.add(specifier.type); - } - - // import { type Foo } (Flow); import { typeof Foo } (Flow) - specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && ( - specifier.importKind === 'type' || specifier.importKind === 'typeof'); - }); - captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, remotePathResolver, exportMap, context, thunkFor, importedSpecifiers); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2FwdHVyZURlcGVuZGVuY3kuanMiXSwibmFtZXMiOlsiY2FwdHVyZURlcGVuZGVuY3kiLCJjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJleHBvcnRNYXAiLCJjb250ZXh0IiwidGh1bmtGb3IiLCJzb3VyY2UiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJTZXQiLCJwIiwicmVzb2x2ZSIsInZhbHVlIiwiZGVjbGFyYXRpb25NZXRhZGF0YSIsImxvYyIsImV4aXN0aW5nIiwiaW1wb3J0cyIsImdldCIsImRlY2xhcmF0aW9ucyIsImFkZCIsImdldHRlciIsInNldCIsInN1cHBvcnRlZEltcG9ydFR5cGVzIiwibiIsImRlY2xhcmF0aW9uSXNUeXBlIiwiaW1wb3J0S2luZCIsInNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMiLCJzcGVjaWZpZXJzIiwibGVuZ3RoIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInR5cGUiLCJpbXBvcnRlZCIsIm5hbWUiLCJoYXMiXSwibWFwcGluZ3MiOiJtRkFBZ0JBLGlCLEdBQUFBLGlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBQywrQixHQUFBQSwrQixDQWxDVCxTQUFTRCxpQkFBVCxPQUVMRSxvQkFGSyxFQUdMQyxrQkFISyxFQUlMQyxTQUpLLEVBS0xDLE9BTEssRUFNTEMsUUFOSyxFQVFMLEtBUEVDLE1BT0YsUUFQRUEsTUFPRixLQURBQyxrQkFDQSx1RUFEcUIsSUFBSUMsR0FBSixFQUNyQixDQUNBLElBQUlGLFVBQVUsSUFBZCxFQUFvQixDQUFFLE9BQU8sSUFBUCxDQUFjLENBRXBDLElBQU1HLElBQUlQLG1CQUFtQlEsT0FBbkIsQ0FBMkJKLE9BQU9LLEtBQWxDLENBQVYsQ0FDQSxJQUFJRixLQUFLLElBQVQsRUFBZSxDQUFFLE9BQU8sSUFBUCxDQUFjLENBRS9CLElBQU1HLHNCQUFzQixFQUMxQjtBQUNBTixZQUFRLEVBQUVLLE9BQU9MLE9BQU9LLEtBQWhCLEVBQXVCRSxLQUFLUCxPQUFPTyxHQUFuQyxFQUZrQixFQUcxQlosMENBSDBCLEVBSTFCTSxzQ0FKMEIsRUFBNUIsQ0FPQSxJQUFNTyxXQUFXWCxVQUFVWSxPQUFWLENBQWtCQyxHQUFsQixDQUFzQlAsQ0FBdEIsQ0FBakIsQ0FDQSxJQUFJSyxZQUFZLElBQWhCLEVBQXNCLENBQ3BCQSxTQUFTRyxZQUFULENBQXNCQyxHQUF0QixDQUEwQk4sbUJBQTFCLEVBQ0EsT0FBT0UsU0FBU0ssTUFBaEIsQ0FDRCxDQUVELElBQU1BLFNBQVNkLFNBQVNJLENBQVQsRUFBWUwsT0FBWixDQUFmLENBQ0FELFVBQVVZLE9BQVYsQ0FBa0JLLEdBQWxCLENBQXNCWCxDQUF0QixFQUF5QixFQUFFVSxjQUFGLEVBQVVGLGNBQWMsSUFBSVQsR0FBSixDQUFRLENBQUNJLG1CQUFELENBQVIsQ0FBeEIsRUFBekIsRUFDQSxPQUFPTyxNQUFQLENBQ0QsQ0FFRCxJQUFNRSx1QkFBdUIsSUFBSWIsR0FBSixDQUFRLENBQUMsd0JBQUQsRUFBMkIsMEJBQTNCLENBQVIsQ0FBN0IsQ0FFTyxTQUFTUiwrQkFBVCxDQUNMc0IsQ0FESztBQUVMcEIsa0JBRks7QUFHTEMsU0FISztBQUlMQyxPQUpLO0FBS0xDLFFBTEs7QUFNTDtBQUNBO0FBQ0EsTUFBTWtCLG9CQUFvQkQsRUFBRUUsVUFBRixLQUFpQixNQUFqQixJQUEyQkYsRUFBRUUsVUFBRixLQUFpQixRQUF0RTtBQUNBO0FBQ0E7QUFDQSxNQUFJQywrQkFBK0JILEVBQUVJLFVBQUYsQ0FBYUMsTUFBYixHQUFzQixDQUF6RDtBQUNBLE1BQU1wQixxQkFBcUIsSUFBSUMsR0FBSixFQUEzQjtBQUNBYyxJQUFFSSxVQUFGLENBQWFFLE9BQWIsQ0FBcUIsVUFBQ0MsU0FBRCxFQUFlO0FBQ2xDLFFBQUlBLFVBQVVDLElBQVYsS0FBbUIsaUJBQXZCLEVBQTBDO0FBQ3hDdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUUsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJILFVBQVVFLFFBQVYsQ0FBbUJwQixLQUFyRTtBQUNELEtBRkQsTUFFTyxJQUFJVSxxQkFBcUJZLEdBQXJCLENBQXlCSixVQUFVQyxJQUFuQyxDQUFKLEVBQThDO0FBQ25EdkIseUJBQW1CVyxHQUFuQixDQUF1QlcsVUFBVUMsSUFBakM7QUFDRDs7QUFFRDtBQUNBTCxtQ0FBK0JBO0FBQ3pCSSxjQUFVTCxVQUFWLEtBQXlCLE1BQXpCLElBQW1DSyxVQUFVTCxVQUFWLEtBQXlCLFFBRG5DLENBQS9CO0FBRUQsR0FWRDtBQVdBekIsb0JBQWtCdUIsQ0FBbEIsRUFBcUJDLHFCQUFxQkUsNEJBQTFDLEVBQXdFdkIsa0JBQXhFLEVBQTRGQyxTQUE1RixFQUF1R0MsT0FBdkcsRUFBZ0hDLFFBQWhILEVBQTBIRSxrQkFBMUg7QUFDRCIsImZpbGUiOiJjYXB0dXJlRGVwZW5kZW5jeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeShcbiAgeyBzb3VyY2UgfSxcbiAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0ZvcixcbiAgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpLFxuKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IHAgPSByZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZShzb3VyY2UudmFsdWUpO1xuICBpZiAocCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgY29uc3QgZGVjbGFyYXRpb25NZXRhZGF0YSA9IHtcbiAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICBzb3VyY2U6IHsgdmFsdWU6IHNvdXJjZS52YWx1ZSwgbG9jOiBzb3VyY2UubG9jIH0sXG4gICAgaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gZXhwb3J0TWFwLmltcG9ydHMuZ2V0KHApO1xuICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkge1xuICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgcmV0dXJuIGV4aXN0aW5nLmdldHRlcjtcbiAgfVxuXG4gIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICBleHBvcnRNYXAuaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICByZXR1cm4gZ2V0dGVyO1xufVxuXG5jb25zdCBzdXBwb3J0ZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQoWydJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllciddKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoXG4gIG4sXG4gIHJlbW90ZVBhdGhSZXNvbHZlcixcbiAgZXhwb3J0TWFwLFxuICBjb250ZXh0LFxuICB0aHVua0Zvcixcbikge1xuICAvLyBpbXBvcnQgdHlwZSB7IEZvbyB9IChUUyBhbmQgRmxvdyk7IGltcG9ydCB0eXBlb2YgeyBGb28gfSAoRmxvdylcbiAgY29uc3QgZGVjbGFyYXRpb25Jc1R5cGUgPSBuLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBuLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnO1xuICAvLyBpbXBvcnQgJy4vZm9vJyBvciBpbXBvcnQge30gZnJvbSAnLi9mb28nIChib3RoIDAgc3BlY2lmaWVycykgaXMgYSBzaWRlIGVmZmVjdCBhbmRcbiAgLy8gc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQgdG8gYmUganVzdCBpbXBvcnRpbmcgdHlwZXNcbiAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICBuLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJykge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydGVkSW1wb3J0VHlwZXMuaGFzKHNwZWNpZmllci50eXBlKSkge1xuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIudHlwZSk7XG4gICAgfVxuXG4gICAgLy8gaW1wb3J0IHsgdHlwZSBGb28gfSAoRmxvdyk7IGltcG9ydCB7IHR5cGVvZiBGb28gfSAoRmxvdylcbiAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID0gc3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlc1xuICAgICAgJiYgKHNwZWNpZmllci5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKTtcbiAgfSk7XG4gIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIHJlbW90ZVBhdGhSZXNvbHZlciwgZXhwb3J0TWFwLCBjb250ZXh0LCB0aHVua0ZvciwgaW1wb3J0ZWRTcGVjaWZpZXJzKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/childContext.js b/node_modules/eslint-plugin-import/lib/exportMap/childContext.js deleted file mode 100644 index aaa31ef98f..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/childContext.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = - - - - - - - - - - -childContext;var _hash = require('eslint-module-utils/hash');var parserOptionsHash = '';var prevParserOptions = '';var settingsHash = '';var prevSettings = ''; /** - * don't hold full context object in memory, just grab what we need. - * also calculate a cacheKey, where parts of the cacheKey hash are memoized - */function childContext(path, context) {var settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;if (JSON.stringify(settings) !== prevSettings) { - settingsHash = (0, _hash.hashObject)({ settings: settings }).digest('hex'); - prevSettings = JSON.stringify(settings); - } - - if (JSON.stringify(parserOptions) !== prevParserOptions) { - parserOptionsHash = (0, _hash.hashObject)({ parserOptions: parserOptions }).digest('hex'); - prevParserOptions = JSON.stringify(parserOptions); - } - - return { - cacheKey: String(parserPath) + parserOptionsHash + settingsHash + String(path), - settings: settings, - parserOptions: parserOptions, - parserPath: parserPath, - path: path }; - -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvY2hpbGRDb250ZXh0LmpzIl0sIm5hbWVzIjpbImNoaWxkQ29udGV4dCIsInBhcnNlck9wdGlvbnNIYXNoIiwicHJldlBhcnNlck9wdGlvbnMiLCJzZXR0aW5nc0hhc2giLCJwcmV2U2V0dGluZ3MiLCJwYXRoIiwiY29udGV4dCIsInNldHRpbmdzIiwicGFyc2VyT3B0aW9ucyIsInBhcnNlclBhdGgiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwiY2FjaGVLZXkiLCJTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBV3dCQSxZLENBWHhCLGdEQUVBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLG9CQUFvQixFQUF4QixDQUNBLElBQUlDLGVBQWUsRUFBbkIsQ0FDQSxJQUFJQyxlQUFlLEVBQW5CLEMsQ0FFQTs7O21LQUllLFNBQVNKLFlBQVQsQ0FBc0JLLElBQXRCLEVBQTRCQyxPQUE1QixFQUFxQyxLQUMxQ0MsUUFEMEMsR0FDRkQsT0FERSxDQUMxQ0MsUUFEMEMsQ0FDaENDLGFBRGdDLEdBQ0ZGLE9BREUsQ0FDaENFLGFBRGdDLENBQ2pCQyxVQURpQixHQUNGSCxPQURFLENBQ2pCRyxVQURpQixDQUdsRCxJQUFJQyxLQUFLQyxTQUFMLENBQWVKLFFBQWYsTUFBNkJILFlBQWpDLEVBQStDO0FBQzdDRCxtQkFBZSxzQkFBVyxFQUFFSSxrQkFBRixFQUFYLEVBQXlCSyxNQUF6QixDQUFnQyxLQUFoQyxDQUFmO0FBQ0FSLG1CQUFlTSxLQUFLQyxTQUFMLENBQWVKLFFBQWYsQ0FBZjtBQUNEOztBQUVELE1BQUlHLEtBQUtDLFNBQUwsQ0FBZUgsYUFBZixNQUFrQ04saUJBQXRDLEVBQXlEO0FBQ3ZERCx3QkFBb0Isc0JBQVcsRUFBRU8sNEJBQUYsRUFBWCxFQUE4QkksTUFBOUIsQ0FBcUMsS0FBckMsQ0FBcEI7QUFDQVYsd0JBQW9CUSxLQUFLQyxTQUFMLENBQWVILGFBQWYsQ0FBcEI7QUFDRDs7QUFFRCxTQUFPO0FBQ0xLLGNBQVVDLE9BQU9MLFVBQVAsSUFBcUJSLGlCQUFyQixHQUF5Q0UsWUFBekMsR0FBd0RXLE9BQU9ULElBQVAsQ0FEN0Q7QUFFTEUsc0JBRks7QUFHTEMsZ0NBSEs7QUFJTEMsMEJBSks7QUFLTEosY0FMSyxFQUFQOztBQU9EIiwiZmlsZSI6ImNoaWxkQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuXG5sZXQgcGFyc2VyT3B0aW9uc0hhc2ggPSAnJztcbmxldCBwcmV2UGFyc2VyT3B0aW9ucyA9ICcnO1xubGV0IHNldHRpbmdzSGFzaCA9ICcnO1xubGV0IHByZXZTZXR0aW5ncyA9ICcnO1xuXG4vKipcbiAqIGRvbid0IGhvbGQgZnVsbCBjb250ZXh0IG9iamVjdCBpbiBtZW1vcnksIGp1c3QgZ3JhYiB3aGF0IHdlIG5lZWQuXG4gKiBhbHNvIGNhbGN1bGF0ZSBhIGNhY2hlS2V5LCB3aGVyZSBwYXJ0cyBvZiB0aGUgY2FjaGVLZXkgaGFzaCBhcmUgbWVtb2l6ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcblxuICBpZiAoSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpICE9PSBwcmV2U2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nc0hhc2ggPSBoYXNoT2JqZWN0KHsgc2V0dGluZ3MgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBwcmV2U2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShzZXR0aW5ncyk7XG4gIH1cblxuICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucykgIT09IHByZXZQYXJzZXJPcHRpb25zKSB7XG4gICAgcGFyc2VyT3B0aW9uc0hhc2ggPSBoYXNoT2JqZWN0KHsgcGFyc2VyT3B0aW9ucyB9KS5kaWdlc3QoJ2hleCcpO1xuICAgIHByZXZQYXJzZXJPcHRpb25zID0gSlNPTi5zdHJpbmdpZnkocGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhY2hlS2V5OiBTdHJpbmcocGFyc2VyUGF0aCkgKyBwYXJzZXJPcHRpb25zSGFzaCArIHNldHRpbmdzSGFzaCArIFN0cmluZyhwYXRoKSxcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/doc.js b/node_modules/eslint-plugin-import/lib/exportMap/doc.js deleted file mode 100644 index e2ceaa98a6..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/doc.js +++ /dev/null @@ -1,90 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.availableDocStyleParsers = undefined;exports. - - - - -captureDoc = captureDoc;var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} /** - * parse docs from the first node that has leading comments - */function captureDoc(source, docStyleParsers) {var metadata = {}; - // 'some' short-circuits on first 'true' - for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(function (n) { - try { - - var leadingComments = void 0; - - // n.leadingComments is legacy `attachComments` behavior - if ('leadingComments' in n) { - leadingComments = n.leadingComments; - } else if (n.range) { - leadingComments = source.getCommentsBefore(n); - } - - if (!leadingComments || leadingComments.length === 0) {return false;} - - for (var name in docStyleParsers) { - var doc = docStyleParsers[name](leadingComments); - if (doc) { - metadata.doc = doc; - } - } - - return true; - } catch (err) { - return false; - } - }); - - return metadata; -} - -/** - * parse JSDoc from leading comments - * @param {object[]} comments - * @return {{ doc: object }} - */ -function captureJsDoc(comments) { - var doc = void 0; - - // capture XSDoc - comments.forEach(function (comment) { - // skip non-block comments - if (comment.type !== 'Block') {return;} - try { - doc = _doctrine2['default'].parse(comment.value, { unwrap: true }); - } catch (err) { - /* don't care, for now? maybe add to `errors?` */ - } - }); - - return doc; -} - -/** - * parse TomDoc section from comments - */ -function captureTomDoc(comments) { - // collect lines up to first paragraph break - var lines = []; - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; - if (comment.value.match(/^\s*$/)) {break;} - lines.push(comment.value.trim()); - } - - // return doctrine-like object - var statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/); - if (statusMatch) { - return { - description: statusMatch[2], - tags: [{ - title: statusMatch[1].toLowerCase(), - description: statusMatch[2] }] }; - - - } -} - -var availableDocStyleParsers = exports.availableDocStyleParsers = { - jsdoc: captureJsDoc, - tomdoc: captureTomDoc }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvZG9jLmpzIl0sIm5hbWVzIjpbImNhcHR1cmVEb2MiLCJzb3VyY2UiLCJkb2NTdHlsZVBhcnNlcnMiLCJtZXRhZGF0YSIsIm5vZGVzIiwic29tZSIsIm4iLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwibmFtZSIsImRvYyIsImVyciIsImNhcHR1cmVKc0RvYyIsImNvbW1lbnRzIiwiZm9yRWFjaCIsImNvbW1lbnQiLCJ0eXBlIiwiZG9jdHJpbmUiLCJwYXJzZSIsInZhbHVlIiwidW53cmFwIiwiY2FwdHVyZVRvbURvYyIsImxpbmVzIiwiaSIsIm1hdGNoIiwicHVzaCIsInRyaW0iLCJzdGF0dXNNYXRjaCIsImpvaW4iLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJ0b21kb2MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS2dCQSxVLEdBQUFBLFUsQ0FMaEIsb0MsbUpBRUE7O2tOQUdPLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCQyxlQUE1QixFQUF1RCxDQUM1RCxJQUFNQyxXQUFXLEVBQWpCO0FBRUE7QUFINEQsb0NBQVBDLEtBQU8sbUVBQVBBLEtBQU8sOEJBSTVEQSxNQUFNQyxJQUFOLENBQVcsVUFBQ0MsQ0FBRCxFQUFPO0FBQ2hCLFFBQUk7O0FBRUYsVUFBSUMsd0JBQUo7O0FBRUE7QUFDQSxVQUFJLHFCQUFxQkQsQ0FBekIsRUFBNEI7QUFDMUJDLDBCQUFrQkQsRUFBRUMsZUFBcEI7QUFDRCxPQUZELE1BRU8sSUFBSUQsRUFBRUUsS0FBTixFQUFhO0FBQ2xCRCwwQkFBa0JOLE9BQU9RLGlCQUFQLENBQXlCSCxDQUF6QixDQUFsQjtBQUNEOztBQUVELFVBQUksQ0FBQ0MsZUFBRCxJQUFvQkEsZ0JBQWdCRyxNQUFoQixLQUEyQixDQUFuRCxFQUFzRCxDQUFFLE9BQU8sS0FBUCxDQUFlOztBQUV2RSxXQUFLLElBQU1DLElBQVgsSUFBbUJULGVBQW5CLEVBQW9DO0FBQ2xDLFlBQU1VLE1BQU1WLGdCQUFnQlMsSUFBaEIsRUFBc0JKLGVBQXRCLENBQVo7QUFDQSxZQUFJSyxHQUFKLEVBQVM7QUFDUFQsbUJBQVNTLEdBQVQsR0FBZUEsR0FBZjtBQUNEO0FBQ0Y7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0FyQkQsQ0FxQkUsT0FBT0MsR0FBUCxFQUFZO0FBQ1osYUFBTyxLQUFQO0FBQ0Q7QUFDRixHQXpCRDs7QUEyQkEsU0FBT1YsUUFBUDtBQUNEOztBQUVEOzs7OztBQUtBLFNBQVNXLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDO0FBQzlCLE1BQUlILFlBQUo7O0FBRUE7QUFDQUcsV0FBU0MsT0FBVCxDQUFpQixVQUFDQyxPQUFELEVBQWE7QUFDNUI7QUFDQSxRQUFJQSxRQUFRQyxJQUFSLEtBQWlCLE9BQXJCLEVBQThCLENBQUUsT0FBUztBQUN6QyxRQUFJO0FBQ0ZOLFlBQU1PLHNCQUFTQyxLQUFULENBQWVILFFBQVFJLEtBQXZCLEVBQThCLEVBQUVDLFFBQVEsSUFBVixFQUE5QixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9ULEdBQVAsRUFBWTtBQUNaO0FBQ0Q7QUFDRixHQVJEOztBQVVBLFNBQU9ELEdBQVA7QUFDRDs7QUFFRDs7O0FBR0EsU0FBU1csYUFBVCxDQUF1QlIsUUFBdkIsRUFBaUM7QUFDL0I7QUFDQSxNQUFNUyxRQUFRLEVBQWQ7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSVYsU0FBU0wsTUFBN0IsRUFBcUNlLEdBQXJDLEVBQTBDO0FBQ3hDLFFBQU1SLFVBQVVGLFNBQVNVLENBQVQsQ0FBaEI7QUFDQSxRQUFJUixRQUFRSSxLQUFSLENBQWNLLEtBQWQsQ0FBb0IsT0FBcEIsQ0FBSixFQUFrQyxDQUFFLE1BQVE7QUFDNUNGLFVBQU1HLElBQU4sQ0FBV1YsUUFBUUksS0FBUixDQUFjTyxJQUFkLEVBQVg7QUFDRDs7QUFFRDtBQUNBLE1BQU1DLGNBQWNMLE1BQU1NLElBQU4sQ0FBVyxHQUFYLEVBQWdCSixLQUFoQixDQUFzQix1Q0FBdEIsQ0FBcEI7QUFDQSxNQUFJRyxXQUFKLEVBQWlCO0FBQ2YsV0FBTztBQUNMRSxtQkFBYUYsWUFBWSxDQUFaLENBRFI7QUFFTEcsWUFBTSxDQUFDO0FBQ0xDLGVBQU9KLFlBQVksQ0FBWixFQUFlSyxXQUFmLEVBREY7QUFFTEgscUJBQWFGLFlBQVksQ0FBWixDQUZSLEVBQUQsQ0FGRCxFQUFQOzs7QUFPRDtBQUNGOztBQUVNLElBQU1NLDhEQUEyQjtBQUN0Q0MsU0FBT3RCLFlBRCtCO0FBRXRDdUIsVUFBUWQsYUFGOEIsRUFBakMiLCJmaWxlIjoiZG9jLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvY3RyaW5lIGZyb20gJ2RvY3RyaW5lJztcblxuLyoqXG4gKiBwYXJzZSBkb2NzIGZyb20gdGhlIGZpcnN0IG5vZGUgdGhhdCBoYXMgbGVhZGluZyBjb21tZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgLi4ubm9kZXMpIHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcblxuICAvLyAnc29tZScgc2hvcnQtY2lyY3VpdHMgb24gZmlyc3QgJ3RydWUnXG4gIG5vZGVzLnNvbWUoKG4pID0+IHtcbiAgICB0cnkge1xuXG4gICAgICBsZXQgbGVhZGluZ0NvbW1lbnRzO1xuXG4gICAgICAvLyBuLmxlYWRpbmdDb21tZW50cyBpcyBsZWdhY3kgYGF0dGFjaENvbW1lbnRzYCBiZWhhdmlvclxuICAgICAgaWYgKCdsZWFkaW5nQ29tbWVudHMnIGluIG4pIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gbi5sZWFkaW5nQ29tbWVudHM7XG4gICAgICB9IGVsc2UgaWYgKG4ucmFuZ2UpIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlLmdldENvbW1lbnRzQmVmb3JlKG4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZG9jU3R5bGVQYXJzZXJzKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY1N0eWxlUGFyc2Vyc1tuYW1lXShsZWFkaW5nQ29tbWVudHMpO1xuICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgbWV0YWRhdGEuZG9jID0gZG9jO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG4vKipcbiAqIHBhcnNlIEpTRG9jIGZyb20gbGVhZGluZyBjb21tZW50c1xuICogQHBhcmFtIHtvYmplY3RbXX0gY29tbWVudHNcbiAqIEByZXR1cm4ge3sgZG9jOiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUpzRG9jKGNvbW1lbnRzKSB7XG4gIGxldCBkb2M7XG5cbiAgLy8gY2FwdHVyZSBYU0RvY1xuICBjb21tZW50cy5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICBkb2MgPSBkb2N0cmluZS5wYXJzZShjb21tZW50LnZhbHVlLCB7IHVud3JhcDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIGRvbid0IGNhcmUsIGZvciBub3c/IG1heWJlIGFkZCB0byBgZXJyb3JzP2AgKi9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG5cbi8qKlxuICAqIHBhcnNlIFRvbURvYyBzZWN0aW9uIGZyb20gY29tbWVudHNcbiAgKi9cbmZ1bmN0aW9uIGNhcHR1cmVUb21Eb2MoY29tbWVudHMpIHtcbiAgLy8gY29sbGVjdCBsaW5lcyB1cCB0byBmaXJzdCBwYXJhZ3JhcGggYnJlYWtcbiAgY29uc3QgbGluZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50c1tpXTtcbiAgICBpZiAoY29tbWVudC52YWx1ZS5tYXRjaCgvXlxccyokLykpIHsgYnJlYWs7IH1cbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMgPSB7XG4gIGpzZG9jOiBjYXB0dXJlSnNEb2MsXG4gIHRvbWRvYzogY2FwdHVyZVRvbURvYyxcbn07XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/index.js b/node_modules/eslint-plugin-import/lib/exportMap/index.js deleted file mode 100644 index 802da1e873..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/index.js +++ /dev/null @@ -1,180 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}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<() => ExportMap>} - */ - this.dependencies = new Set(); - /** - * dependencies of this module that are not explicitly re-exported - * @type {Map ExportMap>} - */ - this.imports = new Map(); - this.errors = []; - /** - * type {'ambiguous' | 'Module' | 'Script'} - */ - this.parseGoal = 'ambiguous'; - }_createClass(ExportMap, [{ key: 'has', - - - - - - - - - - - - - - - /** - * Note that this does not check explicitly re-exported names for existence - * in the base namespace, but it will expand all `export * from '...'` exports - * if not found in the explicit namespace. - * @param {string} name - * @return {boolean} true if `name` is exported by this module. - */value: function () {function has( - name) { - if (this.namespace.has(name)) {return true;} - if (this.reexports.has(name)) {return true;} - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { - for (var _iterator = this.dependencies[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var dep = _step.value; - var innerMap = dep(); - - // todo: report as unresolved? - if (!innerMap) {continue;} - - if (innerMap.has(name)) {return true;} - }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} - } - - return false; - }return has;}() - - /** - * ensure that imported name fully resolves. - * @param {string} name - * @return {{ found: boolean, path: ExportMap[] }} - */ }, { key: 'hasDeep', value: function () {function hasDeep( - name) { - if (this.namespace.has(name)) {return { found: true, path: [this] };} - - if (this.reexports.has(name)) { - var reexports = this.reexports.get(name); - var imported = reexports.getImport(); - - // if import is ignored, return explicit 'null' - if (imported == null) {return { found: true, path: [this] };} - - // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) { - return { found: false, path: [this] }; - } - - var deep = imported.hasDeep(reexports.local); - deep.path.unshift(this); - - return deep; - } - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { - for (var _iterator2 = this.dependencies[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var dep = _step2.value; - var innerMap = dep(); - if (innerMap == null) {return { found: true, path: [this] };} - // todo: report as unresolved? - if (!innerMap) {continue;} - - // safeguard against cycles - if (innerMap.path === this.path) {continue;} - - var innerValue = innerMap.hasDeep(name); - if (innerValue.found) { - innerValue.path.unshift(this); - return innerValue; - } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} - } - - return { found: false, path: [this] }; - }return hasDeep;}() }, { key: 'get', value: function () {function get( - - name) { - if (this.namespace.has(name)) {return this.namespace.get(name);} - - if (this.reexports.has(name)) { - var reexports = this.reexports.get(name); - var imported = reexports.getImport(); - - // if import is ignored, return explicit 'null' - if (imported == null) {return null;} - - // safeguard against cycles, only if name matches - if (imported.path === this.path && reexports.local === name) {return undefined;} - - return imported.get(reexports.local); - } - - // default exports must be explicitly re-exported (#328) - if (name !== 'default') {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = this.dependencies[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var dep = _step3.value; - var innerMap = dep(); - // todo: report as unresolved? - if (!innerMap) {continue;} - - // safeguard against cycles - if (innerMap.path === this.path) {continue;} - - var innerValue = innerMap.get(name); - if (innerValue !== undefined) {return innerValue;} - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} - } - - return undefined; - }return get;}() }, { key: 'forEach', value: function () {function forEach( - - callback, thisArg) {var _this = this; - this.namespace.forEach(function (v, n) {callback.call(thisArg, v, n, _this);}); - - this.reexports.forEach(function (reexports, name) { - var reexported = reexports.getImport(); - // can't look up meta for ignored re-exports (#348) - callback.call(thisArg, reexported && reexported.get(reexports.local), name, _this); - }); - - this.dependencies.forEach(function (dep) { - var d = dep(); - // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;} - - d.forEach(function (v, n) { - if (n !== 'default') { - callback.call(thisArg, v, n, _this); - } - }); - }); - }return forEach;}() - - // todo: keys, values, entries? - }, { key: 'reportErrors', value: function () {function reportErrors( - context, declaration) { - var msg = this.errors. - map(function (e) {return String(e.message) + ' (' + String(e.lineNumber) + ':' + String(e.column) + ')';}). - join(', '); - context.report({ - node: declaration.source, - message: 'Parse errors in imported module \'' + String(declaration.source.value) + '\': ' + String(msg) }); - - }return reportErrors;}() }, { key: 'hasDefault', get: function () {function get() {return this.get('default') != null;}return get;}() // stronger than this.has - }, { key: 'size', get: function () {function get() {var size = this.namespace.size + this.reexports.size;this.dependencies.forEach(function (dep) {var d = dep(); // CJS / ignored dependencies won't exist (#717) - if (d == null) {return;}size += d.size;});return size;}return get;}() }]);return ExportMap;}();exports['default'] = ExportMap; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvaW5kZXguanMiXSwibmFtZXMiOlsiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsIk1hcCIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJwYXJzZUdvYWwiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwibXNnIiwibWFwIiwiZSIsIm1lc3NhZ2UiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJ2YWx1ZSIsInNpemUiXSwibWFwcGluZ3MiOiJ5d0JBQXFCQSxTO0FBQ25CLHFCQUFZQyxJQUFaLEVBQWtCO0FBQ2hCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBSUMsR0FBSixFQUFqQjtBQUNBO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixJQUFJRCxHQUFKLEVBQWpCO0FBQ0E7Ozs7QUFJQSxTQUFLRSxZQUFMLEdBQW9CLElBQUlDLEdBQUosRUFBcEI7QUFDQTs7OztBQUlBLFNBQUtDLE9BQUwsR0FBZSxJQUFJSixHQUFKLEVBQWY7QUFDQSxTQUFLSyxNQUFMLEdBQWMsRUFBZDtBQUNBOzs7QUFHQSxTQUFLQyxTQUFMLEdBQWlCLFdBQWpCO0FBQ0QsRzs7Ozs7Ozs7Ozs7Ozs7O0FBZUQ7Ozs7Ozs7QUFPSUMsVSxFQUFNO0FBQ1IsWUFBSSxLQUFLUixTQUFMLENBQWVTLEdBQWYsQ0FBbUJELElBQW5CLENBQUosRUFBOEIsQ0FBRSxPQUFPLElB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SyxJQUFULEVBQWUsQ0FBRSxPQUFTLENBQzFCYyxRQUFRZCxFQUFFYyxJQUFWLENBQ0QsQ0FMRCxFQU1BLE9BQU9BLElBQVAsQ0FDRCxDLDZEQWxDa0I3QyxTIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0TWFwIHtcbiAgY29uc3RydWN0b3IocGF0aCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTWFwKCk7XG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogc3Rhci1leHBvcnRzXG4gICAgICogQHR5cGUge1NldDwoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSByZS1leHBvcnRlZFxuICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCAoKSA9PiBFeHBvcnRNYXA+fVxuICAgICAqL1xuICAgIHRoaXMuaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIC8qKlxuICAgICAqIHR5cGUgeydhbWJpZ3VvdXMnIHwgJ01vZHVsZScgfCAnU2NyaXB0J31cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlR29hbCA9ICdhbWJpZ3VvdXMnO1xuICB9XG5cbiAgZ2V0IGhhc0RlZmF1bHQoKSB7IHJldHVybiB0aGlzLmdldCgnZGVmYXVsdCcpICE9IG51bGw7IH0gLy8gc3Ryb25nZXIgdGhhbiB0aGlzLmhhc1xuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5uYW1lc3BhY2Uuc2l6ZSArIHRoaXMucmVleHBvcnRzLnNpemU7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICBzaXplICs9IGQuc2l6ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBleHBsaWNpdGx5IHJlLWV4cG9ydGVkIG5hbWVzIGZvciBleGlzdGVuY2VcbiAgICogaW4gdGhlIGJhc2UgbmFtZXNwYWNlLCBidXQgaXQgd2lsbCBleHBhbmQgYWxsIGBleHBvcnQgKiBmcm9tICcuLi4nYCBleHBvcnRzXG4gICAqIGlmIG5vdCBmb3VuZCBpbiB0aGUgZXhwbGljaXQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYG5hbWVgIGlzIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKi9cbiAgaGFzKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgaWYgKGlubmVyTWFwLmhhcyhuYW1lKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7IHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWVwID0gaW1wb3J0ZWQuaGFzRGVlcChyZWV4cG9ydHMubG9jYWwpO1xuICAgICAgZGVlcC5wYXRoLnVuc2hpZnQodGhpcyk7XG5cbiAgICAgIHJldHVybiBkZWVwO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHsgcmV0dXJuIHsgZm91bmQ6IHRydWUsIHBhdGg6IFt0aGlzXSB9OyB9XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHsgcmV0dXJuIHRoaXMubmFtZXNwYWNlLmdldChuYW1lKTsgfVxuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXMsIG9ubHkgaWYgbmFtZSBtYXRjaGVzXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gdGhpcy5wYXRoICYmIHJlZXhwb3J0cy5sb2NhbCA9PT0gbmFtZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIHsgY29udGludWU7IH1cblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbm5lclZhbHVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PiB7IGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcyk7IH0pO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXApID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PiB7XG4gICAgICAgIGlmIChuICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yc1xuICAgICAgLm1hcCgoZSkgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAuam9pbignLCAnKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogJHttc2d9YCxcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/namespace.js b/node_modules/eslint-plugin-import/lib/exportMap/namespace.js deleted file mode 100644 index 0b07bdd8c1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/namespace.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _childContext = require('./childContext');var _childContext2 = _interopRequireDefault(_childContext); -var _remotePath = require('./remotePath');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 - -Namespace = function () { - function Namespace( - path, - context, - ExportMapBuilder) - {_classCallCheck(this, Namespace); - this.remotePathResolver = new _remotePath.RemotePath(path, context); - this.context = context; - this.ExportMapBuilder = ExportMapBuilder; - this.namespaces = new Map(); - }_createClass(Namespace, [{ key: 'resolveImport', value: function () {function resolveImport( - - value) { - var rp = this.remotePathResolver.resolve(value); - if (rp == null) {return null;} - return this.ExportMapBuilder['for']((0, _childContext2['default'])(rp, this.context)); - }return resolveImport;}() }, { key: 'getNamespace', value: function () {function getNamespace( - - identifier) {var _this = this; - if (!this.namespaces.has(identifier.name)) {return;} - return function () {return _this.resolveImport(_this.namespaces.get(identifier.name));}; - }return getNamespace;}() }, { key: 'add', value: function () {function add( - - object, identifier) { - var nsfn = this.getNamespace(identifier); - if (nsfn) { - Object.defineProperty(object, 'namespace', { get: nsfn }); - } - - return object; - }return add;}() }, { key: 'rawSet', value: function () {function rawSet( - - name, value) { - this.namespaces.set(name, value); - }return rawSet;}() }]);return Namespace;}();exports['default'] = Namespace; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvbmFtZXNwYWNlLmpzIl0sIm5hbWVzIjpbIk5hbWVzcGFjZSIsInBhdGgiLCJjb250ZXh0IiwiRXhwb3J0TWFwQnVpbGRlciIsInJlbW90ZVBhdGhSZXNvbHZlciIsIlJlbW90ZVBhdGgiLCJuYW1lc3BhY2VzIiwiTWFwIiwidmFsdWUiLCJycCIsInJlc29sdmUiLCJpZGVudGlmaWVyIiwiaGFzIiwibmFtZSIsInJlc29sdmVJbXBvcnQiLCJnZXQiLCJvYmplY3QiLCJuc2ZuIiwiZ2V0TmFtZXNwYWNlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJzZXQiXSwibWFwcGluZ3MiOiJnbkJBQUEsOEM7QUFDQSwwQzs7QUFFcUJBLFM7QUFDbkI7QUFDRUMsTUFERjtBQUVFQyxTQUZGO0FBR0VDLGtCQUhGO0FBSUU7QUFDQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQkFBSixDQUFlSixJQUFmLEVBQXFCQyxPQUFyQixDQUExQjtBQUNBLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCQSxnQkFBeEI7QUFDQSxTQUFLRyxVQUFMLEdBQWtCLElBQUlDLEdBQUosRUFBbEI7QUFDRCxHOztBQUVhQyxXLEVBQU87QUFDbkIsWUFBTUMsS0FBSyxLQUFLTCxrQkFBTCxDQUF3Qk0sT0FBeEIsQ0FBZ0NGLEtBQWhDLENBQVg7QUFDQSxZQUFJQyxNQUFNLElBQVYsRUFBZ0IsQ0FBRSxPQUFPLElBQVAsQ0FBYztBQUNoQyxlQUFPLEtBQUtOLGdCQUFMLFFBQTBCLCtCQUFhTSxFQUFiLEVBQWlCLEtBQUtQLE9BQXRCLENBQTFCLENBQVA7QUFDRCxPOztBQUVZUyxnQixFQUFZO0FBQ3ZCLFlBQUksQ0FBQyxLQUFLTCxVQUFMLENBQWdCTSxHQUFoQixDQUFvQkQsV0FBV0UsSUFBL0IsQ0FBTCxFQUEyQyxDQUFFLE9BQVM7QUFDdEQsZUFBTyxvQkFBTSxNQUFLQyxhQUFMLENBQW1CLE1BQUtSLFVBQUwsQ0FBZ0JTLEdBQWhCLENBQW9CSixXQUFXRSxJQUEvQixDQUFuQixDQUFOLEVBQVA7QUFDRCxPOztBQUVHRyxZLEVBQVFMLFUsRUFBWTtBQUN0QixZQUFNTSxPQUFPLEtBQUtDLFlBQUwsQ0FBa0JQLFVBQWxCLENBQWI7QUFDQSxZQUFJTSxJQUFKLEVBQVU7QUFDUkUsaUJBQU9DLGNBQVAsQ0FBc0JKLE1BQXRCLEVBQThCLFdBQTlCLEVBQTJDLEVBQUVELEtBQUtFLElBQVAsRUFBM0M7QUFDRDs7QUFFRCxlQUFPRCxNQUFQO0FBQ0QsTzs7QUFFTUgsVSxFQUFNTCxLLEVBQU87QUFDbEIsYUFBS0YsVUFBTCxDQUFnQmUsR0FBaEIsQ0FBb0JSLElBQXBCLEVBQTBCTCxLQUExQjtBQUNELE8sZ0VBbENrQlIsUyIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hpbGRDb250ZXh0IGZyb20gJy4vY2hpbGRDb250ZXh0JztcbmltcG9ydCB7IFJlbW90ZVBhdGggfSBmcm9tICcuL3JlbW90ZVBhdGgnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lc3BhY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXRoLFxuICAgIGNvbnRleHQsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgKSB7XG4gICAgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIgPSBuZXcgUmVtb3RlUGF0aChwYXRoLCBjb250ZXh0KTtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuRXhwb3J0TWFwQnVpbGRlciA9IEV4cG9ydE1hcEJ1aWxkZXI7XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIucmVzb2x2ZSh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gdGhpcy5FeHBvcnRNYXBCdWlsZGVyLmZvcihjaGlsZENvbnRleHQocnAsIHRoaXMuY29udGV4dCkpO1xuICB9XG5cbiAgZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpIHtcbiAgICBpZiAoIXRoaXMubmFtZXNwYWNlcy5oYXMoaWRlbnRpZmllci5uYW1lKSkgeyByZXR1cm47IH1cbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZXNvbHZlSW1wb3J0KHRoaXMubmFtZXNwYWNlcy5nZXQoaWRlbnRpZmllci5uYW1lKSk7XG4gIH1cblxuICBhZGQob2JqZWN0LCBpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbnNmbiA9IHRoaXMuZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpO1xuICAgIGlmIChuc2ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnbmFtZXNwYWNlJywgeyBnZXQ6IG5zZm4gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHJhd1NldChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubmFtZXNwYWNlcy5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js b/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js deleted file mode 100644 index de0888a884..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/patternCapture.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = - - - - - - -recursivePatternCapture; /** - * Traverse a pattern/identifier node, calling 'callback' - * for each leaf identifier. - * @param {node} pattern - * @param {Function} callback - * @return {void} - */function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case - callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(function (p) { - if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') { - callback(p.argument); - return; - } - recursivePatternCapture(p.value, callback); - }); - break; - - case 'ArrayPattern': - pattern.elements.forEach(function (element) { - if (element == null) {return;} - if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') { - callback(element.argument); - return; - } - recursivePatternCapture(element, callback); - }); - break; - - case 'AssignmentPattern': - callback(pattern.left); - break; - default:} - -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJwYXR0ZXJuIiwiY2FsbGJhY2siLCJ0eXBlIiwicHJvcGVydGllcyIsImZvckVhY2giLCJwIiwiYXJndW1lbnQiLCJ2YWx1ZSIsImVsZW1lbnRzIiwiZWxlbWVudCIsImxlZnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPd0JBLHVCLEVBUHhCOzs7Ozs7NEJBT2UsU0FBU0EsdUJBQVQsQ0FBaUNDLE9BQWpDLEVBQTBDQyxRQUExQyxFQUFvRCxDQUNqRSxRQUFRRCxRQUFRRSxJQUFoQixHQUNFLEtBQUssWUFBTCxFQUFtQjtBQUNqQkQsZUFBU0QsT0FBVCxFQUNBLE1BRUYsS0FBSyxlQUFMLENBQ0VBLFFBQVFHLFVBQVIsQ0FBbUJDLE9BQW5CLENBQTJCLFVBQUNDLENBQUQsRUFBTztBQUNoQyxZQUFJQSxFQUFFSCxJQUFGLEtBQVcsMEJBQVgsSUFBeUNHLEVBQUVILElBQUYsS0FBVyxhQUF4RCxFQUF1RTtBQUNyRUQsbUJBQVNJLEVBQUVDLFFBQVg7QUFDQTtBQUNEO0FBQ0RQLGdDQUF3Qk0sRUFBRUUsS0FBMUIsRUFBaUNOLFFBQWpDO0FBQ0QsT0FORDtBQU9BOztBQUVGLFNBQUssY0FBTDtBQUNFRCxjQUFRUSxRQUFSLENBQWlCSixPQUFqQixDQUF5QixVQUFDSyxPQUFELEVBQWE7QUFDcEMsWUFBSUEsV0FBVyxJQUFmLEVBQXFCLENBQUUsT0FBUztBQUNoQyxZQUFJQSxRQUFRUCxJQUFSLEtBQWlCLDBCQUFqQixJQUErQ08sUUFBUVAsSUFBUixLQUFpQixhQUFwRSxFQUFtRjtBQUNqRkQsbUJBQVNRLFFBQVFILFFBQWpCO0FBQ0E7QUFDRDtBQUNEUCxnQ0FBd0JVLE9BQXhCLEVBQWlDUixRQUFqQztBQUNELE9BUEQ7QUFRQTs7QUFFRixTQUFLLG1CQUFMO0FBQ0VBLGVBQVNELFFBQVFVLElBQWpCO0FBQ0E7QUFDRixZQTdCRjs7QUErQkQiLCJmaWxlIjoicGF0dGVybkNhcHR1cmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYXZlcnNlIGEgcGF0dGVybi9pZGVudGlmaWVyIG5vZGUsIGNhbGxpbmcgJ2NhbGxiYWNrJ1xuICogZm9yIGVhY2ggbGVhZiBpZGVudGlmaWVyLlxuICogQHBhcmFtICB7bm9kZX0gICBwYXR0ZXJuXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHBhdHRlcm4sIGNhbGxiYWNrKSB7XG4gIHN3aXRjaCAocGF0dGVybi50eXBlKSB7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgICAgY2FsbGJhY2socGF0dGVybik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5wcm9wZXJ0aWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgICAgY2FsbGJhY2socC5hcmd1bWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKHAudmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgcGF0dGVybi5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQuYXJndW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgY2FsbGJhY2socGF0dGVybi5sZWZ0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js b/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js deleted file mode 100644 index c9906d3cf4..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/remotePath.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.RemotePath = undefined;var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _resolve2 = require('eslint-module-utils/resolve');var _resolve3 = _interopRequireDefault(_resolve2);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 - -RemotePath = exports.RemotePath = function () { - function RemotePath(path, context) {_classCallCheck(this, RemotePath); - this.path = path; - this.context = context; - }_createClass(RemotePath, [{ key: 'resolve', value: function () {function resolve( - - value) { - return _resolve3['default'].relative(value, this.path, this.context.settings); - }return resolve;}() }]);return RemotePath;}(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvcmVtb3RlUGF0aC5qcyJdLCJuYW1lcyI6WyJSZW1vdGVQYXRoIiwicGF0aCIsImNvbnRleHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJyZWxhdGl2ZSIsInNldHRpbmdzIl0sIm1hcHBpbmdzIjoiK29CQUFBLHVEOztBQUVhQSxVLFdBQUFBLFU7QUFDWCxzQkFBWUMsSUFBWixFQUFrQkMsT0FBbEIsRUFBMkI7QUFDekIsU0FBS0QsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0QsRzs7QUFFT0MsVyxFQUFPO0FBQ2IsZUFBT0MscUJBQVFDLFFBQVIsQ0FBaUJGLEtBQWpCLEVBQXdCLEtBQUtGLElBQTdCLEVBQW1DLEtBQUtDLE9BQUwsQ0FBYUksUUFBaEQsQ0FBUDtBQUNELE8iLCJmaWxlIjoicmVtb3RlUGF0aC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5cbmV4cG9ydCBjbGFzcyBSZW1vdGVQYXRoIHtcbiAgY29uc3RydWN0b3IocGF0aCwgY29udGV4dCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWUpIHtcbiAgICByZXR1cm4gcmVzb2x2ZS5yZWxhdGl2ZSh2YWx1ZSwgdGhpcy5wYXRoLCB0aGlzLmNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/specifier.js b/node_modules/eslint-plugin-import/lib/exportMap/specifier.js deleted file mode 100644 index 7670c0cde2..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/specifier.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports['default'] = processSpecifier;function processSpecifier(specifier, astNode, exportMap, namespace) { - var nsource = astNode.source && astNode.source.value; - var exportMeta = {}; - var local = void 0; - - switch (specifier.type) { - case 'ExportDefaultSpecifier': - if (!nsource) {return;} - local = 'default'; - break; - case 'ExportNamespaceSpecifier': - exportMap.namespace.set(specifier.exported.name, Object.defineProperty(exportMeta, 'namespace', { - get: function () {function get() {return namespace.resolveImport(nsource);}return get;}() })); - - return; - case 'ExportAllDeclaration': - exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.source.value)); - return; - case 'ExportSpecifier': - if (!astNode.source) { - exportMap.namespace.set(specifier.exported.name || specifier.exported.value, namespace.add(exportMeta, specifier.local)); - return; - } - // else falls through - default: - local = specifier.local.name; - break;} - - - // todo: JSDoc - exportMap.reexports.set(specifier.exported.name, { local: local, getImport: function () {function getImport() {return namespace.resolveImport(nsource);}return getImport;}() }); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvc3BlY2lmaWVyLmpzIl0sIm5hbWVzIjpbInByb2Nlc3NTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJhc3ROb2RlIiwiZXhwb3J0TWFwIiwibmFtZXNwYWNlIiwibnNvdXJjZSIsInNvdXJjZSIsInZhbHVlIiwiZXhwb3J0TWV0YSIsImxvY2FsIiwidHlwZSIsInNldCIsImV4cG9ydGVkIiwibmFtZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwicmVzb2x2ZUltcG9ydCIsImFkZCIsInJlZXhwb3J0cyIsImdldEltcG9ydCJdLCJtYXBwaW5ncyI6ImdHQUF3QkEsZ0IsQ0FBVCxTQUFTQSxnQkFBVCxDQUEwQkMsU0FBMUIsRUFBcUNDLE9BQXJDLEVBQThDQyxTQUE5QyxFQUF5REMsU0FBekQsRUFBb0U7QUFDakYsTUFBTUMsVUFBVUgsUUFBUUksTUFBUixJQUFrQkosUUFBUUksTUFBUixDQUFlQyxLQUFqRDtBQUNBLE1BQU1DLGFBQWEsRUFBbkI7QUFDQSxNQUFJQyxjQUFKOztBQUVBLFVBQVFSLFVBQVVTLElBQWxCO0FBQ0UsU0FBSyx3QkFBTDtBQUNFLFVBQUksQ0FBQ0wsT0FBTCxFQUFjLENBQUUsT0FBUztBQUN6QkksY0FBUSxTQUFSO0FBQ0E7QUFDRixTQUFLLDBCQUFMO0FBQ0VOLGdCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaURDLE9BQU9DLGNBQVAsQ0FBc0JQLFVBQXRCLEVBQWtDLFdBQWxDLEVBQStDO0FBQzlGUSxXQUQ4Riw4QkFDeEYsQ0FBRSxPQUFPWixVQUFVYSxhQUFWLENBQXdCWixPQUF4QixDQUFQLENBQTBDLENBRDRDLGdCQUEvQyxDQUFqRDs7QUFHQTtBQUNGLFNBQUssc0JBQUw7QUFDRUYsZ0JBQVVDLFNBQVYsQ0FBb0JPLEdBQXBCLENBQXdCVixVQUFVVyxRQUFWLENBQW1CQyxJQUFuQixJQUEyQlosVUFBVVcsUUFBVixDQUFtQkwsS0FBdEUsRUFBNkVILFVBQVVjLEdBQVYsQ0FBY1YsVUFBZCxFQUEwQlAsVUFBVUssTUFBVixDQUFpQkMsS0FBM0MsQ0FBN0U7QUFDQTtBQUNGLFNBQUssaUJBQUw7QUFDRSxVQUFJLENBQUNMLFFBQVFJLE1BQWIsRUFBcUI7QUFDbkJILGtCQUFVQyxTQUFWLENBQW9CTyxHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBbkIsSUFBMkJaLFVBQVVXLFFBQVYsQ0FBbUJMLEtBQXRFLEVBQTZFSCxVQUFVYyxHQUFWLENBQWNWLFVBQWQsRUFBMEJQLFVBQVVRLEtBQXBDLENBQTdFO0FBQ0E7QUFDRDtBQUNIO0FBQ0E7QUFDRUEsY0FBUVIsVUFBVVEsS0FBVixDQUFnQkksSUFBeEI7QUFDQSxZQXJCSjs7O0FBd0JBO0FBQ0FWLFlBQVVnQixTQUFWLENBQW9CUixHQUFwQixDQUF3QlYsVUFBVVcsUUFBVixDQUFtQkMsSUFBM0MsRUFBaUQsRUFBRUosWUFBRixFQUFTVyx3QkFBVyw2QkFBTWhCLFVBQVVhLGFBQVYsQ0FBd0JaLE9BQXhCLENBQU4sRUFBWCxvQkFBVCxFQUFqRDtBQUNEIiwiZmlsZSI6InNwZWNpZmllci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb2Nlc3NTcGVjaWZpZXIoc3BlY2lmaWVyLCBhc3ROb2RlLCBleHBvcnRNYXAsIG5hbWVzcGFjZSkge1xuICBjb25zdCBuc291cmNlID0gYXN0Tm9kZS5zb3VyY2UgJiYgYXN0Tm9kZS5zb3VyY2UudmFsdWU7XG4gIGNvbnN0IGV4cG9ydE1ldGEgPSB7fTtcbiAgbGV0IGxvY2FsO1xuXG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgIGlmICghbnNvdXJjZSkgeyByZXR1cm47IH1cbiAgICAgIGxvY2FsID0gJ2RlZmF1bHQnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzpcbiAgICAgIGV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KHNwZWNpZmllci5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgZ2V0KCkgeyByZXR1cm4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSk7IH0sXG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOlxuICAgICAgZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlLCBuYW1lc3BhY2UuYWRkKGV4cG9ydE1ldGEsIHNwZWNpZmllci5zb3VyY2UudmFsdWUpKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdFeHBvcnRTcGVjaWZpZXInOlxuICAgICAgaWYgKCFhc3ROb2RlLnNvdXJjZSkge1xuICAgICAgICBleHBvcnRNYXAubmFtZXNwYWNlLnNldChzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIG5hbWVzcGFjZS5hZGQoZXhwb3J0TWV0YSwgc3BlY2lmaWVyLmxvY2FsKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAvLyBlbHNlIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OlxuICAgICAgbG9jYWwgPSBzcGVjaWZpZXIubG9jYWwubmFtZTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gdG9kbzogSlNEb2NcbiAgZXhwb3J0TWFwLnJlZXhwb3J0cy5zZXQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsIHsgbG9jYWwsIGdldEltcG9ydDogKCkgPT4gbmFtZXNwYWNlLnJlc29sdmVJbXBvcnQobnNvdXJjZSkgfSk7XG59XG4iXX0= \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/typescript.js b/node_modules/eslint-plugin-import/lib/exportMap/typescript.js deleted file mode 100644 index 5aad0ce08b..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/typescript.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -isEsModuleInterop = isEsModuleInterop;var _path = require('path');var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _hash = require('eslint-module-utils/hash');var ts = void 0;var tsconfigCache = new Map();function readTsConfig(context) {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');} // eslint-disable-line import/no-extraneous-dependencies - 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(context) {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; -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdHlwZXNjcmlwdC5qcyJdLCJuYW1lcyI6WyJpc0VzTW9kdWxlSW50ZXJvcCIsInRzIiwidHNjb25maWdDYWNoZSIsIk1hcCIsInJlYWRUc0NvbmZpZyIsImNvbnRleHQiLCJ0c2NvbmZpZ0luZm8iLCJjd2QiLCJwYXJzZXJPcHRpb25zIiwidHNjb25maWdSb290RGlyIiwicHJvY2VzcyIsImdldEVudiIsImtleSIsImVudiIsInRzQ29uZmlnUGF0aCIsInVuZGVmaW5lZCIsInJlcXVpcmUiLCJjb25maWdGaWxlIiwicmVhZENvbmZpZ0ZpbGUiLCJzeXMiLCJyZWFkRmlsZSIsInBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50IiwiY29uZmlnIiwiZSIsImNhY2hlS2V5IiwiZGlnZXN0IiwidHNDb25maWciLCJnZXQiLCJzZXQiLCJvcHRpb25zIiwiZXNNb2R1bGVJbnRlcm9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JnQkEsaUIsR0FBQUEsaUIsQ0EvQmhCLDRCQUNBLG9FQUNBLGdEQUVBLElBQUlDLFdBQUosQ0FDQSxJQUFNQyxnQkFBZ0IsSUFBSUMsR0FBSixFQUF0QixDQUVBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCLENBQzdCLElBQU1DLGVBQWUsb0NBQWUsRUFDbENDLEtBQUtGLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBQS9DLElBQWtFQyxRQUFRSCxHQUFSLEVBRHJDLEVBRWxDSSxxQkFBUSxnQkFBQ0MsR0FBRCxVQUFTRixRQUFRRyxHQUFSLENBQVlELEdBQVosQ0FBVCxFQUFSLGlCQUZrQyxFQUFmLENBQXJCLENBSUEsSUFBSSxDQUNGLElBQUlOLGFBQWFRLFlBQWIsS0FBOEJDLFNBQWxDLEVBQTZDLENBQzNDO0FBQ0EsVUFBSSxDQUFDZCxFQUFMLEVBQVMsQ0FBRUEsS0FBS2UsUUFBUSxZQUFSLENBQUwsQ0FBNkIsQ0FGRyxDQUVGO0FBRXpDLFVBQU1DLGFBQWFoQixHQUFHaUIsY0FBSCxDQUFrQlosYUFBYVEsWUFBL0IsRUFBNkNiLEdBQUdrQixHQUFILENBQU9DLFFBQXBELENBQW5CLENBQ0EsT0FBT25CLEdBQUdvQiwwQkFBSCxDQUNMSixXQUFXSyxNQUROLEVBRUxyQixHQUFHa0IsR0FGRSxFQUdMLG1CQUFRYixhQUFhUSxZQUFyQixDQUhLLENBQVAsQ0FLRCxDQUNGLENBWkQsQ0FZRSxPQUFPUyxDQUFQLEVBQVUsQ0FDVjtBQUNELEdBRUQsT0FBTyxJQUFQLENBQ0QsQ0FFTSxTQUFTdkIsaUJBQVQsQ0FBMkJLLE9BQTNCLEVBQW9DLENBQ3pDLElBQU1tQixXQUFXLHNCQUFXLEVBQzFCZixpQkFBaUJKLFFBQVFHLGFBQVIsSUFBeUJILFFBQVFHLGFBQVIsQ0FBc0JDLGVBRHRDLEVBQVgsRUFFZGdCLE1BRmMsQ0FFUCxLQUZPLENBQWpCO0FBR0EsTUFBSUMsV0FBV3hCLGNBQWN5QixHQUFkLENBQWtCSCxRQUFsQixDQUFmO0FBQ0EsTUFBSSxPQUFPRSxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ25DQSxlQUFXdEIsYUFBYUMsT0FBYixDQUFYO0FBQ0FILGtCQUFjMEIsR0FBZCxDQUFrQkosUUFBbEIsRUFBNEJFLFFBQTVCO0FBQ0Q7O0FBRUQsU0FBT0EsWUFBWUEsU0FBU0csT0FBckIsR0FBK0JILFNBQVNHLE9BQVQsQ0FBaUJDLGVBQWhELEdBQWtFLEtBQXpFO0FBQ0QiLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHRzQ29uZmlnTG9hZGVyIH0gZnJvbSAndHNjb25maWctcGF0aHMvbGliL3RzY29uZmlnLWxvYWRlcic7XG5pbXBvcnQgeyBoYXNoT2JqZWN0IH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9oYXNoJztcblxubGV0IHRzO1xuY29uc3QgdHNjb25maWdDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gcmVhZFRzQ29uZmlnKGNvbnRleHQpIHtcbiAgY29uc3QgdHNjb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgIGN3ZDogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHByb2Nlc3MuZW52W2tleV0sXG4gIH0pO1xuICB0cnkge1xuICAgIGlmICh0c2NvbmZpZ0luZm8udHNDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgYHR5cGVzY3JpcHRgIGluc3RhbGxlZC5cbiAgICAgIGlmICghdHMpIHsgdHMgPSByZXF1aXJlKCd0eXBlc2NyaXB0Jyk7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblxuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHRzY29uZmlnSW5mby50c0NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG4gICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgICAgICB0cy5zeXMsXG4gICAgICAgIGRpcm5hbWUodHNjb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIENhdGNoIGFueSBlcnJvcnNcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoY29udGV4dCkge1xuICBjb25zdCBjYWNoZUtleSA9IGhhc2hPYmplY3Qoe1xuICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gIH0pLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCB0c0NvbmZpZyA9IHRzY29uZmlnQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0c0NvbmZpZyA9IHJlYWRUc0NvbmZpZyhjb250ZXh0KTtcbiAgICB0c2NvbmZpZ0NhY2hlLnNldChjYWNoZUtleSwgdHNDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHRzQ29uZmlnICYmIHRzQ29uZmlnLm9wdGlvbnMgPyB0c0NvbmZpZy5vcHRpb25zLmVzTW9kdWxlSW50ZXJvcCA6IGZhbHNlO1xufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/exportMap/visitor.js b/node_modules/eslint-plugin-import/lib/exportMap/visitor.js deleted file mode 100644 index 38f51889f1..0000000000 --- a/node_modules/eslint-plugin-import/lib/exportMap/visitor.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); -var _eslint = require('eslint'); -var _doc = require('./doc'); -var _namespace = require('./namespace');var _namespace2 = _interopRequireDefault(_namespace); -var _specifier = require('./specifier');var _specifier2 = _interopRequireDefault(_specifier); -var _captureDependency = require('./captureDependency'); -var _patternCapture = require('./patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); -var _remotePath = require('./remotePath');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");}} - -/** - * sometimes legacy support isn't _that_ hard... right? - */ -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 }); - } -}var - -ImportExportVisitorBuilder = function () { - function ImportExportVisitorBuilder( - path, - context, - exportMap, - ExportMapBuilder, - content, - ast, - isEsModuleInteropTrue, - thunkFor) - {var _this = this;_classCallCheck(this, ImportExportVisitorBuilder); - this.context = context; - this.namespace = new _namespace2['default'](path, context, ExportMapBuilder); - this.remotePathResolver = new _remotePath.RemotePath(path, context); - this.source = makeSourceCode(content, ast); - this.exportMap = exportMap; - this.ast = ast; - this.isEsModuleInteropTrue = isEsModuleInteropTrue; - this.thunkFor = thunkFor; - var docstyle = this.context.settings && this.context.settings['import/docstyle'] || ['jsdoc']; - this.docStyleParsers = {}; - docstyle.forEach(function (style) { - _this.docStyleParsers[style] = _doc.availableDocStyleParsers[style]; - }); - }_createClass(ImportExportVisitorBuilder, [{ key: 'build', value: function () {function build( - - astNode) {var _this3 = this; - return Object.assign({ - ExportDefaultDeclaration: function () {function ExportDefaultDeclaration() { - var exportMeta = (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode); - if (astNode.declaration.type === 'Identifier') { - this.namespace.add(exportMeta, astNode.declaration); - } - this.exportMap.namespace.set('default', exportMeta); - }return ExportDefaultDeclaration;}(), - ExportAllDeclaration: function () {function ExportAllDeclaration() { - var getter = (0, _captureDependency.captureDependency)(astNode, astNode.exportKind === 'type', this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - if (getter) {this.exportMap.dependencies.add(getter);} - if (astNode.exported) { - (0, _specifier2['default'])(astNode, astNode.exported, this.exportMap, this.namespace); - } - }return ExportAllDeclaration;}(), - /** capture namespaces in case of later export */ - ImportDeclaration: function () {function ImportDeclaration() { - (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - var ns = astNode.specifiers.find(function (s) {return s.type === 'ImportNamespaceSpecifier';}); - if (ns) { - this.namespace.rawSet(ns.local.name, astNode.source.value); - } - }return ImportDeclaration;}(), - ExportNamedDeclaration: function () {function ExportNamedDeclaration() {var _this2 = this; - (0, _captureDependency.captureDependencyWithSpecifiers)(astNode, this.remotePathResolver, this.exportMap, this.context, this.thunkFor); - // capture declaration - if (astNode.declaration != null) { - switch (astNode.declaration.type) { - case 'FunctionDeclaration': - case 'ClassDeclaration': - case 'TypeAlias': // flowtype with babel-eslint parser - case 'InterfaceDeclaration': - case 'DeclareFunction': - case 'TSDeclareFunction': - case 'TSEnumDeclaration': - case 'TSTypeAliasDeclaration': - case 'TSInterfaceDeclaration': - case 'TSAbstractClassDeclaration': - case 'TSModuleDeclaration': - this.exportMap.namespace.set(astNode.declaration.id.name, (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); - break; - case 'VariableDeclaration': - astNode.declaration.declarations.forEach(function (d) { - (0, _patternCapture2['default'])( - d.id, - function (id) {return _this2.exportMap.namespace.set(id.name, (0, _doc.captureDoc)(_this2.source, _this2.docStyleParsers, d, astNode));}); - - }); - break; - default:} - - } - astNode.specifiers.forEach(function (s) {return (0, _specifier2['default'])(s, astNode, _this2.exportMap, _this2.namespace);}); - }return ExportNamedDeclaration;}(), - TSExportAssignment: function () {function TSExportAssignment() {return _this3.typeScriptExport(astNode);}return TSExportAssignment;}() }, - this.isEsModuleInteropTrue && { TSNamespaceExportDeclaration: function () {function TSNamespaceExportDeclaration() {return _this3.typeScriptExport(astNode);}return TSNamespaceExportDeclaration;}() }); - - }return build;}() - - // This doesn't declare anything, but changes what's being exported. - }, { key: 'typeScriptExport', value: function () {function typeScriptExport(astNode) {var _this4 = this; - var exportedName = astNode.type === 'TSNamespaceExportDeclaration' ? - (astNode.id || astNode.name).name : - astNode.expression && astNode.expression.name || astNode.expression.id && astNode.expression.id.name || null; - var declTypes = [ - 'VariableDeclaration', - 'ClassDeclaration', - 'TSDeclareFunction', - 'TSEnumDeclaration', - 'TSTypeAliasDeclaration', - 'TSInterfaceDeclaration', - 'TSAbstractClassDeclaration', - 'TSModuleDeclaration']; - - var exportedDecls = this.ast.body.filter(function (_ref) {var type = _ref.type,id = _ref.id,declarations = _ref.declarations;return (0, _arrayIncludes2['default'])(declTypes, type) && ( - id && id.name === exportedName || declarations && declarations.find(function (d) {return d.id.name === exportedName;}));}); - - if (exportedDecls.length === 0) { - // Export is not referencing any local declaration, must be re-exporting - this.exportMap.namespace.set('default', (0, _doc.captureDoc)(this.source, this.docStyleParsers, astNode)); - return; - } - if ( - this.isEsModuleInteropTrue // esModuleInterop is on in tsconfig - && !this.exportMap.namespace.has('default') // and default isn't added already - ) { - this.exportMap.namespace.set('default', {}); // add default export - } - exportedDecls.forEach(function (decl) { - if (decl.type === 'TSModuleDeclaration') { - if (decl.body && decl.body.type === 'TSModuleDeclaration') { - _this4.exportMap.namespace.set(decl.body.id.name, (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl.body)); - } else if (decl.body && decl.body.body) { - decl.body.body.forEach(function (moduleBlockNode) { - // Export-assignment exports all members in the namespace, - // explicitly exported or not. - var namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? - moduleBlockNode.declaration : - moduleBlockNode; - - if (!namespaceDecl) { - // TypeScript can check this for us; we needn't - } else if (namespaceDecl.type === 'VariableDeclaration') { - namespaceDecl.declarations.forEach(function (d) {return (0, _patternCapture2['default'])(d.id, function (id) {return _this4.exportMap.namespace.set( - id.name, - (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl, namespaceDecl, moduleBlockNode));});}); - - - } else { - _this4.exportMap.namespace.set( - namespaceDecl.id.name, - (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, moduleBlockNode)); - } - }); - } - } else { - // Export as default - _this4.exportMap.namespace.set('default', (0, _doc.captureDoc)(_this4.source, _this4.docStyleParsers, decl)); - } - }); - }return typeScriptExport;}() }]);return ImportExportVisitorBuilder;}();exports['default'] = ImportExportVisitorBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHBvcnRNYXAvdmlzaXRvci5qcyJdLCJuYW1lcyI6WyJtYWtlU291cmNlQ29kZSIsInRleHQiLCJhc3QiLCJTb3VyY2VDb2RlIiwibGVuZ3RoIiwiSW1wb3J0RXhwb3J0VmlzaXRvckJ1aWxkZXIiLCJwYXRoIiwiY29udGV4dCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJjb250ZW50IiwiaXNFc01vZHVsZUludGVyb3BUcnVlIiwidGh1bmtGb3IiLCJuYW1lc3BhY2UiLCJOYW1lc3BhY2UiLCJyZW1vdGVQYXRoUmVzb2x2ZXIiLCJSZW1vdGVQYXRoIiwic291cmNlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsImRvY1N0eWxlUGFyc2VycyIsImZvckVhY2giLCJzdHlsZSIsImF2YWlsYWJsZURvY1N0eWxlUGFyc2VycyIsImFzdE5vZGUiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJleHBvcnRNZXRhIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiYWRkIiwic2V0IiwiRXhwb3J0QWxsRGVjbGFyYXRpb24iLCJnZXR0ZXIiLCJleHBvcnRLaW5kIiwiZGVwZW5kZW5jaWVzIiwiZXhwb3J0ZWQiLCJJbXBvcnREZWNsYXJhdGlvbiIsIm5zIiwic3BlY2lmaWVycyIsImZpbmQiLCJzIiwicmF3U2V0IiwibG9jYWwiLCJuYW1lIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaWQiLCJkZWNsYXJhdGlvbnMiLCJkIiwiVFNFeHBvcnRBc3NpZ25tZW50IiwidHlwZVNjcmlwdEV4cG9ydCIsIlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iLCJleHBvcnRlZE5hbWUiLCJleHByZXNzaW9uIiwiZGVjbFR5cGVzIiwiZXhwb3J0ZWREZWNscyIsImJvZHkiLCJmaWx0ZXIiLCJoYXMiLCJkZWNsIiwibW9kdWxlQmxvY2tOb2RlIiwibmFtZXNwYWNlRGVjbCJdLCJtYXBwaW5ncyI6ImduQkFBQSwrQztBQUNBO0FBQ0E7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QTdCLEVBQXdDLHFCQUFXLE9BQUtiLE1BQWhCLEVBQXdCLE9BQUtHLGVBQTdCLEVBQThDdUMsSUFBOUMsQ0FBeEM7QUFDRDtBQUNGLFNBL0JEO0FBZ0NELE8sMkZBbkprQnRELDBCIiwiZmlsZSI6InZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IHsgU291cmNlQ29kZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgeyBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMsIGNhcHR1cmVEb2MgfSBmcm9tICcuL2RvYyc7XG5pbXBvcnQgTmFtZXNwYWNlIGZyb20gJy4vbmFtZXNwYWNlJztcbmltcG9ydCBwcm9jZXNzU3BlY2lmaWVyIGZyb20gJy4vc3BlY2lmaWVyJztcbmltcG9ydCB7IGNhcHR1cmVEZXBlbmRlbmN5LCBjYXB0dXJlRGVwZW5kZW5jeVdpdGhTcGVjaWZpZXJzIH0gZnJvbSAnLi9jYXB0dXJlRGVwZW5kZW5jeSc7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi9wYXR0ZXJuQ2FwdHVyZSc7XG5pbXBvcnQgeyBSZW1vdGVQYXRoIH0gZnJvbSAnLi9yZW1vdGVQYXRoJztcblxuLyoqXG4gKiBzb21ldGltZXMgbGVnYWN5IHN1cHBvcnQgaXNuJ3QgX3RoYXRfIGhhcmQuLi4gcmlnaHQ/XG4gKi9cbmZ1bmN0aW9uIG1ha2VTb3VyY2VDb2RlKHRleHQsIGFzdCkge1xuICBpZiAoU291cmNlQ29kZS5sZW5ndGggPiAxKSB7XG4gICAgLy8gRVNMaW50IDNcbiAgICByZXR1cm4gbmV3IFNvdXJjZUNvZGUodGV4dCwgYXN0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBFU0xpbnQgNCwgNVxuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh7IHRleHQsIGFzdCB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbXBvcnRFeHBvcnRWaXNpdG9yQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdGgsXG4gICAgY29udGV4dCxcbiAgICBleHBvcnRNYXAsXG4gICAgRXhwb3J0TWFwQnVpbGRlcixcbiAgICBjb250ZW50LFxuICAgIGFzdCxcbiAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUsXG4gICAgdGh1bmtGb3IsXG4gICkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTmFtZXNwYWNlKHBhdGgsIGNvbnRleHQsIEV4cG9ydE1hcEJ1aWxkZXIpO1xuICAgIHRoaXMucmVtb3RlUGF0aFJlc29sdmVyID0gbmV3IFJlbW90ZVBhdGgocGF0aCwgY29udGV4dCk7XG4gICAgdGhpcy5zb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuICAgIHRoaXMuZXhwb3J0TWFwID0gZXhwb3J0TWFwO1xuICAgIHRoaXMuYXN0ID0gYXN0O1xuICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlID0gaXNFc01vZHVsZUludGVyb3BUcnVlO1xuICAgIHRoaXMudGh1bmtGb3IgPSB0aHVua0ZvcjtcbiAgICBjb25zdCBkb2NzdHlsZSA9IHRoaXMuY29udGV4dC5zZXR0aW5ncyAmJiB0aGlzLmNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddIHx8IFsnanNkb2MnXTtcbiAgICB0aGlzLmRvY1N0eWxlUGFyc2VycyA9IHt9O1xuICAgIGRvY3N0eWxlLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICB0aGlzLmRvY1N0eWxlUGFyc2Vyc1tzdHlsZV0gPSBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnNbc3R5bGVdO1xuICAgIH0pO1xuICB9XG5cbiAgYnVpbGQoYXN0Tm9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHRoaXMuc291cmNlLCB0aGlzLmRvY1N0eWxlUGFyc2VycywgYXN0Tm9kZSk7XG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHRoaXMubmFtZXNwYWNlLmFkZChleHBvcnRNZXRhLCBhc3ROb2RlLmRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgZXhwb3J0TWV0YSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNhcHR1cmVEZXBlbmRlbmN5KGFzdE5vZGUsIGFzdE5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnLCB0aGlzLnJlbW90ZVBhdGhSZXNvbHZlciwgdGhpcy5leHBvcnRNYXAsIHRoaXMuY29udGV4dCwgdGhpcy50aHVua0Zvcik7XG4gICAgICAgIGlmIChnZXR0ZXIpIHsgdGhpcy5leHBvcnRNYXAuZGVwZW5kZW5jaWVzLmFkZChnZXR0ZXIpOyB9XG4gICAgICAgIGlmIChhc3ROb2RlLmV4cG9ydGVkKSB7XG4gICAgICAgICAgcHJvY2Vzc1NwZWNpZmllcihhc3ROb2RlLCBhc3ROb2RlLmV4cG9ydGVkLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqIGNhcHR1cmUgbmFtZXNwYWNlcyBpbiBjYXNlIG9mIGxhdGVyIGV4cG9ydCAqL1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICBjb25zdCBucyA9IGFzdE5vZGUuc3BlY2lmaWVycy5maW5kKChzKSA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgdGhpcy5uYW1lc3BhY2UucmF3U2V0KG5zLmxvY2FsLm5hbWUsIGFzdE5vZGUuc291cmNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgICAgIGNhcHR1cmVEZXBlbmRlbmN5V2l0aFNwZWNpZmllcnMoYXN0Tm9kZSwgdGhpcy5yZW1vdGVQYXRoUmVzb2x2ZXIsIHRoaXMuZXhwb3J0TWFwLCB0aGlzLmNvbnRleHQsIHRoaXMudGh1bmtGb3IpO1xuICAgICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChhc3ROb2RlLmRlY2xhcmF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFzdE5vZGUuZGVjbGFyYXRpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1R5cGVBbGlhcyc6IC8vIGZsb3d0eXBlIHdpdGggYmFiZWwtZXNsaW50IHBhcnNlclxuICAgICAgICAgICAgY2FzZSAnSW50ZXJmYWNlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTRW51bURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU0Fic3RyYWN0Q2xhc3NEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChhc3ROb2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgIGFzdE5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShcbiAgICAgICAgICAgICAgICAgIGQuaWQsXG4gICAgICAgICAgICAgICAgICAoaWQpID0+IHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGQsIGFzdE5vZGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaCgocykgPT4gcHJvY2Vzc1NwZWNpZmllcihzLCBhc3ROb2RlLCB0aGlzLmV4cG9ydE1hcCwgdGhpcy5uYW1lc3BhY2UpKTtcbiAgICAgIH0sXG4gICAgICBUU0V4cG9ydEFzc2lnbm1lbnQ6ICgpID0+IHRoaXMudHlwZVNjcmlwdEV4cG9ydChhc3ROb2RlKSxcbiAgICAgIC4uLnRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlICYmIHsgVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjogKCkgPT4gdGhpcy50eXBlU2NyaXB0RXhwb3J0KGFzdE5vZGUpIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoaXMgZG9lc24ndCBkZWNsYXJlIGFueXRoaW5nLCBidXQgY2hhbmdlcyB3aGF0J3MgYmVpbmcgZXhwb3J0ZWQuXG4gIHR5cGVTY3JpcHRFeHBvcnQoYXN0Tm9kZSkge1xuICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IGFzdE5vZGUudHlwZSA9PT0gJ1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24nXG4gICAgICA/IChhc3ROb2RlLmlkIHx8IGFzdE5vZGUubmFtZSkubmFtZVxuICAgICAgOiBhc3ROb2RlLmV4cHJlc3Npb24gJiYgYXN0Tm9kZS5leHByZXNzaW9uLm5hbWUgfHwgYXN0Tm9kZS5leHByZXNzaW9uLmlkICYmIGFzdE5vZGUuZXhwcmVzc2lvbi5pZC5uYW1lIHx8IG51bGw7XG4gICAgY29uc3QgZGVjbFR5cGVzID0gW1xuICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTRGVjbGFyZUZ1bmN0aW9uJyxcbiAgICAgICdUU0VudW1EZWNsYXJhdGlvbicsXG4gICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgJ1RTTW9kdWxlRGVjbGFyYXRpb24nLFxuICAgIF07XG4gICAgY29uc3QgZXhwb3J0ZWREZWNscyA9IHRoaXMuYXN0LmJvZHkuZmlsdGVyKCh7IHR5cGUsIGlkLCBkZWNsYXJhdGlvbnMgfSkgPT4gaW5jbHVkZXMoZGVjbFR5cGVzLCB0eXBlKSAmJiAoXG4gICAgICBpZCAmJiBpZC5uYW1lID09PSBleHBvcnRlZE5hbWUgfHwgZGVjbGFyYXRpb25zICYmIGRlY2xhcmF0aW9ucy5maW5kKChkKSA9PiBkLmlkLm5hbWUgPT09IGV4cG9ydGVkTmFtZSlcbiAgICApKTtcbiAgICBpZiAoZXhwb3J0ZWREZWNscy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEV4cG9ydCBpcyBub3QgcmVmZXJlbmNpbmcgYW55IGxvY2FsIGRlY2xhcmF0aW9uLCBtdXN0IGJlIHJlLWV4cG9ydGluZ1xuICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBhc3ROb2RlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNFc01vZHVsZUludGVyb3BUcnVlIC8vIGVzTW9kdWxlSW50ZXJvcCBpcyBvbiBpbiB0c2NvbmZpZ1xuICAgICAgJiYgIXRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMoJ2RlZmF1bHQnKSAvLyBhbmQgZGVmYXVsdCBpc24ndCBhZGRlZCBhbHJlYWR5XG4gICAgKSB7XG4gICAgICB0aGlzLmV4cG9ydE1hcC5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0Jywge30pOyAvLyBhZGQgZGVmYXVsdCBleHBvcnRcbiAgICB9XG4gICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICBpZiAoZGVjbC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbicpIHtcbiAgICAgICAgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkudHlwZSA9PT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChkZWNsLmJvZHkuaWQubmFtZSwgY2FwdHVyZURvYyh0aGlzLnNvdXJjZSwgdGhpcy5kb2NTdHlsZVBhcnNlcnMsIGRlY2wuYm9keSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgIGRlY2wuYm9keS5ib2R5LmZvckVhY2goKG1vZHVsZUJsb2NrTm9kZSkgPT4ge1xuICAgICAgICAgICAgLy8gRXhwb3J0LWFzc2lnbm1lbnQgZXhwb3J0cyBhbGwgbWVtYmVycyBpbiB0aGUgbmFtZXNwYWNlLFxuICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VEZWNsID0gbW9kdWxlQmxvY2tOb2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJ1xuICAgICAgICAgICAgICA/IG1vZHVsZUJsb2NrTm9kZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VEZWNsKSB7XG4gICAgICAgICAgICAgIC8vIFR5cGVTY3JpcHQgY2FuIGNoZWNrIHRoaXMgZm9yIHVzOyB3ZSBuZWVkbid0XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgIG5hbWVzcGFjZURlY2wuZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGQuaWQsIChpZCkgPT4gdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldChcbiAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsLCBuYW1lc3BhY2VEZWNsLCBtb2R1bGVCbG9ja05vZGUpLFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwb3J0TWFwLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5pZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBtb2R1bGVCbG9ja05vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3J0IGFzIGRlZmF1bHRcbiAgICAgICAgdGhpcy5leHBvcnRNYXAubmFtZXNwYWNlLnNldCgnZGVmYXVsdCcsIGNhcHR1cmVEb2ModGhpcy5zb3VyY2UsIHRoaXMuZG9jU3R5bGVQYXJzZXJzLCBkZWNsKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/index.js b/node_modules/eslint-plugin-import/lib/index.js index 9f53379f91..daf8d74398 100644 --- a/node_modules/eslint-plugin-import/lib/index.js +++ b/node_modules/eslint-plugin-import/lib/index.js @@ -1,6 +1,4 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.flatConfigs = exports.configs = exports.rules = undefined;var _package = require('../package.json'); - -var rules = exports.rules = { +'use strict';Object.defineProperty(exports, "__esModule", { value: true });var rules = exports.rules = { 'no-unresolved': require('./rules/no-unresolved'), named: require('./rules/named'), 'default': require('./rules/default'), @@ -70,33 +68,4 @@ var configs = exports.configs = { 'react-native': require('../config/react-native'), electron: require('../config/electron'), typescript: require('../config/typescript') }; - - -// Base Plugin Object -var importPlugin = { - meta: { name: _package.name, version: _package.version }, - rules: rules }; - - -// Create flat configs (Only ones that declare plugins and parser options need to be different from the legacy config) -var createFlatConfig = function createFlatConfig(baseConfig, configName) {return Object.assign({}, - baseConfig, { - name: 'import/' + String(configName), - plugins: { 'import': importPlugin } });}; - - -var flatConfigs = exports.flatConfigs = { - recommended: createFlatConfig( - require('../config/flat/recommended'), - 'recommended'), - - - errors: createFlatConfig(require('../config/flat/errors'), 'errors'), - warnings: createFlatConfig(require('../config/flat/warnings'), 'warnings'), - - // useful stuff for folks using various environments - react: require('../config/flat/react'), - 'react-native': configs['react-native'], - electron: configs.electron, - typescript: configs.typescript }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0IiwiaW1wb3J0UGx1Z2luIiwibWV0YSIsIm5hbWUiLCJ2ZXJzaW9uIiwiY3JlYXRlRmxhdENvbmZpZyIsImJhc2VDb25maWciLCJjb25maWdOYW1lIiwicGx1Z2lucyIsImZsYXRDb25maWdzIl0sIm1hcHBpbmdzIjoiNklBQUE7O0FBRU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQjs7O0FBZ0JQO0FBQ0EsSUFBTWMsZUFBZTtBQUNuQkMsUUFBTSxFQUFFQyxtQkFBRixFQUFRQyx5QkFBUixFQURhO0FBRW5CbEIsY0FGbUIsRUFBckI7OztBQUtBO0FBQ0EsSUFBTW1CLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQUNDLFVBQUQsRUFBYUMsVUFBYjtBQUNwQkQsWUFEb0I7QUFFdkJILDZCQUFnQkksVUFBaEIsQ0FGdUI7QUFHdkJDLGFBQVMsRUFBRSxVQUFRUCxZQUFWLEVBSGMsS0FBekI7OztBQU1PLElBQU1RLG9DQUFjO0FBQ3pCZCxlQUFhVTtBQUNYbEIsVUFBUSw0QkFBUixDQURXO0FBRVgsZUFGVyxDQURZOzs7QUFNekJTLFVBQVFTLGlCQUFpQmxCLFFBQVEsdUJBQVIsQ0FBakIsRUFBbUQsUUFBbkQsQ0FOaUI7QUFPekJVLFlBQVVRLGlCQUFpQmxCLFFBQVEseUJBQVIsQ0FBakIsRUFBcUQsVUFBckQsQ0FQZTs7QUFTekI7QUFDQVcsU0FBT1gsUUFBUSxzQkFBUixDQVZrQjtBQVd6QixrQkFBZ0JPLFFBQVEsY0FBUixDQVhTO0FBWXpCSyxZQUFVTCxRQUFRSyxRQVpPO0FBYXpCQyxjQUFZTixRQUFRTSxVQWJLLEVBQXBCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmFtZSwgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcblxuLy8gQmFzZSBQbHVnaW4gT2JqZWN0XG5jb25zdCBpbXBvcnRQbHVnaW4gPSB7XG4gIG1ldGE6IHsgbmFtZSwgdmVyc2lvbiB9LFxuICBydWxlcyxcbn07XG5cbi8vIENyZWF0ZSBmbGF0IGNvbmZpZ3MgKE9ubHkgb25lcyB0aGF0IGRlY2xhcmUgcGx1Z2lucyBhbmQgcGFyc2VyIG9wdGlvbnMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVnYWN5IGNvbmZpZylcbmNvbnN0IGNyZWF0ZUZsYXRDb25maWcgPSAoYmFzZUNvbmZpZywgY29uZmlnTmFtZSkgPT4gKHtcbiAgLi4uYmFzZUNvbmZpZyxcbiAgbmFtZTogYGltcG9ydC8ke2NvbmZpZ05hbWV9YCxcbiAgcGx1Z2luczogeyBpbXBvcnQ6IGltcG9ydFBsdWdpbiB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBmbGF0Q29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IGNyZWF0ZUZsYXRDb25maWcoXG4gICAgcmVxdWlyZSgnLi4vY29uZmlnL2ZsYXQvcmVjb21tZW5kZWQnKSxcbiAgICAncmVjb21tZW5kZWQnLFxuICApLFxuXG4gIGVycm9yczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC9lcnJvcnMnKSwgJ2Vycm9ycycpLFxuICB3YXJuaW5nczogY3JlYXRlRmxhdENvbmZpZyhyZXF1aXJlKCcuLi9jb25maWcvZmxhdC93YXJuaW5ncycpLCAnd2FybmluZ3MnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvZmxhdC9yZWFjdCcpLFxuICAncmVhY3QtbmF0aXZlJzogY29uZmlnc1sncmVhY3QtbmF0aXZlJ10sXG4gIGVsZWN0cm9uOiBjb25maWdzLmVsZWN0cm9uLFxuICB0eXBlc2NyaXB0OiBjb25maWdzLnR5cGVzY3JpcHQsXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJydWxlcyIsInJlcXVpcmUiLCJuYW1lZCIsIm5hbWVzcGFjZSIsImV4dGVuc2lvbnMiLCJmaXJzdCIsIm9yZGVyIiwidW5hbWJpZ3VvdXMiLCJjb25maWdzIiwicmVjb21tZW5kZWQiLCJlcnJvcnMiLCJ3YXJuaW5ncyIsInJlYWN0IiwiZWxlY3Ryb24iLCJ0eXBlc2NyaXB0Il0sIm1hcHBpbmdzIjoiMkVBQU8sSUFBTUEsd0JBQVE7QUFDbkIsbUJBQWlCQyxRQUFRLHVCQUFSLENBREU7QUFFbkJDLFNBQU9ELFFBQVEsZUFBUixDQUZZO0FBR25CLGFBQVNBLFFBQVEsaUJBQVIsQ0FIVTtBQUluQkUsYUFBV0YsUUFBUSxtQkFBUixDQUpRO0FBS25CLGtCQUFnQkEsUUFBUSxzQkFBUixDQUxHO0FBTW5CLFlBQVFBLFFBQVEsZ0JBQVIsQ0FOVztBQU9uQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0FQSDtBQVFuQkcsY0FBWUgsUUFBUSxvQkFBUixDQVJPO0FBU25CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVRKO0FBVW5CLHlCQUF1QkEsUUFBUSw2QkFBUixDQVZKO0FBV25CLG1CQUFpQkEsUUFBUSx1QkFBUixDQVhFO0FBWW5CLDBCQUF3QkEsUUFBUSw4QkFBUixDQVpMO0FBYW5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQWJYO0FBY25CLHFDQUFtQ0EsUUFBUSx5Q0FBUixDQWRoQjs7QUFnQm5CLG9CQUFrQkEsUUFBUSx3QkFBUixDQWhCQztBQWlCbkIsY0FBWUEsUUFBUSxrQkFBUixDQWpCTztBQWtCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBbEJEO0FBbUJuQix5QkFBdUJBLFFBQVEsNkJBQVIsQ0FuQko7QUFvQm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQXBCWDtBQXFCbkIsaUNBQStCQSxRQUFRLHFDQUFSLENBckJaO0FBc0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0F0QkY7O0FBd0JuQixpQkFBZUEsUUFBUSxxQkFBUixDQXhCSTtBQXlCbkIsWUFBVUEsUUFBUSxnQkFBUixDQXpCUztBQTBCbkIsbUJBQWlCQSxRQUFRLHVCQUFSLENBMUJFO0FBMkJuQkksU0FBT0osUUFBUSxlQUFSLENBM0JZO0FBNEJuQixzQkFBb0JBLFFBQVEsMEJBQVIsQ0E1QkQ7QUE2Qm5CLGdDQUE4QkEsUUFBUSxvQ0FBUixDQTdCWDtBQThCbkIsc0JBQW9CQSxRQUFRLDBCQUFSLENBOUJEO0FBK0JuQix1QkFBcUJBLFFBQVEsMkJBQVIsQ0EvQkY7QUFnQ25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQWhDVDtBQWlDbkJLLFNBQU9MLFFBQVEsZUFBUixDQWpDWTtBQWtDbkIsMEJBQXdCQSxRQUFRLDhCQUFSLENBbENMO0FBbUNuQiwyQkFBeUJBLFFBQVEsK0JBQVIsQ0FuQ047QUFvQ25CLHVCQUFxQkEsUUFBUSwyQkFBUixDQXBDRjtBQXFDbkIscUJBQW1CQSxRQUFRLHlCQUFSLENBckNBO0FBc0NuQix3QkFBc0JBLFFBQVEsNEJBQVIsQ0F0Q0g7QUF1Q25CTSxlQUFhTixRQUFRLHFCQUFSLENBdkNNO0FBd0NuQiwwQkFBd0JBLFFBQVEsOEJBQVIsQ0F4Q0w7QUF5Q25CLDhCQUE0QkEsUUFBUSxrQ0FBUixDQXpDVDtBQTBDbkIsOEJBQTRCQSxRQUFRLGtDQUFSLENBMUNUO0FBMkNuQiw4QkFBNEJBLFFBQVEsa0NBQVIsQ0EzQ1Q7QUE0Q25CLDJCQUF5QkEsUUFBUSwrQkFBUixDQTVDTjs7QUE4Q25CO0FBQ0Esa0JBQWdCQSxRQUFRLHNCQUFSLENBL0NHOztBQWlEbkI7QUFDQSxtQkFBaUJBLFFBQVEsdUJBQVIsQ0FsREU7O0FBb0RuQjtBQUNBLG1CQUFpQkEsUUFBUSx1QkFBUixDQXJERSxFQUFkOzs7QUF3REEsSUFBTU8sNEJBQVU7QUFDckJDLGVBQWFSLFFBQVEsdUJBQVIsQ0FEUTs7QUFHckJTLFVBQVFULFFBQVEsa0JBQVIsQ0FIYTtBQUlyQlUsWUFBVVYsUUFBUSxvQkFBUixDQUpXOztBQU1yQjtBQUNBLGFBQVdBLFFBQVEsbUJBQVIsQ0FQVTs7QUFTckI7QUFDQVcsU0FBT1gsUUFBUSxpQkFBUixDQVZjO0FBV3JCLGtCQUFnQkEsUUFBUSx3QkFBUixDQVhLO0FBWXJCWSxZQUFVWixRQUFRLG9CQUFSLENBWlc7QUFhckJhLGNBQVliLFFBQVEsc0JBQVIsQ0FiUyxFQUFoQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgJ25vLXVucmVzb2x2ZWQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXVucmVzb2x2ZWQnKSxcbiAgbmFtZWQ6IHJlcXVpcmUoJy4vcnVsZXMvbmFtZWQnKSxcbiAgZGVmYXVsdDogcmVxdWlyZSgnLi9ydWxlcy9kZWZhdWx0JyksXG4gIG5hbWVzcGFjZTogcmVxdWlyZSgnLi9ydWxlcy9uYW1lc3BhY2UnKSxcbiAgJ25vLW5hbWVzcGFjZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbmFtZXNwYWNlJyksXG4gIGV4cG9ydDogcmVxdWlyZSgnLi9ydWxlcy9leHBvcnQnKSxcbiAgJ25vLW11dGFibGUtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tbXV0YWJsZS1leHBvcnRzJyksXG4gIGV4dGVuc2lvbnM6IHJlcXVpcmUoJy4vcnVsZXMvZXh0ZW5zaW9ucycpLFxuICAnbm8tcmVzdHJpY3RlZC1wYXRocyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAnbm8taW50ZXJuYWwtbW9kdWxlcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8taW50ZXJuYWwtbW9kdWxlcycpLFxuICAnZ3JvdXAtZXhwb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvZ3JvdXAtZXhwb3J0cycpLFxuICAnbm8tcmVsYXRpdmUtcGFja2FnZXMnOiByZXF1aXJlKCcuL3J1bGVzL25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICduby1yZWxhdGl2ZS1wYXJlbnQtaW1wb3J0cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHMnKSxcbiAgJ2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiByZXF1aXJlKCcuL3J1bGVzL2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnKSxcblxuICAnbm8tc2VsZi1pbXBvcnQnOiByZXF1aXJlKCcuL3J1bGVzL25vLXNlbGYtaW1wb3J0JyksXG4gICduby1jeWNsZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY3ljbGUnKSxcbiAgJ25vLW5hbWVkLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQnOiByZXF1aXJlKCcuL3J1bGVzL25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgJ25vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyJzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLXVudXNlZC1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby11bnVzZWQtbW9kdWxlcycpLFxuXG4gICduby1jb21tb25qcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tY29tbW9uanMnKSxcbiAgJ25vLWFtZCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tYW1kJyksXG4gICduby1kdXBsaWNhdGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kdXBsaWNhdGVzJyksXG4gIGZpcnN0OiByZXF1aXJlKCcuL3J1bGVzL2ZpcnN0JyksXG4gICdtYXgtZGVwZW5kZW5jaWVzJzogcmVxdWlyZSgnLi9ydWxlcy9tYXgtZGVwZW5kZW5jaWVzJyksXG4gICduby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgJ25vLWFic29sdXRlLXBhdGgnOiByZXF1aXJlKCcuL3J1bGVzL25vLWFic29sdXRlLXBhdGgnKSxcbiAgJ25vLW5vZGVqcy1tb2R1bGVzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1ub2RlanMtbW9kdWxlcycpLFxuICAnbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogcmVxdWlyZSgnLi9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgb3JkZXI6IHJlcXVpcmUoJy4vcnVsZXMvb3JkZXInKSxcbiAgJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAncHJlZmVyLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQnKSxcbiAgJ25vLWRlZmF1bHQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZWZhdWx0LWV4cG9ydCcpLFxuICAnbm8tbmFtZWQtZXhwb3J0JzogcmVxdWlyZSgnLi9ydWxlcy9uby1uYW1lZC1leHBvcnQnKSxcbiAgJ25vLWR5bmFtaWMtcmVxdWlyZSc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZHluYW1pYy1yZXF1aXJlJyksXG4gIHVuYW1iaWd1b3VzOiByZXF1aXJlKCcuL3J1bGVzL3VuYW1iaWd1b3VzJyksXG4gICduby11bmFzc2lnbmVkLWltcG9ydCc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdW5hc3NpZ25lZC1pbXBvcnQnKSxcbiAgJ25vLXVzZWxlc3MtcGF0aC1zZWdtZW50cyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tdXNlbGVzcy1wYXRoLXNlZ21lbnRzJyksXG4gICdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnOiByZXF1aXJlKCcuL3J1bGVzL2R5bmFtaWMtaW1wb3J0LWNodW5rbmFtZScpLFxuICAnbm8taW1wb3J0LW1vZHVsZS1leHBvcnRzJzogcmVxdWlyZSgnLi9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMnKSxcbiAgJ25vLWVtcHR5LW5hbWVkLWJsb2Nrcyc6IHJlcXVpcmUoJy4vcnVsZXMvbm8tZW1wdHktbmFtZWQtYmxvY2tzJyksXG5cbiAgLy8gZXhwb3J0XG4gICdleHBvcnRzLWxhc3QnOiByZXF1aXJlKCcuL3J1bGVzL2V4cG9ydHMtbGFzdCcpLFxuXG4gIC8vIG1ldGFkYXRhLWJhc2VkXG4gICduby1kZXByZWNhdGVkJzogcmVxdWlyZSgnLi9ydWxlcy9uby1kZXByZWNhdGVkJyksXG5cbiAgLy8gZGVwcmVjYXRlZCBhbGlhc2VzIHRvIHJ1bGVzXG4gICdpbXBvcnRzLWZpcnN0JzogcmVxdWlyZSgnLi9ydWxlcy9pbXBvcnRzLWZpcnN0JyksXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlncyA9IHtcbiAgcmVjb21tZW5kZWQ6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWNvbW1lbmRlZCcpLFxuXG4gIGVycm9yczogcmVxdWlyZSgnLi4vY29uZmlnL2Vycm9ycycpLFxuICB3YXJuaW5nczogcmVxdWlyZSgnLi4vY29uZmlnL3dhcm5pbmdzJyksXG5cbiAgLy8gc2hoaGguLi4gd29yayBpbiBwcm9ncmVzcyBcInNlY3JldFwiIHJ1bGVzXG4gICdzdGFnZS0wJzogcmVxdWlyZSgnLi4vY29uZmlnL3N0YWdlLTAnKSxcblxuICAvLyB1c2VmdWwgc3R1ZmYgZm9yIGZvbGtzIHVzaW5nIHZhcmlvdXMgZW52aXJvbm1lbnRzXG4gIHJlYWN0OiByZXF1aXJlKCcuLi9jb25maWcvcmVhY3QnKSxcbiAgJ3JlYWN0LW5hdGl2ZSc6IHJlcXVpcmUoJy4uL2NvbmZpZy9yZWFjdC1uYXRpdmUnKSxcbiAgZWxlY3Ryb246IHJlcXVpcmUoJy4uL2NvbmZpZy9lbGVjdHJvbicpLFxuICB0eXBlc2NyaXB0OiByZXF1aXJlKCcuLi9jb25maWcvdHlwZXNjcmlwdCcpLFxufTtcbiJdfQ== \ 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 fbb4f6cbcb..f3e7d58d28 100644 --- a/node_modules/eslint-plugin-import/lib/rules/default.js +++ b/node_modules/eslint-plugin-import/lib/rules/default.js @@ -1,4 +1,4 @@ -'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} module.exports = { @@ -19,7 +19,7 @@ module.exports = { if (!defaultSpecifier) {return;} - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -37,4 +37,4 @@ module.exports = { ExportNamedDeclaration: checkDefault.bind(null, 'ExportDefaultSpecifier') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSwrQztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMscUJBQWlCQyxHQUFqQixDQUFxQlAsS0FBS1EsTUFBTCxDQUFZQyxLQUFqQyxFQUF3Q1osT0FBeEMsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBhIGRlZmF1bHQgZXhwb3J0IGlzIHByZXNlbnQsIGdpdmVuIGEgZGVmYXVsdCBpbXBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGZ1bmN0aW9uIGNoZWNrRGVmYXVsdChzcGVjaWZpZXJUeXBlLCBub2RlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzLmZpbmQoXG4gICAgICAgIChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSBzcGVjaWZpZXJUeXBlLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFkZWZhdWx0U3BlY2lmaWVyKSB7IHJldHVybjsgfVxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGltcG9ydHMuZ2V0KCdkZWZhdWx0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBtZXNzYWdlOiBgTm8gZGVmYXVsdCBleHBvcnQgZm91bmQgaW4gaW1wb3J0ZWQgbW9kdWxlIFwiJHtub2RlLnNvdXJjZS52YWx1ZX1cIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyksXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsInNwZWNpZmllclR5cGUiLCJub2RlIiwiZGVmYXVsdFNwZWNpZmllciIsInNwZWNpZmllcnMiLCJmaW5kIiwic3BlY2lmaWVyIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInVuZGVmaW5lZCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsImJpbmQiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiYUFBQSx5QztBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsNkRBRlQ7QUFHSkMsV0FBSywwQkFBUSxTQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDekMsWUFBTUMsbUJBQW1CRCxLQUFLRSxVQUFMLENBQWdCQyxJQUFoQjtBQUN2QixrQkFBQ0MsU0FBRCxVQUFlQSxVQUFVZCxJQUFWLEtBQW1CUyxhQUFsQyxFQUR1QixDQUF6Qjs7O0FBSUEsWUFBSSxDQUFDRSxnQkFBTCxFQUF1QixDQUFFLE9BQVM7QUFDbEMsWUFBTUksVUFBVUMsdUJBQVFDLEdBQVIsQ0FBWVAsS0FBS1EsTUFBTCxDQUFZQyxLQUF4QixFQUErQlosT0FBL0IsQ0FBaEI7QUFDQSxZQUFJUSxXQUFXLElBQWYsRUFBcUIsQ0FBRSxPQUFTOztBQUVoQyxZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMTywyQkFBbUJsQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FEZDtBQUVMQyxnQ0FBd0JwQixhQUFhbUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qix3QkFBeEIsQ0FGbkIsRUFBUDs7QUFJRCxLQW5DYyxtQkFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgYSBkZWZhdWx0IGV4cG9ydCBpcyBwcmVzZW50LCBnaXZlbiBhIGRlZmF1bHQgaW1wb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ2RlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQoc3BlY2lmaWVyVHlwZSwgbm9kZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICAoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gc3BlY2lmaWVyVHlwZSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghZGVmYXVsdFNwZWNpZmllcikgeyByZXR1cm47IH1cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRzLmdldCgnZGVmYXVsdCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IGRlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgbWVzc2FnZTogYE5vIGRlZmF1bHQgZXhwb3J0IGZvdW5kIGluIGltcG9ydGVkIG1vZHVsZSBcIiR7bm9kZS5zb3VyY2UudmFsdWV9XCIuYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInKSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ 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 b05d61d648..926dcf7e26 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 @@ -19,28 +19,22 @@ module.exports = { type: 'string' } }, - allowEmpty: { - type: 'boolean' }, - webpackChunknameFormat: { - type: 'string' } } }], + type: 'string' } } }] }, - hasSuggestions: true }, create: function () {function create(context) { var config = context.options[0];var _ref = - config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions,_ref$allowEmpty = _ref.allowEmpty,allowEmpty = _ref$allowEmpty === undefined ? false : _ref$allowEmpty;var _ref2 = + config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions;var _ref2 = config || {},_ref2$webpackChunknam = _ref2.webpackChunknameFormat,webpackChunknameFormat = _ref2$webpackChunknam === undefined ? '([0-9a-zA-Z-_/.]|\\[(request|index)\\])+' : _ref2$webpackChunknam; var paddedCommentRegex = /^ (\S[\s\S]+\S) $/; var commentStyleRegex = /^( ((webpackChunkName: .+)|((webpackPrefetch|webpackPreload): (true|false|-?[0-9]+))|(webpackIgnore: (true|false))|((webpackInclude|webpackExclude): \/.*\/)|(webpackMode: ["'](lazy|lazy-once|eager|weak)["'])|(webpackExports: (['"]\w+['"]|\[(['"]\w+['"], *)+(['"]\w+['"]*)\]))),?)+ $/; - var chunkSubstrFormat = 'webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; + var chunkSubstrFormat = ' webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? '; var chunkSubstrRegex = new RegExp(chunkSubstrFormat); - var eagerModeFormat = 'webpackMode: ["\']eager["\'],? '; - var eagerModeRegex = new RegExp(eagerModeFormat); function run(node, arg) { var sourceCode = context.getSourceCode(); @@ -48,7 +42,7 @@ module.exports = { sourceCode.getCommentsBefore(arg) // This method is available in ESLint >= 4. : sourceCode.getComments(arg).leading; // This method is deprecated in ESLint 7. - if ((!leadingComments || leadingComments.length === 0) && !allowEmpty) { + if (!leadingComments || leadingComments.length === 0) { context.report({ node: node, message: 'dynamic imports require a leading comment with the webpack chunkname' }); @@ -56,8 +50,7 @@ module.exports = { return; } - var isChunknamePresent = false; - var isEagerModePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + var isChunknamePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = leadingComments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var comment = _step.value; if (comment.type !== 'Block') { @@ -96,55 +89,12 @@ module.exports = { return; } - if (eagerModeRegex.test(comment.value)) { - isEagerModePresent = true; - } - if (chunkSubstrRegex.test(comment.value)) { isChunknamePresent = true; } }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} - if (isChunknamePresent && isEagerModePresent) { - context.report({ - node: node, - message: 'dynamic imports using eager mode do not need a webpackChunkName', - suggest: [ - { - desc: 'Remove webpackChunkName', - fix: function () {function fix(fixer) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { - for (var _iterator2 = leadingComments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var _comment = _step2.value; - if (chunkSubstrRegex.test(_comment.value)) { - var replacement = _comment.value.replace(chunkSubstrRegex, '').trim().replace(/,$/, ''); - if (replacement === '') { - return fixer.remove(_comment); - } else { - return fixer.replaceText(_comment, '/* ' + String(replacement) + ' */'); - } - } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} - }return fix;}() }, - - { - desc: 'Remove webpackMode', - fix: function () {function fix(fixer) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = leadingComments[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _comment2 = _step3.value; - if (eagerModeRegex.test(_comment2.value)) { - var replacement = _comment2.value.replace(eagerModeRegex, '').trim().replace(/,$/, ''); - if (replacement === '') { - return fixer.remove(_comment2); - } else { - return fixer.replaceText(_comment2, '/* ' + String(replacement) + ' */'); - } - } - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} - }return fix;}() }] }); - - - - } - - if (!isChunknamePresent && !allowEmpty && !isEagerModePresent) { + if (!isChunknamePresent) { context.report({ node: node, message: 'dynamic imports require a leading comment in the form /*' + @@ -167,4 +117,4 @@ module.exports = { }return CallExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsImFsbG93RW1wdHkiLCJ3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0IiwiaGFzU3VnZ2VzdGlvbnMiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwiZWFnZXJNb2RlRm9ybWF0IiwiZWFnZXJNb2RlUmVnZXgiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImdldFNvdXJjZUNvZGUiLCJsZWFkaW5nQ29tbWVudHMiLCJnZXRDb21tZW50c0JlZm9yZSIsImdldENvbW1lbnRzIiwibGVhZGluZyIsImxlbmd0aCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0NodW5rbmFtZVByZXNlbnQiLCJpc0VhZ2VyTW9kZVByZXNlbnQiLCJjb21tZW50IiwidGVzdCIsInZhbHVlIiwidm0iLCJydW5Jbk5ld0NvbnRleHQiLCJlcnJvciIsInN1Z2dlc3QiLCJkZXNjIiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlbWVudCIsInJlcGxhY2UiLCJ0cmltIiwicmVtb3ZlIiwicmVwbGFjZVRleHQiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FB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Y0FBdEIsRUFBc0MsRUFBdEMsRUFBMEMyQixJQUExQyxHQUFpREQsT0FBakQsQ0FBeUQsSUFBekQsRUFBK0QsRUFBL0QsQ0FBcEI7QUFDQSw0QkFBSUQsZ0JBQWdCLEVBQXBCLEVBQXdCO0FBQ3RCLGlDQUFPRCxNQUFNSSxNQUFOLENBQWFiLFNBQWIsQ0FBUDtBQUNELHlCQUZELE1BRU87QUFDTCxpQ0FBT1MsTUFBTUssV0FBTixDQUFrQmQsU0FBbEIsaUJBQWlDVSxXQUFqQyxVQUFQO0FBQ0Q7QUFDRjtBQUNGLHFCQVZRO0FBV1YsaUJBYkgsZ0JBaEJPLENBSEksRUFBZjs7OztBQW9DRDs7QUFFRCxZQUFJLENBQUNaLGtCQUFELElBQXVCLENBQUMxQixVQUF4QixJQUFzQyxDQUFDMkIsa0JBQTNDLEVBQStEO0FBQzdEdkIsa0JBQVFvQixNQUFSLENBQWU7QUFDYlQsc0JBRGE7QUFFYlU7QUFDNkRoQiw2QkFEN0QsT0FGYSxFQUFmOztBQUtEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMa0Msd0JBREsseUNBQ1k1QixJQURaLEVBQ2tCO0FBQ3JCRCxnQkFBSUMsSUFBSixFQUFVQSxLQUFLNkIsTUFBZjtBQUNELFdBSEk7O0FBS0xDLHNCQUxLLHVDQUtVOUIsSUFMVixFQUtnQjtBQUNuQixnQkFBSUEsS0FBSytCLE1BQUwsQ0FBWXhELElBQVosS0FBcUIsUUFBckIsSUFBaUNPLGdCQUFnQmtELE9BQWhCLENBQXdCaEMsS0FBSytCLE1BQUwsQ0FBWUUsSUFBcEMsSUFBNEMsQ0FBakYsRUFBb0Y7QUFDbEY7QUFDRDs7QUFFRGxDLGdCQUFJQyxJQUFKLEVBQVVBLEtBQUtrQyxTQUFMLENBQWUsQ0FBZixDQUFWO0FBQ0QsV0FYSSwyQkFBUDs7QUFhRCxLQXJLYyxtQkFBakIiLCJmaWxlIjoiZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZtIGZyb20gJ3ZtJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSBhIGxlYWRpbmcgY29tbWVudCB3aXRoIHRoZSB3ZWJwYWNrQ2h1bmtOYW1lIGZvciBkeW5hbWljIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZHluYW1pYy1pbXBvcnQtY2h1bmtuYW1lJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW1wb3J0RnVuY3Rpb25zOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWxsb3dFbXB0eToge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2VicGFja0NodW5rbmFtZUZvcm1hdDoge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1swXTtcbiAgICBjb25zdCB7IGltcG9ydEZ1bmN0aW9ucyA9IFtdLCBhbGxvd0VtcHR5ID0gZmFsc2UgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYHdlYnBhY2tDaHVua05hbWU6IFtcIiddJHt3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0fVtcIiddLD8gYDtcbiAgICBjb25zdCBjaHVua1N1YnN0clJlZ2V4ID0gbmV3IFJlZ0V4cChjaHVua1N1YnN0ckZvcm1hdCk7XG4gICAgY29uc3QgZWFnZXJNb2RlRm9ybWF0ID0gYHdlYnBhY2tNb2RlOiBbXCInXWVhZ2VyW1wiJ10sPyBgO1xuICAgIGNvbnN0IGVhZ2VyTW9kZVJlZ2V4ID0gbmV3IFJlZ0V4cChlYWdlck1vZGVGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICgoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSAmJiAhYWxsb3dFbXB0eSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgd2l0aCB0aGUgd2VicGFjayBjaHVua25hbWUnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXNDaHVua25hbWVQcmVzZW50ID0gZmFsc2U7XG4gICAgICBsZXQgaXNFYWdlck1vZGVQcmVzZW50ID0gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBsZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgaWYgKGNvbW1lbnQudHlwZSAhPT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSAvKiBmb28gKi8gc3R5bGUgY29tbWVudCwgbm90IGEgLy8gZm9vIGNvbW1lbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFkZGVkQ29tbWVudFJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgYmxvY2sgY29tbWVudCBwYWRkZWQgd2l0aCBzcGFjZXMgLSAvKiBmb28gKi9gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8ganVzdCBsaWtlIHdlYnBhY2sgaXRzZWxmIGRvZXNcbiAgICAgICAgICB2bS5ydW5Jbk5ld0NvbnRleHQoYChmdW5jdGlvbigpIHtyZXR1cm4geyR7Y29tbWVudC52YWx1ZX19fSkoKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBcIndlYnBhY2tcIiBjb21tZW50IHdpdGggdmFsaWQgc3ludGF4YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbW1lbnRTdHlsZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVhZ2VyTW9kZVJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0VhZ2VyTW9kZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNodW5rU3Vic3RyUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgIGlzQ2h1bmtuYW1lUHJlc2VudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2h1bmtuYW1lUHJlc2VudCAmJiBpc0VhZ2VyTW9kZVByZXNlbnQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyB1c2luZyBlYWdlciBtb2RlIGRvIG5vdCBuZWVkIGEgd2VicGFja0NodW5rTmFtZScsXG4gICAgICAgICAgc3VnZ2VzdDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkZXNjOiAnUmVtb3ZlIHdlYnBhY2tDaHVua05hbWUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2h1bmtTdWJzdHJSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gY29tbWVudC52YWx1ZS5yZXBsYWNlKGNodW5rU3Vic3RyUmVnZXgsICcnKS50cmltKCkucmVwbGFjZSgvLCQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4ZXIucmVtb3ZlKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChjb21tZW50LCBgLyogJHtyZXBsYWNlbWVudH0gKi9gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRlc2M6ICdSZW1vdmUgd2VicGFja01vZGUnLFxuICAgICAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWFnZXJNb2RlUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGNvbW1lbnQudmFsdWUucmVwbGFjZShlYWdlck1vZGVSZWdleCwgJycpLnRyaW0oKS5yZXBsYWNlKC8sJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZW1vdmUoY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlcGxhY2VUZXh0KGNvbW1lbnQsIGAvKiAke3JlcGxhY2VtZW50fSAqL2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0NodW5rbmFtZVByZXNlbnQgJiYgIWFsbG93RW1wdHkgJiYgIWlzRWFnZXJNb2RlUHJlc2VudCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IGluIHRoZSBmb3JtIC8qJHtjaHVua1N1YnN0ckZvcm1hdH0qL2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09ICdJbXBvcnQnICYmIGltcG9ydEZ1bmN0aW9ucy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpIDwgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bihub2RlLCBub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsIndlYnBhY2tDaHVua25hbWVGb3JtYXQiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwicnVuIiwibm9kZSIsImFyZyIsInNvdXJjZUNvZGUiLCJnZXRTb3VyY2VDb2RlIiwibGVhZGluZ0NvbW1lbnRzIiwiZ2V0Q29tbWVudHNCZWZvcmUiLCJnZXRDb21tZW50cyIsImxlYWRpbmciLCJsZW5ndGgiLCJyZXBvcnQiLCJtZXNzYWdlIiwiaXNDaHVua25hbWVQcmVzZW50IiwiY29tbWVudCIsInRlc3QiLCJ2YWx1ZSIsInZtIiwicnVuSW5OZXdDb250ZXh0IiwiZXJyb3IiLCJJbXBvcnRFeHByZXNzaW9uIiwic291cmNlIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJpbmRleE9mIiwibmFtZSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6ImFBQUEsd0I7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsMEVBRlQ7QUFHSkMsV0FBSywwQkFBUSwwQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsQ0FBQztBQUNQTCxZQUFNLFFBREM7QUFFUE0sa0JBQVk7QUFDVkMseUJBQWlCO0FBQ2ZQLGdCQUFNLE9BRFM7QUFF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cUIsTUFBTCxDQUFZRSxJQUFwQyxJQUE0QyxDQUFqRixFQUFvRjtBQUNsRjtBQUNEOztBQUVEeEIsZ0JBQUlDLElBQUosRUFBVUEsS0FBS3dCLFNBQUwsQ0FBZSxDQUFmLENBQVY7QUFDRCxXQVhJLDJCQUFQOztBQWFELEtBbkhjLG1CQUFqQiIsImZpbGUiOiJkeW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2tDaHVua05hbWUgZm9yIGR5bmFtaWMgaW1wb3J0cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbXBvcnRGdW5jdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzBdO1xuICAgIGNvbnN0IHsgaW1wb3J0RnVuY3Rpb25zID0gW10gfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnKFswLTlhLXpBLVotXy8uXXxcXFxcWyhyZXF1ZXN0fGluZGV4KVxcXFxdKSsnIH0gPSBjb25maWcgfHwge307XG5cbiAgICBjb25zdCBwYWRkZWRDb21tZW50UmVnZXggPSAvXiAoXFxTW1xcc1xcU10rXFxTKSAkLztcbiAgICBjb25zdCBjb21tZW50U3R5bGVSZWdleCA9IC9eKCAoKHdlYnBhY2tDaHVua05hbWU6IC4rKXwoKHdlYnBhY2tQcmVmZXRjaHx3ZWJwYWNrUHJlbG9hZCk6ICh0cnVlfGZhbHNlfC0/WzAtOV0rKSl8KHdlYnBhY2tJZ25vcmU6ICh0cnVlfGZhbHNlKSl8KCh3ZWJwYWNrSW5jbHVkZXx3ZWJwYWNrRXhjbHVkZSk6IFxcLy4qXFwvKXwod2VicGFja01vZGU6IFtcIiddKGxhenl8bGF6eS1vbmNlfGVhZ2VyfHdlYWspW1wiJ10pfCh3ZWJwYWNrRXhwb3J0czogKFsnXCJdXFx3K1snXCJdfFxcWyhbJ1wiXVxcdytbJ1wiXSwgKikrKFsnXCJdXFx3K1snXCJdKilcXF0pKSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYCB3ZWJwYWNrQ2h1bmtOYW1lOiBbXCInXSR7d2VicGFja0NodW5rbmFtZUZvcm1hdH1bXCInXSw/IGA7XG4gICAgY29uc3QgY2h1bmtTdWJzdHJSZWdleCA9IG5ldyBSZWdFeHAoY2h1bmtTdWJzdHJGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICghbGVhZGluZ0NvbW1lbnRzIHx8IGxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2sgY2h1bmtuYW1lJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2h1bmtuYW1lUHJlc2VudCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgIGlmIChjb21tZW50LnR5cGUgIT09ICdCbG9jaycpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgLyogZm9vICovIHN0eWxlIGNvbW1lbnQsIG5vdCBhIC8vIGZvbyBjb21tZW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhZGRlZENvbW1lbnRSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGJsb2NrIGNvbW1lbnQgcGFkZGVkIHdpdGggc3BhY2VzIC0gLyogZm9vICovYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGp1c3QgbGlrZSB3ZWJwYWNrIGl0c2VsZiBkb2VzXG4gICAgICAgICAgdm0ucnVuSW5OZXdDb250ZXh0KGAoZnVuY3Rpb24oKSB7cmV0dXJuIHske2NvbW1lbnQudmFsdWV9fX0pKClgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tZW50U3R5bGVSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIFwid2VicGFja1wiIGNvbW1lbnQgd2l0aCB2YWxpZCBzeW50YXhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua1N1YnN0clJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0NodW5rbmFtZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDaHVua25hbWVQcmVzZW50KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgaW4gdGhlIGZvcm0gLyoke2NodW5rU3Vic3RyRm9ybWF0fSovYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBydW4obm9kZSwgbm9kZS5zb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSAhPT0gJ0ltcG9ydCcgJiYgaW1wb3J0RnVuY3Rpb25zLmluZGV4T2Yobm9kZS5jYWxsZWUubmFtZSkgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuYXJndW1lbnRzWzBdKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 a155254c8e..97228ec5aa 100644 --- a/node_modules/eslint-plugin-import/lib/rules/export.js +++ b/node_modules/eslint-plugin-import/lib/rules/export.js @@ -1,5 +1,4 @@ -'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 _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); +'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 _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl); var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -187,7 +186,7 @@ module.exports = { if (node.declaration.declarations != null) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = node.declaration.declarations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var declaration = _step.value; - (0, _patternCapture2['default'])(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); + (0, _ExportMap.recursivePatternCapture)(declaration.id, function (v) {addNamed(v.name, v, parent, isTypeVariableDecl);}); }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } }return ExportNamedDeclaration;}(), @@ -198,7 +197,7 @@ module.exports = { // `export * as X from 'path'` does not conflict if (node.exported && node.exported.name) {return;} - var remoteExports = _builder2['default'].get(node.source.value, context); + var remoteExports = _ExportMap2['default'].get(node.source.value, context); if (remoteExports == null) {return;} if (remoteExports.errors.length) { @@ -248,4 +247,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiYW55IiwiZm9yRWFjaCIsInJlcG9ydCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiJxb0JBQUEsK0M7QUFDQSw2RDtBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFB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LHNCQUFNLElBQU4sQ0FEc0IsQ0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgZnJvbSAnLi4vZXhwb3J0TWFwL3BhdHRlcm5DYXB0dXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlbW90ZUV4cG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3RlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50KG5vZGUpO1xuXG4gICAgICAgIGxldCBhbnkgPSBmYWxzZTtcbiAgICAgICAgcmVtb3RlRXhwb3J0cy5mb3JFYWNoKCh2LCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgYW55ID0gdHJ1ZTsgLy8gcG9vciBtYW4ncyBmaWx0ZXJcbiAgICAgICAgICAgIGFkZE5hbWVkKG5hbWUsIG5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFueSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbm9kZS5zb3VyY2UsXG4gICAgICAgICAgICBgTm8gbmFtZWQgZXhwb3J0cyBmb3VuZCBpbiBtb2R1bGUgJyR7bm9kZS5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIG5hbWVkXSBvZiBuYW1lc3BhY2UpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBub2Rlc10gb2YgbmFtZWQpIHtcbiAgICAgICAgICAgIGlmIChub2Rlcy5zaXplIDw9IDEpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgaWYgKGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB8fCBpc1R5cGVzY3JpcHROYW1lc3BhY2VNZXJnaW5nKG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAnTXVsdGlwbGUgZGVmYXVsdCBleHBvcnRzLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgIGBNdWx0aXBsZSBleHBvcnRzIG9mIG5hbWUgJyR7bmFtZS5yZXBsYWNlKHRzVHlwZVByZWZpeCwgJycpfScuYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwibm9kZXNBcnIiLCJBcnJheSIsImZyb20iLCJpZGVudHMiLCJub2RlIiwiZGVjbGFyYXRpb24iLCJ0eXBlIiwiaWQiLCJuYW1lIiwiU2V0Iiwic2l6ZSIsImxlbmd0aCIsInR5cGVzIiwibWFwIiwicGFyZW50IiwiaGFzIiwiaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyIsIm5vTmFtZXNwYWNlTm9kZXMiLCJmaWx0ZXIiLCJzaG91bGRTa2lwVHlwZXNjcmlwdE5hbWVzcGFjZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJpc1R5cGUiLCJzZXQiLCJuYW1lZCIsImdldCIsImtleSIsImFkZCIsImdldFBhcmVudCIsIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsIkV4cG9ydFNwZWNpZmllciIsImV4cG9ydGVkIiwidmFsdWUiLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImRlY2xhcmF0aW9ucyIsInYiLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJlcnJvcnMiLCJyZXBvcnRFcnJvcnMiLCJhbnkiLCJmb3JFYWNoIiwicmVwb3J0IiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6InFvQkFBQSx5QztBQUNBLHFDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7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Q0FDVjtBQUNadkIseUJBQVN4QixJQUFULEVBQWVKLElBQWYsRUFBcUJVLE1BQXJCO0FBQ0Q7QUFDRixhQUxEOztBQU9BLGdCQUFJLENBQUN5QyxHQUFMLEVBQVU7QUFDUjFCLHNCQUFRNEIsTUFBUjtBQUNFckQsbUJBQUs4QyxNQURQO0FBRXVDOUMsbUJBQUs4QyxNQUFMLENBQVlQLEtBRm5EOztBQUlEO0FBQ0YsV0FwRUk7O0FBc0VMLHNCQXRFSyxzQ0FzRVk7QUFDZixvQ0FBd0JiLFNBQXhCLG1JQUFtQyxpRUFBckJLLEtBQXFCO0FBQ2pDLHdDQUE0QkEsS0FBNUIsbUlBQW1DLG1FQUF2QjNCLElBQXVCLGdCQUFqQlQsS0FBaUI7QUFDakMsd0JBQUlBLE1BQU1XLElBQU4sSUFBYyxDQUFsQixFQUFxQixDQUFFLFNBQVc7O0FBRWxDLHdCQUFJWiw4QkFBOEJDLEtBQTlCLEtBQXdDaUIsNkJBQTZCakIsS0FBN0IsQ0FBNUMsRUFBaUYsQ0FBRSxTQUFXLENBSDdEOztBQUtqQyw0Q0FBbUJBLEtBQW5CLG1JQUEwQixLQUFmSyxJQUFlO0FBQ3hCLDRCQUFJZSw4QkFBOEJmLElBQTlCLEVBQW9DTCxLQUFwQyxDQUFKLEVBQWdELENBQUUsU0FBVzs7QUFFN0QsNEJBQUlTLFNBQVMsU0FBYixFQUF3QjtBQUN0QnFCLGtDQUFRNEIsTUFBUixDQUFlckQsSUFBZixFQUFxQiwyQkFBckI7QUFDRCx5QkFGRCxNQUVPO0FBQ0x5QixrQ0FBUTRCLE1BQVI7QUFDRXJELDhCQURGO0FBRStCSSwrQkFBS2tELE9BQUwsQ0FBYTdELFlBQWIsRUFBMkIsRUFBM0IsQ0FGL0I7O0FBSUQ7QUFDRix1QkFoQmdDO0FBaUJsQyxtQkFsQmdDO0FBbUJsQyxlQXBCYztBQXFCaEIsV0EzRkksd0JBQVA7O0FBNkZELEtBdEljLG1CQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwLCB7IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlIH0gZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IG5vZGVzQXJyID0gQXJyYXkuZnJvbShub2Rlcyk7XG5cbiAgY29uc3QgaWRlbnRzID0gZmxhdE1hcChcbiAgICBub2Rlc0FycixcbiAgICAobm9kZSkgPT4gbm9kZS5kZWNsYXJhdGlvbiAmJiAoXG4gICAgICBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0RlY2xhcmVGdW5jdGlvbicgLy8gZXNsaW50IDYrXG4gICAgICB8fCBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdUU0VtcHR5Qm9keUZ1bmN0aW9uRGVjbGFyYXRpb24nIC8vIGVzbGludCA0LTVcbiAgICApXG4gICAgICA/IG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZVxuICAgICAgOiBbXSxcbiAgKTtcbiAgaWYgKG5ldyBTZXQoaWRlbnRzKS5zaXplICE9PSBpZGVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQobm9kZXNBcnIubWFwKChub2RlKSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIGlmICghdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlcy5zaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGV0ZWN0IG1lcmdpbmcgTmFtZXNwYWNlcyB3aXRoIENsYXNzZXMsIEZ1bmN0aW9ucywgb3IgRW51bXMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U2V0PE9iamVjdD59IG5vZGVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2RlcywgKG5vZGUpID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgY29uc3Qgbm9OYW1lc3BhY2VOb2RlcyA9IEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSAhPT0gJ1RTTW9kdWxlRGVjbGFyYXRpb24nKTtcblxuICByZXR1cm4gdHlwZXMuaGFzKCdUU01vZHVsZURlY2xhcmF0aW9uJylcbiAgICAmJiAoXG4gICAgICB0eXBlcy5zaXplID09PSAxXG4gICAgICAvLyBNZXJnaW5nIHdpdGggZnVuY3Rpb25zXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAyICYmICh0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB8fCB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykpXG4gICAgICB8fCB0eXBlcy5zaXplID09PSAzICYmIHR5cGVzLmhhcygnRnVuY3Rpb25EZWNsYXJhdGlvbicpICYmIHR5cGVzLmhhcygnVFNEZWNsYXJlRnVuY3Rpb24nKVxuICAgICAgLy8gTWVyZ2luZyB3aXRoIGNsYXNzZXMgb3IgZW51bXNcbiAgICAgIHx8IHR5cGVzLnNpemUgPT09IDIgJiYgKHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpIHx8IHR5cGVzLmhhcygnVFNFbnVtRGVjbGFyYXRpb24nKSkgJiYgbm9OYW1lc3BhY2VOb2Rlcy5sZW5ndGggPT09IDFcbiAgICApO1xufVxuXG4vKipcbiAqIERldGVjdCBpZiBhIHR5cGVzY3JpcHQgbmFtZXNwYWNlIG5vZGUgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIG11bHRpcGxlIGV4cG9ydDpcbiAqIGBgYHRzXG4gKiBleHBvcnQgY2xhc3MgRm9vIHsgfVxuICogZXhwb3J0IGZ1bmN0aW9uIEZvbygpO1xuICogZXhwb3J0IG5hbWVzcGFjZSBGb28geyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBUeXBlc2NyaXB0TmFtZXNwYWNlKG5vZGUsIG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCAobm9kZSkgPT4gbm9kZS5wYXJlbnQudHlwZSkpO1xuXG4gIHJldHVybiAhaXNUeXBlc2NyaXB0TmFtZXNwYWNlTWVyZ2luZyhub2RlcylcbiAgICAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVEZWNsYXJhdGlvbidcbiAgICAmJiAoXG4gICAgICB0eXBlcy5oYXMoJ1RTRW51bURlY2xhcmF0aW9uJylcbiAgICAgIHx8IHR5cGVzLmhhcygnQ2xhc3NEZWNsYXJhdGlvbicpXG4gICAgICB8fCB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKVxuICAgICAgfHwgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGFueSBpbnZhbGlkIGV4cG9ydHMsIGkuZS4gcmUtZXhwb3J0IG9mIHRoZSBzYW1lIG5hbWUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gbmV3IE1hcChbW3Jvb3RQcm9ncmFtLCBuZXcgTWFwKCldXSk7XG5cbiAgICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQsIGlzVHlwZSkge1xuICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgbmFtZXNwYWNlLnNldChwYXJlbnQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lZCA9IG5hbWVzcGFjZS5nZXQocGFyZW50KTtcblxuICAgICAgY29uc3Qga2V5ID0gaXNUeXBlID8gYCR7dHNUeXBlUHJlZml4fSR7bmFtZX1gIDogbmFtZTtcbiAgICAgIGxldCBub2RlcyA9IG5hbWVkLmdldChrZXkpO1xuXG4gICAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgICBub2RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbmFtZWQuc2V0KGtleSwgbm9kZXMpO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlID09PSAnVFNNb2R1bGVCbG9jaycpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBpbiBjYXNlIHNvbWVob3cgYSBub24tdHMgbmFtZXNwYWNlIGV4cG9ydCBkZWNsYXJhdGlvbiBpc24ndCBkaXJlY3RseVxuICAgICAgLy8gcGFyZW50ZWQgdG8gdGhlIHJvb3QgUHJvZ3JhbSBub2RlXG4gICAgICByZXR1cm4gcm9vdFByb2dyYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGFkZE5hbWVkKFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSB8fCBub2RlLmV4cG9ydGVkLnZhbHVlLFxuICAgICAgICAgIG5vZGUuZXhwb3J0ZWQsXG4gICAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3Igb2xkIFR5cGVTY3JpcHQgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgaXNUeXBlVmFyaWFibGVEZWNsID0gbm9kZS5kZWNsYXJhdGlvbi5raW5kID09PSAndHlwZSc7XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChpbmNsdWRlcyhbXG4gICAgICAgICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicsXG4gICAgICAgICAgXSwgbm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGRlY2xhcmF0aW9uLmlkLCAodikgPT4geyBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcC5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChyZW1vdGVFeHBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICByZW1vdGVFeHBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRQYXJlbnQobm9kZSk7XG5cbiAgICAgICAgbGV0IGFueSA9IGZhbHNlO1xuICAgICAgICByZW1vdGVFeHBvcnRzLmZvckVhY2goKHYsIG5hbWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBhbnkgPSB0cnVlOyAvLyBwb29yIG1hbidzIGZpbHRlclxuICAgICAgICAgICAgYWRkTmFtZWQobmFtZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghYW55KSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLnNvdXJjZSxcbiAgICAgICAgICAgIGBObyBuYW1lZCBleHBvcnRzIGZvdW5kIGluIG1vZHVsZSAnJHtub2RlLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgbmFtZWRdIG9mIG5hbWVzcGFjZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG5vZGVzXSBvZiBuYW1lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGVzLnNpemUgPD0gMSkgeyBjb250aW51ZTsgfVxuXG4gICAgICAgICAgICBpZiAoaXNUeXBlc2NyaXB0RnVuY3Rpb25PdmVybG9hZHMobm9kZXMpIHx8IGlzVHlwZXNjcmlwdE5hbWVzcGFjZU1lcmdpbmcobm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBpZiAoc2hvdWxkU2tpcFR5cGVzY3JpcHROYW1lc3BhY2Uobm9kZSwgbm9kZXMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICdNdWx0aXBsZSBkZWZhdWx0IGV4cG9ydHMuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgYE11bHRpcGxlIGV4cG9ydHMgb2YgbmFtZSAnJHtuYW1lLnJlcGxhY2UodHNUeXBlUHJlZml4LCAnJyl9Jy5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 f71a966db8..96d9fd8493 100644 --- a/node_modules/eslint-plugin-import/lib/rules/named.js +++ b/node_modules/eslint-plugin-import/lib/rules/named.js @@ -1,5 +1,5 @@ '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 path = _interopRequireWildcard(_path); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}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;}} module.exports = { @@ -41,7 +41,7 @@ module.exports = { return; // no named imports/exports } - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null || imports.parseGoal === 'ambiguous') { return; } @@ -93,7 +93,7 @@ module.exports = { var call = node.init;var _call$arguments = _slicedToArray( call.arguments, 1),source = _call$arguments[0]; var variableImports = node.id.properties; - var variableExports = _builder2['default'].get(source.value, context); + var variableExports = _ExportMap2['default'].get(source.value, context); if ( // return if it's not a commonjs require statement @@ -140,4 +140,4 @@ module.exports = { VariableDeclarator: checkRequire }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLCtDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FBQ047QUFDRUwsWUFBTSxRQURSO0FBRUVNLGtCQUFZO0FBQ1ZDLGtCQUFVO0FBQ1JQLGdCQUFNLFNBREUsRUFEQSxFQUZkOzs7QUFPRVEsNEJBQXNCLEtBUHhCLEVBRE0sQ0FQSixFQURTOzs7OztBQXFCZkMsUUFyQmUsK0JBcUJSQyxPQXJCUSxFQXFCQztBQUNkLFVBQU1DLFVBQVVELFFBQVFDLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7O0FBRUEsZUFBU0MsZUFBVCxDQUF5QkMsR0FBekIsRUFBOEJiLElBQTlCLEVBQW9DYyxJQUFwQyxFQUEwQztBQUN4QztBQUNBO0FBQ0VBLGFBQUtDLE1BQUwsSUFBZSxJQUFmO0FBQ0dELGFBQUtFLFVBQUwsS0FBb0IsTUFEdkI7QUFFR0YsYUFBS0UsVUFBTCxLQUFvQixRQUZ2QjtBQUdHRixhQUFLRyxVQUFMLEtBQW9CLE1BSnpCO0FBS0U7QUFDQTtBQUNEOztBQUVELFlBQUksQ0FBQ0gsS0FBS0ksVUFBTCxDQUFnQkMsSUFBaEIsQ0FBcUIsVUFBQ0MsRUFBRCxVQUFRQSxHQUFHcEIsSUFBSCxLQUFZQSxJQUFwQixFQUFyQixDQUFMLEVBQXFEO0FBQ25ELGlCQURtRCxDQUMzQztBQUNUOztBQUVELFlBQU1xQixVQUFVQyxxQkFBaUJDLEdBQWpCLENBQXFCVCxLQUFLQyxNQUFMLENBQVlTLEtBQWpDLEVBQXdDZCxPQUF4QyxDQUFoQjtBQUNBLFlBQUlXLFdBQVcsSUFBWCxJQUFtQkEsUUFBUUksU0FBUixLQUFzQixXQUE3QyxFQUEwRDtBQUN4RDtBQUNEOztBQUVELFlBQUlKLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCbEIsT0FBckIsRUFBOEJJLElBQTlCO0FBQ0E7QUFDRDs7QUFFREEsYUFBS0ksVUFBTCxDQUFnQlcsT0FBaEIsQ0FBd0IsVUFBVVQsRUFBVixFQUFjO0FBQ3BDO0FBQ0VBLGFBQUdwQixJQUFILEtBQVlBO0FBQ1o7QUFEQSxhQUVHb0IsR0FBR0osVUFBSCxLQUFrQixNQUZyQixJQUUrQkksR0FBR0osVUFBSCxLQUFrQixRQUhuRDtBQUlFO0FBQ0E7QUFDRDs7QUFFRCxjQUFNYyxPQUFPVixHQUFHUCxHQUFILEVBQVFpQixJQUFSLElBQWdCVixHQUFHUCxHQUFILEVBQVFXLEtBQXJDOztBQUVBLGNBQU1PLGFBQWFWLFFBQVFXLE9BQVIsQ0FBZ0JGLElBQWhCLENBQW5COztBQUVBLGNBQUksQ0FBQ0MsV0FBV0UsS0FBaEIsRUFBdUI7QUFDckIsZ0JBQUlGLFdBQVduQyxJQUFYLENBQWdCK0IsTUFBaEIsR0FBeUIsQ0FBN0IsRUFBZ0M7QUFDOUIsa0JBQU1PLFdBQVdILFdBQVduQyxJQUFYO0FBQ2R1QyxpQkFEYyxDQUNWLFVBQUNDLENBQUQsVUFBT3hDLEtBQUt5QyxRQUFMLENBQWN6QyxLQUFLMEMsT0FBTCxDQUFhNUIsUUFBUTZCLG1CQUFSLEdBQThCN0IsUUFBUTZCLG1CQUFSLEVBQTlCLEdBQThEN0IsUUFBUThCLFdBQVIsRUFBM0UsQ0FBZCxFQUFpSEosRUFBRXhDLElBQW5ILENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFILENBQWYsU0FBMkJpQixJQUEzQiwrQkFBaURJLFFBQWpEO0FBQ0QsYUFORCxNQU1PO0FBQ0x4QixzQkFBUWdDLE1BQVIsQ0FBZXRCLEdBQUdQLEdBQUgsQ0FBZixTQUEyQmlCLElBQTNCLGdDQUFpRGhCLEtBQUtDLE1BQUwsQ0FBWVMsS0FBN0Q7QUFDRDtBQUNGO0FBQ0YsU0F4QkQ7QUF5QkQ7O0FBRUQsZUFBU21CLFlBQVQsQ0FBc0I3QixJQUF0QixFQUE0QjtBQUMxQjtBQUNFLFNBQUNILFFBQVFKLFFBQVQ7QUFDR08sYUFBS2QsSUFBTCxLQUFjO0FBQ2pCO0FBRkEsV0FHRyxDQUFDYyxLQUFLOEIsRUFIVCxJQUdlOUIsS0FBSzhCLEVBQUwsQ0FBUTVDLElBQVIsS0FBaUIsZUFIaEMsSUFHbURjLEtBQUs4QixFQUFMLENBQVF0QyxVQUFSLENBQW1CcUIsTUFBbkIsS0FBOEI7QUFDakY7QUFKQSxXQUtHLENBQUNiLEtBQUsrQixJQUxULElBS2lCL0IsS0FBSytCLElBQUwsQ0FBVTdDLElBQVYsS0FBbUIsZ0JBTnRDO0FBT0U7QUFDQTtBQUNEOztBQUVELFlBQU04QyxPQUFPaEMsS0FBSytCLElBQWxCLENBWjBCO0FBYVRDLGFBQUtDLFNBYkksS0FhbkJoQyxNQWJtQjtBQWMxQixZQUFNaUMsa0JBQWtCbEMsS0FBSzhCLEVBQUwsQ0FBUXRDLFVBQWhDO0FBQ0EsWUFBTTJDLGtCQUFrQjNCLHFCQUFpQkMsR0FBakIsQ0FBcUJSLE9BQU9TLEtBQTVCLEVBQW1DZCxPQUFuQyxDQUF4Qjs7QUFFQTtBQUNFO0FBQ0FvQyxhQUFLSSxNQUFMLENBQVlsRCxJQUFaLEtBQXFCLFlBQXJCLElBQXFDOEMsS0FBS0ksTUFBTCxDQUFZcEIsSUFBWixLQUFxQixTQUExRCxJQUF1RWdCLEtBQUtDLFNBQUwsQ0FBZXBCLE1BQWYsS0FBMEI7QUFDakc7QUFEQSxXQUVHWixPQUFPZixJQUFQLEtBQWdCLFNBRm5CO0FBR0dpRCwyQkFBbUIsSUFIdEI7QUFJR0Esd0JBQWdCeEIsU0FBaEIsS0FBOEIsV0FObkM7QUFPRTtBQUNBO0FBQ0Q7O0FBRUQsWUFBSXdCLGdCQUFnQnZCLE1BQWhCLENBQXVCQyxNQUEzQixFQUFtQztBQUNqQ3NCLDBCQUFnQnJCLFlBQWhCLENBQTZCbEIsT0FBN0IsRUFBc0NJLElBQXRDO0FBQ0E7QUFDRDs7QUFFRGtDLHdCQUFnQm5CLE9BQWhCLENBQXdCLFVBQVVULEVBQVYsRUFBYztBQUNwQyxjQUFJQSxHQUFHcEIsSUFBSCxLQUFZLFVBQVosSUFBMEIsQ0FBQ29CLEdBQUdQLEdBQTlCLElBQXFDTyxHQUFHUCxHQUFILENBQU9iLElBQVAsS0FBZ0IsWUFBekQsRUFBdUU7QUFDckU7QUFDRDs7QUFFRCxjQUFNK0IsYUFBYWtCLGdCQUFnQmpCLE9BQWhCLENBQXdCWixHQUFHUCxHQUFILENBQU9pQixJQUEvQixDQUFuQjs7QUFFQSxjQUFJLENBQUNDLFdBQVdFLEtBQWhCLEVBQXVCO0FBQ3JCLGdCQUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIG5hbWVkIGltcG9ydHMgY29ycmVzcG9uZCB0byBhIG5hbWVkIGV4cG9ydCBpbiB0aGUgcmVtb3RlIGZpbGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvbW1vbmpzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhrZXksIHR5cGUsIG5vZGUpIHtcbiAgICAgIC8vIGlnbm9yZSBsb2NhbCBleHBvcnRzIGFuZCB0eXBlIGltcG9ydHMvZXhwb3J0c1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnNvdXJjZSA9PSBudWxsXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgfHwgbm9kZS5leHBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbm9kZS5zcGVjaWZpZXJzLnNvbWUoKGltKSA9PiBpbS50eXBlID09PSB0eXBlKSkge1xuICAgICAgICByZXR1cm47IC8vIG5vIG5hbWVkIGltcG9ydHMvZXhwb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCB8fCBpbXBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW0udHlwZSAhPT0gdHlwZVxuICAgICAgICAgIC8vIGlnbm9yZSB0eXBlIGltcG9ydHNcbiAgICAgICAgICB8fCBpbS5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGltW2tleV0ubmFtZSB8fCBpbVtrZXldLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSBpbXBvcnRzLmhhc0RlZXAobmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSksIGkucGF0aCkpXG4gICAgICAgICAgICAgIC5qb2luKCcgLT4gJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCB2aWEgJHtkZWVwUGF0aH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1ba2V5XSwgYCR7bmFtZX0gbm90IGZvdW5kIGluICcke25vZGUuc291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrUmVxdWlyZShub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFvcHRpb25zLmNvbW1vbmpzXG4gICAgICAgIHx8IG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAgICAgLy8gcmV0dXJuIGlmIGl0J3Mgbm90IGFuIG9iamVjdCBkZXN0cnVjdHVyZSBvciBpdCdzIGFuIGVtcHR5IG9iamVjdCBkZXN0cnVjdHVyZVxuICAgICAgICB8fCAhbm9kZS5pZCB8fCBub2RlLmlkLnR5cGUgIT09ICdPYmplY3RQYXR0ZXJuJyB8fCBub2RlLmlkLnByb3BlcnRpZXMubGVuZ3RoID09PSAwXG4gICAgICAgIC8vIHJldHVybiBpZiB0aGVyZSBpcyBubyBjYWxsIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAgICAgfHwgIW5vZGUuaW5pdCB8fCBub2RlLmluaXQudHlwZSAhPT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbCA9IG5vZGUuaW5pdDtcbiAgICAgIGNvbnN0IFtzb3VyY2VdID0gY2FsbC5hcmd1bWVudHM7XG4gICAgICBjb25zdCB2YXJpYWJsZUltcG9ydHMgPSBub2RlLmlkLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCB2YXJpYWJsZUV4cG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChzb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIGNvbW1vbmpzIHJlcXVpcmUgc3RhdGVtZW50XG4gICAgICAgIGNhbGwuY2FsbGVlLnR5cGUgIT09ICdJZGVudGlmaWVyJyB8fCBjYWxsLmNhbGxlZS5uYW1lICE9PSAncmVxdWlyZScgfHwgY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhIHN0cmluZyBzb3VyY2VcbiAgICAgICAgfHwgc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJ1xuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMgPT0gbnVsbFxuICAgICAgICB8fCB2YXJpYWJsZUV4cG9ydHMucGFyc2VHb2FsID09PSAnYW1iaWd1b3VzJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhcmlhYmxlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHZhcmlhYmxlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyaWFibGVJbXBvcnRzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgIGlmIChpbS50eXBlICE9PSAnUHJvcGVydHknIHx8ICFpbS5rZXkgfHwgaW0ua2V5LnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSB2YXJpYWJsZUV4cG9ydHMuaGFzRGVlcChpbS5rZXkubmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltLmtleSwgYCR7aW0ua2V5Lm5hbWV9IG5vdCBmb3VuZCBpbiAnJHtzb3VyY2UudmFsdWV9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnaW1wb3J0ZWQnLCAnSW1wb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGNoZWNrU3BlY2lmaWVycy5iaW5kKG51bGwsICdsb2NhbCcsICdFeHBvcnRTcGVjaWZpZXInKSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBjaGVja1JlcXVpcmUsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29tbW9uanMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTcGVjaWZpZXJzIiwia2V5Iiwibm9kZSIsInNvdXJjZSIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsInNvbWUiLCJpbSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJwYXJzZUdvYWwiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJmb3JFYWNoIiwibmFtZSIsImRlZXBMb29rdXAiLCJoYXNEZWVwIiwiZm91bmQiLCJkZWVwUGF0aCIsIm1hcCIsImkiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJqb2luIiwicmVwb3J0IiwiY2hlY2tSZXF1aXJlIiwiaWQiLCJpbml0IiwiY2FsbCIsImFyZ3VtZW50cyIsInZhcmlhYmxlSW1wb3J0cyIsInZhcmlhYmxlRXhwb3J0cyIsImNhbGxlZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiYmluZCIsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iLCJWYXJpYWJsZURlY2xhcmF0b3IiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEIsSUFBWUEsSTtBQUNaLHlDO0FBQ0EscUM7O0FBRUFDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxpQkFETjtBQUVKQyxtQkFBYSx1RUFGVDtBQUdKQyxXQUFLLDBCQUFRLE9BQVIsQ0FIRCxFQUZGOztBQU9KQyxZQUFRO0FBQ047QUFDRUws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QUFJRixXQUFXbkMsSUFBWCxDQUFnQitCLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGtCQUFNTyxXQUFXSCxXQUFXbkMsSUFBWDtBQUNkdUMsaUJBRGMsQ0FDVixVQUFDQyxDQUFELFVBQU94QyxLQUFLeUMsUUFBTCxDQUFjekMsS0FBSzBDLE9BQUwsQ0FBYTVCLFFBQVE4QixXQUFSLEVBQWIsQ0FBZCxFQUFtREosRUFBRXhDLElBQXJELENBQVAsRUFEVTtBQUVkNkMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBL0Isc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsK0JBQXVESSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMeEIsc0JBQVFnQyxNQUFSLENBQWV0QixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPaUIsSUFBakMsZ0NBQXVEZixPQUFPUyxLQUE5RDtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wyQiwyQkFBbUJ2QyxnQkFBZ0J3QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCekMsZ0JBQWdCd0MsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQXpJYyxtQkFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Vuc3VyZSBuYW1lZCBpbXBvcnRzIGNvcnJlc3BvbmQgdG8gYSBuYW1lZCBleHBvcnQgaW4gdGhlIHJlbW90ZSBmaWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25hbWVkJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21tb25qczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMoa2V5LCB0eXBlLCBub2RlKSB7XG4gICAgICAvLyBpZ25vcmUgbG9jYWwgZXhwb3J0cyBhbmQgdHlwZSBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5zb3VyY2UgPT0gbnVsbFxuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICB8fCBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUuc3BlY2lmaWVycy5zb21lKChpbSkgPT4gaW0udHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBubyBuYW1lZCBpbXBvcnRzL2V4cG9ydHNcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwgfHwgaW1wb3J0cy5wYXJzZUdvYWwgPT09ICdhbWJpZ3VvdXMnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGltLnR5cGUgIT09IHR5cGVcbiAgICAgICAgICAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8IGltLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBpbVtrZXldLm5hbWUgfHwgaW1ba2V5XS52YWx1ZTtcblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gaW1wb3J0cy5oYXNEZWVwKG5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbVtrZXldLCBgJHtuYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke25hbWV9IG5vdCBmb3VuZCBpbiAnJHtub2RlLnNvdXJjZS52YWx1ZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1JlcXVpcmUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9ucy5jb21tb25qc1xuICAgICAgICB8fCBub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhbiBvYmplY3QgZGVzdHJ1Y3R1cmUgb3IgaXQncyBhbiBlbXB0eSBvYmplY3QgZGVzdHJ1Y3R1cmVcbiAgICAgICAgfHwgIW5vZGUuaWQgfHwgbm9kZS5pZC50eXBlICE9PSAnT2JqZWN0UGF0dGVybicgfHwgbm9kZS5pZC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlcmUgaXMgbm8gY2FsbCBleHByZXNzaW9uIG9uIHRoZSByaWdodCBzaWRlXG4gICAgICAgIHx8ICFub2RlLmluaXQgfHwgbm9kZS5pbml0LnR5cGUgIT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGwgPSBub2RlLmluaXQ7XG4gICAgICBjb25zdCBbc291cmNlXSA9IGNhbGwuYXJndW1lbnRzO1xuICAgICAgY29uc3QgdmFyaWFibGVJbXBvcnRzID0gbm9kZS5pZC5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgdmFyaWFibGVFeHBvcnRzID0gRXhwb3J0cy5nZXQoc291cmNlLnZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKFxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBjb21tb25qcyByZXF1aXJlIHN0YXRlbWVudFxuICAgICAgICBjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBzdHJpbmcgc291cmNlXG4gICAgICAgIHx8IHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCdcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzID09IG51bGxcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzLnBhcnNlR29hbCA9PT0gJ2FtYmlndW91cydcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YXJpYWJsZUV4cG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB2YXJpYWJsZUV4cG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhcmlhYmxlSW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoaW0udHlwZSAhPT0gJ1Byb3BlcnR5JyB8fCAhaW0ua2V5IHx8IGltLmtleS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gdmFyaWFibGVFeHBvcnRzLmhhc0RlZXAoaW0ua2V5Lm5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRGaWxlbmFtZSgpKSwgaS5wYXRoKSlcbiAgICAgICAgICAgICAgLmpvaW4oJyAtPiAnKTtcblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW0ua2V5LCBgJHtpbS5rZXkubmFtZX0gbm90IGZvdW5kIHZpYSAke2RlZXBQYXRofWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgaW4gJyR7c291cmNlLnZhbHVlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogY2hlY2tTcGVjaWZpZXJzLmJpbmQobnVsbCwgJ2ltcG9ydGVkJywgJ0ltcG9ydFNwZWNpZmllcicpLFxuXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnbG9jYWwnLCAnRXhwb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogY2hlY2tSZXF1aXJlLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/rules/namespace.js b/node_modules/eslint-plugin-import/lib/rules/namespace.js index 56744fca80..574d89a60d 100644 --- a/node_modules/eslint-plugin-import/lib/rules/namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/namespace.js @@ -1,6 +1,5 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -9,7 +8,7 @@ function processBodyStatement(context, namespaces, declaration) { if (declaration.specifiers.length === 0) {return;} - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length > 0) { @@ -89,7 +88,7 @@ module.exports = { ExportNamespaceSpecifier: function () {function ExportNamespaceSpecifier(namespace) { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return null;} if (imports.errors.length) { @@ -123,7 +122,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { if (dereference.computed) { if (!allowComputed) { context.report( @@ -162,7 +161,7 @@ module.exports = { // DFS traverse child namespaces function testKey(pattern, namespace) {var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [init.name]; - if (!(namespace instanceof _exportMap2['default'])) {return;} + if (!(namespace instanceof _ExportMap2['default'])) {return;} if (pattern.type !== 'ObjectPattern') {return;}var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { @@ -216,4 +215,4 @@ module.exports = { }return JSXMemberExpression;}() }; }return namespaceRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiRXhwb3J0TWFwIiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EsK0M7QUFDQSx5QztBQUNBLHlEO0FBQ0EscUM7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLE9BQTlCLEVBQXVDQyxVQUF2QyxFQUFtREMsV0FBbkQsRUFBZ0U7QUFDOUQsTUFBSUEsWUFBWUMsSUFBWixLQUFxQixtQkFBekIsRUFBOEMsQ0FBRSxPQUFTOztBQUV6RCxNQUFJRCxZQUFZRSxVQUFaLENBQXVCQyxNQUF2QixLQUFrQyxDQUF0QyxFQUF5QyxDQUFFLE9BQVM7O0FBRXBELE1BQU1DLFVBQVVDLHFCQUFpQkMsR0FBakIsQ0FBcUJOLFlBQVlPLE1BQVosQ0FBbUJDLEtBQXhDLEVBQStDVixPQUEvQyxDQUFoQjtBQUNBLE1BQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQU8sSUFBUCxDQUFjOztBQUVyQyxNQUFJQSxRQUFRSyxNQUFSLENBQWVOLE1BQWYsR0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0JDLFlBQVFNLFlBQVIsQ0FBcUJaLE9BQXJCLEVBQThCRSxXQUE5QjtBQUNBO0FBQ0Q7O0FBRURBLGNBQVlFLFVBQVosQ0FBdUJTLE9BQXZCLENBQStCLFVBQUNDLFNBQUQsRUFBZTtBQUM1QyxZQUFRQSxVQUFVWCxJQUFsQjtBQUNFLFdBQUssMEJBQUw7QUFDRSxZQUFJLENBQUNHLFFBQVFTLElBQWIsRUFBbUI7QUFDakJmLGtCQUFRZ0IsTUFBUjtBQUNFRixtQkFERjtBQUV3Q1osc0JBQVlPLE1BQVosQ0FBbUJDLEtBRjNEOztBQUlEO0FBQ0RULG1CQUFXZ0IsR0FBWCxDQUFlSCxVQUFVSSxLQUFWLENBQWdCQyxJQUEvQixFQUFxQ2IsT0FBckM7QUFDQTtBQUNGLFdBQUssd0JBQUw7QUFDQSxXQUFLLGlCQUFMLENBQXdCO0FBQ3RCLGNBQU1jLE9BQU9kLFFBQVFFLEdBQVI7QUFDYjtBQUNFTSxvQkFBVU8sUUFBVixHQUFxQlAsVUFBVU8sUUFBVixDQUFtQkYsSUFBbkIsSUFBMkJMLFVBQVVPLFFBQVYsQ0FBbUJYLEtBQW5FLEdBQTJFLFNBRmhFLENBQWI7O0FBSUEsY0FBSSxDQUFDVSxJQUFELElBQVMsQ0FBQ0EsS0FBS0UsU0FBbkIsRUFBOEIsQ0FBRSxNQUFRO0FBQ3hDckIscUJBQVdnQixHQUFYLENBQWVILFVBQVVJLEtBQVYsQ0FBZ0JDLElBQS9CLEVBQXFDQyxLQUFLRSxTQUExQztBQUNBO0FBQ0Q7QUFDRCxjQXBCRjs7QUFzQkQsR0F2QkQ7QUF3QkQ7O0FBRURDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkosUUFBTTtBQUNKakIsVUFBTSxTQURGO0FBRUpzQixVQUFNO0FBQ0pDLGdCQUFVLGlCQUROO0FBRUpDLG1CQUFhLHNGQUZUO0FBR0pDLFdBQUssMEJBQVEsV0FBUixDQUhELEVBRkY7OztBQVFKQyxZQUFRO0FBQ047QUFDRTFCLFlBQU0sUUFEUjtBQUVFMkIsa0JBQVk7QUFDVkMsdUJBQWU7QUFDYkosdUJBQWEsMkZBREE7QUFFYnhCLGdCQUFNLFNBRk87QUFHYixxQkFBUyxLQUhJLEVBREwsRUFGZDs7O0FBU0U2Qiw0QkFBc0IsS0FUeEIsRUFETSxDQVJKLEVBRFM7Ozs7O0FBd0JmQyx1QkFBUSxTQUFTQyxhQUFULENBQXVCbEMsT0FBdkIsRUFBZ0M7QUFDdEM7QUFEc0M7O0FBSWxDQSxjQUFRbUMsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUpZLDJCQUdwQ0osYUFIb0MsQ0FHcENBLGFBSG9DLHNDQUdwQixLQUhvQjs7QUFNdEMsVUFBTTlCLGFBQWEsSUFBSW1DLEdBQUosRUFBbkI7O0FBRUEsZUFBU0MsV0FBVCxDQUFxQkMsSUFBckIsRUFBMkJDLFFBQTNCLEVBQXFDO0FBQ25DLDZCQUFXRCxLQUFLbkIsSUFBaEIsMEJBQXNDb0IsU0FBU2xDLE1BQVQsR0FBa0IsQ0FBbEIsR0FBc0IsU0FBdEIsR0FBa0MsRUFBeEUscUNBQWlHa0MsU0FBU0MsSUFBVCxDQUFjLEdBQWQsQ0FBakc7QUFDRDs7QUFFRCxhQUFPO0FBQ0w7QUFDQUMsZUFGSyx1Q0FFYSxLQUFSQyxJQUFRLFNBQVJBLElBQVE7QUFDaEJBLGlCQUFLN0IsT0FBTCxDQUFhLFVBQUM4QixDQUFELEVBQU8sQ0FBRTVDLHFCQUFxQkMsT0FBckIsRUFBOEJDLFVBQTlCLEVBQTBDMEMsQ0FBMUMsRUFBK0MsQ0FBckU7QUFDRCxXQUpJOztBQU1MO0FBQ0FDLGdDQVBLLGlEQU9vQnRCLFNBUHBCLEVBTytCO0FBQ2xDLGdCQUFNcEIsY0FBYyxvQ0FBa0JGLE9BQWxCLENBQXBCOztBQUVBLGdCQUFNTSxVQUFVQyxxQkFBaUJDLEdBQWpCLENBQXFCTixZQUFZTyxNQUFaLENBQW1CQyxLQUF4QyxFQUErQ1YsT0FBL0MsQ0FBaEI7QUFDQSxnQkFBSU0sV0FBVyxJQUFmLEVBQXFCLENBQUUsT0FBTyxJQUFQLENBQWM7O0FBRXJDLGdCQUFJQSxRQUFRSyxNQUFSLENBQWVOLE1BQW5CLEVBQTJCO0FBQ3pCQyxzQkFBUU0sWUFBUixDQUFxQlosT0FBckIsRUFBOEJFLFdBQTlCO0FBQ0E7QUFDRDs7QUFFRCxnQkFBSSxDQUFDSSxRQUFRUyxJQUFiLEVBQW1CO0FBQ2pCZixzQkFBUWdCLE1BQVI7QUFDRU0sdUJBREY7QUFFd0NwQiwwQkFBWU8sTUFBWixDQUFtQkMsS0FGM0Q7O0FBSUQ7QUFDRixXQXhCSTs7QUEwQkw7O0FBRUFtQyx3QkE1QksseUNBNEJZQyxXQTVCWixFQTRCeUI7QUFDNUIsZ0JBQUlBLFlBQVlDLE1BQVosQ0FBbUI1QyxJQUFuQixLQUE0QixZQUFoQyxFQUE4QyxDQUFFLE9BQVM7QUFDekQsZ0JBQUksQ0FBQ0YsV0FBVytDLEdBQVgsQ0FBZUYsWUFBWUMsTUFBWixDQUFtQjVCLElBQWxDLENBQUwsRUFBOEMsQ0FBRSxPQUFTO0FBQ3pELGdCQUFJLGdDQUFjbkIsT0FBZCxFQUF1QjhDLFlBQVlDLE1BQVosQ0FBbUI1QixJQUExQyxNQUFvRCxRQUF4RCxFQUFrRSxDQUFFLE9BQVM7O0FBRTdFLGdCQUFJMkIsWUFBWUcsTUFBWixDQUFtQjlDLElBQW5CLEtBQTRCLHNCQUE1QixJQUFzRDJDLFlBQVlHLE1BQVosQ0FBbUJDLElBQW5CLEtBQTRCSixXQUF0RixFQUFtRztBQUNqRzlDLHNCQUFRZ0IsTUFBUjtBQUNFOEIsMEJBQVlHLE1BRGQ7QUFFd0NILDBCQUFZQyxNQUFaLENBQW1CNUIsSUFGM0Q7O0FBSUQ7O0FBRUQ7QUFDQSxnQkFBSUcsWUFBWXJCLFdBQVdPLEdBQVgsQ0FBZXNDLFlBQVlDLE1BQVosQ0FBbUI1QixJQUFsQyxDQUFoQjtBQUNBLGdCQUFNb0IsV0FBVyxDQUFDTyxZQUFZQyxNQUFaLENBQW1CNUIsSUFBcEIsQ0FBakI7QUFDQTtBQUNBLG1CQUFPRyxxQkFBcUI2QixzQkFBckIsSUFBa0NMLFlBQVkzQyxJQUFaLEtBQXFCLGtCQUE5RCxFQUFrRjtBQUNoRixrQkFBSTJDLFlBQVlNLFFBQWhCLEVBQTBCO0FBQ3hCLG9CQUFJLENBQUNyQixhQUFMLEVBQW9CO0FBQ2xCL0IsMEJBQVFnQixNQUFSO0FBQ0U4Qiw4QkFBWU8sUUFEZDtBQUVrRVAsOEJBQVlDLE1BQVosQ0FBbUI1QixJQUZyRjs7QUFJRDtBQUNEO0FBQ0Q7O0FBRUQsa0JBQUksQ0FBQ0csVUFBVTBCLEdBQVYsQ0FBY0YsWUFBWU8sUUFBWixDQUFxQmxDLElBQW5DLENBQUwsRUFBK0M7QUFDN0NuQix3QkFBUWdCLE1BQVI7QUFDRThCLDRCQUFZTyxRQURkO0FBRUVoQiw0QkFBWVMsWUFBWU8sUUFBeEIsRUFBa0NkLFFBQWxDLENBRkY7O0FBSUE7QUFDRDs7QUFFRCxrQkFBTWUsV0FBV2hDLFVBQVVkLEdBQVYsQ0FBY3NDLFlBQVlPLFFBQVosQ0FBcUJsQyxJQUFuQyxDQUFqQjtBQUNBLGtCQUFJbUMsWUFBWSxJQUFoQixFQUFzQixDQUFFLE9BQVM7O0FBRWpDO0FBQ0FmLHVCQUFTZ0IsSUFBVCxDQUFjVCxZQUFZTyxRQUFaLENBQXFCbEMsSUFBbkM7QUFDQUcsMEJBQVlnQyxTQUFTaEMsU0FBckI7QUFDQXdCLDRCQUFjQSxZQUFZRyxNQUExQjtBQUNEO0FBQ0YsV0F2RUk7O0FBeUVMTywwQkF6RUssa0RBeUU0QixLQUFaQyxFQUFZLFNBQVpBLEVBQVksQ0FBUkMsSUFBUSxTQUFSQSxJQUFRO0FBQy9CLGdCQUFJQSxRQUFRLElBQVosRUFBa0IsQ0FBRSxPQUFTO0FBQzdCLGdCQUFJQSxLQUFLdkQsSUFBTCxLQUFjLFlBQWxCLEVBQWdDLENBQUUsT0FBUztBQUMzQyxnQkFBSSxDQUFDRixXQUFXK0MsR0FBWCxDQUFlVSxLQUFLdkMsSUFBcEIsQ0FBTCxFQUFnQyxDQUFFLE9BQVM7O0FBRTNDO0FBQ0EsZ0JBQUksZ0NBQWNuQixPQUFkLEVBQXVCMEQsS0FBS3ZDLElBQTVCLE1BQXNDLFFBQTFDLEVBQW9ELENBQUUsT0FBUzs7QUFFL0Q7QUFDQSxxQkFBU3dDLE9BQVQsQ0FBaUJDLE9BQWpCLEVBQTBCdEMsU0FBMUIsRUFBeUQsS0FBcEJ1QyxJQUFvQix1RUFBYixDQUFDSCxLQUFLdkMsSUFBTixDQUFhO0FBQ3ZELGtCQUFJLEVBQUVHLHFCQUFxQjZCLHNCQUF2QixDQUFKLEVBQXVDLENBQUUsT0FBUzs7QUFFbEQsa0JBQUlTLFFBQVF6RCxJQUFSLEtBQWlCLGVBQXJCLEVBQXNDLENBQUUsT0FBUyxDQUhNOztBQUt2RCxxQ0FBdUJ5RCxRQUFROUIsVUFBL0IsOEhBQTJDLEtBQWhDdUIsUUFBZ0M7QUFDekM7QUFDRUEsMkJBQVNsRCxJQUFULEtBQWtCLDBCQUFsQjtBQUNHa0QsMkJBQVNsRCxJQUFULEtBQWtCLGFBRHJCO0FBRUcsbUJBQUNrRCxTQUFTUyxHQUhmO0FBSUU7QUFDQTtBQUNEOztBQUVELHNCQUFJVCxTQUFTUyxHQUFULENBQWEzRCxJQUFiLEtBQXNCLFlBQTFCLEVBQXdDO0FBQ3RDSCw0QkFBUWdCLE1BQVIsQ0FBZTtBQUNiK0MsNEJBQU1WLFFBRE87QUFFYlcsK0JBQVMsbUNBRkksRUFBZjs7QUFJQTtBQUNEOztBQUVELHNCQUFJLENBQUMxQyxVQUFVMEIsR0FBVixDQUFjSyxTQUFTUyxHQUFULENBQWEzQyxJQUEzQixDQUFMLEVBQXVDO0FBQ3JDbkIsNEJBQVFnQixNQUFSLENBQWU7QUFDYitDLDRCQUFNVixRQURPO0FBRWJXLCtCQUFTM0IsWUFBWWdCLFNBQVNTLEdBQXJCLEVBQTBCRCxJQUExQixDQUZJLEVBQWY7O0FBSUE7QUFDRDs7QUFFREEsdUJBQUtOLElBQUwsQ0FBVUYsU0FBU1MsR0FBVCxDQUFhM0MsSUFBdkI7QUFDQSxzQkFBTThDLHNCQUFzQjNDLFVBQVVkLEdBQVYsQ0FBYzZDLFNBQVNTLEdBQVQsQ0FBYTNDLElBQTNCLENBQTVCO0FBQ0E7QUFDQSxzQkFBSThDLHdCQUF3QixJQUE1QixFQUFrQztBQUNoQ04sNEJBQVFOLFNBQVMzQyxLQUFqQixFQUF3QnVELG9CQUFvQjNDLFNBQTVDLEVBQXVEdUMsSUFBdkQ7QUFDRDtBQUNEQSx1QkFBS0ssR0FBTDtBQUNELGlCQXJDc0Q7QUFzQ3hEOztBQUVEUCxvQkFBUUYsRUFBUixFQUFZeEQsV0FBV08sR0FBWCxDQUFla0QsS0FBS3ZDLElBQXBCLENBQVo7QUFDRCxXQTNISTs7QUE2SExnRCwyQkE3SEssbURBNkhxQyxLQUFwQnBCLE1BQW9CLFNBQXBCQSxNQUFvQixDQUFaTSxRQUFZLFNBQVpBLFFBQVk7QUFDeEMsZ0JBQUksQ0FBQ3BELFdBQVcrQyxHQUFYLENBQWVELE9BQU81QixJQUF0QixDQUFMLEVBQWtDLENBQUUsT0FBUztBQUM3QyxnQkFBTUcsWUFBWXJCLFdBQVdPLEdBQVgsQ0FBZXVDLE9BQU81QixJQUF0QixDQUFsQjtBQUNBLGdCQUFJLENBQUNHLFVBQVUwQixHQUFWLENBQWNLLFNBQVNsQyxJQUF2QixDQUFMLEVBQW1DO0FBQ2pDbkIsc0JBQVFnQixNQUFSLENBQWU7QUFDYitDLHNCQUFNVixRQURPO0FBRWJXLHlCQUFTM0IsWUFBWWdCLFFBQVosRUFBc0IsQ0FBQ04sT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydE1hcEJ1aWxkZXIgZnJvbSAnLi4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IEV4cG9ydE1hcCBmcm9tICcuLi9leHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCBkZWNsYXJhdGlvbikge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cblxuICBpZiAoZGVjbGFyYXRpb24uc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cblxuICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWNsYXJhdGlvbi5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic6XG4gICAgICAgIGlmICghaW1wb3J0cy5zaXplKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBzcGVjaWZpZXIsXG4gICAgICAgICAgICBgTm8gZXhwb3J0ZWQgbmFtZXMgZm91bmQgaW4gbW9kdWxlICcke2RlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgaW1wb3J0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6XG4gICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOiB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpbXBvcnRzLmdldChcbiAgICAgICAgLy8gZGVmYXVsdCB0byAnZGVmYXVsdCcgZm9yIGRlZmF1bHQgaHR0cHM6Ly9pLmltZ3VyLmNvbS9uajZxQVd5LmpwZ1xuICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZCA/IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5pbXBvcnRlZC52YWx1ZSA6ICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtZXRhIHx8ICFtZXRhLm5hbWVzcGFjZSkgeyBicmVhazsgfVxuICAgICAgICBuYW1lc3BhY2VzLnNldChzcGVjaWZpZXIubG9jYWwubmFtZSwgbWV0YS5uYW1lc3BhY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbnN1cmUgaW1wb3J0ZWQgbmFtZXNwYWNlcyBjb250YWluIGRlcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIGFzIHRoZXkgYXJlIGRlcmVmZXJlbmNlZC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduYW1lc3BhY2UnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3dDb21wdXRlZDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBjb21wdXRlZCAoYW5kIHRodXMsIHVuLWxpbnRhYmxlKSByZWZlcmVuY2VzIHRvIG5hbWVzcGFjZSBtZW1iZXJzLicsXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBuYW1lc3BhY2VSdWxlKGNvbnRleHQpIHtcbiAgICAvLyByZWFkIG9wdGlvbnNcbiAgICBjb25zdCB7XG4gICAgICBhbGxvd0NvbXB1dGVkID0gZmFsc2UsXG4gICAgfSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBtYWtlTWVzc2FnZShsYXN0LCBuYW1lcGF0aCkge1xuICAgICAgcmV0dXJuIGAnJHtsYXN0Lm5hbWV9JyBub3QgZm91bmQgaW4gJHtuYW1lcGF0aC5sZW5ndGggPiAxID8gJ2RlZXBseSAnIDogJyd9aW1wb3J0ZWQgbmFtZXNwYWNlICcke25hbWVwYXRoLmpvaW4oJy4nKX0nLmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHBpY2sgdXAgYWxsIGltcG9ydHMgYXQgYm9keSBlbnRyeSB0aW1lLCB0byBwcm9wZXJseSByZXNwZWN0IGhvaXN0aW5nXG4gICAgICBQcm9ncmFtKHsgYm9keSB9KSB7XG4gICAgICAgIGJvZHkuZm9yRWFjaCgoeCkgPT4geyBwcm9jZXNzQm9keVN0YXRlbWVudChjb250ZXh0LCBuYW1lc3BhY2VzLCB4KTsgfSk7XG4gICAgICB9LFxuXG4gICAgICAvLyBzYW1lIGFzIGFib3ZlLCBidXQgZG9lcyBub3QgYWRkIG5hbWVzIHRvIGxvY2FsIG1hcFxuICAgICAgRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIHRvZG86IGNoZWNrIGZvciBwb3NzaWJsZSByZWRlZmluaXRpb25cblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLnBhcmVudC50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nICYmIGRlcmVmZXJlbmNlLnBhcmVudC5sZWZ0ID09PSBkZXJlZmVyZW5jZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgZGVyZWZlcmVuY2UucGFyZW50LFxuICAgICAgICAgICAgYEFzc2lnbm1lbnQgdG8gbWVtYmVyIG9mIG5hbWVzcGFjZSAnJHtkZXJlZmVyZW5jZS5vYmplY3QubmFtZX0nLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgaWYgKGRlcmVmZXJlbmNlLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93Q29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgZGVyZWZlcmVuY2UucHJvcGVydHksXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byB2YWxpZGF0ZSBjb21wdXRlZCByZWZlcmVuY2UgdG8gaW1wb3J0ZWQgbmFtZXNwYWNlICcke2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lfScuYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgbWFrZU1lc3NhZ2UoZGVyZWZlcmVuY2UucHJvcGVydHksIG5hbWVwYXRoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRlZCA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgaWYgKGV4cG9ydGVkID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvLyBzdGFzaCBhbmQgcG9wXG4gICAgICAgICAgbmFtZXBhdGgucHVzaChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBuYW1lc3BhY2UgPSBleHBvcnRlZC5uYW1lc3BhY2U7XG4gICAgICAgICAgZGVyZWZlcmVuY2UgPSBkZXJlZmVyZW5jZS5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcih7IGlkLCBpbml0IH0pIHtcbiAgICAgICAgaWYgKGluaXQgPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKGluaXQudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluaXQubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIHJlZGVmaW5pdGlvbiBpbiBpbnRlcm1lZGlhdGUgc2NvcGVzXG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIGluaXQubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIERGUyB0cmF2ZXJzZSBjaGlsZCBuYW1lc3BhY2VzXG4gICAgICAgIGZ1bmN0aW9uIHRlc3RLZXkocGF0dGVybiwgbmFtZXNwYWNlLCBwYXRoID0gW2luaXQubmFtZV0pIHtcbiAgICAgICAgICBpZiAoIShuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXApKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsicHJvY2Vzc0JvZHlTdGF0ZW1lbnQiLCJjb250ZXh0IiwibmFtZXNwYWNlcyIsImRlY2xhcmF0aW9uIiwidHlwZSIsInNwZWNpZmllcnMiLCJsZW5ndGgiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwicmVwb3J0RXJyb3JzIiwiZm9yRWFjaCIsInNwZWNpZmllciIsInNpemUiLCJyZXBvcnQiLCJzZXQiLCJsb2NhbCIsIm5hbWUiLCJtZXRhIiwiaW1wb3J0ZWQiLCJuYW1lc3BhY2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3dDb21wdXRlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwibmFtZXNwYWNlUnVsZSIsIm9wdGlvbnMiLCJNYXAiLCJtYWtlTWVzc2FnZSIsImxhc3QiLCJuYW1lcGF0aCIsImpvaW4iLCJQcm9ncmFtIiwiYm9keSIsIngiLCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJoYXMiLCJwYXJlbnQiLCJsZWZ0IiwiY29tcHV0ZWQiLCJwcm9wZXJ0eSIsImV4cG9ydGVkIiwicHVzaCIsIlZhcmlhYmxlRGVjbGFyYXRvciIsImlkIiwiaW5pdCIsInRlc3RLZXkiLCJwYXR0ZXJuIiwicGF0aCIsImtleSIsIm5vZGUiLCJtZXNzYWdlIiwiZGVwZW5kZW5jeUV4cG9ydE1hcCIsInBvcCIsIkpTWE1lbWJlckV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBLFNBQVNBLG9CQUFULENBQThCQyxPQUE5QixFQUF1Q0MsVUFBdkMsRUFBbURDLFdBQW5ELEVBQWdF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QyxJQUEzQixDQUE1QjtBQUNBO0FBQ0Esc0JBQUk2Qyx3QkFBd0IsSUFBNUIsRUFBa0M7QUFDaENOLDRCQUFRTixTQUFTMUMsS0FBakIsRUFBd0JzRCxvQkFBb0IxQyxTQUE1QyxFQUF1RHNDLElBQXZEO0FBQ0Q7QUFDREEsdUJBQUtLLEdBQUw7QUFDRCxpQkFyQ3NEO0FBc0N4RDs7QUFFRFAsb0JBQVFGLEVBQVIsRUFBWXZELFdBQVdPLEdBQVgsQ0FBZWlELEtBQUt0QyxJQUFwQixDQUFaO0FBQ0QsV0EzSEk7O0FBNkhMK0MsMkJBN0hLLG1EQTZIcUMsS0FBcEJuQixNQUFvQixTQUFwQkEsTUFBb0IsQ0FBWkssUUFBWSxTQUFaQSxRQUFZO0FBQ3hDLGdCQUFJLENBQUNuRCxXQUFXK0MsR0FBWCxDQUFlRCxPQUFPNUIsSUFBdEIsQ0FBTCxFQUFrQyxDQUFFLE9BQVM7QUFDN0MsZ0JBQU1HLFlBQVlyQixXQUFXTyxHQUFYLENBQWV1QyxPQUFPNUIsSUFBdEIsQ0FBbEI7QUFDQSxnQkFBSSxDQUFDRyxVQUFVMEIsR0FBVixDQUFjSSxTQUFTakMsSUFBdkIsQ0FBTCxFQUFtQztBQUNqQ25CLHNCQUFRZ0IsTUFBUixDQUFlO0FBQ2I4QyxzQkFBTVYsUUFETztBQUViVyx5QkFBUzFCLFlBQVllLFFBQVosRUFBc0IsQ0FBQ0wsT0FBTzVCLElBQVIsQ0FBdEIsQ0FGSSxFQUFmOztBQUlEO0FBQ0YsV0F0SUksZ0NBQVA7O0FBd0lELEtBcEpELE9BQWlCZSxhQUFqQixJQXhCZSxFQUFqQiIsImZpbGUiOiJuYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBpbXBvcnREZWNsYXJhdGlvbiBmcm9tICcuLi9pbXBvcnREZWNsYXJhdGlvbic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgZGVjbGFyYXRpb24pIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHsgcmV0dXJuOyB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uLnNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG5cbiAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVjbGFyYXRpb24uc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgc3BlY2lmaWVyLFxuICAgICAgICAgICAgYE5vIGV4cG9ydGVkIG5hbWVzIGZvdW5kIGluIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgY2FzZSAnSW1wb3J0U3BlY2lmaWVyJzoge1xuICAgICAgICBjb25zdCBtZXRhID0gaW1wb3J0cy5nZXQoXG4gICAgICAgIC8vIGRlZmF1bHQgdG8gJ2RlZmF1bHQnIGZvciBkZWZhdWx0IGh0dHBzOi8vaS5pbWd1ci5jb20vbmo2cUFXeS5qcGdcbiAgICAgICAgICBzcGVjaWZpZXIuaW1wb3J0ZWQgPyBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUgOiAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWV0YSB8fCAhbWV0YS5uYW1lc3BhY2UpIHsgYnJlYWs7IH1cbiAgICAgICAgbmFtZXNwYWNlcy5zZXQoc3BlY2lmaWVyLmxvY2FsLm5hbWUsIG1ldGEubmFtZXNwYWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5zdXJlIGltcG9ydGVkIG5hbWVzcGFjZXMgY29udGFpbiBkZXJlZmVyZW5jZWQgcHJvcGVydGllcyBhcyB0aGV5IGFyZSBkZXJlZmVyZW5jZWQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbmFtZXNwYWNlJyksXG4gICAgfSxcblxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFsbG93Q29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgY29tcHV0ZWQgKGFuZCB0aHVzLCB1bi1saW50YWJsZSkgcmVmZXJlbmNlcyB0byBuYW1lc3BhY2UgbWVtYmVycy4nLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gbmFtZXNwYWNlUnVsZShjb250ZXh0KSB7XG4gICAgLy8gcmVhZCBvcHRpb25zXG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dDb21wdXRlZCA9IGZhbHNlLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gbWFrZU1lc3NhZ2UobGFzdCwgbmFtZXBhdGgpIHtcbiAgICAgIHJldHVybiBgJyR7bGFzdC5uYW1lfScgbm90IGZvdW5kIGluICR7bmFtZXBhdGgubGVuZ3RoID4gMSA/ICdkZWVwbHkgJyA6ICcnfWltcG9ydGVkIG5hbWVzcGFjZSAnJHtuYW1lcGF0aC5qb2luKCcuJyl9Jy5gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBwaWNrIHVwIGFsbCBpbXBvcnRzIGF0IGJvZHkgZW50cnkgdGltZSwgdG8gcHJvcGVybHkgcmVzcGVjdCBob2lzdGluZ1xuICAgICAgUHJvZ3JhbSh7IGJvZHkgfSkge1xuICAgICAgICBib2R5LmZvckVhY2goKHgpID0+IHsgcHJvY2Vzc0JvZHlTdGF0ZW1lbnQoY29udGV4dCwgbmFtZXNwYWNlcywgeCk7IH0pO1xuICAgICAgfSxcblxuICAgICAgLy8gc2FtZSBhcyBhYm92ZSwgYnV0IGRvZXMgbm90IGFkZCBuYW1lcyB0byBsb2NhbCBtYXBcbiAgICAgIEV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcihuYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBkZWNsYXJhdGlvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIGBObyBleHBvcnRlZCBuYW1lcyBmb3VuZCBpbiBtb2R1bGUgJyR7ZGVjbGFyYXRpb24uc291cmNlLnZhbHVlfScuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyB0b2RvOiBjaGVjayBmb3IgcG9zc2libGUgcmVkZWZpbml0aW9uXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24oZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLm9iamVjdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5wYXJlbnQudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyAmJiBkZXJlZmVyZW5jZS5wYXJlbnQubGVmdCA9PT0gZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIGRlcmVmZXJlbmNlLnBhcmVudCxcbiAgICAgICAgICAgIGBBc3NpZ25tZW50IHRvIG1lbWJlciBvZiBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dDb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgICAgICBkZXJlZmVyZW5jZS5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvIHZhbGlkYXRlIGNvbXB1dGVkIHJlZmVyZW5jZSB0byBpbXBvcnRlZCBuYW1lc3BhY2UgJyR7ZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWV9Jy5gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgIGRlcmVmZXJlbmNlLnByb3BlcnR5LFxuICAgICAgICAgICAgICBtYWtlTWVzc2FnZShkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbmFtZXBhdGgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4cG9ydGVkID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IGV4cG9ydGVkLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKHsgaWQsIGluaXQgfSkge1xuICAgICAgICBpZiAoaW5pdCA9PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoaW5pdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaW5pdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgcmVkZWZpbml0aW9uIGluIGludGVybWVkaWF0ZSBzY29wZXNcbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgaW5pdC5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gREZTIHRyYXZlcnNlIGNoaWxkIG5hbWVzcGFjZXNcbiAgICAgICAgZnVuY3Rpb24gdGVzdEtleShwYXR0ZXJuLCBuYW1lc3BhY2UsIHBhdGggPSBbaW5pdC5uYW1lXSkge1xuICAgICAgICAgIGlmICghKG5hbWVzcGFjZSBpbnN0YW5jZW9mIEV4cG9ydHMpKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwYXR0ZXJuLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eSdcbiAgICAgICAgICAgICAgfHwgcHJvcGVydHkudHlwZSA9PT0gJ1Jlc3RFbGVtZW50J1xuICAgICAgICAgICAgICB8fCAhcHJvcGVydHkua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnT25seSBkZXN0cnVjdHVyZSB0b3AtbGV2ZWwgbmFtZXMuJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocHJvcGVydHkua2V5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBub2RlOiBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtYWtlTWVzc2FnZShwcm9wZXJ0eS5rZXksIHBhdGgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgucHVzaChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXhwb3J0TWFwID0gbmFtZXNwYWNlLmdldChwcm9wZXJ0eS5rZXkubmFtZSk7XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBudWxsIHdoZW4gaWdub3JlZCBvciBhbWJpZ3VvdXNcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RXhwb3J0TWFwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRlc3RLZXkocHJvcGVydHkudmFsdWUsIGRlcGVuZGVuY3lFeHBvcnRNYXAubmFtZXNwYWNlLCBwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGVzdEtleShpZCwgbmFtZXNwYWNlcy5nZXQoaW5pdC5uYW1lKSk7XG4gICAgICB9LFxuXG4gICAgICBKU1hNZW1iZXJFeHByZXNzaW9uKHsgb2JqZWN0LCBwcm9wZXJ0eSB9KSB7XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMob2JqZWN0Lm5hbWUpKSB7IHJldHVybjsgfVxuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChvYmplY3QubmFtZSk7XG4gICAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwcm9wZXJ0eS5uYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByb3BlcnR5LFxuICAgICAgICAgICAgbWVzc2FnZTogbWFrZU1lc3NhZ2UocHJvcGVydHksIFtvYmplY3QubmFtZV0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 f2421e17a6..6cc1568646 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 @@ -124,7 +124,7 @@ module.exports = { } } - function commentAfterImport(node, nextComment, type) { + function commentAfterImport(node, nextComment) { var lineDifference = getLineDifference(node, nextComment); var EXPECTED_LINE_DIFFERENCE = options.count + 1; @@ -140,7 +140,7 @@ module.exports = { line: node.loc.end.line, column: column }, - message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after ' + String(type) + ' statement not followed by another ' + String(type) + '.', + message: 'Expected ' + String(options.count) + ' empty line' + (options.count > 1 ? 's' : '') + ' after import statement not followed by another import.', fix: options.exactCount && EXPECTED_LINE_DIFFERENCE < lineDifference ? undefined : function (fixer) {return fixer.insertTextAfter( node, '\n'.repeat(EXPECTED_LINE_DIFFERENCE - lineDifference));} }); @@ -178,7 +178,7 @@ module.exports = { } if (nextComment && typeof nextComment !== 'undefined') { - commentAfterImport(node, nextComment, 'import'); + commentAfterImport(node, nextComment); } else if (nextNode && nextNode.type !== 'ImportDeclaration' && (nextNode.type !== 'TSImportEqualsDeclaration' || nextNode.isExport)) { checkForNewLine(node, nextNode, 'import'); } @@ -215,18 +215,8 @@ module.exports = { !containsNodeOrEqual(nextStatement, nextRequireCall))) { - var nextComment = void 0; - if (typeof statementWithRequireCall.parent.comments !== 'undefined' && options.considerComments) { - var endLine = node.loc.end.line; - nextComment = statementWithRequireCall.parent.comments.find(function (o) {return o.loc.start.line >= endLine && o.loc.start.line <= endLine + options.count + 1;}); - } - - if (nextComment && typeof nextComment !== 'undefined') { - - commentAfterImport(statementWithRequireCall, nextComment, 'require'); - } else { - checkForNewLine(statementWithRequireCall, nextStatement, 'require'); - } + + checkForNewLine(statementWithRequireCall, nextStatement, 'require'); } }); }return ProgramExit;}(), @@ -244,4 +234,4 @@ module.exports = { 'Decorator:exit': decrementLevel }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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QUFDTGIsa0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0Y7QUFDRixhQS9CRDtBQWdDRCxXQTdDSTtBQThDTEUsNkJBQXFCeEIsY0E5Q2hCO0FBK0NMeUIsNEJBQW9CekIsY0EvQ2Y7QUFnREwwQixpQ0FBeUIxQixjQWhEcEI7QUFpREwyQix3QkFBZ0IzQixjQWpEWDtBQWtETDRCLDBCQUFrQjVCLGNBbERiO0FBbURMNkIsbUJBQVc3QixjQW5ETjtBQW9ETCxvQ0FBNEJDLGNBcER2QjtBQXFETCxtQ0FBMkJBLGNBckR0QjtBQXNETCx3Q0FBZ0NBLGNBdEQzQjtBQXVETCwrQkFBdUJBLGNBdkRsQjtBQXdETCxpQ0FBeUJBLGNBeERwQjtBQXlETCwwQkFBa0JBLGNBekRiLEVBQVA7O0FBMkRELEtBL0xjLG1CQUFqQiIsImZpbGUiOiJuZXdsaW5lLWFmdGVyLWltcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgbmV3IGxpbmUgYWZ0ZXIgaW1wb3J0IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIGltcG9ydC5cbiAqIEBhdXRob3IgUmFkZWsgQmVua2VsXG4gKi9cblxuaW1wb3J0IGlzU3RhdGljUmVxdWlyZSBmcm9tICcuLi9jb3JlL3N0YXRpY1JlcXVpcmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5jb25zdCBsb2cgPSBkZWJ1ZygnZXNsaW50LXBsdWdpbi1pbXBvcnQ6cnVsZXM6bmV3bGluZS1hZnRlci1pbXBvcnQnKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlT3JFcXVhbChvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICByZXR1cm4gb3V0ZXJOb2RlLnJhbmdlWzBdIDw9IGlubmVyTm9kZS5yYW5nZVswXSAmJiBvdXRlck5vZGUucmFuZ2VbMV0gPj0gaW5uZXJOb2RlLnJhbmdlWzFdO1xufVxuXG5mdW5jdGlvbiBnZXRTY29wZUJvZHkoc2NvcGUpIHtcbiAgaWYgKHNjb3BlLmJsb2NrLnR5cGUgPT09ICdTd2l0Y2hTdGF0ZW1lbnQnKSB7XG4gICAgbG9nKCdTd2l0Y2hTdGF0ZW1lbnQgc2NvcGVzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgYm9keSB9ID0gc2NvcGUuYmxvY2s7XG4gIGlmIChib2R5ICYmIGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIHJldHVybiBib2R5LmJvZHk7XG4gIH1cblxuICByZXR1cm4gYm9keTtcbn1cblxuZnVuY3Rpb24gZmluZE5vZGVJbmRleEluU2NvcGVCb2R5KGJvZHksIG5vZGVUb0ZpbmQpIHtcbiAgcmV0dXJuIGJvZHkuZmluZEluZGV4KChub2RlKSA9PiBjb250YWluc05vZGVPckVxdWFsKG5vZGUsIG5vZGVUb0ZpbmQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpIHtcbiAgcmV0dXJuIG5leHROb2RlLmxvYy5zdGFydC5saW5lIC0gbm9kZS5sb2MuZW5kLmxpbmU7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjb3JhdG9ycyAmJiBub2RlLmRlY29yYXRvcnMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydERlZmF1bHRDbGFzcyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5mdW5jdGlvbiBpc0V4cG9ydE5hbWVDbGFzcyhub2RlKSB7XG5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb24gJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ2xheW91dCcsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBuZXdsaW5lIGFmdGVyIGltcG9ydCBzdGF0ZW1lbnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnd2hpdGVzcGFjZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY291bnQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFjdENvdW50OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICAgIGNvbnNpZGVyQ29tbWVudHM6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGNvbnN0IHJlcXVpcmVDYWxscyA9IFtdO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjb3VudDogMSxcbiAgICAgIGV4YWN0Q291bnQ6IGZhbHNlLFxuICAgICAgY29uc2lkZXJDb21tZW50czogZmFsc2UsXG4gICAgICAuLi5jb250ZXh0Lm9wdGlvbnNbMF0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yTmV3TGluZShub2RlLCBuZXh0Tm9kZSwgdHlwZSkge1xuICAgICAgaWYgKGlzRXhwb3J0RGVmYXVsdENsYXNzKG5leHROb2RlKSB8fCBpc0V4cG9ydE5hbWVDbGFzcyhuZXh0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOb2RlID0gbmV4dE5vZGUuZGVjbGFyYXRpb247XG5cbiAgICAgICAgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKGNsYXNzTm9kZSkpIHtcbiAgICAgICAgICBuZXh0Tm9kZSA9IGNsYXNzTm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ2xhc3NXaXRoRGVjb3JhdG9yKG5leHROb2RlKSkge1xuICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLmRlY29yYXRvcnNbMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVEaWZmZXJlbmNlID0gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpO1xuICAgICAgY29uc3QgRVhQRUNURURfTElORV9ESUZGRVJFTkNFID0gb3B0aW9ucy5jb3VudCArIDE7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICAgfHwgb3B0aW9ucy5leGFjdENvdW50ICYmIGxpbmVEaWZmZXJlbmNlICE9PSBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0VcbiAgICAgICkge1xuICAgICAgICBsZXQgY29sdW1uID0gbm9kZS5sb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgICAgIGlmIChub2RlLmxvYy5zdGFydC5saW5lICE9PSBub2RlLmxvYy5lbmQubGluZSkge1xuICAgICAgICAgIGNvbHVtbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICBsaW5lOiBub2RlLmxvYy5lbmQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke29wdGlvbnMuY291bnR9IGVtcHR5IGxpbmUke29wdGlvbnMuY291bnQgPiAxID8gJ3MnIDogJyd9IGFmdGVyICR7dHlwZX0gc3RhdGVtZW50IG5vdCBmb2xsb3dlZCBieSBhbm90aGVyICR7dHlwZX0uYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tbWVudEFmdGVySW1wb3J0KG5vZGUsIG5leHRDb21tZW50LCB0eXBlKSB7XG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHRDb21tZW50KTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAobGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UpIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY3JlbWVudExldmVsKCkge1xuICAgICAgbGV2ZWwrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbC0tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW1wb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuXG4gICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LmJvZHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBwYXJlbnQuYm9keS5pbmRleE9mKG5vZGUpO1xuICAgICAgY29uc3QgbmV4dE5vZGUgPSBwYXJlbnQuYm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgIGNvbnN0IGVuZExpbmUgPSBub2RlLmxvYy5lbmQubGluZTtcbiAgICAgIGxldCBuZXh0Q29tbWVudDtcblxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICBuZXh0Q29tbWVudCA9IHBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBza2lwIFwiZXhwb3J0IGltcG9ydFwic1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21tZW50QWZ0ZXJJbXBvcnQobm9kZSwgbmV4dENvbW1lbnQsICdpbXBvcnQnKTtcbiAgICAgIH0gZWxzZSBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAobmV4dE5vZGUudHlwZSAhPT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nIHx8IG5leHROb2RlLmlzRXhwb3J0KSkge1xuICAgICAgICBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsICdpbXBvcnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogY2hlY2tJbXBvcnQsXG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY1JlcXVpcmUobm9kZSkgJiYgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICByZXF1aXJlQ2FsbHMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBsb2coJ2V4aXQgcHJvY2Vzc2luZyBmb3InLCBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlQm9keSA9IGdldFNjb3BlQm9keShjb250ZXh0LmdldFNjb3BlKCkpO1xuICAgICAgICBsb2coJ2dvdCBzY29wZTonLCBzY29wZUJvZHkpO1xuXG4gICAgICAgIHJlcXVpcmVDYWxscy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShzY29wZUJvZHksIG5vZGUpO1xuICAgICAgICAgIGxvZygnbm9kZSBwb3NpdGlvbiBpbiBzY29wZTonLCBub2RlUG9zaXRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsID0gc2NvcGVCb2R5W25vZGVQb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgbmV4dFN0YXRlbWVudCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0UmVxdWlyZUNhbGwgPSByZXF1aXJlQ2FsbHNbaW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmIChuZXh0UmVxdWlyZUNhbGwgJiYgY29udGFpbnNOb2RlT3JFcXVhbChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRSZXF1aXJlQ2FsbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXh0U3RhdGVtZW50ICYmIChcbiAgICAgICAgICAgICAgIW5leHRSZXF1aXJlQ2FsbFxuICAgICAgICAgICAgICB8fCAhY29udGFpbnNOb2RlT3JFcXVhbChuZXh0U3RhdGVtZW50LCBuZXh0UmVxdWlyZUNhbGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmV4dENvbW1lbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbC5wYXJlbnQuY29tbWVudHMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMuY29uc2lkZXJDb21tZW50cykge1xuICAgICAgICAgICAgICBjb25zdCBlbmRMaW5lID0gbm9kZS5sb2MuZW5kLmxpbmU7XG4gICAgICAgICAgICAgIG5leHRDb21tZW50ID0gc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLnBhcmVudC5jb21tZW50cy5maW5kKChvKSA9PiBvLmxvYy5zdGFydC5saW5lID49IGVuZExpbmUgJiYgby5sb2Muc3RhcnQubGluZSA8PSBlbmRMaW5lICsgb3B0aW9ucy5jb3VudCArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dENvbW1lbnQgJiYgdHlwZW9mIG5leHRDb21tZW50ICE9PSAndW5kZWZpbmVkJykge1xuXG4gICAgICAgICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRDb21tZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2tGb3JOZXdMaW5lKHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCwgbmV4dFN0YXRlbWVudCwgJ3JlcXVpcmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IGluY3JlbWVudExldmVsLFxuICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEJsb2NrU3RhdGVtZW50OiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIE9iamVjdEV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgRGVjb3JhdG9yOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdCbG9ja1N0YXRlbWVudDpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnT2JqZWN0RXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnRGVjb3JhdG9yOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb3VudCIsIm1pbmltdW0iLCJleGFjdENvdW50IiwiY29uc2lkZXJDb21tZW50cyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwib3B0aW9ucyIsImNoZWNrRm9yTmV3TGluZSIsImNsYXNzTm9kZSIsImxpbmVEaWZmZXJlbmNlIiwiRVhQRUNURURfTElORV9ESUZGRVJFTkNFIiwiY29sdW1uIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsInVuZGVmaW5lZCIsImZpeGVyIiwiaW5zZXJ0VGV4dEFmdGVyIiwicmVwZWF0IiwiY29tbWVudEFmdGVySW1wb3J0IiwibmV4dENvbW1lbnQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiZW5kTGluZSIsImNvbW1lbnRzIiwiZmluZCIsIm8iLCJpc0V4cG9ydCIsIkltcG9ydERlY2xhcmF0aW9uIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsIkNhbGxFeHByZXNzaW9uIiwicHVzaCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsInNjb3BlQm9keSIsImdldFNjb3BlIiwiZm9yRWFjaCIsImluZGV4Iiwic3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsIiwibmV4dFN0YXRlbWVudCIsIm5leHRSZXF1aXJlQ2FsbCIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIsIkJsb2NrU3RhdGVtZW50IiwiT2JqZWN0RXhwcmVzc2lvbiIsIkRlY29yYXRvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzRDtBQUNBLHFDOztBQUVBLDhCO0FBQ0EsSUFBTUEsTUFBTSx3QkFBTSxpREFBTixDQUFaOztBQUVBO0FBQ0E7QUFDQTtBQWJBOzs7R0FlQSxTQUFTQyxtQkFBVCxDQUE2QkMsU0FBN0IsRUFBd0NDLFNBQXhDLEVBQW1ELENBQ2pELE9BQU9ELFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBdEIsSUFBNENGLFVBQVVFLEtBQVYsQ0FBZ0IsQ0FBaEIsS0FBc0JELFVBQVVDLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBekUsQ0FDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixNQUFJQSxNQUFNQyxLQUFOLENBQVlDLElBQVosS0FBcUIsaUJBQXpCLEVBQTRDO0FBQzFDUixRQUFJLHNDQUFKO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FKMEI7O0FBTW5CUyxNQU5tQixHQU1WSCxNQUFNQyxLQU5JLENBTW5CRSxJQU5tQjtBQU8zQixNQUFJQSxRQUFRQSxLQUFLRCxJQUFMLEtBQWMsZ0JBQTFCLEVBQTRDO0FBQzFDLFdBQU9DLEtBQUtBLElBQVo7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Qm1FLFNBQXpCLEVBQW9DaEUsSUFBcEMsQ0FBckI7QUFDQWIsa0JBQUkseUJBQUosRUFBK0JnRSxZQUEvQjs7QUFFQSxrQkFBTWlCLDJCQUEyQkosVUFBVWIsWUFBVixDQUFqQztBQUNBLGtCQUFNa0IsZ0JBQWdCTCxVQUFVYixlQUFlLENBQXpCLENBQXRCO0FBQ0Esa0JBQU1tQixrQkFBa0J2QyxhQUFhb0MsUUFBUSxDQUFyQixDQUF4Qjs7QUFFQSxrQkFBSUcsbUJBQW1CbEYsb0JBQW9CZ0Ysd0JBQXBCLEVBQThDRSxlQUE5QyxDQUF2QixFQUF1RjtBQUNyRjtBQUNEOztBQUVEO0FBQ0VEO0FBQ0UsZUFBQ0MsZUFBRDtBQUNHLGVBQUNsRixvQkFBb0JpRixhQUFwQixFQUFtQ0MsZUFBbkMsQ0FGTixDQURGOztBQUtFOztBQUVBckMsZ0NBQWdCbUMsd0JBQWhCLEVBQTBDQyxhQUExQyxFQUF5RCxTQUF6RDtBQUNEO0FBQ0YsYUFyQkQ7QUFzQkQsV0FuQ0k7QUFvQ0xFLDZCQUFxQnhCLGNBcENoQjtBQXFDTHlCLDRCQUFvQnpCLGNBckNmO0FBc0NMMEIsaUNBQXlCMUIsY0F0Q3BCO0FBdUNMMkIsd0JBQWdCM0IsY0F2Q1g7QUF3Q0w0QiwwQkFBa0I1QixjQXhDYjtBQXlDTDZCLG1CQUFXN0IsY0F6Q047QUEwQ0wsb0NBQTRCQyxjQTFDdkI7QUEyQ0wsbUNBQTJCQSxjQTNDdEI7QUE0Q0wsd0NBQWdDQSxjQTVDM0I7QUE2Q0wsK0JBQXVCQSxjQTdDbEI7QUE4Q0wsaUNBQXlCQSxjQTlDcEI7QUErQ0wsMEJBQWtCQSxjQS9DYixFQUFQOztBQWlERCxLQXJMYyxtQkFBakIiLCJmaWxlIjoibmV3bGluZS1hZnRlci1pbXBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIG5ldyBsaW5lIGFmdGVyIGltcG9ydCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuXG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OnJ1bGVzOm5ld2xpbmUtYWZ0ZXItaW1wb3J0Jyk7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZU9yRXF1YWwob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgcmV0dXJuIG91dGVyTm9kZS5yYW5nZVswXSA8PSBpbm5lck5vZGUucmFuZ2VbMF0gJiYgb3V0ZXJOb2RlLnJhbmdlWzFdID49IGlubmVyTm9kZS5yYW5nZVsxXTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGVCb2R5KHNjb3BlKSB7XG4gIGlmIChzY29wZS5ibG9jay50eXBlID09PSAnU3dpdGNoU3RhdGVtZW50Jykge1xuICAgIGxvZygnU3dpdGNoU3RhdGVtZW50IHNjb3BlcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGJvZHkgfSA9IHNjb3BlLmJsb2NrO1xuICBpZiAoYm9keSAmJiBib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gYm9keS5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShib2R5LCBub2RlVG9GaW5kKSB7XG4gIHJldHVybiBib2R5LmZpbmRJbmRleCgobm9kZSkgPT4gY29udGFpbnNOb2RlT3JFcXVhbChub2RlLCBub2RlVG9GaW5kKSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKSB7XG4gIHJldHVybiBuZXh0Tm9kZS5sb2Muc3RhcnQubGluZSAtIG5vZGUubG9jLmVuZC5saW5lO1xufVxuXG5mdW5jdGlvbiBpc0NsYXNzV2l0aERlY29yYXRvcihub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJyAmJiBub2RlLmRlY29yYXRvcnMgJiYgbm9kZS5kZWNvcmF0b3JzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnREZWZhdWx0Q2xhc3Mobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnROYW1lQ2xhc3Mobm9kZSkge1xuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdsYXlvdXQnLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgbmV3bGluZSBhZnRlciBpbXBvcnQgc3RhdGVtZW50cy4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduZXdsaW5lLWFmdGVyLWltcG9ydCcpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ3doaXRlc3BhY2UnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNvdW50OiB7XG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhY3RDb3VudDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICBjb25zaWRlckNvbW1lbnRzOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGxldmVsID0gMDtcbiAgICBjb25zdCByZXF1aXJlQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgY291bnQ6IDEsXG4gICAgICBleGFjdENvdW50OiBmYWxzZSxcbiAgICAgIGNvbnNpZGVyQ29tbWVudHM6IGZhbHNlLFxuICAgICAgLi4uY29udGV4dC5vcHRpb25zWzBdLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsIHR5cGUpIHtcbiAgICAgIGlmIChpc0V4cG9ydERlZmF1bHRDbGFzcyhuZXh0Tm9kZSkgfHwgaXNFeHBvcnROYW1lQ2xhc3MobmV4dE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTm9kZSA9IG5leHROb2RlLmRlY2xhcmF0aW9uO1xuXG4gICAgICAgIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihjbGFzc05vZGUpKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBjbGFzc05vZGUuZGVjb3JhdG9yc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihuZXh0Tm9kZSkpIHtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICAgIHx8IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBsaW5lRGlmZmVyZW5jZSAhPT0gRVhQRUNURURfTElORV9ESUZGRVJFTkNFXG4gICAgICApIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBhZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBvcHRpb25zLmV4YWN0Q291bnQgJiYgRVhQRUNURURfTElORV9ESUZGRVJFTkNFIDwgbGluZURpZmZlcmVuY2UgPyB1bmRlZmluZWQgOiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAnXFxuJy5yZXBlYXQoRVhQRUNURURfTElORV9ESUZGRVJFTkNFIC0gbGluZURpZmZlcmVuY2UpLFxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCkge1xuICAgICAgY29uc3QgbGluZURpZmZlcmVuY2UgPSBnZXRMaW5lRGlmZmVyZW5jZShub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICBjb25zdCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPSBvcHRpb25zLmNvdW50ICsgMTtcblxuICAgICAgaWYgKGxpbmVEaWZmZXJlbmNlIDwgRVhQRUNURURfTElORV9ESUZGRVJFTkNFKSB7XG4gICAgICAgIGxldCBjb2x1bW4gPSBub2RlLmxvYy5zdGFydC5jb2x1bW47XG5cbiAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgIT09IG5vZGUubG9jLmVuZC5saW5lKSB7XG4gICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBsb2M6IHtcbiAgICAgICAgICAgIGxpbmU6IG5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7b3B0aW9ucy5jb3VudH0gZW1wdHkgbGluZSR7b3B0aW9ucy5jb3VudCA+IDEgPyAncycgOiAnJ30gYWZ0ZXIgaW1wb3J0IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IG9wdGlvbnMuZXhhY3RDb3VudCAmJiBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgPCBsaW5lRGlmZmVyZW5jZSA/IHVuZGVmaW5lZCA6IChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWNyZW1lbnRMZXZlbCgpIHtcbiAgICAgIGxldmVsLS07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tJbXBvcnQobm9kZSkge1xuICAgICAgY29uc3QgeyBwYXJlbnQgfSA9IG5vZGU7XG5cbiAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuYm9keSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHBhcmVudC5ib2R5LmluZGV4T2Yobm9kZSk7XG4gICAgICBjb25zdCBuZXh0Tm9kZSA9IHBhcmVudC5ib2R5W25vZGVQb3NpdGlvbiArIDFdO1xuICAgICAgY29uc3QgZW5kTGluZSA9IG5vZGUubG9jLmVuZC5saW5lO1xuICAgICAgbGV0IG5leHRDb21tZW50O1xuXG4gICAgICBpZiAodHlwZW9mIHBhcmVudC5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucy5jb25zaWRlckNvbW1lbnRzKSB7XG4gICAgICAgIG5leHRDb21tZW50ID0gcGFyZW50LmNvbW1lbnRzLmZpbmQoKG8pID0+IG8ubG9jLnN0YXJ0LmxpbmUgPj0gZW5kTGluZSAmJiBvLmxvYy5zdGFydC5saW5lIDw9IGVuZExpbmUgKyBvcHRpb25zLmNvdW50ICsgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5pc0V4cG9ydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0Q29tbWVudCAmJiB0eXBlb2YgbmV4dENvbW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbW1lbnRBZnRlckltcG9ydChub2RlLCBuZXh0Q29tbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHROb2RlICYmIG5leHROb2RlLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKG5leHROb2RlLnR5cGUgIT09ICdUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uJyB8fCBuZXh0Tm9kZS5pc0V4cG9ydCkpIHtcbiAgICAgICAgY2hlY2tGb3JOZXdMaW5lKG5vZGUsIG5leHROb2RlLCAnaW1wb3J0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja0ltcG9ydCxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAoaXNTdGF0aWNSZXF1aXJlKG5vZGUpICYmIGxldmVsID09PSAwKSB7XG4gICAgICAgICAgcmVxdWlyZUNhbGxzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgbG9nKCdleGl0IHByb2Nlc3NpbmcgZm9yJywgY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xuICAgICAgICBjb25zdCBzY29wZUJvZHkgPSBnZXRTY29wZUJvZHkoY29udGV4dC5nZXRTY29wZSgpKTtcbiAgICAgICAgbG9nKCdnb3Qgc2NvcGU6Jywgc2NvcGVCb2R5KTtcblxuICAgICAgICByZXF1aXJlQ2FsbHMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkoc2NvcGVCb2R5LCBub2RlKTtcbiAgICAgICAgICBsb2coJ25vZGUgcG9zaXRpb24gaW4gc2NvcGU6Jywgbm9kZVBvc2l0aW9uKTtcblxuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb25dO1xuICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZW1lbnQgPSBzY29wZUJvZHlbbm9kZVBvc2l0aW9uICsgMV07XG4gICAgICAgICAgY29uc3QgbmV4dFJlcXVpcmVDYWxsID0gcmVxdWlyZUNhbGxzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobmV4dFJlcXVpcmVDYWxsICYmIGNvbnRhaW5zTm9kZU9yRXF1YWwoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0UmVxdWlyZUNhbGwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmV4dFN0YXRlbWVudCAmJiAoXG4gICAgICAgICAgICAgICFuZXh0UmVxdWlyZUNhbGxcbiAgICAgICAgICAgICAgfHwgIWNvbnRhaW5zTm9kZU9yRXF1YWwobmV4dFN0YXRlbWVudCwgbmV4dFJlcXVpcmVDYWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuXG4gICAgICAgICAgICBjaGVja0Zvck5ld0xpbmUoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0U3RhdGVtZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQmxvY2tTdGF0ZW1lbnQ6IGluY3JlbWVudExldmVsLFxuICAgICAgT2JqZWN0RXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBEZWNvcmF0b3I6IGluY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Jsb2NrU3RhdGVtZW50OmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdPYmplY3RFeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdEZWNvcmF0b3I6ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 5cc9bd7861..c728eafed7 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-cycle.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-cycle.js @@ -4,18 +4,13 @@ */ var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _scc = require('../scc');var _scc2 = _interopRequireDefault(_scc); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importType = require('../core/importType'); var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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);}} var traversed = new Set(); -function routeString(route) { - return route.map(function (s) {return String(s.value) + ':' + String(s.loc.start.line);}).join('=>'); -} - module.exports = { meta: { type: 'suggestion', @@ -46,11 +41,6 @@ module.exports = { allowUnsafeDynamicCyclicDependency: { description: 'Allow cyclic dependency if there is at least one dynamic import in the chain', type: 'boolean', - 'default': false }, - - disableScc: { - description: 'When true, don\'t calculate a strongly-connected-components graph. SCC is used to reduce the time-complexity of cycle detection, but adds overhead.', - type: 'boolean', 'default': false } })] }, @@ -68,8 +58,6 @@ module.exports = { context);}return ignoreModule;}(); - var scc = options.disableScc ? {} : _scc2['default'].get(myPath, context); - function checkSourceValue(sourceNode, importer) { if (ignoreModule(sourceNode.value)) { return; // ignore external modules @@ -96,7 +84,7 @@ module.exports = { return; // ignore type imports } - var imported = _builder2['default'].get(sourceNode.value, context); + var imported = _ExportMap2['default'].get(sourceNode.value, context); if (imported == null) { return; // no-unresolved territory @@ -106,16 +94,6 @@ module.exports = { return; // no-self-import territory } - /* If we're in the same Strongly Connected Component, - * Then there exists a path from each node in the SCC to every other node in the SCC, - * Then there exists at least one path from them to us and from us to them, - * Then we have a cycle between us. - */ - var hasDependencyCycle = options.disableScc || scc[myPath] === scc[imported.path]; - if (!hasDependencyCycle) { - return; - } - var untraversed = [{ mget: function () {function mget() {return imported;}return mget;}(), route: [] }]; function detectCycle(_ref2) {var mget = _ref2.mget,route = _ref2.route; var m = mget(); @@ -124,9 +102,6 @@ module.exports = { traversed.add(m.path);var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { for (var _iterator = m.imports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref3 = _step.value;var _ref4 = _slicedToArray(_ref3, 2);var path = _ref4[0];var _ref4$ = _ref4[1];var getter = _ref4$.getter;var declarations = _ref4$.declarations; - // If we're in different SCCs, we can't have a circular dependency - if (!options.disableScc && scc[myPath] !== scc[path]) {continue;} - if (traversed.has(path)) {continue;} var toTraverse = [].concat(_toConsumableArray(declarations)).filter(function (_ref5) {var source = _ref5.source,isOnlyImportingTypes = _ref5.isOnlyImportingTypes;return !ignoreModule(source.value) // Ignore only type imports @@ -175,4 +150,9 @@ module.exports = { }return ProgramExit;}() }); }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJyb3V0ZVN0cmluZyIsInJvdXRlIiwibWFwIiwicyIsInZhbHVlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwibWF4RGVwdGgiLCJhbnlPZiIsIm1pbmltdW0iLCJpZ25vcmVFeHRlcm5hbCIsImFsbG93VW5zYWZlRHluYW1pY0N5Y2xpY0RlcGVuZGVuY3kiLCJkaXNhYmxlU2NjIiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJzY2MiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwiZ2V0IiwiY2hlY2tTb3VyY2VWYWx1ZSIsInNvdXJjZU5vZGUiLCJpbXBvcnRlciIsImNhbGxlZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJpbXBvcnRlZCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJwYXRoIiwiaGFzRGVwZW5kZW5jeUN5Y2xlIiwidW50cmF2ZXJzZWQiLCJtZ2V0IiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiT2JqZWN0IiwiYXNzaWduIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJzb0JBQUE7Ozs7O0FBS0Es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L0IsUUFBZixFQUF5QjhCLE9BQXpCO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsYUFBT0UsT0FBT0MsTUFBUCxDQUFjLGdDQUFjbkMsZ0JBQWQsRUFBZ0NYLFFBQVFJLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBaEMsQ0FBZCxFQUFtRTtBQUN4RSxzQkFEd0Usc0NBQ3ZEO0FBQ2YvQixzQkFBVTBFLEtBQVY7QUFDRCxXQUh1RSx3QkFBbkUsQ0FBUDs7QUFLRCxLQTlKYyxtQkFBakIiLCJmaWxlIjoibm8tY3ljbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG5vIGltcG9ydGVkIG1vZHVsZSBpbXBvcnRzIHRoZSBsaW50ZWQgbW9kdWxlLlxuICogQGF1dGhvciBCZW4gTW9zaGVyXG4gKi9cblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIGZyb20gJy4uL3NjYyc7XG5pbXBvcnQgeyBpc0V4dGVybmFsTW9kdWxlIH0gZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCB0cmF2ZXJzZWQgPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBhIG1vZHVsZSBmcm9tIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEgZGVwZW5kZW5jeSBwYXRoIGJhY2sgdG8gaXRzZWxmLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWN5Y2xlJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFttYWtlT3B0aW9uc1NjaGVtYSh7XG4gICAgICBtYXhEZXB0aDoge1xuICAgICAgICBhbnlPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWF4aW11bSBkZXBlbmRlbmN5IGRlcHRoIHRvIHRyYXZlcnNlJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnVtOiBbJ+KIniddLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpZ25vcmVFeHRlcm5hbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ2lnbm9yZSBleHRlcm5hbCBtb2R1bGVzJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxsb3cgY3ljbGljIGRlcGVuZGVuY3kgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGR5bmFtaWMgaW1wb3J0IGluIHRoZSBjaGFpbicsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVNjYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZW4gdHJ1ZSwgZG9uXFwndCBjYWxjdWxhdGUgYSBzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyBncmFwaC4gU0NDIGlzIHVzZWQgdG8gcmVkdWNlIHRoZSB0aW1lLWNvbXBsZXhpdHkgb2YgY3ljbGUgZGV0ZWN0aW9uLCBidXQgYWRkcyBvdmVyaGVhZC4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBjb25zdCBzY2MgPSBvcHRpb25zLmRpc2FibGVTY2MgPyB7fSA6IFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZ2V0KG15UGF0aCwgY29udGV4dCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydE1hcEJ1aWxkZXIuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICAvKiBJZiB3ZSdyZSBpbiB0aGUgc2FtZSBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50LFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYSBwYXRoIGZyb20gZWFjaCBub2RlIGluIHRoZSBTQ0MgdG8gZXZlcnkgb3RoZXIgbm9kZSBpbiB0aGUgU0NDLFxuICAgICAgICogVGhlbiB0aGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lIHBhdGggZnJvbSB0aGVtIHRvIHVzIGFuZCBmcm9tIHVzIHRvIHRoZW0sXG4gICAgICAgKiBUaGVuIHdlIGhhdmUgYSBjeWNsZSBiZXR3ZWVuIHVzLlxuICAgICAgICovXG4gICAgICBjb25zdCBoYXNEZXBlbmRlbmN5Q3ljbGUgPSBvcHRpb25zLmRpc2FibGVTY2MgfHwgc2NjW215UGF0aF0gPT09IHNjY1tpbXBvcnRlZC5wYXRoXTtcbiAgICAgIGlmICghaGFzRGVwZW5kZW5jeUN5Y2xlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW50cmF2ZXJzZWQgPSBbeyBtZ2V0OiAoKSA9PiBpbXBvcnRlZCwgcm91dGU6IFtdIH1dO1xuICAgICAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGUoeyBtZ2V0LCByb3V0ZSB9KSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZ2V0KCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKG0ucGF0aCkpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRyYXZlcnNlZC5hZGQobS5wYXRoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCB7IGdldHRlciwgZGVjbGFyYXRpb25zIH1dIG9mIG0uaW1wb3J0cykge1xuICAgICAgICAgIC8vIElmIHdlJ3JlIGluIGRpZmZlcmVudCBTQ0NzLCB3ZSBjYW4ndCBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICAgIGlmICghb3B0aW9ucy5kaXNhYmxlU2NjICYmIHNjY1tteVBhdGhdICE9PSBzY2NbcGF0aF0pIHsgY29udGludWU7IH1cblxuICAgICAgICAgIGlmICh0cmF2ZXJzZWQuaGFzKHBhdGgpKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi5kZWNsYXJhdGlvbnNdLmZpbHRlcigoeyBzb3VyY2UsIGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpZ25vcmVNb2R1bGUoc291cmNlLnZhbHVlKVxuICAgICAgICAgICAgLy8gSWdub3JlIG9ubHkgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgICAmJiAhaXNPbmx5SW1wb3J0aW5nVHlwZXMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8qXG4gICAgICAgICAgSWYgY3ljbGljIGRlcGVuZGVuY3kgaXMgYWxsb3dlZCB2aWEgZHluYW1pYyBpbXBvcnQsIHNraXAgY2hlY2tpbmcgaWYgYW55IG1vZHVsZSBpcyBpbXBvcnRlZCBkeW5hbWljYWxseVxuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeSAmJiB0b1RyYXZlcnNlLnNvbWUoKGQpID0+IGQuZHluYW1pYykpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgIE9ubHkgcmVwb3J0IGFzIGEgY3ljbGUgaWYgdGhlcmUgYXJlIGFueSBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGNvbnNpZGVyZWQgYnlcbiAgICAgICAgICB0aGUgcnVsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICAgICAgICBhLnRzOlxuICAgICAgICAgIGltcG9ydCB7IGZvbyB9IGZyb20gJy4vYicgLy8gc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBhcyBhIGN5Y2xlXG5cbiAgICAgICAgICBiLnRzOlxuICAgICAgICAgIGltcG9ydCB0eXBlIHsgQmFyIH0gZnJvbSAnLi9hJ1xuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBhdGggPT09IG15UGF0aCAmJiB0b1RyYXZlcnNlLmxlbmd0aCA+IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgICBpZiAocm91dGUubGVuZ3RoICsgMSA8IG1heERlcHRoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgc291cmNlIH0gb2YgdG9UcmF2ZXJzZSkge1xuICAgICAgICAgICAgICB1bnRyYXZlcnNlZC5wdXNoKHsgbWdldDogZ2V0dGVyLCByb3V0ZTogcm91dGUuY29uY2F0KHNvdXJjZSkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICh1bnRyYXZlcnNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB1bnRyYXZlcnNlZC5zaGlmdCgpOyAvLyBiZnMhXG4gICAgICAgIGlmIChkZXRlY3RDeWNsZShuZXh0KSkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXh0LnJvdXRlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYERlcGVuZGVuY3kgY3ljbGUgdmlhICR7cm91dGVTdHJpbmcobmV4dC5yb3V0ZSl9YFxuICAgICAgICAgICAgOiAnRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZC4nO1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltcG9ydGVyLCBtZXNzYWdlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtb2R1bGVWaXNpdG9yKGNoZWNrU291cmNlVmFsdWUsIGNvbnRleHQub3B0aW9uc1swXSksIHtcbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICB0cmF2ZXJzZWQuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG59O1xuIl19 \ No newline at end of file + + +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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJ0cmF2ZXJzZWQiLCJTZXQiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsIm1heERlcHRoIiwiYW55T2YiLCJtaW5pbXVtIiwiaWdub3JlRXh0ZXJuYWwiLCJhbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5IiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJjaGVja1NvdXJjZVZhbHVlIiwic291cmNlTm9kZSIsImltcG9ydGVyIiwidmFsdWUiLCJjYWxsZWUiLCJpbXBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5IiwiaW1wb3J0ZWQiLCJFeHBvcnRzIiwiZ2V0IiwicGF0aCIsInVudHJhdmVyc2VkIiwibWdldCIsInJvdXRlIiwiZGV0ZWN0Q3ljbGUiLCJtIiwiaGFzIiwiYWRkIiwiaW1wb3J0cyIsImdldHRlciIsImRlY2xhcmF0aW9ucyIsInRvVHJhdmVyc2UiLCJmaWx0ZXIiLCJzb3VyY2UiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsInNvbWUiLCJkIiwiZHluYW1pYyIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJuZXh0Iiwic2hpZnQiLCJtZXNzYWdlIiwicm91dGVTdHJpbmciLCJyZXBvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJjbGVhciIsIm1hcCIsInMiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJqb2luIl0sIm1hcHBpbmdzIjoic29CQUFBOzs7OztBQUtBLHNEO0FBQ0EseUM7QUFDQTtBQUNBLGtFO0FBQ0EscUM7O0FBRUEsSUFBTUEsWUFBWSxJQUFJQyxHQUFKLEVBQWxCOztBQUVBQyxPQUFPQyxPQUFQLEdB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TUFBWixHQUFxQixDQUE1QixFQUErQjtBQUM3QixjQUFNRyxPQUFPcEIsWUFBWXFCLEtBQVosRUFBYixDQUQ2QixDQUNLO0FBQ2xDLGNBQUlsQixZQUFZaUIsSUFBWixDQUFKLEVBQXVCO0FBQ3JCLGdCQUFNRSxVQUFVRixLQUFLbEIsS0FBTCxDQUFXZSxNQUFYLEdBQW9CLENBQXBCO0FBQ1lNLHdCQUFZSCxLQUFLbEIsS0FBakIsQ0FEWjtBQUVaLHdDQUZKO0FBR0F0QixvQkFBUTRDLE1BQVIsQ0FBZWxDLFFBQWYsRUFBeUJnQyxPQUF6QjtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUVELGFBQU9HLE9BQU9DLE1BQVAsQ0FBYyxnQ0FBY3RDLGdCQUFkLEVBQWdDUixRQUFRSSxPQUFSLENBQWdCLENBQWhCLENBQWhDLENBQWQsRUFBbUU7QUFDeEUsc0JBRHdFLHNDQUN2RDtBQUNmckIsc0JBQVVnRSxLQUFWO0FBQ0QsV0FIdUUsd0JBQW5FLENBQVA7O0FBS0QsS0ExSWMsbUJBQWpCOzs7QUE2SUEsU0FBU0osV0FBVCxDQUFxQnJCLEtBQXJCLEVBQTRCO0FBQzFCLFNBQU9BLE1BQU0wQixHQUFOLENBQVUsVUFBQ0MsQ0FBRCxpQkFBVUEsRUFBRXRDLEtBQVosaUJBQXFCc0MsRUFBRUMsR0FBRixDQUFNQyxLQUFOLENBQVlDLElBQWpDLEdBQVYsRUFBbURDLElBQW5ELENBQXdELElBQXhELENBQVA7QUFDRCIsImZpbGUiOiJuby1jeWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbm8gaW1wb3J0ZWQgbW9kdWxlIGltcG9ydHMgdGhlIGxpbnRlZCBtb2R1bGUuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxNb2R1bGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmNvbnN0IHRyYXZlcnNlZCA9IG5ldyBTZXQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdGF0aWMgYW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgYSBtb2R1bGUgZnJvbSBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBhIGRlcGVuZGVuY3kgcGF0aCBiYWNrIHRvIGl0c2VsZi4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1jeWNsZScpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbbWFrZU9wdGlvbnNTY2hlbWEoe1xuICAgICAgbWF4RGVwdGg6IHtcbiAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ21heGltdW0gZGVwZW5kZW5jeSBkZXB0aCB0byB0cmF2ZXJzZScsXG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW51bTogWyfiiJ4nXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgaWdub3JlRXh0ZXJuYWw6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgZXh0ZXJuYWwgbW9kdWxlcycsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYWxsb3dVbnNhZmVEeW5hbWljQ3ljbGljRGVwZW5kZW5jeToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93IGN5Y2xpYyBkZXBlbmRlbmN5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkeW5hbWljIGltcG9ydCBpbiB0aGUgY2hhaW4nLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBteVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBpZiAobXlQYXRoID09PSAnPHRleHQ+JykgeyByZXR1cm4ge307IH0gLy8gY2FuJ3QgY3ljbGUtY2hlY2sgYSBub24tZmlsZVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IHR5cGVvZiBvcHRpb25zLm1heERlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMubWF4RGVwdGggOiBJbmZpbml0eTtcbiAgICBjb25zdCBpZ25vcmVNb2R1bGUgPSAobmFtZSkgPT4gb3B0aW9ucy5pZ25vcmVFeHRlcm5hbCAmJiBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgbmFtZSxcbiAgICAgIHJlc29sdmUobmFtZSwgY29udGV4dCksXG4gICAgICBjb250ZXh0LFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZU5vZGUsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoaWdub3JlTW9kdWxlKHNvdXJjZU5vZGUudmFsdWUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIG1vZHVsZXNcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIChcbiAgICAgICAgICAvLyBJZ25vcmUgYGltcG9ydCgpYFxuICAgICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnRFeHByZXNzaW9uJ1xuICAgICAgICAgIC8vIGByZXF1aXJlKClgIGNhbGxzIGFyZSBhbHdheXMgY2hlY2tlZCAoaWYgcG9zc2libGUpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBpbXBvcnRlci5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIGN5Y2xlIHZpYSBkeW5hbWljIGltcG9ydCBhbGxvd2VkIGJ5IGNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVyLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgKFxuICAgICAgICAgIC8vIGltcG9ydCB0eXBlIHsgRm9vIH0gKFRTIGFuZCBGbG93KVxuICAgICAgICAgIGltcG9ydGVyLmltcG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgICAgIC8vIGltcG9ydCB7IHR5cGUgRm9vIH0gKEZsb3cpXG4gICAgICAgICAgfHwgaW1wb3J0ZXIuc3BlY2lmaWVycy5ldmVyeSgoeyBpbXBvcnRLaW5kIH0pID0+IGltcG9ydEtpbmQgPT09ICd0eXBlJylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjsgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IEV4cG9ydHMuZ2V0KHNvdXJjZU5vZGUudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47ICAvLyBuby11bnJlc29sdmVkIHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWQucGF0aCA9PT0gbXlQYXRoKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXNlbGYtaW1wb3J0IHRlcnJpdG9yeVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bnRyYXZlcnNlZCA9IFt7IG1nZXQ6ICgpID0+IGltcG9ydGVkLCByb3V0ZTogW10gfV07XG4gICAgICBmdW5jdGlvbiBkZXRlY3RDeWNsZSh7IG1nZXQsIHJvdXRlIH0pIHtcbiAgICAgICAgY29uc3QgbSA9IG1nZXQoKTtcbiAgICAgICAgaWYgKG0gPT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMobS5wYXRoKSkgeyByZXR1cm47IH1cbiAgICAgICAgdHJhdmVyc2VkLmFkZChtLnBhdGgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHsgZ2V0dGVyLCBkZWNsYXJhdGlvbnMgfV0gb2YgbS5pbXBvcnRzKSB7XG4gICAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMocGF0aCkpIHsgY29udGludWU7IH1cbiAgICAgICAgICBjb25zdCB0b1RyYXZlcnNlID0gWy4uLmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IHNvdXJjZSwgaXNPbmx5SW1wb3J0aW5nVHlwZXMgfSkgPT4gIWlnbm9yZU1vZHVsZShzb3VyY2UudmFsdWUpXG4gICAgICAgICAgICAvLyBJZ25vcmUgb25seSB0eXBlIGltcG9ydHNcbiAgICAgICAgICAgICYmICFpc09ubHlJbXBvcnRpbmdUeXBlcyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLypcbiAgICAgICAgICBJZiBjeWNsaWMgZGVwZW5kZW5jeSBpcyBhbGxvd2VkIHZpYSBkeW5hbWljIGltcG9ydCwgc2tpcCBjaGVja2luZyBpZiBhbnkgbW9kdWxlIGlzIGltcG9ydGVkIGR5bmFtaWNhbGx5XG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAob3B0aW9ucy5hbGxvd1Vuc2FmZUR5bmFtaWNDeWNsaWNEZXBlbmRlbmN5ICYmIHRvVHJhdmVyc2Uuc29tZSgoZCkgPT4gZC5keW5hbWljKSkgeyByZXR1cm47IH1cblxuICAgICAgICAgIC8qXG4gICAgICAgICAgT25seSByZXBvcnQgYXMgYSBjeWNsZSBpZiB0aGVyZSBhcmUgYW55IGltcG9ydCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgY29uc2lkZXJlZCBieVxuICAgICAgICAgIHRoZSBydWxlLiBGb3IgZXhhbXBsZTpcblxuICAgICAgICAgIGEudHM6XG4gICAgICAgICAgaW1wb3J0IHsgZm9vIH0gZnJvbSAnLi9iJyAvLyBzaG91bGQgbm90IGJlIHJlcG9ydGVkIGFzIGEgY3ljbGVcblxuICAgICAgICAgIGIudHM6XG4gICAgICAgICAgaW1wb3J0IHR5cGUgeyBCYXIgfSBmcm9tICcuL2EnXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAocGF0aCA9PT0gbXlQYXRoICYmIHRvVHJhdmVyc2UubGVuZ3RoID4gMCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAgIGlmIChyb3V0ZS5sZW5ndGggKyAxIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBzb3VyY2UgfSBvZiB0b1RyYXZlcnNlKSB7XG4gICAgICAgICAgICAgIHVudHJhdmVyc2VkLnB1c2goeyBtZ2V0OiBnZXR0ZXIsIHJvdXRlOiByb3V0ZS5jb25jYXQoc291cmNlKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHVudHJhdmVyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHVudHJhdmVyc2VkLnNoaWZ0KCk7IC8vIGJmcyFcbiAgICAgICAgaWYgKGRldGVjdEN5Y2xlKG5leHQpKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5leHQucm91dGUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgRGVwZW5kZW5jeSBjeWNsZSB2aWEgJHtyb3V0ZVN0cmluZyhuZXh0LnJvdXRlKX1gXG4gICAgICAgICAgICA6ICdEZXBlbmRlbmN5IGN5Y2xlIGRldGVjdGVkLic7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1wb3J0ZXIsIG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgY29udGV4dC5vcHRpb25zWzBdKSwge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIHRyYXZlcnNlZC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAoKHMpID0+IGAke3MudmFsdWV9OiR7cy5sb2Muc3RhcnQubGluZX1gKS5qb2luKCc9PicpO1xufVxuIl19 \ 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 27a40843fe..3aea5b5ca0 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js @@ -1,6 +1,5 @@ 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _exportMap = require('../exportMap');var _exportMap2 = _interopRequireDefault(_exportMap); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} function message(deprecation) { @@ -32,7 +31,7 @@ module.exports = { if (node.type !== 'ImportDeclaration') {return;} if (node.source == null) {return;} // local export, ignore - var imports = _builder2['default'].get(node.source.value, context); + var imports = _ExportMap2['default'].get(node.source.value, context); if (imports == null) {return;} var moduleDeprecation = imports.doc && imports.doc.tags.find(function (t) {return t.title === 'deprecated';}); @@ -115,7 +114,7 @@ module.exports = { var namespace = namespaces.get(dereference.object.name); var namepath = [dereference.object.name]; // while property is namespace and parent is member expression, keep validating - while (namespace instanceof _exportMap2['default'] && dereference.type === 'MemberExpression') { + while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') { // ignore computed parts for now if (dereference.computed) {return;} @@ -136,4 +135,4 @@ module.exports = { }return MemberExpression;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRNYXBCdWlsZGVyIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsIkV4cG9ydE1hcCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSwrQztBQUNBLHlDO0FBQ0EscUM7O0FBRUEsU0FBU0EsT0FBVCxDQUFpQkMsV0FBakIsRUFBOEI7QUFDNUIseUJBQW9CQSxZQUFZQyxXQUFaLGlCQUErQkQsWUFBWUMsV0FBM0MsSUFBMkQsR0FBL0U7QUFDRDs7QUFFRCxTQUFTQyxjQUFULENBQXdCQyxRQUF4QixFQUFrQztBQUNoQyxNQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDQSxTQUFTQyxHQUEzQixFQUFnQyxDQUFFLE9BQVM7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RUFBa0UsQ0FBRSxPQUFTOztBQUU3RTtBQUNBLGdCQUFJRSxZQUFZdEIsV0FBV00sR0FBWCxDQUFleUIsWUFBWUMsTUFBWixDQUFtQlosSUFBbEMsQ0FBaEI7QUFDQSxnQkFBTWEsV0FBVyxDQUFDRixZQUFZQyxNQUFaLENBQW1CWixJQUFwQixDQUFqQjtBQUNBO0FBQ0EsbUJBQU9FLHFCQUFxQlksc0JBQXJCLElBQWtDSCxZQUFZeEMsSUFBWixLQUFxQixrQkFBOUQsRUFBa0Y7QUFDaEY7QUFDQSxrQkFBSXdDLFlBQVlJLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1yRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0csSUFBVCxDQUFjTCxZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgRXhwb3J0TWFwIGZyb20gJy4uL2V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gbWVzc2FnZShkZXByZWNhdGlvbikge1xuICByZXR1cm4gYERlcHJlY2F0ZWQke2RlcHJlY2F0aW9uLmRlc2NyaXB0aW9uID8gYDogJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbn1gIDogJy4nfWA7XG59XG5cbmZ1bmN0aW9uIGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKSB7XG4gIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLmRvYykgeyByZXR1cm47IH1cblxuICByZXR1cm4gbWV0YWRhdGEuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGltcG9ydGVkIG5hbWVzIG1hcmtlZCB3aXRoIGBAZGVwcmVjYXRlZGAgZG9jdW1lbnRhdGlvbiB0YWcuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZGVwcmVjYXRlZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcHJlY2F0ZWQgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7IHJldHVybjsgfVxuICAgICAgaWYgKG5vZGUuc291cmNlID09IG51bGwpIHsgcmV0dXJuOyB9IC8vIGxvY2FsIGV4cG9ydCwgaWdub3JlXG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRNYXBCdWlsZGVyLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBtb2R1bGVEZXByZWNhdGlvbiA9IGltcG9ydHMuZG9jICYmIGltcG9ydHMuZG9jLnRhZ3MuZmluZCgodCkgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbiAgICAgIGlmIChtb2R1bGVEZXByZWNhdGlvbikge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2U6IG1lc3NhZ2UobW9kdWxlRGVwcmVjYXRpb24pIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBsZXQgaW1wb3J0ZWQ7IGxldCBsb2NhbDtcbiAgICAgICAgc3dpdGNoIChpbS50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOiB7XG4gICAgICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KGltLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0ltcG9ydFNwZWNpZmllcic6XG4gICAgICAgICAgICBpbXBvcnRlZCA9IGltLmltcG9ydGVkLm5hbWU7XG4gICAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjsgLy8gY2FuJ3QgaGFuZGxlIHRoaXMgb25lXG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bmtub3duIHRoaW5nIGNhbid0IGJlIGRlcHJlY2F0ZWRcbiAgICAgICAgY29uc3QgZXhwb3J0ZWQgPSBpbXBvcnRzLmdldChpbXBvcnRlZCk7XG4gICAgICAgIGlmIChleHBvcnRlZCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGNhcHR1cmUgaW1wb3J0IG9mIGRlZXAgbmFtZXNwYWNlXG4gICAgICAgIGlmIChleHBvcnRlZC5uYW1lc3BhY2UpIHsgbmFtZXNwYWNlcy5zZXQobG9jYWwsIGV4cG9ydGVkLm5hbWVzcGFjZSk7IH1cblxuICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKGltcG9ydHMuZ2V0KGltcG9ydGVkKSk7XG4gICAgICAgIGlmICghZGVwcmVjYXRpb24pIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBpbSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG5cbiAgICAgICAgZGVwcmVjYXRlZC5zZXQobG9jYWwsIGRlcHJlY2F0aW9uKTtcblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFByb2dyYW06ICh7IGJvZHkgfSkgPT4gYm9keS5mb3JFYWNoKGNoZWNrU3BlY2lmaWVycyksXG5cbiAgICAgIElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG5vZGUucGFyZW50LnByb3BlcnR5ID09PSBub2RlKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBoYW5kbGVkIGJ5IE1lbWJlckV4cHJlc3Npb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBzcGVjaWZpZXIgaWRlbnRpZmllcnNcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUuc2xpY2UoMCwgNikgPT09ICdJbXBvcnQnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghZGVwcmVjYXRlZC5oYXMobm9kZS5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBub2RlLm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGVkLmdldChub2RlLm5hbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKGRlcmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5vYmplY3QudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRNYXAgJiYgZGVyZWZlcmVuY2UudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGNvbXB1dGVkIHBhcnRzIGZvciBub3dcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7IGJyZWFrOyB9XG4gICAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihtZXRhZGF0YSk7XG5cbiAgICAgICAgICBpZiAoZGVwcmVjYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogZGVyZWZlcmVuY2UucHJvcGVydHksIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHN0YXNoIGFuZCBwb3BcbiAgICAgICAgICBuYW1lcGF0aC5wdXNoKGRlcmVmZXJlbmNlLnByb3BlcnR5Lm5hbWUpO1xuICAgICAgICAgIG5hbWVzcGFjZSA9IG1ldGFkYXRhLm5hbWVzcGFjZTtcbiAgICAgICAgICBkZXJlZmVyZW5jZSA9IGRlcmVmZXJlbmNlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSx5QztBQUNBLHFDOztBQUVBLFNBQVNBLE9BQVQsQ0FBaUJDLFdBQWpCLEVBQThCO0FBQzVCLHlCQUFvQkEsWUFBWUMsV0FBWixpQkFBK0JELFlBQVlDLFdBQTNDLElBQTJELEdBQS9FO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0MsQ0FBRSxPQUFTOztBQUUzQyxTQUFPRCxTQUFTQyxHQUFULENBQWFD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SUUsWUFBWXRCLFdBQVdNLEdBQVgsQ0FBZXlCLFlBQVlDLE1BQVosQ0FBbUJaLElBQWxDLENBQWhCO0FBQ0EsZ0JBQU1hLFdBQVcsQ0FBQ0YsWUFBWUMsTUFBWixDQUFtQlosSUFBcEIsQ0FBakI7QUFDQTtBQUNBLG1CQUFPRSxxQkFBcUJqQixzQkFBckIsSUFBZ0MwQixZQUFZeEMsSUFBWixLQUFxQixrQkFBNUQsRUFBZ0Y7QUFDOUU7QUFDQSxrQkFBSXdDLFlBQVlHLFFBQWhCLEVBQTBCLENBQUUsT0FBUzs7QUFFckMsa0JBQU1wRCxXQUFXd0MsVUFBVWhCLEdBQVYsQ0FBY3lCLFlBQVlKLFFBQVosQ0FBcUJQLElBQW5DLENBQWpCOztBQUVBLGtCQUFJLENBQUN0QyxRQUFMLEVBQWUsQ0FBRSxNQUFRO0FBQ3pCLGtCQUFNSCxjQUFjRSxlQUFlQyxRQUFmLENBQXBCOztBQUVBLGtCQUFJSCxXQUFKLEVBQWlCO0FBQ2ZrQix3QkFBUVksTUFBUixDQUFlLEVBQUVQLE1BQU02QixZQUFZSixRQUFwQixFQUE4QmpELFNBQVNBLFFBQVFDLFdBQVIsQ0FBdkMsRUFBZjtBQUNEOztBQUVEO0FBQ0FzRCx1QkFBU0UsSUFBVCxDQUFjSixZQUFZSixRQUFaLENBQXFCUCxJQUFuQztBQUNBRSwwQkFBWXhDLFNBQVN3QyxTQUFyQjtBQUNBUyw0QkFBY0EsWUFBWUwsTUFBMUI7QUFDRDtBQUNGLFdBaERJLDZCQUFQOztBQWtERCxLQTFIYyxtQkFBakIiLCJmaWxlIjoibm8tZGVwcmVjYXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWNsYXJlZFNjb3BlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvZGVjbGFyZWRTY29wZSc7XG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIG1lc3NhZ2UoZGVwcmVjYXRpb24pIHtcbiAgcmV0dXJuIGBEZXByZWNhdGVkJHtkZXByZWNhdGlvbi5kZXNjcmlwdGlvbiA/IGA6ICR7ZGVwcmVjYXRpb24uZGVzY3JpcHRpb259YCA6ICcuJ31gO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGlvbihtZXRhZGF0YSkge1xuICBpZiAoIW1ldGFkYXRhIHx8ICFtZXRhZGF0YS5kb2MpIHsgcmV0dXJuOyB9XG5cbiAgcmV0dXJuIG1ldGFkYXRhLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBpbXBvcnRlZCBuYW1lcyBtYXJrZWQgd2l0aCBgQGRlcHJlY2F0ZWRgIGRvY3VtZW50YXRpb24gdGFnLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWRlcHJlY2F0ZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXByZWNhdGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMobm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgeyByZXR1cm47IH1cbiAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSB7IHJldHVybjsgfSAvLyBsb2NhbCBleHBvcnQsIGlnbm9yZVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgbW9kdWxlRGVwcmVjYXRpb24gPSBpbXBvcnRzLmRvYyAmJiBpbXBvcnRzLmRvYy50YWdzLmZpbmQoKHQpID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG4gICAgICBpZiAobW9kdWxlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBtZXNzYWdlKG1vZHVsZURlcHJlY2F0aW9uKSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgbGV0IGltcG9ydGVkOyBsZXQgbG9jYWw7XG4gICAgICAgIHN3aXRjaCAoaW0udHlwZSkge1xuXG4gICAgICAgICAgY2FzZSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzoge1xuICAgICAgICAgICAgaWYgKCFpbXBvcnRzLnNpemUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBuYW1lc3BhY2VzLnNldChpbS5sb2NhbC5uYW1lLCBpbXBvcnRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgICAgICAgIGltcG9ydGVkID0gJ2RlZmF1bHQnO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOlxuICAgICAgICAgICAgaW1wb3J0ZWQgPSBpbS5pbXBvcnRlZC5uYW1lO1xuICAgICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OiByZXR1cm47IC8vIGNhbid0IGhhbmRsZSB0aGlzIG9uZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5rbm93biB0aGluZyBjYW4ndCBiZSBkZXByZWNhdGVkXG4gICAgICAgIGNvbnN0IGV4cG9ydGVkID0gaW1wb3J0cy5nZXQoaW1wb3J0ZWQpO1xuICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBjYXB0dXJlIGltcG9ydCBvZiBkZWVwIG5hbWVzcGFjZVxuICAgICAgICBpZiAoZXhwb3J0ZWQubmFtZXNwYWNlKSB7IG5hbWVzcGFjZXMuc2V0KGxvY2FsLCBleHBvcnRlZC5uYW1lc3BhY2UpOyB9XG5cbiAgICAgICAgY29uc3QgZGVwcmVjYXRpb24gPSBnZXREZXByZWNhdGlvbihpbXBvcnRzLmdldChpbXBvcnRlZCkpO1xuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogaW0sIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuXG4gICAgICAgIGRlcHJlY2F0ZWQuc2V0KGxvY2FsLCBkZXByZWNhdGlvbik7XG5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtOiAoeyBib2R5IH0pID0+IGJvZHkuZm9yRWFjaChjaGVja1NwZWNpZmllcnMpLFxuXG4gICAgICBJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJiBub2RlLnBhcmVudC5wcm9wZXJ0eSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybjsgLy8gaGFuZGxlZCBieSBNZW1iZXJFeHByZXNzaW9uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgc3BlY2lmaWVyIGlkZW50aWZpZXJzXG4gICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlLnNsaWNlKDAsIDYpID09PSAnSW1wb3J0JykgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWRlcHJlY2F0ZWQuaGFzKG5vZGUubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgbm9kZS5uYW1lKSAhPT0gJ21vZHVsZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRlZC5nZXQobm9kZS5uYW1lKSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihkZXJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoZGVyZWZlcmVuY2Uub2JqZWN0LnR5cGUgIT09ICdJZGVudGlmaWVyJykgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpICE9PSAnbW9kdWxlJykgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBnbyBkZWVwXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmdldChkZXJlZmVyZW5jZS5vYmplY3QubmFtZSk7XG4gICAgICAgIGNvbnN0IG5hbWVwYXRoID0gW2RlcmVmZXJlbmNlLm9iamVjdC5uYW1lXTtcbiAgICAgICAgLy8gd2hpbGUgcHJvcGVydHkgaXMgbmFtZXNwYWNlIGFuZCBwYXJlbnQgaXMgbWVtYmVyIGV4cHJlc3Npb24sIGtlZXAgdmFsaWRhdGluZ1xuICAgICAgICB3aGlsZSAobmFtZXNwYWNlIGluc3RhbmNlb2YgRXhwb3J0cyAmJiBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgY29tcHV0ZWQgcGFydHMgZm9yIG5vd1xuICAgICAgICAgIGlmIChkZXJlZmVyZW5jZS5jb21wdXRlZCkgeyByZXR1cm47IH1cblxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEpIHsgYnJlYWs7IH1cbiAgICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKTtcblxuICAgICAgICAgIGlmIChkZXByZWNhdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3Rhc2ggYW5kIHBvcFxuICAgICAgICAgIG5hbWVwYXRoLnB1c2goZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgbmFtZXNwYWNlID0gbWV0YWRhdGEubmFtZXNwYWNlO1xuICAgICAgICAgIGRlcmVmZXJlbmNlID0gZGVyZWZlcmVuY2UucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 585a17d873..8b512d083b 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js @@ -9,68 +9,28 @@ try { typescriptPkg = require('typescript/package.json'); // eslint-disable-line import/no-extraneous-dependencies } catch (e) {/**/} -function isPunctuator(node, value) { - return node.type === 'Punctuator' && node.value === value; -} - -// Get the name of the default import of `node`, if any. -function getDefaultImportName(node) { - var defaultSpecifier = node.specifiers. - find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); - return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; -} - -// Checks whether `node` has a namespace import. -function hasNamespace(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); - return specifiers.length > 0; -} - -// Checks whether `node` has any non-default specifiers. -function hasSpecifiers(node) { - var specifiers = node.specifiers. - filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); - return specifiers.length > 0; -} - -// Checks whether `node` has a comment (that ends) on the previous line or on -// the same line as `node` (starts). -function hasCommentBefore(node, sourceCode) { - return sourceCode.getCommentsBefore(node). - some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); -} - -// Checks whether `node` has a comment (that starts) on the same line as `node` -// (ends). -function hasCommentAfter(node, sourceCode) { - return sourceCode.getCommentsAfter(node). - some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); -} +function checkImports(imported, context) {var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try { + for (var _iterator = imported.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var _ref = _step.value;var _ref2 = _slicedToArray(_ref, 2);var _module = _ref2[0];var nodes = _ref2[1]; + if (nodes.length > 1) { + var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( + nodes),first = _nodes[0],rest = _nodes.slice(1); + var sourceCode = context.getSourceCode(); + var fix = getFix(first, rest, sourceCode, context); -// Checks whether `node` has any comments _inside,_ except inside the `{...}` -// part (if any). -function hasCommentInsideNonSpecifiers(node, sourceCode) { - var tokens = sourceCode.getTokens(node); - var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); - var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); - // Slice away the first token, since we're no looking for comments _before_ - // `node` (only inside). If there's a `{...}` part, look for comments before - // the `{`, but not before the `}` (hence the `+1`s). - var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? - tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : - tokens.slice(1); - return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); -} + context.report({ + node: first.source, + message: message, + fix: fix // Attach the autofix (if any) to the first import. + });var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try { -// It's not obvious what the user wants to do with comments associated with -// duplicate imports, so skip imports with comments when autofixing. -function hasProblematicComments(node, sourceCode) { - return ( - hasCommentBefore(node, sourceCode) || - hasCommentAfter(node, sourceCode) || - hasCommentInsideNonSpecifiers(node, sourceCode)); + for (var _iterator2 = rest[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; + context.report({ + node: node.source, + message: message }); + }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + } + }} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}} } function getFix(first, rest, sourceCode, context) { @@ -132,7 +92,6 @@ function getFix(first, rest, sourceCode, context) { var shouldAddDefault = getDefaultImportName(first) == null && defaultImportNames.size === 1; var shouldAddSpecifiers = specifiers.length > 0; var shouldRemoveUnnecessary = unnecessaryImports.length > 0; - var preferInline = context.options[0] && context.options[0]['prefer-inline']; if (!(shouldAddDefault || shouldAddSpecifiers || shouldRemoveUnnecessary)) { return undefined; @@ -155,16 +114,17 @@ function getFix(first, rest, sourceCode, context) { specifiers.reduce( - function (_ref, specifier) {var _ref2 = _slicedToArray(_ref, 3),result = _ref2[0],needsComma = _ref2[1],existingIdentifiers = _ref2[2]; + function (_ref3, specifier) {var _ref4 = _slicedToArray(_ref3, 3),result = _ref4[0],needsComma = _ref4[1],existingIdentifiers = _ref4[2]; var isTypeSpecifier = specifier.importNode.importKind === 'type'; - // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. + var preferInline = context.options[0] && context.options[0]['prefer-inline']; + // a user might set prefer-inline but not have a supporting TypeScript version. Flow does not support inline types so this should fail in that case as well. if (preferInline && (!typescriptPkg || !_semver2['default'].satisfies(typescriptPkg.version, '>= 4.5'))) { throw new Error('Your version of TypeScript does not support inline type imports.'); } // Add *only* the new identifiers that don't already exist, and track any new identifiers so we don't add them again in the next loop - var _specifier$identifier = specifier.identifiers.reduce(function (_ref3, cur) {var _ref4 = _slicedToArray(_ref3, 2),text = _ref4[0],set = _ref4[1]; + var _specifier$identifier = specifier.identifiers.reduce(function (_ref5, cur) {var _ref6 = _slicedToArray(_ref5, 2),text = _ref6[0],set = _ref6[1]; var trimmed = cur.trim(); // Trim whitespace before/after to compare to our set of existing identifiers var curWithType = trimmed.length > 0 && preferInline && isTypeSpecifier ? 'type ' + String(cur) : cur; if (existingIdentifiers.has(trimmed)) { @@ -186,18 +146,6 @@ function getFix(first, rest, sourceCode, context) { var fixes = []; - if (shouldAddSpecifiers && preferInline && first.importKind === 'type') { - // `import type {a} from './foo'` → `import {type a} from './foo'` - var typeIdentifierToken = tokens.find(function (token) {return token.type === 'Identifier' && token.value === 'type';}); - fixes.push(fixer.removeRange([typeIdentifierToken.range[0], typeIdentifierToken.range[1] + 1])); - - tokens. - filter(function (token) {return firstExistingIdentifiers.has(token.value);}). - forEach(function (identifier) { - fixes.push(fixer.replaceTextRange([identifier.range[0], identifier.range[1]], 'type ' + String(identifier.value))); - }); - } - if (shouldAddDefault && openBrace == null && shouldAddSpecifiers) { // `import './foo'` → `import def, {...} from './foo'` fixes.push( @@ -227,7 +175,7 @@ function getFix(first, rest, sourceCode, context) { } // Remove imports whose specifiers have been moved into the first import. - var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {for (var _iterator = specifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var specifier = _step.value; + var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {for (var _iterator3 = specifiers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var specifier = _step3.value; var importNode = specifier.importNode; fixes.push(fixer.remove(importNode)); @@ -241,7 +189,7 @@ function getFix(first, rest, sourceCode, context) { // Remove imports whose default import has been moved to the first import, // and side-effect-only imports that are unnecessary due to the first // import. - } catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {for (var _iterator2 = unnecessaryImports[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var node = _step2.value; + } catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try {for (var _iterator4 = unnecessaryImports[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; fixes.push(fixer.remove(node)); var charAfterImportRange = [node.range[1], node.range[1] + 1]; @@ -249,34 +197,74 @@ function getFix(first, rest, sourceCode, context) { if (charAfterImport === '\n') { fixes.push(fixer.removeRange(charAfterImportRange)); } - }} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}} + }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} return fixes; }; } -function checkImports(imported, context) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try { - for (var _iterator3 = imported.entries()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _ref5 = _step3.value;var _ref6 = _slicedToArray(_ref5, 2);var _module = _ref6[0];var nodes = _ref6[1]; - if (nodes.length > 1) { - var message = '\'' + String(_module) + '\' imported multiple times.';var _nodes = _toArray( - nodes),first = _nodes[0],rest = _nodes.slice(1); - var sourceCode = context.getSourceCode(); - var fix = getFix(first, rest, sourceCode, context); +function isPunctuator(node, value) { + return node.type === 'Punctuator' && node.value === value; +} - context.report({ - node: first.source, - message: message, - fix: fix // Attach the autofix (if any) to the first import. - });var _iteratorNormalCompletion4 = true;var _didIteratorError4 = false;var _iteratorError4 = undefined;try { +// Get the name of the default import of `node`, if any. +function getDefaultImportName(node) { + var defaultSpecifier = node.specifiers. + find(function (specifier) {return specifier.type === 'ImportDefaultSpecifier';}); + return defaultSpecifier != null ? defaultSpecifier.local.name : undefined; +} - for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {var node = _step4.value; - context.report({ - node: node.source, - message: message }); +// Checks whether `node` has a namespace import. +function hasNamespace(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportNamespaceSpecifier';}); + return specifiers.length > 0; +} - }} catch (err) {_didIteratorError4 = true;_iteratorError4 = err;} finally {try {if (!_iteratorNormalCompletion4 && _iterator4['return']) {_iterator4['return']();}} finally {if (_didIteratorError4) {throw _iteratorError4;}}} - } - }} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}} +// Checks whether `node` has any non-default specifiers. +function hasSpecifiers(node) { + var specifiers = node.specifiers. + filter(function (specifier) {return specifier.type === 'ImportSpecifier';}); + return specifiers.length > 0; +} + +// It's not obvious what the user wants to do with comments associated with +// duplicate imports, so skip imports with comments when autofixing. +function hasProblematicComments(node, sourceCode) { + return ( + hasCommentBefore(node, sourceCode) || + hasCommentAfter(node, sourceCode) || + hasCommentInsideNonSpecifiers(node, sourceCode)); + +} + +// Checks whether `node` has a comment (that ends) on the previous line or on +// the same line as `node` (starts). +function hasCommentBefore(node, sourceCode) { + return sourceCode.getCommentsBefore(node). + some(function (comment) {return comment.loc.end.line >= node.loc.start.line - 1;}); +} + +// Checks whether `node` has a comment (that starts) on the same line as `node` +// (ends). +function hasCommentAfter(node, sourceCode) { + return sourceCode.getCommentsAfter(node). + some(function (comment) {return comment.loc.start.line === node.loc.end.line;}); +} + +// Checks whether `node` has any comments _inside,_ except inside the `{...}` +// part (if any). +function hasCommentInsideNonSpecifiers(node, sourceCode) { + var tokens = sourceCode.getTokens(node); + var openBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '{');}); + var closeBraceIndex = tokens.findIndex(function (token) {return isPunctuator(token, '}');}); + // Slice away the first token, since we're no looking for comments _before_ + // `node` (only inside). If there's a `{...}` part, look for comments before + // the `{`, but not before the `}` (hence the `+1`s). + var someTokens = openBraceIndex >= 0 && closeBraceIndex >= 0 ? + tokens.slice(1, openBraceIndex + 1).concat(tokens.slice(closeBraceIndex + 1)) : + tokens.slice(1); + return someTokens.some(function (token) {return sourceCode.getCommentsBefore(token).length > 0;}); } module.exports = { @@ -363,4 +351,4 @@ module.exports = { }return ProgramExit;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImlzUHVuY3R1YXRvciIsIm5vZGUiLCJ2YWx1ZSIsInR5cGUiLCJnZXREZWZhdWx0SW1wb3J0TmFtZSIsImRlZmF1bHRTcGVjaWZpZXIiLCJzcGVjaWZpZXJzIiwiZmluZCIsInNwZWNpZmllciIsImxvY2FsIiwibmFtZSIsInVuZGVmaW5lZCIsImhhc05hbWVzcGFjZSIsImZpbHRlciIsImxlbmd0aCIsImhhc1NwZWNpZmllcnMiLCJoYXNDb21tZW50QmVmb3JlIiwic291cmNlQ29kZSIsImdldENvbW1lbnRzQmVmb3JlIiwic29tZSIsImNvbW1lbnQiLCJsb2MiLCJlbmQiLCJsaW5lIiwic3RhcnQiLCJoYXNDb21tZW50QWZ0ZXIiLCJnZXRDb21tZW50c0FmdGVyIiwiaGFzQ29tbWVudEluc2lkZU5vblNwZWNpZmllcnMiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsInRva2VuIiwiY2xvc2VCcmFjZUluZGV4Iiwic29tZVRva2VucyIsInNsaWNlIiwiY29uY2F0IiwiaGFzUHJvYmxlbWF0aWNDb21tZW50cyIsImdldEZpeCIsImZpcnN0IiwicmVzdCIsImNvbnRleHQiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJ4Iiwic2l6ZSIsInJlc3RXaXRob3V0Q29tbWVudHMiLCJtYXAiLCJvcGVuQnJhY2UiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInJhbmdlIiwic3BsaXQiLCJpc0VtcHR5IiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNob3VsZEFkZERlZmF1bHQiLCJzaG91bGRBZGRTcGVjaWZpZXJzIiwic2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkiLCJwcmVmZXJJbmxpbmUiLCJvcHRpb25zIiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwic2VtdmVyIiwic2F0aXNmaWVzIiwidmVyc2lvbiIsIkVycm9yIiwiY3VyIiwic2V0IiwidHJpbW1lZCIsImN1cldpdGhUeXBlIiwiaGFzIiwiYWRkIiwic3BlY2lmaWVyVGV4dCIsInVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzIiwic3BlY2lmaWVyc1RleHQiLCJmaXhlcyIsInR5cGVJZGVudGlmaWVyVG9rZW4iLCJwdXNoIiwicmVtb3ZlUmFuZ2UiLCJmb3JFYWNoIiwiaWRlbnRpZmllciIsInJlcGxhY2VUZXh0UmFuZ2UiLCJpbnNlcnRUZXh0QWZ0ZXIiLCJpbnNlcnRUZXh0QmVmb3JlIiwicmVtb3ZlIiwiY2hhckFmdGVySW1wb3J0UmFuZ2UiLCJjaGFyQWZ0ZXJJbXBvcnQiLCJzdWJzdHJpbmciLCJjaGVja0ltcG9ydHMiLCJpbXBvcnRlZCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsIm1lc3NhZ2UiLCJnZXRTb3VyY2VDb2RlIiwiZml4IiwicmVwb3J0Iiwic291cmNlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiY29uc2lkZXJRdWVyeVN0cmluZyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiIsImRlZmF1bHRSZXNvbHZlciIsInNvdXJjZVBhdGgiLCJyZXNvbHZlciIsInBhcnRzIiwibWF0Y2giLCJtb2R1bGVNYXBzIiwiTWFwIiwiZ2V0SW1wb3J0TWFwIiwibiIsInBhcmVudCIsIm5zSW1wb3J0ZWQiLCJkZWZhdWx0VHlwZXNJbXBvcnRlZCIsIm5hbWVkVHlwZXNJbXBvcnRlZCIsImdldCIsInNwZWMiLCJJbXBvcnREZWNsYXJhdGlvbiIsInJlc29sdmVkUGF0aCIsImltcG9ydE1hcCIsInZhbHVlcyJdLCJtYXBwaW5ncyI6InFvQkFBQSxzRDtBQUNBLGdDO0FBQ0EseUQ7O0FBRUEscUM7O0FBRUEsSUFBSUEsc0JBQUo7QUFDQSxJQUFJO0FBQ0ZBLGtCQUFnQkMsUUFBUSx5QkFBUixDQUFoQixDQURFLENBQ2tEO0FBQ3JELENBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVUsQ0FBRSxJQUFNOztBQUVwQixTQUFTQyxZQUFULENBQXNCQyxJQUF0QixFQUE0QkMsS0FBNUIsRUFBbUM7QUFDakMsU0FBT0QsS0FBS0UsSUFBTCxLQUFjLFlBQWQsSUFBOEJGLEtBQUtDLEtBQUwsS0FBZUEsS0FBcEQ7QUFDRDs7QUFFRDtBQUNBLFNBQVNFLG9CQUFULENBQThCSCxJQUE5QixFQUFvQztBQUNsQyxNQUFNSSxtQkFBbUJKLEtBQUtLLFVBQUw7QUFDdEJDLE1BRHNCLENBQ2pCLFVBQUNDLFNBQUQsVUFBZUEsVUFBVUwsSUFBVixLQUFtQix3QkFBbEMsRUFEaUIsQ0FBekI7QUFFQSxTQUFPRSxvQkFBb0IsSUFBcEIsR0FBMkJBLGlCQUFpQkksS0FBakIsQ0FBdUJDLElBQWxELEdBQXlEQyxTQUFoRTtBQUNEOztBQUVEO0FBQ0EsU0FBU0MsWUFBVCxDQUFzQlgsSUFBdEIsRUFBNEI7QUFDMUIsTUFBTUssYUFBYUwsS0FBS0ssVUFBTDtBQUNoQk8sUUFEZ0IsQ0FDVCxVQUFDTCxTQUFELFVBQWVBLFVBQVVMLElBQVYsS0FBbUIsMEJBQWxDLEVBRFMsQ0FBbkI7QUFFQSxTQUFPRyxXQUFXUSxNQUFYLEdBQW9CLENBQTNCO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTQyxhQUFULENBQXVCZCxJQUF2QixFQUE2QjtBQUMzQixNQUFNSyxhQUFh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QWEySCxDQUFiLElBQWtCeEYsSUFBSTBGLFVBQXRCLEdBQW1DMUYsSUFBSTBELFFBQTlDO0FBQ0Q7O0FBRUQsYUFBTztBQUNMcUMseUJBREssMENBQ2FQLENBRGIsRUFDZ0I7QUFDbkI7QUFDQSxnQkFBTVEsZUFBZWQsU0FBU00sRUFBRXRCLE1BQUYsQ0FBUy9HLEtBQWxCLENBQXJCO0FBQ0EsZ0JBQU04SSxZQUFZVixhQUFhQyxDQUFiLENBQWxCOztBQUVBLGdCQUFJUyxVQUFVMUQsR0FBVixDQUFjeUQsWUFBZCxDQUFKLEVBQWlDO0FBQy9CQyx3QkFBVUosR0FBVixDQUFjRyxZQUFkLEVBQTRCbEQsSUFBNUIsQ0FBaUMwQyxDQUFqQztBQUNELGFBRkQsTUFFTztBQUNMUyx3QkFBVTdELEdBQVYsQ0FBYzRELFlBQWQsRUFBNEIsQ0FBQ1IsQ0FBRCxDQUE1QjtBQUNEO0FBQ0YsV0FYSTs7QUFhTCxzQkFiSyxzQ0FhWTtBQUNmLG9DQUFrQkgsV0FBV2EsTUFBWCxFQUFsQixtSUFBdUMsS0FBNUJsRyxHQUE0QjtBQUNyQ3lELDZCQUFhekQsSUFBSTBELFFBQWpCLEVBQTJCaEUsT0FBM0I7QUFDQStELDZCQUFhekQsSUFBSTBGLFVBQWpCLEVBQTZCaEcsT0FBN0I7QUFDQStELDZCQUFhekQsSUFBSTJGLG9CQUFqQixFQUF1Q2pHLE9BQXZDO0FBQ0ErRCw2QkFBYXpELElBQUk0RixrQkFBakIsRUFBcUNsRyxPQUFyQztBQUNELGVBTmM7QUFPaEIsV0FwQkksd0JBQVA7O0FBc0JELEtBbkZjLG1CQUFqQiIsImZpbGUiOiJuby1kdXBsaWNhdGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBpc1B1bmN0dWF0b3Iobm9kZSwgdmFsdWUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1B1bmN0dWF0b3InICYmIG5vZGUudmFsdWUgPT09IHZhbHVlO1xufVxuXG4vLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgaW1wb3J0IG9mIGBub2RlYCwgaWYgYW55LlxuZnVuY3Rpb24gZ2V0RGVmYXVsdEltcG9ydE5hbWUobm9kZSkge1xuICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbmQoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyk7XG4gIHJldHVybiBkZWZhdWx0U3BlY2lmaWVyICE9IG51bGwgPyBkZWZhdWx0U3BlY2lmaWVyLmxvY2FsLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBuYW1lc3BhY2UgaW1wb3J0LlxuZnVuY3Rpb24gaGFzTmFtZXNwYWNlKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgbm9uLWRlZmF1bHQgc3BlY2lmaWVycy5cbmZ1bmN0aW9uIGhhc1NwZWNpZmllcnMobm9kZSkge1xuICBjb25zdCBzcGVjaWZpZXJzID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbHRlcigoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuICByZXR1cm4gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBlbmRzKSBvbiB0aGUgcHJldmlvdXMgbGluZSBvciBvblxuLy8gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWAgKHN0YXJ0cykuXG5mdW5jdGlvbiBoYXNDb21tZW50QmVmb3JlKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2MuZW5kLmxpbmUgPj0gbm9kZS5sb2Muc3RhcnQubGluZSAtIDEpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBzdGFydHMpIG9uIHRoZSBzYW1lIGxpbmUgYXMgYG5vZGVgXG4vLyAoZW5kcykuXG5mdW5jdGlvbiBoYXNDb21tZW50QWZ0ZXIobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0FmdGVyKG5vZGUpXG4gICAgLnNvbWUoKGNvbW1lbnQpID0+IGNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgPT09IG5vZGUubG9jLmVuZC5saW5lKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgY29tbWVudHMgX2luc2lkZSxfIGV4Y2VwdCBpbnNpZGUgdGhlIGB7Li4ufWBcbi8vIHBhcnQgKGlmIGFueSkuXG5mdW5jdGlvbiBoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICBjb25zdCBjbG9zZUJyYWNlSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgLy8gU2xpY2UgYXdheSB0aGUgZmlyc3QgdG9rZW4sIHNpbmNlIHdlJ3JlIG5vIGxvb2tpbmcgZm9yIGNvbW1lbnRzIF9iZWZvcmVfXG4gIC8vIGBub2RlYCAob25seSBpbnNpZGUpLiBJZiB0aGVyZSdzIGEgYHsuLi59YCBwYXJ0LCBsb29rIGZvciBjb21tZW50cyBiZWZvcmVcbiAgLy8gdGhlIGB7YCwgYnV0IG5vdCBiZWZvcmUgdGhlIGB9YCAoaGVuY2UgdGhlIGArMWBzKS5cbiAgY29uc3Qgc29tZVRva2VucyA9IG9wZW5CcmFjZUluZGV4ID49IDAgJiYgY2xvc2VCcmFjZUluZGV4ID49IDBcbiAgICA/IHRva2Vucy5zbGljZSgxLCBvcGVuQnJhY2VJbmRleCArIDEpLmNvbmNhdCh0b2tlbnMuc2xpY2UoY2xvc2VCcmFjZUluZGV4ICsgMSkpXG4gICAgOiB0b2tlbnMuc2xpY2UoMSk7XG4gIHJldHVybiBzb21lVG9rZW5zLnNvbWUoKHRva2VuKSA9PiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKHRva2VuKS5sZW5ndGggPiAwKTtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCkge1xuICAvLyBTb3JyeSBFU0xpbnQgPD0gMyB1c2Vycywgbm8gYXV0b2ZpeCBmb3IgeW91LiBBdXRvZml4aW5nIGR1cGxpY2F0ZSBpbXBvcnRzXG4gIC8vIHJlcXVpcmVzIG11bHRpcGxlIGBmaXhlci53aGF0ZXZlcigpYCBjYWxscyBpbiB0aGUgYGZpeGA6IFdlIGJvdGggbmVlZCB0b1xuICAvLyB1cGRhdGUgdGhlIGZpcnN0IG9uZSwgYW5kIHJlbW92ZSB0aGUgcmVzdC4gU3VwcG9ydCBmb3IgbXVsdGlwbGVcbiAgLy8gYGZpeGVyLndoYXRldmVyKClgIGluIGEgc2luZ2xlIGBmaXhgIHdhcyBhZGRlZCBpbiBFU0xpbnQgNC4xLlxuICAvLyBgc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZWAgd2FzIGFkZGVkIGluIDQuMCwgc28gdGhhdCdzIGFuIGVhc3kgdGhpbmcgdG9cbiAgLy8gY2hlY2sgZm9yLlxuICBpZiAodHlwZW9mIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQWRqdXN0aW5nIHRoZSBmaXJzdCBpbXBvcnQgbWlnaHQgbWFrZSBpdCBtdWx0aWxpbmUsIHdoaWNoIGNvdWxkIGJyZWFrXG4gIC8vIGBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVgIGNvbW1lbnRzIGFuZCBzaW1pbGFyLCBzbyBiYWlsIGlmIHRoZSBmaXJzdFxuICAvLyBpbXBvcnQgaGFzIGNvbW1lbnRzLiBBbHNvLCBpZiB0aGUgZmlyc3QgaW1wb3J0IGlzIGBpbXBvcnQgKiBhcyBucyBmcm9tXG4gIC8vICcuL2ZvbydgIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uXG4gIGlmIChoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKGZpcnN0LCBzb3VyY2VDb2RlKSB8fCBoYXNOYW1lc3BhY2UoZmlyc3QpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRJbXBvcnROYW1lcyA9IG5ldyBTZXQoXG4gICAgZmxhdE1hcChbXS5jb25jYXQoZmlyc3QsIHJlc3QgfHwgW10pLCAoeCkgPT4gZ2V0RGVmYXVsdEltcG9ydE5hbWUoeCkgfHwgW10pLFxuICApO1xuXG4gIC8vIEJhaWwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGRpZmZlcmVudCBkZWZhdWx0IGltcG9ydCBuYW1lcyDigJMgaXQncyB1cCB0byB0aGVcbiAgLy8gdXNlciB0byBjaG9vc2Ugd2hpY2ggb25lIHRvIGtlZXAuXG4gIGlmIChkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA+IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTGVhdmUgaXQgdG8gdGhlIHVzZXIgdG8gaGFuZGxlIGNvbW1lbnRzLiBBbHNvIHNraXAgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgaW1wb3J0cywgc2luY2UgdGhleSBjYW5ub3QgYmUgbWVyZ2VkIGludG8gYW5vdGhlciBpbXBvcnQuXG4gIGNvbnN0IHJlc3RXaXRob3V0Q29tbWVudHMgPSByZXN0LmZpbHRlcigobm9kZSkgPT4gIWhhc1Byb2JsZW1hdGljQ29tbWVudHMobm9kZSwgc291cmNlQ29kZSkgJiYgIWhhc05hbWVzcGFjZShub2RlKSk7XG5cbiAgY29uc3Qgc3BlY2lmaWVycyA9IHJlc3RXaXRob3V0Q29tbWVudHNcbiAgICAubWFwKChub2RlKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBzb3VyY2VDb2RlLmdldFRva2Vucyhub2RlKTtcbiAgICAgIGNvbnN0IG9wZW5CcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgICAgIGNvbnN0IGNsb3NlQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ30nKSk7XG5cbiAgICAgIGlmIChvcGVuQnJhY2UgPT0gbnVsbCB8fCBjbG9zZUJyYWNlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW1wb3J0Tm9kZTogbm9kZSxcbiAgICAgICAgaWRlbnRpZmllcnM6IHNvdXJjZUNvZGUudGV4dC5zbGljZShvcGVuQnJhY2UucmFuZ2VbMV0sIGNsb3NlQnJhY2UucmFuZ2VbMF0pLnNwbGl0KCcsJyksIC8vIFNwbGl0IHRoZSB0ZXh0IGludG8gc2VwYXJhdGUgaWRlbnRpZmllcnMgKHJldGFpbmluZyBhbnkgd2hpdGVzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIpXG4gICAgICAgIGlzRW1wdHk6ICFoYXNTcGVjaWZpZXJzKG5vZGUpLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgY29uc3QgdW5uZWNlc3NhcnlJbXBvcnRzID0gcmVzdFdpdGhvdXRDb21tZW50cy5maWx0ZXIoKG5vZGUpID0+ICFoYXNTcGVjaWZpZXJzKG5vZGUpXG4gICAgJiYgIWhhc05hbWVzcGFjZShub2RlKVxuICAgICYmICFzcGVjaWZpZXJzLnNvbWUoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydE5vZGUgPT09IG5vZGUpLFxuICApO1xuXG4gIGNvbnN0IHNob3VsZEFkZERlZmF1bHQgPSBnZXREZWZhdWx0SW1wb3J0TmFtZShmaXJzdCkgPT0gbnVsbCAmJiBkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA9PT0gMTtcbiAgY29uc3Qgc2hvdWxkQWRkU3BlY2lmaWVycyA9IHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkgPSB1bm5lY2Vzc2FyeUltcG9ydHMubGVuZ3RoID4gMDtcbiAgY29uc3QgcHJlZmVySW5saW5lID0gY29udGV4dC5vcHRpb25zWzBdICYmIGNvbnRleHQub3B0aW9uc1swXVsncHJlZmVyLWlubGluZSddO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICAvLyBhIHVzZXIgbWlnaHQgc2V0IHByZWZlci1pbmxpbmUgYnV0IG5vdCBoYXZlIGEgc3VwcG9ydGluZyBUeXBlU2NyaXB0IHZlcnNpb24uIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMgJiYgcHJlZmVySW5saW5lICYmIGZpcnN0LmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgLy8gYGltcG9ydCB0eXBlIHthfSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IHt0eXBlIGF9IGZyb20gJy4vZm9vJ2BcbiAgICAgIGNvbnN0IHR5cGVJZGVudGlmaWVyVG9rZW4gPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IHRva2VuLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3R5cGUnKTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoW3R5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMF0sIHR5cGVJZGVudGlmaWVyVG9rZW4ucmFuZ2VbMV0gKyAxXSkpO1xuXG4gICAgICB0b2tlbnNcbiAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IGZpcnN0RXhpc3RpbmdJZGVudGlmaWVycy5oYXModG9rZW4udmFsdWUpKVxuICAgICAgICAuZm9yRWFjaCgoaWRlbnRpZmllcikgPT4ge1xuICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHRSYW5nZShbaWRlbnRpZmllci5yYW5nZVswXSwgaWRlbnRpZmllci5yYW5nZVsxXV0sIGB0eXBlICR7aWRlbnRpZmllci52YWx1ZX1gKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIC8vIGBpbXBvcnQgJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKFxuICAgICAgICBmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSwgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiAhc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSBmcm9tYCkpO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgIT0gbnVsbCAmJiBjbG9zZUJyYWNlICE9IG51bGwpIHtcbiAgICAgIC8vIGBpbXBvcnQgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0sYCkpO1xuICAgICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiBzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoZmlyc3Quc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3Quc3BlY2lmaWVyc1swXSwgYCwgeyR7c3BlY2lmaWVyc1RleHR9fWApKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShjbG9zZUJyYWNlLCBzcGVjaWZpZXJzVGV4dCkpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIHNwZWNpZmllcnMgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGZpcnN0IGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBzcGVjaWZpZXJzKSB7XG4gICAgICBjb25zdCBpbXBvcnROb2RlID0gc3BlY2lmaWVyLmltcG9ydE5vZGU7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShpbXBvcnROb2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW2ltcG9ydE5vZGUucmFuZ2VbMV0sIGltcG9ydE5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaW1wb3J0cyB3aG9zZSBkZWZhdWx0IGltcG9ydCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QgaW1wb3J0LFxuICAgIC8vIGFuZCBzaWRlLWVmZmVjdC1vbmx5IGltcG9ydHMgdGhhdCBhcmUgdW5uZWNlc3NhcnkgZHVlIHRvIHRoZSBmaXJzdFxuICAgIC8vIGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdW5uZWNlc3NhcnlJbXBvcnRzKSB7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShub2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW25vZGUucmFuZ2VbMV0sIG5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZml4ZXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW1wb3J0cyhpbXBvcnRlZCwgY29udGV4dCkge1xuICBmb3IgKGNvbnN0IFttb2R1bGUsIG5vZGVzXSBvZiBpbXBvcnRlZC5lbnRyaWVzKCkpIHtcbiAgICBpZiAobm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAnJHttb2R1bGV9JyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcy5gO1xuICAgICAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IG5vZGVzO1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgZml4ID0gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBmaXJzdC5zb3VyY2UsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGZpeCwgLy8gQXR0YWNoIHRoZSBhdXRvZml4IChpZiBhbnkpIHRvIHRoZSBmaXJzdCBpbXBvcnQuXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlc3QpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IG5vZGUuc291cmNlLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbInR5cGVzY3JpcHRQa2ciLCJyZXF1aXJlIiwiZSIsImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJjb25jYXQiLCJ4IiwiZ2V0RGVmYXVsdEltcG9ydE5hbWUiLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsImZpbHRlciIsInNwZWNpZmllcnMiLCJtYXAiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwidG9rZW4iLCJpc1B1bmN0dWF0b3IiLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsImlkZW50aWZpZXJzIiwidGV4dCIsInNsaWNlIiwicmFuZ2UiLCJzcGxpdCIsImlzRW1wdHkiLCJoYXNTcGVjaWZpZXJzIiwiQm9vbGVhbiIsInVubmVjZXNzYXJ5SW1wb3J0cyIsInNvbWUiLCJzcGVjaWZpZXIiLCJzaG91bGRBZGREZWZhdWx0Iiwic2hvdWxkQWRkU3BlY2lmaWVycyIsInNob3VsZFJlbW92ZVVubmVjZXNzYXJ5IiwiZml4ZXIiLCJmaXJzdFRva2VuIiwiZ2V0Rmlyc3RUb2tlbiIsImRlZmF1bHRJbXBvcnROYW1lIiwiZmlyc3RIYXNUcmFpbGluZ0NvbW1hIiwiZ2V0VG9rZW5CZWZvcmUiLCJmaXJzdElzRW1wdHkiLCJmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMiLCJ0cmltIiwicmVkdWNlIiwicmVzdWx0IiwibmVlZHNDb21tYSIsImV4aXN0aW5nSWRlbnRpZmllcnMiLCJpc1R5cGVTcGVjaWZpZXIiLCJpbXBvcnRLaW5kIiwicHJlZmVySW5saW5lIiwib3B0aW9ucyIsInNlbXZlciIsInNhdGlzZmllcyIsInZlcnNpb24iLCJFcnJvciIsImN1ciIsInNldCIsInRyaW1tZWQiLCJjdXJXaXRoVHlwZSIsImhhcyIsImFkZCIsInNwZWNpZmllclRleHQiLCJ1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVycyIsInNwZWNpZmllcnNUZXh0IiwiZml4ZXMiLCJwdXNoIiwiaW5zZXJ0VGV4dEFmdGVyIiwiaW5zZXJ0VGV4dEJlZm9yZSIsInJlbW92ZSIsImNoYXJBZnRlckltcG9ydFJhbmdlIiwiY2hhckFmdGVySW1wb3J0Iiwic3Vic3RyaW5nIiwicmVtb3ZlUmFuZ2UiLCJ2YWx1ZSIsInR5cGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwibG9jYWwiLCJuYW1lIiwiaGFzQ29tbWVudEJlZm9yZSIsImhhc0NvbW1lbnRBZnRlciIsImhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzIiwiY29tbWVudCIsImxvYyIsImVuZCIsImxpbmUiLCJzdGFydCIsImdldENvbW1lbnRzQWZ0ZXIiLCJvcGVuQnJhY2VJbmRleCIsImZpbmRJbmRleCIsImNsb3NlQnJhY2VJbmRleCIsInNvbWVUb2tlbnMiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwiZGVmYXVsdFJlc29sdmVyIiwic291cmNlUGF0aCIsInJlc29sdmVyIiwicGFydHMiLCJtYXRjaCIsIm1vZHVsZU1hcHMiLCJNYXAiLCJnZXRJbXBvcnRNYXAiLCJuIiwicGFyZW50IiwibnNJbXBvcnRlZCIsImRlZmF1bHRUeXBlc0ltcG9ydGVkIiwibmFtZWRUeXBlc0ltcG9ydGVkIiwiZ2V0Iiwic3BlYyIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EsZ0M7QUFDQSx5RDs7QUFFQSxxQzs7QUFFQSxJQUFJQSxzQkFBSjtBQUNBLElBQUk7QUFDRkEsa0JBQWdCQyxRQUFRLHlCQUFSLENBQWhCLENBREUsQ0FDa0Q7QUFDckQsQ0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVSxDQUFFLElBQU07O0FBRXBCLFNBQVNDLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUN2Qyx5QkFBOEJELFNBQVNFLE9BQVQsRUFBOUIsOEhBQWtELGdFQUF0Q0MsT0FBc0MsZ0JBQTlCQyxLQUE4QjtBQUNoRCxVQUFJQSxNQUFNQyxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsWUFBTUMsd0JBQWNILE9BQWQsaUNBQU4sQ0FEb0I7QUFFS0MsYUFGTCxFQUViRyxLQUZhLGFBRUhDLElBRkc7QUFHcEIsWUFBTUMsYUFBYVIsUUFBUVMsYUFBUixFQUFuQjtBQUNBLFlBQU1DLE1BQU1DLE9BQU9MLEtBQVAsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsRUFBZ0NSLE9BQWhDLENBQVo7O0FBRUFBLGdCQUFRWSxNQUFSLENBQWU7QUFDYkMsZ0JBQU1QLE1BQU1RLE1BREM7QUFFYlQsMEJBRmE7QUFHYkssa0JBSGEsQ0FHUjtBQUhRLFNBQWYsRUFOb0I7O0FBWXBCLGdDQUFtQkgsSUFBbkIsbUlBQXlCLEtBQWRNLElBQWM7QUFDdkJiLG9CQUFRWSxNQUFSLENBQWU7QUFDYkMsb0JBQU1BLEtBQUtDLE1BREU7QUFFYlQsOEJBRmEsRUFBZjs7QUFJRCxXQWpCbUI7QUFrQnJCO0FBQ0YsS0FyQnNDO0FBc0J4Qzs7QUFFRCxTQUFTTSxNQUFULENBQWdCTCxLQUFoQixFQUF1QkMsSUFBdkIsRUFBNkJDLFVBQTdCLEVBQXlDUixPQUF6QyxFQUFrRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJLE9BQU9RLFdBQVdPLGlCQUFsQixLQUF3QyxVQUE1QyxFQUF3RDtBQUN0RCxXQUFPQyxTQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJQyx1QkFBdUJYLEtBQXZCLEVBQThCRSxVQUE5QixLQUE2Q1UsYUFBYVosS0FBYixDQUFqRCxFQUFzRTtBQUNwRSxXQUFPVSxTQUFQO0FBQ0Q7O0FBRUQsTUFBTUcscUJBQXFCLElBQUlDLEdBQUo7QUFDekIsbUNBQVEsR0FBR0MsTUFBSCxDQUFVZixLQUFWLEVBQWlCQyxRQUFRLEVBQXpCLENBQVIsRUFBc0MsVUFBQ2UsQ0FBRCxVQUFPQyxxQkFBcUJELENBQXJCLEtBQTJCLEVBQWxDLEVBQXRDLENBRHlCLENBQTNCOzs7QUFJQTtBQUNBO0FBQ0EsTUFBSUgsbUJBQW1CSyxJQUFuQixHQUEwQixDQUE5QixFQUFpQztBQUMvQixXQUFPUixTQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBLE1BQU1TLHNCQUFzQmxCLEtBQUttQixNQUFMLENBQVksVUFBQ2IsSUFBRCxVQUFVLENBQUNJLHVCQUF1QkosSUFBdkIsRUFBNkJMLFVBQTdCLENBQUQsSUFBNkMsQ0FBQ1UsYUFBYUwsSUFBYixDQUF4RCxFQUFaLENBQTVCOztBQUVBLE1BQU1jLGFBQWFGO0FBQ2hCRyxLQURnQixDQUNaLFVBQUNmLElBQUQsRUFBVTtBQUNiLFFBQU1nQixTQUFTckIsV0FBV3NCLFNBQVgsQ0FBcUJqQixJQUFyQixDQUFmO0FBQ0EsUUFBTWtCLFlBQVlGLE9BQU9HLElBQVAsQ0FBWSxVQUFDQyxLQUFELFVBQVdDLGFBQWFELEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFaLENBQWxCO0FBQ0EsUUFBTUUsYUFBYU4sT0FBT0csSUFBUCxDQUFZLFVBQUNDLEtBQUQsVUFBV0MsYUFBYUQsS0FBYixFQUFvQixHQUFwQixDQUFYLEVBQVosQ0FBbkI7O0FBRUEsUUFBSUYsYUFBYSxJQUFiLElBQXFCSSxjQUFjLElBQXZDLEVBQTZDO0FBQzNDLGFBQU9uQixTQUFQO0FBQ0Q7O0FBRUQsV0FBTztBQUNMb0Isa0JBQVl2QixJQURQO0FBRUx3QixtQkFBYTdCLFdBQVc4QixJQUFYLENBQWdCQyxLQUFoQixDQUFzQlIsVUFBVVMsS0FBVixDQUFnQixDQUFoQixDQUF0QixFQUEwQ0wsV0FBV0ssS0FBWCxDQUFpQixDQUFqQixDQUExQyxFQUErREMsS0FBL0QsQ0FBcUUsR0FBckUsQ0FGUixFQUVtRjtBQUN4RkMsZUFBUyxDQUFDQyxjQUFjOUIsSUFBZCxDQUhMLEVBQVA7O0FBS0QsR0FmZ0I7QUFnQmhCYSxRQWhCZ0IsQ0FnQlRrQixPQWhCUyxDQUFuQjs7QUFrQkEsTUFBTUMscUJBQXFCcEIsb0JBQW9CQyxNQUFwQixDQUEyQixVQUFDYixJQUFELFVBQVUsQ0FBQzhCLGNBQWM5QixJQUFkLENBQUQ7QUFDM0QsS0FBQ0ssYUFBYUwsSUFBYixDQUQwRDtBQUUzRCxLQUFDYyxXQUFXbUIsSUFBWCxDQUFnQixVQUFDQyxTQUFELFVBQWVBLFVBQVVYLFVBQVYsS0FBeUJ2QixJQUF4QyxFQUFoQixDQUZnRCxFQUEzQixDQUEzQjs7O0FBS0EsTUFBTW1DLG1CQUFtQnpCLHFCQUFxQmpCLEtBQXJCLEtBQStCLElBQS9CLElBQXVDYSxtQkFBbUJLLElBQW5CLEtBQTRCLENBQTVGO0FBQ0EsTUFBTXlCLHNCQUFzQnRCLFdBQVd2QixNQUFYLEdBQW9CLENBQWhEO0FBQ0EsTUFBTThDLDBCQUEwQkwsbUJBQW1CekMsTUFBbkIsR0FBNEIsQ0FBNUQ7O0FBRUEsTUFBSSxFQUFFNEMsb0JBQW9CQyxtQkFBcEIsSUFBMkNDLHVCQUE3QyxDQUFKLEVBQTJFO0FBQ3pFLFdBQU9sQyxTQUFQO0FBQ0Q7O0FBRUQsU0FBTyxVQUFDbUMsS0FBRCxFQUFXO0FBQ2hCLFFBQU10QixTQUFTckIsV0FBV3NCLFNBQVgsQ0FBcUJ4QixLQUFyQixDQUFmO0FBQ0EsUUFBTXlCLFlBQVlGLE9BQU9HLElBQVAsQ0FBWSxVQUFDQyxLQUFELFVBQVdDLGFBQWFELEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFaLENBQWxCO0FBQ0EsUUFBTUUsYUFBYU4sT0FBT0csSUFBUCxDQUFZLFVBQUNDLEtBQUQsVUFBV0MsYUFBYUQsS0FBYixFQUFvQixHQUFwQixDQUFYLEVBQVosQ0FBbkI7QUFDQSxRQUFNbUIsYUFBYTVDLFdBQVc2QyxhQUFYLENBQXlCL0MsS0FBekIsQ0FBbkIsQ0FKZ0I7QUFLWWEsc0JBTFosS0FLVG1DLGlCQUxTOztBQU9oQixRQUFNQyx3QkFBd0JwQixjQUFjLElBQWQsSUFBc0JELGFBQWExQixXQUFXZ0QsY0FBWCxDQUEwQnJCLFVBQTFCLENBQWIsRUFBb0QsR0FBcEQsQ0FBcEQ7QUFDQSxRQUFNc0IsZUFBZSxDQUFDZCxjQUFjckMsS0FBZCxDQUF0QjtBQUNBLFFBQU1vRCwyQkFBMkJEO0FBQzdCLFFBQUlyQyxHQUFKLEVBRDZCO0FBRTdCLFFBQUlBLEdBQUosQ0FBUVosV0FBVzhCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCUixVQUFVUyxLQUFWLENBQWdCLENBQWhCLENBQXRCLEVBQTBDTCxXQUFXSyxLQUFYLENBQWlCLENBQWpCLENBQTFDO0FBQ1BDLFNBRE8sQ0FDRCxHQURDO0FBRVBiLE9BRk8sQ0FFSCxVQUFDTixDQUFELFVBQU9BLEVBQUVxQyxJQUFGLEVBQVAsRUFGRyxDQUFSLENBRkosQ0FUZ0I7OztBQWdCU2hDLGVBQVdpQyxNQUFYO0FBQ3ZCLHFCQUE0Q2IsU0FBNUMsRUFBMEQsc0NBQXhEYyxNQUF3RCxZQUFoREMsVUFBZ0QsWUFBcENDLG1CQUFvQztBQUN4RCxVQUFNQyxrQkFBa0JqQixVQUFVWCxVQUFWLENBQXFCNkIsVUFBckIsS0FBb0MsTUFBNUQ7O0FBRUEsVUFBTUMsZUFBZWxFLFFBQVFtRSxPQUFSLENBQWdCLENBQWhCLEtBQXNCbkUsUUFBUW1FLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFBbUIsZUFBbkIsQ0FBM0M7QUFDQTtBQUNBLFVBQUlELGlCQUFpQixDQUFDdkUsYUFBRCxJQUFrQixDQUFDeUUsb0JBQU9DLFNBQVAsQ0FBaUIxRSxjQUFjMkUsT0FBL0IsRUFBd0MsUUFBeEMsQ0FBcEMsQ0FBSixFQUE0RjtBQUMxRixjQUFNLElBQUlDLEtBQUosQ0FBVSxrRUFBVixDQUFOO0FBQ0Q7O0FBRUQ7QUFUd0Qsa0NBVUp4QixVQUFVVixXQUFWLENBQXNCdUIsTUFBdEIsQ0FBNkIsaUJBQWNZLEdBQWQsRUFBc0Isc0NBQXBCbEMsSUFBb0IsWUFBZG1DLEdBQWM7QUFDckcsWUFBTUMsVUFBVUYsSUFBSWIsSUFBSixFQUFoQixDQURxRyxDQUN6RTtBQUM1QixZQUFNZ0IsY0FBY0QsUUFBUXRFLE1BQVIsR0FBaUIsQ0FBakIsSUFBc0I4RCxZQUF0QixJQUFzQ0YsZUFBdEMsb0JBQWdFUSxHQUFoRSxJQUF3RUEsR0FBNUY7QUFDQSxZQUFJVCxvQkFBb0JhLEdBQXBCLENBQXdCRixPQUF4QixDQUFKLEVBQXNDO0FBQ3BDLGlCQUFPLENBQUNwQyxJQUFELEVBQU9tQyxHQUFQLENBQVA7QUFDRDtBQUNELGVBQU8sQ0FBQ25DLEtBQUtsQyxNQUFMLEdBQWMsQ0FBZCxVQUFxQmtDLElBQXJCLGlCQUE2QnFDLFdBQTdCLElBQTZDQSxXQUE5QyxFQUEyREYsSUFBSUksR0FBSixDQUFRSCxPQUFSLENBQTNELENBQVA7QUFDRCxPQVBtRCxFQU9qRCxDQUFDLEVBQUQsRUFBS1gsbUJBQUwsQ0FQaUQsQ0FWSSxtRUFVakRlLGFBVmlELDZCQVVsQ0MsMEJBVmtDOztBQW1CeEQsYUFBTztBQUNMakIsb0JBQWMsQ0FBQ2YsVUFBVUwsT0FBekIsSUFBb0NvQyxjQUFjMUUsTUFBZCxHQUF1QixDQUEzRDtBQUNPeUQsWUFEUCxpQkFDaUJpQixhQURqQjtBQUVPakIsWUFGUCxXQUVnQmlCLGFBRmhCLENBREs7QUFJTC9CLGdCQUFVTCxPQUFWLEdBQW9Cb0IsVUFBcEIsR0FBaUMsSUFKNUI7QUFLTGlCLGdDQUxLLENBQVA7O0FBT0QsS0EzQnNCO0FBNEJ2QixLQUFDLEVBQUQsRUFBSyxDQUFDeEIscUJBQUQsSUFBMEIsQ0FBQ0UsWUFBaEMsRUFBOENDLHdCQUE5QyxDQTVCdUIsQ0FoQlQsNkRBZ0JUc0IsY0FoQlM7OztBQStDaEIsUUFBTUMsUUFBUSxFQUFkOztBQUVBLFFBQUlqQyxvQkFBb0JqQixhQUFhLElBQWpDLElBQXlDa0IsbUJBQTdDLEVBQWtFO0FBQ2hFO0FBQ0FnQyxZQUFNQyxJQUFOO0FBQ0UvQixZQUFNZ0MsZUFBTixDQUFzQi9CLFVBQXRCLGVBQXNDRSxpQkFBdEMsbUJBQTZEMEIsY0FBN0QsYUFERjs7QUFHRCxLQUxELE1BS08sSUFBSWhDLG9CQUFvQmpCLGFBQWEsSUFBakMsSUFBeUMsQ0FBQ2tCLG1CQUE5QyxFQUFtRTtBQUN4RTtBQUNBZ0MsWUFBTUMsSUFBTixDQUFXL0IsTUFBTWdDLGVBQU4sQ0FBc0IvQixVQUF0QixlQUFzQ0UsaUJBQXRDLFlBQVg7QUFDRCxLQUhNLE1BR0EsSUFBSU4sb0JBQW9CakIsYUFBYSxJQUFqQyxJQUF5Q0ksY0FBYyxJQUEzRCxFQUFpRTtBQUN0RTtBQUNBOEMsWUFBTUMsSUFBTixDQUFXL0IsTUFBTWdDLGVBQU4sQ0FBc0IvQixVQUF0QixlQUFzQ0UsaUJBQXRDLFFBQVg7QUFDQSxVQUFJTCxtQkFBSixFQUF5QjtBQUN2QjtBQUNBZ0MsY0FBTUMsSUFBTixDQUFXL0IsTUFBTWlDLGdCQUFOLENBQXVCakQsVUFBdkIsRUFBbUM2QyxjQUFuQyxDQUFYO0FBQ0Q7QUFDRixLQVBNLE1BT0EsSUFBSSxDQUFDaEMsZ0JBQUQsSUFBcUJqQixhQUFhLElBQWxDLElBQTBDa0IsbUJBQTlDLEVBQW1FO0FBQ3hFLFVBQUkzQyxNQUFNcUIsVUFBTixDQUFpQnZCLE1BQWpCLEtBQTRCLENBQWhDLEVBQW1DO0FBQ2pDO0FBQ0E2RSxjQUFNQyxJQUFOLENBQVcvQixNQUFNZ0MsZUFBTixDQUFzQi9CLFVBQXRCLGdCQUF1QzRCLGNBQXZDLGFBQVg7QUFDRCxPQUhELE1BR087QUFDTDtBQUNBQyxjQUFNQyxJQUFOLENBQVcvQixNQUFNZ0MsZUFBTixDQUFzQjdFLE1BQU1xQixVQUFOLENBQWlCLENBQWpCLENBQXRCLGlCQUFpRHFELGNBQWpELFFBQVg7QUFDRDtBQUNGLEtBUk0sTUFRQSxJQUFJLENBQUNoQyxnQkFBRCxJQUFxQmpCLGFBQWEsSUFBbEMsSUFBMENJLGNBQWMsSUFBNUQsRUFBa0U7QUFDdkU7QUFDQThDLFlBQU1DLElBQU4sQ0FBVy9CLE1BQU1pQyxnQkFBTixDQUF1QmpELFVBQXZCLEVBQW1DNkMsY0FBbkMsQ0FBWDtBQUNEOztBQUVEO0FBN0VnQiw4R0E4RWhCLHNCQUF3QnJELFVBQXhCLG1JQUFvQyxLQUF6Qm9CLFNBQXlCO0FBQ2xDLFlBQU1YLGFBQWFXLFVBQVVYLFVBQTdCO0FBQ0E2QyxjQUFNQyxJQUFOLENBQVcvQixNQUFNa0MsTUFBTixDQUFhakQsVUFBYixDQUFYOztBQUVBLFlBQU1rRCx1QkFBdUIsQ0FBQ2xELFdBQVdJLEtBQVgsQ0FBaUIsQ0FBakIsQ0FBRCxFQUFzQkosV0FBV0ksS0FBWCxDQUFpQixDQUFqQixJQUFzQixDQUE1QyxDQUE3QjtBQUNBLFlBQU0rQyxrQkFBa0IvRSxXQUFXOEIsSUFBWCxDQUFnQmtELFNBQWhCLENBQTBCRixxQkFBcUIsQ0FBckIsQ0FBMUIsRUFBbURBLHFCQUFxQixDQUFyQixDQUFuRCxDQUF4QjtBQUNBLFlBQUlDLG9CQUFvQixJQUF4QixFQUE4QjtBQUM1Qk4sZ0JBQU1DLElBQU4sQ0FBVy9CLE1BQU1zQyxXQUFOLENBQWtCSCxvQkFBbEIsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQTtBQUNBO0FBM0ZnQiw0VUE0RmhCLHNCQUFtQnpDLGtCQUFuQixtSUFBdUMsS0FBNUJoQyxJQUE0QjtBQUNyQ29FLGNBQU1DLElBQU4sQ0FBVy9CLE1BQU1rQyxNQUFOLENBQWF4RSxJQUFiLENBQVg7O0FBRUEsWUFBTXlFLHVCQUF1QixDQUFDekUsS0FBSzJCLEtBQUwsQ0FBVyxDQUFYLENBQUQsRUFBZ0IzQixLQUFLMkIsS0FBTCxDQUFXLENBQVgsSUFBZ0IsQ0FBaEMsQ0FBN0I7QUFDQSxZQUFNK0Msa0JBQWtCL0UsV0FBVzhCLElBQVgsQ0FBZ0JrRCxTQUFoQixDQUEwQkYscUJBQXFCLENBQXJCLENBQTFCLEVBQW1EQSxxQkFBcUIsQ0FBckIsQ0FBbkQsQ0FBeEI7QUFDQSxZQUFJQyxvQkFBb0IsSUFBeEIsRUFBOEI7QUFDNUJOLGdCQUFNQyxJQUFOLENBQVcvQixNQUFNc0MsV0FBTixDQUFrQkgsb0JBQWxCLENBQVg7QUFDRDtBQUNGLE9BcEdlOztBQXNHaEIsV0FBT0wsS0FBUDtBQUNELEdBdkdEO0FBd0dEOztBQUVELFNBQVMvQyxZQUFULENBQXNCckIsSUFBdEIsRUFBNEI2RSxLQUE1QixFQUFtQztBQUNqQyxTQUFPN0UsS0FBSzhFLElBQUwsS0FBYyxZQUFkLElBQThCOUUsS0FBSzZFLEtBQUwsS0FBZUEsS0FBcEQ7QUFDRDs7QUFFRDtBQUNBLFNBQVNuRSxvQkFBVCxDQUE4QlYsSUFBOUIsRUFBb0M7QUFDbEMsTUFBTStFLG1CQUFtQi9FLEtBQUtjLFVBQUw7QUFDdEJLLE1BRHNCLENBQ2pCLFVBQUNlLFNBQUQsVUFBZUEsVUFBVTRDLElBQVYsS0FBbUIsd0JBQWxDLEVBRGlCLENBQXpCO0FBRUEsU0FBT0Msb0JBQW9CLElBQXBCLEdBQTJCQSxpQkFBaUJDLEtBQWpCLENBQXVCQyxJQUFsRCxHQUF5RDlFLFNBQWhFO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTRSxZQUFULENBQXNCTCxJQUF0QixFQUE0QjtBQUMxQixNQUFNYyxhQUFhZCxLQUFLYyxVQUFMO0FBQ2hCRCxRQURnQixDQUNULFVBQUNxQixTQUFELFVBQWVBLFVBQVU0QyxJQUFWLEtBQW1CLDBCQUFsQyxFQURTLENBQW5CO0FBRUEsU0FBT2hFLFdBQVd2QixNQUFYLEdBQW9CLENBQTNCO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFTdUMsYUFBVCxDQUF1QjlCLElBQXZCLEVBQTZCO0FBQzNCLE1BQU1jLGFBQWFkLEtBQUtjLFVBQUw7QUFDaEJELFFBRGdCLENBQ1QsVUFBQ3FCLFNBQUQsVUFBZUEsVUFBVTRDLElBQVYsS0FBbUIsaUJBQWxDLEVBRFMsQ0FBbkI7QUFFQSxTQUFPaEUsV0FBV3ZCLE1BQVgsR0FBb0IsQ0FBM0I7QUFDRDs7QUFFRDtBQUNBO0FBQ0EsU0FBU2Esc0JBQVQsQ0FBZ0NKLElBQWhDLEVBQXNDTCxVQUF0QyxFQUFrRDtBQUNoRDtBQUNFdUYscUJBQWlCbEYsSUFBakIsRUFBdUJMLFVBQXZCO0FBQ0d3RixvQkFBZ0JuRixJQUFoQixFQUFzQkwsVUFBdEIsQ0FESDtBQUVHeUYsa0NBQThCcEYsSUFBOUIsRUFBb0NMLFVBQXBDLENBSEw7O0FBS0Q7O0FBRUQ7QUFDQTtBQUNBLFNBQVN1RixnQkFBVCxDQUEwQmxGLElBQTFCLEVBQWdDTCxVQUFoQyxFQUE0QztBQUMxQyxTQUFPQSxXQUFXTyxpQkFBWCxDQUE2QkYsSUFBN0I7QUFDSmlDLE1BREksQ0FDQyxVQUFDb0QsT0FBRCxVQUFhQSxRQUFRQyxHQUFSLENBQVlDLEdBQVosQ0FBZ0JDLElBQWhCLElBQXdCeEYsS0FBS3NGLEdBQUwsQ0FBU0csS0FBVCxDQUFlRCxJQUFmLEdBQXNCLENBQTNELEVBREQsQ0FBUDtBQUVEOztBQUVEO0FBQ0E7QUFDQSxTQUFTTCxlQUFULENBQXlCbkYsSUFBekIsRUFBK0JMLFVBQS9CLEVBQTJDO0FBQ3pDLFNBQU9BLFdBQVcrRixnQkFBWCxDQUE0QjFGLElBQTVCO0FBQ0ppQyxNQURJLENBQ0MsVUFBQ29ELE9BQUQsVUFBYUEsUUFBUUMsR0FBUixDQUFZRyxLQUFaLENBQWtCRCxJQUFsQixLQUEyQnhGLEtBQUtzRixHQUFMLENBQVNDLEdBQVQsQ0FBYUMsSUFBckQsRUFERCxDQUFQO0FBRUQ7O0FBRUQ7QUFDQTtBQUNBLFNBQVNKLDZCQUFULENBQXVDcEYsSUFBdkMsRUFBNkNMLFVBQTdDLEVBQXlEO0FBQ3ZELE1BQU1xQixTQUFTckIsV0FBV3NCLFNBQVgsQ0FBcUJqQixJQUFyQixDQUFmO0FBQ0EsTUFBTTJGLGlCQUFpQjNFLE9BQU80RSxTQUFQLENBQWlCLFVBQUN4RSxLQUFELFVBQVdDLGFBQWFELEtBQWIsRUFBb0IsR0FBcEIsQ0FBWCxFQUFqQixDQUF2QjtBQUNBLE1BQU15RSxrQkFBa0I3RSxPQUFPNEUsU0FBUCxDQUFpQixVQUFDeEUsS0FBRCxVQUFXQyxhQUFhRCxLQUFiLEVBQW9CLEdBQXBCLENBQVgsRUFBakIsQ0FBeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNMEUsYUFBYUgsa0JBQWtCLENBQWxCLElBQXVCRSxtQkFBbUIsQ0FBMUM7QUFDZjdFLFNBQU9VLEtBQVAsQ0FBYSxDQUFiLEVBQWdCaUUsaUJBQWlCLENBQWpDLEVBQW9DbkYsTUFBcEMsQ0FBMkNRLE9BQU9VLEtBQVAsQ0FBYW1FLGtCQUFrQixDQUEvQixDQUEzQyxDQURlO0FBRWY3RSxTQUFPVSxLQUFQLENBQWEsQ0FBYixDQUZKO0FBR0EsU0FBT29FLFdBQVc3RCxJQUFYLENBQWdCLFVBQUNiLEtBQUQsVUFBV3pCLFdBQVdPLGlCQUFYLENBQTZCa0IsS0FBN0IsRUFBb0M3QixNQUFwQyxHQUE2QyxDQUF4RCxFQUFoQixDQUFQO0FBQ0Q7O0FBRURGLE9BQU8wRyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSmxCLFVBQU0sU0FERjtBQUVKbUIsVUFBTTtBQUNKQyxnQkFBVSxhQUROO0FBRUpDLG1CQUFhLCtEQUZUO0FBR0pDLFdBQUssMEJBQVEsZUFBUixDQUhELEVBRkY7O0FBT0pDLGFBQVMsTUFQTDtBQVFKQyxZQUFRO0FBQ047QUFDRXhCLFlBQU0sUUFEUjtBQUVFeUIsa0JBQVk7QUFDVkMsNkJBQXFCO0FBQ25CMUIsZ0JBQU0sU0FEYSxFQURYOztBQUlWLHlCQUFpQjtBQUNmQSxnQkFBTSxTQURTLEVBSlAsRUFGZDs7O0FBVUUyQiw0QkFBc0IsS0FWeEIsRUFETSxDQVJKLEVBRFM7Ozs7O0FBeUJmQyxRQXpCZSwrQkF5QlJ2SCxPQXpCUSxFQXlCQztBQUNkO0FBQ0EsVUFBTXdILDRCQUE0QnhILFFBQVFtRSxPQUFSLENBQWdCLENBQWhCO0FBQzdCbkUsY0FBUW1FLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFBbUJrRCxtQkFEeEI7QUFFQSxVQUFNSSwrQkFBa0IsU0FBbEJBLGVBQWtCLENBQUNDLFVBQUQsVUFBZ0IsMEJBQVFBLFVBQVIsRUFBb0IxSCxPQUFwQixLQUFnQzBILFVBQWhELEVBQWxCLDBCQUFOO0FBQ0EsVUFBTUMsV0FBV0gsNEJBQTRCLFVBQUNFLFVBQUQsRUFBZ0I7QUFDM0QsWUFBTUUsUUFBUUYsV0FBV0csS0FBWCxDQUFpQixpQkFBakIsQ0FBZDtBQUNBLFlBQUksQ0FBQ0QsS0FBTCxFQUFZO0FBQ1YsaUJBQU9ILGdCQUFnQkMsVUFBaEIsQ0FBUDtBQUNEO0FBQ0Qsc0JBQVVELGdCQUFnQkcsTUFBTSxDQUFOLENBQWhCLENBQVYsaUJBQXVDQSxNQUFNLENBQU4sQ0FBdkM7QUFDRCxPQU5nQixHQU1iSCxlQU5KOztBQVFBLFVBQU1LLGFBQWEsSUFBSUMsR0FBSixFQUFuQjs7QUFFQSxlQUFTQyxZQUFULENBQXNCQyxDQUF0QixFQUF5QjtBQUN2QixZQUFJLENBQUNILFdBQVdsRCxHQUFYLENBQWVxRCxFQUFFQyxNQUFqQixDQUFMLEVBQStCO0FBQzdCSixxQkFBV3JELEdBQVgsQ0FBZXdELEVBQUVDLE1BQWpCLEVBQXlCO0FBQ3ZCbkksc0JBQVUsSUFBSWdJLEdBQUosRUFEYTtBQUV2Qkksd0JBQVksSUFBSUosR0FBSixFQUZXO0FBR3ZCSyxrQ0FBc0IsSUFBSUwsR0FBSixFQUhDO0FBSXZCTSxnQ0FBb0IsSUFBSU4sR0FBSixFQUpHLEVBQXpCOztBQU1EO0FBQ0QsWUFBTW5HLE1BQU1rRyxXQUFXUSxHQUFYLENBQWVMLEVBQUVDLE1BQWpCLENBQVo7QUFDQSxZQUFNaEUsZUFBZWxFLFFBQVFtRSxPQUFSLENBQWdCLENBQWhCLEtBQXNCbkUsUUFBUW1FLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFBbUIsZUFBbkIsQ0FBM0M7QUFDQSxZQUFJLENBQUNELFlBQUQsSUFBaUIrRCxFQUFFaEUsVUFBRixLQUFpQixNQUF0QyxFQUE4QztBQUM1QyxpQkFBT2dFLEVBQUV0RyxVQUFGLENBQWF2QixNQUFiLEdBQXNCLENBQXRCLElBQTJCNkgsRUFBRXRHLFVBQUYsQ0FBYSxDQUFiLEVBQWdCZ0UsSUFBaEIsS0FBeUIsd0JBQXBELEdBQStFL0QsSUFBSXdHLG9CQUFuRixHQUEwR3hHLElBQUl5RyxrQkFBckg7QUFDRDtBQUNELFlBQUksQ0FBQ25FLFlBQUQsSUFBaUIrRCxFQUFFdEcsVUFBRixDQUFhbUIsSUFBYixDQUFrQixVQUFDeUYsSUFBRCxVQUFVQSxLQUFLdEUsVUFBTCxLQUFvQixNQUE5QixFQUFsQixDQUFyQixFQUE4RTtBQUM1RSxpQkFBT3JDLElBQUl5RyxrQkFBWDtBQUNEOztBQUVELGVBQU9uSCxhQUFhK0csQ0FBYixJQUFrQnJHLElBQUl1RyxVQUF0QixHQUFtQ3ZHLElBQUk3QixRQUE5QztBQUNEOztBQUVELGFBQU87QUFDTHlJLHlCQURLLDBDQUNhUCxDQURiLEVBQ2dCO0FBQ25CO0FBQ0EsZ0JBQU1RLGVBQWVkLFNBQVNNLEVBQUVuSCxNQUFGLENBQVM0RSxLQUFsQixDQUFyQjtBQUNBLGdCQUFNZ0QsWUFBWVYsYUFBYUMsQ0FBYixDQUFsQjs7QUFFQSxnQkFBSVMsVUFBVTlELEdBQVYsQ0FBYzZELFlBQWQsQ0FBSixFQUFpQztBQUMvQkMsd0JBQVVKLEdBQVYsQ0FBY0csWUFBZCxFQUE0QnZELElBQTVCLENBQWlDK0MsQ0FBakM7QUFDRCxhQUZELE1BRU87QUFDTFMsd0JBQVVqRSxHQUFWLENBQWNnRSxZQUFkLEVBQTRCLENBQUNSLENBQUQsQ0FBNUI7QUFDRDtBQUNGLFdBWEk7O0FBYUwsc0JBYkssc0NBYVk7QUFDZixvQ0FBa0JILFdBQVdhLE1BQVgsRUFBbEIsbUlBQXVDLEtBQTVCL0csR0FBNEI7QUFDckM5Qiw2QkFBYThCLElBQUk3QixRQUFqQixFQUEyQkMsT0FBM0I7QUFDQUYsNkJBQWE4QixJQUFJdUcsVUFBakIsRUFBNkJuSSxPQUE3QjtBQUNBRiw2QkFBYThCLElBQUl3RyxvQkFBakIsRUFBdUNwSSxPQUF2QztBQUNBRiw2QkFBYThCLElBQUl5RyxrQkFBakIsRUFBcUNySSxPQUFyQztBQUNELGVBTmM7QUFPaEIsV0FwQkksd0JBQVA7O0FBc0JELEtBbkZjLG1CQUFqQiIsImZpbGUiOiJuby1kdXBsaWNhdGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCB0eXBlc2NyaXB0UGtnO1xudHJ5IHtcbiAgdHlwZXNjcmlwdFBrZyA9IHJlcXVpcmUoJ3R5cGVzY3JpcHQvcGFja2FnZS5qc29uJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG59IGNhdGNoIChlKSB7IC8qKi8gfVxuXG5mdW5jdGlvbiBjaGVja0ltcG9ydHMoaW1wb3J0ZWQsIGNvbnRleHQpIHtcbiAgZm9yIChjb25zdCBbbW9kdWxlLCBub2Rlc10gb2YgaW1wb3J0ZWQuZW50cmllcygpKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJyR7bW9kdWxlfScgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMuYDtcbiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBub2RlcztcbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgIGNvbnN0IGZpeCA9IGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogZmlyc3Quc291cmNlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBmaXgsIC8vIEF0dGFjaCB0aGUgYXV0b2ZpeCAoaWYgYW55KSB0byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZXN0KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBub2RlLnNvdXJjZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlLCBjb250ZXh0KSB7XG4gIC8vIFNvcnJ5IEVTTGludCA8PSAzIHVzZXJzLCBubyBhdXRvZml4IGZvciB5b3UuIEF1dG9maXhpbmcgZHVwbGljYXRlIGltcG9ydHNcbiAgLy8gcmVxdWlyZXMgbXVsdGlwbGUgYGZpeGVyLndoYXRldmVyKClgIGNhbGxzIGluIHRoZSBgZml4YDogV2UgYm90aCBuZWVkIHRvXG4gIC8vIHVwZGF0ZSB0aGUgZmlyc3Qgb25lLCBhbmQgcmVtb3ZlIHRoZSByZXN0LiBTdXBwb3J0IGZvciBtdWx0aXBsZVxuICAvLyBgZml4ZXIud2hhdGV2ZXIoKWAgaW4gYSBzaW5nbGUgYGZpeGAgd2FzIGFkZGVkIGluIEVTTGludCA0LjEuXG4gIC8vIGBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlYCB3YXMgYWRkZWQgaW4gNC4wLCBzbyB0aGF0J3MgYW4gZWFzeSB0aGluZyB0b1xuICAvLyBjaGVjayBmb3IuXG4gIGlmICh0eXBlb2Ygc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGp1c3RpbmcgdGhlIGZpcnN0IGltcG9ydCBtaWdodCBtYWtlIGl0IG11bHRpbGluZSwgd2hpY2ggY291bGQgYnJlYWtcbiAgLy8gYGVzbGludC1kaXNhYmxlLW5leHQtbGluZWAgY29tbWVudHMgYW5kIHNpbWlsYXIsIHNvIGJhaWwgaWYgdGhlIGZpcnN0XG4gIC8vIGltcG9ydCBoYXMgY29tbWVudHMuIEFsc28sIGlmIHRoZSBmaXJzdCBpbXBvcnQgaXMgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby5cbiAgaWYgKGhhc1Byb2JsZW1hdGljQ29tbWVudHMoZmlyc3QsIHNvdXJjZUNvZGUpIHx8IGhhc05hbWVzcGFjZShmaXJzdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdEltcG9ydE5hbWVzID0gbmV3IFNldChcbiAgICBmbGF0TWFwKFtdLmNvbmNhdChmaXJzdCwgcmVzdCB8fCBbXSksICh4KSA9PiBnZXREZWZhdWx0SW1wb3J0TmFtZSh4KSB8fCBbXSksXG4gICk7XG5cbiAgLy8gQmFpbCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGlmZmVyZW50IGRlZmF1bHQgaW1wb3J0IG5hbWVzIOKAkyBpdCdzIHVwIHRvIHRoZVxuICAvLyB1c2VyIHRvIGNob29zZSB3aGljaCBvbmUgdG8ga2VlcC5cbiAgaWYgKGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID4gMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBMZWF2ZSBpdCB0byB0aGUgdXNlciB0byBoYW5kbGUgY29tbWVudHMuIEFsc28gc2tpcCBgaW1wb3J0ICogYXMgbnMgZnJvbVxuICAvLyAnLi9mb28nYCBpbXBvcnRzLCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBtZXJnZWQgaW50byBhbm90aGVyIGltcG9ydC5cbiAgY29uc3QgcmVzdFdpdGhvdXRDb21tZW50cyA9IHJlc3QuZmlsdGVyKChub2RlKSA9PiAhaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpKTtcblxuICBjb25zdCBzcGVjaWZpZXJzID0gcmVzdFdpdGhvdXRDb21tZW50c1xuICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICAgICAgY29uc3Qgb3BlbkJyYWNlID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICAgICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcblxuICAgICAgaWYgKG9wZW5CcmFjZSA9PSBudWxsIHx8IGNsb3NlQnJhY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnROb2RlOiBub2RlLFxuICAgICAgICBpZGVudGlmaWVyczogc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSkuc3BsaXQoJywnKSwgLy8gU3BsaXQgdGhlIHRleHQgaW50byBzZXBhcmF0ZSBpZGVudGlmaWVycyAocmV0YWluaW5nIGFueSB3aGl0ZXNwYWNlIGJlZm9yZSBvciBhZnRlcilcbiAgICAgICAgaXNFbXB0eTogIWhhc1NwZWNpZmllcnMobm9kZSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCB1bm5lY2Vzc2FyeUltcG9ydHMgPSByZXN0V2l0aG91dENvbW1lbnRzLmZpbHRlcigobm9kZSkgPT4gIWhhc1NwZWNpZmllcnMobm9kZSlcbiAgICAmJiAhaGFzTmFtZXNwYWNlKG5vZGUpXG4gICAgJiYgIXNwZWNpZmllcnMuc29tZSgoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIuaW1wb3J0Tm9kZSA9PT0gbm9kZSksXG4gICk7XG5cbiAgY29uc3Qgc2hvdWxkQWRkRGVmYXVsdCA9IGdldERlZmF1bHRJbXBvcnROYW1lKGZpcnN0KSA9PSBudWxsICYmIGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID09PSAxO1xuICBjb25zdCBzaG91bGRBZGRTcGVjaWZpZXJzID0gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xuICBjb25zdCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSA9IHVubmVjZXNzYXJ5SW1wb3J0cy5sZW5ndGggPiAwO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChmaXhlcikgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKGZpcnN0KTtcbiAgICBjb25zdCBvcGVuQnJhY2UgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKCh0b2tlbikgPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID0gY2xvc2VCcmFjZSAhPSBudWxsICYmIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcbiAgICBjb25zdCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnMgPSBmaXJzdElzRW1wdHlcbiAgICAgID8gbmV3IFNldCgpXG4gICAgICA6IG5ldyBTZXQoc291cmNlQ29kZS50ZXh0LnNsaWNlKG9wZW5CcmFjZS5yYW5nZVsxXSwgY2xvc2VCcmFjZS5yYW5nZVswXSlcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hLCBleGlzdGluZ0lkZW50aWZpZXJzXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVHlwZVNwZWNpZmllciA9IHNwZWNpZmllci5pbXBvcnROb2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICAgIC8vIGEgdXNlciBtaWdodCBzZXQgcHJlZmVyLWlubGluZSBidXQgbm90IGhhdmUgYSBzdXBwb3J0aW5nIFR5cGVTY3JpcHQgdmVyc2lvbi4gIEZsb3cgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgdHlwZXMgc28gdGhpcyBzaG91bGQgZmFpbCBpbiB0aGF0IGNhc2UgYXMgd2VsbC5cbiAgICAgICAgaWYgKHByZWZlcklubGluZSAmJiAoIXR5cGVzY3JpcHRQa2cgfHwgIXNlbXZlci5zYXRpc2ZpZXModHlwZXNjcmlwdFBrZy52ZXJzaW9uLCAnPj0gNC41JykpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHZlcnNpb24gb2YgVHlwZVNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSB0eXBlIGltcG9ydHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgKm9ubHkqIHRoZSBuZXcgaWRlbnRpZmllcnMgdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LCBhbmQgdHJhY2sgYW55IG5ldyBpZGVudGlmaWVycyBzbyB3ZSBkb24ndCBhZGQgdGhlbSBhZ2FpbiBpbiB0aGUgbmV4dCBsb29wXG4gICAgICAgIGNvbnN0IFtzcGVjaWZpZXJUZXh0LCB1cGRhdGVkRXhpc3RpbmdJZGVudGlmaWVyc10gPSBzcGVjaWZpZXIuaWRlbnRpZmllcnMucmVkdWNlKChbdGV4dCwgc2V0XSwgY3VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGN1ci50cmltKCk7IC8vIFRyaW0gd2hpdGVzcGFjZSBiZWZvcmUvYWZ0ZXIgdG8gY29tcGFyZSB0byBvdXIgc2V0IG9mIGV4aXN0aW5nIGlkZW50aWZpZXJzXG4gICAgICAgICAgY29uc3QgY3VyV2l0aFR5cGUgPSB0cmltbWVkLmxlbmd0aCA+IDAgJiYgcHJlZmVySW5saW5lICYmIGlzVHlwZVNwZWNpZmllciA/IGB0eXBlICR7Y3VyfWAgOiBjdXI7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSWRlbnRpZmllcnMuaGFzKHRyaW1tZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RleHQsIHNldF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbdGV4dC5sZW5ndGggPiAwID8gYCR7dGV4dH0sJHtjdXJXaXRoVHlwZX1gIDogY3VyV2l0aFR5cGUsIHNldC5hZGQodHJpbW1lZCldO1xuICAgICAgICB9LCBbJycsIGV4aXN0aW5nSWRlbnRpZmllcnNdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG5lZWRzQ29tbWEgJiYgIXNwZWNpZmllci5pc0VtcHR5ICYmIHNwZWNpZmllclRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyVGV4dH1gXG4gICAgICAgICAgICA6IGAke3Jlc3VsdH0ke3NwZWNpZmllclRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICAgIHVwZGF0ZWRFeGlzdGluZ0lkZW50aWZpZXJzLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5LCBmaXJzdEV4aXN0aW5nSWRlbnRpZmllcnNdLFxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goXG4gICAgICAgIGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9LCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmICFzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9IGZyb21gKSk7XG4gICAgfSBlbHNlIGlmIChzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSxgKSk7XG4gICAgICBpZiAoc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRCZWZvcmUoY2xvc2VCcmFjZSwgc3BlY2lmaWVyc1RleHQpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSA9PSBudWxsICYmIHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChmaXJzdC5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBgaW1wb3J0IGRlZiBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdC5zcGVjaWZpZXJzWzBdLCBgLCB7JHtzcGVjaWZpZXJzVGV4dH19YCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlICE9IG51bGwgJiYgY2xvc2VCcmFjZSAhPSBudWxsKSB7XG4gICAgICAvLyBgaW1wb3J0IHsuLi59ICcuL2ZvbydgIOKGkiBgaW1wb3J0IHsuLi4sIC4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGltcG9ydHMgd2hvc2Ugc3BlY2lmaWVycyBoYXZlIGJlZW4gbW92ZWQgaW50byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHNwZWNpZmllcnMpIHtcbiAgICAgIGNvbnN0IGltcG9ydE5vZGUgPSBzcGVjaWZpZXIuaW1wb3J0Tm9kZTtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKGltcG9ydE5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbaW1wb3J0Tm9kZS5yYW5nZVsxXSwgaW1wb3J0Tm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIGRlZmF1bHQgaW1wb3J0IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBmaXJzdCBpbXBvcnQsXG4gICAgLy8gYW5kIHNpZGUtZWZmZWN0LW9ubHkgaW1wb3J0cyB0aGF0IGFyZSB1bm5lY2Vzc2FyeSBkdWUgdG8gdGhlIGZpcnN0XG4gICAgLy8gaW1wb3J0LlxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB1bm5lY2Vzc2FyeUltcG9ydHMpIHtcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlKG5vZGUpKTtcblxuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0UmFuZ2UgPSBbbm9kZS5yYW5nZVsxXSwgbm9kZS5yYW5nZVsxXSArIDFdO1xuICAgICAgY29uc3QgY2hhckFmdGVySW1wb3J0ID0gc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhjaGFyQWZ0ZXJJbXBvcnRSYW5nZVswXSwgY2hhckFmdGVySW1wb3J0UmFuZ2VbMV0pO1xuICAgICAgaWYgKGNoYXJBZnRlckltcG9ydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmVSYW5nZShjaGFyQWZ0ZXJJbXBvcnRSYW5nZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaXhlcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQdW5jdHVhdG9yKG5vZGUsIHZhbHVlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdQdW5jdHVhdG9yJyAmJiBub2RlLnZhbHVlID09PSB2YWx1ZTtcbn1cblxuLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGltcG9ydCBvZiBgbm9kZWAsIGlmIGFueS5cbmZ1bmN0aW9uIGdldERlZmF1bHRJbXBvcnROYW1lKG5vZGUpIHtcbiAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maW5kKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpO1xuICByZXR1cm4gZGVmYXVsdFNwZWNpZmllciAhPSBudWxsID8gZGVmYXVsdFNwZWNpZmllci5sb2NhbC5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgbmFtZXNwYWNlIGltcG9ydC5cbmZ1bmN0aW9uIGhhc05hbWVzcGFjZShub2RlKSB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gIHJldHVybiBzcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYW55IG5vbi1kZWZhdWx0IHNwZWNpZmllcnMuXG5mdW5jdGlvbiBoYXNTcGVjaWZpZXJzKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInKTtcbiAgcmV0dXJuIHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuLy8gSXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGRvIHdpdGggY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoXG4vLyBkdXBsaWNhdGUgaW1wb3J0cywgc28gc2tpcCBpbXBvcnRzIHdpdGggY29tbWVudHMgd2hlbiBhdXRvZml4aW5nLlxuZnVuY3Rpb24gaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiAoXG4gICAgaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKVxuICAgIHx8IGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpXG4gICk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IGVuZHMpIG9uIHRoZSBwcmV2aW91cyBsaW5lIG9yIG9uXG4vLyB0aGUgc2FtZSBsaW5lIGFzIGBub2RlYCAoc3RhcnRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRCZWZvcmUobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZShub2RlKVxuICAgIC5zb21lKChjb21tZW50KSA9PiBjb21tZW50LmxvYy5lbmQubGluZSA+PSBub2RlLmxvYy5zdGFydC5saW5lIC0gMSk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IHN0YXJ0cykgb24gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWBcbi8vIChlbmRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQWZ0ZXIobm9kZSlcbiAgICAuc29tZSgoY29tbWVudCkgPT4gY29tbWVudC5sb2Muc3RhcnQubGluZSA9PT0gbm9kZS5sb2MuZW5kLmxpbmUpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGFueSBjb21tZW50cyBfaW5zaWRlLF8gZXhjZXB0IGluc2lkZSB0aGUgYHsuLi59YFxuLy8gcGFydCAoaWYgYW55KS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgY29uc3QgdG9rZW5zID0gc291cmNlQ29kZS5nZXRUb2tlbnMobm9kZSk7XG4gIGNvbnN0IG9wZW5CcmFjZUluZGV4ID0gdG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gIGNvbnN0IGNsb3NlQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd9JykpO1xuICAvLyBTbGljZSBhd2F5IHRoZSBmaXJzdCB0b2tlbiwgc2luY2Ugd2UncmUgbm8gbG9va2luZyBmb3IgY29tbWVudHMgX2JlZm9yZV9cbiAgLy8gYG5vZGVgIChvbmx5IGluc2lkZSkuIElmIHRoZXJlJ3MgYSBgey4uLn1gIHBhcnQsIGxvb2sgZm9yIGNvbW1lbnRzIGJlZm9yZVxuICAvLyB0aGUgYHtgLCBidXQgbm90IGJlZm9yZSB0aGUgYH1gIChoZW5jZSB0aGUgYCsxYHMpLlxuICBjb25zdCBzb21lVG9rZW5zID0gb3BlbkJyYWNlSW5kZXggPj0gMCAmJiBjbG9zZUJyYWNlSW5kZXggPj0gMFxuICAgID8gdG9rZW5zLnNsaWNlKDEsIG9wZW5CcmFjZUluZGV4ICsgMSkuY29uY2F0KHRva2Vucy5zbGljZShjbG9zZUJyYWNlSW5kZXggKyAxKSlcbiAgICA6IHRva2Vucy5zbGljZSgxKTtcbiAgcmV0dXJuIHNvbWVUb2tlbnMuc29tZSgodG9rZW4pID0+IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUodG9rZW4pLmxlbmd0aCA+IDApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIHJlcGVhdGVkIGltcG9ydCBvZiB0aGUgc2FtZSBtb2R1bGUgaW4gbXVsdGlwbGUgcGxhY2VzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAncHJlZmVyLWlubGluZSc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXVxuICAgICAgJiYgY29udGV4dC5vcHRpb25zWzBdLmNvbnNpZGVyUXVlcnlTdHJpbmc7XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gKHNvdXJjZVBhdGgpID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7ZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKX0/JHtwYXJ0c1syXX1gO1xuICAgIH0gOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBtb2R1bGVNYXBzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SW1wb3J0TWFwKG4pIHtcbiAgICAgIGlmICghbW9kdWxlTWFwcy5oYXMobi5wYXJlbnQpKSB7XG4gICAgICAgIG1vZHVsZU1hcHMuc2V0KG4ucGFyZW50LCB7XG4gICAgICAgICAgaW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuc0ltcG9ydGVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgZGVmYXVsdFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYW1lZFR5cGVzSW1wb3J0ZWQ6IG5ldyBNYXAoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXAgPSBtb2R1bGVNYXBzLmdldChuLnBhcmVudCk7XG4gICAgICBjb25zdCBwcmVmZXJJbmxpbmUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gJiYgY29udGV4dC5vcHRpb25zWzBdWydwcmVmZXItaW5saW5lJ107XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICByZXR1cm4gbi5zcGVjaWZpZXJzLmxlbmd0aCA+IDAgJiYgbi5zcGVjaWZpZXJzWzBdLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyA/IG1hcC5kZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG1hcC5uYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIXByZWZlcklubGluZSAmJiBuLnNwZWNpZmllcnMuc29tZSgoc3BlYykgPT4gc3BlYy5pbXBvcnRLaW5kID09PSAndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBtYXAubmFtZWRUeXBlc0ltcG9ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzTmFtZXNwYWNlKG4pID8gbWFwLm5zSW1wb3J0ZWQgOiBtYXAuaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcCBvZiBtb2R1bGVNYXBzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5pbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgICAgY2hlY2tJbXBvcnRzKG1hcC5uc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLmRlZmF1bHRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgICBjaGVja0ltcG9ydHMobWFwLm5hbWVkVHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ 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 220e15a25a..cbe024a71f 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 @@ -42,11 +42,8 @@ function extractDepFields(pkg) { function getPackageDepFields(packageJsonPath, throwAtRead) { if (!depFieldCache.has(packageJsonPath)) { - var packageJson = readJSON(packageJsonPath, throwAtRead); - if (packageJson) { - var depFields = extractDepFields(packageJson); - depFieldCache.set(packageJsonPath, depFields); - } + var depFields = extractDepFields(readJSON(packageJsonPath, throwAtRead)); + depFieldCache.set(packageJsonPath, depFields); } return depFieldCache.get(packageJsonPath); @@ -75,12 +72,10 @@ function getDependencies(context, packageDir) { // use rule config to find package.json paths.forEach(function (dir) { var packageJsonPath = _path2['default'].join(dir, 'package.json'); - var _packageContent = getPackageDepFields(packageJsonPath, paths.length === 1); - if (_packageContent) { - Object.keys(packageContent).forEach(function (depsKey) { - Object.assign(packageContent[depsKey], _packageContent[depsKey]); - }); - } + var _packageContent = getPackageDepFields(packageJsonPath, true); + Object.keys(packageContent).forEach(function (depsKey) { + Object.assign(packageContent[depsKey], _packageContent[depsKey]); + }); }); } else { var packageJsonPath = (0, _pkgUp2['default'])({ @@ -303,4 +298,4 @@ module.exports = { 'Program:exit': function () {function ProgramExit() { depFieldCache.clear(); }return ProgramExit;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwicGFja2FnZUpzb24iLCJkZXBGaWVsZHMiLCJzZXQiLCJnZXQiLCJnZXREZXBlbmRlbmNpZXMiLCJjb250ZXh0IiwicGFja2FnZURpciIsInBhdGhzIiwicGFja2FnZUNvbnRlbnQiLCJwYXRoIiwicmVzb2x2ZSIsIm1hcCIsImRpciIsImZvckVhY2giLCJqb2luIiwiX3BhY2thZ2VDb250ZW50IiwiZGVwc0tleSIsImFzc2lnbiIsImN3ZCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm5vcm1hbGl6ZSIsInNvbWUiLCJlIiwiY29kZSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJsb2MiLCJsaW5lIiwiY29sdW1uIiwibmFtZSIsIlN5bnRheEVycm9yIiwibWlzc2luZ0Vycm9yTWVzc2FnZSIsInBhY2thZ2VOYW1lIiwiZGV2RGVwRXJyb3JNZXNzYWdlIiwib3B0RGVwRXJyb3JNZXNzYWdlIiwiZ2V0TW9kdWxlT3JpZ2luYWxOYW1lIiwic3BsaXQiLCJmaXJzdCIsInNlY29uZCIsInN0YXJ0c1dpdGgiLCJnZXRNb2R1bGVSZWFsTmFtZSIsInJlc29sdmVkIiwiY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24iLCJkZXBzIiwiZGVjbGFyYXRpb25TdGF0dXMiLCJuZXdEZWNsYXJhdGlvblN0YXR1cyIsImlzSW5EZXBzIiwiaXNJbkRldkRlcHMiLCJpc0luT3B0RGVwcyIsImlzSW5QZWVyRGVwcyIsImlzSW5CdW5kbGVkRGVwcyIsInBhY2thZ2VIaWVyYXJjaHkiLCJwYWNrYWdlTmFtZVBhcnRzIiwibmFtZVBhcnQiLCJpbmRleCIsImFuY2VzdG9yIiwic2xpY2UiLCJwdXNoIiwicmVkdWNlIiwicmVzdWx0IiwiYW5jZXN0b3JOYW1lIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInJlcG9ydElmTWlzc2luZyIsImRlcHNPcHRpb25zIiwibm9kZSIsInZlcmlmeVR5cGVJbXBvcnRzIiwiaW1wb3J0S2luZCIsImV4cG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJzcGVjaWZpZXIiLCJ0eXBlT2ZJbXBvcnQiLCJ2ZXJpZnlJbnRlcm5hbERlcHMiLCJpbXBvcnRQYWNrYWdlTmFtZSIsImFsbG93RGV2RGVwcyIsImFsbG93UGVlckRlcHMiLCJhbGxvd09wdERlcHMiLCJhbGxvd0J1bmRsZWREZXBzIiwicmVhbFBhY2thZ2VOYW1lIiwidGVzdENvbmZpZyIsImNvbmZpZyIsImZpbGVuYW1lIiwiYyIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJpbmNsdWRlSW50ZXJuYWwiLCJpbmNsdWRlVHlwZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyZWF0ZSIsIm9wdGlvbnMiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIiwiY2xlYXIiXSwibWFwcGluZ3MiOiJxb0JBQUEsNEI7QUFDQSx3QjtBQUNB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V0FBV21CLFFBQVE1RyxvQkFBbkIsRUFBeUMyRixRQUF6QyxNQUF1RCxLQUZuRDtBQUdsQk4sdUJBQWVJLFdBQVdtQixRQUFRM0csZ0JBQW5CLEVBQXFDMEYsUUFBckMsTUFBbUQsS0FIaEQ7QUFJbEJKLDBCQUFrQkUsV0FBV21CLFFBQVExRyxtQkFBbkIsRUFBd0N5RixRQUF4QyxNQUFzRCxLQUp0RDtBQUtsQlQsNEJBQW9CLENBQUMsQ0FBQzBCLFFBQVFKLGVBTFo7QUFNbEI3QiwyQkFBbUIsQ0FBQyxDQUFDaUMsUUFBUUgsWUFOWCxFQUFwQjs7O0FBU0EsYUFBTyxnQ0FBYyxVQUFDSSxNQUFELEVBQVNuQyxJQUFULEVBQWtCO0FBQ3JDRix3QkFBZ0IzRCxPQUFoQixFQUF5QnVDLElBQXpCLEVBQStCcUIsV0FBL0IsRUFBNENDLElBQTVDLEVBQWtEbUMsT0FBT0MsS0FBekQ7QUFDRCxPQUZNLEVBRUosRUFBRUMsVUFBVSxJQUFaLEVBRkksQ0FBUDtBQUdELEtBM0NjOztBQTZDZixnQkE3Q2Usc0NBNkNFO0FBQ2Z0SSxvQkFBY3VJLEtBQWQ7QUFDRCxLQS9DYyx3QkFBakIiLCJmaWxlIjoibm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgeyBnZXRGaWxlUGFja2FnZU5hbWUgfSBmcm9tICcuLi9jb3JlL3BhY2thZ2VQYXRoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZXBGaWVsZENhY2hlID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBoYXNLZXlzKG9iaiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGFycmF5T3JLZXlzKGFycmF5T3JPYmplY3QpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyYXlPck9iamVjdCkgPyBhcnJheU9yT2JqZWN0IDogT2JqZWN0LmtleXMoYXJyYXlPck9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRKU09OKGpzb25QYXRoLCB0aHJvd0V4Y2VwdGlvbikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhqc29uUGF0aCwgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVwRmllbGRzKHBrZykge1xuICByZXR1cm4ge1xuICAgIGRlcGVuZGVuY2llczogcGtnLmRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBkZXZEZXBlbmRlbmNpZXM6IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHBrZy5vcHRpb25hbERlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBwZWVyRGVwZW5kZW5jaWVzOiBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICAvLyBCdW5kbGVkRGVwcyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXksIGJ1dCBvYmplY3Qgbm90YXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQgYnlcbiAgICAvLyBgbnBtYCwgc28gd2UgY29udmVydCBpdCB0byBhbiBhcnJheSBpZiBpdCBpcyBhbiBvYmplY3RcbiAgICBidW5kbGVkRGVwZW5kZW5jaWVzOiBhcnJheU9yS2V5cyhwa2cuYnVuZGxlRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IFtdKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZURlcEZpZWxkcyhwYWNrYWdlSnNvblBhdGgsIHRocm93QXRSZWFkKSB7XG4gIGlmICghZGVwRmllbGRDYWNoZS5oYXMocGFja2FnZUpzb25QYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gcmVhZEpTT04ocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCk7XG4gICAgaWYgKHBhY2thZ2VKc29uKSB7XG4gICAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHBhY2thZ2VKc29uKTtcbiAgICAgIGRlcEZpZWxkQ2FjaGUuc2V0KHBhY2thZ2VKc29uUGF0aCwgZGVwRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgcGF0aHMubGVuZ3RoID09PSAxKTtcbiAgICAgICAgaWYgKF9wYWNrYWdlQ29udGVudCkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDb250ZW50W2RlcHNLZXldLCBfcGFja2FnZUNvbnRlbnRbZGVwc0tleV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJyZWFkSlNPTiIsImpzb25QYXRoIiwidGhyb3dFeGNlcHRpb24iLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsImVyciIsImV4dHJhY3REZXBGaWVsZHMiLCJwa2ciLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXMiLCJidW5kbGVkRGVwZW5kZW5jaWVzIiwiYnVuZGxlRGVwZW5kZW5jaWVzIiwiZ2V0UGFja2FnZURlcEZpZWxkcyIsInBhY2thZ2VKc29uUGF0aCIsInRocm93QXRSZWFkIiwiaGFzIiwiZGVwRmllbGRzIiwic2V0IiwiZ2V0IiwiZ2V0RGVwZW5kZW5jaWVzIiwiY29udGV4dCIsInBhY2thZ2VEaXIiLCJwYXRocyIsInBhY2thZ2VDb250ZW50IiwicGF0aCIsInJlc29sdmUiLCJtYXAiLCJkaXIiLCJmb3JFYWNoIiwiam9pbiIsIl9wYWNrYWdlQ29udGVudCIsImRlcHNLZXkiLCJhc3NpZ24iLCJjd2QiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJub3JtYWxpemUiLCJzb21lIiwiZSIsImNvZGUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibG9jIiwibGluZSIsImNvbHVtbiIsIm5hbWUiLCJTeW50YXhFcnJvciIsIm1pc3NpbmdFcnJvck1lc3NhZ2UiLCJwYWNrYWdlTmFtZSIsImRldkRlcEVycm9yTWVzc2FnZSIsIm9wdERlcEVycm9yTWVzc2FnZSIsImdldE1vZHVsZU9yaWdpbmFsTmFtZSIsInNwbGl0IiwiZmlyc3QiLCJzZWNvbmQiLCJzdGFydHNXaXRoIiwiZ2V0TW9kdWxlUmVhbE5hbWUiLCJyZXNvbHZlZCIsImNoZWNrRGVwZW5kZW5jeURlY2xhcmF0aW9uIiwiZGVwcyIsImRlY2xhcmF0aW9uU3RhdHVzIiwibmV3RGVjbGFyYXRpb25TdGF0dXMiLCJpc0luRGVwcyIsImlzSW5EZXZEZXBzIiwiaXNJbk9wdERlcHMiLCJpc0luUGVlckRlcHMiLCJpc0luQnVuZGxlZERlcHMiLCJwYWNrYWdlSGllcmFyY2h5IiwicGFja2FnZU5hbWVQYXJ0cyIsIm5hbWVQYXJ0IiwiaW5kZXgiLCJhbmNlc3RvciIsInNsaWNlIiwicHVzaCIsInJlZHVjZSIsInJlc3VsdCIsImFuY2VzdG9yTmFtZSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJyZXBvcnRJZk1pc3NpbmciLCJkZXBzT3B0aW9ucyIsIm5vZGUiLCJ2ZXJpZnlUeXBlSW1wb3J0cyIsImltcG9ydEtpbmQiLCJleHBvcnRLaW5kIiwic3BlY2lmaWVycyIsImV2ZXJ5Iiwic3BlY2lmaWVyIiwidHlwZU9mSW1wb3J0IiwidmVyaWZ5SW50ZXJuYWxEZXBzIiwiaW1wb3J0UGFja2FnZU5hbWUiLCJhbGxvd0RldkRlcHMiLCJhbGxvd1BlZXJEZXBzIiwiYWxsb3dPcHREZXBzIiwiYWxsb3dCdW5kbGVkRGVwcyIsInJlYWxQYWNrYWdlTmFtZSIsInRlc3RDb25maWciLCJjb25maWciLCJmaWxlbmFtZSIsImMiLCJwcm9jZXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW5jbHVkZUludGVybmFsIiwiaW5jbHVkZVR5cGVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyIsImNsZWFyIl0sIm1hcHBpbmdzIjoicW9CQUFBLDRCO0FBQ0Esd0I7QUFDQSxrRDtBQUNBLHNDO0FBQ0Esc0Q7QUFDQSxrRTtBQUNBLGdEO0FBQ0E7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsSUFBSUMsR0FBSixFQUF0Qjs7QUFFQSxTQUFTQyxPQUFULEdBQTJCLEtBQVZDLEdBQVUsdUVBQUosRUFBSTtBQUN6QixTQUFPQyxPQUFPQyxJQUFQLENBQVlGLEdBQVosRUFBaUJHLE1BQWpCLEdBQTBCLENBQWpDO0FBQ0Q7O0FBRUQsU0FBU0MsV0FBVCxDQUFxQkMsYUFBckIsRUFBb0M7QUFDbEMsU0FBT0MsTUFBTUMsT0FBTixDQUFjRixhQUFkLElBQStCQSxhQUEvQixHQUErQ0osT0FBT0MsSUFBUCxDQUFZRyxhQUFaLENBQXREO0FBQ0Q7O0FBRUQsU0FBU0csUUFBVCxDQUFrQkMsUUFBbEIsRUFBNEJDLGNBQTVCLEVBQTRDO0FBQzFDLE1BQUk7QUFDRixXQUFPQyxLQUFLQyxLQUFMLENBQVdDLGdCQUFHQyxZQUFILENBQWdCTCxRQUFoQixFQUEwQixNQUExQixDQUFYLENBQVA7QUFDRCxHQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0FBQ1osUUFBSUwsY0FBSixFQUFvQjtBQUNsQixZQUFNSyxHQUFOO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNDLGdCQUFULENBQTBCQyxHQUExQixFQUErQjtBQUM3QixTQUFPO0FBQ0xDLGtCQUFjRCxJQUFJQyxZQUFKLElBQW9CLEVBRDdCO0FBRUxDLHFCQUFpQkYsSUFBSUUsZUFBSixJQUF1QixFQUZuQztBQUdMQywwQkFBc0JILElBQUlHLG9CQUFKLElBQTRCLEVBSDdDO0FBSUxDLHNCQUFrQkosSUFBSUksZ0JBQUosSUFBd0IsRUFKckM7QUFLTDtBQUNBO0FBQ0FDLHlCQUFxQmxCLFlBQVlhLElBQUlNLGtCQUFKLElBQTBCTixJQUFJSyxtQkFBOUIsSUFBcUQsRUFBakUsQ0FQaEIsRUFBUDs7QUFTRDs7QUFFRCxTQUFTRSxtQkFBVCxDQUE2QkMsZUFBN0IsRUFBOENDLFdBQTlDLEVBQTJEO0FBQ3pELE1BQUksQ0FBQzdCLGNBQWM4QixHQUFkLENBQWtCRixlQUFsQixDQUFMLEVBQXlDO0FBQ3ZDLFFBQU1HLFlBQVlaLGlCQUFpQlIsU0FBU2lCLGVBQVQsRUFBMEJDLFdBQTFCLENBQWpCLENBQWxCO0FBQ0E3QixrQkFBY2dDLEdBQWQsQ0FBa0JKLGVBQWxCLEVBQW1DRyxTQUFuQztBQUNEOztBQUVELFNBQU8vQixjQUFjaUMsR0FBZCxDQUFrQkwsZUFBbEIsQ0FBUDtBQUNEOztBQUVELFNBQVNNLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQWtDQyxVQUFsQyxFQUE4QztBQUM1QyxNQUFJQyxRQUFRLEVBQVo7QUFDQSxNQUFJO0FBQ0YsUUFBTUMsaUJBQWlCO0FBQ3JCakIsb0JBQWMsRUFETztBQUVyQkMsdUJBQWlCLEVBRkk7QUFHckJDLDRCQUFzQixFQUhEO0FBSXJCQyx3QkFBa0IsRUFKRztBQUtyQkMsMkJBQXFCLEVBTEEsRUFBdkI7OztBQVFBLFFBQUlXLGNBQWNBLFdBQVc5QixNQUFYLEdBQW9CLENBQXRDLEVBQXlDO0FBQ3ZDLFVBQUksQ0FBQ0csTUFBTUMsT0FBTixDQUFjMEIsVUFBZCxDQUFMLEVBQWdDO0FBQzlCQyxnQkFBUSxDQUFDRSxrQkFBS0MsT0FBTCxDQUFhSixVQUFiLENBQUQsQ0FBUjtBQUNELE9BRkQsTUFFTztBQUNMQyxnQkFBUUQsV0FBV0ssR0FBWCxDQUFlLFVBQUNDLEdBQUQsVUFBU0gsa0JBQUtDLE9BQUwsQ0FBYUUsR0FBYixDQUFULEVBQWYsQ0FBUjtBQUNEO0FBQ0Y7O0FBRUQsUUFBSUwsTUFBTS9CLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUNwQjtBQUNBK0IsWUFBTU0sT0FBTixDQUFjLFVBQUNELEdBQUQsRUFBUztBQUNyQixZQUFNZCxrQkFBa0JXLGtCQUFLSyxJQUFMLENBQVVGLEdBQVYsRUFBZSxjQUFmLENBQXhCO0FBQ0EsWUFBTUcsa0JBQWtCbEIsb0JBQW9CQyxlQUFwQixFQUFxQyxJQUFyQyxDQUF4QjtBQUNBeEIsZUFBT0MsSUFBUCxDQUFZaUMsY0FBWixFQUE0QkssT0FBNUIsQ0FBb0MsVUFBQ0csT0FBRCxFQUFhO0FBQy9DMUMsaUJBQU8yQyxNQUFQLENBQWNULGVBQWVRLE9BQWYsQ0FBZCxFQUF1Q0QsZ0JBQWdCQyxPQUFoQixDQUF2QztBQUNELFNBRkQ7QUFHRCxPQU5EO0FBT0QsS0FURCxNQVNPO0FBQ0wsVUFBTWxCLGtCQUFrQix3QkFBTTtBQUM1Qm9CLGFBQUtiLFFBQVFjLG1CQUFSLEdBQThCZCxRQUFRYyxtQkFBUixFQUE5QixHQUE4RGQsUUFBUWUsV0FBUixFQUR2QztBQUU1QkMsbUJBQVcsS0FGaUIsRUFBTixDQUF4Qjs7O0FBS0E7QUFDQS9DLGFBQU8yQyxNQUFQO0FBQ0VULG9CQURGO0FBRUVYLDBCQUFvQkMsZUFBcEIsRUFBcUMsS0FBckMsQ0FGRjs7QUFJRDs7QUFFRCxRQUFJLENBQUM7QUFDSFUsbUJBQWVqQixZQURaO0FBRUhpQixtQkFBZWhCLGVBRlo7QUFHSGdCLG1CQUFlZixvQkFIWjtBQUlIZSxtQkFBZWQsZ0JBSlo7QUFLSGMsbUJBQWViLG1CQUxaO0FBTUgyQixRQU5HLENBTUVsRCxPQU5GLENBQUwsRUFNaUI7QUFDZixhQUFPLElBQVA7QUFDRDs7QUFFRCxXQUFPb0MsY0FBUDtBQUNELEdBbERELENBa0RFLE9BQU9lLENBQVAsRUFBVTtBQUNWLFFBQUloQixNQUFNL0IsTUFBTixHQUFlLENBQWYsSUFBb0IrQyxFQUFFQyxJQUFGLEtBQVcsUUFBbkMsRUFBNkM7QUFDM0NuQixjQUFRb0IsTUFBUixDQUFlO0FBQ2JDLGlCQUFTLDJDQURJO0FBRWJDLGFBQUssRUFBRUMsTUFBTSxDQUFSLEVBQVdDLFFBQVEsQ0FBbkIsRUFGUSxFQUFmOztBQUlEO0FBQ0QsUUFBSU4sRUFBRU8sSUFBRixLQUFXLFdBQVgsSUFBMEJQLGFBQWFRLFdBQTNDLEVBQXdEO0FBQ3REMUIsY0FBUW9CLE1BQVIsQ0FBZTtBQUNiQyx3RUFBdURILEVBQUVHLE9BQXpELENBRGE7QUFFYkMsYUFBSyxFQUFFQyxNQUFNLENBQVIsRUFBV0MsUUFBUSxDQUFuQixFQUZRLEVBQWY7O0FBSUQ7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTRyxtQkFBVCxDQUE2QkMsV0FBN0IsRUFBMEM7QUFDeEMsdUJBQVdBLFdBQVgsbUZBQXlGQSxXQUF6RjtBQUNEOztBQUVELFNBQVNDLGtCQUFULENBQTRCRCxXQUE1QixFQUF5QztBQUN2Qyx1QkFBV0EsV0FBWDtBQUNEOztBQUVELFNBQVNFLGtCQUFULENBQTRCRixXQUE1QixFQUF5QztBQUN2Qyx1QkFBV0EsV0FBWDtBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQStCTixJQUEvQixFQUFxQztBQUNYQSxPQUFLTyxLQUFMLENBQVcsR0FBWCxDQURXLCtDQUM1QkMsS0FENEIsbUJBQ3JCQyxNQURxQjtBQUVuQyxTQUFPRCxNQUFNRSxVQUFOLENBQWlCLEdBQWpCLFdBQTJCRixLQUEzQixpQkFBb0NDLE1BQXBDLElBQStDRCxLQUF0RDtBQUNEOztBQUVELFNBQVNHLGlCQUFULENBQTJCQyxRQUEzQixFQUFxQztBQUNuQyxTQUFPLHFDQUFtQkEsUUFBbkIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLDBCQUFULENBQW9DQyxJQUFwQyxFQUEwQ1gsV0FBMUMsRUFBdURZLGlCQUF2RCxFQUEwRTtBQUN4RSxNQUFNQyx1QkFBdUJELHFCQUFxQjtBQUNoREUsY0FBVSxLQURzQztBQUVoREMsaUJBQWEsS0FGbUM7QUFHaERDLGlCQUFhLEtBSG1DO0FBSWhEQyxrQkFBYyxLQUprQztBQUtoREMscUJBQWlCLEtBTCtCLEVBQWxEOzs7QUFRQTtBQUNBO0FBQ0EsTUFBTUMsbUJBQW1CLEVBQXpCO0FBQ0EsTUFBTUMsbUJBQW1CcEIsY0FBY0EsWUFBWUksS0FBWixDQUFrQixHQUFsQixDQUFkLEdBQXVDLEVBQWhFO0FBQ0FnQixtQkFBaUJ4QyxPQUFqQixDQUF5QixVQUFDeUMsUUFBRCxFQUFXQyxLQUFYLEVBQXFCO0FBQzVDLFFBQUksQ0FBQ0QsU0FBU2QsVUFBVCxDQUFvQixHQUFwQixDQUFMLEVBQStCO0FBQzdCLFVBQU1nQixXQUFXSCxpQkFBaUJJLEtBQWpCLENBQXVCLENBQXZCLEVBQTBCRixRQUFRLENBQWxDLEVBQXFDekMsSUFBckMsQ0FBMEMsR0FBMUMsQ0FBakI7QUFDQXNDLHVCQUFpQk0sSUFBakIsQ0FBc0JGLFFBQXRCO0FBQ0Q7QUFDRixHQUxEOztBQU9BLFNBQU9KLGlCQUFpQk8sTUFBakIsQ0FBd0IsVUFBQ0MsTUFBRCxFQUFTQyxZQUFULFVBQTJCO0FBQ3hEZCxnQkFBVWEsT0FBT2IsUUFBUCxJQUFtQkgsS0FBS3JELFlBQUwsQ0FBa0JzRSxZQUFsQixNQUFvQ0MsU0FEVDtBQUV4RGQsbUJBQWFZLE9BQU9aLFdBQVAsSUFBc0JKLEtBQUtwRCxlQUFMLENBQXFCcUUsWUFBckIsTUFBdUNDLFNBRmxCO0FBR3hEYixtQkFBYVcsT0FBT1gsV0FBUCxJQUFzQkwsS0FBS25ELG9CQUFMLENBQTBCb0UsWUFBMUIsTUFBNENDLFNBSHZCO0FBSXhEWixvQkFBY1UsT0FBT1YsWUFBUCxJQUF1Qk4sS0FBS2xELGdCQUFMLENBQXNCbUUsWUFBdEIsTUFBd0NDLFNBSnJCO0FBS3hEWDtBQUNJUyxhQUFPVCxlQUFQLElBQTBCUCxLQUFLakQsbUJBQUwsQ0FBeUJvRSxPQUF6QixDQUFpQ0YsWUFBakMsTUFBbUQsQ0FBQyxDQU4xQixFQUEzQixFQUF4QjtBQU9IZixzQkFQRyxDQUFQO0FBUUQ7O0FBRUQsU0FBU2tCLGVBQVQsQ0FBeUIzRCxPQUF6QixFQUFrQ3VDLElBQWxDLEVBQXdDcUIsV0FBeEMsRUFBcURDLElBQXJELEVBQTJEcEMsSUFBM0QsRUFBaUU7QUFDL0Q7QUFDQTtBQUNFLEdBQUNtQyxZQUFZRSxpQkFBYjs7QUFFRUQsT0FBS0UsVUFBTCxLQUFvQixNQUFwQjtBQUNHRixPQUFLRSxVQUFMLEtBQW9CLFFBRHZCO0FBRUdGLE9BQUtHLFVBQUwsS0FBb0IsTUFGdkI7QUFHRzFGLFFBQU1DLE9BQU4sQ0FBY3NGLEtBQUtJLFVBQW5CLEtBQWtDSixLQUFLSSxVQUFMLENBQWdCOUYsTUFBbEQsSUFBNEQwRixLQUFLSSxVQUFMLENBQWdCQyxLQUFoQixDQUFzQixVQUFDQyxTQUFELFVBQWVBLFVBQVVKLFVBQVYsS0FBeUIsTUFBekIsSUFBbUNJLFVBQVVKLFVBQVYsS0FBeUIsUUFBM0UsRUFBdEIsQ0FMakUsQ0FERjs7QUFRRTtBQUNBO0FBQ0Q7O0FBRUQsTUFBTUssZUFBZSw2QkFBVzNDLElBQVgsRUFBaUJ6QixPQUFqQixDQUFyQjs7QUFFQTtBQUNFb0UsbUJBQWlCLFVBQWpCO0FBQ0lBLG1CQUFpQixVQUFqQixJQUErQixDQUFDUixZQUFZUyxrQkFEaEQsQ0FERjtBQUdFO0FBQ0E7QUFDRDs7QUFFRCxNQUFNaEMsV0FBVywwQkFBUVosSUFBUixFQUFjekIsT0FBZCxDQUFqQjtBQUNBLE1BQUksQ0FBQ3FDLFFBQUwsRUFBZSxDQUFFLE9BQVM7O0FBRTFCLE1BQU1pQyxvQkFBb0J2QyxzQkFBc0JOLElBQXRCLENBQTFCO0FBQ0EsTUFBSWUsb0JBQW9CRiwyQkFBMkJDLElBQTNCLEVBQWlDK0IsaUJBQWpDLENBQXhCOztBQUVBO0FBQ0U5QixvQkFBa0JFLFFBQWxCO0FBQ0drQixjQUFZVyxZQUFaLElBQTRCL0Isa0JBQWtCRyxXQURqRDtBQUVHaUIsY0FBWVksYUFBWixJQUE2QmhDLGtCQUFrQkssWUFGbEQ7QUFHR2UsY0FBWWEsWUFBWixJQUE0QmpDLGtCQUFrQkksV0FIakQ7QUFJR2dCLGNBQVljLGdCQUFaLElBQWdDbEMsa0JBQWtCTSxlQUx2RDtBQU1FO0FBQ0E7QUFDRDs7QUFFRDtBQUNBO0FBQ0EsTUFBTTZCLGtCQUFrQnZDLGtCQUFrQkMsUUFBbEIsQ0FBeEI7QUFDQSxNQUFJc0MsbUJBQW1CQSxvQkFBb0JMLGlCQUEzQyxFQUE4RDtBQUM1RDlCLHdCQUFvQkYsMkJBQTJCQyxJQUEzQixFQUFpQ29DLGVBQWpDLEVBQWtEbkMsaUJBQWxELENBQXBCOztBQUVBO0FBQ0VBLHNCQUFrQkUsUUFBbEI7QUFDR2tCLGdCQUFZVyxZQUFaLElBQTRCL0Isa0JBQWtCRyxXQURqRDtBQUVHaUIsZ0JBQVlZLGFBQVosSUFBNkJoQyxrQkFBa0JLLFlBRmxEO0FBR0dlLGdCQUFZYSxZQUFaLElBQTRCakMsa0JBQWtCSSxXQUhqRDtBQUlHZ0IsZ0JBQVljLGdCQUFaLElBQWdDbEMsa0JBQWtCTSxlQUx2RDtBQU1FO0FBQ0E7QUFDRDtBQUNGOztBQUVELE1BQUlOLGtCQUFrQkcsV0FBbEIsSUFBaUMsQ0FBQ2lCLFlBQVlXLFlBQWxELEVBQWdFO0FBQzlEdkUsWUFBUW9CLE1BQVIsQ0FBZXlDLElBQWYsRUFBcUJoQyxtQkFBbUI4QyxtQkFBbUJMLGlCQUF0QyxDQUFyQjtBQUNBO0FBQ0Q7O0FBRUQsTUFBSTlCLGtCQUFrQkksV0FBbEIsSUFBaUMsQ0FBQ2dCLFlBQVlhLFlBQWxELEVBQWdFO0FBQzlEekUsWUFBUW9CLE1BQVIsQ0FBZXlDLElBQWYsRUFBcUIvQixtQkFBbUI2QyxtQkFBbUJMLGlCQUF0QyxDQUFyQjtBQUNBO0FBQ0Q7O0FBRUR0RSxVQUFRb0IsTUFBUixDQUFleUMsSUFBZixFQUFxQmxDLG9CQUFvQmdELG1CQUFtQkwsaUJBQXZDLENBQXJCO0FBQ0Q7O0FBRUQsU0FBU00sVUFBVCxDQUFvQkMsTUFBcEIsRUFBNEJDLFFBQTVCLEVBQXNDO0FBQ3BDO0FBQ0EsTUFBSSxPQUFPRCxNQUFQLEtBQWtCLFNBQWxCLElBQStCLE9BQU9BLE1BQVAsS0FBa0IsV0FBckQsRUFBa0U7QUFDaEUsV0FBT0EsTUFBUDtBQUNEO0FBQ0Q7QUFDQSxTQUFPQSxPQUFPNUQsSUFBUCxDQUFZLFVBQUM4RCxDQUFELFVBQU8sNEJBQVVELFFBQVYsRUFBb0JDLENBQXBCO0FBQ3JCLGdDQUFVRCxRQUFWLEVBQW9CMUUsa0JBQUtLLElBQUwsQ0FBVXVFLFFBQVFuRSxHQUFSLEVBQVYsRUFBeUJrRSxDQUF6QixDQUFwQixDQURjLEVBQVosQ0FBUDs7QUFHRDs7QUFFREUsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGtCQUROO0FBRUpDLG1CQUFhLHdDQUZUO0FBR0pDLFdBQUssMEJBQVEsNEJBQVIsQ0FIRCxFQUZGOzs7QUFRSkMsWUFBUTtBQUNOO0FBQ0VMLFlBQU0sUUFEUjtBQUVFTSxrQkFBWTtBQUNWdkcseUJBQWlCLEVBQUVpRyxNQUFNLENBQUMsU0FBRCxFQUFZLE9BQVosQ0FBUixFQURQO0FBRVZoRyw4QkFBc0IsRUFBRWdHLE1BQU0sQ0FBQyxTQUFELEVBQVksT0FBWixDQUFSLEVBRlo7QUFHVi9GLDBCQUFrQixFQUFFK0YsTUFBTSxDQUFDLFNBQUQsRUFBWSxPQUFaLENBQVIsRUFIUjtBQUlWOUYsNkJBQXFCLEVBQUU4RixNQUFNLENBQUMsU0FBRCxFQUFZLE9BQVosQ0FBUixFQUpYO0FBS1ZuRixvQkFBWSxFQUFFbUYsTUFBTSxDQUFDLFFBQUQsRUFBVyxPQUFYLENBQVIsRUFMRjtBQU1WTyx5QkFBaUIsRUFBRVAsTUFBTSxDQUFDLFNBQUQsQ0FBUixFQU5QO0FBT1ZRLHNCQUFjLEVBQUVSLE1BQU0sQ0FBQyxTQUFELENBQVIsRUFQSixFQUZkOztBQVdFUyw0QkFBc0IsS0FYeEIsRUFETSxDQVJKLEVBRFM7Ozs7O0FBMEJmQyxRQTFCZSwrQkEwQlI5RixPQTFCUSxFQTBCQztBQUNkLFVBQU0rRixVQUFVL0YsUUFBUStGLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7QUFDQSxVQUFNakIsV0FBVzlFLFFBQVFjLG1CQUFSLEdBQThCZCxRQUFRYyxtQkFBUixFQUE5QixHQUE4RGQsUUFBUWUsV0FBUixFQUEvRTtBQUNBLFVBQU13QixPQUFPeEMsZ0JBQWdCQyxPQUFoQixFQUF5QitGLFFBQVE5RixVQUFqQyxLQUFnRGpCLGlCQUFpQixFQUFqQixDQUE3RDs7QUFFQSxVQUFNNEUsY0FBYztBQUNsQlcsc0JBQWNLLFdBQVdtQixRQUFRNUcsZUFBbkIsRUFBb0MyRixRQUFwQyxNQUFrRCxLQUQ5QztBQUVsQkwsc0JBQWNHLFdBQVdtQixRQUFRM0csb0JBQW5CLEVBQXlDMEYsUUFBekMsTUFBdUQsS0FGbkQ7QUFHbEJOLHVCQUFlSSxXQUFXbUIsUUFBUTFHLGdCQUFuQixFQUFxQ3lGLFFBQXJDLE1BQW1ELEtBSGhEO0FBSWxCSiwwQkFBa0JFLFdBQVdtQixRQUFRekcsbUJBQW5CLEVBQXdDd0YsUUFBeEMsTUFBc0QsS0FKdEQ7QUFLbEJULDRCQUFvQixDQUFDLENBQUMwQixRQUFRSixlQUxaO0FBTWxCN0IsMkJBQW1CLENBQUMsQ0FBQ2lDLFFBQVFILFlBTlgsRUFBcEI7OztBQVNBLGFBQU8sZ0NBQWMsVUFBQ0ksTUFBRCxFQUFTbkMsSUFBVCxFQUFrQjtBQUNyQ0Ysd0JBQWdCM0QsT0FBaEIsRUFBeUJ1QyxJQUF6QixFQUErQnFCLFdBQS9CLEVBQTRDQyxJQUE1QyxFQUFrRG1DLE9BQU9DLEtBQXpEO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQTNDYzs7QUE2Q2YsZ0JBN0NlLHNDQTZDRTtBQUNmckksb0JBQWNzSSxLQUFkO0FBQ0QsS0EvQ2Msd0JBQWpCIiwiZmlsZSI6Im5vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGtnVXAnO1xuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgaW1wb3J0VHlwZSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IHsgZ2V0RmlsZVBhY2thZ2VOYW1lIH0gZnJvbSAnLi4vY29yZS9wYWNrYWdlUGF0aCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVwRmllbGRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gaGFzS2V5cyhvYmogPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcnJheU9yS2V5cyhhcnJheU9yT2JqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5T3JPYmplY3QpID8gYXJyYXlPck9iamVjdCA6IE9iamVjdC5rZXlzKGFycmF5T3JPYmplY3QpO1xufVxuXG5mdW5jdGlvbiByZWFkSlNPTihqc29uUGF0aCwgdGhyb3dFeGNlcHRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoanNvblBhdGgsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFeGNlcHRpb24pIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlcEZpZWxkcyhwa2cpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgZGV2RGVwZW5kZW5jaWVzOiBwa2cuZGV2RGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBwa2cub3B0aW9uYWxEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgLy8gQnVuZGxlZERlcHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5LCBidXQgb2JqZWN0IG5vdGF0aW9uIGlzIGFsc28gc3VwcG9ydGVkIGJ5XG4gICAgLy8gYG5wbWAsIHNvIHdlIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgaWYgaXQgaXMgYW4gb2JqZWN0XG4gICAgYnVuZGxlZERlcGVuZGVuY2llczogYXJyYXlPcktleXMocGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBwa2cuYnVuZGxlZERlcGVuZGVuY2llcyB8fCBbXSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCB0aHJvd0F0UmVhZCkge1xuICBpZiAoIWRlcEZpZWxkQ2FjaGUuaGFzKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKHJlYWRKU09OKHBhY2thZ2VKc29uUGF0aCwgdGhyb3dBdFJlYWQpKTtcbiAgICBkZXBGaWVsZENhY2hlLnNldChwYWNrYWdlSnNvblBhdGgsIGRlcEZpZWxkcyk7XG4gIH1cblxuICByZXR1cm4gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKChkaXIpID0+IHBhdGgucmVzb2x2ZShkaXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdXNlIHJ1bGUgY29uZmlnIHRvIGZpbmQgcGFja2FnZS5qc29uXG4gICAgICBwYXRocy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjb25zdCBfcGFja2FnZUNvbnRlbnQgPSBnZXRQYWNrYWdlRGVwRmllbGRzKHBhY2thZ2VKc29uUGF0aCwgdHJ1ZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKChkZXBzS2V5KSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYWNrYWdlQ29udGVudFtkZXBzS2V5XSwgX3BhY2thZ2VDb250ZW50W2RlcHNLZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGtnVXAoe1xuICAgICAgICBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVzZSBjbG9zZXN0IHBhY2thZ2UuanNvblxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcGFja2FnZUNvbnRlbnQsXG4gICAgICAgIGdldFBhY2thZ2VEZXBGaWVsZHMocGFja2FnZUpzb25QYXRoLCBmYWxzZSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiBgVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICR7ZS5tZXNzYWdlfWAsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIFJ1biAnbnBtIGkgLVMgJHtwYWNrYWdlTmFtZX0nIHRvIGFkZCBpdGA7XG59XG5cbmZ1bmN0aW9uIGRldkRlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgbm90IGRldkRlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBvcHREZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+ICh7XG4gICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbkRldkRlcHM6IHJlc3VsdC5pc0luRGV2RGVwcyB8fCBkZXBzLmRldkRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICBpc0luQnVuZGxlZERlcHM6XG4gICAgICAgIHJlc3VsdC5pc0luQnVuZGxlZERlcHMgfHwgZGVwcy5idW5kbGVkRGVwZW5kZW5jaWVzLmluZGV4T2YoYW5jZXN0b3JOYW1lKSAhPT0gLTEsXG4gIH0pLCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzIHVubGVzcyBvcHRpb24gaXMgZW5hYmxlZFxuICBpZiAoXG4gICAgIWRlcHNPcHRpb25zLnZlcmlmeVR5cGVJbXBvcnRzXG4gICAgJiYgKFxuICAgICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgIHx8IG5vZGUuZXhwb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICB8fCBBcnJheS5pc0FycmF5KG5vZGUuc3BlY2lmaWVycykgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAmJiBub2RlLnNwZWNpZmllcnMuZXZlcnkoKHNwZWNpZmllcikgPT4gc3BlY2lmaWVyLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBzcGVjaWZpZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpXG4gICAgKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0eXBlT2ZJbXBvcnQgPSBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpO1xuXG4gIGlmIChcbiAgICB0eXBlT2ZJbXBvcnQgIT09ICdleHRlcm5hbCdcbiAgICAmJiAodHlwZU9mSW1wb3J0ICE9PSAnaW50ZXJuYWwnIHx8ICFkZXBzT3B0aW9ucy52ZXJpZnlJbnRlcm5hbERlcHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93RGV2RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwc1xuICAgIHx8IGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgfHwgZGVwc09wdGlvbnMuYWxsb3dCdW5kbGVkRGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luQnVuZGxlZERlcHNcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVzdCB0aGUgcmVhbCBuYW1lIGZyb20gdGhlIHJlc29sdmVkIHBhY2thZ2UuanNvblxuICAvLyBpZiBub3QgYWxpYXNlZCBpbXBvcnRzIChhbGlhcy9yZWFjdCBmb3IgZXhhbXBsZSksIGltcG9ydFBhY2thZ2VOYW1lIGNhbiBiZSBtaXNpbnRlcnByZXRlZFxuICBjb25zdCByZWFsUGFja2FnZU5hbWUgPSBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCk7XG4gIGlmIChyZWFsUGFja2FnZU5hbWUgJiYgcmVhbFBhY2thZ2VOYW1lICE9PSBpbXBvcnRQYWNrYWdlTmFtZSkge1xuICAgIGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcmVhbFBhY2thZ2VOYW1lLCBkZWNsYXJhdGlvblN0YXR1cyk7XG5cbiAgICBpZiAoXG4gICAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd1BlZXJEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5QZWVyRGVwc1xuICAgICAgfHwgZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5PcHREZXBzXG4gICAgICB8fCBkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luRGV2RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgZGV2RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcyAmJiAhZGVwc09wdGlvbnMuYWxsb3dPcHREZXBzKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgb3B0RGVwRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KG5vZGUsIG1pc3NpbmdFcnJvck1lc3NhZ2UocmVhbFBhY2thZ2VOYW1lIHx8IGltcG9ydFBhY2thZ2VOYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RDb25maWcoY29uZmlnLCBmaWxlbmFtZSkge1xuICAvLyBTaW1wbGVzdCBjb25maWd1cmF0aW9uIGZpcnN0LCBlaXRoZXIgYSBib29sZWFuIG9yIG5vdGhpbmcuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIC8vIEFycmF5IG9mIGdsb2JzLlxuICByZXR1cm4gY29uZmlnLnNvbWUoKGMpID0+IG1pbmltYXRjaChmaWxlbmFtZSwgYylcbiAgICB8fCBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSksXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB0aGUgdXNlIG9mIGV4dHJhbmVvdXMgcGFja2FnZXMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHsgdHlwZTogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7IHR5cGU6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogeyB0eXBlOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgIHBhY2thZ2VEaXI6IHsgdHlwZTogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICAgIGluY2x1ZGVJbnRlcm5hbDogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICAgIGluY2x1ZGVUeXBlczogeyB0eXBlOiBbJ2Jvb2xlYW4nXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgZGVwcyA9IGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBvcHRpb25zLnBhY2thZ2VEaXIpIHx8IGV4dHJhY3REZXBGaWVsZHMoe30pO1xuXG4gICAgY29uc3QgZGVwc09wdGlvbnMgPSB7XG4gICAgICBhbGxvd0RldkRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5kZXZEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd09wdERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5vcHRpb25hbERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93UGVlckRlcHM6IHRlc3RDb25maWcob3B0aW9ucy5wZWVyRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dCdW5kbGVkRGVwczogdGVzdENvbmZpZyhvcHRpb25zLmJ1bmRsZWREZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICB2ZXJpZnlJbnRlcm5hbERlcHM6ICEhb3B0aW9ucy5pbmNsdWRlSW50ZXJuYWwsXG4gICAgICB2ZXJpZnlUeXBlSW1wb3J0czogISFvcHRpb25zLmluY2x1ZGVUeXBlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG5cbiAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgZGVwRmllbGRDYWNoZS5jbGVhcigpO1xuICB9LFxufTtcbiJdfQ== \ 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 1f3fa1d0d8..0c15051e02 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 @@ -4,7 +4,7 @@ -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -36,7 +36,7 @@ module.exports = { return { ImportDefaultSpecifier: function () {function ImportDefaultSpecifier(node) { var declaration = (0, _importDeclaration2['default'])(context); - var exportMap = _builder2['default'].get(declaration.source.value, context); + var exportMap = _ExportMap2['default'].get(declaration.source.value, context); if (exportMap == null) {return;} if (exportMap.errors.length) { @@ -93,4 +93,4 @@ module.exports = { * @copyright 2016 Desmond Brand. All rights reserved. * See LICENSE in root directory for full license. */ -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRNYXBCdWlsZGVyIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLCtDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxV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SCx5QkFBeUk0QixXQUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBwcm9wZXJ0eSBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbFByb3BlcnR5TG9va3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpIHtcbiAgICAgIGNvbnN0IGxvb2t1cHMgPSBhbGxQcm9wZXJ0eUxvb2t1cHMuZ2V0KG9iamVjdE5hbWUpIHx8IFtdO1xuICAgICAgbG9va3Vwcy5wdXNoKHsgbm9kZSwgcHJvcE5hbWUgfSk7XG4gICAgICBhbGxQcm9wZXJ0eUxvb2t1cHMuc2V0KG9iamVjdE5hbWUsIGxvb2t1cHMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhwb3J0TWFwID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmIChleHBvcnRNYXAuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGV4cG9ydE1hcC5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVJbXBvcnRzLnNldChub2RlLmxvY2FsLm5hbWUsIHtcbiAgICAgICAgICBleHBvcnRNYXAsXG4gICAgICAgICAgc291cmNlUGF0aDogZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIE1lbWJlckV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBjb25zdCBvYmplY3ROYW1lID0gbm9kZS5vYmplY3QubmFtZTtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7XG4gICAgICAgIHN0b3JlUHJvcGVydHlMb29rdXAob2JqZWN0TmFtZSwgcHJvcE5hbWUsIG5vZGUpO1xuICAgICAgfSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNEZXN0cnVjdHVyZSA9IG5vZGUuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nXG4gICAgICAgICAgJiYgbm9kZS5pbml0ICE9IG51bGxcbiAgICAgICAgICAmJiBub2RlLmluaXQudHlwZSA9PT0gJ0lkZW50aWZpZXInO1xuICAgICAgICBpZiAoIWlzRGVzdHJ1Y3R1cmUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUuaW5pdC5uYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IHsga2V5IH0gb2Ygbm9kZS5pZC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7IGNvbnRpbnVlOyB9ICAvLyB0cnVlIGZvciByZXN0IHByb3BlcnRpZXNcbiAgICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIGtleS5uYW1lLCBrZXkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnUHJvZ3JhbTpleGl0JygpIHtcbiAgICAgICAgYWxsUHJvcGVydHlMb29rdXBzLmZvckVhY2goKGxvb2t1cHMsIG9iamVjdE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlSW1wb3J0ID0gZmlsZUltcG9ydHMuZ2V0KG9iamVjdE5hbWUpO1xuICAgICAgICAgIGlmIChmaWxlSW1wb3J0ID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvcE5hbWUsIG5vZGUgfSBvZiBsb29rdXBzKSB7XG4gICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBpbXBvcnQgY2FuIGhhdmUgYSBcImRlZmF1bHRcIiBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAnZGVmYXVsdCcpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmICghZmlsZUltcG9ydC5leHBvcnRNYXAubmFtZXNwYWNlLmhhcyhwcm9wTmFtZSkpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2F1dGlvbjogXFxgJHtvYmplY3ROYW1lfVxcYCBhbHNvIGhhcyBhIG5hbWVkIGV4cG9ydCBcXGAke3Byb3BOYW1lfVxcYC4gQ2hlY2sgaWYgeW91IG1lYW50IHRvIHdyaXRlIFxcYGltcG9ydCB7JHtwcm9wTmFtZX19IGZyb20gJyR7ZmlsZUltcG9ydC5zb3VyY2VQYXRofSdcXGAgaW5zdGVhZC5gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJmaWxlSW1wb3J0cyIsIk1hcCIsImFsbFByb3BlcnR5TG9va3VwcyIsInN0b3JlUHJvcGVydHlMb29rdXAiLCJvYmplY3ROYW1lIiwicHJvcE5hbWUiLCJub2RlIiwibG9va3VwcyIsImdldCIsInB1c2giLCJzZXQiLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIiwiZGVjbGFyYXRpb24iLCJleHBvcnRNYXAiLCJFeHBvcnRzIiwic291cmNlIiwidmFsdWUiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJsb2NhbCIsIm5hbWUiLCJzb3VyY2VQYXRoIiwiTWVtYmVyRXhwcmVzc2lvbiIsIm9iamVjdCIsInByb3BlcnR5IiwiVmFyaWFibGVEZWNsYXJhdG9yIiwiaXNEZXN0cnVjdHVyZSIsImlkIiwiaW5pdCIsInByb3BlcnRpZXMiLCJrZXkiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLHlDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxnQkFBVSxrQkFETjtBQUVKQyxtQkFBYSw0REFGVDtBQUdKQyxXQUFLLDBCQUFRLDRCQUFSLENBSEQsRUFGRjs7QUFPSkMsWUFBUSxFQVBKLEVBRFM7OztBQVdmQyxRQVhlLCtCQVdSQyxPQVhRLEVBV0M7QUFDZCxVQUFNQyxjQUFjLElBQUlDLEdBQUosRUFBcEI7QUFDQSxVQUFNQyxxQkFB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QUFXWCxVQUFwSixrQkFGYSxFQUFmOztBQUlELGlCQWJpRDtBQWNuRCxhQWREO0FBZUQsV0FwREksd0JBQVA7O0FBc0RELEtBM0VjLG1CQUFqQixDLENBZEEiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2VkIHVzZSBvZiBuYW1lIGV4cG9ydHNcbiAqIEBhdXRob3IgRGVzbW9uZCBCcmFuZFxuICogQGNvcHlyaWdodCAyMDE2IERlc21vbmQgQnJhbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTZWUgTElDRU5TRSBpbiByb290IGRpcmVjdG9yeSBmb3IgZnVsbCBsaWNlbnNlLlxuICovXG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgcHJvcGVydHkgb2YgZGVmYXVsdCBleHBvcnQuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXInKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBmaWxlSW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBhbGxQcm9wZXJ0eUxvb2t1cHMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKSB7XG4gICAgICBjb25zdCBsb29rdXBzID0gYWxsUHJvcGVydHlMb29rdXBzLmdldChvYmplY3ROYW1lKSB8fCBbXTtcbiAgICAgIGxvb2t1cHMucHVzaCh7IG5vZGUsIHByb3BOYW1lIH0pO1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLnNldChvYmplY3ROYW1lLCBsb29rdXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gaW1wb3J0RGVjbGFyYXRpb24oY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4cG9ydE1hcCA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChleHBvcnRNYXAgPT0gbnVsbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoZXhwb3J0TWFwLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBleHBvcnRNYXAucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlSW1wb3J0cy5zZXQobm9kZS5sb2NhbC5uYW1lLCB7XG4gICAgICAgICAgZXhwb3J0TWFwLFxuICAgICAgICAgIHNvdXJjZVBhdGg6IGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBNZW1iZXJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0Lm5hbWU7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lO1xuICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKTtcbiAgICAgIH0sXG5cbiAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcihub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzRGVzdHJ1Y3R1cmUgPSBub2RlLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJ1xuICAgICAgICAgICYmIG5vZGUuaW5pdCAhPSBudWxsXG4gICAgICAgICAgJiYgbm9kZS5pbml0LnR5cGUgPT09ICdJZGVudGlmaWVyJztcbiAgICAgICAgaWYgKCFpc0Rlc3RydWN0dXJlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLmluaXQubmFtZTtcbiAgICAgICAgZm9yIChjb25zdCB7IGtleSB9IG9mIG5vZGUuaWQucHJvcGVydGllcykge1xuICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgeyBjb250aW51ZTsgfSAgLy8gdHJ1ZSBmb3IgcmVzdCBwcm9wZXJ0aWVzXG4gICAgICAgICAgc3RvcmVQcm9wZXJ0eUxvb2t1cChvYmplY3ROYW1lLCBrZXkubmFtZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKSB7XG4gICAgICAgIGFsbFByb3BlcnR5TG9va3Vwcy5mb3JFYWNoKChsb29rdXBzLCBvYmplY3ROYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZUltcG9ydCA9IGZpbGVJbXBvcnRzLmdldChvYmplY3ROYW1lKTtcbiAgICAgICAgICBpZiAoZmlsZUltcG9ydCA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCB7IHByb3BOYW1lLCBub2RlIH0gb2YgbG9va3Vwcykge1xuICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgaW1wb3J0IGNhbiBoYXZlIGEgXCJkZWZhdWx0XCIgcHJvcGVydHlcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2RlZmF1bHQnKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICBpZiAoIWZpbGVJbXBvcnQuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMocHJvcE5hbWUpKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYENhdXRpb246IFxcYCR7b2JqZWN0TmFtZX1cXGAgYWxzbyBoYXMgYSBuYW1lZCBleHBvcnQgXFxgJHtwcm9wTmFtZX1cXGAuIENoZWNrIGlmIHlvdSBtZWFudCB0byB3cml0ZSBcXGBpbXBvcnQgeyR7cHJvcE5hbWV9fSBmcm9tICcke2ZpbGVJbXBvcnQuc291cmNlUGF0aH0nXFxgIGluc3RlYWQuYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 58bbb65799..63378a33a1 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 @@ -1,4 +1,4 @@ -'use strict';var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); +'use strict';var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _importDeclaration = require('../importDeclaration');var _importDeclaration2 = _interopRequireDefault(_importDeclaration); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} @@ -20,7 +20,7 @@ module.exports = { var declaration = (0, _importDeclaration2['default'])(context); - var imports = _builder2['default'].get(declaration.source.value, context); + var imports = _ExportMap2['default'].get(declaration.source.value, context); if (imports == null) {return;} if (imports.errors.length) { @@ -42,4 +42,4 @@ module.exports = { ExportDefaultSpecifier: checkDefault.bind(null, 'exported') }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEsK0M7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHFCQUFpQkMsR0FBakIsQ0FBcUJILFlBQVlJLE1BQVosQ0FBbUJDLEtBQXhDLEVBQStDVixPQUEvQyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwQnVpbGRlciBmcm9tICcuLi9leHBvcnRNYXAvYnVpbGRlcic7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnSGVscGZ1bCB3YXJuaW5ncycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCB1c2Ugb2YgZXhwb3J0ZWQgbmFtZSBhcyBpZGVudGlmaWVyIG9mIGRlZmF1bHQgZXhwb3J0LicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVkLWFzLWRlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQobmFtZUtleSwgZGVmYXVsdFNwZWNpZmllcikge1xuICAgICAgLy8gIzU2NjogZGVmYXVsdCBpcyBhIHZhbGlkIHNwZWNpZmllclxuICAgICAgaWYgKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSA9PT0gJ2RlZmF1bHQnKSB7IHJldHVybjsgfVxuXG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGltcG9ydERlY2xhcmF0aW9uKGNvbnRleHQpO1xuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZGVjbGFyYXRpb24uc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmhhcygnZGVmYXVsdCcpICYmIGltcG9ydHMuaGFzKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSkpIHtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICBkZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgIGBVc2luZyBleHBvcnRlZCBuYW1lICcke2RlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZX0nIGFzIGlkZW50aWZpZXIgZm9yIGRlZmF1bHQgZXhwb3J0LmAsXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdsb2NhbCcpLFxuICAgICAgRXhwb3J0RGVmYXVsdFNwZWNpZmllcjogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ2V4cG9ydGVkJyksXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrRGVmYXVsdCIsIm5hbWVLZXkiLCJkZWZhdWx0U3BlY2lmaWVyIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImhhcyIsInJlcG9ydCIsIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJiaW5kIiwiRXhwb3J0RGVmYXVsdFNwZWNpZmllciJdLCJtYXBwaW5ncyI6ImFBQUEseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsa0JBRE47QUFFSkMsbUJBQWEsOERBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7O0FBT0pDLFlBQVEsRUFQSixFQURTOzs7QUFXZkMsUUFYZSwrQkFXUkMsT0FYUSxFQVdDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtELENBQUUsT0FBUzs7QUFFN0QsWUFBTUMsY0FBYyxvQ0FBa0JMLE9BQWxCLENBQXBCOztBQUVBLFlBQU1NLFVBQVVDLHVCQUFRQyxHQUFSLENBQVlILFlBQVlJLE1BQVosQ0FBbUJDLEtBQS9CLEVBQXNDVixPQUF0QyxDQUFoQjtBQUNBLFlBQUlNLFdBQVcsSUFBZixFQUFxQixDQUFFLE9BQVM7O0FBRWhDLFlBQUlBLFFBQVFLLE1BQVIsQ0FBZUMsTUFBbkIsRUFBMkI7QUFDekJOLGtCQUFRTyxZQUFSLENBQXFCYixPQUFyQixFQUE4QkssV0FBOUI7QUFDQTtBQUNEOztBQUVELFlBQUlDLFFBQVFRLEdBQVIsQ0FBWSxTQUFaLEtBQTBCUixRQUFRUSxHQUFSLENBQVlYLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXRDLENBQTlCLEVBQTJFOztBQUV6RUosa0JBQVFlLE1BQVI7QUFDRVosMEJBREY7QUFFMEJBLDJCQUFpQkQsT0FBakIsRUFBMEJFLElBRnBEOzs7QUFLRDtBQUNGO0FBQ0QsYUFBTztBQUNMWSxnQ0FBd0JmLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLE9BQXhCLENBRG5CO0FBRUxDLGdDQUF3QmpCLGFBQWFnQixJQUFiLENBQWtCLElBQWxCLEVBQXdCLFVBQXhCLENBRm5CLEVBQVA7O0FBSUQsS0F2Q2MsbUJBQWpCIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGltcG9ydERlY2xhcmF0aW9uIGZyb20gJy4uL2ltcG9ydERlY2xhcmF0aW9uJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgdXNlIG9mIGV4cG9ydGVkIG5hbWUgYXMgaWRlbnRpZmllciBvZiBkZWZhdWx0IGV4cG9ydC4nLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gY2hlY2tEZWZhdWx0KG5hbWVLZXksIGRlZmF1bHRTcGVjaWZpZXIpIHtcbiAgICAgIC8vICM1NjY6IGRlZmF1bHQgaXMgYSB2YWxpZCBzcGVjaWZpZXJcbiAgICAgIGlmIChkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUgPT09ICdkZWZhdWx0JykgeyByZXR1cm47IH1cblxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5oYXMoJ2RlZmF1bHQnKSAmJiBpbXBvcnRzLmhhcyhkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUpKSB7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBgVXNpbmcgZXhwb3J0ZWQgbmFtZSAnJHtkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWV9JyBhcyBpZGVudGlmaWVyIGZvciBkZWZhdWx0IGV4cG9ydC5gLFxuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnbG9jYWwnKSxcbiAgICAgIEV4cG9ydERlZmF1bHRTcGVjaWZpZXI6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdleHBvcnRlZCcpLFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 4bd4145245..2b0c783ade 100644 --- a/node_modules/eslint-plugin-import/lib/rules/no-namespace.js +++ b/node_modules/eslint-plugin-import/lib/rules/no-namespace.js @@ -6,78 +6,13 @@ var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };} +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ /** - * @param {MemberExpression} memberExpression - * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` - */ /** - * @fileoverview Rule to disallow namespace import - * @author Radek Benkel - */function getMemberPropertyName(memberExpression) {return memberExpression.property.type === 'Identifier' ? memberExpression.property.name : - memberExpression.property.value; -} - -/** - * @param {ScopeManager} scopeManager - * @param {ASTNode} node - * @return {Set} - */ -function getVariableNamesInScope(scopeManager, node) { - var currentNode = node; - var scope = scopeManager.acquire(currentNode); - while (scope == null) { - currentNode = currentNode.parent; - scope = scopeManager.acquire(currentNode, true); - } - return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); -} - -/** - * - * @param {*} names - * @param {*} nameConflicts - * @param {*} namespaceName - */ -function generateLocalNames(names, nameConflicts, namespaceName) { - var localNames = {}; - names.forEach(function (name) { - var localName = void 0; - if (!nameConflicts[name].has(name)) { - localName = name; - } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { - localName = String(namespaceName) + '_' + String(name); - } else { - for (var i = 1; i < Infinity; i++) { - if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { - localName = String(namespaceName) + '_' + String(name) + '_' + String(i); - break; - } - } - } - localNames[name] = localName; - }); - return localNames; -} - -/** - * @param {Identifier[]} namespaceIdentifiers - * @returns {boolean} `true` if the namespace variable is more than just a glorified constant - */ -function usesNamespaceAsObject(namespaceIdentifiers) { - return !namespaceIdentifiers.every(function (identifier) { - var parent = identifier.parent; - - // `namespace.x` or `namespace['x']` - return ( - parent && - parent.type === 'MemberExpression' && ( - parent.property.type === 'Identifier' || parent.property.type === 'Literal')); - - }); -} - -module.exports = { - meta: { - type: 'suggestion', + * @fileoverview Rule to disallow namespace import + * @author Radek Benkel + */module.exports = { meta: { type: 'suggestion', docs: { category: 'Style guide', description: 'Forbid namespace (a.k.a. "wildcard" `*`) imports.', @@ -167,4 +102,74 @@ module.exports = { }return ImportNamespaceSpecifier;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibWVtYmVyRXhwcmVzc2lvbiIsInByb3BlcnR5IiwidHlwZSIsIm5hbWUiLCJ2YWx1ZSIsImdldFZhcmlhYmxlTmFtZXNJblNjb3BlIiwic2NvcGVNYW5hZ2VyIiwibm9kZSIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwicGFyZW50IiwiU2V0IiwidmFyaWFibGVzIiwiY29uY2F0IiwidXBwZXIiLCJtYXAiLCJ2YXJpYWJsZSIsImdlbmVyYXRlTG9jYWxOYW1lcyIsIm5hbWVzIiwibmFtZUNvbmZsaWN0cyIsIm5hbWVzcGFjZU5hbWUiLCJsb2NhbE5hbWVzIiwiZm9yRWFjaCIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSIsInVzZXNOYW1lc3BhY2VBc09iamVjdCIsIm5hbWVzcGFjZUlkZW50aWZpZXJzIiwiZXZlcnkiLCJpZGVudGlmaWVyIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaWdub3JlIiwiaXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNyZWF0ZSIsImNvbnRleHQiLCJmaXJzdE9wdGlvbiIsIm9wdGlvbnMiLCJpZ25vcmVHbG9icyIsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsImZpbmQiLCJnbG9iIiwic291cmNlIiwibWF0Y2hCYXNlIiwic2NvcGVWYXJpYWJsZXMiLCJnZXRTY29wZSIsIm5hbWVzcGFjZVZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNlIiwiY2FuRml4IiwibGVuZ3RoIiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImltcG9ydE5hbWUiLCJsb2NhbENvbmZsaWN0cyIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwibmFtZWRJbXBvcnRTcGVjaWZpZXJzIiwicHVzaCIsInJlcGxhY2VUZXh0Iiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBOzs7MExBUkE7Ozs2TEFZQSxTQUFTQSxxQkFBVCxDQUErQkMsZ0JBQS9CLEVBQWlELENBQy9DLE9BQU9BLGlCQUFpQkMsUUFBakIsQ0FBMEJDLElBQTFCLEtBQW1DLFlBQW5DLEdBQ0hGLGlCQUFpQkMsUUFBakIsQ0FBMEJFLElBRHZCO0FBRUhILG1CQUFpQkMsUUFBakIsQ0FBMEJHLEtBRjlCO0FBR0Q7O0FBRUQ7Ozs7O0FBS0EsU0FBU0MsdUJBQVQsQ0FBaUNDLFlBQWpDLEVBQStDQyxJQUEvQyxFQUFxRDtBQUNuRCxNQUFJQyxjQUFjRCxJQUFsQjtBQUNBLE1BQUlFLFFBQVFILGFBQWFJLE9BQWIsQ0FBcUJGLFdBQXJCLENBQVo7QUFDQSxTQUFPQyxTQUFTLElBQWhCLEVBQXNCO0FBQ3BCRCxrQkFBY0EsWUFBWUcsTUFBMUI7QUFDQUYsWUFBUUgsYUFBYUksT0FBYixDQUFxQkYsV0FBckIsRUFBa0MsSUFBbEMsQ0FBUjtBQUNEO0FBQ0QsU0FBTyxJQUFJSSxHQUFKLENBQVFILE1BQU1JLFNBQU4sQ0FBZ0JDLE1BQWhCLENBQXVCTCxNQUFNTSxLQUFOLENBQVlGLFNBQW5DLEVBQThDRyxHQUE5QyxDQUFrRCxVQUFDQyxRQUFELFVBQWNBLFNBQVNkLElBQXZCLEVBQWxELENBQVIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7QUFNQSxTQUFTZSxrQkFBVCxDQUE0QkMsS0FBNUIsRUFBbUNDLGFBQW5DLEVBQWtEQyxhQUFsRCxFQUFpRTtBQUMvRCxNQUFNQyxhQUFhLEVBQW5CO0FBQ0FILFFBQU1JLE9BQU4sQ0FBYyxVQUFDcEIsSUFBRCxFQUFVO0FBQ3RCLFFB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RnVELG9CQUV0Q08saUJBQWlCUCxVQUFqQixDQUZzQyxDQUFoQixFQUFoQixDQUE5Qjs7QUFJQUYsc0JBQU1XLElBQU4sQ0FBV2IsTUFBTWMsV0FBTixDQUFrQjFFLElBQWxCLGdCQUE2QndFLHNCQUFzQkcsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBN0IsU0FBWDs7QUFFQTtBQUNBckQscUNBQXFCTixPQUFyQixDQUE2QixVQUFDUSxVQUFELEVBQWdCO0FBQzNDLHNCQUFNcEIsU0FBU29CLFdBQVdwQixNQUExQjtBQUNBLHNCQUFJQSxVQUFVQSxPQUFPVCxJQUFQLEtBQWdCLGtCQUE5QixFQUFrRDtBQUNoRCx3QkFBTXFFLGFBQWF4RSxzQkFBc0JZLE1BQXRCLENBQW5CO0FBQ0EwRCwwQkFBTVcsSUFBTixDQUFXYixNQUFNYyxXQUFOLENBQWtCdEUsTUFBbEIsRUFBMEJtRSxpQkFBaUJQLFVBQWpCLENBQTFCLENBQVg7QUFDRDtBQUNGLGlCQU5EOztBQVFBLHVCQUFPRixLQUFQO0FBQ0QsZUFoRFksRUFBZjs7QUFrREQsV0E5REkscUNBQVA7O0FBZ0VELEtBM0ZjLG1CQUFqQiIsImZpbGUiOiJuby1uYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBuYW1lc3BhY2UgaW1wb3J0XG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0eWxlIGd1aWRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG5hbWVzcGFjZSAoYS5rLmEuIFwid2lsZGNhcmRcIiBgKmApIGltcG9ydHMuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZXNwYWNlJyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbe1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlnbm9yZToge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgZmlyc3RPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgaWdub3JlR2xvYnMgPSBmaXJzdE9wdGlvbi5pZ25vcmU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKG5vZGUpIHtcbiAgICAgICAgaWYgKGlnbm9yZUdsb2JzICYmIGlnbm9yZUdsb2JzLmZpbmQoKGdsb2IpID0+IG1pbmltYXRjaChub2RlLnBhcmVudC5zb3VyY2UudmFsdWUsIGdsb2IsIHsgbWF0Y2hCYXNlOiB0cnVlIH0pKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjb3BlVmFyaWFibGVzID0gY29udGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlVmFyaWFibGUgPSBzY29wZVZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4gdmFyaWFibGUuZGVmc1swXS5ub2RlID09PSBub2RlKTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlUmVmZXJlbmNlcyA9IG5hbWVzcGFjZVZhcmlhYmxlLnJlZmVyZW5jZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZUlkZW50aWZpZXJzID0gbmFtZXNwYWNlUmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBjYW5GaXggPSBuYW1lc3BhY2VJZGVudGlmaWVycy5sZW5ndGggPiAwICYmICF1c2VzTmFtZXNwYWNlQXNPYmplY3QobmFtZXNwYWNlSWRlbnRpZmllcnMpO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIG5hbWVzcGFjZSBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY29wZU1hbmFnZXIgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5zY29wZU1hbmFnZXI7XG4gICAgICAgICAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgICAgICAgICAvLyBQYXNzIDE6IENvbGxlY3QgdmFyaWFibGUgbmFtZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiBzY29wZSBmb3IgZWFjaCByZWZlcmVuY2Ugd2Ugd2FudFxuICAgICAgICAgICAgLy8gdG8gdHJhbnNmb3JtLCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRoYXQgd2UgY2hvb3NlIG5vbi1jb25mbGljdGluZyBpbXBvcnQgbmFtZXNcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWVDb25mbGljdHMgPSB7fTtcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbENvbmZsaWN0cyA9IGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgcGFyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0gPSBsb2NhbENvbmZsaWN0cztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbG9jYWxDb25mbGljdHMuZm9yRWFjaCgoYykgPT4gaW1wb3J0TmFtZUNvbmZsaWN0c1tpbXBvcnROYW1lXS5hZGQoYykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENob29zZSBuZXcgbmFtZXMgZm9yIGVhY2ggaW1wb3J0XG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lcyA9IE9iamVjdC5rZXlzKGltcG9ydE5hbWVDb25mbGljdHMpO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0TG9jYWxOYW1lcyA9IGdlbmVyYXRlTG9jYWxOYW1lcyhcbiAgICAgICAgICAgICAgaW1wb3J0TmFtZXMsXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVDb25mbGljdHMsXG4gICAgICAgICAgICAgIG5hbWVzcGFjZVZhcmlhYmxlLm5hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgd2l0aCBhIGxpc3Qgb2YgSW1wb3J0U3BlY2lmaWVyc1xuICAgICAgICAgICAgY29uc3QgbmFtZWRJbXBvcnRTcGVjaWZpZXJzID0gaW1wb3J0TmFtZXMubWFwKChpbXBvcnROYW1lKSA9PiBpbXBvcnROYW1lID09PSBpbXBvcnRMb2NhbE5hbWVzW2ltcG9ydE5hbWVdXG4gICAgICAgICAgICAgID8gaW1wb3J0TmFtZVxuICAgICAgICAgICAgICA6IGAke2ltcG9ydE5hbWV9IGFzICR7aW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYHsgJHtuYW1lZEltcG9ydFNwZWNpZmllcnMuam9pbignLCAnKX0gfWApKTtcblxuICAgICAgICAgICAgLy8gUGFzcyAyOiBSZXBsYWNlIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVzcGFjZSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGltcG9ydHNcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KHBhcmVudCwgaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file + + +/** + * @param {Identifier[]} namespaceIdentifiers + * @returns {boolean} `true` if the namespace variable is more than just a glorified constant + */ +function usesNamespaceAsObject(namespaceIdentifiers) { + return !namespaceIdentifiers.every(function (identifier) { + var parent = identifier.parent; + + // `namespace.x` or `namespace['x']` + return ( + parent && + parent.type === 'MemberExpression' && ( + parent.property.type === 'Identifier' || parent.property.type === 'Literal')); + + }); +} + +/** + * @param {MemberExpression} memberExpression + * @returns {string} the name of the member in the object expression, e.g. the `x` in `namespace.x` + */ +function getMemberPropertyName(memberExpression) { + return memberExpression.property.type === 'Identifier' ? + memberExpression.property.name : + memberExpression.property.value; +} + +/** + * @param {ScopeManager} scopeManager + * @param {ASTNode} node + * @return {Set} + */ +function getVariableNamesInScope(scopeManager, node) { + var currentNode = node; + var scope = scopeManager.acquire(currentNode); + while (scope == null) { + currentNode = currentNode.parent; + scope = scopeManager.acquire(currentNode, true); + } + return new Set(scope.variables.concat(scope.upper.variables).map(function (variable) {return variable.name;})); +} + +/** + * + * @param {*} names + * @param {*} nameConflicts + * @param {*} namespaceName + */ +function generateLocalNames(names, nameConflicts, namespaceName) { + var localNames = {}; + names.forEach(function (name) { + var localName = void 0; + if (!nameConflicts[name].has(name)) { + localName = name; + } else if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name))) { + localName = String(namespaceName) + '_' + String(name); + } else { + for (var i = 1; i < Infinity; i++) { + if (!nameConflicts[name].has(String(namespaceName) + '_' + String(name) + '_' + String(i))) { + localName = String(namespaceName) + '_' + String(name) + '_' + String(i); + break; + } + } + } + localNames[name] = localName; + }); + return localNames; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwicHJvcGVydGllcyIsImlnbm9yZSIsIml0ZW1zIiwidW5pcXVlSXRlbXMiLCJjcmVhdGUiLCJjb250ZXh0IiwiZmlyc3RPcHRpb24iLCJvcHRpb25zIiwiaWdub3JlR2xvYnMiLCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLCJub2RlIiwiZmluZCIsImdsb2IiLCJwYXJlbnQiLCJzb3VyY2UiLCJ2YWx1ZSIsIm1hdGNoQmFzZSIsInNjb3BlVmFyaWFibGVzIiwiZ2V0U2NvcGUiLCJ2YXJpYWJsZXMiLCJuYW1lc3BhY2VWYXJpYWJsZSIsInZhcmlhYmxlIiwiZGVmcyIsIm5hbWVzcGFjZVJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwibmFtZXNwYWNlSWRlbnRpZmllcnMiLCJtYXAiLCJyZWZlcmVuY2UiLCJpZGVudGlmaWVyIiwiY2FuRml4IiwibGVuZ3RoIiwidXNlc05hbWVzcGFjZUFzT2JqZWN0IiwicmVwb3J0IiwibWVzc2FnZSIsImZpeCIsImZpeGVyIiwic2NvcGVNYW5hZ2VyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImZvckVhY2giLCJpbXBvcnROYW1lIiwiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibG9jYWxDb25mbGljdHMiLCJnZXRWYXJpYWJsZU5hbWVzSW5TY29wZSIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwiZ2VuZXJhdGVMb2NhbE5hbWVzIiwibmFtZSIsIm5hbWVkSW1wb3J0U3BlY2lmaWVycyIsInB1c2giLCJyZXBsYWNlVGV4dCIsImpvaW4iLCJldmVyeSIsInByb3BlcnR5IiwibWVtYmVyRXhwcmVzc2lvbiIsImN1cnJlbnROb2RlIiwic2NvcGUiLCJhY3F1aXJlIiwiU2V0IiwiY29uY2F0IiwidXBwZXIiLCJuYW1lcyIsIm5hbWVDb25mbGljdHMiLCJuYW1lc3BhY2VOYW1lIiwibG9jYWxOYW1lcyIsImxvY2FsTmFtZSIsImhhcyIsImkiLCJJbmZpbml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxzQztBQUNBLHFDOztBQUVBO0FBQ0E7QUFDQTtBQVZBOzs7R0FZQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNLEVBQ0pDLE1BQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLGdCQUFVLGFBRE47QUFFSkMsbUJBQWEsbURBRlQ7QUFHSkMsV0FBSywwQkFBUSxjQUFSLENBSEQsRUFGRjs7QUFPSkMsYUFBUyxNQVBMO0FBUUpDLFlBQVEsQ0FBQztBQUNQTixZQUFNLFFBREM7QUFFUE8sa0JBQVk7QUFDVkMsZ0JBQVE7QUFDTlIsZ0JBQU0sT0FEQTtBQUVOUyxpQkFBTztBQUNMVCxrQkFBTSxRQURELEVBRkQ7O0FBS05VLHVCQUFhLElBTFAsRUFERSxFQUZMLEVBQUQsQ0FSSixFQURTOzs7Ozs7QUF1QmZDLFFBdkJlLCtCQXVCUkMsT0F2QlEsRUF1QkM7QUFDZCxVQUFNQyxjQUFjRCxRQUFRRSxPQUFSLENBQWdCLENBQWhCLEtBQXNCLEVBQTFDO0FBQ0EsVUFBTUMsY0FBY0YsWUFBWUwsTUFBaEM7O0FBRUEsYUFBTztBQUNMUSxnQ0FESyxpREFDb0JDLElBRHBCLEVBQzBCO0FBQzdCLGdCQUFJRixlQUFlQSxZQUFZRyxJQUFaLENBQWlCLFVBQUNDLElBQUQsVUFBVSw0QkFBVUYsS0FBS0csTUFBTCxDQUFZQyxNQUFaLENBQW1CQyxLQUE3QixFQUFvQ0gsSUFBcEMsRUFBMEMsRUFBRUksV0FBVyxJQUFiLEVBQTFDLENBQVYsRUFBakIsQ0FBbkIsRUFBK0c7QUFDN0c7QUFDRDs7QUFFRCxnQkFBTUMsaUJBQWlCWixRQUFRYSxRQUFSLEdBQW1CQyxTQUExQztBQUNBLGdCQUFNQyxvQkFB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QW9CbUIsR0FBcEIsQ0FBd0JuQixJQUF4QixDQUFMLEVBQW9DO0FBQ2xDa0Isa0JBQVlsQixJQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUksQ0FBQ2UsY0FBY2YsSUFBZCxFQUFvQm1CLEdBQXBCLFFBQTJCSCxhQUEzQixpQkFBNENoQixJQUE1QyxFQUFMLEVBQTBEO0FBQy9Ea0IseUJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEM7QUFDRCxLQUZNLE1BRUE7QUFDTCxXQUFLLElBQUlvQixJQUFJLENBQWIsRUFBZ0JBLElBQUlDLFFBQXBCLEVBQThCRCxHQUE5QixFQUFtQztBQUNqQyxZQUFJLENBQUNMLGNBQWNmLElBQWQsRUFBb0JtQixHQUFwQixRQUEyQkgsYUFBM0IsaUJBQTRDaEIsSUFBNUMsaUJBQW9Eb0IsQ0FBcEQsRUFBTCxFQUErRDtBQUM3REYsNkJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEMsaUJBQXdDb0IsQ0FBeEM7QUFDQTtBQUNEO0FBQ0Y7QUFDRjtBQUNESCxlQUFXakIsSUFBWCxJQUFtQmtCLFNBQW5CO0FBQ0QsR0FmRDtBQWdCQSxTQUFPRCxVQUFQO0FBQ0QiLCJmaWxlIjoibm8tbmFtZXNwYWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgbmFtZXNwYWNlIGltcG9ydFxuICogQGF1dGhvciBSYWRlayBCZW5rZWxcbiAqL1xuXG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ZvcmJpZCBuYW1lc3BhY2UgKGEuay5hLiBcIndpbGRjYXJkXCIgYCpgKSBpbXBvcnRzLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVzcGFjZScpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZ25vcmU6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGlnbm9yZUdsb2JzID0gZmlyc3RPcHRpb24uaWdub3JlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChpZ25vcmVHbG9icyAmJiBpZ25vcmVHbG9icy5maW5kKChnbG9iKSA9PiBtaW5pbWF0Y2gobm9kZS5wYXJlbnQuc291cmNlLnZhbHVlLCBnbG9iLCB7IG1hdGNoQmFzZTogdHJ1ZSB9KSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY29wZVZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVZhcmlhYmxlID0gc2NvcGVWYXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLmRlZnNbMF0ubm9kZSA9PT0gbm9kZSk7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVJlZmVyZW5jZXMgPSBuYW1lc3BhY2VWYXJpYWJsZS5yZWZlcmVuY2VzO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VJZGVudGlmaWVycyA9IG5hbWVzcGFjZVJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgY2FuRml4ID0gbmFtZXNwYWNlSWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJiAhdXNlc05hbWVzcGFjZUFzT2JqZWN0KG5hbWVzcGFjZUlkZW50aWZpZXJzKTtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBuYW1lc3BhY2UgaW1wb3J0LmAsXG4gICAgICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVNYW5hZ2VyID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuc2NvcGVNYW5hZ2VyO1xuICAgICAgICAgICAgY29uc3QgZml4ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gUGFzcyAxOiBDb2xsZWN0IHZhcmlhYmxlIG5hbWVzIHRoYXQgYXJlIGFscmVhZHkgaW4gc2NvcGUgZm9yIGVhY2ggcmVmZXJlbmNlIHdlIHdhbnRcbiAgICAgICAgICAgIC8vIHRvIHRyYW5zZm9ybSwgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIGNob29zZSBub24tY29uZmxpY3RpbmcgaW1wb3J0IG5hbWVzXG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lQ29uZmxpY3RzID0ge307XG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxDb25mbGljdHMgPSBnZXRWYXJpYWJsZU5hbWVzSW5TY29wZShzY29wZU1hbmFnZXIsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdID0gbG9jYWxDb25mbGljdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29uZmxpY3RzLmZvckVhY2goKGMpID0+IGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0uYWRkKGMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDaG9vc2UgbmV3IG5hbWVzIGZvciBlYWNoIGltcG9ydFxuICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZXMgPSBPYmplY3Qua2V5cyhpbXBvcnROYW1lQ29uZmxpY3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydExvY2FsTmFtZXMgPSBnZW5lcmF0ZUxvY2FsTmFtZXMoXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVzLFxuICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzLFxuICAgICAgICAgICAgICBuYW1lc3BhY2VWYXJpYWJsZS5uYW1lLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIHdpdGggYSBsaXN0IG9mIEltcG9ydFNwZWNpZmllcnNcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkSW1wb3J0U3BlY2lmaWVycyA9IGltcG9ydE5hbWVzLm1hcCgoaW1wb3J0TmFtZSkgPT4gaW1wb3J0TmFtZSA9PT0gaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXVxuICAgICAgICAgICAgICA/IGltcG9ydE5hbWVcbiAgICAgICAgICAgICAgOiBgJHtpbXBvcnROYW1lfSBhcyAke2ltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV19YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGB7ICR7bmFtZWRJbXBvcnRTcGVjaWZpZXJzLmpvaW4oJywgJyl9IH1gKSk7XG5cbiAgICAgICAgICAgIC8vIFBhc3MgMjogUmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lc3BhY2Ugd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCBpbXBvcnRzXG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChwYXJlbnQsIGltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50XG4gICAgICAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgICAmJiAocGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7TWVtYmVyRXhwcmVzc2lvbn0gbWVtYmVyRXhwcmVzc2lvblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIG1lbWJlciBpbiB0aGUgb2JqZWN0IGV4cHJlc3Npb24sIGUuZy4gdGhlIGB4YCBpbiBgbmFtZXNwYWNlLnhgXG4gKi9cbmZ1bmN0aW9uIGdldE1lbWJlclByb3BlcnR5TmFtZShtZW1iZXJFeHByZXNzaW9uKSB7XG4gIHJldHVybiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lXG4gICAgOiBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5LnZhbHVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2NvcGVNYW5hZ2VyfSBzY29wZU1hbmFnZXJcbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZVxuICogQHJldHVybiB7U2V0PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTmFtZXNJblNjb3BlKHNjb3BlTWFuYWdlciwgbm9kZSkge1xuICBsZXQgY3VycmVudE5vZGUgPSBub2RlO1xuICBsZXQgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSk7XG4gIHdoaWxlIChzY29wZSA9PSBudWxsKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7XG4gICAgc2NvcGUgPSBzY29wZU1hbmFnZXIuYWNxdWlyZShjdXJyZW50Tm9kZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoc2NvcGUudmFyaWFibGVzLmNvbmNhdChzY29wZS51cHBlci52YXJpYWJsZXMpLm1hcCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUpKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuIl19 \ 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 b75cff0d02..e0c9a5c894 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 @@ -12,15 +12,6 @@ var containsPath = function containsPath(filepath, target) { return relative === '' || !relative.startsWith('..'); }; -function isMatchingTargetPath(filename, targetPath) { - if ((0, _isGlob2['default'])(targetPath)) { - var mm = new _minimatch.Minimatch(targetPath); - return mm.match(filename); - } - - return containsPath(filename, targetPath); -} - module.exports = { meta: { type: 'problem', @@ -92,6 +83,15 @@ module.exports = { some(function (targetPath) {return isMatchingTargetPath(currentFilename, targetPath);});}); + function isMatchingTargetPath(filename, targetPath) { + if ((0, _isGlob2['default'])(targetPath)) { + var mm = new _minimatch.Minimatch(targetPath); + return mm.match(filename); + } + + return containsPath(filename, targetPath); + } + function isValidExceptionPath(absoluteFromPath, absoluteExceptionPath) { var relativeExceptionPath = _path2['default'].relative(absoluteFromPath, absoluteExceptionPath); @@ -242,4 +242,4 @@ module.exports = { checkForRestrictedImportPath(source.value, source); }, { commonjs: true }); }return noRestrictedPaths;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsImlzTWF0Y2hpbmdUYXJnZXRQYXRoIiwiZmlsZW5hbWUiLCJ0YXJnZXRQYXRoIiwibW0iLCJNaW5pbWF0Y2giLCJtYXRjaCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFB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QUEzRztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNnRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQWhLRCxPQUFpQjlELGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGZpbGVuYW1lLCB0YXJnZXRQYXRoKSB7XG4gIGlmIChpc0dsb2IodGFyZ2V0UGF0aCkpIHtcbiAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgcmV0dXJuIG1tLm1hdGNoKGZpbGVuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ1N0YXRpYyBhbmFseXNpcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2Ugd2hpY2ggZmlsZXMgY2FuIGJlIGltcG9ydGVkIGluIGEgZ2l2ZW4gZm9sZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXJlc3RyaWN0ZWQtcGF0aHMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgem9uZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXhjZXB0OiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYXNlUGF0aDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBub1Jlc3RyaWN0ZWRQYXRocyhjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCByZXN0cmljdGVkUGF0aHMgPSBvcHRpb25zLnpvbmVzIHx8IFtdO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGNvbnN0IG1hdGNoaW5nWm9uZXMgPSByZXN0cmljdGVkUGF0aHMuZmlsdGVyKFxuICAgICAgKHpvbmUpID0+IFtdLmNvbmNhdCh6b25lLnRhcmdldClcbiAgICAgICAgLm1hcCgodGFyZ2V0KSA9PiBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHRhcmdldCkpXG4gICAgICAgIC5zb21lKCh0YXJnZXRQYXRoKSA9PiBpc01hdGNoaW5nVGFyZ2V0UGF0aChjdXJyZW50RmlsZW5hbWUsIHRhcmdldFBhdGgpKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tUGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZUV4Y2VwdGlvblBhdGggPSBwYXRoLnJlbGF0aXZlKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCk7XG5cbiAgICAgIHJldHVybiBpbXBvcnRUeXBlKHJlbGF0aXZlRXhjZXB0aW9uUGF0aCwgY29udGV4dCkgIT09ICdwYXJlbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFyZUJvdGhHbG9iUGF0dGVybkFuZEFic29sdXRlUGF0aChhcmVHbG9iUGF0dGVybnMpIHtcbiAgICAgIHJldHVybiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiBpc0dsb2IpICYmIGFyZUdsb2JQYXR0ZXJucy5zb21lKChpc0dsb2IpID0+ICFpc0dsb2IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbmZpZ3VyZWQgYGZyb21gIHBhdGggZm9yIHRoYXQgem9uZS4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2Iobm9kZSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlLFxuICAgICAgICBtZXNzYWdlOiAnUmVzdHJpY3RlZCBwYXRoIGBmcm9tYCBtdXN0IGNvbnRhaW4gZWl0aGVyIG9ubHkgZ2xvYiBwYXR0ZXJucyBvciBub25lJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZ2xvYiBwYXR0ZXJucyB3aGVuIGBmcm9tYCBjb250YWlucyBnbG9iIHBhdHRlcm5zJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnM6IGZhbHNlLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uOiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IG1tID0gbmV3IE1pbmltYXRjaChhYnNvbHV0ZUZyb20pO1xuICAgICAgY29uc3QgaXNQYXRoUmVzdHJpY3RlZCA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IG1tLm1hdGNoKGFic29sdXRlSW1wb3J0UGF0aCk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSB6b25lRXhjZXB0LmV2ZXJ5KGlzR2xvYik7XG5cbiAgICAgIGlmIChoYXNWYWxpZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXhjZXB0aW9uc01tID0gem9uZUV4Y2VwdC5tYXAoKGV4Y2VwdCkgPT4gbmV3IE1pbmltYXRjaChleGNlcHQpKTtcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gZXhjZXB0aW9uc01tLnNvbWUoKG1tKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpIHtcbiAgICAgIGxldCBpc1BhdGhFeGNlcHRpb247XG5cbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUZyb20pO1xuXG4gICAgICBjb25zdCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzID0gem9uZUV4Y2VwdFxuICAgICAgICAubWFwKChleGNlcHRpb25QYXRoKSA9PiBwYXRoLnJlc29sdmUoYWJzb2x1dGVGcm9tLCBleGNlcHRpb25QYXRoKSk7XG4gICAgICBjb25zdCBoYXNWYWxpZEV4Y2VwdGlvbnMgPSBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzXG4gICAgICAgIC5ldmVyeSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb20sIGFic29sdXRlRXhjZXB0aW9uUGF0aCkpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGFic29sdXRlRXhjZXB0aW9uUGF0aHMuc29tZShcbiAgICAgICAgICAoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBvcnRJbnZhbGlkRXhjZXB0aW9uID0gcmVwb3J0SW52YWxpZEV4Y2VwdGlvblBhdGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUGF0aFJlc3RyaWN0ZWQsXG4gICAgICAgIGhhc1ZhbGlkRXhjZXB0aW9ucyxcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9ucyh2YWxpZGF0b3JzLCBub2RlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLnJlcG9ydEludmFsaWRFeGNlcHRpb24obm9kZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKHZhbGlkYXRvcnMsIG5vZGUsIGltcG9ydFBhdGgsIGN1c3RvbU1lc3NhZ2UpIHtcbiAgICAgIHZhbGlkYXRvcnMuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHBhdGggXCJ7e2ltcG9ydFBhdGh9fVwiIGltcG9ydGVkIGluIHJlc3RyaWN0ZWQgem9uZS4ke2N1c3RvbU1lc3NhZ2UgPyBgICR7Y3VzdG9tTWVzc2FnZX1gIDogJyd9YCxcbiAgICAgICAgICBkYXRhOiB7IGltcG9ydFBhdGggfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlUGF0aFZhbGlkYXRvcnMgPSAoem9uZUZyb20sIHpvbmVFeGNlcHQgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsWm9uZUZyb20gPSBbXS5jb25jYXQoem9uZUZyb20pO1xuICAgICAgY29uc3QgYXJlR2xvYlBhdHRlcm5zID0gYWxsWm9uZUZyb20ubWFwKGlzR2xvYik7XG5cbiAgICAgIGlmIChhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSkge1xuICAgICAgICByZXR1cm4gW2NvbXB1dGVNaXhlZEdsb2JBbmRBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoKV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzR2xvYlBhdHRlcm4gPSBhcmVHbG9iUGF0dGVybnMuZXZlcnkoKGlzR2xvYikgPT4gaXNHbG9iKTtcblxuICAgICAgcmV0dXJuIGFsbFpvbmVGcm9tLm1hcCgoc2luZ2xlWm9uZUZyb20pID0+IHtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVGcm9tID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCBzaW5nbGVab25lRnJvbSk7XG5cbiAgICAgICAgaWYgKGlzR2xvYlBhdHRlcm4pIHtcbiAgICAgICAgICByZXR1cm4gY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wdXRlQWJzb2x1dGVQYXRoVmFsaWRhdG9yKGFic29sdXRlRnJvbSwgem9uZUV4Y2VwdCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tGb3JSZXN0cmljdGVkSW1wb3J0UGF0aChpbXBvcnRQYXRoLCBub2RlKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZUltcG9ydFBhdGggPSByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWFic29sdXRlSW1wb3J0UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoaW5nWm9uZXMuZm9yRWFjaCgoem9uZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JzW2luZGV4XSkge1xuICAgICAgICAgIHZhbGlkYXRvcnNbaW5kZXhdID0gbWFrZVBhdGhWYWxpZGF0b3JzKHpvbmUuZnJvbSwgem9uZS5leGNlcHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoID0gdmFsaWRhdG9yc1tpbmRleF0uZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5pc1BhdGhSZXN0cmljdGVkKGFic29sdXRlSW1wb3J0UGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGguZmlsdGVyKCh2YWxpZGF0b3IpID0+ICF2YWxpZGF0b3IuaGFzVmFsaWRFeGNlcHRpb25zKTtcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9yc1dpdGhJbnZhbGlkRXhjZXB0aW9ucywgbm9kZSk7XG5cbiAgICAgICAgY29uc3QgYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyA9IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aFxuICAgICAgICAgIC5maWx0ZXIoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyAmJiAhdmFsaWRhdG9yLmlzUGF0aEV4Y2VwdGlvbihhYnNvbHV0ZUltcG9ydFBhdGgpKTtcbiAgICAgICAgcmVwb3J0SW1wb3J0c0luUmVzdHJpY3RlZFpvbmUoYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucywgbm9kZSwgaW1wb3J0UGF0aCwgem9uZS5tZXNzYWdlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IHtcbiAgICAgIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoc291cmNlLnZhbHVlLCBzb3VyY2UpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsInpvbmVzIiwibWluSXRlbXMiLCJpdGVtcyIsImFueU9mIiwidW5pcXVlSXRlbXMiLCJtaW5MZW5ndGgiLCJmcm9tIiwiZXhjZXB0IiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwiY29uY2F0IiwibWFwIiwicmVzb2x2ZSIsInNvbWUiLCJ0YXJnZXRQYXRoIiwiaXNNYXRjaGluZ1RhcmdldFBhdGgiLCJmaWxlbmFtZSIsIm1tIiwiTWluaW1hdGNoIiwibWF0Y2giLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgiLCJhcmVHbG9iUGF0dGVybnMiLCJpc0dsb2IiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uTWl4ZWRHbG9iQW5kTm9uR2xvYiIsInJlcG9ydEludmFsaWRFeGNlcHRpb25HbG9iIiwiY29tcHV0ZU1peGVkR2xvYkFuZEFic29sdXRlUGF0aFZhbGlkYXRvciIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwiY29tcHV0ZUdsb2JQYXR0ZXJuUGF0aFZhbGlkYXRvciIsImFic29sdXRlRnJvbSIsInpvbmVFeGNlcHQiLCJpc1BhdGhFeGNlcHRpb24iLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJldmVyeSIsImV4Y2VwdGlvbnNNbSIsImNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzIiwiZXhjZXB0aW9uUGF0aCIsInJlcG9ydEludmFsaWRFeGNlcHRpb25zIiwidmFsaWRhdG9ycyIsImZvckVhY2giLCJ2YWxpZGF0b3IiLCJyZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSIsImltcG9ydFBhdGgiLCJjdXN0b21NZXNzYWdlIiwiZGF0YSIsIm1ha2VQYXRoVmFsaWRhdG9ycyIsInpvbmVGcm9tIiwiYWxsWm9uZUZyb20iLCJpc0dsb2JQYXR0ZXJuIiwic2luZ2xlWm9uZUZyb20iLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW5kZXgiLCJhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGgiLCJ2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zIiwiYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoRXhjbHVkaW5nRXhjZXB0aW9ucyIsInNvdXJjZSIsInZhbHVlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLDRCOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxpQztBQUNBO0FBQ0EscUM7QUFDQSxnRDs7QUFFQSxJQUFNQSxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQ3pDLE1BQU1DLFdBQVdDLGtCQUFLRCxRQUFMLENBQWNELE1BQWQsRUFBc0JELFFBQXRCLENBQWpCO0FBQ0EsU0FBT0UsYUFBYSxFQUFiLElBQW1CLENBQUNBLFNBQVNFLFVBQVQsQ0FBb0IsSUFBcEIsQ0FBM0I7QUFDRCxDQUhEOztBQUtBQyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsZ0JBQVUsaUJBRE47QUFFSkMsbUJBQWEsd0RBRlQ7QUFHSkMsV0FBSywwQkFBUSxxQkFBUixDQUhELEVBRkY7OztBQVFKQyxZQUFRO0FBQ047QUFDRUwsWUFBTSxRQURSO0FBRUVNLGtCQUFZO0FBQ1ZDLGVBQU87QUFDTFAsZ0JBQU0sT0FERDtBQUVMUSxvQkFBVSxDQUZMO0FBR0xDLGlCQUFPO0FBQ0xULGtCQUFNLFFBREQ7QUFFTE0sd0JBQVk7QUFDVmIsc0JBQVE7QUFDTmlCLHVCQUFPO0FBQ0wsa0JBQUVWLE1BQU0sUUFBUixFQURLO0FBRUw7QUFDRUEsd0JBQU0sT0FEUjtBQUVFUyx5QkFBTyxFQUFFVCxNQUFNLFFBQVIsRUFGVDtBQUdFVywrQkFBYSxJQUhmO0FBSUVDLDZCQUFXLENBSmIsRUFGSyxDQURELEVBREU7Ozs7QUFZVkMsb0JBQU07QUFDSkgsdUJBQU87QUFDTCxrQkFBRVYsTUFBTSxRQUFSLEVBREs7QUFFTDtBQUNFQSx3QkFBTSxPQURSO0FBRUVTLHlCQUFPLEVBQUVULE1BQU0sUUFBUixFQUZUO0FBR0VXLCtCQUFhLElBSGY7QUFJRUMsNkJBQVcsQ0FKYixFQUZLLENBREgsRUFaSTs7OztBQXVCVkUsc0JBQVE7QUFDTmQsc0JBQU0sT0FEQTtBQUVOUyx1QkFBTztBQUNMVCx3QkFBTSxRQURELEVBRkQ7O0FBS05XLDZCQUFhLElBTFAsRUF2QkU7O0FBOEJWSSx1QkFBUyxFQUFFZixNQUFNLFFBQVIsRUE5QkMsRUFGUDs7QUFrQ0xnQixrQ0FBc0IsS0FsQ2pCLEVBSEYsRUFERzs7O0FBeUNWQyxrQkFBVSxFQUFFakIsTUFBTSxRQUFSLEVBekNBLEVBRmQ7O0FBNkNFZ0IsNEJBQXNCLEtBN0N4QixFQURNLENBUkosRUFEUzs7Ozs7QUE0RGZFLHVCQUFRLFNBQVNDLGlCQUFULENBQTJCQyxPQUEzQixFQUFvQztBQUMxQyxVQUFNQyxVQUFVRCxRQUFRQyxPQUFSLENBQWdCLENBQWhCLEtBQXNCLEVBQXRDO0FBQ0EsVUFBTUMsa0JBQWtCRCxRQUFRZCxLQUFSLElBQWlCLEVBQXpDO0FBQ0EsVUFBTVUsV0FBV0ksUUFBUUosUUFBUixJQUFvQk0sUUFBUUMsR0FBUixFQUFyQztBQUNBLFVBQU1DLGtCQUFrQkwsUUFBUU0sbUJBQVIsR0FBOEJOLFFBQVFNLG1CQUFSLEVBQTlCLEdBQThETixRQUFRTyxXQUFSLEVBQXRGO0FBQ0EsVUFBTUMsZ0JBQWdCTixnQkFBZ0JPLE1BQWhCO0FBQ3BCLGdCQUFDQyxJQUFELFVBQVUsR0FBR0MsTUFBSCxDQUFVRCxLQUFLckMsTUFBZjtBQUNQdUMsV0FETyxDQUNILFVBQUN2QyxNQUFELFVBQVlFLGtCQUFLc0MsT0FBTCxDQUFhaEIsUUFBYixFQUF1QnhCLE1BQXZCLENBQVosRUFERztBQUVQeUMsWUFGTyxDQUVGLFVBQUNDLFVBQUQsVUFBZ0JDLHFCQUFxQlgsZUFBckIsRUFBc0NVLFVBQXRDLENBQWhCLEVBRkUsQ0FBVixFQURvQixDQUF0Qjs7O0FBTUEsZUFBU0Msb0JBQVQsQ0FBOEJDLFFBQTlCLEVBQXdDRixVQUF4QyxFQUFvRDtBQUNsRCxZQUFJLHlCQUFPQSxVQUFQLENBQUosRUFBd0I7QUFDdEIsY0FBTUcsS0FBSyxJQUFJQyxvQkFBSixDQUFjSixVQUFkLENBQVg7QUFDQSxpQkFBT0csR0FBR0UsS0FBSCxDQUFTSCxRQUFULENBQVA7QUFDRDs7QUFFRCxlQUFPOUMsYUFBYThDLFFBQWIsRUFBdUJGLFVBQXZCLENBQVA7QUFDRDs7QUFFRCxlQUFTTSxvQkFBVCxDQUE4QkMsZ0JBQTlCLEVBQWdEQyxxQkFBaEQsRUFBdUU7QUFDckUsWUFBTUMsd0JBQXdCakQsa0JBQUtELFFBQUwsQ0FBY2dELGdCQUFkLEVBQWdDQyxxQkFBaEMsQ0FBOUI7O0FBRUEsZUFBTyw2QkFBV0MscUJBQVgsRUFBa0N4QixPQUFsQyxNQUErQyxRQUF0RDtBQUNEOztBQUVELGVBQVN5QixpQ0FBVCxDQUEyQ0MsZUFBM0MsRUFBNEQ7QUFDMUQsZUFBT0EsZ0JBQWdCWixJQUFoQixDQUFxQixVQUFDYSxNQUFELFVBQVlBLE1BQVosRUFBckIsS0FBNENELGdCQUFnQlosSUFBaEIsQ0FBcUIsVUFBQ2EsTUFBRCxVQUFZLENBQUNBLE1BQWIsRUFBckIsQ0FBbkQ7QUFDRDs7QUFFRCxlQUFTQywwQkFBVCxDQUFvQ0MsSUFBcEMsRUFBMEM7QUFDeEM3QixnQkFBUThCLE1BQVIsQ0FBZTtBQUNiRCxvQkFEYTtBQUVibEMsbUJBQVMsNkZBRkksRUFBZjs7QUFJRDs7QUFFRCxlQUFTb0MseUNBQVQsQ0FBbURGLElBQW5ELEVBQXlEO0FBQ3ZEN0IsZ0JBQVE4QixNQUFSLENBQWU7QUFDYkQsb0JBRGE7QUFFYmxDLG1CQUFTLHVFQUZJLEVBQWY7O0FBSUQ7O0FBRUQsZUFBU3FDLDBCQUFULENBQW9DSCxJQUFwQyxFQUEwQztBQUN4QzdCLGdCQUFROEIsTUFBUixDQUFlO0FBQ2JELG9CQURhO0FBRWJsQyxtQkFBUyxxRkFGSSxFQUFmOztBQUlEOztBQUVELGVBQVNzQyx3Q0FBVCxHQUFvRDtBQUNsRCxlQUFPO0FBQ0xDLHlDQUFrQixvQ0FBTSxJQUFOLEVBQWxCLDJCQURLO0FBRUxDLDhCQUFvQixLQUZmO0FBR0xDLGtDQUF3QkwseUNBSG5CLEVBQVA7O0FBS0Q7O0FBRUQsZUFBU00sK0JBQVQsQ0FBeUNDLFlBQXpDLEVBQXVEQyxVQUF2RCxFQUFtRTtBQUNqRSxZQUFJQyx3QkFBSjs7QUFFQSxZQUFNdEIsS0FBSyxJQUFJQyxvQkFBSixDQUFjbUIsWUFBZCxDQUFYO0FBQ0EsWUFBTUosZ0NBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBQ08sa0JBQUQsVUFBd0J2QixHQUFHRSxLQUFILENBQVNxQixrQkFBVCxDQUF4QixFQUFuQiwyQkFBTjtBQUNBLFlBQU1OLHFCQUFxQkksV0FBV0csS0FBWCxDQUFpQmYsbUJBQWpCLENBQTNCOztBQUVBLFlBQUlRLGtCQUFKLEVBQXdCO0FBQ3RCLGNBQU1RLGVBQWVKLFdBQVczQixHQUFYLENBQWUsVUFBQ2xCLE1BQUQsVUFBWSxJQUFJeUIsb0JBQUosQ0FBY3pCLE1BQWQsQ0FBWixFQUFmLENBQXJCO0FBQ0E4Qyx5Q0FBa0IseUJBQUNDLGtCQUFELFVBQXdCRSxhQUFhN0IsSUFBYixDQUFrQixVQUFDSSxFQUFELFVBQVFBLEdBQUdFLEtBQUgsQ0FBU3FCLGtCQUFULENBQVIsRUFBbEIsQ0FBeEIsRUFBbEI7QUFDRDs7QUFFRCxZQUFNTCx5QkFBeUJKLDBCQUEvQjs7QUFFQSxlQUFPO0FBQ0xFLDRDQURLO0FBRUxDLGdEQUZLO0FBR0xLLDBDQUhLO0FBSUxKLHdEQUpLLEVBQVA7O0FBTUQ7O0FBRUQsZUFBU1EsNEJBQVQsQ0FBc0NOLFlBQXRDLEVBQW9EQyxVQUFwRCxFQUFnRTtBQUM5RCxZQUFJQyx3QkFBSjs7QUFFQSxZQUFNTixnQ0FBbUIsU0FBbkJBLGdCQUFtQixDQUFDTyxrQkFBRCxVQUF3QnRFLGFBQWFzRSxrQkFBYixFQUFpQ0gsWUFBakMsQ0FBeEIsRUFBbkIsMkJBQU47O0FBRUEsWUFBTU8seUJBQXlCTjtBQUM1QjNCLFdBRDRCLENBQ3hCLFVBQUNrQyxhQUFELFVBQW1CdkUsa0JBQUtzQyxPQUFMLENBQWF5QixZQUFiLEVBQTJCUSxhQUEzQixDQUFuQixFQUR3QixDQUEvQjtBQUVBLFlBQU1YLHFCQUFxQlU7QUFDeEJILGFBRHdCLENBQ2xCLFVBQUNuQixxQkFBRCxVQUEyQkYscUJBQXFCaUIsWUFBckIsRUFBbUNmLHFCQUFuQyxDQUEzQixFQURrQixDQUEzQjs7QUFHQSxZQUFJWSxrQkFBSixFQUF3QjtBQUN0QksseUNBQWtCLHlCQUFDQyxrQkFBRCxVQUF3QkksdUJBQXVCL0IsSUFBdkI7QUFDeEMsd0JBQUNTLHFCQUFELFVBQTJCcEQsYUFBYXNFLGtCQUFiLEVBQWlDbEIscUJBQWpDLENBQTNCLEVBRHdDLENBQXhCLEVBQWxCOztBQUdEOztBQUVELFlBQU1hLHlCQUF5QlIsMEJBQS9COztBQUVBLGVBQU87QUFDTE0sNENBREs7QUFFTEMsZ0RBRks7QUFHTEssMENBSEs7QUFJTEosd0RBSkssRUFBUDs7QUFNRDs7QUFFRCxlQUFTVyx1QkFBVCxDQUFpQ0MsVUFBakMsRUFBNkNuQixJQUE3QyxFQUFtRDtBQUNqRG1CLG1CQUFXQyxPQUFYLENBQW1CLFVBQUNDLFNBQUQsVUFBZUEsVUFBVWQsc0JBQVYsQ0FBaUNQLElBQWpDLENBQWYsRUFBbkI7QUFDRDs7QUFFRCxlQUFTc0IsNkJBQVQsQ0FBdUNILFVBQXZDLEVBQW1EbkIsSUFBbkQsRUFBeUR1QixVQUF6RCxFQUFxRUMsYUFBckUsRUFBb0Y7QUFDbEZMLG1CQUFXQyxPQUFYLENBQW1CLFlBQU07QUFDdkJqRCxrQkFBUThCLE1BQVIsQ0FBZTtBQUNiRCxzQkFEYTtBQUVibEMsd0ZBQXlFMEQsNkJBQW9CQSxhQUFwQixJQUFzQyxFQUEvRyxDQUZhO0FBR2JDLGtCQUFNLEVBQUVGLHNCQUFGLEVBSE8sRUFBZjs7QUFLRCxTQU5EO0FBT0Q7O0FBRUQsVUFBTUcsa0NBQXFCLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsUUFBRCxFQUErQixLQUFwQmpCLFVBQW9CLHVFQUFQLEVBQU87QUFDeEQsY0FBTWtCLGNBQWMsR0FBRzlDLE1BQUgsQ0FBVTZDLFFBQVYsQ0FBcEI7QUFDQSxjQUFNOUIsa0JBQWtCK0IsWUFBWTdDLEdBQVosQ0FBZ0JlLG1CQUFoQixDQUF4Qjs7QUFFQSxjQUFJRixrQ0FBa0NDLGVBQWxDLENBQUosRUFBd0Q7QUFDdEQsbUJBQU8sQ0FBQ08sMENBQUQsQ0FBUDtBQUNEOztBQUVELGNBQU15QixnQkFBZ0JoQyxnQkFBZ0JnQixLQUFoQixDQUFzQixVQUFDZixNQUFELFVBQVlBLE1BQVosRUFBdEIsQ0FBdEI7O0FBRUEsaUJBQU84QixZQUFZN0MsR0FBWixDQUFnQixVQUFDK0MsY0FBRCxFQUFvQjtBQUN6QyxnQkFBTXJCLGVBQWUvRCxrQkFBS3NDLE9BQUwsQ0FBYWhCLFFBQWIsRUFBdUI4RCxjQUF2QixDQUFyQjs7QUFFQSxnQkFBSUQsYUFBSixFQUFtQjtBQUNqQixxQkFBT3JCLGdDQUFnQ0MsWUFBaEMsRUFBOENDLFVBQTlDLENBQVA7QUFDRDtBQUNELG1CQUFPSyw2QkFBNkJOLFlBQTdCLEVBQTJDQyxVQUEzQyxDQUFQO0FBQ0QsV0FQTSxDQUFQO0FBUUQsU0FsQkssNkJBQU47O0FBb0JBLFVBQU1TLGFBQWEsRUFBbkI7O0FBRUEsZUFBU1ksNEJBQVQsQ0FBc0NSLFVBQXRDLEVBQWtEdkIsSUFBbEQsRUFBd0Q7QUFDdEQsWUFBTVkscUJBQXFCLDBCQUFRVyxVQUFSLEVBQW9CcEQsT0FBcEIsQ0FBM0I7O0FBRUEsWUFBSSxDQUFDeUMsa0JBQUwsRUFBeUI7QUFDdkI7QUFDRDs7QUFFRGpDLHNCQUFjeUMsT0FBZCxDQUFzQixVQUFDdkMsSUFBRCxFQUFPbUQsS0FBUCxFQUFpQjtBQUNyQyxjQUFJLENBQUNiLFdBQVdhLEtBQVgsQ0FBTCxFQUF3QjtBQUN0QmIsdUJBQVdhLEtBQVgsSUFBb0JOLG1CQUFtQjdDLEtBQUtqQixJQUF4QixFQUE4QmlCLEtBQUtoQixNQUFuQyxDQUFwQjtBQUNEOztBQUVELGNBQU1vRSxvQ0FBb0NkLFdBQVdhLEtBQVgsRUFBa0JwRCxNQUFsQixDQUF5QixVQUFDeUMsU0FBRCxVQUFlQSxVQUFVaEIsZ0JBQVYsQ0FBMkJPLGtCQUEzQixDQUFmLEVBQXpCLENBQTFDOztBQUVBLGNBQU1zQixrQ0FBa0NELGtDQUFrQ3JELE1BQWxDLENBQXlDLFVBQUN5QyxTQUFELFVBQWUsQ0FBQ0EsVUFBVWYsa0JBQTFCLEVBQXpDLENBQXhDO0FBQ0FZLGtDQUF3QmdCLCtCQUF4QixFQUF5RGxDLElBQXpEOztBQUVBLGNBQU1tQyx1REFBdURGO0FBQzFEckQsZ0JBRDBELENBQ25ELFVBQUN5QyxTQUFELFVBQWVBLFVBQVVmLGtCQUFWLElBQWdDLENBQUNlLFVBQVVWLGVBQVYsQ0FBMEJDLGtCQUExQixDQUFoRCxFQURtRCxDQUE3RDtBQUVBVSx3Q0FBOEJhLG9EQUE5QixFQUFvRm5DLElBQXBGLEVBQTBGdUIsVUFBMUYsRUFBc0cxQyxLQUFLZixPQUEzRztBQUNELFNBYkQ7QUFjRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNzRSxNQUFELEVBQVk7QUFDL0JMLHFDQUE2QkssT0FBT0MsS0FBcEMsRUFBMkNELE1BQTNDO0FBQ0QsT0FGTSxFQUVKLEVBQUVFLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQXpLRCxPQUFpQnBFLGlCQUFqQixJQTVEZSxFQUFqQiIsImZpbGUiOiJuby1yZXN0cmljdGVkLXBhdGhzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGlzR2xvYiBmcm9tICdpcy1nbG9iJztcbmltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3RhdGljIGFuYWx5c2lzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRW5mb3JjZSB3aGljaCBmaWxlcyBjYW4gYmUgaW1wb3J0ZWQgaW4gYSBnaXZlbiBmb2xkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB6b25lczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleGNlcHQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQYXRoOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIG5vUmVzdHJpY3RlZFBhdGhzKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQYXRocyA9IG9wdGlvbnMuem9uZXMgfHwgW107XG4gICAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2VQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgY3VycmVudEZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgbWF0Y2hpbmdab25lcyA9IHJlc3RyaWN0ZWRQYXRocy5maWx0ZXIoXG4gICAgICAoem9uZSkgPT4gW10uY29uY2F0KHpvbmUudGFyZ2V0KVxuICAgICAgICAubWFwKCh0YXJnZXQpID0+IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgdGFyZ2V0KSlcbiAgICAgICAgLnNvbWUoKHRhcmdldFBhdGgpID0+IGlzTWF0Y2hpbmdUYXJnZXRQYXRoKGN1cnJlbnRGaWxlbmFtZSwgdGFyZ2V0UGF0aCkpLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBpc01hdGNoaW5nVGFyZ2V0UGF0aChmaWxlbmFtZSwgdGFyZ2V0UGF0aCkge1xuICAgICAgaWYgKGlzR2xvYih0YXJnZXRQYXRoKSkge1xuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2godGFyZ2V0UGF0aCk7XG4gICAgICAgIHJldHVybiBtbS5tYXRjaChmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250YWluc1BhdGgoZmlsZW5hbWUsIHRhcmdldFBhdGgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFeGNlcHRpb25QYXRoKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVFeGNlcHRpb25QYXRoID0gcGF0aC5yZWxhdGl2ZShhYnNvbHV0ZUZyb21QYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpO1xuXG4gICAgICByZXR1cm4gaW1wb3J0VHlwZShyZWxhdGl2ZUV4Y2VwdGlvblBhdGgsIGNvbnRleHQpICE9PSAncGFyZW50JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVCb3RoR2xvYlBhdHRlcm5BbmRBYnNvbHV0ZVBhdGgoYXJlR2xvYlBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gYXJlR2xvYlBhdHRlcm5zLnNvbWUoKGlzR2xvYikgPT4gaXNHbG9iKSAmJiBhcmVHbG9iUGF0dGVybnMuc29tZSgoaXNHbG9iKSA9PiAhaXNHbG9iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aChub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoZSBjb25maWd1cmVkIGBmcm9tYCBwYXRoIGZvciB0aGF0IHpvbmUuJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25NaXhlZEdsb2JBbmROb25HbG9iKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBgZnJvbWAgbXVzdCBjb250YWluIGVpdGhlciBvbmx5IGdsb2IgcGF0dGVybnMgb3Igbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYihub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGdsb2IgcGF0dGVybnMgd2hlbiBgZnJvbWAgY29udGFpbnMgZ2xvYiBwYXR0ZXJucycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zOiBmYWxzZSxcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbjogcmVwb3J0SW52YWxpZEV4Y2VwdGlvbk1peGVkR2xvYkFuZE5vbkdsb2IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goYWJzb2x1dGVGcm9tKTtcbiAgICAgIGNvbnN0IGlzUGF0aFJlc3RyaWN0ZWQgPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBtbS5tYXRjaChhYnNvbHV0ZUltcG9ydFBhdGgpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gem9uZUV4Y2VwdC5ldmVyeShpc0dsb2IpO1xuXG4gICAgICBpZiAoaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGV4Y2VwdGlvbnNNbSA9IHpvbmVFeGNlcHQubWFwKChleGNlcHQpID0+IG5ldyBNaW5pbWF0Y2goZXhjZXB0KSk7XG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGV4Y2VwdGlvbnNNbS5zb21lKChtbSkgPT4gbW0ubWF0Y2goYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcG9ydEludmFsaWRFeGNlcHRpb24gPSByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZCxcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zLFxuICAgICAgICBpc1BhdGhFeGNlcHRpb24sXG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVBYnNvbHV0ZVBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KSB7XG4gICAgICBsZXQgaXNQYXRoRXhjZXB0aW9uO1xuXG4gICAgICBjb25zdCBpc1BhdGhSZXN0cmljdGVkID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVGcm9tKTtcblxuICAgICAgY29uc3QgYWJzb2x1dGVFeGNlcHRpb25QYXRocyA9IHpvbmVFeGNlcHRcbiAgICAgICAgLm1hcCgoZXhjZXB0aW9uUGF0aCkgPT4gcGF0aC5yZXNvbHZlKGFic29sdXRlRnJvbSwgZXhjZXB0aW9uUGF0aCkpO1xuICAgICAgY29uc3QgaGFzVmFsaWRFeGNlcHRpb25zID0gYWJzb2x1dGVFeGNlcHRpb25QYXRoc1xuICAgICAgICAuZXZlcnkoKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpKTtcblxuICAgICAgaWYgKGhhc1ZhbGlkRXhjZXB0aW9ucykge1xuICAgICAgICBpc1BhdGhFeGNlcHRpb24gPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzLnNvbWUoXG4gICAgICAgICAgKGFic29sdXRlRXhjZXB0aW9uUGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbiA9IHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgIGlzUGF0aEV4Y2VwdGlvbixcbiAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbnModmFsaWRhdG9ycywgbm9kZSkge1xuICAgICAgdmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5yZXBvcnRJbnZhbGlkRXhjZXB0aW9uKG5vZGUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbXBvcnRzSW5SZXN0cmljdGVkWm9uZSh2YWxpZGF0b3JzLCBub2RlLCBpbXBvcnRQYXRoLCBjdXN0b21NZXNzYWdlKSB7XG4gICAgICB2YWxpZGF0b3JzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBwYXRoIFwie3tpbXBvcnRQYXRofX1cIiBpbXBvcnRlZCBpbiByZXN0cmljdGVkIHpvbmUuJHtjdXN0b21NZXNzYWdlID8gYCAke2N1c3RvbU1lc3NhZ2V9YCA6ICcnfWAsXG4gICAgICAgICAgZGF0YTogeyBpbXBvcnRQYXRoIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFrZVBhdGhWYWxpZGF0b3JzID0gKHpvbmVGcm9tLCB6b25lRXhjZXB0ID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGFsbFpvbmVGcm9tID0gW10uY29uY2F0KHpvbmVGcm9tKTtcbiAgICAgIGNvbnN0IGFyZUdsb2JQYXR0ZXJucyA9IGFsbFpvbmVGcm9tLm1hcChpc0dsb2IpO1xuXG4gICAgICBpZiAoYXJlQm90aEdsb2JQYXR0ZXJuQW5kQWJzb2x1dGVQYXRoKGFyZUdsb2JQYXR0ZXJucykpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wdXRlTWl4ZWRHbG9iQW5kQWJzb2x1dGVQYXRoVmFsaWRhdG9yKCldO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0dsb2JQYXR0ZXJuID0gYXJlR2xvYlBhdHRlcm5zLmV2ZXJ5KChpc0dsb2IpID0+IGlzR2xvYik7XG5cbiAgICAgIHJldHVybiBhbGxab25lRnJvbS5tYXAoKHNpbmdsZVpvbmVGcm9tKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic29sdXRlRnJvbSA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgc2luZ2xlWm9uZUZyb20pO1xuXG4gICAgICAgIGlmIChpc0dsb2JQYXR0ZXJuKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVHbG9iUGF0dGVyblBhdGhWYWxpZGF0b3IoYWJzb2x1dGVGcm9tLCB6b25lRXhjZXB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHV0ZUFic29sdXRlUGF0aFZhbGlkYXRvcihhYnNvbHV0ZUZyb20sIHpvbmVFeGNlcHQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoaW1wb3J0UGF0aCwgbm9kZSkge1xuICAgICAgY29uc3QgYWJzb2x1dGVJbXBvcnRQYXRoID0gcmVzb2x2ZShpbXBvcnRQYXRoLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFhYnNvbHV0ZUltcG9ydFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGluZ1pvbmVzLmZvckVhY2goKHpvbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yc1tpbmRleF0pIHtcbiAgICAgICAgICB2YWxpZGF0b3JzW2luZGV4XSA9IG1ha2VQYXRoVmFsaWRhdG9ycyh6b25lLmZyb20sIHpvbmUuZXhjZXB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aCA9IHZhbGlkYXRvcnNbaW5kZXhdLmZpbHRlcigodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IuaXNQYXRoUmVzdHJpY3RlZChhYnNvbHV0ZUltcG9ydFBhdGgpKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzV2l0aEludmFsaWRFeGNlcHRpb25zID0gYXBwbGljYWJsZVZhbGlkYXRvcnNGb3JJbXBvcnRQYXRoLmZpbHRlcigodmFsaWRhdG9yKSA9PiAhdmFsaWRhdG9yLmhhc1ZhbGlkRXhjZXB0aW9ucyk7XG4gICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb25zKHZhbGlkYXRvcnNXaXRoSW52YWxpZEV4Y2VwdGlvbnMsIG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMgPSBhcHBsaWNhYmxlVmFsaWRhdG9yc0ZvckltcG9ydFBhdGhcbiAgICAgICAgICAuZmlsdGVyKCh2YWxpZGF0b3IpID0+IHZhbGlkYXRvci5oYXNWYWxpZEV4Y2VwdGlvbnMgJiYgIXZhbGlkYXRvci5pc1BhdGhFeGNlcHRpb24oYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICAgIHJlcG9ydEltcG9ydHNJblJlc3RyaWN0ZWRab25lKGFwcGxpY2FibGVWYWxpZGF0b3JzRm9ySW1wb3J0UGF0aEV4Y2x1ZGluZ0V4Y2VwdGlvbnMsIG5vZGUsIGltcG9ydFBhdGgsIHpvbmUubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlKSA9PiB7XG4gICAgICBjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoKHNvdXJjZS52YWx1ZSwgc291cmNlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ== \ 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 4347b2c4a0..f6f6348b16 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 @@ -13,171 +13,54 @@ var _object = require('object.values');var _object2 = _interopRequireDefault(_ob var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes); var _arrayPrototype = require('array.prototype.flatmap');var _arrayPrototype2 = _interopRequireDefault(_arrayPrototype); -var _fsWalk = require('../core/fsWalk'); -var _builder = require('../exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _patternCapture = require('../exportMap/patternCapture');var _patternCapture2 = _interopRequireDefault(_patternCapture); +var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap); var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);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 - */ /** - * Attempt to load the internal `FileEnumerator` class, which has existed in a couple - * of different places, depending on the version of `eslint`. Try requiring it from both - * locations. - * @returns Returns the `FileEnumerator` class if its requirable, otherwise `undefined`. - */function requireFileEnumerator() {var FileEnumerator = void 0; - - // Try getting it from the eslint private / deprecated api - try {var _require = - require('eslint/use-at-your-own-risk');FileEnumerator = _require.FileEnumerator; - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - // If not there, then try getting it from eslint/lib/cli-engine/file-enumerator (moved there in v6) - try {var _require2 = - require('eslint/lib/cli-engine/file-enumerator');FileEnumerator = _require2.FileEnumerator; - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } + */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.concat((0, _arrayPrototype2['default'])(src, function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); + + return _originalListFilesToProcess(patterns); + }; } } - return FileEnumerator; } -/** - * - * @param FileEnumerator the `FileEnumerator` class from `eslint`'s internal api - * @param {string} src path to the src root - * @param {string[]} extensions list of supported extensions - * @returns {{ filename: string, ignored: boolean }[]} list of files to operate on - */ -function listFilesUsingFileEnumerator(FileEnumerator, src, extensions) { - var e = new FileEnumerator({ - extensions: extensions }); - - - return Array.from( - e.iterateFiles(src), - function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { filename: filePath, ignored: ignored };}); - -} - -/** - * Attempt to require old versions of the file enumeration capability from v6 `eslint` and earlier, and use - * those functions to provide the list of files to operate on - * @param {string} src path to the src root - * @param {string[]} extensions list of supported extensions - * @returns {string[]} list of files to operate on - */ -function listFilesWithLegacyFunctions(src, extensions) { - 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 - - return originalListFilesToProcess(src, { +if (FileEnumerator) { + listFilesToProcess = function listFilesToProcess(src, extensions) { + var e = new FileEnumerator({ extensions: extensions }); - } catch (e) { - // Absorb this if it's MODULE_NOT_FOUND - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - - // Last place to try (pre v5.3) - var _require4 = - - require('eslint/lib/util/glob-util'),_originalListFilesToProcess = _require4.listFilesToProcess; - var patterns = src.concat( - (0, _arrayPrototype2['default'])( - src, - function (pattern) {return extensions.map(function (extension) {return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));});})); - - - - return _originalListFilesToProcess(patterns); - } -} - -/** - * Given a source root and list of supported extensions, use fsWalk and the - * new `eslint` `context.session` api to build the list of files we want to operate on - * @param {string[]} srcPaths array of source paths (for flat config this should just be a singular root (e.g. cwd)) - * @param {string[]} extensions list of supported extensions - * @param {{ isDirectoryIgnored: (path: string) => boolean, isFileIgnored: (path: string) => boolean }} session eslint context session object - * @returns {string[]} list of files to operate on - */ -function listFilesWithModernApi(srcPaths, extensions, session) { - /** @type {string[]} */ - var files = [];var _loop = function _loop( - - i) { - var src = srcPaths[i]; - // Use walkSync along with the new session api to gather the list of files - var entries = (0, _fsWalk.walkSync)(src, { - deepFilter: function () {function deepFilter(entry) { - var fullEntryPath = (0, _path.resolve)(src, entry.path); - - // Include the directory if it's not marked as ignore by eslint - return !session.isDirectoryIgnored(fullEntryPath); - }return deepFilter;}(), - entryFilter: function () {function entryFilter(entry) { - var fullEntryPath = (0, _path.resolve)(src, entry.path); - - // Include the file if it's not marked as ignore by eslint and its extension is included in our list - return ( - !session.isFileIgnored(fullEntryPath) && - extensions.find(function (extension) {return entry.path.endsWith(extension);})); - - }return entryFilter;}() }); - - // Filter out directories and map entries to their paths - files.push.apply(files, _toConsumableArray( - entries. - filter(function (entry) {return !entry.dirent.isDirectory();}). - map(function (entry) {return entry.path;})));};for (var i = 0; i < srcPaths.length; i++) {_loop(i); + return Array.from(e.iterateFiles(src), function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return { + ignored: ignored, + filename: filePath };}); - } - return files; -} - -/** - * Given a src pattern and list of supported extensions, return a list of files to process - * with this rule. - * @param {string} src - file, directory, or glob pattern of files to act on - * @param {string[]} extensions - list of supported file extensions - * @param {import('eslint').Rule.RuleContext} context - the eslint context object - * @returns {string[] | { filename: string, ignored: boolean }[]} the list of files that this rule will evaluate. - */ -function listFilesToProcess(src, extensions, context) { - // If the context object has the new session functions, then prefer those - // Otherwise, fallback to using the deprecated `FileEnumerator` for legacy support. - // https://github.com/eslint/eslint/issues/18087 - if ( - context.session && - context.session.isFileIgnored && - context.session.isDirectoryIgnored) - { - return listFilesWithModernApi(src, extensions, context.session); - } - - // Fallback to og FileEnumerator - var FileEnumerator = requireFileEnumerator(); - - // If we got the FileEnumerator, then let's go with that - if (FileEnumerator) { - return listFilesUsingFileEnumerator(FileEnumerator, src, extensions); - } - // If not, then we can try even older versions of this capability (listFilesToProcess) - return listFilesWithLegacyFunctions(src, extensions); + }; } var EXPORT_DEFAULT_DECLARATION = 'ExportDefaultDeclaration'; @@ -199,30 +82,28 @@ var DEFAULT = 'default'; function forEachDeclarationIdentifier(declaration, cb) { if (declaration) { - var isTypeDeclaration = declaration.type === TS_INTERFACE_DECLARATION || - declaration.type === TS_TYPE_ALIAS_DECLARATION || - declaration.type === TS_ENUM_DECLARATION; - if ( declaration.type === FUNCTION_DECLARATION || declaration.type === CLASS_DECLARATION || - isTypeDeclaration) + declaration.type === TS_INTERFACE_DECLARATION || + declaration.type === TS_TYPE_ALIAS_DECLARATION || + declaration.type === TS_ENUM_DECLARATION) { - cb(declaration.id.name, isTypeDeclaration); + cb(declaration.id.name); } else if (declaration.type === VARIABLE_DECLARATION) { declaration.declarations.forEach(function (_ref2) {var id = _ref2.id; if (id.type === OBJECT_PATTERN) { - (0, _patternCapture2['default'])(id, function (pattern) { + (0, _ExportMap.recursivePatternCapture)(id, function (pattern) { if (pattern.type === IDENTIFIER) { - cb(pattern.name, false); + cb(pattern.name); } }); } else if (id.type === ARRAY_PATTERN) { id.elements.forEach(function (_ref3) {var name = _ref3.name; - cb(name, false); + cb(name); }); } else { - cb(id.name, false); + cb(id.name); } }); } @@ -279,7 +160,6 @@ var exportList = new Map(); var visitorKeyMap = new Map(); -/** @type {Set} */ var ignoredFiles = new Set(); var filesOutsideSrc = new Set(); @@ -289,40 +169,32 @@ var isNodeModule = function isNodeModule(path) {return (/\/(node_modules)\//.tes * read all files matching the patterns in src and ignoreExports * * return all files matching src pattern, which are not matching the ignoreExports pattern - * @type {(src: string, ignoreExports: string, context: import('eslint').Rule.RuleContext) => Set} */ -function resolveFiles(src, ignoreExports, context) { +var resolveFiles = function resolveFiles(src, ignoreExports, context) { var extensions = Array.from((0, _ignore.getFileExtensions)(context.settings)); - var srcFileList = listFilesToProcess(src, extensions, context); + var srcFileList = listFilesToProcess(src, extensions); // prepare list of ignored files - var ignoredFilesList = listFilesToProcess(ignoreExports, extensions, context); - - // The modern api will return a list of file paths, rather than an object - if (ignoredFilesList.length && typeof ignoredFilesList[0] === 'string') { - ignoredFilesList.forEach(function (filename) {return ignoredFiles.add(filename);}); - } else { - ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); - } + var ignoredFilesList = listFilesToProcess(ignoreExports, extensions); + ignoredFilesList.forEach(function (_ref4) {var filename = _ref4.filename;return ignoredFiles.add(filename);}); // prepare list of source files, don't consider files from node_modules - var resolvedFiles = srcFileList.length && typeof srcFileList[0] === 'string' ? - srcFileList.filter(function (filePath) {return !isNodeModule(filePath);}) : - (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;}); - return new Set(resolvedFiles); -} + return new Set( + (0, _arrayPrototype2['default'])(srcFileList, function (_ref5) {var filename = _ref5.filename;return isNodeModule(filename) ? [] : filename;})); + +}; /** - * parse all source files and build up 2 maps containing the existing imports and exports - */ + * parse all source files and build up 2 maps containing the existing imports and exports + */ var prepareImportsAndExports = function prepareImportsAndExports(srcFiles, context) { var exportAll = new Map(); srcFiles.forEach(function (file) { var exports = new Map(); var imports = new Map(); - var currentExports = _builder2['default'].get(file, context); + var currentExports = _ExportMap2['default'].get(file, context); if (currentExports) {var dependencies = @@ -454,7 +326,6 @@ var getSrc = function getSrc(src) { * prepare the lists of existing imports and exports - should only be executed once at * the start of a new eslint run */ -/** @type {Set} */ var srcFiles = void 0; var lastPrepareKey = void 0; var doPreparation = function doPreparation(src, ignoreExports, context) { @@ -569,10 +440,6 @@ module.exports = { unusedExports: { description: 'report exports without any usage', - type: 'boolean' }, - - ignoreUnusedTypeExports: { - description: 'ignore type exports without any usage', type: 'boolean' } }, @@ -602,8 +469,7 @@ module.exports = { - - context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports,ignoreUnusedTypeExports = _ref9.ignoreUnusedTypeExports; + context.options[0] || {},src = _ref9.src,_ref9$ignoreExports = _ref9.ignoreExports,ignoreExports = _ref9$ignoreExports === undefined ? [] : _ref9$ignoreExports,missingExports = _ref9.missingExports,unusedExports = _ref9.unusedExports; if (unusedExports) { doPreparation(src, ignoreExports, context); @@ -635,15 +501,11 @@ module.exports = { exportCount.set(IMPORT_NAMESPACE_SPECIFIER, namespaceImports); }return checkExportPresence;}(); - var checkUsage = function () {function checkUsage(node, exportedValue, isTypeExport) { + var checkUsage = function () {function checkUsage(node, exportedValue) { if (!unusedExports) { return; } - if (isTypeExport && ignoreUnusedTypeExports) { - return; - } - if (ignoredFiles.has(file)) { return; } @@ -667,10 +529,6 @@ module.exports = { exports = exportList.get(file); - if (!exports) { - console.error('file `' + String(file) + '` has no exports. Please update to the latest, and if it still happens, report this on https://github.com/import-js/eslint-plugin-import/issues/2866!'); - } - // special case: export * from var exportAll = exports.get(EXPORT_ALL_DECLARATION); if (typeof exportAll !== 'undefined' && exportedValue !== IMPORT_DEFAULT_SPECIFIER) { @@ -1072,16 +930,16 @@ module.exports = { checkExportPresence(node); }return ProgramExit;}(), ExportDefaultDeclaration: function () {function ExportDefaultDeclaration(node) { - checkUsage(node, IMPORT_DEFAULT_SPECIFIER, false); + checkUsage(node, IMPORT_DEFAULT_SPECIFIER); }return ExportDefaultDeclaration;}(), ExportNamedDeclaration: function () {function ExportNamedDeclaration(node) { node.specifiers.forEach(function (specifier) { - checkUsage(specifier, specifier.exported.name || specifier.exported.value, false); + checkUsage(specifier, specifier.exported.name || specifier.exported.value); }); - forEachDeclarationIdentifier(node.declaration, function (name, isTypeExport) { - checkUsage(node, name, isTypeExport); + forEachDeclarationIdentifier(node.declaration, function (name) { + checkUsage(node, name); }); }return ExportNamedDeclaration;}() }; }return create;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlRmlsZUVudW1lcmF0b3IiLCJGaWxlRW51bWVyYXRvciIsInJlcXVpcmUiLCJlIiwiY29kZSIsImxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IiLCJzcmMiLCJleHRlbnNpb25zIiwiQXJyYXkiLCJmcm9tIiwiaXRlcmF0ZUZpbGVzIiwiZmlsZVBhdGgiLCJpZ25vcmVkIiwiZmlsZW5hbWUiLCJsaXN0RmlsZXNXaXRoTGVnYWN5RnVuY3Rpb25zIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJsaXN0RmlsZXNUb1Byb2Nlc3MiLCJwYXR0ZXJucyIsImNvbmNhdCIsInBhdHRlcm4iLCJtYXAiLCJleHRlbnNpb24iLCJ0ZXN0IiwibGlzdEZpbGVzV2l0aE1vZGVybkFwaSIsInNyY1BhdGhzIiwic2Vzc2lvbiIsImZpbGVzIiwiaSIsImVudHJpZXMiLCJkZWVwRmlsdGVyIiwiZW50cnkiLCJmdWxsRW50cnlQYXRoIiwicGF0aCIsImlzRGlyZWN0b3J5SWdub3JlZCIsImVudHJ5RmlsdGVyIiwiaXNGaWxlSWdub3JlZCIsImZpbmQiLCJlbmRzV2l0aCIsInB1c2giLCJmaWx0ZXIiLCJkaXJlbnQiLCJpc0RpcmVjdG9yeSIsImxlbmd0aCIsImNvbnRleHQiLCJFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiIsIkVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiIsIkVYUE9SVF9BTExfREVDTEFSQVRJT04iLCJJTVBPUlRfREVDTEFSQVRJT04iLCJJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiIsIklNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiIsIlZBUklBQkxFX0RFQ0xBUkFUSU9OIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJDTEFTU19ERUNMQVJBVElPTiIsIklERU5USUZJRVIiLCJPQkpFQ1RfUEFUVEVSTiIsIkFSUkFZX1BBVFRFUk4iLCJUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04iLCJUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OIiwiVFNfRU5VTV9ERUNMQVJBVElPTiIsIkRFRkFVTFQiLCJmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyIiwiZGVjbGFyYXRpb24iLCJjYiIsImlzVHlwZURlY2xhcmF0aW9uIiwidHlwZSIsImlkIiwibmFtZSIsImRlY2xhcmF0aW9ucyIsImZvckVhY2giLCJlbGVtZW50cyIsImltcG9ydExpc3QiLCJNYXAiLCJleHBvcnRMaXN0IiwidmlzaXRvcktleU1hcCIsImlnbm9yZWRGaWxlcyIsIlNldCIsImZpbGVzT3V0c2lkZVNyYyIsImlzTm9kZU1vZHVsZSIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJzZXR0aW5ncyIsInNyY0ZpbGVMaXN0IiwiaWdub3JlZEZpbGVzTGlzdCIsImFkZCIsInJlc29sdmVkRmlsZXMiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0TWFwQnVpbGRlciIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiaWdub3JlVW51c2VkVHlwZUV4cG9ydHMiLCJhbnlPZiIsIm1pbkl0ZW1zIiwicmVxdWlyZWQiLCJjcmVhdGUiLCJvcHRpb25zIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiY2hlY2tFeHBvcnRQcmVzZW5jZSIsIm5vZGUiLCJleHBvcnRDb3VudCIsIm5hbWVzcGFjZUltcG9ydHMiLCJzaXplIiwicmVwb3J0IiwiYm9keSIsImNoZWNrVXNhZ2UiLCJleHBvcnRlZFZhbHVlIiwiaXNUeXBlRXhwb3J0IiwiY29uc29sZSIsImVycm9yIiwiZXhwb3J0c0tleSIsInVwZGF0ZUV4cG9ydFVzYWdlIiwibmV3RXhwb3J0cyIsIm5ld0V4cG9ydElkZW50aWZpZXJzIiwiZXhwb3J0ZWQiLCJ1cGRhdGVJbXBvcnRVc2FnZSIsIm9sZEltcG9ydFBhdGhzIiwib2xkTmFtZXNwYWNlSW1wb3J0cyIsIm5ld05hbWVzcGFjZUltcG9ydHMiLCJvbGRFeHBvcnRBbGwiLCJuZXdFeHBvcnRBbGwiLCJvbGREZWZhdWx0SW1wb3J0cyIsIm5ld0RlZmF1bHRJbXBvcnRzIiwib2xkSW1wb3J0cyIsIm5ld0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInNvdXJjZSIsInAiLCJJbXBvcnRFeHByZXNzaW9uIiwiY2hpbGQiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImFyZ3VtZW50cyIsImFzdE5vZGUiLCJyZXNvbHZlZFBhdGgiLCJyYXciLCJyZXBsYWNlIiwiaW1wb3J0ZWQiLCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQTtBQUNBLHNEO0FBQ0Esa0Q7QUFDQTtBQUNBLDJEO0FBQ0EsdUM7QUFDQSwrQztBQUNBLHlEOztBQUVBO0FBQ0EsK0M7QUFDQSw2RDtBQUNBLHFDLDJVQWxCQTs7OztvWEFvQkE7Ozs7O3VYQU1BLFNBQVNBLHFCQUFULEdBQWlDLENBQy9CLElBQUlDLHVCQUFKOztBQUVBO0FBQ0EsTUFBSTtBQUNvQkMsWUFBUSw2QkFBUixDQURwQixDQUNDRCxjQURELFlBQ0NBLGNBREQ7QUFFSCxHQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxRQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsWUFBTUQsQ0FBTjtBQUNEOztBQUVEO0FBQ0EsUUFBSTtBQUNvQkQsY0FBUSx1Q0FBUixDQURwQixDQUNDRCxjQURELGFBQ0NBLGNBREQ7QUFFSCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Y7QUFDQSxVQUFJQSxFQUFFQyxJQUFGLEtBQVcsa0JBQWYsRUFBbUM7QUFDakMsY0FBTUQsQ0FBTjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU9GLGNBQVA7QUFDRDs7QUFFRDs7Ozs7OztBQU9BLFNBQVNJLDRCQUFULENBQXNDSixjQUF0QyxFQUFzREssR0FBdEQsRUFBMkRDLFVBQTNELEVBQXVFO0FBQ3JFLE1BQU1KLElBQUksSUFBSUYsY0FBSixDQUFtQjtBQUMzQk0sMEJBRDJCLEVBQW5CLENBQVY7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QW1CckgsSUFBbkIsSUFBMkI4QyxVQUFVdUUsUUFBVixDQUFtQmhGLEtBQXBFLEVBQTJFLEtBQTNFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCNEcsS0FBSzNHLFdBQWxDLEVBQStDLFVBQUNLLElBQUQsRUFBTzhHLFlBQVAsRUFBd0I7QUFDckVGLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakIsRUFBdUI4RyxZQUF2QjtBQUNELGFBRkQ7QUFHRCxXQWhCSSxtQ0FBUDs7QUFrQkQsS0FwaUJjLG1CQUFqQiIsImZpbGUiOiJuby11bnVzZWQtbW9kdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbW9kdWxlcyBjb250YWluIGV4cG9ydHMgYW5kL29yIGFsbFxuICogbW9kdWxlcyBhcmUgY29uc3VtZWQgd2l0aGluIG90aGVyIG1vZHVsZXMuXG4gKiBAYXV0aG9yIFJlbsOpIEZlcm1hbm5cbiAqL1xuXG5pbXBvcnQgeyBnZXRGaWxlRXh0ZW5zaW9ucyB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIGFzIHJlc29sdmVQYXRoIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnb2JqZWN0LnZhbHVlcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuaW1wb3J0IGZsYXRNYXAgZnJvbSAnYXJyYXkucHJvdG90eXBlLmZsYXRtYXAnO1xuXG5pbXBvcnQgeyB3YWxrU3luYyB9IGZyb20gJy4uL2NvcmUvZnNXYWxrJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4uL2V4cG9ydE1hcC9idWlsZGVyJztcbmltcG9ydCByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZSBmcm9tICcuLi9leHBvcnRNYXAvcGF0dGVybkNhcHR1cmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8qKlxuICogQXR0ZW1wdCB0byBsb2FkIHRoZSBpbnRlcm5hbCBgRmlsZUVudW1lcmF0b3JgIGNsYXNzLCB3aGljaCBoYXMgZXhpc3RlZCBpbiBhIGNvdXBsZVxuICogb2YgZGlmZmVyZW50IHBsYWNlcywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIGBlc2xpbnRgLiAgVHJ5IHJlcXVpcmluZyBpdCBmcm9tIGJvdGhcbiAqIGxvY2F0aW9ucy5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGBGaWxlRW51bWVyYXRvcmAgY2xhc3MgaWYgaXRzIHJlcXVpcmFibGUsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCkge1xuICBsZXQgRmlsZUVudW1lcmF0b3I7XG5cbiAgLy8gVHJ5IGdldHRpbmcgaXQgZnJvbSB0aGUgZXNsaW50IHByaXZhdGUgLyBkZXByZWNhdGVkIGFwaVxuICB0cnkge1xuICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBBYnNvcmIgdGhpcyBpZiBpdCdzIE1PRFVMRV9OT1RfRk9VTkRcbiAgICBpZiAoZS5jb2RlICE9PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IHRoZXJlLCB0aGVuIHRyeSBnZXR0aW5nIGl0IGZyb20gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciAobW92ZWQgdGhlcmUgaW4gdjYpXG4gICAgdHJ5IHtcbiAgICAgICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL2NsaS1lbmdpbmUvZmlsZS1lbnVtZXJhdG9yJykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFic29yYiB0aGlzIGlmIGl0J3MgTU9EVUxFX05PVF9GT1VORFxuICAgICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBGaWxlRW51bWVyYXRvcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIEZpbGVFbnVtZXJhdG9yIHRoZSBgRmlsZUVudW1lcmF0b3JgIGNsYXNzIGZyb20gYGVzbGludGAncyBpbnRlcm5hbCBhcGlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3sgZmlsZW5hbWU6IHN0cmluZywgaWdub3JlZDogYm9vbGVhbiB9W119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNVc2luZ0ZpbGVFbnVtZXJhdG9yKEZpbGVFbnVtZXJhdG9yLCBzcmMsIGV4dGVuc2lvbnMpIHtcbiAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgZXh0ZW5zaW9ucyxcbiAgfSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgZS5pdGVyYXRlRmlsZXMoc3JjKSxcbiAgICAoeyBmaWxlUGF0aCwgaWdub3JlZCB9KSA9PiAoeyBmaWxlbmFtZTogZmlsZVBhdGgsIGlnbm9yZWQgfSksXG4gICk7XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byByZXF1aXJlIG9sZCB2ZXJzaW9ucyBvZiB0aGUgZmlsZSBlbnVtZXJhdGlvbiBjYXBhYmlsaXR5IGZyb20gdjYgYGVzbGludGAgYW5kIGVhcmxpZXIsIGFuZCB1c2VcbiAqIHRob3NlIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgcGF0aCB0byB0aGUgc3JjIHJvb3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHJldHVybnMge3N0cmluZ1tdfSBsaXN0IG9mIGZpbGVzIHRvIG9wZXJhdGUgb25cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzV2l0aExlZ2FjeUZ1bmN0aW9ucyhzcmMsIGV4dGVuc2lvbnMpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICBjb25zdCB7IGxpc3RGaWxlc1RvUHJvY2Vzczogb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MgfSA9IHJlcXVpcmUoJ2VzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzJyk7XG4gICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjE2LjAvbGliL3V0aWwvZ2xvYi11dGlscy5qcyNMMTc4LUwyODBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjIuMC9saWIvdXRpbC9nbG9iLXV0aWwuanMjTDE3NC1MMjY5XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gQWJzb3JiIHRoaXMgaWYgaXQncyBNT0RVTEVfTk9UX0ZPVU5EXG4gICAgaWYgKGUuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIC8vIExhc3QgcGxhY2UgdG8gdHJ5IChwcmUgdjUuMylcbiAgICBjb25zdCB7XG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3M6IG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzLFxuICAgIH0gPSByZXF1aXJlKCdlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsJyk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBzcmMuY29uY2F0KFxuICAgICAgZmxhdE1hcChcbiAgICAgICAgc3JjLFxuICAgICAgICAocGF0dGVybikgPT4gZXh0ZW5zaW9ucy5tYXAoKGV4dGVuc2lvbikgPT4gKC9cXCpcXCp8XFwqXFwuLykudGVzdChwYXR0ZXJuKSA/IHBhdHRlcm4gOiBgJHtwYXR0ZXJufS8qKi8qJHtleHRlbnNpb259YCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MocGF0dGVybnMpO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzb3VyY2Ugcm9vdCBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgdXNlIGZzV2FsayBhbmQgdGhlXG4gKiBuZXcgYGVzbGludGAgYGNvbnRleHQuc2Vzc2lvbmAgYXBpIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIGZpbGVzIHdlIHdhbnQgdG8gb3BlcmF0ZSBvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gc3JjUGF0aHMgYXJyYXkgb2Ygc291cmNlIHBhdGhzIChmb3IgZmxhdCBjb25maWcgdGhpcyBzaG91bGQganVzdCBiZSBhIHNpbmd1bGFyIHJvb3QgKGUuZy4gY3dkKSlcbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHt7IGlzRGlyZWN0b3J5SWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiwgaXNGaWxlSWdub3JlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB9fSBzZXNzaW9uIGVzbGludCBjb250ZXh0IHNlc3Npb24gb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119IGxpc3Qgb2YgZmlsZXMgdG8gb3BlcmF0ZSBvblxuICovXG5mdW5jdGlvbiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyY1BhdGhzLCBleHRlbnNpb25zLCBzZXNzaW9uKSB7XG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IGZpbGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmNQYXRocy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHNyYyA9IHNyY1BhdGhzW2ldO1xuICAgIC8vIFVzZSB3YWxrU3luYyBhbG9uZyB3aXRoIHRoZSBuZXcgc2Vzc2lvbiBhcGkgdG8gZ2F0aGVyIHRoZSBsaXN0IG9mIGZpbGVzXG4gICAgY29uc3QgZW50cmllcyA9IHdhbGtTeW5jKHNyYywge1xuICAgICAgZGVlcEZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBkaXJlY3RvcnkgaWYgaXQncyBub3QgbWFya2VkIGFzIGlnbm9yZSBieSBlc2xpbnRcbiAgICAgICAgcmV0dXJuICFzZXNzaW9uLmlzRGlyZWN0b3J5SWdub3JlZChmdWxsRW50cnlQYXRoKTtcbiAgICAgIH0sXG4gICAgICBlbnRyeUZpbHRlcihlbnRyeSkge1xuICAgICAgICBjb25zdCBmdWxsRW50cnlQYXRoID0gcmVzb2x2ZVBhdGgoc3JjLCBlbnRyeS5wYXRoKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBmaWxlIGlmIGl0J3Mgbm90IG1hcmtlZCBhcyBpZ25vcmUgYnkgZXNsaW50IGFuZCBpdHMgZXh0ZW5zaW9uIGlzIGluY2x1ZGVkIGluIG91ciBsaXN0XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIXNlc3Npb24uaXNGaWxlSWdub3JlZChmdWxsRW50cnlQYXRoKVxuICAgICAgICAgICYmIGV4dGVuc2lvbnMuZmluZCgoZXh0ZW5zaW9uKSA9PiBlbnRyeS5wYXRoLmVuZHNXaXRoKGV4dGVuc2lvbikpXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIG91dCBkaXJlY3RvcmllcyBhbmQgbWFwIGVudHJpZXMgdG8gdGhlaXIgcGF0aHNcbiAgICBmaWxlcy5wdXNoKFxuICAgICAgLi4uZW50cmllc1xuICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpcmVudC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkucGF0aCksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzcmMgcGF0dGVybiBhbmQgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucywgcmV0dXJuIGEgbGlzdCBvZiBmaWxlcyB0byBwcm9jZXNzXG4gKiB3aXRoIHRoaXMgcnVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBmaWxlLCBkaXJlY3RvcnksIG9yIGdsb2IgcGF0dGVybiBvZiBmaWxlcyB0byBhY3Qgb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IGV4dGVuc2lvbnMgLSBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7aW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0fSBjb250ZXh0IC0gdGhlIGVzbGludCBjb250ZXh0IG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ1tdIHwgeyBmaWxlbmFtZTogc3RyaW5nLCBpZ25vcmVkOiBib29sZWFuIH1bXX0gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB0aGlzIHJ1bGUgd2lsbCBldmFsdWF0ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdEZpbGVzVG9Qcm9jZXNzKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dCkge1xuICAvLyBJZiB0aGUgY29udGV4dCBvYmplY3QgaGFzIHRoZSBuZXcgc2Vzc2lvbiBmdW5jdGlvbnMsIHRoZW4gcHJlZmVyIHRob3NlXG4gIC8vIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgYEZpbGVFbnVtZXJhdG9yYCBmb3IgbGVnYWN5IHN1cHBvcnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8xODA4N1xuICBpZiAoXG4gICAgY29udGV4dC5zZXNzaW9uXG4gICAgJiYgY29udGV4dC5zZXNzaW9uLmlzRmlsZUlnbm9yZWRcbiAgICAmJiBjb250ZXh0LnNlc3Npb24uaXNEaXJlY3RvcnlJZ25vcmVkXG4gICkge1xuICAgIHJldHVybiBsaXN0RmlsZXNXaXRoTW9kZXJuQXBpKHNyYywgZXh0ZW5zaW9ucywgY29udGV4dC5zZXNzaW9uKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIG9nIEZpbGVFbnVtZXJhdG9yXG4gIGNvbnN0IEZpbGVFbnVtZXJhdG9yID0gcmVxdWlyZUZpbGVFbnVtZXJhdG9yKCk7XG5cbiAgLy8gSWYgd2UgZ290IHRoZSBGaWxlRW51bWVyYXRvciwgdGhlbiBsZXQncyBnbyB3aXRoIHRoYXRcbiAgaWYgKEZpbGVFbnVtZXJhdG9yKSB7XG4gICAgcmV0dXJuIGxpc3RGaWxlc1VzaW5nRmlsZUVudW1lcmF0b3IoRmlsZUVudW1lcmF0b3IsIHNyYywgZXh0ZW5zaW9ucyk7XG4gIH1cbiAgLy8gSWYgbm90LCB0aGVuIHdlIGNhbiB0cnkgZXZlbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGNhcGFiaWxpdHkgKGxpc3RGaWxlc1RvUHJvY2VzcylcbiAgcmV0dXJuIGxpc3RGaWxlc1dpdGhMZWdhY3lGdW5jdGlvbnMoc3JjLCBleHRlbnNpb25zKTtcbn1cblxuY29uc3QgRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04gPSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiA9ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJztcbmNvbnN0IEVYUE9SVF9BTExfREVDTEFSQVRJT04gPSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX0RFQ0xBUkFUSU9OID0gJ0ltcG9ydERlY2xhcmF0aW9uJztcbmNvbnN0IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSID0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic7XG5jb25zdCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic7XG5jb25zdCBWQVJJQUJMRV9ERUNMQVJBVElPTiA9ICdWYXJpYWJsZURlY2xhcmF0aW9uJztcbmNvbnN0IEZVTkNUSU9OX0RFQ0xBUkFUSU9OID0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xuY29uc3QgQ0xBU1NfREVDTEFSQVRJT04gPSAnQ2xhc3NEZWNsYXJhdGlvbic7XG5jb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuY29uc3QgT0JKRUNUX1BBVFRFUk4gPSAnT2JqZWN0UGF0dGVybic7XG5jb25zdCBBUlJBWV9QQVRURVJOID0gJ0FycmF5UGF0dGVybic7XG5jb25zdCBUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04gPSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbic7XG5jb25zdCBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OID0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nO1xuY29uc3QgVFNfRU5VTV9ERUNMQVJBVElPTiA9ICdUU0VudW1EZWNsYXJhdGlvbic7XG5jb25zdCBERUZBVUxUID0gJ2RlZmF1bHQnO1xuXG5mdW5jdGlvbiBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKGRlY2xhcmF0aW9uLCBjYikge1xuICBpZiAoZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBpc1R5cGVEZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLnR5cGUgPT09IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfRU5VTV9ERUNMQVJBVElPTjtcblxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgaXNUeXBlRGVjbGFyYXRpb25cbiAgICApIHtcbiAgICAgIGNiKGRlY2xhcmF0aW9uLmlkLm5hbWUsIGlzVHlwZURlY2xhcmF0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpZC50eXBlID09PSBBUlJBWV9QQVRURVJOKSB7XG4gICAgICAgICAgaWQuZWxlbWVudHMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGNiKG5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYihpZC5uYW1lLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbmNvbnN0IGlnbm9yZWRGaWxlcyA9IG5ldyBTZXQoKTtcbmNvbnN0IGZpbGVzT3V0c2lkZVNyYyA9IG5ldyBTZXQoKTtcblxuY29uc3QgaXNOb2RlTW9kdWxlID0gKHBhdGgpID0+ICgvXFwvKG5vZGVfbW9kdWxlcylcXC8vKS50ZXN0KHBhdGgpO1xuXG4vKipcbiAqIHJlYWQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJucyBpbiBzcmMgYW5kIGlnbm9yZUV4cG9ydHNcbiAqXG4gKiByZXR1cm4gYWxsIGZpbGVzIG1hdGNoaW5nIHNyYyBwYXR0ZXJuLCB3aGljaCBhcmUgbm90IG1hdGNoaW5nIHRoZSBpZ25vcmVFeHBvcnRzIHBhdHRlcm5cbiAqIEB0eXBlIHsoc3JjOiBzdHJpbmcsIGlnbm9yZUV4cG9ydHM6IHN0cmluZywgY29udGV4dDogaW1wb3J0KCdlc2xpbnQnKS5SdWxlLlJ1bGVDb250ZXh0KSA9PiBTZXQ8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbGVzKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkge1xuICBjb25zdCBleHRlbnNpb25zID0gQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSk7XG5cbiAgY29uc3Qgc3JjRmlsZUxpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCBleHRlbnNpb25zLCBjb250ZXh0KTtcblxuICAvLyBwcmVwYXJlIGxpc3Qgb2YgaWdub3JlZCBmaWxlc1xuICBjb25zdCBpZ25vcmVkRmlsZXNMaXN0ID0gbGlzdEZpbGVzVG9Qcm9jZXNzKGlnbm9yZUV4cG9ydHMsIGV4dGVuc2lvbnMsIGNvbnRleHQpO1xuXG4gIC8vIFRoZSBtb2Rlcm4gYXBpIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBmaWxlIHBhdGhzLCByYXRoZXIgdGhhbiBhbiBvYmplY3RcbiAgaWYgKGlnbm9yZWRGaWxlc0xpc3QubGVuZ3RoICYmIHR5cGVvZiBpZ25vcmVkRmlsZXNMaXN0WzBdID09PSAnc3RyaW5nJykge1xuICAgIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoZmlsZW5hbWUpID0+IGlnbm9yZWRGaWxlcy5hZGQoZmlsZW5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICBpZ25vcmVkRmlsZXNMaXN0LmZvckVhY2goKHsgZmlsZW5hbWUgfSkgPT4gaWdub3JlZEZpbGVzLmFkZChmaWxlbmFtZSkpO1xuICB9XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcbiAgY29uc3QgcmVzb2x2ZWRGaWxlcyA9IHNyY0ZpbGVMaXN0Lmxlbmd0aCAmJiB0eXBlb2Ygc3JjRmlsZUxpc3RbMF0gPT09ICdzdHJpbmcnXG4gICAgPyBzcmNGaWxlTGlzdC5maWx0ZXIoKGZpbGVQYXRoKSA9PiAhaXNOb2RlTW9kdWxlKGZpbGVQYXRoKSlcbiAgICA6IGZsYXRNYXAoc3JjRmlsZUxpc3QsICh7IGZpbGVuYW1lIH0pID0+IGlzTm9kZU1vZHVsZShmaWxlbmFtZSkgPyBbXSA6IGZpbGVuYW1lKTtcblxuICByZXR1cm4gbmV3IFNldChyZXNvbHZlZEZpbGVzKTtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbGwgc291cmNlIGZpbGVzIGFuZCBidWlsZCB1cCAyIG1hcHMgY29udGFpbmluZyB0aGUgZXhpc3RpbmcgaW1wb3J0cyBhbmQgZXhwb3J0c1xuICovXG5jb25zdCBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMgPSAoc3JjRmlsZXMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZXhwb3J0QWxsID0gbmV3IE1hcCgpO1xuICBzcmNGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgY29uc3QgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gRXhwb3J0TWFwQnVpbGRlci5nZXQoZmlsZSwgY29udGV4dCk7XG4gICAgaWYgKGN1cnJlbnRFeHBvcnRzKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcmVleHBvcnRzLFxuICAgICAgICBpbXBvcnRzOiBsb2NhbEltcG9ydExpc3QsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgdmlzaXRvcktleXMsXG4gICAgICB9ID0gY3VycmVudEV4cG9ydHM7XG5cbiAgICAgIHZpc2l0b3JLZXlNYXAuc2V0KGZpbGUsIHZpc2l0b3JLZXlzKTtcbiAgICAgIC8vIGRlcGVuZGVuY2llcyA9PT0gZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgY3VycmVudEV4cG9ydEFsbCA9IG5ldyBTZXQoKTtcbiAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKChnZXREZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBnZXREZXBlbmRlbmN5KCk7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEV4cG9ydEFsbC5hZGQoZGVwZW5kZW5jeS5wYXRoKTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0QWxsLnNldChmaWxlLCBjdXJyZW50RXhwb3J0QWxsKTtcblxuICAgICAgcmVleHBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gREVGQVVMVCkge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBvcnRzLnNldChrZXksIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVleHBvcnQgPSB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG4vKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xubGV0IHNyY0ZpbGVzO1xubGV0IGxhc3RQcmVwYXJlS2V5O1xuY29uc3QgZG9QcmVwYXJhdGlvbiA9IChzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgcHJlcGFyZUtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzcmM6IChzcmMgfHwgW10pLnNvcnQoKSxcbiAgICBpZ25vcmVFeHBvcnRzOiAoaWdub3JlRXhwb3J0cyB8fCBbXSkuc29ydCgpLFxuICAgIGV4dGVuc2lvbnM6IEFycmF5LmZyb20oZ2V0RmlsZUV4dGVuc2lvbnMoY29udGV4dC5zZXR0aW5ncykpLnNvcnQoKSxcbiAgfSk7XG4gIGlmIChwcmVwYXJlS2V5ID09PSBsYXN0UHJlcGFyZUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGltcG9ydExpc3QuY2xlYXIoKTtcbiAgZXhwb3J0TGlzdC5jbGVhcigpO1xuICBpZ25vcmVkRmlsZXMuY2xlYXIoKTtcbiAgZmlsZXNPdXRzaWRlU3JjLmNsZWFyKCk7XG5cbiAgc3JjRmlsZXMgPSByZXNvbHZlRmlsZXMoZ2V0U3JjKHNyYyksIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMoc3JjRmlsZXMsIGNvbnRleHQpO1xuICBkZXRlcm1pbmVVc2FnZSgpO1xuICBsYXN0UHJlcGFyZUtleSA9IHByZXBhcmVLZXk7XG59O1xuXG5jb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG5jb25zdCBuZXdEZWZhdWx0SW1wb3J0RXhpc3RzID0gKHNwZWNpZmllcnMpID0+IHNwZWNpZmllcnMuc29tZSgoeyB0eXBlIH0pID0+IHR5cGUgPT09IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG5cbmNvbnN0IGZpbGVJc0luUGtnID0gKGZpbGUpID0+IHtcbiAgY29uc3QgeyBwYXRoLCBwa2cgfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZSB9KTtcbiAgY29uc3QgYmFzZVBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGRTdHJpbmcgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAoam9pbihiYXNlUGF0aCwgcGtnRmllbGQpID09PSBmaWxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZE9iamVjdCA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGNvbnN0IHBrZ0ZpZWxkRmlsZXMgPSBmbGF0TWFwKHZhbHVlcyhwa2dGaWVsZCksICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyBbXSA6IGpvaW4oYmFzZVBhdGgsIHZhbHVlKSk7XG5cbiAgICBpZiAoaW5jbHVkZXMocGtnRmllbGRGaWxlcywgZmlsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwa2dGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZ0ZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRPYmplY3QocGtnRmllbGQpO1xuICAgIH1cbiAgfTtcblxuICBpZiAocGtnLnByaXZhdGUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGtnLmJpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5iaW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGtnLmJyb3dzZXIpIHtcbiAgICBpZiAoY2hlY2tQa2dGaWVsZChwa2cuYnJvd3NlcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cubWFpbikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkU3RyaW5nKHBrZy5tYWluKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdIZWxwZnVsIHdhcm5pbmdzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIG1vZHVsZXMgd2l0aG91dCBleHBvcnRzLCBvciBleHBvcnRzIHdpdGhvdXQgbWF0Y2hpbmcgaW1wb3J0IGluIGFub3RoZXIgbW9kdWxlLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXVudXNlZC1tb2R1bGVzJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFt7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHNyYzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgdG8gYmUgYW5hbHl6ZWQgKG9ubHkgZm9yIHVudXNlZCBleHBvcnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmlsZXMvcGF0aHMgZm9yIHdoaWNoIHVudXNlZCBleHBvcnRzIHdpbGwgbm90IGJlIHJlcG9ydGVkIChlLmcgbW9kdWxlIGVudHJ5IHBvaW50cyknLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdyZXBvcnQgbW9kdWxlcyB3aXRob3V0IGFueSBleHBvcnRzJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIHVudXNlZEV4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgdHlwZSBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVudXNlZEV4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgICBzcmM6IHtcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndW51c2VkRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWydtaXNzaW5nRXhwb3J0cyddLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNyYyxcbiAgICAgIGlnbm9yZUV4cG9ydHMgPSBbXSxcbiAgICAgIG1pc3NpbmdFeHBvcnRzLFxuICAgICAgdW51c2VkRXhwb3J0cyxcbiAgICAgIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSwgaXNUeXBlRXhwb3J0KSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlRXhwb3J0ICYmIGlnbm9yZVVudXNlZFR5cGVFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIGlmICghZXhwb3J0cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBmaWxlIFxcYCR7ZmlsZX1cXGAgaGFzIG5vIGV4cG9ydHMuIFBsZWFzZSB1cGRhdGUgdG8gdGhlIGxhdGVzdCwgYW5kIGlmIGl0IHN0aWxsIGhhcHBlbnMsIHJlcG9ydCB0aGlzIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbXBvcnQtanMvZXNsaW50LXBsdWdpbi1pbXBvcnQvaXNzdWVzLzI4NjYhYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uoc3BlY2lmaWVyLCBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuZXhwb3J0ZWQudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIobm9kZS5kZWNsYXJhdGlvbiwgKG5hbWUsIGlzVHlwZUV4cG9ydCkgPT4ge1xuICAgICAgICAgIGNoZWNrVXNhZ2Uobm9kZSwgbmFtZSwgaXNUeXBlRXhwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJGaWxlRW51bWVyYXRvciIsImxpc3RGaWxlc1RvUHJvY2VzcyIsInJlcXVpcmUiLCJlIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJzcmMiLCJleHRlbnNpb25zIiwicGF0dGVybnMiLCJjb25jYXQiLCJwYXR0ZXJuIiwibWFwIiwiZXh0ZW5zaW9uIiwidGVzdCIsIkFycmF5IiwiZnJvbSIsIml0ZXJhdGVGaWxlcyIsImZpbGVQYXRoIiwiaWdub3JlZCIsImZpbGVuYW1lIiwiRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04iLCJFWFBPUlRfTkFNRURfREVDTEFSQVRJT04iLCJFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX0RFQ0xBUkFUSU9OIiwiSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIiLCJJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIiLCJWQVJJQUJMRV9ERUNMQVJBVElPTiIsIkZVTkNUSU9OX0RFQ0xBUkFUSU9OIiwiQ0xBU1NfREVDTEFSQVRJT04iLCJJREVOVElGSUVSIiwiT0JKRUNUX1BBVFRFUk4iLCJBUlJBWV9QQVRURVJOIiwiVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OIiwiVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTiIsIlRTX0VOVU1fREVDTEFSQVRJT04iLCJERUZBVUxUIiwiZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllciIsImRlY2xhcmF0aW9uIiwiY2IiLCJ0eXBlIiwiaWQiLCJuYW1lIiwiZGVjbGFyYXRpb25zIiwiZm9yRWFjaCIsImVsZW1lbnRzIiwiaW1wb3J0TGlzdCIsIk1hcCIsImV4cG9ydExpc3QiLCJ2aXNpdG9yS2V5TWFwIiwiaWdub3JlZEZpbGVzIiwiU2V0IiwiZmlsZXNPdXRzaWRlU3JjIiwiaXNOb2RlTW9kdWxlIiwicGF0aCIsInJlc29sdmVGaWxlcyIsImlnbm9yZUV4cG9ydHMiLCJjb250ZXh0Iiwic2V0dGluZ3MiLCJzcmNGaWxlTGlzdCIsImlnbm9yZWRGaWxlc0xpc3QiLCJhZGQiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJzcmNGaWxlcyIsImV4cG9ydEFsbCIsImZpbGUiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0cyIsImdldCIsImRlcGVuZGVuY2llcyIsInJlZXhwb3J0cyIsImxvY2FsSW1wb3J0TGlzdCIsIm5hbWVzcGFjZSIsInZpc2l0b3JLZXlzIiwic2V0IiwiY3VycmVudEV4cG9ydEFsbCIsImdldERlcGVuZGVuY3kiLCJkZXBlbmRlbmN5IiwidmFsdWUiLCJrZXkiLCJ3aGVyZVVzZWQiLCJyZWV4cG9ydCIsImdldEltcG9ydCIsImxvY2FsSW1wb3J0IiwiY3VycmVudFZhbHVlIiwibG9jYWwiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJoYXMiLCJ2YWwiLCJjdXJyZW50RXhwb3J0IiwiZGV0ZXJtaW5lVXNhZ2UiLCJsaXN0VmFsdWUiLCJsaXN0S2V5IiwiY3VycmVudEltcG9ydCIsImV4cG9ydFN0YXRlbWVudCIsImdldFNyYyIsInByb2Nlc3MiLCJjd2QiLCJsYXN0UHJlcGFyZUtleSIsImRvUHJlcGFyYXRpb24iLCJwcmVwYXJlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInNvcnQiLCJjbGVhciIsIm5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyIsInNwZWNpZmllcnMiLCJzb21lIiwibmV3RGVmYXVsdEltcG9ydEV4aXN0cyIsImZpbGVJc0luUGtnIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwiY2F0ZWdvcnkiLCJkZXNjcmlwdGlvbiIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwibWluTGVuZ3RoIiwibWlzc2luZ0V4cG9ydHMiLCJ1bnVzZWRFeHBvcnRzIiwiYW55T2YiLCJtaW5JdGVtcyIsInJlcXVpcmVkIiwiY3JlYXRlIiwib3B0aW9ucyIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsImNoZWNrRXhwb3J0UHJlc2VuY2UiLCJub2RlIiwiZXhwb3J0Q291bnQiLCJuYW1lc3BhY2VJbXBvcnRzIiwic2l6ZSIsInJlcG9ydCIsImJvZHkiLCJjaGVja1VzYWdlIiwiZXhwb3J0ZWRWYWx1ZSIsImV4cG9ydHNLZXkiLCJ1cGRhdGVFeHBvcnRVc2FnZSIsIm5ld0V4cG9ydHMiLCJuZXdFeHBvcnRJZGVudGlmaWVycyIsImxlbmd0aCIsImV4cG9ydGVkIiwidXBkYXRlSW1wb3J0VXNhZ2UiLCJvbGRJbXBvcnRQYXRocyIsIm9sZE5hbWVzcGFjZUltcG9ydHMiLCJuZXdOYW1lc3BhY2VJbXBvcnRzIiwib2xkRXhwb3J0QWxsIiwibmV3RXhwb3J0QWxsIiwib2xkRGVmYXVsdEltcG9ydHMiLCJuZXdEZWZhdWx0SW1wb3J0cyIsIm9sZEltcG9ydHMiLCJuZXdJbXBvcnRzIiwicHJvY2Vzc0R5bmFtaWNJbXBvcnQiLCJzb3VyY2UiLCJwIiwiSW1wb3J0RXhwcmVzc2lvbiIsImNoaWxkIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJhc3ROb2RlIiwicmVzb2x2ZWRQYXRoIiwicmF3IiwicmVwbGFjZSIsImZpbHRlciIsImltcG9ydGVkIiwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBTUE7QUFDQSxzRDtBQUNBLGtEO0FBQ0E7QUFDQSwyRDtBQUNBLHVDO0FBQ0EsK0M7QUFDQSx5RDs7QUFFQSx5QztBQUNBLHFDLDJVQWhCQTs7OzttWEFrQkEsSUFBSUEsdUJBQUosQ0FDQSxJQUFJQywyQkFBSjtBQUVBLElBQUk7QUFD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QmpFLE9BQWhCLENBQXdCLFVBQUM2QyxTQUFELEVBQWU7QUFDckM2RCx5QkFBVzdELFNBQVgsRUFBc0JBLFVBQVVvRSxRQUFWLENBQW1CbkgsSUFBbkIsSUFBMkIrQyxVQUFVb0UsUUFBVixDQUFtQjdFLEtBQXBFO0FBQ0QsYUFGRDtBQUdBM0MseUNBQTZCMkcsS0FBSzFHLFdBQWxDLEVBQStDLFVBQUNJLElBQUQsRUFBVTtBQUN2RDRHLHlCQUFXTixJQUFYLEVBQWlCdEcsSUFBakI7QUFDRCxhQUZEO0FBR0QsV0FoQkksbUNBQVA7O0FBa0JELEtBdmhCYyxtQkFBakIiLCJmaWxlIjoibm8tdW51c2VkLW1vZHVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG1vZHVsZXMgY29udGFpbiBleHBvcnRzIGFuZC9vciBhbGxcbiAqIG1vZHVsZXMgYXJlIGNvbnN1bWVkIHdpdGhpbiBvdGhlciBtb2R1bGVzLlxuICogQGF1dGhvciBSZW7DqSBGZXJtYW5uXG4gKi9cblxuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbnMgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHZpc2l0IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvdmlzaXQnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRQa2dVcCBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3JlYWRQa2dVcCc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJ29iamVjdC52YWx1ZXMnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwJztcblxuaW1wb3J0IEV4cG9ydHMsIHsgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgfSBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmxldCBGaWxlRW51bWVyYXRvcjtcbmxldCBsaXN0RmlsZXNUb1Byb2Nlc3M7XG5cbnRyeSB7XG4gICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG59IGNhdGNoIChlKSB7XG4gIHRyeSB7XG4gICAgLy8gaGFzIGJlZW4gbW92ZWQgdG8gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciBpbiB2ZXJzaW9uIDZcbiAgICAoeyBGaWxlRW51bWVyYXRvciB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvcicpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbHMnKTtcblxuICAgICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2Jsb2IvdjUuMTYuMC9saWIvdXRpbC9nbG9iLXV0aWxzLmpzI0wxNzgtTDI4MFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvYmxvYi92NS4yLjAvbGliL3V0aWwvZ2xvYi11dGlsLmpzI0wxNzQtTDI2OVxuICAgICAgbGlzdEZpbGVzVG9Qcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgZXh0ZW5zaW9ucykge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbCcpO1xuXG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gc3JjLmNvbmNhdChmbGF0TWFwKHNyYywgKHBhdHRlcm4pID0+IGV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+ICgvXFwqXFwqfFxcKlxcLi8pLnRlc3QocGF0dGVybikgPyBwYXR0ZXJuIDogYCR7cGF0dGVybn0vKiovKiR7ZXh0ZW5zaW9ufWApKSk7XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzKHBhdHRlcm5zKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmlmIChGaWxlRW51bWVyYXRvcikge1xuICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZS5pdGVyYXRlRmlsZXMoc3JjKSwgKHsgZmlsZVBhdGgsIGlnbm9yZWQgfSkgPT4gKHtcbiAgICAgIGlnbm9yZWQsXG4gICAgICBmaWxlbmFtZTogZmlsZVBhdGgsXG4gICAgfSkpO1xuICB9O1xufVxuXG5jb25zdCBFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiA9ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX0FMTF9ERUNMQVJBVElPTiA9ICdFeHBvcnRBbGxEZWNsYXJhdGlvbic7XG5jb25zdCBJTVBPUlRfREVDTEFSQVRJT04gPSAnSW1wb3J0RGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIgPSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJztcbmNvbnN0IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiA9ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJztcbmNvbnN0IFZBUklBQkxFX0RFQ0xBUkFUSU9OID0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nO1xuY29uc3QgRlVOQ1RJT05fREVDTEFSQVRJT04gPSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG5jb25zdCBDTEFTU19ERUNMQVJBVElPTiA9ICdDbGFzc0RlY2xhcmF0aW9uJztcbmNvbnN0IElERU5USUZJRVIgPSAnSWRlbnRpZmllcic7XG5jb25zdCBPQkpFQ1RfUEFUVEVSTiA9ICdPYmplY3RQYXR0ZXJuJztcbmNvbnN0IEFSUkFZX1BBVFRFUk4gPSAnQXJyYXlQYXR0ZXJuJztcbmNvbnN0IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTiA9ICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJztcbmNvbnN0IFRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04gPSAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbic7XG5jb25zdCBUU19FTlVNX0RFQ0xBUkFUSU9OID0gJ1RTRW51bURlY2xhcmF0aW9uJztcbmNvbnN0IERFRkFVTFQgPSAnZGVmYXVsdCc7XG5cbmZ1bmN0aW9uIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIGNiKSB7XG4gIGlmIChkZWNsYXJhdGlvbikge1xuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTlxuICAgICAgfHwgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OXG4gICAgICB8fCBkZWNsYXJhdGlvbi50eXBlID09PSBUU19FTlVNX0RFQ0xBUkFUSU9OXG4gICAgKSB7XG4gICAgICBjYihkZWNsYXJhdGlvbi5pZC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlkLnR5cGUgPT09IEFSUkFZX1BBVFRFUk4pIHtcbiAgICAgICAgICBpZC5lbGVtZW50cy5mb3JFYWNoKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgY2IobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IoaWQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgdmlzaXRvcktleU1hcCA9IG5ldyBNYXAoKTtcblxuY29uc3QgaWdub3JlZEZpbGVzID0gbmV3IFNldCgpO1xuY29uc3QgZmlsZXNPdXRzaWRlU3JjID0gbmV3IFNldCgpO1xuXG5jb25zdCBpc05vZGVNb2R1bGUgPSAocGF0aCkgPT4gKC9cXC8obm9kZV9tb2R1bGVzKVxcLy8pLnRlc3QocGF0aCk7XG5cbi8qKlxuICogcmVhZCBhbGwgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHNyYyBhbmQgaWdub3JlRXhwb3J0c1xuICpcbiAqIHJldHVybiBhbGwgZmlsZXMgbWF0Y2hpbmcgc3JjIHBhdHRlcm4sIHdoaWNoIGFyZSBub3QgbWF0Y2hpbmcgdGhlIGlnbm9yZUV4cG9ydHMgcGF0dGVyblxuICovXG5jb25zdCByZXNvbHZlRmlsZXMgPSAoc3JjLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBBcnJheS5mcm9tKGdldEZpbGVFeHRlbnNpb25zKGNvbnRleHQuc2V0dGluZ3MpKTtcblxuICBjb25zdCBzcmNGaWxlTGlzdCA9IGxpc3RGaWxlc1RvUHJvY2VzcyhzcmMsIGV4dGVuc2lvbnMpO1xuXG4gIC8vIHByZXBhcmUgbGlzdCBvZiBpZ25vcmVkIGZpbGVzXG4gIGNvbnN0IGlnbm9yZWRGaWxlc0xpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3MoaWdub3JlRXhwb3J0cywgZXh0ZW5zaW9ucyk7XG4gIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoeyBmaWxlbmFtZSB9KSA9PiBpZ25vcmVkRmlsZXMuYWRkKGZpbGVuYW1lKSk7XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcblxuICByZXR1cm4gbmV3IFNldChcbiAgICBmbGF0TWFwKHNyY0ZpbGVMaXN0LCAoeyBmaWxlbmFtZSB9KSA9PiBpc05vZGVNb2R1bGUoZmlsZW5hbWUpID8gW10gOiBmaWxlbmFtZSksXG4gICk7XG59O1xuXG4vKipcbiAqIHBhcnNlIGFsbCBzb3VyY2UgZmlsZXMgYW5kIGJ1aWxkIHVwIDIgbWFwcyBjb250YWluaW5nIHRoZSBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzXG4gKi9cbmNvbnN0IHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyA9IChzcmNGaWxlcywgY29udGV4dCkgPT4ge1xuICBjb25zdCBleHBvcnRBbGwgPSBuZXcgTWFwKCk7XG4gIHNyY0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICBjb25zdCBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY3VycmVudEV4cG9ydHMgPSBFeHBvcnRzLmdldChmaWxlLCBjb250ZXh0KTtcbiAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICByZWV4cG9ydHMsXG4gICAgICAgIGltcG9ydHM6IGxvY2FsSW1wb3J0TGlzdCxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB2aXNpdG9yS2V5cyxcbiAgICAgIH0gPSBjdXJyZW50RXhwb3J0cztcblxuICAgICAgdmlzaXRvcktleU1hcC5zZXQoZmlsZSwgdmlzaXRvcktleXMpO1xuICAgICAgLy8gZGVwZW5kZW5jaWVzID09PSBleHBvcnQgKiBmcm9tXG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goKGdldERlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IGdldERlcGVuZGVuY3koKTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RXhwb3J0QWxsLmFkZChkZXBlbmRlbmN5LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICBleHBvcnRBbGwuc2V0KGZpbGUsIGN1cnJlbnRFeHBvcnRBbGwpO1xuXG4gICAgICByZWV4cG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWV4cG9ydCA9ICB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PiB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgbG9jYWxJbXBvcnQuYWRkKHNwZWNpZmllcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbXBvcnRzLnNldChrZXksIGxvY2FsSW1wb3J0KTtcbiAgICAgIH0pO1xuICAgICAgaW1wb3J0TGlzdC5zZXQoZmlsZSwgaW1wb3J0cyk7XG5cbiAgICAgIC8vIGJ1aWxkIHVwIGV4cG9ydCBsaXN0IG9ubHksIGlmIGZpbGUgaXMgbm90IGlnbm9yZWRcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5hbWVzcGFjZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICBleHBvcnRMaXN0LnNldChmaWxlLCBleHBvcnRzKTtcbiAgfSk7XG4gIGV4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbCk7XG4gICAgICBpZiAoY3VycmVudEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGN1cnJlbnRFeHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiB0cmF2ZXJzZSB0aHJvdWdoIGFsbCBpbXBvcnRzIGFuZCBhZGQgdGhlIHJlc3BlY3RpdmUgcGF0aCB0byB0aGUgd2hlcmVVc2VkLWxpc3RcbiAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydFxuICovXG5jb25zdCBkZXRlcm1pbmVVc2FnZSA9ICgpID0+IHtcbiAgaW1wb3J0TGlzdC5mb3JFYWNoKChsaXN0VmFsdWUsIGxpc3RLZXkpID0+IHtcbiAgICBsaXN0VmFsdWUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGtleSk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRJbXBvcnQpID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSAoc3JjKSA9PiB7XG4gIGlmIChzcmMpIHtcbiAgICByZXR1cm4gc3JjO1xuICB9XG4gIHJldHVybiBbcHJvY2Vzcy5jd2QoKV07XG59O1xuXG4vKipcbiAqIHByZXBhcmUgdGhlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgYW5kIGV4cG9ydHMgLSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBvbmNlIGF0XG4gKiB0aGUgc3RhcnQgb2YgYSBuZXcgZXNsaW50IHJ1blxuICovXG5sZXQgc3JjRmlsZXM7XG5sZXQgbGFzdFByZXBhcmVLZXk7XG5jb25zdCBkb1ByZXBhcmF0aW9uID0gKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkgPT4ge1xuICBjb25zdCBwcmVwYXJlS2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHNyYzogKHNyYyB8fCBbXSkuc29ydCgpLFxuICAgIGlnbm9yZUV4cG9ydHM6IChpZ25vcmVFeHBvcnRzIHx8IFtdKS5zb3J0KCksXG4gICAgZXh0ZW5zaW9uczogQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSkuc29ydCgpLFxuICB9KTtcbiAgaWYgKHByZXBhcmVLZXkgPT09IGxhc3RQcmVwYXJlS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW1wb3J0TGlzdC5jbGVhcigpO1xuICBleHBvcnRMaXN0LmNsZWFyKCk7XG4gIGlnbm9yZWRGaWxlcy5jbGVhcigpO1xuICBmaWxlc091dHNpZGVTcmMuY2xlYXIoKTtcblxuICBzcmNGaWxlcyA9IHJlc29sdmVGaWxlcyhnZXRTcmMoc3JjKSwgaWdub3JlRXhwb3J0cywgY29udGV4dCk7XG4gIHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyhzcmNGaWxlcywgY29udGV4dCk7XG4gIGRldGVybWluZVVzYWdlKCk7XG4gIGxhc3RQcmVwYXJlS2V5ID0gcHJlcGFyZUtleTtcbn07XG5cbmNvbnN0IG5ld05hbWVzcGFjZUltcG9ydEV4aXN0cyA9IChzcGVjaWZpZXJzKSA9PiBzcGVjaWZpZXJzLnNvbWUoKHsgdHlwZSB9KSA9PiB0eXBlID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG5cbmNvbnN0IG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMgPSAoc3BlY2lmaWVycykgPT4gc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuY29uc3QgZmlsZUlzSW5Qa2cgPSAoZmlsZSkgPT4ge1xuICBjb25zdCB7IHBhdGgsIHBrZyB9ID0gcmVhZFBrZ1VwKHsgY3dkOiBmaWxlIH0pO1xuICBjb25zdCBiYXNlUGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZFN0cmluZyA9IChwa2dGaWVsZCkgPT4ge1xuICAgIGlmIChqb2luKGJhc2VQYXRoLCBwa2dGaWVsZCkgPT09IGZpbGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkT2JqZWN0ID0gKHBrZ0ZpZWxkKSA9PiB7XG4gICAgY29uc3QgcGtnRmllbGRGaWxlcyA9IGZsYXRNYXAodmFsdWVzKHBrZ0ZpZWxkKSwgKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IFtdIDogam9pbihiYXNlUGF0aCwgdmFsdWUpKTtcblxuICAgIGlmIChpbmNsdWRlcyhwa2dGaWVsZEZpbGVzLCBmaWxlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGQgPSAocGtnRmllbGQpID0+IHtcbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRTdHJpbmcocGtnRmllbGQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGtnRmllbGQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gY2hlY2tQa2dGaWVsZE9iamVjdChwa2dGaWVsZCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChwa2cucHJpdmF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwa2cuYmluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGQocGtnLmJpbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cuYnJvd3Nlcikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5icm93c2VyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBrZy5tYWluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGRTdHJpbmcocGtnLm1haW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICBjYXRlZ29yeTogJ0hlbHBmdWwgd2FybmluZ3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgbW9kdWxlcyB3aXRob3V0IGV4cG9ydHMsIG9yIGV4cG9ydHMgd2l0aG91dCBtYXRjaGluZyBpbXBvcnQgaW4gYW5vdGhlciBtb2R1bGUuJyxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tdW51c2VkLW1vZHVsZXMnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3JjOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyB0byBiZSBhbmFseXplZCAob25seSBmb3IgdW51c2VkIGV4cG9ydHMpJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyBmb3Igd2hpY2ggdW51c2VkIGV4cG9ydHMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgKGUuZyBtb2R1bGUgZW50cnkgcG9pbnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBtb2R1bGVzIHdpdGhvdXQgYW55IGV4cG9ydHMnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgdW51c2VkRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAncmVwb3J0IGV4cG9ydHMgd2l0aG91dCBhbnkgdXNhZ2UnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhbnlPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdW51c2VkRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICAgIHNyYzoge1xuICAgICAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1bnVzZWRFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ21pc3NpbmdFeHBvcnRzJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgc3JjLFxuICAgICAgaWdub3JlRXhwb3J0cyA9IFtdLFxuICAgICAgbWlzc2luZ0V4cG9ydHMsXG4gICAgICB1bnVzZWRFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCF1bnVzZWRFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBvbmx5IHVzZWZ1bCBmb3IgdG9vbHMgbGlrZSB2c2NvZGUtZXNsaW50XG4gICAgICpcbiAgICAgKiB1cGRhdGUgbGlzdHMgb2YgZXhpc3RpbmcgZXhwb3J0cyBkdXJpbmcgcnVudGltZVxuICAgICAqL1xuICAgIGNvbnN0IHVwZGF0ZUV4cG9ydFVzYWdlID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUgfHwgc3BlY2lmaWVyLmV4cG9ydGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IChub2RlKSA9PiB7XG4gICAgICBpZiAoIXVudXNlZEV4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgb2xkSW1wb3J0UGF0aHMgPSBpbXBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGlmICh0eXBlb2Ygb2xkSW1wb3J0UGF0aHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG9sZEltcG9ydFBhdGhzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3TmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRXhwb3J0QWxsID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0QWxsID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGREZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0RlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3SW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIG9sZEltcG9ydFBhdGhzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmhhcyhFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSkge1xuICAgICAgICAgIG9sZEV4cG9ydEFsbC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZE5hbWVzcGFjZUltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkRGVmYXVsdEltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUlxuICAgICAgICAgICAgJiYgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKGFzdE5vZGUpID0+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aDtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBleHBvcnQgeyB2YWx1ZSB9IGZyb20gJ21vZHVsZSdcbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFzdE5vZGUuc291cmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGFzdE5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKChzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNwZWNpZmllci5sb2NhbC5uYW1lIHx8IHNwZWNpZmllci5sb2NhbC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChuYW1lLCByZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgbmV3RXhwb3J0QWxsLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFzdE5vZGUudHlwZSA9PT0gSU1QT1JUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNOb2RlTW9kdWxlKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzKGFzdE5vZGUuc3BlY2lmaWVycykpIHtcbiAgICAgICAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5ld0RlZmF1bHRJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3RGVmYXVsdEltcG9ydHMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN0Tm9kZS5zcGVjaWZpZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChzcGVjaWZpZXIpID0+IHNwZWNpZmllci50eXBlICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgJiYgc3BlY2lmaWVyLnR5cGUgIT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKVxuICAgICAgICAgICAgLmZvckVhY2goKHNwZWNpZmllcikgPT4ge1xuICAgICAgICAgICAgICBuZXdJbXBvcnRzLnNldChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0V4cG9ydEFsbC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEV4cG9ydEFsbC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRXhwb3J0QWxsLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFvbGREZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkRGVmYXVsdEltcG9ydHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCFuZXdEZWZhdWx0SW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld05hbWVzcGFjZUltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld0ltcG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIW9sZEltcG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBleHBvcnRMaXN0LnNldCh2YWx1ZSwgZXhwb3J0cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZVVzZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB3aGVyZVVzZWQuYWRkKGZpbGUpO1xuICAgICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFuZXdJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaW1wb3J0cy5kZWxldGUoa2V5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW06ZXhpdCcobm9kZSkge1xuICAgICAgICB1cGRhdGVFeHBvcnRVc2FnZShub2RlKTtcbiAgICAgICAgdXBkYXRlSW1wb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIGNoZWNrRXhwb3J0UHJlc2VuY2Uobm9kZSk7XG4gICAgICB9LFxuICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgfSxcbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obm9kZSkge1xuICAgICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaCgoc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShzcGVjaWZpZXIsIHNwZWNpZmllci5leHBvcnRlZC5uYW1lIHx8IHNwZWNpZmllci5leHBvcnRlZC52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKG5vZGUuZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19 \ 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 364f3e06aa..4b735ae4b4 100644 --- a/node_modules/eslint-plugin-import/lib/rules/order.js +++ b/node_modules/eslint-plugin-import/lib/rules/order.js @@ -92,12 +92,6 @@ function findRootNode(node) { return parent; } -function commentOnSameLineAs(node) { - return function (token) {return (token.type === 'Block' || token.type === 'Line') && - token.loc.start.line === token.loc.end.line && - token.loc.end.line === node.loc.end.line;}; -} - function findEndOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensAfterWhile(sourceCode, node, commentOnSameLineAs(node)); var endOfTokens = tokensToEndOfLine.length > 0 ? @@ -117,6 +111,12 @@ function findEndOfLineWithComments(sourceCode, node) { return result; } +function commentOnSameLineAs(node) { + return function (token) {return (token.type === 'Block' || token.type === 'Line') && + token.loc.start.line === token.loc.end.line && + token.loc.end.line === node.loc.end.line;}; +} + function findStartOfLineWithComments(sourceCode, node) { var tokensToEndOfLine = takeTokensBeforeWhile(sourceCode, node, commentOnSameLineAs(node)); var startOfTokens = tokensToEndOfLine.length > 0 ? tokensToEndOfLine[0].range[0] : node.range[0]; @@ -302,12 +302,6 @@ function getSorter(alphabetizeOptions) { var b = B.length; for (var i = 0; i < Math.min(a, b); i++) { - // Skip comparing the first path segment, if they are relative segments for both imports - if (i === 0 && (A[i] === '.' || A[i] === '..') && (B[i] === '.' || B[i] === '..')) { - // If one is sibling and the other parent import, no need to compare at all, since the paths belong in different groups - if (A[i] !== B[i]) {break;} - continue; - } result = compareString(A[i], B[i]); if (result) {break;} } @@ -788,4 +782,4 @@ module.exports = { }return reportAndReset;}() }; }return importOrderRule;}() }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiY29tbWVudE9uU2FtZUxpbmVBcyIsInRva2VuIiwidHlwZSIsImxvYyIsInN0YXJ0IiwibGluZSIsImVuZCIsImZpbmRFbmRPZkxpbmVXaXRoQ29tbWVudHMiLCJ0b2tlbnNUb0VuZE9mTGluZSIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxP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QUFDbENzRCx5Q0FBeUI3RyxRQUF6QixFQUFtQytMLFdBQW5DO0FBQ0Q7O0FBRUQ3RyxtQ0FBcUI1QixPQUFyQixFQUE4QnRELFFBQTlCO0FBQ0QsYUFWRDs7QUFZQXFOLHNCQUFVZSxLQUFWO0FBQ0QsV0FkRCxPQUF5QkQsY0FBekIsSUF2RUssRUFBUDs7QUF1RkQsS0F6SEQsT0FBaUJsQixlQUFqQixJQXBGZSxFQUFqQiIsImZpbGUiOiJvcmRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ29iamVjdC5ncm91cGJ5JztcblxuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZWZhdWx0R3JvdXBzID0gWydidWlsdGluJywgJ2V4dGVybmFsJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4J107XG5cbi8vIFJFUE9SVElORyBBTkQgRklYSU5HXG5cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB7IC4uLnYsIHJhbms6IC12LnJhbmsgfTtcbiAgfSkucmV2ZXJzZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QWZ0ZXIoY3VycmVudE5vZGVPclRva2VuKTtcbiAgICBpZiAoY3VycmVudE5vZGVPclRva2VuID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgY291bnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlT3JUb2tlbiA9IG5vZGU7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjdXJyZW50Tm9kZU9yVG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuT3JDb21tZW50QmVmb3JlKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNBZnRlcihzb3VyY2VDb2RlLCBub2RlLCAxMDApO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29uZGl0aW9uKSB7XG4gIGNvbnN0IHRva2VucyA9IGdldFRva2Vuc09yQ29tbWVudHNCZWZvcmUoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoY29uZGl0aW9uKHRva2Vuc1tpXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRva2Vuc1tpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0LnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpIHtcbiAgaWYgKGltcG9ydGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgbWF4U2VlblJhbmtOb2RlID0gaW1wb3J0ZWRbMF07XG4gIHJldHVybiBpbXBvcnRlZC5maWx0ZXIoZnVuY3Rpb24gKGltcG9ydGVkTW9kdWxlKSB7XG4gICAgY29uc3QgcmVzID0gaW1wb3J0ZWRNb2R1bGUucmFuayA8IG1heFNlZW5SYW5rTm9kZS5yYW5rO1xuICAgIGlmIChtYXhTZWVuUmFua05vZGUucmFuayA8IGltcG9ydGVkTW9kdWxlLnJhbmspIHtcbiAgICAgIG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkTW9kdWxlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgbGV0IHBhcmVudCA9IG5vZGU7XG4gIHdoaWxlIChwYXJlbnQucGFyZW50ICE9IG51bGwgJiYgcGFyZW50LnBhcmVudC5ib2R5ID09IG51bGwpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBub2RlKSB7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IGVuZE9mVG9rZW5zID0gdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMFxuICAgID8gdG9rZW5zVG9FbmRPZkxpbmVbdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICA6IG5vZGUucmFuZ2VbMV07XG4gIGxldCByZXN1bHQgPSBlbmRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IGVuZE9mVG9rZW5zOyBpIDwgc291cmNlQ29kZS50ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSA9PT0gJ1xcbicpIHtcbiAgICAgIHJlc3VsdCA9IGkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzb3VyY2VDb2RlLnRleHRbaV0gIT09ICcgJyAmJiBzb3VyY2VDb2RlLnRleHRbaV0gIT09ICdcXHQnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xccicpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpICsgMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgbm9kZSkge1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNCZWZvcmVXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3Qgc3RhcnRPZlRva2VucyA9IHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDAgPyB0b2tlbnNUb0VuZE9mTGluZVswXS5yYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07XG4gIGxldCByZXN1bHQgPSBzdGFydE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gc3RhcnRPZlRva2VucyAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldICE9PSAnICcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFx0Jykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNSZXF1aXJlRXhwcmVzc2lvbihleHByKSB7XG4gIHJldHVybiBleHByICE9IG51bGxcbiAgICAmJiBleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBleHByLmNhbGxlZSAhPSBudWxsXG4gICAgJiYgZXhwci5jYWxsZWUubmFtZSA9PT0gJ3JlcXVpcmUnXG4gICAgJiYgZXhwci5hcmd1bWVudHMgIT0gbnVsbFxuICAgICYmIGV4cHIuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICYmIGV4cHIuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdMaXRlcmFsJztcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRSZXF1aXJlTW9kdWxlKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zWzBdO1xuICBjb25zdCBpc1BsYWluUmVxdWlyZSA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQpO1xuICBjb25zdCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbiA9IGRlY2wuaWRcbiAgICAmJiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpXG4gICAgJiYgZGVjbC5pbml0ICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGRlY2wuaW5pdC5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nXG4gICAgJiYgaXNSZXF1aXJlRXhwcmVzc2lvbihkZWNsLmluaXQuY2FsbGVlLm9iamVjdCk7XG4gIHJldHVybiBpc1BsYWluUmVxdWlyZSB8fCBpc1JlcXVpcmVXaXRoTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgbm9kZS5zcGVjaWZpZXJzICE9IG51bGwgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGUpIHtcbiAgcmV0dXJuIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0TW9kdWxlKG5vZGUpIHx8IGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGNhblJlb3JkZXJJdGVtcyhmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gZmlyc3ROb2RlLnBhcmVudDtcbiAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IFtcbiAgICBwYXJlbnQuYm9keS5pbmRleE9mKGZpcnN0Tm9kZSksXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihzZWNvbmROb2RlKSxcbiAgXS5zb3J0KCk7XG4gIGNvbnN0IG5vZGVzQmV0d2VlbiA9IHBhcmVudC5ib2R5LnNsaWNlKGZpcnN0SW5kZXgsIHNlY29uZEluZGV4ICsgMSk7XG4gIGZvciAoY29uc3Qgbm9kZUJldHdlZW4gb2Ygbm9kZXNCZXR3ZWVuKSB7XG4gICAgaWYgKCFjYW5Dcm9zc05vZGVXaGlsZVJlb3JkZXIobm9kZUJldHdlZW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYWtlSW1wb3J0RGVzY3JpcHRpb24obm9kZSkge1xuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJykge1xuICAgIHJldHVybiAndHlwZSBpbXBvcnQnO1xuICB9XG4gIGlmIChub2RlLm5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpIHtcbiAgICByZXR1cm4gJ3R5cGVvZiBpbXBvcnQnO1xuICB9XG4gIHJldHVybiAnaW1wb3J0Jztcbn1cblxuZnVuY3Rpb24gZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmaXJzdE5vZGUsIHNlY29uZE5vZGUsIG9yZGVyKSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcblxuICBjb25zdCBmaXJzdFJvb3QgPSBmaW5kUm9vdE5vZGUoZmlyc3ROb2RlLm5vZGUpO1xuICBjb25zdCBmaXJzdFJvb3RTdGFydCA9IGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuICBjb25zdCBmaXJzdFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGZpcnN0Um9vdCk7XG5cbiAgY29uc3Qgc2Vjb25kUm9vdCA9IGZpbmRSb290Tm9kZShzZWNvbmROb2RlLm5vZGUpO1xuICBjb25zdCBzZWNvbmRSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgc2Vjb25kUm9vdCk7XG4gIGNvbnN0IHNlY29uZFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBjYW5GaXggPSBjYW5SZW9yZGVySXRlbXMoZmlyc3RSb290LCBzZWNvbmRSb290KTtcblxuICBsZXQgbmV3Q29kZSA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdFN0YXJ0LCBzZWNvbmRSb290RW5kKTtcbiAgaWYgKG5ld0NvZGVbbmV3Q29kZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpIHtcbiAgICBuZXdDb2RlID0gYCR7bmV3Q29kZX1cXG5gO1xuICB9XG5cbiAgY29uc3QgZmlyc3RJbXBvcnQgPSBgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oZmlyc3ROb2RlKX0gb2YgXFxgJHtmaXJzdE5vZGUuZGlzcGxheU5hbWV9XFxgYDtcbiAgY29uc3Qgc2Vjb25kSW1wb3J0ID0gYFxcYCR7c2Vjb25kTm9kZS5kaXNwbGF5TmFtZX1cXGAgJHttYWtlSW1wb3J0RGVzY3JpcHRpb24oc2Vjb25kTm9kZSl9YDtcbiAgY29uc3QgbWVzc2FnZSA9IGAke3NlY29uZEltcG9ydH0gc2hvdWxkIG9jY3VyICR7b3JkZXJ9ICR7Zmlyc3RJbXBvcnR9YDtcblxuICBpZiAob3JkZXIgPT09ICdiZWZvcmUnKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZF0sXG4gICAgICAgIG5ld0NvZGUgKyBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGZpcnN0Um9vdFN0YXJ0LCBzZWNvbmRSb290U3RhcnQpLFxuICAgICAgKSksXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob3JkZXIgPT09ICdhZnRlcicpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBzZWNvbmROb2RlLm5vZGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZml4OiBjYW5GaXggJiYgKChmaXhlcikgPT4gZml4ZXIucmVwbGFjZVRleHRSYW5nZShcbiAgICAgICAgW3NlY29uZFJvb3RTdGFydCwgZmlyc3RSb290RW5kXSxcbiAgICAgICAgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhzZWNvbmRSb290RW5kLCBmaXJzdFJvb3RFbmQpICsgbmV3Q29kZSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydE91dE9mT3JkZXIoY29udGV4dCwgaW1wb3J0ZWQsIG91dE9mT3JkZXIsIG9yZGVyKSB7XG4gIG91dE9mT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoaW1wKSB7XG4gICAgY29uc3QgZm91bmQgPSBpbXBvcnRlZC5maW5kKGZ1bmN0aW9uIGhhc0hpZ2hlclJhbmsoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWRJdGVtLnJhbmsgPiBpbXAucmFuaztcbiAgICB9KTtcbiAgICBmaXhPdXRPZk9yZGVyKGNvbnRleHQsIGZvdW5kLCBpbXAsIG9yZGVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VPdXRPZk9yZGVyUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkKSB7XG4gIGNvbnN0IG91dE9mT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihpbXBvcnRlZCk7XG4gIGlmICghb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGVyZSBhcmUgdGhpbmdzIHRvIHJlcG9ydC4gVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVwb3J0ZWQgZXJyb3JzLlxuICBjb25zdCByZXZlcnNlZEltcG9ydGVkID0gcmV2ZXJzZShpbXBvcnRlZCk7XG4gIGNvbnN0IHJldmVyc2VkT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihyZXZlcnNlZEltcG9ydGVkKTtcbiAgaWYgKHJldmVyc2VkT3JkZXIubGVuZ3RoIDwgb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIHJldmVyc2VkSW1wb3J0ZWQsIHJldmVyc2VkT3JkZXIsICdhZnRlcicpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCAnYmVmb3JlJyk7XG59XG5cbmNvbnN0IGNvbXBhcmVTdHJpbmcgPSAoYSwgYikgPT4ge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG4vKiogU29tZSBwYXJzZXJzIChsYW5ndWFnZXMgd2l0aG91dCB0eXBlcykgZG9uJ3QgcHJvdmlkZSBJbXBvcnRLaW5kICovXG5jb25zdCBERUFGVUxUX0lNUE9SVF9LSU5EID0gJ3ZhbHVlJztcbmNvbnN0IGdldE5vcm1hbGl6ZWRWYWx1ZSA9IChub2RlLCB0b0xvd2VyQ2FzZSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIHJldHVybiB0b0xvd2VyQ2FzZSA/IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xufTtcblxuZnVuY3Rpb24gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBtdWx0aXBsaWVyID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgY29uc3Qgb3JkZXJJbXBvcnRLaW5kID0gYWxwaGFiZXRpemVPcHRpb25zLm9yZGVySW1wb3J0S2luZDtcbiAgY29uc3QgbXVsdGlwbGllckltcG9ydEtpbmQgPSBvcmRlckltcG9ydEtpbmQgIT09ICdpZ25vcmUnXG4gICAgJiYgKGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQgPT09ICdhc2MnID8gMSA6IC0xKTtcblxuICByZXR1cm4gZnVuY3Rpb24gaW1wb3J0c1NvcnRlcihub2RlQSwgbm9kZUIpIHtcbiAgICBjb25zdCBpbXBvcnRBID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVBLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBjb25zdCBpbXBvcnRCID0gZ2V0Tm9ybWFsaXplZFZhbHVlKG5vZGVCLCBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlKTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgIGlmICghaW5jbHVkZXMoaW1wb3J0QSwgJy8nKSAmJiAhaW5jbHVkZXMoaW1wb3J0QiwgJy8nKSkge1xuICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhpbXBvcnRBLCBpbXBvcnRCKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgQSA9IGltcG9ydEEuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IEIgPSBpbXBvcnRCLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBhID0gQS5sZW5ndGg7XG4gICAgICBjb25zdCBiID0gQi5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oYSwgYik7IGkrKykge1xuICAgICAgICAvLyBTa2lwIGNvbXBhcmluZyB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCBpZiB0aGV5IGFyZSByZWxhdGl2ZSBzZWdtZW50cyBmb3IgYm90aCBpbXBvcnRzXG4gICAgICAgIGlmIChpID09PSAwICYmICgoQVtpXSA9PT0gJy4nIHx8IEFbaV0gPT09ICcuLicpICYmIChCW2ldID09PSAnLicgfHwgQltpXSA9PT0gJy4uJykpKSB7XG4gICAgICAgICAgLy8gSWYgb25lIGlzIHNpYmxpbmcgYW5kIHRoZSBvdGhlciBwYXJlbnQgaW1wb3J0LCBubyBuZWVkIHRvIGNvbXBhcmUgYXQgYWxsLCBzaW5jZSB0aGUgcGF0aHMgYmVsb25nIGluIGRpZmZlcmVudCBncm91cHNcbiAgICAgICAgICBpZiAoQVtpXSAhPT0gQltpXSkgeyBicmVhazsgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoQVtpXSwgQltpXSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgYnJlYWs7IH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHQgJiYgYSAhPT0gYikge1xuICAgICAgICByZXN1bHQgPSBhIDwgYiA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgPSByZXN1bHQgKiBtdWx0aXBsaWVyO1xuXG4gICAgLy8gSW4gY2FzZSB0aGUgcGF0aHMgYXJlIGVxdWFsIChyZXN1bHQgPT09IDApLCBzb3J0IHRoZW0gYnkgaW1wb3J0S2luZFxuICAgIGlmICghcmVzdWx0ICYmIG11bHRpcGxpZXJJbXBvcnRLaW5kKSB7XG4gICAgICByZXN1bHQgPSBtdWx0aXBsaWVySW1wb3J0S2luZCAqIGNvbXBhcmVTdHJpbmcoXG4gICAgICAgIG5vZGVBLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgICBub2RlQi5ub2RlLmltcG9ydEtpbmQgfHwgREVBRlVMVF9JTVBPUlRfS0lORCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgZ3JvdXBlZEJ5UmFua3MgPSBncm91cEJ5KGltcG9ydGVkLCAoaXRlbSkgPT4gaXRlbS5yYW5rKTtcblxuICBjb25zdCBzb3J0ZXJGbiA9IGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpO1xuXG4gIC8vIHNvcnQgZ3JvdXAga2V5cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG9uIGluIG9yZGVyXG4gIGNvbnN0IGdyb3VwUmFua3MgPSBPYmplY3Qua2V5cyhncm91cGVkQnlSYW5rcykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfSk7XG5cbiAgLy8gc29ydCBpbXBvcnRzIGxvY2FsbHkgd2l0aGluIHRoZWlyIGdyb3VwXG4gIGdyb3VwUmFua3MuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBSYW5rKSB7XG4gICAgZ3JvdXBlZEJ5UmFua3NbZ3JvdXBSYW5rXS5zb3J0KHNvcnRlckZuKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGdsb2JhbGx5IHVuaXF1ZSByYW5rIHRvIGVhY2ggaW1wb3J0XG4gIGxldCBuZXdSYW5rID0gMDtcbiAgY29uc3QgYWxwaGFiZXRpemVkUmFua3MgPSBncm91cFJhbmtzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgICAgYWNjW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdID0gcGFyc2VJbnQoZ3JvdXBSYW5rLCAxMCkgKyBuZXdSYW5rO1xuICAgICAgbmV3UmFuayArPSAxO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBtdXRhdGUgdGhlIG9yaWdpbmFsIGdyb3VwLXJhbmsgd2l0aCBhbHBoYWJldGl6ZWQtcmFua1xuICBpbXBvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvcnRlZEl0ZW0pIHtcbiAgICBpbXBvcnRlZEl0ZW0ucmFuayA9IGFscGhhYmV0aXplZFJhbmtzW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdO1xuICB9KTtcbn1cblxuLy8gREVURUNUSU5HXG5cbmZ1bmN0aW9uIGNvbXB1dGVQYXRoUmFuayhyYW5rcywgcGF0aEdyb3VwcywgcGF0aCwgbWF4UG9zaXRpb24pIHtcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXRoR3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IHsgcGF0dGVybiwgcGF0dGVybk9wdGlvbnMsIGdyb3VwLCBwb3NpdGlvbiA9IDEgfSA9IHBhdGhHcm91cHNbaV07XG4gICAgaWYgKG1pbmltYXRjaChwYXRoLCBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucyB8fCB7IG5vY29tbWVudDogdHJ1ZSB9KSkge1xuICAgICAgcmV0dXJuIHJhbmtzW2dyb3VwXSArIHBvc2l0aW9uIC8gbWF4UG9zaXRpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcykge1xuICBsZXQgaW1wVHlwZTtcbiAgbGV0IHJhbms7XG4gIGlmIChpbXBvcnRFbnRyeS50eXBlID09PSAnaW1wb3J0Om9iamVjdCcpIHtcbiAgICBpbXBUeXBlID0gJ29iamVjdCc7XG4gIH0gZWxzZSBpZiAoaW1wb3J0RW50cnkubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScgJiYgcmFua3Mub21pdHRlZFR5cGVzLmluZGV4T2YoJ3R5cGUnKSA9PT0gLTEpIHtcbiAgICBpbXBUeXBlID0gJ3R5cGUnO1xuICB9IGVsc2Uge1xuICAgIGltcFR5cGUgPSBpbXBvcnRUeXBlKGltcG9ydEVudHJ5LnZhbHVlLCBjb250ZXh0KTtcbiAgfVxuICBpZiAoIWV4Y2x1ZGVkSW1wb3J0VHlwZXMuaGFzKGltcFR5cGUpKSB7XG4gICAgcmFuayA9IGNvbXB1dGVQYXRoUmFuayhyYW5rcy5ncm91cHMsIHJhbmtzLnBhdGhHcm91cHMsIGltcG9ydEVudHJ5LnZhbHVlLCByYW5rcy5tYXhQb3NpdGlvbik7XG4gIH1cbiAgaWYgKHR5cGVvZiByYW5rID09PSAndW5kZWZpbmVkJykge1xuICAgIHJhbmsgPSByYW5rcy5ncm91cHNbaW1wVHlwZV07XG4gIH1cbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgIT09ICdpbXBvcnQnICYmICFpbXBvcnRFbnRyeS50eXBlLnN0YXJ0c1dpdGgoJ2ltcG9ydDonKSkge1xuICAgIHJhbmsgKz0gMTAwO1xuICB9XG5cbiAgcmV0dXJuIHJhbms7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShjb250ZXh0LCBpbXBvcnRFbnRyeSwgcmFua3MsIGltcG9ydGVkLCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGNvbnN0IHJhbmsgPSBjb21wdXRlUmFuayhjb250ZXh0LCByYW5rcywgaW1wb3J0RW50cnksIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpO1xuICBpZiAocmFuayAhPT0gLTEpIHtcbiAgICBpbXBvcnRlZC5wdXNoKHsgLi4uaW1wb3J0RW50cnksIHJhbmsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpIHtcbiAgbGV0IG4gPSBub2RlO1xuICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBgY29uc3QgYmF6ID0gcmVxdWlyZSgnZm9vJykuYmFyLmJhemBcbiAgLy8gYW5kIGBjb25zdCBmb28gPSByZXF1aXJlKCdmb28nKSgpYFxuICB3aGlsZSAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG4ucGFyZW50Lm9iamVjdCA9PT0gblxuICAgIHx8IG4ucGFyZW50LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQuY2FsbGVlID09PSBuXG4gICkge1xuICAgIG4gPSBuLnBhcmVudDtcbiAgfVxuICBpZiAoXG4gICAgbi5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nXG4gICAgJiYgbi5wYXJlbnQucGFyZW50LnBhcmVudC50eXBlID09PSAnUHJvZ3JhbSdcbiAgKSB7XG4gICAgcmV0dXJuIG4ucGFyZW50LnBhcmVudC5wYXJlbnQ7XG4gIH1cbn1cblxuY29uc3QgdHlwZXMgPSBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnaW50ZXJuYWwnLCAndW5rbm93bicsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCcsICdvYmplY3QnLCAndHlwZSddO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHR5cGUtcmFuayBwYWlycy5cbi8vIEV4YW1wbGU6IHsgaW5kZXg6IDAsIHNpYmxpbmc6IDEsIHBhcmVudDogMSwgZXh0ZXJuYWw6IDEsIGJ1aWx0aW46IDIsIGludGVybmFsOiAyIH1cbi8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgaXQgY29udGFpbnMgYSB0eXBlIHRoYXQgZG9lcyBub3QgZXhpc3QsIG9yIGhhcyBhIGR1cGxpY2F0ZVxuZnVuY3Rpb24gY29udmVydEdyb3Vwc1RvUmFua3MoZ3JvdXBzKSB7XG4gIGNvbnN0IHJhbmtPYmplY3QgPSBncm91cHMucmVkdWNlKGZ1bmN0aW9uIChyZXMsIGdyb3VwLCBpbmRleCkge1xuICAgIFtdLmNvbmNhdChncm91cCkuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBJdGVtKSB7XG4gICAgICBpZiAodHlwZXMuaW5kZXhPZihncm91cEl0ZW0pID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBVbmtub3duIHR5cGUgXFxgJHtKU09OLnN0cmluZ2lmeShncm91cEl0ZW0pfVxcYGApO1xuICAgICAgfVxuICAgICAgaWYgKHJlc1tncm91cEl0ZW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgcnVsZTogXFxgJHtncm91cEl0ZW19XFxgIGlzIGR1cGxpY2F0ZWRgKTtcbiAgICAgIH1cbiAgICAgIHJlc1tncm91cEl0ZW1dID0gaW5kZXggKiAyO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBvbWl0dGVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHJhbmtPYmplY3RbdHlwZV0gPT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBjb25zdCByYW5rcyA9IG9taXR0ZWRUeXBlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgdHlwZSkge1xuICAgIHJlc1t0eXBlXSA9IGdyb3Vwcy5sZW5ndGggKiAyO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHJhbmtPYmplY3QpO1xuXG4gIHJldHVybiB7IGdyb3VwczogcmFua3MsIG9taXR0ZWRUeXBlcyB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzKHBhdGhHcm91cHMpIHtcbiAgY29uc3QgYWZ0ZXIgPSB7fTtcbiAgY29uc3QgYmVmb3JlID0ge307XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXRoR3JvdXBzLm1hcCgocGF0aEdyb3VwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgZ3JvdXAsIHBvc2l0aW9uOiBwb3NpdGlvblN0cmluZyB9ID0gcGF0aEdyb3VwO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAoIWFmdGVyW2dyb3VwXSkge1xuICAgICAgICBhZnRlcltncm91cF0gPSAxO1xuICAgICAgfVxuICAgICAgcG9zaXRpb24gPSBhZnRlcltncm91cF0rKztcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKCFiZWZvcmVbZ3JvdXBdKSB7XG4gICAgICAgIGJlZm9yZVtncm91cF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGJlZm9yZVtncm91cF0ucHVzaChpbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGF0aEdyb3VwLCBwb3NpdGlvbiB9O1xuICB9KTtcblxuICBsZXQgbWF4UG9zaXRpb24gPSAxO1xuXG4gIE9iamVjdC5rZXlzKGJlZm9yZSkuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICBjb25zdCBncm91cExlbmd0aCA9IGJlZm9yZVtncm91cF0ubGVuZ3RoO1xuICAgIGJlZm9yZVtncm91cF0uZm9yRWFjaCgoZ3JvdXBJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgIHRyYW5zZm9ybWVkW2dyb3VwSW5kZXhdLnBvc2l0aW9uID0gLTEgKiAoZ3JvdXBMZW5ndGggLSBpbmRleCk7XG4gICAgfSk7XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBMZW5ndGgpO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhhZnRlcikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgZ3JvdXBOZXh0UG9zaXRpb24gPSBhZnRlcltrZXldO1xuICAgIG1heFBvc2l0aW9uID0gTWF0aC5tYXgobWF4UG9zaXRpb24sIGdyb3VwTmV4dFBvc2l0aW9uIC0gMSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aEdyb3VwczogdHJhbnNmb3JtZWQsXG4gICAgbWF4UG9zaXRpb246IG1heFBvc2l0aW9uID4gMTAgPyBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKE1hdGgubG9nMTAobWF4UG9zaXRpb24pKSkgOiAxMCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZml4TmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHByZXZSb290ID0gZmluZFJvb3ROb2RlKHByZXZpb3VzSW1wb3J0Lm5vZGUpO1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNBZnRlcldoaWxlKFxuICAgIGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLCBwcmV2Um9vdCwgY29tbWVudE9uU2FtZUxpbmVBcyhwcmV2Um9vdCkpO1xuXG4gIGxldCBlbmRPZkxpbmUgPSBwcmV2Um9vdC5yYW5nZVsxXTtcbiAgaWYgKHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDApIHtcbiAgICBlbmRPZkxpbmUgPSB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXTtcbiAgfVxuICByZXR1cm4gKGZpeGVyKSA9PiBmaXhlci5pbnNlcnRUZXh0QWZ0ZXJSYW5nZShbcHJldlJvb3QucmFuZ2VbMF0sIGVuZE9mTGluZV0sICdcXG4nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IGN1cnJSb290ID0gZmluZFJvb3ROb2RlKGN1cnJlbnRJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHJhbmdlVG9SZW1vdmUgPSBbXG4gICAgZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBwcmV2Um9vdCksXG4gICAgZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGN1cnJSb290KSxcbiAgXTtcbiAgaWYgKCgvXlxccyokLykudGVzdChzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHJhbmdlVG9SZW1vdmVbMF0sIHJhbmdlVG9SZW1vdmVbMV0pKSkge1xuICAgIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLnJlbW92ZVJhbmdlKHJhbmdlVG9SZW1vdmUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMsIGRpc3RpbmN0R3JvdXApIHtcbiAgY29uc3QgZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbiA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4ge1xuICAgIGNvbnN0IGxpbmVzQmV0d2VlbkltcG9ydHMgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5saW5lcy5zbGljZShcbiAgICAgIHByZXZpb3VzSW1wb3J0Lm5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgY3VycmVudEltcG9ydC5ub2RlLmxvYy5zdGFydC5saW5lIC0gMSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxpbmVzQmV0d2VlbkltcG9ydHMuZmlsdGVyKChsaW5lKSA9PiAhbGluZS50cmltKCkubGVuZ3RoKS5sZW5ndGg7XG4gIH07XG4gIGNvbnN0IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAgPSAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpID0+IGN1cnJlbnRJbXBvcnQucmFuayAtIDEgPj0gcHJldmlvdXNJbXBvcnQucmFuaztcbiAgbGV0IHByZXZpb3VzSW1wb3J0ID0gaW1wb3J0ZWRbMF07XG5cbiAgaW1wb3J0ZWQuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudEltcG9ydCkge1xuICAgIGNvbnN0IGVtcHR5TGluZXNCZXR3ZWVuID0gZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbihjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG4gICAgY29uc3QgaXNTdGFydE9mRGlzdGluY3RHcm91cCA9IGdldElzU3RhcnRPZkRpc3RpbmN0R3JvdXAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpO1xuXG4gICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMnXG4gICAgICAgIHx8IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICBpZiAoY3VycmVudEltcG9ydC5yYW5rICE9PSBwcmV2aW91c0ltcG9ydC5yYW5rICYmIGVtcHR5TGluZXNCZXR3ZWVuID09PSAwKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwIHx8ICFkaXN0aW5jdEdyb3VwICYmIGlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZW1wdHkgbGluZSBiZXR3ZWVuIGltcG9ydCBncm91cHMnLFxuICAgICAgICAgICAgZml4OiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMFxuICAgICAgICAmJiBuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJykge1xuICAgICAgICBpZiAoZGlzdGluY3RHcm91cCAmJiBjdXJyZW50SW1wb3J0LnJhbmsgPT09IHByZXZpb3VzSW1wb3J0LnJhbmsgfHwgIWRpc3RpbmN0R3JvdXAgJiYgIWlzU3RhcnRPZkRpc3RpbmN0R3JvdXApIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIHdpdGhpbiBpbXBvcnQgZ3JvdXAnLFxuICAgICAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzQmV0d2VlbiA+IDApIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogcHJldmlvdXNJbXBvcnQubm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHNob3VsZCBiZSBubyBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgIGZpeDogcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXZpb3VzSW1wb3J0ID0gY3VycmVudEltcG9ydDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpIHtcbiAgY29uc3QgYWxwaGFiZXRpemUgPSBvcHRpb25zLmFscGhhYmV0aXplIHx8IHt9O1xuICBjb25zdCBvcmRlciA9IGFscGhhYmV0aXplLm9yZGVyIHx8ICdpZ25vcmUnO1xuICBjb25zdCBvcmRlckltcG9ydEtpbmQgPSBhbHBoYWJldGl6ZS5vcmRlckltcG9ydEtpbmQgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IGNhc2VJbnNlbnNpdGl2ZSA9IGFscGhhYmV0aXplLmNhc2VJbnNlbnNpdGl2ZSB8fCBmYWxzZTtcblxuICByZXR1cm4geyBvcmRlciwgb3JkZXJJbXBvcnRLaW5kLCBjYXNlSW5zZW5zaXRpdmUgfTtcbn1cblxuLy8gVE9ETywgc2VtdmVyLW1ham9yOiBDaGFuZ2UgdGhlIGRlZmF1bHQgb2YgXCJkaXN0aW5jdEdyb3VwXCIgZnJvbSB0cnVlIHRvIGZhbHNlXG5jb25zdCBkZWZhdWx0RGlzdGluY3RHcm91cCA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIGNhdGVnb3J5OiAnU3R5bGUgZ3VpZGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIGEgY29udmVudGlvbiBpbiBtb2R1bGUgaW1wb3J0IG9yZGVyLicsXG4gICAgICB1cmw6IGRvY3NVcmwoJ29yZGVyJyksXG4gICAgfSxcblxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3RpbmN0R3JvdXA6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHREaXN0aW5jdEdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGF0aEdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICBlbnVtOiB0eXBlcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IFsnYWZ0ZXInLCAnYmVmb3JlJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWydwYXR0ZXJuJywgJ2dyb3VwJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ25ld2xpbmVzLWJldHdlZW4nOiB7XG4gICAgICAgICAgICBlbnVtOiBbXG4gICAgICAgICAgICAgICdpZ25vcmUnLFxuICAgICAgICAgICAgICAnYWx3YXlzJyxcbiAgICAgICAgICAgICAgJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycsXG4gICAgICAgICAgICAgICduZXZlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXJJbXBvcnRLaW5kOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YXJuT25VbmFzc2lnbmVkSW1wb3J0czoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gaW1wb3J0T3JkZXJSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPSBvcHRpb25zWyduZXdsaW5lcy1iZXR3ZWVuJ10gfHwgJ2lnbm9yZSc7XG4gICAgY29uc3QgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgPSBuZXcgU2V0KG9wdGlvbnMucGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgfHwgWydidWlsdGluJywgJ2V4dGVybmFsJywgJ29iamVjdCddKTtcbiAgICBjb25zdCBhbHBoYWJldGl6ZSA9IGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpO1xuICAgIGNvbnN0IGRpc3RpbmN0R3JvdXAgPSBvcHRpb25zLmRpc3RpbmN0R3JvdXAgPT0gbnVsbCA/IGRlZmF1bHREaXN0aW5jdEdyb3VwIDogISFvcHRpb25zLmRpc3RpbmN0R3JvdXA7XG4gICAgbGV0IHJhbmtzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF0aEdyb3VwcywgbWF4UG9zaXRpb24gfSA9IGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3Mob3B0aW9ucy5wYXRoR3JvdXBzIHx8IFtdKTtcbiAgICAgIGNvbnN0IHsgZ3JvdXBzLCBvbWl0dGVkVHlwZXMgfSA9IGNvbnZlcnRHcm91cHNUb1JhbmtzKG9wdGlvbnMuZ3JvdXBzIHx8IGRlZmF1bHRHcm91cHMpO1xuICAgICAgcmFua3MgPSB7XG4gICAgICAgIGdyb3VwcyxcbiAgICAgICAgb21pdHRlZFR5cGVzLFxuICAgICAgICBwYXRoR3JvdXBzLFxuICAgICAgICBtYXhQb3NpdGlvbixcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBjb25maWd1cmF0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9ncmFtKG5vZGUpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGdldEJsb2NrSW1wb3J0cyhub2RlKSB7XG4gICAgICBpZiAoIWltcG9ydE1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgaW1wb3J0TWFwLnNldChub2RlLCBbXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1wb3J0TWFwLmdldChub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICAvLyBJZ25vcmluZyB1bmFzc2lnbmVkIGltcG9ydHMgdW5sZXNzIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzIGlzIHNldFxuICAgICAgICBpZiAobm9kZS5zcGVjaWZpZXJzLmxlbmd0aCB8fCBvcHRpb25zLndhcm5PblVuYXNzaWduZWRJbXBvcnRzKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG5vZGUuc291cmNlLnZhbHVlO1xuICAgICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2ltcG9ydCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmFua3MsXG4gICAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgbGV0IHR5cGU7XG4gICAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICAgIGlmIChub2RlLmlzRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm1vZHVsZVJlZmVyZW5jZS50eXBlID09PSAnVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb24udmFsdWU7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICB0eXBlID0gJ2ltcG9ydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmdldFRleHQobm9kZS5tb2R1bGVSZWZlcmVuY2UpO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0Om9iamVjdCc7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKG5vZGUucGFyZW50KSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gaGFuZGxlUmVxdWlyZXMobm9kZSkge1xuICAgICAgICBpZiAoIWlzU3RhdGljUmVxdWlyZShub2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9jayA9IGdldFJlcXVpcmVCbG9jayhub2RlKTtcbiAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5hcmd1bWVudHNbMF0udmFsdWU7XG4gICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3JlcXVpcmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKGJsb2NrKSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gcmVwb3J0QW5kUmVzZXQoKSB7XG4gICAgICAgIGltcG9ydE1hcC5mb3JFYWNoKChpbXBvcnRlZCkgPT4ge1xuICAgICAgICAgIGlmIChuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFscGhhYmV0aXplLm9yZGVyICE9PSAnaWdub3JlJykge1xuICAgICAgICAgICAgbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWFrZU91dE9mT3JkZXJSZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbXBvcnRNYXAuY2xlYXIoKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyIsInRva2Vuc1RvRW5kT2ZMaW5lIiwiY29tbWVudE9uU2FtZUxpbmVBcyIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwidG9rZW4iLCJ0eXBlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiZW5kIiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUmVxdWlyZUV4cHJlc3Npb24iLCJleHByIiwiY2FsbGVlIiwibmFtZSIsImFyZ3VtZW50cyIsImlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZSIsImRlY2xhcmF0aW9ucyIsImRlY2wiLCJpc1BsYWluUmVxdWlyZSIsImlkIiwiaW5pdCIsImlzUmVxdWlyZVdpdGhNZW1iZXJFeHByZXNzaW9uIiwib2JqZWN0IiwiaXNQbGFpbkltcG9ydE1vZHVsZSIsInNwZWNpZmllcnMiLCJpc1BsYWluSW1wb3J0RXF1YWxzIiwibW9kdWxlUmVmZXJlbmNlIiwiZXhwcmVzc2lvbiIsImNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlciIsImNhblJlb3JkZXJJdGVtcyIsImZpcnN0Tm9kZSIsInNlY29uZE5vZGUiLCJpbmRleE9mIiwic29ydCIsImZpcnN0SW5kZXgiLCJzZWNvbmRJbmRleCIsIm5vZGVzQmV0d2VlbiIsInNsaWNlIiwibm9kZUJldHdlZW4iLCJtYWtlSW1wb3J0RGVzY3JpcHRpb24iLCJpbXBvcnRLaW5kIiwiZml4T3V0T2ZPcmRlciIsImNvbnRleHQiLCJvcmRlciIsImdldFNvdXJjZUNvZGUiLCJmaXJzdFJvb3QiLCJmaXJzdFJvb3RTdGFydCIsImZpcnN0Um9vdEVuZCIsInNlY29uZFJvb3QiLCJzZWNvbmRSb290U3RhcnQiLCJzZWNvbmRSb290RW5kIiwiY2FuRml4IiwibmV3Q29kZSIsInN1YnN0cmluZyIsImZpcnN0SW1wb3J0IiwiZGlzcGxheU5hbWUiLCJzZWNvbmRJbXBvcnQiLCJtZXNzYWdlIiwicmVwb3J0IiwiZml4IiwiZml4ZXIiLCJyZXBsYWNlVGV4dFJhbmdlIiwicmVwb3J0T3V0T2ZPcmRlciIsIm91dE9mT3JkZXIiLCJmb3JFYWNoIiwiaW1wIiwiZm91bmQiLCJmaW5kIiwiaGFzSGlnaGVyUmFuayIsImltcG9ydGVkSXRlbSIsIm1ha2VPdXRPZk9yZGVyUmVwb3J0IiwicmV2ZXJzZWRJbXBvcnRlZCIsInJldmVyc2VkT3JkZXIiLCJjb21wYXJlU3RyaW5nIiwiYSIsImIiLCJERUFGVUxUX0lNUE9SVF9LSU5EIiwiZ2V0Tm9ybWFsaXplZFZhbHVlIiwidG9Mb3dlckNhc2UiLCJ2YWx1ZSIsIlN0cmluZyIsImdldFNvcnRlciIsImFscGhhYmV0aXplT3B0aW9ucyIsIm11bHRpcGxpZXIiLCJvcmRlckltcG9ydEtpbmQiLCJtdWx0aXBsaWVySW1wb3J0S2luZCIsImltcG9ydHNTb3J0ZXIiLCJub2RlQSIsIm5vZGVCIiwiaW1wb3J0QSIsImNhc2VJbnNlbnNpdGl2ZSIsImltcG9ydEIiLCJBIiwic3BsaXQiLCJCIiwiTWF0aCIsIm1pbiIsIm11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZSIsImdyb3VwZWRCeVJhbmtzIiwiaXRlbSIsInNvcnRlckZuIiwiZ3JvdXBSYW5rcyIsIk9iamVjdCIsImtleXMiLCJncm91cFJhbmsiLCJuZXdSYW5rIiwiYWxwaGFiZXRpemVkUmFua3MiLCJyZWR1Y2UiLCJhY2MiLCJwYXJzZUludCIsImNvbXB1dGVQYXRoUmFuayIsInJhbmtzIiwicGF0aEdyb3VwcyIsInBhdGgiLCJtYXhQb3NpdGlvbiIsImwiLCJwYXR0ZXJuIiwicGF0dGVybk9wdGlvbnMiLCJncm91cCIsInBvc2l0aW9uIiwibm9jb21tZW50IiwiY29tcHV0ZVJhbmsiLCJpbXBvcnRFbnRyeSIsImV4Y2x1ZGVkSW1wb3J0VHlwZXMiLCJpbXBUeXBlIiwib21pdHRlZFR5cGVzIiwiaGFzIiwiZ3JvdXBzIiwic3RhcnRzV2l0aCIsInJlZ2lzdGVyTm9kZSIsImdldFJlcXVpcmVCbG9jayIsIm4iLCJ0eXBlcyIsImNvbnZlcnRHcm91cHNUb1JhbmtzIiwicmFua09iamVjdCIsImluZGV4IiwiY29uY2F0IiwiZ3JvdXBJdGVtIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyIsImFmdGVyIiwiYmVmb3JlIiwidHJhbnNmb3JtZWQiLCJwYXRoR3JvdXAiLCJwb3NpdGlvblN0cmluZyIsImdyb3VwTGVuZ3RoIiwiZ3JvdXBJbmRleCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZGlzdGluY3RHcm91cCIsImdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4iLCJsaW5lc0JldHdlZW5JbXBvcnRzIiwibGluZXMiLCJ0cmltIiwiZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCIsImVtcHR5TGluZXNCZXR3ZWVuIiwiaXNTdGFydE9mRGlzdGluY3RHcm91cCIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwiZGVmYXVsdERpc3RpbmN0R3JvdXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJjYXRlZ29yeSIsImRlc2NyaXB0aW9uIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJyZXF1aXJlZCIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSwrQztBQUNBLHdDOztBQUVBLGdEO0FBQ0Esc0Q7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixRQUF4QixFQUFrQyxTQUFsQyxFQUE2QyxPQUE3QyxDQUF0Qjs7QUFFQTs7QUFFQSxTQUFTQyxP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SztBQWlETEsscUNBQWdCLFNBQVNDLGNBQVQsQ0FBd0JoUCxJQUF4QixFQUE4QjtBQUM1QyxnQkFBSSxDQUFDLGdDQUFnQkEsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQjtBQUNEO0FBQ0QsZ0JBQU1pUCxRQUFRcEYsZ0JBQWdCN0osSUFBaEIsQ0FBZDtBQUNBLGdCQUFJLENBQUNpUCxLQUFMLEVBQVk7QUFDVjtBQUNEO0FBQ0QsZ0JBQU16TSxPQUFPeEMsS0FBS3lDLFNBQUwsQ0FBZSxDQUFmLEVBQWtCaUUsS0FBL0I7QUFDQWtEO0FBQ0V2RixtQkFERjtBQUVFO0FBQ0VyRSx3QkFERjtBQUVFMEcscUJBQU9sRSxJQUZUO0FBR0UwQywyQkFBYTFDLElBSGY7QUFJRVYsb0JBQU0sU0FKUixFQUZGOztBQVFFNEcsaUJBUkY7QUFTRTRGLDRCQUFnQlcsS0FBaEIsQ0FURjtBQVVFdkIseUNBVkY7O0FBWUQsV0FyQkQsT0FBeUJzQixjQUF6QixJQWpESztBQXVFTCxxQ0FBZ0IsU0FBU0UsY0FBVCxHQUEwQjtBQUN4Q2Qsc0JBQVV6SSxPQUFWLENBQWtCLFVBQUM1RSxRQUFELEVBQWM7QUFDOUIsa0JBQUlvTCwyQkFBMkIsUUFBL0IsRUFBeUM7QUFDdkNELDBDQUEwQjdILE9BQTFCLEVBQW1DdEQsUUFBbkMsRUFBNkNvTCxzQkFBN0MsRUFBcUVDLGFBQXJFO0FBQ0Q7O0FBRUQsa0JBQUlVLFlBQVl4SSxLQUFaLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDc0QseUNBQXlCN0csUUFBekIsRUFBbUMrTCxXQUFuQztBQUNEOztBQUVEN0csbUNBQXFCNUIsT0FBckIsRUFBOEJ0RCxRQUE5QjtBQUNELGFBVkQ7O0FBWUFxTixzQkFBVWUsS0FBVjtBQUNELFdBZEQsT0FBeUJELGNBQXpCLElBdkVLLEVBQVA7O0FBdUZELEtBekhELE9BQWlCbEIsZUFBakIsSUFwRmUsRUFBakIiLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdvYmplY3QuZ3JvdXBieSc7XG5cbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgaXNTdGF0aWNSZXF1aXJlIGZyb20gJy4uL2NvcmUvc3RhdGljUmVxdWlyZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVmYXVsdEdyb3VwcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCddO1xuXG4vLyBSRVBPUlRJTkcgQU5EIEZJWElOR1xuXG5mdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4geyAuLi52LCByYW5rOiAtdi5yYW5rIH07XG4gIH0pLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5zT3JDb21tZW50c0FmdGVyKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEFmdGVyKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEJlZm9yZShjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICAgIGlmIChjdXJyZW50Tm9kZU9yVG9rZW4gPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIHRha2VUb2tlbnNBZnRlcldoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0JlZm9yZVdoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIDEwMCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdXRPZk9yZGVyKGltcG9ydGVkKSB7XG4gIGlmIChpbXBvcnRlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkWzBdO1xuICByZXR1cm4gaW1wb3J0ZWQuZmlsdGVyKGZ1bmN0aW9uIChpbXBvcnRlZE1vZHVsZSkge1xuICAgIGNvbnN0IHJlcyA9IGltcG9ydGVkTW9kdWxlLnJhbmsgPCBtYXhTZWVuUmFua05vZGUucmFuaztcbiAgICBpZiAobWF4U2VlblJhbmtOb2RlLnJhbmsgPCBpbXBvcnRlZE1vZHVsZS5yYW5rKSB7XG4gICAgICBtYXhTZWVuUmFua05vZGUgPSBpbXBvcnRlZE1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRSb290Tm9kZShub2RlKSB7XG4gIGxldCBwYXJlbnQgPSBub2RlO1xuICB3aGlsZSAocGFyZW50LnBhcmVudCAhPSBudWxsICYmIHBhcmVudC5wYXJlbnQuYm9keSA9PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3QgZW5kT2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwXG4gICAgPyB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgIDogbm9kZS5yYW5nZVsxXTtcbiAgbGV0IHJlc3VsdCA9IGVuZE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gZW5kT2ZUb2tlbnM7IGkgPCBzb3VyY2VDb2RlLnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldID09PSAnXFxuJykge1xuICAgICAgcmVzdWx0ID0gaSArIDE7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFxyJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGkgKyAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gKHRva2VuKSA9PiAodG9rZW4udHlwZSA9PT0gJ0Jsb2NrJyB8fCAgdG9rZW4udHlwZSA9PT0gJ0xpbmUnKVxuICAgICAgJiYgdG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2VuLmxvYy5lbmQubGluZVxuICAgICAgJiYgdG9rZW4ubG9jLmVuZC5saW5lID09PSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQmVmb3JlV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IHN0YXJ0T2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwID8gdG9rZW5zVG9FbmRPZkxpbmVbMF0ucmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdO1xuICBsZXQgcmVzdWx0ID0gc3RhcnRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IHN0YXJ0T2ZUb2tlbnMgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZUV4cHJlc3Npb24oZXhwcikge1xuICByZXR1cm4gZXhwciAhPSBudWxsXG4gICAgJiYgZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgJiYgZXhwci5jYWxsZWUgIT0gbnVsbFxuICAgICYmIGV4cHIuY2FsbGVlLm5hbWUgPT09ICdyZXF1aXJlJ1xuICAgICYmIGV4cHIuYXJndW1lbnRzICE9IG51bGxcbiAgICAmJiBleHByLmFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAmJiBleHByLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCc7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkUmVxdWlyZU1vZHVsZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1swXTtcbiAgY29uc3QgaXNQbGFpblJlcXVpcmUgPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0KTtcbiAgY29uc3QgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb24gPSBkZWNsLmlkXG4gICAgJiYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IGRlY2wuaWQudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKVxuICAgICYmIGRlY2wuaW5pdCAhPSBudWxsXG4gICAgJiYgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlICE9IG51bGxcbiAgICAmJiBkZWNsLmluaXQuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJ1xuICAgICYmIGlzUmVxdWlyZUV4cHJlc3Npb24oZGVjbC5pbml0LmNhbGxlZS5vYmplY3QpO1xuICByZXR1cm4gaXNQbGFpblJlcXVpcmUgfHwgaXNSZXF1aXJlV2l0aE1lbWJlckV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRNb2R1bGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nICYmIG5vZGUuc3BlY2lmaWVycyAhPSBudWxsICYmIG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlcihub2RlKSB7XG4gIHJldHVybiBpc1N1cHBvcnRlZFJlcXVpcmVNb2R1bGUobm9kZSkgfHwgaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBjYW5SZW9yZGVySXRlbXMoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IGZpcnN0Tm9kZS5wYXJlbnQ7XG4gIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBbXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihmaXJzdE5vZGUpLFxuICAgIHBhcmVudC5ib2R5LmluZGV4T2Yoc2Vjb25kTm9kZSksXG4gIF0uc29ydCgpO1xuICBjb25zdCBub2Rlc0JldHdlZW4gPSBwYXJlbnQuYm9keS5zbGljZShmaXJzdEluZGV4LCBzZWNvbmRJbmRleCArIDEpO1xuICBmb3IgKGNvbnN0IG5vZGVCZXR3ZWVuIG9mIG5vZGVzQmV0d2Vlbikge1xuICAgIGlmICghY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGVCZXR3ZWVuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUltcG9ydERlc2NyaXB0aW9uKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gJ3R5cGUgaW1wb3J0JztcbiAgfVxuICBpZiAobm9kZS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnKSB7XG4gICAgcmV0dXJuICd0eXBlb2YgaW1wb3J0JztcbiAgfVxuICByZXR1cm4gJ2ltcG9ydCc7XG59XG5cbmZ1bmN0aW9uIGZpeE91dE9mT3JkZXIoY29udGV4dCwgZmlyc3ROb2RlLCBzZWNvbmROb2RlLCBvcmRlcikge1xuICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG5cbiAgY29uc3QgZmlyc3RSb290ID0gZmluZFJvb3ROb2RlKGZpcnN0Tm9kZS5ub2RlKTtcbiAgY29uc3QgZmlyc3RSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgZmlyc3RSb290KTtcbiAgY29uc3QgZmlyc3RSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuXG4gIGNvbnN0IHNlY29uZFJvb3QgPSBmaW5kUm9vdE5vZGUoc2Vjb25kTm9kZS5ub2RlKTtcbiAgY29uc3Qgc2Vjb25kUm9vdFN0YXJ0ID0gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBzZWNvbmRSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBzZWNvbmRSb290KTtcbiAgY29uc3QgY2FuRml4ID0gY2FuUmVvcmRlckl0ZW1zKGZpcnN0Um9vdCwgc2Vjb25kUm9vdCk7XG5cbiAgbGV0IG5ld0NvZGUgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHNlY29uZFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZCk7XG4gIGlmIChuZXdDb2RlW25ld0NvZGUubGVuZ3RoIC0gMV0gIT09ICdcXG4nKSB7XG4gICAgbmV3Q29kZSA9IGAke25ld0NvZGV9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0SW1wb3J0ID0gYCR7bWFrZUltcG9ydERlc2NyaXB0aW9uKGZpcnN0Tm9kZSl9IG9mIFxcYCR7Zmlyc3ROb2RlLmRpc3BsYXlOYW1lfVxcYGA7XG4gIGNvbnN0IHNlY29uZEltcG9ydCA9IGBcXGAke3NlY29uZE5vZGUuZGlzcGxheU5hbWV9XFxgICR7bWFrZUltcG9ydERlc2NyaXB0aW9uKHNlY29uZE5vZGUpfWA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgJHtzZWNvbmRJbXBvcnR9IHNob3VsZCBvY2N1ciAke29yZGVyfSAke2ZpcnN0SW1wb3J0fWA7XG5cbiAgaWYgKG9yZGVyID09PSAnYmVmb3JlJykge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IHNlY29uZE5vZGUubm9kZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBmaXg6IGNhbkZpeCAmJiAoKGZpeGVyKSA9PiBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFxuICAgICAgICBbZmlyc3RSb290U3RhcnQsIHNlY29uZFJvb3RFbmRdLFxuICAgICAgICBuZXdDb2RlICsgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdFN0YXJ0KSxcbiAgICAgICkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9yZGVyID09PSAnYWZ0ZXInKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmICgoZml4ZXIpID0+IGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgIFtzZWNvbmRSb290U3RhcnQsIGZpcnN0Um9vdEVuZF0sXG4gICAgICAgIHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdEVuZCwgZmlyc3RSb290RW5kKSArIG5ld0NvZGUsXG4gICAgICApKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCBvcmRlcikge1xuICBvdXRPZk9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGltcCkge1xuICAgIGNvbnN0IGZvdW5kID0gaW1wb3J0ZWQuZmluZChmdW5jdGlvbiBoYXNIaWdoZXJSYW5rKGltcG9ydGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGltcG9ydGVkSXRlbS5yYW5rID4gaW1wLnJhbms7XG4gICAgfSk7XG4gICAgZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmb3VuZCwgaW1wLCBvcmRlcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCkge1xuICBjb25zdCBvdXRPZk9yZGVyID0gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpO1xuICBpZiAoIW91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlcmUgYXJlIHRoaW5ncyB0byByZXBvcnQuIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcG9ydGVkIGVycm9ycy5cbiAgY29uc3QgcmV2ZXJzZWRJbXBvcnRlZCA9IHJldmVyc2UoaW1wb3J0ZWQpO1xuICBjb25zdCByZXZlcnNlZE9yZGVyID0gZmluZE91dE9mT3JkZXIocmV2ZXJzZWRJbXBvcnRlZCk7XG4gIGlmIChyZXZlcnNlZE9yZGVyLmxlbmd0aCA8IG91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCByZXZlcnNlZEltcG9ydGVkLCByZXZlcnNlZE9yZGVyLCAnYWZ0ZXInKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCBpbXBvcnRlZCwgb3V0T2ZPcmRlciwgJ2JlZm9yZScpO1xufVxuXG5jb25zdCBjb21wYXJlU3RyaW5nID0gKGEsIGIpID0+IHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuLyoqIFNvbWUgcGFyc2VycyAobGFuZ3VhZ2VzIHdpdGhvdXQgdHlwZXMpIGRvbid0IHByb3ZpZGUgSW1wb3J0S2luZCAqL1xuY29uc3QgREVBRlVMVF9JTVBPUlRfS0lORCA9ICd2YWx1ZSc7XG5jb25zdCBnZXROb3JtYWxpemVkVmFsdWUgPSAobm9kZSwgdG9Mb3dlckNhc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICByZXR1cm4gdG9Mb3dlckNhc2UgPyBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldFNvcnRlcihhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgbXVsdGlwbGllciA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlciA9PT0gJ2FzYycgPyAxIDogLTE7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplT3B0aW9ucy5vcmRlckltcG9ydEtpbmQ7XG4gIGNvbnN0IG11bHRpcGxpZXJJbXBvcnRLaW5kID0gb3JkZXJJbXBvcnRLaW5kICE9PSAnaWdub3JlJ1xuICAgICYmIChhbHBoYWJldGl6ZU9wdGlvbnMub3JkZXJJbXBvcnRLaW5kID09PSAnYXNjJyA/IDEgOiAtMSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGltcG9ydHNTb3J0ZXIobm9kZUEsIG5vZGVCKSB7XG4gICAgY29uc3QgaW1wb3J0QSA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQSwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgY29uc3QgaW1wb3J0QiA9IGdldE5vcm1hbGl6ZWRWYWx1ZShub2RlQiwgYWxwaGFiZXRpemVPcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgICBpZiAoIWluY2x1ZGVzKGltcG9ydEEsICcvJykgJiYgIWluY2x1ZGVzKGltcG9ydEIsICcvJykpIHtcbiAgICAgIHJlc3VsdCA9IGNvbXBhcmVTdHJpbmcoaW1wb3J0QSwgaW1wb3J0Qik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEEgPSBpbXBvcnRBLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBCID0gaW1wb3J0Qi5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgYSA9IEEubGVuZ3RoO1xuICAgICAgY29uc3QgYiA9IEIubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGEsIGIpOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyZVN0cmluZyhBW2ldLCBCW2ldKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgeyBicmVhazsgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdCAmJiBhICE9PSBiKSB7XG4gICAgICAgIHJlc3VsdCA9IGEgPCBiID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdCA9IHJlc3VsdCAqIG11bHRpcGxpZXI7XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBwYXRocyBhcmUgZXF1YWwgKHJlc3VsdCA9PT0gMCksIHNvcnQgdGhlbSBieSBpbXBvcnRLaW5kXG4gICAgaWYgKCFyZXN1bHQgJiYgbXVsdGlwbGllckltcG9ydEtpbmQpIHtcbiAgICAgIHJlc3VsdCA9IG11bHRpcGxpZXJJbXBvcnRLaW5kICogY29tcGFyZVN0cmluZyhcbiAgICAgICAgbm9kZUEubm9kZS5pbXBvcnRLaW5kIHx8IERFQUZVTFRfSU1QT1JUX0tJTkQsXG4gICAgICAgIG5vZGVCLm5vZGUuaW1wb3J0S2luZCB8fCBERUFGVUxUX0lNUE9SVF9LSU5ELFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBncm91cGVkQnlSYW5rcyA9IGdyb3VwQnkoaW1wb3J0ZWQsIChpdGVtKSA9PiBpdGVtLnJhbmspO1xuXG4gIGNvbnN0IHNvcnRlckZuID0gZ2V0U29ydGVyKGFscGhhYmV0aXplT3B0aW9ucyk7XG5cbiAgLy8gc29ydCBncm91cCBrZXlzIHNvIHRoYXQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb24gaW4gb3JkZXJcbiAgY29uc3QgZ3JvdXBSYW5rcyA9IE9iamVjdC5rZXlzKGdyb3VwZWRCeVJhbmtzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KTtcblxuICAvLyBzb3J0IGltcG9ydHMgbG9jYWxseSB3aXRoaW4gdGhlaXIgZ3JvdXBcbiAgZ3JvdXBSYW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cFJhbmspIHtcbiAgICBncm91cGVkQnlSYW5rc1tncm91cFJhbmtdLnNvcnQoc29ydGVyRm4pO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZ2xvYmFsbHkgdW5pcXVlIHJhbmsgdG8gZWFjaCBpbXBvcnRcbiAgbGV0IG5ld1JhbmsgPSAwO1xuICBjb25zdCBhbHBoYWJldGl6ZWRSYW5rcyA9IGdyb3VwUmFua3MucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGdyb3VwUmFuaykge1xuICAgIGdyb3VwZWRCeVJhbmtzW2dyb3VwUmFua10uZm9yRWFjaChmdW5jdGlvbiAoaW1wb3J0ZWRJdGVtKSB7XG4gICAgICBhY2NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF0gPSBwYXJzZUludChncm91cFJhbmssIDEwKSArIG5ld1Jhbms7XG4gICAgICBuZXdSYW5rICs9IDE7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIG11dGF0ZSB0aGUgb3JpZ2luYWwgZ3JvdXAtcmFuayB3aXRoIGFscGhhYmV0aXplZC1yYW5rXG4gIGltcG9ydGVkLmZvckVhY2goZnVuY3Rpb24gKGltcG9ydGVkSXRlbSkge1xuICAgIGltcG9ydGVkSXRlbS5yYW5rID0gYWxwaGFiZXRpemVkUmFua3NbYCR7aW1wb3J0ZWRJdGVtLnZhbHVlfXwke2ltcG9ydGVkSXRlbS5ub2RlLmltcG9ydEtpbmR9YF07XG4gIH0pO1xufVxuXG4vLyBERVRFQ1RJTkdcblxuZnVuY3Rpb24gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLCBwYXRoR3JvdXBzLCBwYXRoLCBtYXhQb3NpdGlvbikge1xuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhdGhHcm91cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgeyBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucywgZ3JvdXAsIHBvc2l0aW9uID0gMSB9ID0gcGF0aEdyb3Vwc1tpXTtcbiAgICBpZiAobWluaW1hdGNoKHBhdGgsIHBhdHRlcm4sIHBhdHRlcm5PcHRpb25zIHx8IHsgbm9jb21tZW50OiB0cnVlIH0pKSB7XG4gICAgICByZXR1cm4gcmFua3NbZ3JvdXBdICsgcG9zaXRpb24gLyBtYXhQb3NpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJhbmsoY29udGV4dCwgcmFua3MsIGltcG9ydEVudHJ5LCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGxldCBpbXBUeXBlO1xuICBsZXQgcmFuaztcbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgPT09ICdpbXBvcnQ6b2JqZWN0Jykge1xuICAgIGltcFR5cGUgPSAnb2JqZWN0JztcbiAgfSBlbHNlIGlmIChpbXBvcnRFbnRyeS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJyAmJiByYW5rcy5vbWl0dGVkVHlwZXMuaW5kZXhPZigndHlwZScpID09PSAtMSkge1xuICAgIGltcFR5cGUgPSAndHlwZSc7XG4gIH0gZWxzZSB7XG4gICAgaW1wVHlwZSA9IGltcG9ydFR5cGUoaW1wb3J0RW50cnkudmFsdWUsIGNvbnRleHQpO1xuICB9XG4gIGlmICghZXhjbHVkZWRJbXBvcnRUeXBlcy5oYXMoaW1wVHlwZSkpIHtcbiAgICByYW5rID0gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLmdyb3VwcywgcmFua3MucGF0aEdyb3VwcywgaW1wb3J0RW50cnkudmFsdWUsIHJhbmtzLm1heFBvc2l0aW9uKTtcbiAgfVxuICBpZiAodHlwZW9mIHJhbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmFuayA9IHJhbmtzLmdyb3Vwc1tpbXBUeXBlXTtcbiAgfVxuICBpZiAoaW1wb3J0RW50cnkudHlwZSAhPT0gJ2ltcG9ydCcgJiYgIWltcG9ydEVudHJ5LnR5cGUuc3RhcnRzV2l0aCgnaW1wb3J0OicpKSB7XG4gICAgcmFuayArPSAxMDA7XG4gIH1cblxuICByZXR1cm4gcmFuaztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJOb2RlKGNvbnRleHQsIGltcG9ydEVudHJ5LCByYW5rcywgaW1wb3J0ZWQsIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpIHtcbiAgY29uc3QgcmFuayA9IGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcyk7XG4gIGlmIChyYW5rICE9PSAtMSkge1xuICAgIGltcG9ydGVkLnB1c2goeyAuLi5pbXBvcnRFbnRyeSwgcmFuayB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlQmxvY2sobm9kZSkge1xuICBsZXQgbiA9IG5vZGU7XG4gIC8vIEhhbmRsZSBjYXNlcyBsaWtlIGBjb25zdCBiYXogPSByZXF1aXJlKCdmb28nKS5iYXIuYmF6YFxuICAvLyBhbmQgYGNvbnN0IGZvbyA9IHJlcXVpcmUoJ2ZvbycpKClgXG4gIHdoaWxlIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQub2JqZWN0ID09PSBuXG4gICAgfHwgbi5wYXJlbnQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBuLnBhcmVudC5jYWxsZWUgPT09IG5cbiAgKSB7XG4gICAgbiA9IG4ucGFyZW50O1xuICB9XG4gIGlmIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdG9yJ1xuICAgICYmIG4ucGFyZW50LnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbidcbiAgICAmJiBuLnBhcmVudC5wYXJlbnQucGFyZW50LnR5cGUgPT09ICdQcm9ncmFtJ1xuICApIHtcbiAgICByZXR1cm4gbi5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgfVxufVxuXG5jb25zdCB0eXBlcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdpbnRlcm5hbCcsICd1bmtub3duJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4JywgJ29iamVjdCcsICd0eXBlJ107XG5cbi8vIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdHlwZS1yYW5rIHBhaXJzLlxuLy8gRXhhbXBsZTogeyBpbmRleDogMCwgc2libGluZzogMSwgcGFyZW50OiAxLCBleHRlcm5hbDogMSwgYnVpbHRpbjogMiwgaW50ZXJuYWw6IDIgfVxuLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBpdCBjb250YWlucyBhIHR5cGUgdGhhdCBkb2VzIG5vdCBleGlzdCwgb3IgaGFzIGEgZHVwbGljYXRlXG5mdW5jdGlvbiBjb252ZXJ0R3JvdXBzVG9SYW5rcyhncm91cHMpIHtcbiAgY29uc3QgcmFua09iamVjdCA9IGdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgZ3JvdXAsIGluZGV4KSB7XG4gICAgW10uY29uY2F0KGdyb3VwKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cEl0ZW0pIHtcbiAgICAgIGlmICh0eXBlcy5pbmRleE9mKGdyb3VwSXRlbSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJ1bGU6IFVua25vd24gdHlwZSBcXGAke0pTT04uc3RyaW5naWZ5KGdyb3VwSXRlbSl9XFxgYCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzW2dyb3VwSXRlbV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBcXGAke2dyb3VwSXRlbX1cXGAgaXMgZHVwbGljYXRlZGApO1xuICAgICAgfVxuICAgICAgcmVzW2dyb3VwSXRlbV0gPSBpbmRleCAqIDI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pO1xuXG4gIGNvbnN0IG9taXR0ZWRUeXBlcyA9IHR5cGVzLmZpbHRlcihmdW5jdGlvbiAodHlwZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmFua09iamVjdFt0eXBlXSA9PT0gJ3VuZGVmaW5lZCc7XG4gIH0pO1xuXG4gIGNvbnN0IHJhbmtzID0gb21pdHRlZFR5cGVzLnJlZHVjZShmdW5jdGlvbiAocmVzLCB0eXBlKSB7XG4gICAgcmVzW3R5cGVdID0gZ3JvdXBzLmxlbmd0aCAqIDI7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwgcmFua09iamVjdCk7XG5cbiAgcmV0dXJuIHsgZ3JvdXBzOiByYW5rcywgb21pdHRlZFR5cGVzIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3MocGF0aEdyb3Vwcykge1xuICBjb25zdCBhZnRlciA9IHt9O1xuICBjb25zdCBiZWZvcmUgPSB7fTtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhdGhHcm91cHMubWFwKChwYXRoR3JvdXAsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBncm91cCwgcG9zaXRpb246IHBvc2l0aW9uU3RyaW5nIH0gPSBwYXRoR3JvdXA7XG4gICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdhZnRlcicpIHtcbiAgICAgIGlmICghYWZ0ZXJbZ3JvdXBdKSB7XG4gICAgICAgIGFmdGVyW2dyb3VwXSA9IDE7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbiA9IGFmdGVyW2dyb3VwXSsrO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAoIWJlZm9yZVtncm91cF0pIHtcbiAgICAgICAgYmVmb3JlW2dyb3VwXSA9IFtdO1xuICAgICAgfVxuICAgICAgYmVmb3JlW2dyb3VwXS5wdXNoKGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXRoR3JvdXAsIHBvc2l0aW9uIH07XG4gIH0pO1xuXG4gIGxldCBtYXhQb3NpdGlvbiA9IDE7XG5cbiAgT2JqZWN0LmtleXMoYmVmb3JlKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gYmVmb3JlW2dyb3VwXS5sZW5ndGg7XG4gICAgYmVmb3JlW2dyb3VwXS5mb3JFYWNoKChncm91cEluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgdHJhbnNmb3JtZWRbZ3JvdXBJbmRleF0ucG9zaXRpb24gPSAtMSAqIChncm91cExlbmd0aCAtIGluZGV4KTtcbiAgICB9KTtcbiAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KG1heFBvc2l0aW9uLCBncm91cExlbmd0aCk7XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKGFmdGVyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBncm91cE5leHRQb3NpdGlvbiA9IGFmdGVyW2tleV07XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBOZXh0UG9zaXRpb24gLSAxKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoR3JvdXBzOiB0cmFuc2Zvcm1lZCxcbiAgICBtYXhQb3NpdGlvbjogbWF4UG9zaXRpb24gPiAxMCA/IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoTWF0aC5sb2cxMChtYXhQb3NpdGlvbikpKSA6IDEwLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoXG4gICAgY29udGV4dC5nZXRTb3VyY2VDb2RlKCksIHByZXZSb290LCBjb21tZW50T25TYW1lTGluZUFzKHByZXZSb290KSk7XG5cbiAgbGV0IGVuZE9mTGluZSA9IHByZXZSb290LnJhbmdlWzFdO1xuICBpZiAodG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMCkge1xuICAgIGVuZE9mTGluZSA9IHRva2Vuc1RvRW5kT2ZMaW5lW3Rva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCAtIDFdLnJhbmdlWzFdO1xuICB9XG4gIHJldHVybiAoZml4ZXIpID0+IGZpeGVyLmluc2VydFRleHRBZnRlclJhbmdlKFtwcmV2Um9vdC5yYW5nZVswXSwgZW5kT2ZMaW5lXSwgJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpIHtcbiAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICBjb25zdCBwcmV2Um9vdCA9IGZpbmRSb290Tm9kZShwcmV2aW91c0ltcG9ydC5ub2RlKTtcbiAgY29uc3QgY3VyclJvb3QgPSBmaW5kUm9vdE5vZGUoY3VycmVudEltcG9ydC5ub2RlKTtcbiAgY29uc3QgcmFuZ2VUb1JlbW92ZSA9IFtcbiAgICBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHByZXZSb290KSxcbiAgICBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgY3VyclJvb3QpLFxuICBdO1xuICBpZiAoKC9eXFxzKiQvKS50ZXN0KHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcocmFuZ2VUb1JlbW92ZVswXSwgcmFuZ2VUb1JlbW92ZVsxXSkpKSB7XG4gICAgcmV0dXJuIChmaXhlcikgPT4gZml4ZXIucmVtb3ZlUmFuZ2UocmFuZ2VUb1JlbW92ZSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cywgZGlzdGluY3RHcm91cCkge1xuICBjb25zdCBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuID0gKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSA9PiB7XG4gICAgY29uc3QgbGluZXNCZXR3ZWVuSW1wb3J0cyA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmxpbmVzLnNsaWNlKFxuICAgICAgcHJldmlvdXNJbXBvcnQubm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICBjdXJyZW50SW1wb3J0Lm5vZGUubG9jLnN0YXJ0LmxpbmUgLSAxLFxuICAgICk7XG5cbiAgICByZXR1cm4gbGluZXNCZXR3ZWVuSW1wb3J0cy5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnRyaW0oKS5sZW5ndGgpLmxlbmd0aDtcbiAgfTtcbiAgY29uc3QgZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cCA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4gY3VycmVudEltcG9ydC5yYW5rIC0gMSA+PSBwcmV2aW91c0ltcG9ydC5yYW5rO1xuICBsZXQgcHJldmlvdXNJbXBvcnQgPSBpbXBvcnRlZFswXTtcblxuICBpbXBvcnRlZC5zbGljZSgxKS5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50SW1wb3J0KSB7XG4gICAgY29uc3QgZW1wdHlMaW5lc0JldHdlZW4gPSBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KTtcbiAgICBjb25zdCBpc1N0YXJ0T2ZEaXN0aW5jdEdyb3VwID0gZ2V0SXNTdGFydE9mRGlzdGluY3RHcm91cChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCk7XG5cbiAgICBpZiAobmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cydcbiAgICAgICAgfHwgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9PT0gJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycpIHtcbiAgICAgIGlmIChjdXJyZW50SW1wb3J0LnJhbmsgIT09IHByZXZpb3VzSW1wb3J0LnJhbmsgJiYgZW1wdHlMaW5lc0JldHdlZW4gPT09IDApIHtcbiAgICAgICAgaWYgKGRpc3RpbmN0R3JvdXAgfHwgIWRpc3RpbmN0R3JvdXAgJiYgaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgICAgICBmaXg6IGZpeE5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lc0JldHdlZW4gPiAwXG4gICAgICAgICYmIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICAgIGlmIChkaXN0aW5jdEdyb3VwICYmIGN1cnJlbnRJbXBvcnQucmFuayA9PT0gcHJldmlvdXNJbXBvcnQucmFuayB8fCAhZGlzdGluY3RHcm91cCAmJiAhaXNTdGFydE9mRGlzdGluY3RHcm91cCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgd2l0aGluIGltcG9ydCBncm91cCcsXG4gICAgICAgICAgICBmaXg6IHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgYmV0d2VlbiBpbXBvcnQgZ3JvdXBzJyxcbiAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNJbXBvcnQgPSBjdXJyZW50SW1wb3J0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucykge1xuICBjb25zdCBhbHBoYWJldGl6ZSA9IG9wdGlvbnMuYWxwaGFiZXRpemUgfHwge307XG4gIGNvbnN0IG9yZGVyID0gYWxwaGFiZXRpemUub3JkZXIgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IG9yZGVySW1wb3J0S2luZCA9IGFscGhhYmV0aXplLm9yZGVySW1wb3J0S2luZCB8fCAnaWdub3JlJztcbiAgY29uc3QgY2FzZUluc2Vuc2l0aXZlID0gYWxwaGFiZXRpemUuY2FzZUluc2Vuc2l0aXZlIHx8IGZhbHNlO1xuXG4gIHJldHVybiB7IG9yZGVyLCBvcmRlckltcG9ydEtpbmQsIGNhc2VJbnNlbnNpdGl2ZSB9O1xufVxuXG4vLyBUT0RPLCBzZW12ZXItbWFqb3I6IENoYW5nZSB0aGUgZGVmYXVsdCBvZiBcImRpc3RpbmN0R3JvdXBcIiBmcm9tIHRydWUgdG8gZmFsc2VcbmNvbnN0IGRlZmF1bHREaXN0aW5jdEdyb3VwID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgY2F0ZWdvcnk6ICdTdHlsZSBndWlkZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VuZm9yY2UgYSBjb252ZW50aW9uIGluIG1vZHVsZSBpbXBvcnQgb3JkZXIuJyxcbiAgICAgIHVybDogZG9jc1VybCgnb3JkZXInKSxcbiAgICB9LFxuXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzdGluY3RHcm91cDoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdERpc3RpbmN0R3JvdXAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IHR5cGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgZW51bTogWydhZnRlcicsICdiZWZvcmUnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3BhdHRlcm4nLCAnZ3JvdXAnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnbmV3bGluZXMtYmV0d2Vlbic6IHtcbiAgICAgICAgICAgIGVudW06IFtcbiAgICAgICAgICAgICAgJ2lnbm9yZScsXG4gICAgICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgICAgICAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJyxcbiAgICAgICAgICAgICAgJ25ldmVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbHBoYWJldGl6ZToge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcmRlckltcG9ydEtpbmQ6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ2lnbm9yZScsICdhc2MnLCAnZGVzYyddLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdpZ25vcmUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhcm5PblVuYXNzaWduZWRJbXBvcnRzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBpbXBvcnRPcmRlclJ1bGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9IG9wdGlvbnNbJ25ld2xpbmVzLWJldHdlZW4nXSB8fCAnaWdub3JlJztcbiAgICBjb25zdCBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQob3B0aW9ucy5wYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyB8fCBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnb2JqZWN0J10pO1xuICAgIGNvbnN0IGFscGhhYmV0aXplID0gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucyk7XG4gICAgY29uc3QgZGlzdGluY3RHcm91cCA9IG9wdGlvbnMuZGlzdGluY3RHcm91cCA9PSBudWxsID8gZGVmYXVsdERpc3RpbmN0R3JvdXAgOiAhIW9wdGlvbnMuZGlzdGluY3RHcm91cDtcbiAgICBsZXQgcmFua3M7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBwYXRoR3JvdXBzLCBtYXhQb3NpdGlvbiB9ID0gY29udmVydFBhdGhHcm91cHNGb3JSYW5rcyhvcHRpb25zLnBhdGhHcm91cHMgfHwgW10pO1xuICAgICAgY29uc3QgeyBncm91cHMsIG9taXR0ZWRUeXBlcyB9ID0gY29udmVydEdyb3Vwc1RvUmFua3Mob3B0aW9ucy5ncm91cHMgfHwgZGVmYXVsdEdyb3Vwcyk7XG4gICAgICByYW5rcyA9IHtcbiAgICAgICAgZ3JvdXBzLFxuICAgICAgICBvbWl0dGVkVHlwZXMsXG4gICAgICAgIHBhdGhHcm91cHMsXG4gICAgICAgIG1heFBvc2l0aW9uLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTWFsZm9ybWVkIGNvbmZpZ3VyYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb2dyYW0obm9kZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0TWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0QmxvY2tJbXBvcnRzKG5vZGUpIHtcbiAgICAgIGlmICghaW1wb3J0TWFwLmhhcyhub2RlKSkge1xuICAgICAgICBpbXBvcnRNYXAuc2V0KG5vZGUsIFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbXBvcnRNYXAuZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIHVuYXNzaWduZWQgaW1wb3J0cyB1bmxlc3Mgd2Fybk9uVW5hc3NpZ25lZEltcG9ydHMgaXMgc2V0XG4gICAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoIHx8IG9wdGlvbnMud2Fybk9uVW5hc3NpZ25lZEltcG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5zb3VyY2UudmFsdWU7XG4gICAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB0eXBlOiAnaW1wb3J0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByYW5rcyxcbiAgICAgICAgICAgIGdldEJsb2NrSW1wb3J0cyhub2RlLnBhcmVudCksXG4gICAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgLy8gc2tpcCBcImV4cG9ydCBpbXBvcnRcInNcbiAgICAgICAgaWYgKG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlUmVmZXJlbmNlLnR5cGUgPT09ICdUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlJykge1xuICAgICAgICAgIHZhbHVlID0gbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbi52YWx1ZTtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IHZhbHVlO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuZ2V0VGV4dChub2RlLm1vZHVsZVJlZmVyZW5jZSk7XG4gICAgICAgICAgdHlwZSA9ICdpbXBvcnQ6b2JqZWN0JztcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck5vZGUoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMobm9kZS5wYXJlbnQpLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBoYW5kbGVSZXF1aXJlcyhub2RlKSB7XG4gICAgICAgIGlmICghaXNTdGF0aWNSZXF1aXJlKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAncmVxdWlyZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMoYmxvY2spLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnOiBmdW5jdGlvbiByZXBvcnRBbmRSZXNldCgpIHtcbiAgICAgICAgaW1wb3J0TWFwLmZvckVhY2goKGltcG9ydGVkKSA9PiB7XG4gICAgICAgICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtYWtlTmV3bGluZXNCZXR3ZWVuUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkLCBuZXdsaW5lc0JldHdlZW5JbXBvcnRzLCBkaXN0aW5jdEdyb3VwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWxwaGFiZXRpemUub3JkZXIgIT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGltcG9ydE1hcC5jbGVhcigpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ== \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/lib/scc.js b/node_modules/eslint-plugin-import/lib/scc.js deleted file mode 100644 index 82eff7196d..0000000000 --- a/node_modules/eslint-plugin-import/lib/scc.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _scc = require('@rtsao/scc');var _scc2 = _interopRequireDefault(_scc); -var _hash = require('eslint-module-utils/hash'); -var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve); -var _builder = require('./exportMap/builder');var _builder2 = _interopRequireDefault(_builder); -var _childContext = require('./exportMap/childContext');var _childContext2 = _interopRequireDefault(_childContext);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);}}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}} - -var cache = new Map();var - -StronglyConnectedComponentsBuilder = function () {function StronglyConnectedComponentsBuilder() {_classCallCheck(this, StronglyConnectedComponentsBuilder);}_createClass(StronglyConnectedComponentsBuilder, null, [{ key: 'clearCache', value: function () {function clearCache() - { - cache = new Map(); - }return clearCache;}() }, { key: 'get', value: function () {function get( - - source, context) { - var path = (0, _resolve2['default'])(source, context); - if (path == null) {return null;} - return StronglyConnectedComponentsBuilder['for']((0, _childContext2['default'])(path, context)); - }return get;}() }, { key: 'for', value: function () {function _for( - - context) { - var cacheKey = context.cacheKey || (0, _hash.hashObject)(context).digest('hex'); - if (cache.has(cacheKey)) { - return cache.get(cacheKey); - } - var scc = StronglyConnectedComponentsBuilder.calculate(context); - cache.set(cacheKey, scc); - return scc; - }return _for;}() }, { key: 'calculate', value: function () {function calculate( - - context) { - var exportMap = _builder2['default']['for'](context); - var adjacencyList = this.exportMapToAdjacencyList(exportMap); - var calculatedScc = (0, _scc2['default'])(adjacencyList); - return StronglyConnectedComponentsBuilder.calculatedSccToPlainObject(calculatedScc); - }return calculate;}() - - /** @returns {Map>} for each dep, what are its direct deps */ }, { key: 'exportMapToAdjacencyList', value: function () {function exportMapToAdjacencyList( - initialExportMap) { - var adjacencyList = new Map(); - // BFS - function visitNode(exportMap) { - if (!exportMap) { - return; - } - exportMap.imports.forEach(function (v, importedPath) { - var from = exportMap.path; - var to = importedPath; - - // Ignore type-only imports, because we care only about SCCs of value imports - var toTraverse = [].concat(_toConsumableArray(v.declarations)).filter(function (_ref) {var isOnlyImportingTypes = _ref.isOnlyImportingTypes;return !isOnlyImportingTypes;}); - if (toTraverse.length === 0) {return;} - - if (!adjacencyList.has(from)) { - adjacencyList.set(from, new Set()); - } - - if (adjacencyList.get(from).has(to)) { - return; // prevent endless loop - } - adjacencyList.get(from).add(to); - visitNode(v.getter()); - }); - } - visitNode(initialExportMap); - // Fill gaps - adjacencyList.forEach(function (values) { - values.forEach(function (value) { - if (!adjacencyList.has(value)) { - adjacencyList.set(value, new Set()); - } - }); - }); - return adjacencyList; - }return exportMapToAdjacencyList;}() - - /** @returns {Record} for each key, its SCC's index */ }, { key: 'calculatedSccToPlainObject', value: function () {function calculatedSccToPlainObject( - sccs) { - var obj = {}; - sccs.forEach(function (scc, index) { - scc.forEach(function (node) { - obj[node] = index; - }); - }); - return obj; - }return calculatedSccToPlainObject;}() }]);return StronglyConnectedComponentsBuilder;}();exports['default'] = StronglyConnectedComponentsBuilder; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2MuanMiXSwibmFtZXMiOlsiY2FjaGUiLCJNYXAiLCJTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyIiwic291cmNlIiwiY29udGV4dCIsInBhdGgiLCJjYWNoZUtleSIsImRpZ2VzdCIsImhhcyIsImdldCIsInNjYyIsImNhbGN1bGF0ZSIsInNldCIsImV4cG9ydE1hcCIsIkV4cG9ydE1hcEJ1aWxkZXIiLCJhZGphY2VuY3lMaXN0IiwiZXhwb3J0TWFwVG9BZGphY2VuY3lMaXN0IiwiY2FsY3VsYXRlZFNjYyIsImNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0IiwiaW5pdGlhbEV4cG9ydE1hcCIsInZpc2l0Tm9kZSIsImltcG9ydHMiLCJmb3JFYWNoIiwidiIsImltcG9ydGVkUGF0aCIsImZyb20iLCJ0byIsInRvVHJhdmVyc2UiLCJkZWNsYXJhdGlvbnMiLCJmaWx0ZXIiLCJpc09ubHlJbXBvcnRpbmdUeXBlcyIsImxlbmd0aCIsIlNldCIsImFkZCIsImdldHRlciIsInZhbHVlcyIsInZhbHVlIiwic2NjcyIsIm9iaiIsImluZGV4Iiwibm9kZSJdLCJtYXBwaW5ncyI6ImduQkFBQSxpQztBQUNBO0FBQ0Esc0Q7QUFDQSw4QztBQUNBLHdEOztBQUVBLElBQUlBLFFBQVEsSUFBSUMsR0FBSixFQUFaLEM7O0FBRXFCQyxrQztBQUNDO0FBQ2xCRixnQkFBUSxJQUFJQyxHQUFKLEVBQVI7QUFDRCxPOztBQUVVRSxZLEVBQVFDLE8sRUFBUztBQUMxQixZQUFNQyxPQUFPLDBCQUFRRixNQUFSLEVBQWdCQyxPQUFoQixDQUFiO0FBQ0EsWUFBSUMsUUFBUSxJQUFaLEVBQWtCLENBQUUsT0FBTyxJQUFQLENBQWM7QUFDbEMsZUFBT0gsMENBQXVDLCtCQUFhRyxJQUFiLEVBQW1CRCxPQUFuQixDQUF2QyxDQUFQO0FBQ0QsTzs7QUFFVUEsYSxFQUFTO0FBQ2xCLFlBQU1FLFdBQVdGLFFBQVFFLFFBQVIsSUFBb0Isc0JBQVdGLE9BQVgsRUFBb0JHLE1BQXBCLENBQTJCLEtBQTNCLENBQXJDO0FBQ0EsWUFBSVAsTUFBTVEsR0FBTixDQUFVRixRQUFWLENBQUosRUFBeUI7QUFDdkIsaUJBQU9OLE1BQU1TLEdBQU4sQ0FBVUgsUUFBVixDQUFQO0FBQ0Q7QUFDRCxZQUFNSSxNQUFNUixtQ0FBbUNTLFNBQW5DLENBQTZDUCxPQUE3QyxDQUFaO0FBQ0FKLGNBQU1ZLEdBQU4sQ0FBVU4sUUFBVixFQUFvQkksR0FBcEI7QUFDQSxlQUFPQSxHQUFQO0FBQ0QsTzs7QUFFZ0JOLGEsRUFBUztBQUN4QixZQUFNUyxZQUFZQyw0QkFBcUJWLE9BQXJCLENBQWxCO0FBQ0EsWUFBTVcsZ0JBQWdCLEtBQUtDLHdCQUFMLENBQThCSCxTQUE5QixDQUF0QjtBQUNBLFlBQU1JLGdCQUFnQixzQkFBYUYsYUFBYixDQUF0QjtBQUNBLGVBQU9iLG1DQUFtQ2dCLDBCQUFuQyxDQUE4REQsYUFBOUQsQ0FBUDtBQUNELE87O0FBRUQscUY7QUFDZ0NFLHNCLEVBQWtCO0FBQ2hELFlBQU1KLGdCQUFnQixJQUFJZCxHQUFKLEVBQXRCO0FBQ0E7QUFDQSxpQkFBU21CLFNBQVQsQ0FBbUJQLFNBQW5CLEVBQThCO0FBQzVCLGNBQUksQ0FBQ0EsU0FBTCxFQUFnQjtBQUNkO0FBQ0Q7QUFDREEsb0JBQVVRLE9BQVYsQ0FBa0JDLE9BQWxCLENBQTBCLFVBQUNDLENBQUQsRUFBSUMsWUFBSixFQUFxQjtBQUM3QyxnQkFBTUMsT0FBT1osVUFBVVIsSUFBdkI7QUFDQSxnQkFBTXFCLEtBQUtGLFlBQVg7O0FBRUE7QUFDQSxnQkFBTUcsYUFBYSw2QkFBSUosRUFBRUssWUFBTixHQUFvQkMsTUFBcEIsQ0FBMkIscUJBQUdDLG9CQUFILFFBQUdBLG9CQUFILFFBQThCLENBQUNBLG9CQUEvQixFQUEzQixDQUFuQjtBQUNBLGdCQUFJSCxXQUFXSSxNQUFYLEtBQXNCLENBQTFCLEVBQTZCLENBQUUsT0FBUzs7QUFFeEMsZ0JBQUksQ0FBQ2hCLGNBQWNQLEdBQWQsQ0FBa0JpQixJQUFsQixDQUFMLEVBQThCO0FBQzVCViw0QkFBY0gsR0FBZCxDQUFrQmEsSUFBbEIsRUFBd0IsSUFBSU8sR0FBSixFQUF4QjtBQUNEOztBQUVELGdCQUFJakIsY0FBY04sR0FBZCxDQUFrQmdCLElBQWxCLEVBQXdCakIsR0FBeEIsQ0FBNEJrQixFQUE1QixDQUFKLEVBQXFDO0FBQ25DLHFCQURtQyxDQUMzQjtBQUNUO0FBQ0RYLDBCQUFjTixHQUFkLENBQWtCZ0IsSUFBbEIsRUFBd0JRLEdBQXhCLENBQTRCUCxFQUE1QjtBQUNBTixzQkFBVUcsRUFBRVcsTUFBRixFQUFWO0FBQ0QsV0FqQkQ7QUFrQkQ7QUFDRGQsa0JBQVVELGdCQUFWO0FBQ0E7QUFDQUosc0JBQWNPLE9BQWQsQ0FBc0IsVUFBQ2EsTUFBRCxFQUFZO0FBQ2hDQSxpQkFBT2IsT0FBUCxDQUFlLFVBQUNjLEtBQUQsRUFBVztBQUN4QixnQkFBSSxDQUFDckIsY0FBY1AsR0FBZCxDQUFrQjRCLEtBQWxCLENBQUwsRUFBK0I7QUFDN0JyQiw0QkFBY0gsR0FBZCxDQUFrQndCLEtBQWxCLEVBQXlCLElBQUlKLEdBQUosRUFBekI7QUFDRDtBQUNGLFdBSkQ7QUFLRCxTQU5EO0FBT0EsZUFBT2pCLGFBQVA7QUFDRCxPOztBQUVELDBFO0FBQ2tDc0IsVSxFQUFNO0FBQ3RDLFlBQU1DLE1BQU0sRUFBWjtBQUNBRCxhQUFLZixPQUFMLENBQWEsVUFBQ1osR0FBRCxFQUFNNkIsS0FBTixFQUFnQjtBQUMzQjdCLGNBQUlZLE9BQUosQ0FBWSxVQUFDa0IsSUFBRCxFQUFVO0FBQ3BCRixnQkFBSUUsSUFBSixJQUFZRCxLQUFaO0FBQ0QsV0FGRDtBQUdELFNBSkQ7QUFLQSxlQUFPRCxHQUFQO0FBQ0QsTyw2R0E1RWtCcEMsa0MiLCJmaWxlIjoic2NjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhbGN1bGF0ZVNjYyBmcm9tICdAcnRzYW8vc2NjJztcbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2hhc2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBFeHBvcnRNYXBCdWlsZGVyIGZyb20gJy4vZXhwb3J0TWFwL2J1aWxkZXInO1xuaW1wb3J0IGNoaWxkQ29udGV4dCBmcm9tICcuL2V4cG9ydE1hcC9jaGlsZENvbnRleHQnO1xuXG5sZXQgY2FjaGUgPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIge1xuICBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoc291cmNlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KTtcbiAgICBpZiAocGF0aCA9PSBudWxsKSB7IHJldHVybiBudWxsOyB9XG4gICAgcmV0dXJuIFN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c0J1aWxkZXIuZm9yKGNoaWxkQ29udGV4dChwYXRoLCBjb250ZXh0KSk7XG4gIH1cblxuICBzdGF0aWMgZm9yKGNvbnRleHQpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGNvbnRleHQuY2FjaGVLZXkgfHwgaGFzaE9iamVjdChjb250ZXh0KS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmIChjYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG4gICAgY29uc3Qgc2NjID0gU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzQnVpbGRlci5jYWxjdWxhdGUoY29udGV4dCk7XG4gICAgY2FjaGUuc2V0KGNhY2hlS2V5LCBzY2MpO1xuICAgIHJldHVybiBzY2M7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBleHBvcnRNYXAgPSBFeHBvcnRNYXBCdWlsZGVyLmZvcihjb250ZXh0KTtcbiAgICBjb25zdCBhZGphY2VuY3lMaXN0ID0gdGhpcy5leHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoZXhwb3J0TWFwKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkU2NjID0gY2FsY3VsYXRlU2NjKGFkamFjZW5jeUxpc3QpO1xuICAgIHJldHVybiBTdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHNCdWlsZGVyLmNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KGNhbGN1bGF0ZWRTY2MpO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59IGZvciBlYWNoIGRlcCwgd2hhdCBhcmUgaXRzIGRpcmVjdCBkZXBzICovXG4gIHN0YXRpYyBleHBvcnRNYXBUb0FkamFjZW5jeUxpc3QoaW5pdGlhbEV4cG9ydE1hcCkge1xuICAgIGNvbnN0IGFkamFjZW5jeUxpc3QgPSBuZXcgTWFwKCk7XG4gICAgLy8gQkZTXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlKGV4cG9ydE1hcCkge1xuICAgICAgaWYgKCFleHBvcnRNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXhwb3J0TWFwLmltcG9ydHMuZm9yRWFjaCgodiwgaW1wb3J0ZWRQYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZyb20gPSBleHBvcnRNYXAucGF0aDtcbiAgICAgICAgY29uc3QgdG8gPSBpbXBvcnRlZFBhdGg7XG5cbiAgICAgICAgLy8gSWdub3JlIHR5cGUtb25seSBpbXBvcnRzLCBiZWNhdXNlIHdlIGNhcmUgb25seSBhYm91dCBTQ0NzIG9mIHZhbHVlIGltcG9ydHNcbiAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi52LmRlY2xhcmF0aW9uc10uZmlsdGVyKCh7IGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+ICFpc09ubHlJbXBvcnRpbmdUeXBlcyk7XG4gICAgICAgIGlmICh0b1RyYXZlcnNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKGZyb20pKSB7XG4gICAgICAgICAgYWRqYWNlbmN5TGlzdC5zZXQoZnJvbSwgbmV3IFNldCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGphY2VuY3lMaXN0LmdldChmcm9tKS5oYXModG8pKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGVuZGxlc3MgbG9vcFxuICAgICAgICB9XG4gICAgICAgIGFkamFjZW5jeUxpc3QuZ2V0KGZyb20pLmFkZCh0byk7XG4gICAgICAgIHZpc2l0Tm9kZSh2LmdldHRlcigpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdE5vZGUoaW5pdGlhbEV4cG9ydE1hcCk7XG4gICAgLy8gRmlsbCBnYXBzXG4gICAgYWRqYWNlbmN5TGlzdC5mb3JFYWNoKCh2YWx1ZXMpID0+IHtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIWFkamFjZW5jeUxpc3QuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGFkamFjZW5jeUxpc3Quc2V0KHZhbHVlLCBuZXcgU2V0KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWRqYWNlbmN5TGlzdDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgbnVtYmVyPn0gZm9yIGVhY2gga2V5LCBpdHMgU0NDJ3MgaW5kZXggKi9cbiAgc3RhdGljIGNhbGN1bGF0ZWRTY2NUb1BsYWluT2JqZWN0KHNjY3MpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBzY2NzLmZvckVhY2goKHNjYywgaW5kZXgpID0+IHtcbiAgICAgIHNjYy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIG9ialtub2RlXSA9IGluZGV4O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/node_modules/eslint-plugin-import/package.json b/node_modules/eslint-plugin-import/package.json index be150064d6..5c0af48543 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.30.0", + "version": "2.29.1", "description": "Import with sanity.", "engines": { "node": ">=4" @@ -11,7 +11,6 @@ }, "files": [ "*.md", - "!{CONTRIBUTING,RELEASE}.md", "LICENSE", "docs", "lib", @@ -31,9 +30,6 @@ "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", - "test-examples": "npm run build && npm run test-example:legacy && npm run test-example:flat", - "test-example:legacy": "cd examples/legacy && npm install && npm run lint", - "test-example:flat": "cd examples/flat && npm install && npm run lint", "prepublishOnly": "safe-publish-latest && npm run build", "prepublish": "not-in-publish || npm run prepublishOnly", "preupdate:eslint-docs": "npm run build", @@ -86,15 +82,13 @@ "eslint-plugin-eslint-plugin": "^2.3.0", "eslint-plugin-import": "2.x", "eslint-plugin-json": "^2.1.2", - "find-babel-config": "=1.2.0", "fs-copy-file-sync": "^1.1.1", "glob": "^7.2.3", "in-publish": "^2.0.1", "jackspeak": "=2.1.1", - "jsonc-parser": "=3.2.0", "linklocal": "^2.8.2", "lodash.isarray": "^4.0.0", - "markdownlint-cli": "~0.35", + "markdownlint-cli": "^0.38.0", "mocha": "^3.5.3", "npm-which": "^3.0.1", "nyc": "^11.9.0", @@ -109,22 +103,21 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" }, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" } diff --git a/package-lock.json b/package-lock.json index 0f079b13d9..141269a745 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "~2.30.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", @@ -867,12 +867,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, "node_modules/@schemastore/package": { "version": "0.0.10", "license": "MIT" @@ -2836,27 +2830,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, diff --git a/package.json b/package.json index 95b53f21a7..811a86c780 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "~2.30.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-no-async-foreach": "^0.1.1", "micromatch": "4.0.8", "nock": "^13.5.5", From e0a151e64e041db2626a774166ee4f18cfaa921e Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 23 Sep 2024 22:34:32 +0100 Subject: [PATCH 18/23] Fix inconsistency in autobuild error tracking --- lib/codeql.js | 5 +---- lib/codeql.js.map | 2 +- src/codeql.ts | 6 +----- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/codeql.js b/lib/codeql.js index a9b56af836..cb6a05da69 100644 --- a/lib/codeql.js +++ b/lib/codeql.js @@ -359,10 +359,7 @@ async function getCodeQLForCmd(cmd, checkVersion) { const prefix = "We were unable to automatically build your code. " + "Please change the build mode for this language to manual and specify build steps " + `for your project. See ${doc_url_1.DocUrl.AUTOMATIC_BUILD_FAILED} for more information.`; - const ErrorConstructor = e instanceof util.ConfigurationError - ? util.ConfigurationError - : Error; - throw new ErrorConstructor(`${prefix} ${(0, util_1.getErrorMessage)(e)}`); + throw new util.ConfigurationError(`${prefix} ${(0, util_1.getErrorMessage)(e)}`); } else { throw e; diff --git a/lib/codeql.js.map b/lib/codeql.js.map index 62ba046398..57da470212 100644 --- a/lib/codeql.js.map +++ b/lib/codeql.js.map @@ -1 +1 @@ -{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/codeql.ts b/src/codeql.ts index d40755bafd..c37db259cd 100644 --- a/src/codeql.ts +++ b/src/codeql.ts @@ -703,11 +703,7 @@ export async function getCodeQLForCmd( "We were unable to automatically build your code. " + "Please change the build mode for this language to manual and specify build steps " + `for your project. See ${DocUrl.AUTOMATIC_BUILD_FAILED} for more information.`; - const ErrorConstructor = - e instanceof util.ConfigurationError - ? util.ConfigurationError - : Error; - throw new ErrorConstructor(`${prefix} ${getErrorMessage(e)}`); + throw new util.ConfigurationError(`${prefix} ${getErrorMessage(e)}`); } else { throw e; } From 00b1146c45021691af6c1c3c45e04d65d3c3f1e8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:05:10 +0000 Subject: [PATCH 19/23] Update changelog for v3.26.9 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46618ff28a..a8b2782c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th Note that the only difference between `v2` and `v3` of the CodeQL Action is the node version they support, with `v3` running on node 20 while we continue to release `v2` to support running on node 16. For example `3.22.11` was the first `v3` release and is functionally identical to `2.22.11`. This approach ensures an easy way to track exactly which features are included in different versions, indicated by the minor and patch version numbers. -## [UNRELEASED] +## 3.26.9 - 24 Sep 2024 No user facing changes. From 6ea954642e58358c6d65b7358e58415be82710b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:26:12 +0000 Subject: [PATCH 20/23] Revert "Update version and changelog for v2.26.8" This reverts commit db0e7bc3d0322e7cb27a2d73c70f1be7829152b1. --- CHANGELOG.md | 87 +++++++++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6880103b85..5e550f412a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,195 +4,198 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th Note that the only difference between `v2` and `v3` of the CodeQL Action is the node version they support, with `v3` running on node 20 while we continue to release `v2` to support running on node 16. For example `3.22.11` was the first `v3` release and is functionally identical to `2.22.11`. This approach ensures an easy way to track exactly which features are included in different versions, indicated by the minor and patch version numbers. -## 2.26.8 - 19 Sep 2024 +## 3.26.8 - 19 Sep 2024 - Update default CodeQL bundle version to 2.19.0. [#2483](https://github.com/github/codeql-action/pull/2483) -## 2.26.7 - 13 Sep 2024 +## 3.26.7 - 13 Sep 2024 - Update default CodeQL bundle version to 2.18.4. [#2471](https://github.com/github/codeql-action/pull/2471) -## 2.26.6 - 29 Aug 2024 +## 3.26.6 - 29 Aug 2024 - Update default CodeQL bundle version to 2.18.3. [#2449](https://github.com/github/codeql-action/pull/2449) -## 2.26.5 - 23 Aug 2024 +## 3.26.5 - 23 Aug 2024 - Fix an issue where the `csrutil` system call used for telemetry would fail on MacOS ARM machines with System Integrity Protection disabled. [#2441](https://github.com/github/codeql-action/pull/2441) -## 2.26.4 - 21 Aug 2024 +## 3.26.4 - 21 Aug 2024 - _Deprecation:_ The `add-snippets` input on the `analyze` Action is deprecated and will be removed in the first release in August 2025. [#2436](https://github.com/github/codeql-action/pull/2436) - Fix an issue where the disk usage system call used for telemetry would fail on MacOS ARM machines with System Integrity Protection disabled, and then surface a warning. The system call is now disabled for these machines. [#2434](https://github.com/github/codeql-action/pull/2434) -## 2.26.3 - 19 Aug 2024 +## 3.26.3 - 19 Aug 2024 - Fix an issue where the CodeQL Action could not write diagnostic messages on Windows. This issue did not impact analysis quality. [#2430](https://github.com/github/codeql-action/pull/2430) -## 2.26.2 - 14 Aug 2024 +## 3.26.2 - 14 Aug 2024 - Update default CodeQL bundle version to 2.18.2. [#2417](https://github.com/github/codeql-action/pull/2417) -## 2.26.1 - 13 Aug 2024 +## 3.26.1 - 13 Aug 2024 No user facing changes. -## 2.26.0 - 06 Aug 2024 +## 3.26.0 - 06 Aug 2024 - _Deprecation:_ Swift analysis on Ubuntu runner images is no longer supported. Please migrate to a macOS runner if this affects you. [#2403](https://github.com/github/codeql-action/pull/2403) - Bump the minimum CodeQL bundle version to 2.13.5. [#2408](https://github.com/github/codeql-action/pull/2408) -## 2.25.15 - 26 Jul 2024 +## 3.25.15 - 26 Jul 2024 - Update default CodeQL bundle version to 2.18.1. [#2385](https://github.com/github/codeql-action/pull/2385) -## 2.25.14 - 25 Jul 2024 +## 3.25.14 - 25 Jul 2024 - Experimental: add a new `start-proxy` action which starts the same HTTP proxy as used by [`github/dependabot-action`](https://github.com/github/dependabot-action). Do not use this in production as it is part of an internal experiment and subject to change at any time. [#2376](https://github.com/github/codeql-action/pull/2376) -## 2.25.13 - 19 Jul 2024 +## 3.25.13 - 19 Jul 2024 - Add `codeql-version` to outputs. [#2368](https://github.com/github/codeql-action/pull/2368) - Add a deprecation warning for customers using CodeQL version 2.13.4 and earlier. These versions of CodeQL were discontinued on 9 July 2024 alongside GitHub Enterprise Server 3.9, and will be unsupported by CodeQL Action versions 3.26.0 and later and versions 2.26.0 and later. [#2375](https://github.com/github/codeql-action/pull/2375) - If you are using one of these versions, please update to CodeQL CLI version 2.13.5 or later. For instance, if you have specified a custom version of the CLI using the 'tools' input to the 'init' Action, you can remove this input to use the default version. - Alternatively, if you want to continue using a version of the CodeQL CLI between 2.12.6 and 2.13.4, you can replace `github/codeql-action/*@v3` by `github/codeql-action/*@v3.25.13` and `github/codeql-action/*@v2` by `github/codeql-action/*@v2.25.13` in your code scanning workflow to ensure you continue using this version of the CodeQL Action. -## 2.25.12 - 12 Jul 2024 +## 3.25.12 - 12 Jul 2024 - Improve the reliability and performance of analyzing code when analyzing a compiled language with the `autobuild` [build mode](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes) on GitHub Enterprise Server. This feature is already available to GitHub.com users. [#2353](https://github.com/github/codeql-action/pull/2353) - Update default CodeQL bundle version to 2.18.0. [#2364](https://github.com/github/codeql-action/pull/2364) -## 2.25.11 - 28 Jun 2024 +## 3.25.11 - 28 Jun 2024 - Avoid failing the workflow run if there is an error while uploading debug artifacts. [#2349](https://github.com/github/codeql-action/pull/2349) - Update default CodeQL bundle version to 2.17.6. [#2352](https://github.com/github/codeql-action/pull/2352) -## 2.25.10 - 13 Jun 2024 +## 3.25.10 - 13 Jun 2024 - Update default CodeQL bundle version to 2.17.5. [#2327](https://github.com/github/codeql-action/pull/2327) -## 2.25.9 - 12 Jun 2024 +## 3.25.9 - 12 Jun 2024 - Avoid failing database creation if the database folder already exists and contains some unexpected files. Requires CodeQL 2.18.0 or higher. [#2330](https://github.com/github/codeql-action/pull/2330) - The init Action will attempt to clean up the database cluster directory before creating a new database and at the end of the job. This will help to avoid issues where the database cluster directory is left in an inconsistent state. [#2332](https://github.com/github/codeql-action/pull/2332) -## 2.25.8 - 04 Jun 2024 +## 3.25.8 - 04 Jun 2024 - Update default CodeQL bundle version to 2.17.4. [#2321](https://github.com/github/codeql-action/pull/2321) -## 2.25.7 - 31 May 2024 +## 3.25.7 - 31 May 2024 - We are rolling out a feature in May/June 2024 that will reduce the Actions cache usage of the Action by keeping only the newest TRAP cache for each language. [#2306](https://github.com/github/codeql-action/pull/2306) -## 2.25.6 - 20 May 2024 +## 3.25.6 - 20 May 2024 - Update default CodeQL bundle version to 2.17.3. [#2295](https://github.com/github/codeql-action/pull/2295) -## 2.25.5 - 13 May 2024 +## 3.25.5 - 13 May 2024 - Add a compatibility matrix of supported CodeQL Action, CodeQL CLI, and GitHub Enterprise Server versions to the [README.md](README.md). [#2273](https://github.com/github/codeql-action/pull/2273) - Avoid printing out a warning for a missing `on.push` trigger when the CodeQL Action is triggered via a `workflow_call` event. [#2274](https://github.com/github/codeql-action/pull/2274) - The `tools: latest` input to the `init` Action has been renamed to `tools: linked`. This option specifies that the Action should use the tools shipped at the same time as the Action. The old name will continue to work for backwards compatibility, but we recommend that new workflows use the new name. [#2281](https://github.com/github/codeql-action/pull/2281) -## 2.25.4 - 08 May 2024 +## 3.25.4 - 08 May 2024 - Update default CodeQL bundle version to 2.17.2. [#2270](https://github.com/github/codeql-action/pull/2270) -## 2.25.3 - 25 Apr 2024 +## 3.25.3 - 25 Apr 2024 - Update default CodeQL bundle version to 2.17.1. [#2247](https://github.com/github/codeql-action/pull/2247) - Workflows running on `macos-latest` using CodeQL CLI versions before v2.15.1 will need to either upgrade their CLI version to v2.15.1 or newer, or change the platform to an Intel MacOS runner, such as `macos-12`. ARM machines with SIP disabled, including the newest `macos-latest` image, are unsupported for CLI versions before 2.15.1. [#2261](https://github.com/github/codeql-action/pull/2261) -## 2.25.2 - 22 Apr 2024 +## 3.25.2 - 22 Apr 2024 No user facing changes. -## 2.25.1 - 17 Apr 2024 +## 3.25.1 - 17 Apr 2024 - We are rolling out a feature in April/May 2024 that improves the reliability and performance of analyzing code when analyzing a compiled language with the `autobuild` [build mode](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes). [#2235](https://github.com/github/codeql-action/pull/2235) - Fix a bug where the `init` Action would fail if `--overwrite` was specified in `CODEQL_ACTION_EXTRA_OPTIONS`. [#2245](https://github.com/github/codeql-action/pull/2245) -## 2.25.0 - 15 Apr 2024 +## 3.25.0 - 15 Apr 2024 - The deprecated feature for extracting dependencies for a Python analysis has been removed. [#2224](https://github.com/github/codeql-action/pull/2224) + As a result, the following inputs and environment variables are now ignored: + - The `setup-python-dependencies` input to the `init` Action - The `CODEQL_ACTION_DISABLE_PYTHON_DEPENDENCY_INSTALLATION` environment variable + We recommend removing any references to these from your workflows. For more information, see the release notes for CodeQL Action v3.23.0 and v2.23.0. - Automatically overwrite an existing database if found on the filesystem. [#2229](https://github.com/github/codeql-action/pull/2229) - Bump the minimum CodeQL bundle version to 2.12.6. [#2232](https://github.com/github/codeql-action/pull/2232) - A more relevant log message and a diagnostic are now emitted when the `file` program is not installed on a Linux runner, but is required for Go tracing to succeed. [#2234](https://github.com/github/codeql-action/pull/2234) -## 2.24.10 - 05 Apr 2024 +## 3.24.10 - 05 Apr 2024 - Update default CodeQL bundle version to 2.17.0. [#2219](https://github.com/github/codeql-action/pull/2219) - Add a deprecation warning for customers using CodeQL version 2.12.5 and earlier. These versions of CodeQL were discontinued on 26 March 2024 alongside GitHub Enterprise Server 3.8, and will be unsupported by CodeQL Action versions 3.25.0 and later and versions 2.25.0 and later. [#2220](https://github.com/github/codeql-action/pull/2220) - If you are using one of these versions, please update to CodeQL CLI version 2.12.6 or later. For instance, if you have specified a custom version of the CLI using the 'tools' input to the 'init' Action, you can remove this input to use the default version. - Alternatively, if you want to continue using a version of the CodeQL CLI between 2.11.6 and 2.12.5, you can replace `github/codeql-action/*@v3` by `github/codeql-action/*@v3.24.10` and `github/codeql-action/*@v2` by `github/codeql-action/*@v2.24.10` in your code scanning workflow to ensure you continue using this version of the CodeQL Action. -## 2.24.9 - 22 Mar 2024 +## 3.24.9 - 22 Mar 2024 - Update default CodeQL bundle version to 2.16.5. [#2203](https://github.com/github/codeql-action/pull/2203) -## 2.24.8 - 18 Mar 2024 +## 3.24.8 - 18 Mar 2024 - Improve the ease of debugging extraction issues by increasing the verbosity of the extractor logs when running in debug mode. [#2195](https://github.com/github/codeql-action/pull/2195) -## 2.24.7 - 12 Mar 2024 +## 3.24.7 - 12 Mar 2024 - Update default CodeQL bundle version to 2.16.4. [#2185](https://github.com/github/codeql-action/pull/2185) -## 2.24.6 - 29 Feb 2024 +## 3.24.6 - 29 Feb 2024 No user facing changes. -## 2.24.5 - 23 Feb 2024 +## 3.24.5 - 23 Feb 2024 - Update default CodeQL bundle version to 2.16.3. [#2156](https://github.com/github/codeql-action/pull/2156) -## 2.24.4 - 21 Feb 2024 +## 3.24.4 - 21 Feb 2024 - Fix an issue where an existing, but empty, `/sys/fs/cgroup/cpuset.cpus` file always resulted in a single-threaded run. [#2151](https://github.com/github/codeql-action/pull/2151) -## 2.24.3 - 15 Feb 2024 +## 3.24.3 - 15 Feb 2024 - Fix an issue where the CodeQL Action would fail to load a configuration specified by the `config` input to the `init` Action. [#2147](https://github.com/github/codeql-action/pull/2147) -## 2.24.2 - 15 Feb 2024 +## 3.24.2 - 15 Feb 2024 - Enable improved multi-threaded performance on larger runners for GitHub Enterprise Server users. This feature is already available to GitHub.com users. [#2141](https://github.com/github/codeql-action/pull/2141) -## 2.24.1 - 13 Feb 2024 +## 3.24.1 - 13 Feb 2024 - Update default CodeQL bundle version to 2.16.2. [#2124](https://github.com/github/codeql-action/pull/2124) - The CodeQL action no longer fails if it can't write to the telemetry api endpoint. [#2121](https://github.com/github/codeql-action/pull/2121) -## 2.24.0 - 02 Feb 2024 +## 3.24.0 - 02 Feb 2024 - CodeQL Python analysis will no longer install dependencies on GitHub Enterprise Server, as is already the case for GitHub.com. See [release notes for 3.23.0](#3230---08-jan-2024) for more details. [#2106](https://github.com/github/codeql-action/pull/2106) -## 2.23.2 - 26 Jan 2024 +## 3.23.2 - 26 Jan 2024 - On Linux, the maximum possible value for the `--threads` option now respects the CPU count as specified in `cgroup` files to more accurately reflect the number of available cores when running in containers. [#2083](https://github.com/github/codeql-action/pull/2083) - Update default CodeQL bundle version to 2.16.1. [#2096](https://github.com/github/codeql-action/pull/2096) -## 2.23.1 - 17 Jan 2024 +## 3.23.1 - 17 Jan 2024 - Update default CodeQL bundle version to 2.16.0. [#2073](https://github.com/github/codeql-action/pull/2073) - Change the retention period for uploaded debug artifacts to 7 days. Previously, this was whatever the repository default was. [#2079](https://github.com/github/codeql-action/pull/2079) -## 2.23.0 - 08 Jan 2024 +## 3.23.0 - 08 Jan 2024 - We are rolling out a feature in January 2024 that will disable Python dependency installation by default for all users. This improves the speed of analysis while having only a very minor impact on results. You can override this behavior by setting `CODEQL_ACTION_DISABLE_PYTHON_DEPENDENCY_INSTALLATION=false` in your workflow, however we plan to remove this ability in future versions of the CodeQL Action. [#2031](https://github.com/github/codeql-action/pull/2031) - The CodeQL Action now requires CodeQL version 2.11.6 or later. For more information, see [the corresponding changelog entry for CodeQL Action version 2.22.7](#2227---16-nov-2023). [#2009](https://github.com/github/codeql-action/pull/2009) -## 2.22.12 - 22 Dec 2023 +## 3.22.12 - 22 Dec 2023 - Update default CodeQL bundle version to 2.15.5. [#2047](https://github.com/github/codeql-action/pull/2047) -## 2.22.11 - 13 Dec 2023 +## 3.22.11 - 13 Dec 2023 -No user facing changes. +- [v3+ only] The CodeQL Action now runs on Node.js v20. [#2006](https://github.com/github/codeql-action/pull/2006) ## 2.22.10 - 12 Dec 2023 diff --git a/package.json b/package.json index 55317bffb5..368668298c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "2.26.8", + "version": "3.26.8", "private": true, "description": "CodeQL action", "scripts": { From 9f0e9cc2e59cda01ffc188d5f5049b7e0ccad0f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:26:12 +0000 Subject: [PATCH 21/23] Revert "Update checked-in dependencies" This reverts commit 51826fb97a69f72ab388ee28b189601f80c1fafd. --- node_modules/.package-lock.json | 17 ++++++++++++++++- package-lock.json | 18 ++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 1691e6eefe..55680c3640 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "2.26.8", + "version": "3.26.8", "lockfileVersion": 3, "requires": true, "packages": { @@ -876,9 +876,17 @@ "license": "MIT" }, "node_modules/@types/node": { +<<<<<<< HEAD "version": "16.11.22", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" +======= + "version": "20.9.0", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } +>>>>>>> origin/releases/v3 }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -5952,6 +5960,13 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD +======= + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, +>>>>>>> origin/releases/v3 "node_modules/universal-user-agent": { "version": "6.0.0", "license": "ISC" diff --git a/package-lock.json b/package-lock.json index 9587596bab..178b75d5f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codeql", - "version": "2.26.8", + "version": "3.26.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codeql", - "version": "2.26.8", + "version": "3.26.8", "license": "MIT", "dependencies": { "@actions/artifact": "^1.1.2", @@ -49,7 +49,7 @@ "@types/console-log-level": "^1.4.5", "@types/get-folder-size": "^2.0.0", "@types/js-yaml": "^4.0.9", - "@types/node": "16.11.22", + "@types/node": "20.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", "@typescript-eslint/eslint-plugin": "^8.4.0", @@ -940,9 +940,11 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "16.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", - "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" + "version": "20.9.0", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -6016,6 +6018,10 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, "node_modules/universal-user-agent": { "version": "6.0.0", "license": "ISC" From e0927014d2ba6e50699b760abf08855b702cf19d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:26:13 +0000 Subject: [PATCH 22/23] Update version and changelog for v2.26.9 --- CHANGELOG.md | 89 +++++++++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 44 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8b2782c81..f751139ba1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,202 +4,199 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th Note that the only difference between `v2` and `v3` of the CodeQL Action is the node version they support, with `v3` running on node 20 while we continue to release `v2` to support running on node 16. For example `3.22.11` was the first `v3` release and is functionally identical to `2.22.11`. This approach ensures an easy way to track exactly which features are included in different versions, indicated by the minor and patch version numbers. -## 3.26.9 - 24 Sep 2024 +## 2.26.9 - 24 Sep 2024 No user facing changes. -## 3.26.8 - 19 Sep 2024 +## 2.26.8 - 19 Sep 2024 - Update default CodeQL bundle version to 2.19.0. [#2483](https://github.com/github/codeql-action/pull/2483) -## 3.26.7 - 13 Sep 2024 +## 2.26.7 - 13 Sep 2024 - Update default CodeQL bundle version to 2.18.4. [#2471](https://github.com/github/codeql-action/pull/2471) -## 3.26.6 - 29 Aug 2024 +## 2.26.6 - 29 Aug 2024 - Update default CodeQL bundle version to 2.18.3. [#2449](https://github.com/github/codeql-action/pull/2449) -## 3.26.5 - 23 Aug 2024 +## 2.26.5 - 23 Aug 2024 - Fix an issue where the `csrutil` system call used for telemetry would fail on MacOS ARM machines with System Integrity Protection disabled. [#2441](https://github.com/github/codeql-action/pull/2441) -## 3.26.4 - 21 Aug 2024 +## 2.26.4 - 21 Aug 2024 - _Deprecation:_ The `add-snippets` input on the `analyze` Action is deprecated and will be removed in the first release in August 2025. [#2436](https://github.com/github/codeql-action/pull/2436) - Fix an issue where the disk usage system call used for telemetry would fail on MacOS ARM machines with System Integrity Protection disabled, and then surface a warning. The system call is now disabled for these machines. [#2434](https://github.com/github/codeql-action/pull/2434) -## 3.26.3 - 19 Aug 2024 +## 2.26.3 - 19 Aug 2024 - Fix an issue where the CodeQL Action could not write diagnostic messages on Windows. This issue did not impact analysis quality. [#2430](https://github.com/github/codeql-action/pull/2430) -## 3.26.2 - 14 Aug 2024 +## 2.26.2 - 14 Aug 2024 - Update default CodeQL bundle version to 2.18.2. [#2417](https://github.com/github/codeql-action/pull/2417) -## 3.26.1 - 13 Aug 2024 +## 2.26.1 - 13 Aug 2024 No user facing changes. -## 3.26.0 - 06 Aug 2024 +## 2.26.0 - 06 Aug 2024 - _Deprecation:_ Swift analysis on Ubuntu runner images is no longer supported. Please migrate to a macOS runner if this affects you. [#2403](https://github.com/github/codeql-action/pull/2403) - Bump the minimum CodeQL bundle version to 2.13.5. [#2408](https://github.com/github/codeql-action/pull/2408) -## 3.25.15 - 26 Jul 2024 +## 2.25.15 - 26 Jul 2024 - Update default CodeQL bundle version to 2.18.1. [#2385](https://github.com/github/codeql-action/pull/2385) -## 3.25.14 - 25 Jul 2024 +## 2.25.14 - 25 Jul 2024 - Experimental: add a new `start-proxy` action which starts the same HTTP proxy as used by [`github/dependabot-action`](https://github.com/github/dependabot-action). Do not use this in production as it is part of an internal experiment and subject to change at any time. [#2376](https://github.com/github/codeql-action/pull/2376) -## 3.25.13 - 19 Jul 2024 +## 2.25.13 - 19 Jul 2024 - Add `codeql-version` to outputs. [#2368](https://github.com/github/codeql-action/pull/2368) - Add a deprecation warning for customers using CodeQL version 2.13.4 and earlier. These versions of CodeQL were discontinued on 9 July 2024 alongside GitHub Enterprise Server 3.9, and will be unsupported by CodeQL Action versions 3.26.0 and later and versions 2.26.0 and later. [#2375](https://github.com/github/codeql-action/pull/2375) - If you are using one of these versions, please update to CodeQL CLI version 2.13.5 or later. For instance, if you have specified a custom version of the CLI using the 'tools' input to the 'init' Action, you can remove this input to use the default version. - Alternatively, if you want to continue using a version of the CodeQL CLI between 2.12.6 and 2.13.4, you can replace `github/codeql-action/*@v3` by `github/codeql-action/*@v3.25.13` and `github/codeql-action/*@v2` by `github/codeql-action/*@v2.25.13` in your code scanning workflow to ensure you continue using this version of the CodeQL Action. -## 3.25.12 - 12 Jul 2024 +## 2.25.12 - 12 Jul 2024 - Improve the reliability and performance of analyzing code when analyzing a compiled language with the `autobuild` [build mode](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes) on GitHub Enterprise Server. This feature is already available to GitHub.com users. [#2353](https://github.com/github/codeql-action/pull/2353) - Update default CodeQL bundle version to 2.18.0. [#2364](https://github.com/github/codeql-action/pull/2364) -## 3.25.11 - 28 Jun 2024 +## 2.25.11 - 28 Jun 2024 - Avoid failing the workflow run if there is an error while uploading debug artifacts. [#2349](https://github.com/github/codeql-action/pull/2349) - Update default CodeQL bundle version to 2.17.6. [#2352](https://github.com/github/codeql-action/pull/2352) -## 3.25.10 - 13 Jun 2024 +## 2.25.10 - 13 Jun 2024 - Update default CodeQL bundle version to 2.17.5. [#2327](https://github.com/github/codeql-action/pull/2327) -## 3.25.9 - 12 Jun 2024 +## 2.25.9 - 12 Jun 2024 - Avoid failing database creation if the database folder already exists and contains some unexpected files. Requires CodeQL 2.18.0 or higher. [#2330](https://github.com/github/codeql-action/pull/2330) - The init Action will attempt to clean up the database cluster directory before creating a new database and at the end of the job. This will help to avoid issues where the database cluster directory is left in an inconsistent state. [#2332](https://github.com/github/codeql-action/pull/2332) -## 3.25.8 - 04 Jun 2024 +## 2.25.8 - 04 Jun 2024 - Update default CodeQL bundle version to 2.17.4. [#2321](https://github.com/github/codeql-action/pull/2321) -## 3.25.7 - 31 May 2024 +## 2.25.7 - 31 May 2024 - We are rolling out a feature in May/June 2024 that will reduce the Actions cache usage of the Action by keeping only the newest TRAP cache for each language. [#2306](https://github.com/github/codeql-action/pull/2306) -## 3.25.6 - 20 May 2024 +## 2.25.6 - 20 May 2024 - Update default CodeQL bundle version to 2.17.3. [#2295](https://github.com/github/codeql-action/pull/2295) -## 3.25.5 - 13 May 2024 +## 2.25.5 - 13 May 2024 - Add a compatibility matrix of supported CodeQL Action, CodeQL CLI, and GitHub Enterprise Server versions to the [README.md](README.md). [#2273](https://github.com/github/codeql-action/pull/2273) - Avoid printing out a warning for a missing `on.push` trigger when the CodeQL Action is triggered via a `workflow_call` event. [#2274](https://github.com/github/codeql-action/pull/2274) - The `tools: latest` input to the `init` Action has been renamed to `tools: linked`. This option specifies that the Action should use the tools shipped at the same time as the Action. The old name will continue to work for backwards compatibility, but we recommend that new workflows use the new name. [#2281](https://github.com/github/codeql-action/pull/2281) -## 3.25.4 - 08 May 2024 +## 2.25.4 - 08 May 2024 - Update default CodeQL bundle version to 2.17.2. [#2270](https://github.com/github/codeql-action/pull/2270) -## 3.25.3 - 25 Apr 2024 +## 2.25.3 - 25 Apr 2024 - Update default CodeQL bundle version to 2.17.1. [#2247](https://github.com/github/codeql-action/pull/2247) - Workflows running on `macos-latest` using CodeQL CLI versions before v2.15.1 will need to either upgrade their CLI version to v2.15.1 or newer, or change the platform to an Intel MacOS runner, such as `macos-12`. ARM machines with SIP disabled, including the newest `macos-latest` image, are unsupported for CLI versions before 2.15.1. [#2261](https://github.com/github/codeql-action/pull/2261) -## 3.25.2 - 22 Apr 2024 +## 2.25.2 - 22 Apr 2024 No user facing changes. -## 3.25.1 - 17 Apr 2024 +## 2.25.1 - 17 Apr 2024 - We are rolling out a feature in April/May 2024 that improves the reliability and performance of analyzing code when analyzing a compiled language with the `autobuild` [build mode](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes). [#2235](https://github.com/github/codeql-action/pull/2235) - Fix a bug where the `init` Action would fail if `--overwrite` was specified in `CODEQL_ACTION_EXTRA_OPTIONS`. [#2245](https://github.com/github/codeql-action/pull/2245) -## 3.25.0 - 15 Apr 2024 +## 2.25.0 - 15 Apr 2024 - The deprecated feature for extracting dependencies for a Python analysis has been removed. [#2224](https://github.com/github/codeql-action/pull/2224) - As a result, the following inputs and environment variables are now ignored: - - The `setup-python-dependencies` input to the `init` Action - The `CODEQL_ACTION_DISABLE_PYTHON_DEPENDENCY_INSTALLATION` environment variable - We recommend removing any references to these from your workflows. For more information, see the release notes for CodeQL Action v3.23.0 and v2.23.0. - Automatically overwrite an existing database if found on the filesystem. [#2229](https://github.com/github/codeql-action/pull/2229) - Bump the minimum CodeQL bundle version to 2.12.6. [#2232](https://github.com/github/codeql-action/pull/2232) - A more relevant log message and a diagnostic are now emitted when the `file` program is not installed on a Linux runner, but is required for Go tracing to succeed. [#2234](https://github.com/github/codeql-action/pull/2234) -## 3.24.10 - 05 Apr 2024 +## 2.24.10 - 05 Apr 2024 - Update default CodeQL bundle version to 2.17.0. [#2219](https://github.com/github/codeql-action/pull/2219) - Add a deprecation warning for customers using CodeQL version 2.12.5 and earlier. These versions of CodeQL were discontinued on 26 March 2024 alongside GitHub Enterprise Server 3.8, and will be unsupported by CodeQL Action versions 3.25.0 and later and versions 2.25.0 and later. [#2220](https://github.com/github/codeql-action/pull/2220) - If you are using one of these versions, please update to CodeQL CLI version 2.12.6 or later. For instance, if you have specified a custom version of the CLI using the 'tools' input to the 'init' Action, you can remove this input to use the default version. - Alternatively, if you want to continue using a version of the CodeQL CLI between 2.11.6 and 2.12.5, you can replace `github/codeql-action/*@v3` by `github/codeql-action/*@v3.24.10` and `github/codeql-action/*@v2` by `github/codeql-action/*@v2.24.10` in your code scanning workflow to ensure you continue using this version of the CodeQL Action. -## 3.24.9 - 22 Mar 2024 +## 2.24.9 - 22 Mar 2024 - Update default CodeQL bundle version to 2.16.5. [#2203](https://github.com/github/codeql-action/pull/2203) -## 3.24.8 - 18 Mar 2024 +## 2.24.8 - 18 Mar 2024 - Improve the ease of debugging extraction issues by increasing the verbosity of the extractor logs when running in debug mode. [#2195](https://github.com/github/codeql-action/pull/2195) -## 3.24.7 - 12 Mar 2024 +## 2.24.7 - 12 Mar 2024 - Update default CodeQL bundle version to 2.16.4. [#2185](https://github.com/github/codeql-action/pull/2185) -## 3.24.6 - 29 Feb 2024 +## 2.24.6 - 29 Feb 2024 No user facing changes. -## 3.24.5 - 23 Feb 2024 +## 2.24.5 - 23 Feb 2024 - Update default CodeQL bundle version to 2.16.3. [#2156](https://github.com/github/codeql-action/pull/2156) -## 3.24.4 - 21 Feb 2024 +## 2.24.4 - 21 Feb 2024 - Fix an issue where an existing, but empty, `/sys/fs/cgroup/cpuset.cpus` file always resulted in a single-threaded run. [#2151](https://github.com/github/codeql-action/pull/2151) -## 3.24.3 - 15 Feb 2024 +## 2.24.3 - 15 Feb 2024 - Fix an issue where the CodeQL Action would fail to load a configuration specified by the `config` input to the `init` Action. [#2147](https://github.com/github/codeql-action/pull/2147) -## 3.24.2 - 15 Feb 2024 +## 2.24.2 - 15 Feb 2024 - Enable improved multi-threaded performance on larger runners for GitHub Enterprise Server users. This feature is already available to GitHub.com users. [#2141](https://github.com/github/codeql-action/pull/2141) -## 3.24.1 - 13 Feb 2024 +## 2.24.1 - 13 Feb 2024 - Update default CodeQL bundle version to 2.16.2. [#2124](https://github.com/github/codeql-action/pull/2124) - The CodeQL action no longer fails if it can't write to the telemetry api endpoint. [#2121](https://github.com/github/codeql-action/pull/2121) -## 3.24.0 - 02 Feb 2024 +## 2.24.0 - 02 Feb 2024 - CodeQL Python analysis will no longer install dependencies on GitHub Enterprise Server, as is already the case for GitHub.com. See [release notes for 3.23.0](#3230---08-jan-2024) for more details. [#2106](https://github.com/github/codeql-action/pull/2106) -## 3.23.2 - 26 Jan 2024 +## 2.23.2 - 26 Jan 2024 - On Linux, the maximum possible value for the `--threads` option now respects the CPU count as specified in `cgroup` files to more accurately reflect the number of available cores when running in containers. [#2083](https://github.com/github/codeql-action/pull/2083) - Update default CodeQL bundle version to 2.16.1. [#2096](https://github.com/github/codeql-action/pull/2096) -## 3.23.1 - 17 Jan 2024 +## 2.23.1 - 17 Jan 2024 - Update default CodeQL bundle version to 2.16.0. [#2073](https://github.com/github/codeql-action/pull/2073) - Change the retention period for uploaded debug artifacts to 7 days. Previously, this was whatever the repository default was. [#2079](https://github.com/github/codeql-action/pull/2079) -## 3.23.0 - 08 Jan 2024 +## 2.23.0 - 08 Jan 2024 - We are rolling out a feature in January 2024 that will disable Python dependency installation by default for all users. This improves the speed of analysis while having only a very minor impact on results. You can override this behavior by setting `CODEQL_ACTION_DISABLE_PYTHON_DEPENDENCY_INSTALLATION=false` in your workflow, however we plan to remove this ability in future versions of the CodeQL Action. [#2031](https://github.com/github/codeql-action/pull/2031) - The CodeQL Action now requires CodeQL version 2.11.6 or later. For more information, see [the corresponding changelog entry for CodeQL Action version 2.22.7](#2227---16-nov-2023). [#2009](https://github.com/github/codeql-action/pull/2009) -## 3.22.12 - 22 Dec 2023 +## 2.22.12 - 22 Dec 2023 - Update default CodeQL bundle version to 2.15.5. [#2047](https://github.com/github/codeql-action/pull/2047) -## 3.22.11 - 13 Dec 2023 +## 2.22.11 - 13 Dec 2023 -- [v3+ only] The CodeQL Action now runs on Node.js v20. [#2006](https://github.com/github/codeql-action/pull/2006) +No user facing changes. ## 2.22.10 - 12 Dec 2023 diff --git a/package.json b/package.json index f8c8fe992d..c704145cd0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "3.26.9", + "version": "2.26.9", "private": true, "description": "CodeQL action", "scripts": { From a54d022c152fc1649fe51df34d3621e76475d502 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:30:59 +0000 Subject: [PATCH 23/23] Update checked-in dependencies --- node_modules/.package-lock.json | 17 +---------------- package-lock.json | 18 ++++++------------ 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index a8bdd56c87..b4e35b0b6a 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "3.26.9", + "version": "2.26.9", "lockfileVersion": 3, "requires": true, "packages": { @@ -885,17 +885,9 @@ "license": "MIT" }, "node_modules/@types/node": { -<<<<<<< HEAD "version": "16.11.22", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" -======= - "version": "20.9.0", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } ->>>>>>> origin/releases/v3 }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -6014,13 +6006,6 @@ "url": "https://github.com/sponsors/ljharb" } }, -<<<<<<< HEAD -======= - "node_modules/undici-types": { - "version": "5.26.5", - "license": "MIT" - }, ->>>>>>> origin/releases/v3 "node_modules/universal-user-agent": { "version": "6.0.0", "license": "ISC" diff --git a/package-lock.json b/package-lock.json index 141269a745..3935327057 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codeql", - "version": "3.26.9", + "version": "2.26.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codeql", - "version": "3.26.9", + "version": "2.26.9", "license": "MIT", "dependencies": { "@actions/artifact": "^1.1.2", @@ -49,7 +49,7 @@ "@types/console-log-level": "^1.4.5", "@types/get-folder-size": "^2.0.0", "@types/js-yaml": "^4.0.9", - "@types/node": "20.9.0", + "@types/node": "16.11.22", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", "@typescript-eslint/eslint-plugin": "^8.7.0", @@ -949,11 +949,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.9.0", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -6072,10 +6070,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "license": "MIT" - }, "node_modules/universal-user-agent": { "version": "6.0.0", "license": "ISC"